2010-03-09 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-03-09  Marek Safar  <marek.safar@gmail.com>
2
3         * cs-parser.jay (GetLocation): Use an expression when available.
4
5 2010-03-04  Marek Safar  <marek.safar@gmail.com>
6
7         A fix for bug #582579
8         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
9
10 2010-03-04  Marek Safar  <marek.safar@gmail.com>
11
12         A patch by kornelpal@gmail.com
13         
14         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
15         compiler generated classes sealed by default. Emit and close top
16         level compiler generated classes as well. 
17         
18         * support.cs: Use RuntimeHelpers.GetHashCode.
19
20 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
21
22         * Makefile: We need to use the internal bootstrapping gmcs for
23         net_2_1_bootstrap too now.
24
25 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
26
27         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
28
29 2010-03-02  Marek Safar  <marek.safar@gmail.com>
30
31         * cs-tokenizer.cs: Missed few locations in previous fix.
32
33 2010-03-02  Marek Safar  <marek.safar@gmail.com>
34
35         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
36         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
37         Report correct location for operator errors.
38
39 2010-03-02  Marek Safar  <marek.safar@gmail.com>
40
41         * typemanager.cs (IsDynamicType): Don't check external types when
42         the attribute is not external.
43
44 2010-02-24  Marek Safar  <marek.safar@gmail.com>
45
46         A fix for bug #582579
47         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
48         modifiers.
49
50 2010-02-24  Marek Safar  <marek.safar@gmail.com>
51
52         A fix for bug #581804
53         * ecore.cs: Fixed type comparison.
54
55 2010-02-08  Miguel de Icaza  <miguel@novell.com>
56
57         * namespace.cs (CompletionGetTypesStartingWith): Do not include
58         private types in the completion results.
59
60         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
61         ... let ?"
62
63 2010-02-17  Marek Safar  <marek.safar@gmail.com>
64
65         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
66         constraint parsing.
67
68 2010-02-14  Miguel de Icaza  <miguel@novell.com>
69
70         * eval.cs: Do not do the report printer dance unless the user has
71         set the DescribeTypes feature.
72
73 2010-02-10  Marek Safar  <marek.safar@gmail.com>
74
75         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
76
77 2010-02-08  Marek Safar  <marek.safar@gmail.com>
78
79         A fix for bug #577029
80         * anonymous.cs: Fixed TypeBuilder* check.
81
82 2010-02-06  Miguel de Icaza  <miguel@novell.com>
83
84         * eval.cs (CompileBlock): Also undo if there are problems during
85         semantic analysis, fixes various cases where invalid C# code would
86         be reported, but the internal changes would not be undone.
87
88 2010-02-03  Miguel de Icaza  <miguel@novell.com>
89
90         * driver.cs: Change the --fatal flag to allow a number to be
91         passed, this ignores the first N fatal errors.   Useful to debug
92         errors that do not happen on the first hit.
93
94         * cs-parser.jay (invocation_expression): accept both the
95         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
96         inside an invocation.
97
98         * driver.cs: Expose FatalErrors.
99
100         * eval.cs: Initialize the printer's Fatal property from the
101         Driver's FatalError flag, this allows csharp --fatal to work
102         again. 
103
104         Add support for calling Describe (typeof (TYPE)) if the expression
105         entered is a TYPE.
106         
107 2010-02-02  Marek Safar  <marek.safar@gmail.com>
108
109         A fix for bug #574991
110         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
111         --lint.
112
113 2010-02-02  Marek Safar  <marek.safar@gmail.com>
114
115         A fix for bug #575986
116         * expression.cs: Don't mutate typeof type definitions.
117
118 2010-01-28  Marek Safar  <marek.safar@gmail.com>
119
120         * decl.cs: Use only one set of modifiers.
121
122 2010-01-26  Marek Safar  <marek.safar@gmail.com>
123
124         A fix for bug #573329
125         * eval.cs: Don't disable error reporting completely on silent mode.
126         
127 2010-01-25  Marek Safar  <marek.safar@gmail.com>
128
129         A fix for bug #573312
130         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
131         pointer index of unknown size types greater than 2.
132
133 2010-01-15  Marek Safar  <marek.safar@gmail.com>
134
135         * *.cs: Use only 1 member kind enum.
136
137 2010-01-15  Marek Safar  <marek.safar@gmail.com>
138
139         * *.cs: Add event specification.
140
141 2010-01-14  Marek Safar  <marek.safar@gmail.com>
142
143         * membercache.cs: Extracted from decl.cs.
144         
145         * *.cs: Put more infrastructure in place.
146
147 2010-01-13  Marek Safar  <marek.safar@gmail.com>
148
149         * *.cs: Add property specification, unused yet.
150
151 2010-01-13  Marek Safar  <marek.safar@gmail.com>
152
153         * property.cs: Move all property based declarations into a new file.
154
155 2010-01-13  Marek Safar  <marek.safar at gmail.com>
156
157         * expression.cs (Conditional): Resolve reduced expression.
158
159 2010-01-13  Marek Safar  <marek.safar at gmail.com>
160
161         * *.cs: Introduced non-generic method specification.
162
163 2010-01-07  Marek Safar  <marek.safar@gmail.com>
164
165         * method.cs: Move all method based declarations into a new file.
166
167 2010-01-07  Marek Safar  <marek.safar@gmail.com>
168
169         * *.cs: Extract field specification.
170
171 2009-12-17  Marek Safar  <marek.safar@gmail.com>
172
173         * field.cs: Extracted from class.cs
174
175 2009-12-15  Marek Safar  <marek.safar@gmail.com>
176
177         * attribute.cs (GetFixedBuffer): Work on field definition only.
178
179 2009-12-15  Marek Safar  <marek.safar@gmail.com>
180
181         * *.cs: Clean up NET_4_0 conditional where possible.
182
183 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
184
185         support.cs (DynamicType): Assembly property returns the assembly builder.
186         This is required due to how compiler context works in corlib.
187
188 2009-12-14  Marek Safar  <marek.safar@gmail.com>
189
190         A fix for bug #564376
191         * assign.cs (LocalTemporary): Removed no longer needed special
192         by-ref handling.
193
194 2009-12-11  Marek Safar  <marek.safar@gmail.com>
195
196         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
197         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
198         enum for easier debugging.
199
200 2009-12-10  Marek Safar  <marek.safar@gmail.com>
201
202         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
203         point.
204         
205         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
206         directly.
207
208 2009-12-10  Marek Safar  <marek.safar@gmail.com>
209
210         * cs-parser.jay, statement.cs: Handle parser error in code
211         completition.
212
213 2009-12-10  Marek Safar  <marek.safar@gmail.com>
214
215         * ecore.cs: Ignore base imported methods when they are already
216         in method bag.
217         
218         * eval.cs: Handle non-existent keys.
219         
220         * report.cs, driver.cs: Make fatal work with console printer only.
221
222 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
223
224         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
225
226 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
227
228         * typemanager.cs: Add MakeGenericMethod that checks if the method
229         is really the generic method definition.
230
231         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
232         to inflate generic methods.
233
234 2009-12-08  Marek Safar  <marek.safar@gmail.com>
235
236         A fix for bug #561149
237         * anonymous.cs: Use actual type parameters when checking for generic
238         method host.
239
240 2009-12-08  Marek Safar  <marek.safar@gmail.com>
241
242         A fix for bug #561369
243         * expression.cs (DoNumericPromotion): Fixed typo.
244
245 2009-12-08  Marek Safar  <marek.safar@gmail.com>
246
247         *.cs: Moving to generics world.
248
249         cs-parser.jay: Removed current_array_type.
250
251 2009-12-07  Marek Safar  <marek.safar@gmail.com>
252
253         *.cs: Moving to generics world.
254
255 2009-12-04  Marek Safar  <marek.safar@gmail.com>
256
257         *.cs: Moving to generics world (day 2).
258
259 2009-12-03  Marek Safar  <marek.safar@gmail.com>
260
261         *.cs: Moving to generics world.
262
263 2009-12-02  Marek Safar  <marek.safar@gmail.com>
264
265         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
266         Encode dynamic type attribute for elements where attributes cannot
267         be used.
268
269 2009-12-01  Marek Safar  <marek.safar@gmail.com>
270
271          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
272          arguments by ref.
273
274 2009-12-01  Marek Safar  <marek.safar@gmail.com>
275
276         A fix for bug #360455
277         * class.cs: Never report a unused warning for generic events to
278         workaround wrong expression type.
279
280 2009-11-30  Marek Safar  <marek.safar@gmail.com>
281
282         A fix for bug #558305
283         * decl.cs, class.cs: Check partial method definitions using correct
284         flag.
285
286 2009-11-30  Marek Safar  <marek.safar@gmail.com>
287
288         * argument.cs: Don't cache rarely used dynamic flag.
289
290 2009-11-27  Marek Safar  <marek.safar@gmail.com>
291
292         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
293
294 2009-11-27  Marek Safar  <marek.safar@gmail.com>
295
296         * ecore.cs (SimpleName): Removed no longer needed in_transit as
297         Resolve is now non-reentrant (saves ~0.6MB for corlib).
298
299 2009-11-26  Marek Safar  <marek.safar@gmail.com>
300
301         A fix for bug #545081
302         * decl.cs: Check private nested types of nested types recursively.
303
304 2009-11-26  Marek Safar  <marek.safar@gmail.com>
305
306         A fix for bug #558305
307         * location.cs: Ignore self referencing #line directive
308
309 2009-11-26  Marek Safar  <marek.safar@gmail.com>
310
311         A fix for bug #558292
312         * class.cs: Allow single unsafe fixed buffer fields.
313
314 2009-11-26  Marek Safar  <marek.safar@gmail.com>
315
316         * expression: Optimize few more zero-based operations.
317
318 2009-11-26  Marek Safar  <marek.safar@gmail.com>
319
320         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
321         avoids boxing of literal values.
322
323 2009-11-26  Marek Safar  <marek.safar@gmail.com>
324
325         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
326         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
327         codegen.cs: LocatedToken redesing to avoid excessive allocation and
328         boxing (saves ~7MB for corlib). Also fixes presise token location.
329
330 2009-11-25  Marek Safar  <marek.safar@gmail.com>
331
332         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
333         common data buckers.
334
335 2009-11-24  Marek Safar  <marek.safar@gmail.com>
336
337         * expression.cs: Lower static array initializer barrier.
338         
339         * support.cs, driver.cs: Share reader buffer.
340
341 2009-11-23  Marek Safar  <marek.safar@gmail.com>
342
343         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
344
345 2009-11-23  Marek Safar  <marek.safar@gmail.com>
346
347         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
348         cleanup some obsolete code.
349
350 2009-11-20  Marek Safar  <marek.safar@gmail.com>
351
352         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
353         Expression.Resolve.
354
355 2009-11-20  Marek Safar  <marek.safar@gmail.com>
356
357         * *.cs: Resolved expressions are never resolved again, this helps to
358         uncover some not easy to find bugs and improve the performance.
359
360 2009-11-19  Marek Safar  <marek.safar@gmail.com>
361
362         * *.cs: Made constant expressions fully compatible with any other
363         expression.
364
365 2009-11-19  Marek Safar  <marek.safar@gmail.com>
366
367         * *.cs: DoResolve is a worker method and has to be protected.
368
369 2009-11-18  Marek Safar  <marek.safar@gmail.com>
370
371         * *.cs: More context specific handling.
372
373 2009-11-17  Marek Safar  <marek.safar@gmail.com>
374
375         * *.cs: More context specific handling.
376
377 2009-11-16  Marek Safar  <marek.safar@gmail.com>
378
379         * dynamic.cs, class.cs: Removed few fixed user types conversions.
380         
381         * symbolwriter.cs: Uses public ILOffset.
382
383 2009-11-13  Marek Safar  <marek.safar@gmail.com>
384
385         A fix for bug #553650
386         * generic.cs: Another missing TypeToCoreType, still too many to fix.
387
388 2009-11-13  Marek Safar  <marek.safar@gmail.com>
389
390         A fix for bug #555170
391
392         * class.cs, delegate.cs, enum.cs: Constants have to be available
393         for parameters resolve.
394
395 2009-11-12  Marek Safar  <marek.safar@gmail.com>
396
397         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
398         arrays.
399
400 2009-11-12  Marek Safar  <marek.safar@gmail.com>
401
402         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
403         with a statically known candidate set.
404
405 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
406
407         * generic.cs: Made type inflation for generic constraint checks
408         recursive. This fixes BGO #553655.
409
410 2009-11-11  Marek Safar  <marek.safar@gmail.com>
411
412         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
413         checks.
414
415 2009-11-10  Marek Safar  <marek.safar@gmail.com>
416
417         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
418         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
419         attribute.cs: Add some dynamic error checking.
420
421 2009-11-07  Marek Safar  <marek.safar@gmail.com>
422
423         A fix for bug #553465
424
425         * expression.cs: Fixed mixed version of expression tree anonymous
426         type.
427
428 2009-11-06  Marek Safar  <marek.safar@gmail.com>
429
430         A fix for bug #553031
431
432         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
433         expression tree version of anonymous type with members declaration.
434
435 2009-11-05  Marek Safar  <marek.safar@gmail.com>
436
437         * parameter.cs: Handle nullable parameter default expression.
438         
439         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
440         class.cs, attribute.cs: Check for wrong dynamic arguments.
441
442 2009-11-05  Marek Safar  <marek.safar@gmail.com>
443
444         * statement.cs: Dynamic statements.
445
446 2009-11-04  Marek Safar  <marek.safar@gmail.com>
447
448         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
449         Compound assignments over dynamic type.
450
451 2009-11-03  Marek Safar  <marek.safar@gmail.com>
452
453         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
454         constructor arguments.
455
456 2009-10-30  Marek Safar  <marek.safar@gmail.com>
457
458         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
459         codegen.cs: Unary mutator on dynamic member access expression.
460
461 2009-10-29  Marek Safar  <marek.safar@gmail.com>
462
463         A fix for bug #550580   
464         * convert.cs: Don't eliminate explicit precission casts.
465
466 2009-10-28  Marek Safar  <marek.safar@gmail.com>
467
468         A fix for bug #550404
469         
470         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
471         expression.cs, statement.cs, ecore.cs: Quote any nested expression
472         tree.
473
474 2009-10-27  Marek Safar  <marek.safar@gmail.com>
475
476         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
477         constant.
478         
479         * class.cs: Allow nullable binary user operators.
480
481 2009-10-26  Marek Safar  <marek.safar@gmail.com>
482
483         * expression.cs: Move binary expression optimization at the end of
484         resolve.
485
486 2009-10-23  Marek Safar  <marek.safar@gmail.com>
487
488         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
489         Separate NullConstant from NullLiteral.
490
491 2009-10-23  Marek Safar  <marek.safar@gmail.com>
492
493         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
494         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
495         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
496         ModuleContainer. Add common unclosed member check routine.
497
498 2009-10-22  Marek Safar  <marek.safar@gmail.com>
499
500         * argument.cs: Use literal flag for real literals only.
501
502         * dynamic.cs: Use correct return type for custom delegates.
503
504 2009-10-22  Marek Safar  <marek.safar@gmail.com>
505
506         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
507         resolver.
508
509 2009-10-22  Marek Safar  <marek.safar@gmail.com>
510
511         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
512
513 2009-10-21  Marek Safar  <marek.safar@gmail.com>
514
515         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
516         conversion.
517
518 2009-10-21  Marek Safar  <marek.safar@gmail.com>
519
520         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
521         binder flags.
522
523 2009-10-20  Marek Safar  <marek.safar@gmail.com>
524
525         * argument.cs, dynamic.cs, expression.cs: Latest API update.
526
527 2009-10-19  Marek Safar  <marek.safar@gmail.com>
528
529         * typemanager.cs, expression.cs: Dynamic array initializer.
530
531 2009-10-16  Marek Safar  <marek.safar@gmail.com>
532
533         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
534         is imported.
535
536 2009-10-16  Marek Safar  <marek.safar@gmail.com>
537
538         A fix for bug #493523, #507067
539         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
540         standard nullable conversion using underlying standard conversion
541         and not full conversion.
542
543 2009-10-15  Marek Safar  <marek.safar@gmail.com>
544
545         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
546         type in VerifyArgumentsCompat.
547
548 2009-10-15  Marek Safar  <marek.safar@gmail.com>
549
550         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
551         Reject variable used with type arguments.
552
553 2009-10-14  Marek Safar  <marek.safar@gmail.com>
554
555         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
556         Implement dynamic expressions assignment.
557
558 2009-10-14  Marek Safar  <marek.safar@gmail.com>
559
560         * expression.cs: Build underlying expression when resolving unary
561         mutators.
562
563 2009-10-14  Marek Safar  <marek.safar@gmail.com>
564
565         * expression.cs: Emit enum array initializer using binary blob.
566
567 2009-10-08  Marek Safar  <marek.safar@gmail.com>
568
569         * typemanager.cs, constant.cs: Optimize decimal constants which fit
570         to long range.
571
572 2009-10-07  Marek Safar  <marek.safar@gmail.com>
573
574         * typemanager.cs: Reset object_type.
575         
576         * assign: Made SimpleAssign public.
577
578 2009-10-06  Marek Safar  <marek.safar@gmail.com>
579
580         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
581         invocation assembly to IsThisOrFriendAssembly.
582
583 2009-10-05  Marek Safar  <marek.safar@gmail.com>
584
585         * expression.cs: Equality comparison of generic parameter with
586         class constraint.
587
588 2009-10-05  Marek Safar  <marek.safar@gmail.com>
589
590         A fix for bug #543570
591         * generic.cs: Import predefined constraints correctly.
592
593 2009-10-02  Marek Safar  <marek.safar@gmail.com>
594
595         * ecore.cs: Don't crash on overloads with optional paremeters where
596         arguments count overflows.
597         
598         * parameter.cs: Import optional parameter constants using optional
599         value type.
600
601 2009-10-01  Marek Safar  <marek.safar@gmail.com>
602
603         * Makefile: Default is gmcs compiler.
604
605 2009-10-01  Marek Safar  <marek.safar@gmail.com>
606
607         * cs-parser.jay: Fixed few NRE.
608
609 2009-10-01  Marek Safar  <marek.safar@gmail.com>
610
611         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
612
613 2009-09-30  Marek Safar  <marek.safar@gmail.com>
614
615         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
616         ShimExpression, ImplicitCast.
617
618 2009-09-30  Marek Safar  <marek.safar@gmail.com>
619
620         A fix for bug #542959
621         * delegate.cs: Emit correct delegate instance variable when there
622         are static and non-static overloads.
623
624 2009-09-29  Marek Safar  <marek.safar@gmail.com>
625
626         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
627         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
628
629 2009-09-28  Marek Safar  <marek.safar@gmail.com>
630
631         A fix for bug #542487
632         * ecore.cs: Resolve extension methods hidden by properties.
633
634 2009-09-25  Marek Safar  <marek.safar@gmail.com>
635
636         * expression.cs, ecore.cs: More dynamic binary expressions.
637
638 2009-09-22  Marek Safar  <marek.safar@gmail.com>
639
640         * nullable.cs, expression.cs: Fixed null lifted conversion for
641         bitwise enum operations.
642
643 2009-09-22  Marek Safar  <marek.safar@gmail.com>
644
645         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
646         values in checked context.
647
648 2009-09-22  Marek Safar  <marek.safar@gmail.com>
649
650         * expression.cs, ecore.cs: Fixed array index constant conversion.
651
652 2009-09-20  Miguel de Icaza  <miguel@novell.com>
653
654         * expression.cs: Do not crash when MemberLookup returns something
655         that is not a MemberExpr here.   Report error 582 instead. 
656
657         Fixes #499988.
658
659 2009-09-18  Marek Safar  <marek.safar@gmail.com>
660
661         * decl.cs, class.cs: Check protected property accessors.
662
663 2009-09-18  Marek Safar  <marek.safar@gmail.com>
664
665         * dynamic.cs, assign.cs: Dynamic compound assignment.
666
667 2009-09-17  Marek Safar  <marek.safar@gmail.com>
668
669         * expression.cs: Fixed compound assignment explicit conversion.
670
671 2009-09-17  Marek Safar  <marek.safar@gmail.com>
672
673         * expression.cs, ecore.cs: Cannot infer variables from method group.
674
675 2009-09-16  Marek Safar  <marek.safar@gmail.com>
676
677         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
678         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
679         codegen.cs: Dynamic binary operations scaffolding.
680
681 2009-09-15  Marek Safar  <marek.safar@gmail.com>
682
683         * expression.cs: Fixes nullable promotion for enum type variables.
684
685 2009-09-11  Marek Safar  <marek.safar@gmail.com>
686
687         * driver.cs, dynamic.cs: Reset more static variables.
688
689 2009-09-11  Marek Safar  <marek.safar@gmail.com>
690
691         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
692         driver.cs: Introduced Expression::MakeExpression.
693
694 2009-09-11  Marek Safar  <marek.safar@gmail.com>
695
696         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
697
698 2009-09-09  Marek Safar  <marek.safar@gmail.com>
699
700         * eval.cs, report.cs: Use Console.Out for all eval error or warning
701         output.
702
703 2009-09-09  Marek Safar  <marek.safar@gmail.com>
704
705         A fix for bug #518707
706         * expression.cs (Is): Optimize only generic parameter type
707         expression probing value type generic parameter.
708
709 2009-09-09  Marek Safar  <marek.safar@gmail.com>
710
711         A fix for bug #532571
712         * ecore.cs: Check for simple name type arguments used with
713         non-generic type.
714
715 2009-09-08  Marek Safar  <marek.safar@gmail.com>
716
717         A fix for bug #497421
718         * generic.cs (CheckConstraint): Don't use buildin types to check for
719         parameterless constructor.
720
721 2009-09-08  Marek Safar  <marek.safar@gmail.com>
722
723         A fix for bug #537402
724         * generic.cs (CheckConstraint): Correctly inflate generic type
725         arguments when checking generic method. 
726
727 2009-09-08  Marek Safar  <marek.safar@gmail.com>
728
729         A fix for bug #536463
730         * decl.cs (AddToContainer): Don't report collision between explicit
731         and parameterless non-explicit members.
732
733 2009-09-08  Marek Safar  <marek.safar@gmail.com>
734
735         * eval.cs: Reset more static stuff.
736
737 2009-09-07  Marek Safar  <marek.safar@gmail.com>
738
739         A fix for bug #324625
740         * expression.cs, ecore.cs: Create nested generic type expression
741         using declaring and not current type.
742
743 2009-09-07  Marek Safar  <marek.safar@gmail.com>
744
745         * *.cs: Changed Report class to accept various output printers and
746         be an instance class. An expression resolver can now use different
747         message reporter for each call and Report.Error can safely throw
748         an exception. Part of ongoing work to turn mcs into proper library.
749
750 2009-09-04  Marek Safar  <marek.safar@gmail.com>
751
752         * statement.cs, ecore.cs: Removed error reporting from emit code.
753
754 2009-09-04  Marek Safar  <marek.safar@gmail.com>
755
756         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
757
758 2009-09-03  Marek Safar  <marek.safar@gmail.com>
759
760         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
761         parser checks out of constructors.
762
763 2009-09-02  Marek Safar  <marek.safar@gmail.com>
764
765         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
766
767 2009-09-02  Marek Safar  <marek.safar@gmail.com>
768
769         A fix for bug #535448
770         * anonymous.cs, class.cs: Copy return label between all contexts.
771
772 2009-09-02  Marek Safar  <marek.safar@gmail.com>
773
774         A fix for bug #535395
775         * namespace.cs: Resolve context can be null.
776
777 2009-08-25  Marek Safar  <marek.safar@gmail.com>
778
779         A fix for bug #533912
780         * generic.cs: Use correct context for constraints resolving.
781
782 2009-08-25  Marek Safar  <marek.safar@gmail.com>
783
784         A fix for bug #532630
785         * driver.cs: Trim conditional symbols.
786
787 2009-08-25  Marek Safar  <marek.safar@gmail.com>
788
789         * context.cs: New file.
790         
791         * *.exe.sources, *.csproj: Updated.
792
793 2009-08-25  Marek Safar  <marek.safar@gmail.com>
794
795         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
796         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
797         IMembercontext, some small cleanups.
798
799 2009-08-24  Marek Safar  <marek.safar@gmail.com>
800
801         * *.cs: Split ResolveContext and EmitContext.
802
803 2009-08-24  Marek Safar  <marek.safar@gmail.com>
804
805         * *.cs: Only ResolveContext implements IMemberContext.
806
807 2009-08-21  Marek Safar  <marek.safar@gmail.com>
808
809         * *.cs: Renamed IResolveContext to IMemberContext.
810
811 2009-08-21  Marek Safar  <marek.safar@gmail.com>
812
813         * *.cs: Detached ResolveContext from EmitContext.
814
815 2009-08-21  Marek Safar  <marek.safar@gmail.com>
816
817         * codegen.cs: Moved flow-analysis to BlockContext.
818
819 2009-08-21  Marek Safar  <marek.safar@gmail.com>
820
821         * *.cs: Detached BlockContext from EmitContext.
822
823 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
824
825         * statement.cs: avoid nullref when the return value of GetEnumerator()
826         does not contain any MoveNext() method.
827
828 2009-08-19  Marek Safar  <marek.safar@gmail.com>
829
830         * *.cs: Removed IResolveContext::GenericDeclContainer.
831
832 2009-08-19  Marek Safar  <marek.safar@gmail.com>
833
834         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
835
836 2009-08-19  Marek Safar  <marek.safar@gmail.com>
837
838         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
839         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
840
841 2009-08-18  Marek Safar  <marek.safar@gmail.com>
842
843         * *.cs: Removed boolean fields from EmitContext.
844
845 2009-08-18  Marek Safar  <marek.safar@gmail.com>
846
847         * *.cs: Add IResolveContext::IsStatic.
848
849 2009-08-18  Marek Safar  <marek.safar@gmail.com>
850
851         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
852
853 2009-08-17  Marek Safar  <marek.safar@gmail.com>
854
855         * *.cs: Removed DeclContainer from EmitContext.
856
857 2009-08-17  Marek Safar  <marek.safar@gmail.com>
858
859         * *.cs: Add IResolveContext::CurrentTypeParameters.
860
861 2009-08-14  Marek Safar  <marek.safar@gmail.com>
862
863         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
864
865 2009-08-14  Marek Safar  <marek.safar@gmail.com>
866
867         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
868         codegen.cs: Add IResolveContext::LookupExtensionMethod.
869
870 2009-08-13  Marek Safar  <marek.safar@gmail.com>
871
872         * decl.cs: Look in PartialContainer for parent type parameters.
873
874 2009-08-13  Marek Safar  <marek.safar@gmail.com>
875
876         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
877         codegen.cs: Add IResolveContext::LookupTypeParameter.
878
879 2009-08-13  Marek Safar  <marek.safar@gmail.com>
880
881         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
882         Moved resolved logic from Emit to Resolve.
883
884 2009-08-13  Marek Safar  <marek.safar@gmail.com>
885
886         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
887         codegen.cs: Reworked atttributes handling of ResolveContext.
888
889 2009-08-12  Marek Safar  <marek.safar@gmail.com>
890
891         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
892         LookupNamespaceOrType to ResolveContext.
893
894 2009-08-12  Marek Safar  <marek.safar@gmail.com>
895
896         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
897         class.cs: Removed unused parameters and methods.
898
899 2009-08-11  Marek Safar  <marek.safar@gmail.com>
900
901         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
902         codegen.cs: Finding the best common type of a set of expressions for
903         lambda statements.
904
905 2009-08-07  Marek Safar  <marek.safar@gmail.com>
906
907         * dynamic.cs, expression.cs: More dynamic conversions.
908
909 2009-08-06  Miguel de Icaza  <miguel@novell.com>
910
911         * generic.cs: This loop was incorrect, it was increment ii, but
912         checking for `i'.  This was a change introduced to fix #327497,
913         now we fix #424012.
914  
915         * class.cs: Catch another case for cs0533 error, fixes #324782.
916
917 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
918
919         * typemanager.cs (GetGenericArguments): SRE returns null for
920         generic methods on type builder instances if they are not generic
921         themselves. For example, for Foo<int>::Bar() it returns null, but
922         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
923
924 2009-08-05  Marek Safar  <marek.safar@gmail.com>
925
926         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
927         delegate.cs: Work on dynamic binding.
928
929 2009-08-04  Marek Safar  <marek.safar@gmail.com>
930
931         A second fix for bug #525342
932         * class.cs: Attach partial method attributes to method
933         implementation.
934
935 2009-08-03  Marek Safar  <marek.safar@gmail.com>
936
937         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
938         restrictions.
939         
940         * rootcontext.cs: Default to langversion v4.
941
942 2009-08-03  Marek Safar  <marek.safar@gmail.com>
943
944         * pending.cs: Check return type before member info is set.
945
946 2009-08-03  Marek Safar  <marek.safar@gmail.com>
947
948         * anonymous.cs: Fully initialize generic hoisted field expression.
949
950 2009-08-02  Miguel de Icaza  <miguel@novell.com>
951
952         * cs-parser.jay: Flag variables declared on the interactive shell
953         as used to prevent the 168 warning about local variable not being
954         used. 
955
956 2009-07-31  Marek Safar  <marek.safar@gmail.com>
957
958         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
959         attribute.cs: Emit dynamic export attribute.
960
961 2009-07-30  Marek Safar  <marek.safar@gmail.com>
962
963         * expression.cs: More verifier work.
964
965 2009-07-29  Marek Safar  <marek.safar@gmail.com>
966
967         * nullable.cs: Fixed SRE crash during corlib compilation.
968
969 2009-07-29  Marek Safar  <marek.safar@gmail.com>
970
971         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
972         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
973         More TypeManager.TypeToCoreType needed.
974
975 2009-07-29  Marek Safar  <marek.safar@gmail.com>
976
977         * anonymous.cs: Update after recent SRE fixes.
978
979 2009-07-28  Marek Safar  <marek.safar@gmail.com>
980
981         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
982         version of GetFieldHandle for fields of generic types.
983
984 2009-07-27  Marek Safar  <marek.safar@gmail.com>
985
986         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
987         ecore.cs: Add TypeManager.IsDynamicType,
988         PredefinedAttributes.Dynamic.
989
990 2009-07-27  Marek Safar  <marek.safar@gmail.com>
991
992         A fix for bug #415375
993         * expression.cs: Fixed object and reference type parameter
994         comparison.
995
996 2009-07-27  Marek Safar  <marek.safar@gmail.com>
997
998         A fix for bug #525342
999         * class.cs: Attach partial method attributes to method
1000         implementation.
1001
1002 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1003
1004         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1005         Dynamic arguments.
1006
1007 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1008
1009         * anonymous.cs (MutateField): Add imported types handling.
1010
1011 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1012
1013         * expression.cs, delegate.cs: Moved arguments resolve into their
1014         counterparts expressions. Removed argument resolve from
1015         CollectionElementInitializer.
1016
1017 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1018
1019         A fix for bug #523683
1020         * convert.cs, delegate.cs: Use common overload mechanism for method
1021         group conversion check.
1022
1023 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1024
1025         A fix for bug #523899
1026         * generics.cs: Exact type inference with other bound types.
1027
1028 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1029
1030         Don't complain when the same type is implemented by the output
1031         assembly as well as multiple referenced assemblies
1032         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1033         'must_be_unique' flag.
1034         (GlobalRootNamespace): Update to changes.
1035         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1036         already have a type in hand.
1037
1038 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1039
1040         * expression.cs: More verifier instrumentation.
1041         
1042         * statement.cs: Do proper throw expression conversion.
1043
1044 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1045
1046         A fix for bug #522789
1047         * expression.cs: Mutate invocation return type.
1048
1049 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1050
1051         * anonymous.cs: Split assignable and readonly generated variable
1052         references.
1053
1054 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1055
1056         A fix for bug #521671
1057         * statement.cs: Fixed crash when checking missing type.
1058
1059 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1060
1061         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1062         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1063         class.cs, driver.cs: Work on dynamic binding.
1064
1065         * dynamic.cs: New file.
1066
1067         * *.sources, *.proj: Updated.
1068
1069 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1070
1071         * expression.cs (Conditional): Avoid double Resolve.
1072
1073 2009-07-13  Marcus Griep  <marcus@griep.us>
1074
1075         * ecore.cs: Fix obscure bug with resolving members of interfaces
1076         that hide parent interface members. Fixes bug #444388 and corrects
1077         bug #323096
1078
1079 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1080
1081         * expression.cs (LocalVariableReference): Bounce resolve.
1082
1083 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1084
1085         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1086         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1087         types to new class.
1088         
1089         * support.cs: New dynamic type wrapper.
1090
1091 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1092
1093         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1094         typed local variable.
1095
1096 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1097
1098         A fix for bug #519005
1099         * anonymous.cs: Use null_type as no return type placeholder.
1100
1101 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1102
1103         * generic.cs: Handle type inference of identical type parameters
1104         with different bounds.
1105
1106 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1107
1108         * expression.cs, class.cs: Events variance.
1109         
1110         * cs-parser.jay: Interface events error messages.
1111
1112 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1113
1114         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1115
1116 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1117
1118         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1119         parameter expression can be value-type New.
1120
1121         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1122
1123 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1124
1125         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1126         Implemented C# 4.0 named arguments.
1127
1128 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1129
1130         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1131         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1132         parameter modifier. Also fixes bug #515497.
1133
1134 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1135
1136         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1137         arguments expression to be implemented.
1138         
1139         *.sources: Add argument.cs
1140
1141 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1142
1143         * parameter.cs: Moved GetParameterIndexByName to base class.
1144         
1145         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1146         unused AType. Use argument's version of GetExpressionTree.
1147
1148 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1149
1150         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1151         arguments grammar.
1152
1153 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1154
1155         A fix for bug #514096
1156         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1157
1158 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1159
1160         * expression.cs: The first multi-dimensional array nested array
1161         initializers was not checked.
1162         
1163         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1164
1165 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1166
1167         A fix for bug #513400
1168         * nullable.cs (EmitEquality): Operands emit could be simplified for
1169         built-in types when we now emit user operators differently.
1170
1171 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1172
1173         * ecore.cs: Report inaccessible delegate methods correctly.
1174
1175 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1176
1177         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1178         cs-parser.jay: Implemented C# 4.0 optional parameters.
1179
1180 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1181
1182         * driver.cs: Removed broken DefineManifestResource.
1183
1184 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1185
1186         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1187         Use $(BOOTSTRAP_PROFILE) instead.
1188
1189 2009-06-12  Jb Evain  <jbevain@novell.com>
1190
1191         * rootcontext.cs: add a Platform field.
1192         * driver.cs: handle /platform.
1193         * codegen.cs: pass the proper flags according to
1194         the platform when saving the assembly.
1195
1196 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1197
1198         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1199         Add optional parameters grammar.
1200
1201 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1202
1203         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1204         driver.cs: Split lang version and metadata version.
1205
1206 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1207
1208         * decl.cs: Better overload ctor collision error message.
1209
1210 2009-06-05  Jb Evain  <jbevain@novell.com>
1211
1212         * driver.cs (EmbededResource): avoid using an internal method
1213         in gmcs to embed manifest resources.
1214
1215 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1216
1217         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1218         the compiler from older mono versions (like moon's bots)
1219
1220 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1221
1222         * namespace.cs (LookupTypeReflection): Ignore collisions between
1223         forwarded types.
1224
1225 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1226
1227         * codegen.cs: Enabled generic type forwarders.
1228
1229 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1230
1231         * dmcs.*: Add another version of SRE compiler.
1232
1233 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1234
1235         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1236         generic-mcs.cs: Fixed variant type conversions.
1237
1238 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #507863
1241         * codegen.cs: Fixes a crash on invalid string value attribute.
1242
1243 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1244
1245         A fix for bug #508334
1246         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1247         cs-parser.jay: Fully import __arglist modifier.
1248
1249 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1250
1251         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1252         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1253         actually work with closed generic types.
1254
1255 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1256
1257         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1258         Fix the build by replacing the use of 'var' with the actual type.
1259
1260 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1261
1262         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1263     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1264         declarations.
1265           
1266         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1267         filter.
1268
1269 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1270                         Marek Safar  <marek.safar@gmail.com>
1271
1272         A fix for bug #377509
1273         * parameter.cs: Use predefined and not empty name for implicit
1274         setters.
1275
1276 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1277
1278         * class.cs: Don't report wrong warnings for event fields.
1279
1280 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1281
1282         A fix for bug #504667
1283         * class.cs: Check for static class using parent container instead of
1284         parent type.
1285
1286 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1287
1288         A fix for bug #496922
1289         * expression.cs: Always use temporary variable when using object
1290         initializer.
1291
1292 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1293
1294         A fix for bug #495112
1295         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1296         local cache.
1297
1298 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1299
1300         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1301
1302 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1303
1304         * complete.cs: No idea how gonzalo got a null in the list, but
1305         avoid crashing.
1306
1307 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1308
1309         * complete.cs (CompletionElementInitializer): New completion class
1310         to support completing inside a C# 3 element initializer, so this
1311         allows completion for Silverlight situations where it is very
1312         common to do:
1313
1314         new TextBlock () { Fo<TAB>
1315
1316         (CompletionSimpleName): Expose the prefix that was
1317         passed to the simple name.
1318
1319         * cs-parser.jay (object_or_collection_initializer): Add support
1320         for element_initializers.
1321
1322         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1323         special case completion expressions as this method aggressively
1324         collects data before it operates, and errors were being thrown
1325         earlier than we were able to complete.
1326
1327 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1328
1329         * eval.cs: Make getcompletions silent and enable debugging output
1330         if the -v option is passed.
1331
1332         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1333         Consider looking up the namespace that matches the prefix being
1334         used. 
1335
1336         This is part of the support for allowing completions like:
1337         `System.Co<TAB>' to complete to System.Console.
1338
1339         * complete.cs (CompletionSimpleName.AppendResults): Make this
1340         routine reusable.
1341
1342 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1343
1344         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1345         COMPLETE_COMPLETION as internal.
1346
1347 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1348
1349         * complete.cs: Include namespace resolution in simple names as
1350         well as global types and types in the using scope in the
1351         resolution. 
1352
1353         * namespace.cs: Supporting infrastrcture to provide completions
1354         based on the current using scope. 
1355
1356         * eval.cs: Introduce an entry point that allows for initialization
1357         to return a list of the files passed on the command line.
1358
1359 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1360
1361         A fix for bug #494243
1362         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1363
1364 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1365
1366         A fix for bug #493887
1367         * statement.cs: Don't skip string multi-section with default or
1368         null label when populating string hashtable.
1369
1370 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1371
1372         A fix for bug #492329
1373         * expression.cs (New): Load variable when assigning type parameter
1374         to ref variable.
1375
1376 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1377
1378         A fix for bug #488960
1379         * decl.cs: Compare MVAR types using non-null values.
1380
1381 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1382
1383         * typemanager.cs, expression.cs: Removed unused nullable checks.
1384
1385 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1386
1387         * *.cs: Removed some gmcs conditionals.
1388
1389 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1390
1391         * generic.cs, support.cs: Moved generics stuff out of support.cs
1392
1393 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1394
1395         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1396         DeclaringType.
1397
1398 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1399
1400         * attribute.cs: Consider all members for error reporting when
1401         checking named arguments.
1402
1403 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1404
1405         A fix for bug #487625
1406         * namespace.cs: Use a warning for all predefined type conflicts.
1407
1408 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1409
1410         A fix for bug #485706
1411         * statement.cs: Explicitly type catch type argument to pass verifier
1412         check.
1413
1414 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1415
1416         Initial support to provide code completion facilities to consumers
1417         of the evaluator API.
1418         
1419         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1420         support the completion engine.   When we reach the end of the
1421         input stream instead of returning EOF, when this flag is true the
1422         tokenizer instead produces:
1423
1424                 One GENERATE_COMPLETION token: this token then must be
1425                 handled in the grammar at every point where the user
1426                 would likely request a completion.
1427
1428                 As many COMPLETE_COMPLETION tokens as necessary.   These
1429                 tokens are generated to assist the parser in unwinding and
1430                 producing a valid parse tree.    
1431
1432         The parser rules do not have to be perfect, the parser needs to be
1433         augmented with judicious use of GENERATE_COMPLETION tokens to
1434         improve the areas where we can provide completion and the parser
1435         needs to add support for COMPLETE_COMPLETION tokens in productions
1436         to make them work.
1437
1438         It is common to not have enough support for COMPLETE_COMPLETION
1439         under certain rules and that even if we generated the
1440         GENERATE_COMPLETION token that the resulting tree will be invalid
1441         due to the missing rules that support COMPLETE_COMPLETION.
1442
1443         The final EOF token is produced by having the parser notify the
1444         tokenizer when it reaches the root production that the next token
1445         should be EOF.
1446
1447         * support.cs (CompletionResult): New Exception.   This exception
1448         is thrown to return the completion results when one of the special
1449         completion expressions is reached.
1450
1451         This exception is thrown by the completing ExpressionStatements
1452         classes that live in complete.cs
1453
1454         * complete.cs (CompletingExpression): a new base class for
1455         completing expressions.   This derives from the
1456         ExpressionStatement class and not from Expression as it allows
1457         completion to happen not only where expressions are expected in
1458         the grammar, but also where statements are expected.
1459
1460         (CompletionSimpleName): A new class used to provide completions
1461         for SimpleNames.     This currently only resolves to local
1462         variables from the evaluator context (GetVars call).
1463
1464         (CompletionMemberAccess): Implements support for completing member
1465         access patterns. 
1466
1467         * cs-parser.jay: Add support for completion in a few places. 
1468
1469         * eval.cs (GetCompletions): New public API for the evaluator that
1470         returns a list of possible completions given the input.   The
1471         return value is an array of completions 
1472
1473         * anonymous.cs (Compatible): If the exception thrown from the
1474         resolved expression is a CompletionResult exception let that one
1475         through instead of printing a diagnostic error in the try/catch. 
1476 <       
1477 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1478
1479         * 
1480
1481         * driver.cs (Main): Use Environment.Exit to quit quickly and
1482         prevent the compiler from doing the usual wait for helper thread
1483         to terminate.  
1484
1485         This is to prevent a slowdown that was reported by Gonzalo on
1486         ASP.NET 
1487
1488 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1489
1490         * ecore.cs: Load build-in types directly instead of accessing
1491         an internal field.
1492
1493 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1494
1495         * ecore.cs: Always use unbox.any when available.
1496
1497 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1498
1499         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1500
1501 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1502
1503         * generic.cs: Removed obsolete version of type inference.
1504
1505 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1506
1507         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1508         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1509         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1510         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1511
1512 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1513
1514         A fix for bug #482996
1515         * anonymous.cs: Make sure we are not infering return type when
1516         checking type compatibility.
1517
1518 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1519
1520         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1521         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1522         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1523         attributes in their own structure. Needed when accessing their
1524         properties before they are resolved.
1525
1526 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1527
1528         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1529         hashtable (~10x faster).
1530         
1531         * driver.cs: Removed wrong Reset.
1532
1533 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1534
1535         * class.cs: Use correct common base type for unmanaged delayed
1536         check.
1537
1538         * rootcontext.cs: Wrap unhandled exception.
1539
1540 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1541
1542         Make SeekableStreamReader self-tuning and arbitrarily seekable
1543         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1544         the buffer.
1545         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1546         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1547         buffer size when the stream needs to be re-read from the beginning.
1548
1549 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1550
1551         A fix for bug #480100
1552         * parameter.cs: A parameter is not hoisted when used directly as ET.
1553
1554 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1555
1556         * statement.cs: Fixed an issue when using variable is of interface
1557         type.
1558
1559 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1560
1561         A fix for bug #480319
1562         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1563
1564 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1565
1566         A fix for bug #480867
1567         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1568         expression to have no valid type.
1569
1570 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1571
1572         A fix for bug #481258
1573         * class.cs: Set extension method flag in partial container.
1574
1575 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1576
1577         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1578         
1579         * attribute.cs: Add sanity check.
1580
1581 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1582
1583         * class.cs: Add external constructor error.
1584
1585 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1586
1587         A fix for bug #475354
1588         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1589         correctly user defined nullable equality operators.
1590
1591 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1592
1593         A fix for bug #479532
1594         * expression.cs: Implement NewInitialize::AddressOf.
1595
1596 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1597
1598         A fix for bug #413633
1599         * expression.cs: Iterate all base class-constraint types.
1600
1601 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1602
1603         A fix for bug #479209
1604         * literal.cs: Mutate null underlying type.
1605
1606 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1607
1608         A fix for bug #476295
1609         * convert.cs: Avoid wrapping implicitly convertible reference type.
1610
1611 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1612
1613         * iterators.cs: Create MemberName correctly.
1614
1615 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1616
1617         A fix for bug #478655
1618         * literal.cs: Check also underlying null type conversion.
1619
1620 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1621
1622         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1623
1624 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1625
1626         A fix for bug #477447
1627         * statement.cs: Add reference to correct parent storey when this
1628         is accessible from deep children storey (more than 1 level).
1629
1630 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1631
1632         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1633         * class.cs: Define base type members before setting up member cache.
1634
1635 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1636
1637         A fix for bug #477378
1638         * nullable.cs, expression.cs, statement.cs: More precise null type
1639         sanity checks.
1640
1641 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1642
1643         A fix for bug #472805
1644         * typemanager.cs, namespace.cs: Import only visible extension method
1645         types.
1646
1647 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1648
1649         A fix for bug #476895
1650         * attribute.cs: Use correct resolve context for attribute type.
1651
1652 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1653
1654         A fix for bug #476266
1655         * anonymous.cs: Mutate multi-dimensional arrays.
1656
1657 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1658
1659         A fix for bug #476400
1660         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1661
1662 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1663
1664         A fix for bug #476811
1665         * generics.cs: Fixed null-literal check.
1666
1667 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1668
1669         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1670         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1671         messing with static variables.
1672
1673 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1674
1675         A fix for bug #475965
1676         * generics.cs: Check generic parameter type after extracting from
1677         Expression<T>.
1678
1679 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1680
1681         A fix for bug #475823
1682         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1683         typed-null support.
1684
1685 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1686
1687         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1688         Simplified event field definition using backing field and not
1689         field builder directly.
1690
1691         * expression.cs (EmitLdArg): Optimize fast paths.
1692
1693 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1694
1695         A fix for bug #475327
1696         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1697
1698 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1699
1700         A fix for bug #475342
1701         * cs-parser.jay: Using 'super' instead of 'base' to call base
1702         constructor crashes compiler.
1703
1704 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1705
1706         A fix for bug #475354
1707         * expression.cs (Constantify): Add nullable types.
1708         
1709         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1710
1711 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1712
1713         A fix for bug #475246
1714         * expression.cs: More broken flowanalysis hacking needed.
1715
1716 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1717
1718         * attribute.cs: Compare only ref/out array modifiers. 
1719
1720 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1721
1722         * statement.cs: Use member cache when looking for foreach members.
1723
1724 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1725
1726         * expression.cs: Don't expose internal initializer types.
1727         
1728         * statement.cs: Check also explicit conversions for goto case.
1729
1730 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1731
1732         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1733
1734 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1735
1736         * *.cs: Replace null-type with NullLiteral where appropriate.
1737
1738 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1739
1740         * expression.cs: Initializer of reference argument use temporary
1741         variable to be verifiable.
1742         
1743         * parameter.cs: Share EmitLdArg.
1744
1745 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1746
1747         A fix for bug #473559
1748         * class.cs: Fixed: Not reporting error about nested class with the
1749         same name.
1750
1751 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1752
1753         Contributed under the MIT/X11 license.
1754
1755         * generic.cs: Added VerifyVariantTypeParameters which performs new
1756         variance verification logic. The old logic, based on the spec, was
1757         wrong because the spec is full of LIES!
1758
1759         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1760
1761         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1762
1763         * class.cs:
1764         * ecore.cs: Added calls to the new variance verification logic.
1765
1766         * parameter.cs:
1767         * delegate.cs: Removed calls to the old variance verification logic.
1768
1769 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1770
1771         * delegate.cs: Use cached Invoke method directly.
1772
1773 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1774
1775         * expression.cs: Emit expression tree for hoisted variable access.
1776
1777 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1778
1779         * namespace.cs: Add better extension class check.
1780
1781 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1782
1783         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1784
1785 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1786
1787         This patch adds initial generic variance support to the compiler.
1788         It is contributed under the MIT/X11 license.
1789
1790         * typemanager.cs: Modified ImplementsInterface to check variance.
1791         Added VerifyVariantTypeParameters which checks the specified type to see
1792         if it uses a variant type parameter as a type argument (which is not
1793         allowed). Added IsVariantOf which determins if the first type is a
1794         variant of the second. NOTE: This only supports reference types at
1795         the moment to conform with the current level of VM support. When the
1796         VM supports value types, this will follow step.
1797
1798         * generic.cs: Added the Variance enum. Added a Variance property to
1799         TypeParameter and added variance support to definition phase. Added a
1800         Variance property to TypeParameterName. Also check to make sure that
1801         no variant types appear in generic method parameters.
1802
1803         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1804         keywords if the langversion supports it.
1805
1806         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1807         that variant types are only used in legal positions. Also added
1808         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1809         parameters.
1810
1811         * decl.cs: Construct TypeParameter with the variance information.
1812
1813         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1814         and ImplicitConversionStandard.
1815
1816         * rootcontext.cs: Added new "Future" language version.
1817
1818         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1819         type parameters are not used as type arguments in interface inheritance.
1820         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1821         parameters are not used as method return types. In MemberBase.
1822         ResolveMemberType, ensure that variant type parameters are not used
1823         as type arguments. Also call VerifyNoVariantTypeParameters on every
1824         set of parameters which are resolved.
1825
1826         * delegate.cs: Modified Delegate.Define to ensure that variant
1827         parameters are not used as type arguments and that a contravariant
1828         parameter is not used as the return type. Also call
1829         VerifyNoVariantTypeParameters on the delegate parameters.
1830
1831         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1832         to specify generic variance.
1833
1834         * driver.cs: Added support for LanguageVersion.Future in the form of
1835         "-langversion:future".
1836
1837         * generic-mcs.cs: Stubbed out new members in generic.cs.
1838
1839 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1840
1841         * class.cs, generic.cs: Emit type parameter constraints for nested
1842         types.
1843
1844 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1845
1846         A fix for bug #471213
1847         * class.cs: Avoid emitting backing field for abstract event fields.
1848
1849 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1850
1851         A fix for bug #359731
1852         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1853         expressions.
1854
1855 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1856
1857         A fix for bug #470767
1858         * statement.cs: Introduced BlockScopeExpression, needed when 
1859         expression tree conversion has to emit scope variables.
1860
1861 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1862
1863         * class.cs: Remove duplicate CallingConvention.
1864
1865 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1866
1867         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1868         when I finally found the right naming convention.
1869
1870 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1871
1872         * cs-tokenizer.cs: Put back different open parens optimization.
1873
1874 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1875
1876         A fix for bug #470227
1877         * cs-tokenizer.cs: Remove too agressive parser optimization.
1878
1879 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1880
1881         A fix for bug #324319
1882         * class.cs: Remove too early base type resolve.
1883
1884 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1885
1886         A fix for bug #324319
1887         * ecore.cs: Explicitly type null when assigning to type argument to
1888         make pass verifier check.
1889
1890 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1891
1892         * anonymous.cs: Fixed recent regression when initializing captured 
1893         this.
1894
1895 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1896
1897         A fix for bug #469019
1898         * anonymous.cs: Use all parent type parameters when instantiating
1899         nested generic storey.
1900
1901 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1902
1903         * expression.cs: Check for null instance methodgroup expression.
1904
1905 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1906
1907         A fix for bug #469244
1908         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1909         instance inside a conditional expression.
1910
1911 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1912
1913         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1914         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1915         GetElementType and HasElementType. IsValueType clean up.
1916
1917 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1918
1919         * nullable.cs: Use common EmitCall.
1920         
1921         * expression.cs: Emit constraint. for virtual calls only.
1922
1923 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1924
1925         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1926         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1927         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1928         checks.
1929
1930 2009-01-22  Jb Evain  <jbevain@novell.com>
1931
1932         * anonymous.cs: make anonymous types' ToString implementation
1933         match what csc outputs.
1934
1935 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1936
1937         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1938         up.
1939
1940 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1941
1942         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1943         verifier checks.
1944
1945 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1946
1947         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1948         expressions.
1949
1950 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1951
1952         A fix for bug #466634
1953         * statement.cs: Add reference for nested storey when only this
1954         is captured.
1955
1956 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1957
1958         A fix for bug #466474
1959         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1960         was specified.
1961
1962 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1963
1964         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1965         Fixed nested stories parent referencing process. Also fixes #463985.
1966
1967 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1968
1969         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1970         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1971         implementation. Also fixes #463108.
1972
1973 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1974
1975         A fix for bug #416109
1976         * decl.cs: Issue correct CLSAttribute warning location.
1977
1978 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1979
1980         A fix for bug #456775
1981         * attribute.cs: Use attribute owner scope when resolving attribute
1982         arguments.
1983
1984 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1985
1986         A fix for bug #457257
1987         * decl.cs: Fixed incorrect member declaring type comparison.
1988
1989 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1990
1991         A fix for bug #460896
1992         * driver.cs: Handle /RES resources as embeddable.
1993
1994 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1995
1996         A fix for bug #462515
1997         * ecore.cs: Report inacessible members upwards.
1998
1999 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2000
2001         A fix for bug #463190, #463192
2002         * decl.cs, namespace.cs: Also import internal extension classes.
2003
2004 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2005
2006         A fix for bug #463415
2007         * generic.cs: Use right index for RemoveDependentTypes.
2008
2009 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2010
2011         A fix for bug #463196
2012         * expression.cs: Fixed enum to null comparison.
2013
2014 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2015
2016         A fix for bug #463121
2017         * nullable.cs: Fixed nullable user equality operator comparison.
2018
2019 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2020
2021         A fix for bug #462950
2022         * class.cs, decl.cs: Use full explicit name when defining automatic
2023         property backing field.
2024
2025 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2026
2027         A fix for bug #462592
2028         * pending.cs: Emit type arguments for generic proxy method.
2029
2030 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2031
2032         * expression.cs (As): Mutate all type arguments.
2033
2034 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2035
2036         A fix for bug #462622
2037         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2038         context.
2039
2040 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2041
2042         A fix for bug #450782
2043         * ecore.cs: Consider more variables of form V.I to be fixed.
2044
2045 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2046
2047         A fix for bug #460712
2048         * typemanager.cs: Core types could be imported.
2049
2050 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2051
2052         A fix for bugs #460847, #460772, #458049, #457339, #447807
2053         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2054         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2055         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2056         user lambdas used inside query clauses.
2057
2058 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2059
2060         A fix for bug #460229
2061         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2062
2063 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2064
2065         A fix for bug #459952
2066         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2067
2068 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2069
2070         A fix for bug #459630
2071         * convert.cs: Enum to valuetype conversion is not allowed.
2072
2073 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2074
2075         A fix for bug #457087
2076         * generic.cs: Don't crash when constraint comes from type
2077         declaration.
2078
2079 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2080
2081         A fix for bug #459221
2082         * anonymous.cs, statement.cs: Delay only captured this
2083         initialization.
2084
2085 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2086
2087         A fix for bug #457489
2088         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2089         and initialization to capture scope initializers correctly.
2090
2091 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2092
2093         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2094         ParameterReference refactoring.
2095
2096 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2097
2098         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2099         to be imported from any assembly.
2100
2101 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2102
2103         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2104         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2105         from anonymous method and lambda expression.
2106
2107 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2108
2109         A fix for bug #448560
2110         * expression.cs (As): Box any generic type arguments to be
2111         verifiable.
2112
2113 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2114
2115         Add tripwire for implicit conversion bugs
2116         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2117         for CS1501 error.
2118         (MethodGroupExpr.OverloadResolve): Add sanity check between
2119         IsApplicable and VerifyArgumentsCompat.
2120         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2121
2122 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2123
2124         Fix build break in System.Data_test
2125         * convert.cs (ImplicitConversionExists): Move NullLiteral
2126         conversions ...
2127         (ImplicitStandardConversionExists): ... here.
2128
2129 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2130
2131         * literal.cs: Emit correctly explicit null to nullable cast.
2132
2133 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2134
2135         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2136         resolve.
2137
2138 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2139
2140         A fix for bug #449005
2141         * convert.cs, nullable.cs: Use only one implicit nullable
2142         conversion.
2143
2144 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2145
2146         * convert.cs, literal.cs: More Convert cleanup is needed.
2147
2148 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2149
2150         * decl.cs, class.cs: Fixed misleading error message.
2151
2152 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2153
2154         A fix for bug #449005
2155         * nullable.cs (EmitEquality): Disable optimization for user operator
2156         operands.
2157
2158 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2159
2160         A fix for bug #447027
2161         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2162         with context variables stored as expression instances.
2163
2164 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2165
2166         A fix for bug #447027
2167         * delegate.cs: Fixed delegate VerifyMethod logic.
2168
2169 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2170
2171         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2172         but not verifiable.
2173
2174 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2175
2176         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2177         member type resolve to follow normal flow, instead of random
2178         property access.
2179
2180 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2181
2182         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2183         type.
2184
2185 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2186
2187         * const.cs: Emit decimal array constant as literal.
2188
2189 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2190
2191         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2192
2193 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2194
2195         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2196         into real property (saves 8 MB for corlib compilation).
2197
2198 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2199
2200         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2201         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2202         generic-mcs.cs: Small cleanup of TypeArguments.
2203
2204 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2205
2206         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2207         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2208         of ConstructedType expression, renamed to GenericTypeExpr.
2209
2210 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2211
2212         A fix for bug #445303
2213         * location.cs (IsConditionalDefined): Handle undefined global
2214         defines.
2215
2216 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2217
2218         A fix for bug #444678
2219         * expression.cs (TryReduceConstant): Always create new constant
2220         instance.
2221
2222 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2223
2224         A fix for bug #444673
2225         * ecore.cs: Ignore open generic types when used as generic type
2226         instance fields.
2227
2228 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2229
2230         A fix for bug #445458
2231         * expression.cs, cs-parser.jay: Don't crash when an expression
2232         statement is null.
2233
2234 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2235
2236         A fix for bug #445464
2237         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2238         inside unbound type.
2239
2240 2008-11-14  Jb Evain  <jbevain@novell.com>
2241
2242         * driver.cs: ignore empty -nowarn argument such as
2243         the one in -nowarn:12,13,,.
2244
2245 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2246
2247         A fix for bug #444271
2248         * anonymous.cs: Rescan parent storeys when best candidate was
2249         undone.
2250
2251 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2252
2253         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2254         useless UnboundTypeExpression.
2255         
2256         * attribute.cs: Do check obsolete attribute on generic types.
2257
2258 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2259
2260         A fix for bugs #425680, #400139
2261         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2262         refactoring.
2263
2264 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2265
2266         A fix for bug #435747
2267         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2268         compound value types assignment. Few micro optimizations added.
2269
2270 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2271
2272         A fix for bug #442610
2273         * anonymous.cs (MutateConstructor): More SRE hacking.
2274
2275 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2276
2277         A fix for bug #442579
2278         * ecore.cs: Also initialize expanded form of a method with 1 params
2279         parameter.
2280
2281 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2282
2283         * expression.cs (UnaryMutator): Do early l-side check.
2284
2285 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2286
2287         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2288         Init, otherwise we would crash later on when checking for friend
2289         assemblies. 
2290
2291         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2292         Otherwise we never get any meaningful information as to what
2293         failed. 
2294
2295 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2296
2297         A fix for bug #436318
2298         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2299
2300 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2301
2302         * namespace.cs: Turns out that it was a really bad idea to hide
2303         the errors for namespaces not found here in eval mode.    
2304
2305         * eval.cs: When we process using clauses, only enter those into
2306         the list of valid using clauses after they have been validated.   
2307
2308         The above change gives the proper semantics: it does not
2309         senselessly report the same errors with broken using statements by
2310         never storing them in the first place when they are invalid.
2311
2312 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2313
2314         A fix for bug #421839
2315         * cs-parser.jay: Remove expression from coalesce rule to force lower
2316         priority than the assignment operator.
2317
2318 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2319
2320         A fix for bug #437875
2321         * nullable.cs: Compile correctly method group operand used with null
2322         coalescing operator.
2323
2324 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2325
2326         A fix for bug #434589
2327         * expression.cs (Binary): Ignore lifted conversions when at least
2328         one operand is of reference type.
2329
2330 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2331
2332         * cs-parser.jay: Better syntax error report.
2333
2334 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2335
2336         A fix for bug #436792
2337         * cs-parser.jay: Use GetLocation to access location.
2338
2339 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2340
2341         A fix for bug #440774
2342         * cs-parser.jay: Also set current_array_type when parsing local
2343         variables types.
2344
2345 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2346
2347         A fix for bug #440785
2348         * expression.cs (As): Don't resolve self modifing expression
2349         multiple times.
2350
2351 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2352
2353         A fix for bug #439447
2354         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2355
2356 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2357
2358         A fix for bug #437571
2359         * cs-parser.jay: Fixes internal error for invalid expression
2360         statements.
2361
2362 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2363
2364         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2365
2366 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2367
2368         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2369
2370 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2371
2372         * cs-tokenizer.cs: More precise cast parsing.
2373
2374 2008-10-16  Martin Baulig  <martin@ximian.com>
2375
2376         * anonymous.cs (AnonymousMethodStorey): Put back the
2377         `hoisted_locals' hashtable and use it in EmitType().
2378
2379 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2380
2381         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2382         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2383         ~5MB for corlib.
2384
2385 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2386
2387         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2388
2389 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2390
2391         * statement.cs: Mutate scope initializers.
2392
2393 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2394
2395         * expression.cs: Use typeless value for This constant.
2396         
2397         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2398
2399 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2400
2401         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2402         tokenizer.
2403
2404 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2405
2406         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2407         type to type cast.
2408
2409 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2410
2411         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2412         parser and tokenizer. Fixes many ambiguities including #433258.
2413
2414 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2415
2416         * cs-parser.jay: Fixed missing accessor recovery.
2417
2418 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2419
2420         A fix for bug #433701
2421         * expression.cs: Better error message.
2422
2423 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2424
2425         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2426         
2427         * Makefile: Disabled unused debug symbols.
2428
2429         Also fixes: #320556, #321097, #321656, #321876, #351316
2430
2431 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2432
2433         * eval.cs: rename "<interactive>" to "{interactive}", to work
2434         around a requirement in the compiler that this be a valid
2435         filename, and in Windows it is not (433886).
2436
2437 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2438
2439         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2440
2441 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2442
2443         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2444         cs-parser.jay: Generic type declaration and type arguments cleanup.
2445
2446 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2447
2448         * cs-parser.jay: Allow parsing weird array creation construct.
2449
2450 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2451
2452         * cs-parser.jay: Conflicts reduction.
2453
2454 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2455
2456         * cs-parser.jay: Conflicts reduction.
2457
2458 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2459
2460         Fix #398325
2461         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2462         property.  Add a 'count' hint about the use of the shared vector.
2463         Ensure that we don't leak out dirty bits.
2464         (UsageVector.MergeChild): Throw away information about variables
2465         in child vectors.
2466         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2467
2468 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2469
2470         A fix for bug #431746
2471         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2472         parameters when iterator is created.
2473
2474 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2475
2476         A fix for bug #431827
2477         * expression.cs: Fixed right based pointer arithmetic operations
2478         emit.
2479
2480 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2481
2482         A fix for bug #353779
2483         * assign.cs, expression.cs: Fixed compound assignment conversions.
2484
2485 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2486
2487         A fix for bug #375262
2488         * statement.cs: Refactor ArrayForeach to be usable with string
2489         indexer. Optimized single dimentional arrays foreach.
2490
2491 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2492
2493         A fix for bug #431255
2494         * anonymous.cs, expression.cs: Removed broken optimization.
2495
2496 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2497
2498         * anonymous.cs: Use full type parameters of parent generic
2499         containers. Removed unnecessary AddParentStoreyReference call.
2500
2501 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2502
2503         A fix for bug #324702
2504         * class.cs: Use better shorter names for explicit interface member
2505         implementations.
2506
2507         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2508
2509 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2510         
2511         * expression.cs: Use new interface to check fixed expression.
2512
2513 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2514
2515         A fix for bug #421101
2516         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2517         interface to check for fixed fixed-buffers.
2518
2519 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2520
2521         A fix for bug #429264
2522         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2523         
2524         * delegate.cs: Removed unnecessary casts.
2525
2526 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2527
2528         A fix for bug #352151
2529         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2530         class.cs: Fixed already defined explicit interface members check.
2531
2532 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2533
2534         cs-tokenizer.cs: Fix typo.
2535
2536 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2537
2538         * eval.cs (InteractiveBase): The quit command now just sets a
2539         flag, instead of calling Environment.Exit(), it is milder on
2540         embedded hosts. 
2541
2542         CompiledMethod is now in Mono.CSharp, not nested inside
2543         the Evaluator, it was inconvenient to use.
2544
2545 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2546
2547         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2548         code to be invoked without having to reparse.
2549
2550 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2551
2552         * ecore.cs: The recent changes to FieldExpr broke this as well.
2553         Fixes LINQ queries in the interactive shell.
2554
2555         * Multiple files: indentation fixing for the Mono coding
2556         guidelines for the switch statement.
2557
2558         * eval.cs: Make the Evaluator API thread safe.
2559
2560 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2561
2562         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2563         constructor parsing.
2564
2565 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2566
2567         A fix for bug #325326
2568         * statement.cs: Check possible mistaken empty statement using
2569         explicit blocks only.
2570
2571 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2572
2573         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2574         RootNamespace.ComputeNamespaces to update the internal list of
2575         namespaces, this is no longer done for us.
2576
2577         (InteractiveBase): Use the Evaluator APIs instead of calling into
2578         Driver directly
2579
2580 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2581
2582         A fix for bug #429264
2583         * expression.cs: Missing mutator for access to multidimensional
2584         arrays.
2585
2586 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2587
2588         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2589         entry wrapper.
2590         
2591         * driver.cs: Missing input argument check.
2592
2593 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2594
2595         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2596         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2597         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2598         DefineMembers.
2599
2600 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2601
2602         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2603         fully constructed FieldExpr, fixes the regression introduced in
2604         the last commit.
2605         
2606         * ecore.cs, expression.cs: Plug back the eclass initialization as
2607         otherwise it regresses `csharp'. 
2608
2609 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2610
2611         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2612         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2613         phase to resolve phase. It resolves problems with expression trees
2614         and fixes bugs #323796, #325156.
2615
2616 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2617
2618         * codegen.cs: Report better error when symbol writer is missing.
2619
2620 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2621
2622         * codegen.cs: Set .NET symbol writer.
2623         
2624         * decl.cs: Guard against null generic arguments.
2625         
2626         * report.cs: Don't report exactly same additional details.
2627
2628 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2629
2630         A fix for bug #324917
2631         * cs-parser.jay: Add missing multidimensional non-expression type
2632         ranks.
2633         
2634 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2635
2636         A fix for bug #428191
2637         * anonymous.cs: Create an outer generic fields also for non-storey
2638         anonymous methods.
2639
2640 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2641
2642         A fix for bug #378294
2643         * class.cs: Make fixed size buffers gmcs feature only.
2644
2645 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2646
2647         A fix for bug #355622, #324993
2648         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2649         field initializer.
2650
2651 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2652
2653         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2654         error reporting.
2655
2656 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2657
2658         A fix for bug #416110
2659         * generic.cs: Struct constraint results in default ctor and
2660         ValueType base type constraint to be set.
2661
2662 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2663
2664         A fix for bug #423791
2665         * generic.cs: Fixed params output type type-inference.
2666
2667 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2668
2669         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2670         
2671 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2672
2673         * cs-tokenizer.cs: Don't break on extra partial modifier.
2674
2675 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2676
2677         A fix for bug #427592
2678         * generic.cs: Use common parameter resolve method.
2679
2680 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2681
2682         A fix for bug #414758
2683         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2684         property.
2685
2686 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2687
2688         * driver.cs, namespace.cs: Read types and namespaces after all
2689         requested assemblies are loaded, fixes issues with System.Core
2690         auto-reference, and #419888.
2691
2692 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2693
2694         A fix for bug #417705
2695         * cs-parser.jay: Fixed as/is operator expression split.
2696
2697 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2698
2699         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2700         Fixed expression tree representation of empty new expression and
2701         new initializer expression.
2702
2703 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2704
2705         * eval.cs: Remove warning, keep reference to driver around.
2706
2707         * Hide fields that do not need to be public.
2708
2709 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2710
2711         A fix for bug #426385
2712         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2713         conversion for array elements.
2714
2715 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2716
2717         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2718         void parsing conflicts.
2719
2720 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2721
2722         A fix for bug #425601
2723         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2724         System.Core only when there is no custom ExtensionAttribute
2725         implementation.
2726
2727 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2728
2729         * namespace.cs: Do not report CS0246 (name
2730
2731 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2732
2733         A fix for bug #425669
2734         * generic.cs: Don't cache generic static anonymous method 
2735         containers.
2736
2737 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2738
2739         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2740         conflicting constraints.
2741
2742 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2743
2744         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2745         mcs too.
2746
2747 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2748
2749         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2750         to null pointer conversion fixes.
2751
2752 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2753
2754         * cs-parser.jay, expression.cs: An implicitly typed local variable
2755         declarator cannot use an array initializer.
2756
2757 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2758
2759         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2760
2761 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2762
2763         * generic.cs (InflatedConstraints): Don't crash when constraints
2764         are different.
2765         
2766         * cs-parser.jay: const_declarator is a block.
2767
2768         * constant.cs: Check for not allowed NaN conversions.
2769
2770 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2771
2772         * driver.cs: Drop --shell argument, the compiler is no longer a
2773         REPL. 
2774
2775         * eval.cs: Move most of the code that deals with evaluation into
2776         this file and document the public API from repl.cs
2777
2778         * repl.cs: Remove from here.
2779         
2780 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2781
2782         A fix for bug #424684
2783         * generic.cs: Generic class constraints must come first.
2784
2785 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2786
2787         * cs-parser.jay: Improve error reporting for syntax errors in
2788         statements and expressions, we now report the expected tokens
2789         instead of reporting the useless "; expected".
2790
2791         Drop the strings from the token declaration, it turns out that
2792         they did not do what I thought they did.  Instead they were adding
2793         two sets of tokens to the tables.
2794
2795 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2796
2797         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2798         delegate.cs: Share special type check.
2799
2800 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2801
2802         A fix for bug #423981
2803         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2804
2805 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2806
2807         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2808         ConvertImplicitly.
2809
2810 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2811
2812         A fix for bugs: #324750, #335946
2813         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2814         lookup rule to determine ?-based tokens.
2815
2816 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2817
2818         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2819         expressions (like event adding or removing) end up here, so we
2820         need to treat those as statements.
2821
2822         Add LoadAssembly method.
2823
2824 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2825
2826         * repl.cs: Add Time method.
2827
2828 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2829
2830         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2831
2832 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2833
2834         * repl.cs: Add workaround for old compilers.
2835
2836 2008-09-04  Jb Evain  <jbevain@novell.com>
2837
2838         * repl.cs (PrettyPrint): pretty print everything that
2839         implements IDictionary, as well as IEnumerables. Also,
2840         add a quit helper property.
2841
2842 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2843
2844         * constant.cs: Better error reporting for decimal literals.
2845         
2846         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2847         field attributes.
2848         
2849 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2850                         Miguel de Icaza  <miguel@novell.com>
2851
2852         A fix for bug #422951
2853         * assign.cs (Assign.DoResolve): Perform the type conversions
2854         checks before we attempt to initialize `New' initializers. 
2855
2856 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2857
2858         A fix for bug #422853
2859         * delegate.cs (DelegateCreation): Add special handling for
2860         EmptyExpression.Null instance expression which is just another
2861         hack for undecided member instance exression.
2862
2863 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2864
2865         * expression.cs, ecore.cs: Emit full expression tree for reduced
2866         binary expressions.
2867
2868 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2869
2870         * expression.cs (This): Guard against multi-resolving.
2871         
2872         * ecore.cs, statement.cs (Throw): Simplified.
2873         
2874         * flowanalysis.cs: Also verify event fields.
2875
2876 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2877
2878         * assign.cs (Assign.DoResolve): Perform the type conversions
2879         checks before we attempt to initialize `New' initializers. 
2880
2881         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2882
2883         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2884         public. 
2885
2886         * repl.cs: Update help.
2887
2888 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2889
2890         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2891         handling of the default config handling, including the special
2892         treatment of System.Core assembly. 
2893
2894         Fixes the REPL processing for LINQ.
2895
2896 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2897
2898         A fix for bug #422507
2899         * expression.cs (UnboxCast): Add missing child expression mutator.
2900
2901 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2902
2903         * driver.cs: Don't self reference System.Core assembly.
2904
2905 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2906
2907         A fix for bug #422507
2908         * expression.cs (StringConcat): Add missing type mutator.
2909
2910 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2911
2912         * generic.cs (TypeInferenceContext): Follow equality rule for
2913         constructed type lower bound type inference.
2914
2915 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2916
2917         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2918         <dblank@cs.brynmawr.edu> which updates the cursor position on
2919         refresh.
2920         
2921 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2922
2923         A fix for bug #367145
2924         * driver.cs: Fixed import of extension methods when using -noconfig
2925         option.
2926
2927 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2928
2929         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2930         version from non-generic implementation instead.
2931
2932 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2933
2934         A fix for bug #418908
2935         * class.cs: Use AddScopeStatement for field initializers.
2936
2937 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2938
2939         A fix for bug #415385
2940         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2941
2942 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2943
2944         A fix for bug #421736
2945         * iterators.cs: Don't crash on unreachable iterators.
2946
2947 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2948
2949         A fix for bug #421628
2950         * parameter.cs, attribute.cs: Clone also parameter attributes.
2951
2952 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2953
2954         * namespace.cs (LookupType): In EvalMode, try to replace
2955         the TypeBuilder from our cache with a Type as Reflection.Emit does
2956         not  like to mix code from older assemblies emitted and new
2957         assemblies emitted. 
2958
2959         This sounds like a serious Mono bug that prevents multiple
2960         assemblies to be generated and consumed at the same time.
2961
2962         * cs-parser.jay (push_current_class): Do not make interactive
2963         classes internal or private, make them public as we currently
2964         generate each new class in a new assembly.   
2965
2966 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2967
2968         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2969         remove types that are entered into the global namespace during
2970         parsing so that we can remove them on failure.
2971  
2972         * cs-parser.jay: Parsing: we now keep track of types that are
2973         entered into global variables and queue those in case the parsing
2974         or resolution fail.
2975  
2976         This happens in a few situations: during partial-input, we invoke
2977         the parser repeatedly for example with the string "class X", this
2978         would cause X to be registed, and we need to remove this
2979         registration so that another parse attempt later with say "class X {"
2980         would actually work.
2981  
2982         Additionally, if there is an error in the resolution phase, for
2983         example: "class X : NonExistant {}" th
2984         
2985         * cs-parser.jay: Be more precise with the errors being raised,
2986         instead of flagging all exceptions during parsing to be attributed
2987         to the parsing process, distinguish those from errors happening in
2988         the actions and hint that using -v would produce the actual
2989         exception. 
2990
2991         * repl.cs: Do not load all compiler references on each reset,
2992         doing the partial reset takes care of this.
2993         
2994 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2995
2996         * repl.cs: Add support for loading all the files from
2997         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2998         as shell libraries.
2999
3000         Introduce a micro-parser that is able to deambiguate on its input
3001         whether we are dealing with a compilation unit (namespace, class,
3002         interface, struct, delegate) declaration or a statement.   This
3003         allows both declarations and statements to be entered. 
3004
3005         Set history size by default to 300 lines.
3006
3007         Instead of distinguishing based on the parser.InteractiveResult,
3008         have only two cases: statements were parsed, or a compilation unit
3009         was.   Always pull the Using statement additions from the
3010         compilation unit parse.
3011         
3012         * cs-tokenizer.cs: Rename tokens to better describe their intent
3013         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3014         
3015         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3016         EvalMode is used to trigger the lookup of global variables while
3017         StatementMode is used turn variable declarations into static
3018         fields.
3019
3020         * getline.cs: Allow history size to be set.
3021         
3022 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3023
3024         A fix for bug #360755
3025         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3026
3027 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3028
3029         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3030         
3031         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3032         member name, it is too confusing
3033         
3034         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3035         
3036         * rootcontext.cs: Finally default to warning level 4.
3037
3038 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3039
3040         * class.cs (CheckBase): Ignore overloaded operators.
3041
3042 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3043
3044         A fix for bug #420830
3045         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3046
3047 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3048
3049         A fix for bug #420832
3050         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3051
3052 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3053
3054         A fix for bug #420386
3055         * nullables.cs: Fixed logic of nullable user comparison operators involving
3056         null values.
3057
3058 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3059         
3060         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3061
3062 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3063
3064         * repl.cs: Add support for aborting the running code with C-c. 
3065
3066 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3067
3068         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3069
3070 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3071
3072         * cs-parser.jay (interactive_statement_list): A new set of rules
3073         for hosting statements that uses the "interactive_" prefix.   
3074
3075         * repl.cs: Add support for parsing `using' as a statement or as a
3076         directive.  Deambiguating before passing this to the parser.
3077
3078         We need to distinguish statement_expressions that occur at the
3079         toplevel vs those that occur embedded into expressions.
3080
3081         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3082         that fixes the cursor key handling, and a history bug.
3083         
3084 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3085
3086         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3087         limitations in Console, instead the 2.0 bootstrap libraries now
3088         include the Console bits.
3089
3090         Also, remove the use of Nullables from getline.cs
3091
3092         ------------
3093         
3094         Interactive support for the C# compiler.   Use gmcs --shell to
3095         enter a read-eval-print loop shell.
3096
3097         Docs: http://www.mono-project.com/CsharpRepl
3098         
3099         * sources: include repl.cs here and getline.cs for gmcs.exe,
3100         everything else is getline.cs impaired.
3101
3102         * Makefile: when bootstrapping pass a special flag
3103         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3104         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3105         This distinguishes those two cases.
3106
3107         * repl.cs: Support for a read-eval-print loop.   Will be soon
3108         refactored into eval support and then REPL on top of it.
3109
3110         * ecore.cs: If a simplename lookup fails, before erroring out,
3111         if we are in EvalMode to resolve the name to a declaration in the
3112         Eval-land.    
3113
3114         This means that variable declarations that happened in previous
3115         classes (as repl puts every statement in a separate class) are
3116         made visible in this way.
3117
3118         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3119         triggered an error due to the end of file being reached.   This is
3120         used to do multi-line input, and notify the caller that the user
3121         needs to provide more text before a successful parse.
3122
3123         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3124         to drive the evaluation with a custom wrapper. 
3125
3126         * driver.cs: Add support for --shell, and refactor some code to be
3127         reused from repl.cs
3128         
3129         * namespace.cs: Add support for serializing the contents of the
3130         namespaces and reloading them.  
3131
3132         * getline.cs: A managed implementation of ReadLine under
3133         X11/Apache2 license terms.  Easy to embed in other applications as
3134         well.
3135
3136         * namespace.cs: Add some functions to save and restore the
3137         namespace state.
3138
3139         * rootcontext.cs: New public field.
3140
3141         * cs-tokenizer.cs: Add support for one of the possible characters
3142         we introduce into the token stream.  
3143
3144         This patch does not affect the regular tokenization process, the
3145         only performance hit would happen if there is an invalid character
3146         on the input string.
3147
3148         * support.cs: Move isatty helper routine here.
3149
3150         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3151         code generator for in-memory assemblies.
3152
3153 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3154
3155         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3156         parameter cannot be always used as a type.
3157
3158 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3159
3160         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3161
3162 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3163
3164         * convert.cs: Implement explicit array to IList<T> conversion.
3165
3166 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3167
3168         A fix for bug #362740
3169         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3170
3171 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3172         
3173         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3174         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3175         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3176         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3177         handling to use just one type of infrastructure and deal with generics
3178         more effectivelly.
3179
3180 2008-07-23  Martin Baulig  <martin@ximian.com>
3181
3182         *** Merged this from trunk revision 108527 ***
3183
3184         * statement.cs
3185         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3186         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3187         scope variable.
3188
3189 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3190         
3191         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3192         error checks.
3193
3194 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3195         
3196         * delegate.cs: Fixed compiler crash when creating delegate using partial
3197         method.
3198         
3199         * typemanager.cs: MulticastDelegate is not a delegate.
3200
3201 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3202         
3203         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3204         checks.
3205
3206 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3207
3208         * cs-parser.jay (type): Allow 'var' in mcs too.
3209         (local_variable_type): Likewise.
3210
3211 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3212         
3213         * driver.cs: Removed broken -noconfig variants.
3214
3215 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3216         
3217         A fix for bug #417078
3218         * expression.cs: Emit correctly left side pointer operators.
3219
3220 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3221
3222         * generic.cs, lambda.cs: Inflate method generic arguments only.
3223
3224 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3225
3226         * class.cs: Fixed struct layout check regression.
3227
3228 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3229
3230         * cs-parser.jay, enum.cs: Simplified enum parsing.
3231         
3232         * decl.cs: Check all type parameters conflicts.
3233         
3234         * expression.cs, statement.cs, attribute.cs: More expression checks.
3235
3236 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3237
3238         * generic.cs: Add type inference types restriction.
3239         
3240         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3241         anonymous.cs, expression.cs: Allocate less accessor parameters.
3242
3243 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3244
3245         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3246         classes.
3247
3248 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3249
3250         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3251
3252 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3253
3254         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3255         Also fixes #362146 and #381592.
3256
3257 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3258
3259         * ecore.cs: Reduced constant cannot be used as an attribute value.
3260         
3261         * cs-parser.jay: Base expression has to be a type.
3262         
3263         * expression.cs (Conditional): Uses ReducedExpression.
3264
3265 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3266
3267         A fix for bug #376826
3268         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3269         address of hoisted local variable or parameter cannot be taken.
3270
3271 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3272
3273         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3274         anonymous method inside checked/unchecked expression.
3275
3276 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3277
3278         * typemanager.cs (IsEqual): Guard against null.
3279         
3280         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3281         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3282         routine. Fixed few misleading conversion errors.
3283
3284 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3285
3286         * class.cs: Consider generics when checking cycles in struct layout.
3287
3288 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3289
3290         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3291
3292 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3293
3294         A fix for bug #414165
3295         * anonymous.cs: Use same anonymous implementation method for all anonymous
3296         method emits.
3297
3298 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3299
3300         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3301         constraints.
3302
3303 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3304
3305         * cs-parser.jay: Typeof argument has to be a type expression.
3306         
3307         * namespace.cs: Check alias and namespace definitions collisions.
3308         
3309         * class.cs, pending.cs: Moved explicit interface accessor implementation
3310         check.
3311         
3312         * delegate.cs, expression.cs: Verify special name invocations.
3313         
3314 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3315
3316         * cs-parser.jay: Don't choke on empty generic type arguments.
3317         
3318         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3319         
3320         * expression.cs, ecore.cs: Minor expressions bugs.
3321
3322 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3323
3324         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3325         and added more error handling.
3326         
3327         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3328         
3329         *  modifiers.cs, enum.cs: Fixed.
3330
3331 2008-07-31  Jb Evain  <jbevain@novell.com>
3332
3333         * driver.cs: remove -pkg ability of smcs.
3334
3335 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3336
3337         * statement.cs (Switch): Correctly set empty default target for single
3338         blocks.
3339
3340 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3341
3342         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3343         string switch statement implementation to use string dictionary which
3344         significantly (2-8x) improves performance of generated code.
3345
3346 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3347
3348         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3349         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3350         
3351 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3352
3353         A fix for bug #412595
3354         * typemanager.cs, convert.cs, expression.cs: Some types are never
3355         convertible to each other.
3356
3357 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3358
3359         * nullable.cs (CreateNullConstant): An error messages update.
3360
3361 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3362
3363         A fix for bug #412595
3364         * cfold.cs: Don't cast undefined bool constant.
3365
3366 2008-07-29  Martin Baulig  <martin@ximian.com>
3367
3368         * symbolwriter.cs
3369         (SymbolWriter.Reset): New public static method.
3370
3371         * driver.cs
3372         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3373
3374 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3375
3376         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3377         
3378         * expression.cs (ElementAccess): Exact size allocation.
3379
3380 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3381
3382         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3383
3384 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3385
3386         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3387         
3388         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3389         flow analysis.
3390
3391 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3392
3393         A fix for bug #412217
3394         * assign.cs: Mutate also assignment type.
3395
3396 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3397
3398         A fix for bug #323644
3399         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3400         indexers.
3401
3402 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3403
3404         A fix for bug #412134
3405         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3406         non-enumerable operands when overloading equality or bitwise operators.
3407
3408 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3409
3410         * anonymous.cs: Cache closed generic anonymous method delegates.
3411
3412 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3413
3414         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3415         anonymous.cs, statement.cs: Always emit anonymous method as static method
3416         when is instance free. Use nesting for nested anynomous methods blocks.
3417         
3418 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3419
3420         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3421         types.
3422
3423 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3424
3425         * expression.cs: Removed MakeSimpleCall.
3426
3427 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3428
3429         A fix for bug #323012
3430         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3431         Base method implementing interface has to be public.
3432
3433 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3434
3435         * cs-parser.jay: Don't break on missing argument.
3436
3437 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3438
3439         A fix for bug #320993
3440         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3441           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3442
3443 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3444
3445         A fix for bug #320748
3446         * convert.cs: Implicit user operators cannot convert to interfaces
3447
3448 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3449
3450         A fix for bug #312686
3451         * driver.cs: Ignore empty assembly references.
3452
3453 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3454
3455         A fix for bug #387040
3456         * ecore.cs: Skip constrains check for an explicit implementation.
3457
3458 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3459
3460         A fix for bug #409045
3461         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3462           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3463           identifiers are file specific unless passed as input arguments.
3464
3465 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3466
3467          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3468          to emit UnmanagedMarshal data under 2.0 profile.
3469
3470 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3471
3472         A fix for bug #410369
3473         * parameter.cs: Clone correctly ParamsParameter.
3474
3475 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3476
3477         * expression.cs (Argument): Always report type for type based expressions
3478         errors.
3479
3480 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3481
3482         A fix for bug #410666
3483         * anonymous.cs: Correctly initialize generic storey reference.
3484
3485 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3486
3487         * convert.cs: Don't box same type arguments.
3488
3489 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3490
3491         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3492         Finished missing generic type mutators.
3493
3494 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3495
3496         * iterators.cs, statement.cs: Finished statements CloneTo.
3497
3498 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3499
3500         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3501         
3502         * expression.cs: Emit optimized default value expressions in expression tree
3503         array initializer.
3504
3505 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3506
3507         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3508
3509 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3510
3511         A fix for bug #367536
3512         * cs-parser.jay: Check static constructor of generic types for an access
3513         modifier.
3514
3515 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3516
3517         A fix for bug #353800
3518         * lambda.cs: Emit ret for contextual statements.
3519         
3520         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3521         up emitting redundant ret for all anonymous methods with return.
3522
3523 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3524
3525         A fix for bug #365188
3526         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3527         create anonymous method storey in unreachable block.
3528
3529 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3530
3531         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3532         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3533         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3534         statement.cs: Fixed relevant defects found by Gendarme.
3535
3536 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3537
3538         A fix for bug #325291
3539         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3540         statement.cs: Replaced IAnonymousHost with top level block flag.
3541
3542 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3543
3544         * cs-parser.jay: Clean up unused open_parens.
3545
3546 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3547
3548         * ecore.cs: Custom error message for a range variable assignment.
3549
3550 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3551
3552         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3553         load.
3554
3555 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3556
3557         * literal.cs: Null literal is of object type.
3558
3559 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3560
3561         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3562         expression of nullable equality comparison.
3563
3564 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3565
3566         * expression.cs(PointerArithmetic): Removed redundant assignment.
3567
3568 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3569
3570         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3571
3572 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3573
3574         A fix for bug #408361
3575         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3576         they are replaced by GetMethod.
3577
3578 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3579
3580         A fix for bug #408721 by jeremie.laval@gmail.com
3581         * expression.cs (Indirection): Implemented CloneTo.
3582
3583 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3584
3585         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3586         assert check.
3587
3588 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3589
3590         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3591
3592 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3593
3594         * linq.cs: Reset tranparent parameter counter in probing mode.
3595
3596 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3597
3598         * anonymous.cs: Mutate anonymous method type.
3599
3600 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3601
3602         * ecore.cs, anonymous.cs: Mutate field expressions.
3603
3604 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3605
3606         A fix for bug #369670
3607         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3608
3609 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3610
3611         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3612
3613 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3614
3615         Fix bug #314902
3616         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3617         only one '>', and finds a '>>', abort the generic lookahead.
3618
3619 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3620
3621         A fix for bug #319902
3622         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3623
3624 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3625
3626         A fix for bug #406371
3627         * statement.cs: Moved EmitSymbolInfo to Block.
3628
3629 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3630
3631         * ecore.cs: Report better error for extension method overload failures.
3632
3633 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3634
3635         * expression.cs (Is): No need to box reference values.
3636
3637 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3638
3639         * class.cs: Use event resolve context when initializing CreateEmitContext.
3640
3641 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3642
3643         A fix for bug #394436
3644         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3645         method used inside expression trees. Added more LINQ to expression tree
3646         conversions.
3647
3648 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3649
3650         A fix for bug #378189, #370577
3651         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3652         from expression.
3653
3654 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3655
3656         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3657         hierarchically.
3658
3659 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3660
3661         A fix for bug #406702
3662         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3663
3664 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3665
3666         A fix for bug #406648
3667         * cs-parser.jay: Report nullable use in mcs for some cases.
3668
3669 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3670
3671         * ecore.cs: Improved argument mismatch error messages.
3672
3673 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3674
3675         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3676
3677 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3678
3679         * expression.cs (TypeOf): Mutate type argument.
3680
3681 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3682
3683         * class.cs: Report missing partial modifier for correct type.
3684
3685 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3686
3687         * ecore.cs, expression.cs (VariableReference): Variable property is 
3688         protected.
3689
3690 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3691
3692         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3693         
3694 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3695
3696         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3697         method delegates.
3698
3699 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3700
3701         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3702         anonymous method storey to an instance method when only "this" is hoisted.
3703
3704 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3705
3706         A fix for bug #321615
3707         * expression.cs: Pointer comparisons use unsigned operator.
3708
3709 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3710
3711         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3712
3713 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3714
3715         A fix for bug #404905
3716         * class.cs: Always initialize local unsafe variables.
3717
3718 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3719
3720         A fix for bug #396987
3721         * expression.cs (NewInitialize): Clear local temporary variable for next run
3722
3723 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3724
3725         A fix for bug #401020
3726         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3727
3728 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3729
3730         A fix for bug #398319
3731         * cs-parser.jay: Implemented undocumented base access expression inside
3732         anonymous types.
3733
3734 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3735
3736         A fix for bug #404227
3737         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3738
3739 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3740
3741         A fix for bug #404227
3742         * convert.cs: Fixed explicit array to interface cast.
3743
3744 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3745
3746         A fix for bug #403894
3747         * delegate.cs: Mutate DelegateInvocation type.
3748
3749 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3750
3751         A fix for bug #379348
3752         * delegate.cs: Box a load of generic parameters.
3753
3754 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3755
3756         * expression.cs: Add an array creation arguments mutate.
3757
3758 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3759
3760         A fix for bug #386068
3761         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3762         parameter.
3763
3764 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3765
3766         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3767         CloneTo.
3768
3769 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3770
3771         A fix for bug #403518
3772         * delegate.cs: Type correctly anonymous method new invocation.
3773
3774 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3775
3776         A fix for bug #394826
3777         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3778         calls.
3779
3780 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3781
3782         A fix for bug #394826
3783         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3784         needed.
3785
3786 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3787
3788         * class.cs: Clone indexer parameters for localized capturing.
3789
3790 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3791
3792         A fix for bug #402379
3793         * expression.cs: Don't crash when an object initializer resolve fails.
3794
3795 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3796
3797         A fix for bug #402888
3798         * expression.cs: Mutate conditional expression.
3799
3800 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3801
3802         A fix for bug #401012
3803         * class.cs: Keep StructLayout in shared container.
3804
3805 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3806
3807         A fix for bug #400438
3808         * decl.cs, class.cs: Only properties can be automatically implemented.
3809
3810 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3811
3812         * statement.cs (ChangeToIterator): Copy also labels.
3813
3814 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3815
3816         * ecore.cs: Pass type argument details to parent extension method.
3817
3818 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3819
3820         A fix for bug #375966
3821         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3822
3823 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3824
3825         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3826
3827 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3828
3829         A fix for bug #394347
3830         * anonymous.cs: Cache compatible delegates as compatibility check produces
3831         a new method every time.
3832
3833 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3834
3835         * anonymous.cs: Propagate storey reference for single references.
3836
3837 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3838
3839         A fix for bug #387615
3840         * assign.cs, expression.cs: Correctly clone compound assignment.
3841
3842 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3843
3844         A fix for bug #359611, #359604
3845         * anonymous.cs: Mutate all types of hoisted parameters.
3846
3847 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3848
3849         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3850         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3851         expression.cs, codegen.cs, statement.cs
3852         
3853         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3854         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3855         
3856         ** Anonymous methods, lambda expressions rewrite **
3857         
3858         Anonymous expressions are now resolved when an explicit block is resolved 
3859         and they don't require any registration procedure anymore. Further,
3860         anonymous methods are defined when explicit block is emitted which allows
3861         better control of whole process and opens possibilities for more
3862         optimizations as well as alternative to reverse whole process.
3863         
3864         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3865         process consistent and to correctly emit hoisted generic methods when they
3866         have at least 1 hoisted variable.
3867         
3868 2008-06-17  Martin Baulig  <martin@ximian.com>
3869
3870         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3871         iterator method.
3872         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3873         virtual property; check it in Emit().
3874         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3875         an iterator.
3876         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3877         an iterator.
3878         (Indexer.Define): Likewise.
3879
3880 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3881
3882         * convert.cs: Don't use IsInterface on type arguments.
3883         
3884         * delegate.cs: DelegateInvocation uses MethodInfo.
3885         
3886         * parameter.cs: Removed IsTypeParameter.
3887         
3888         * generic-mcs.cs: More missing stuff.
3889
3890 2008-06-16  Martin Baulig  <martin@ximian.com>
3891
3892         * modifiers.cs
3893         (Modifiers.DEBUGGER_HIDDEN): New public const.
3894
3895         * typemanager.cs
3896         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3897
3898         * class.cs
3899         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3900         (AbstractPropertyEventMethod): Likewise.
3901         (Constructor.Emit): Likewise.
3902         (SourceMethod.SetCompilerGenerated): Removed.
3903
3904         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3905         on MoveNext().
3906
3907         * anonymous.cs
3908         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3909         if we're an `IteratorHost'.
3910         (AnonymousMethodMethod..ctor): Don't set
3911         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3912         not on the method.
3913
3914 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3915
3916         * statement.cs: Clean-up foreach statements.
3917
3918 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3919
3920         * class.cs: Stop using public method which should not exist
3921         (MethodBuilder.SetGenericMethodSignature).
3922
3923 2008-06-11  Martin Baulig  <martin@ximian.com>
3924
3925         * location.cs
3926         (Location.LookupFile): Add `CompilationUnit' argument; when given
3927         a relative file name, make it relative to the directory the .cs
3928         file is located in instead of using the current directory.
3929
3930 2008-06-11  Martin Baulig  <martin@ximian.com>
3931
3932         * class.cs
3933         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3934         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3935         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3936         (SourceMethod.SetCompilerGenerated): Likewise.
3937
3938 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3939
3940         * codegen.cs, driver: Only write symbol file when it's asked for.
3941
3942 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3943
3944         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3945
3946 2008-06-10  Martin Baulig  <martin@ximian.com>
3947
3948         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3949
3950 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3951
3952         A fix for bug #316290
3953         * expression.cs: Include decimal operators in predefined table.
3954         
3955         * parameters.cs: More readonlyness.
3956
3957 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3958
3959         A fix for bug #397213
3960         * cs-parser.jay: One more missing current_local_parameters reset.
3961
3962 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3963
3964         A fix for bug #396633
3965         * class.cs: Host backing field in partial container.
3966
3967 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3968
3969         A fix for bug #397068
3970         * expression.cs: Check both operand types when predefined operator is used.
3971
3972 2008-06-05  Martin Baulig  <martin@ximian.com>
3973
3974         Merged the `debugger-kahalo' branch.
3975
3976         * class.cs
3977         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3978         we're an iterator method.
3979         (SourceMethod): Reflect latest symbol writer changes;
3980         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3981         now `start_row' and `end_row'.
3982         (Constructor.Emit): Fix the logic whether to emit symbol information.
3983
3984         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3985         generated methods.
3986
3987         * location.cs
3988         (CompilationUnit): New public class; derives from `SourceFile'.
3989         (SourceFileEntry.DefineSymbolInfo): New public method.
3990         (SourceFileEntry.SetChecksum): New public method.
3991         (Location): Encode hidden line numbers by using `column == 255';
3992         the .ctor now accepts `column == -1' to mark a hidden line number.
3993         (Location.Hidden): New public property.
3994         (Location.CheckPoint): Add `CompilationUnit'.
3995         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3996         (Location.Push): Add `CompilationUnit compile_unit' argument.
3997         (Location.CompilationUnit): New public property.
3998
3999         * statement.cs
4000         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4001
4002         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4003
4004         * driver.cs: `SourceFile' -> `CompilationUnit'.
4005
4006         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4007
4008         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4009
4010         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4011         `#line hidden'.
4012
4013         * symbolwriter.cs
4014         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4015         new symbol writer API to also pass the file.
4016
4017 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4018
4019         * statement.cs: Emit catch variable assignment using variable expression.
4020         
4021 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4022
4023         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4024         with other variable types.
4025
4026 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4027
4028         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4029         GetLength method emit, it breaks resolve rules.
4030         
4031 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4032             Marek Safar  <marek.safar@gmail.com>
4033                         
4034         A fix for bug #395542
4035         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4036         declaration.
4037         
4038 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4039
4040         A fix for bug #395287
4041         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4042
4043 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4044
4045         A fix for bug #395845
4046         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4047         non-nullable parameter type.
4048         
4049 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4050
4051         * class.cs: Handle contructor initializer as a statement in top-level block.
4052
4053 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4054
4055         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4056         security attributes.
4057
4058 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4059
4060         * ecore.cs, expression.cs: Small IVariable refactoring.
4061
4062 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4063
4064         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4065
4066 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4067
4068         * cs-parser.jay: Removed redundant catch type check.
4069
4070 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4071
4072         A fix for bug #390372
4073         * nullable.cs: Set correct return type.
4074
4075 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4076
4077         A fix for bug #391062
4078         * typemanager.cs: Fixed crash when comparing null types.
4079
4080 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4081
4082         A fix for bug #391871
4083         * cs-parser.jay: Better error handling for invalid catch type.
4084
4085 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4086
4087         A fix for bug #392155
4088         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4089
4090 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4091
4092         A fix for bug #390666
4093         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4094         expressions.
4095
4096 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4097
4098         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4099         in getter.
4100
4101 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4102
4103         A fix for bug #389625
4104         * delegate.cs, generic.cs: Some progress on method group return type
4105         inference.
4106
4107 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4108
4109         A fix for bug #378419
4110         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4111
4112 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4113
4114         * class.cs (Constructor): Added IsCompilerGenerated.
4115
4116 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4117
4118         * expression.cs: Enum binary operators can accept non-enum operand only when
4119         is implicitly convertible to underlying type.
4120
4121 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4122
4123         A fix for bug #389272
4124         * support.cs: Workaround System.InvalidOperationException for enums.
4125
4126 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4127
4128         A fix for bug #389073
4129         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4130
4131 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4132
4133         * driver.cs: Split Parse.
4134         
4135         * location.cs (LookupFile): Uses string.Empty.
4136
4137 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4138
4139         * expression.cs, parameter.cs: Small ParameterReference clean up.
4140
4141 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4142
4143         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4144         hack. Fixes #387502.
4145
4146 2008-05-06  Martin Baulig  <martin@ximian.com>
4147
4148         * class.cs (Constructor.Emit): Fix the logic whether to emit
4149         symbol information.
4150
4151 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4152
4153         Fix #385503
4154         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4155         InvalidOperationException when the iterator is before the start or
4156         after the end.
4157
4158 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4159
4160         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4161         when left is nullable type.
4162
4163 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4164
4165         A fix for bug #386628
4166         * expression.cs (LocalVariableReference): Continue in resolving when
4167         variable is not assigned.
4168
4169 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4170
4171         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4172         nullable operations.
4173
4174 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4175
4176         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4177         it saves many redundant temporary variables for nullable operations.
4178
4179 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4180
4181         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4182         
4183         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4184         method.
4185         
4186         * nullable.cs: Constant coalescing operator optimizations.
4187
4188 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4189
4190         * constant.cs: Use unsigned conversion for values which are unsigned only.
4191
4192 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4193
4194         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4195         coalescing operator as it should be.
4196
4197 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4198
4199         A fix for bug #371016
4200         * expression.cs: All predefined delegate operators require implicit method
4201         group conversion.
4202         
4203 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4204
4205         * constant.cs: Emit long constant as uint when fits the range.
4206         
4207         * convert.cs, expression.cs: Fixed few unsafe conversions.
4208
4209 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4210
4211         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4212
4213 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4214
4215         Fix #385758
4216         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4217         'expr'.
4218         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4219
4220 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4221
4222         * constant.cs, literal.cs: IsLiteral property for error reporting.
4223         
4224         * ecore.cs, expression.cs: Implemented Property expression.
4225
4226 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4227
4228         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4229         
4230         * nullable.cs: Implemented nullable coalescing null operator.
4231
4232         * ecore.cs, expression.cs: Expression trees work.
4233
4234 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4235
4236         * ecore.cs: CreateExpressionTree is finally abstract.
4237
4238         * expression.cs, linq.cs: Updated.
4239
4240 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4241
4242         * expression.cs, ecore.cs: Block base access expression inside expression
4243         tree.
4244
4245 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4246
4247         A fix for bug #385058
4248         * expression.cs: User-defined operator implementations always take
4249         precedence over predefined operator implementations.
4250
4251 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4252
4253         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4254         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4255         expression tree conversions.
4256         
4257 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4258
4259         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4260         operators method details to Operator class.
4261
4262 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4263
4264         * anonymous.cs: Pass unsafe flags to anonymous container.
4265         
4266         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4267         inside expression tree.
4268
4269 2008-04-29  Martin Baulig  <martin@ximian.com>
4270
4271         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4272         (Tokenizer.PopPosition): Also restore the `line'.
4273
4274 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4275
4276         * delegate.cs: Implemented Invoke expression.
4277
4278 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4279
4280         * expression.cs: Fixed equality reference comparison regression.
4281
4282 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4283
4284         * ecore.cs: Clean up EmptyCast hack.
4285         
4286         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4287         using correct conversion rules. Also fixes #383993.
4288
4289 2008-04-28  Martin Baulig  <martin@ximian.com>
4290
4291         * class.cs (Constructor.Emit): Don't emit debugging information
4292         for generated default .ctor's.
4293
4294 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4295
4296         * convert.cs: Empty-cast ushort to int conversion.
4297
4298 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4299
4300         A fix for bug #384191
4301         * ecore.cs, expression.cs: Fixed expression cloning.
4302
4303 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4304
4305         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4306
4307 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4308
4309         Fix #381559, test-638.cs, test-639.cs
4310         * assign.cs (CompoundAssign.Helper): New wrapper.
4311         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4312         access.
4313         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4314         Pass unconverted expressions to the params array creation expression.
4315         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4316         (PropertyExpr.EmitAssign): Likewise.
4317         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4318         element if it is of kind CompoundAssign.Helper.
4319         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4320         first before anything else.
4321         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4322         (ArrayAccess.LoadArrayAndArguments): Simplify.
4323
4324 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4325
4326         * expression.cs: Fixed cloning of typeof(void).
4327
4328 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4329
4330         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4331         (Assign.Emit): Likewise.  Move it to ...
4332         (CompoundAssign.DoResolve): ... here and ...
4333         (CompoundAssign.Emit): ... here.
4334         (EventAddOrRemove): New helper to handle += and -= on events, and
4335         avoid the use of BinaryDelegates.
4336         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4337         (EventExpr.EmitAddOrRemove): Improve.
4338         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4339
4340         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4341         create VarExprs for 'foo.bar.var'.
4342         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4343         is a highly inappropriate name for its functionality.
4344
4345 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4346
4347         Simplify handling of multiple assignments
4348         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4349         inheritable-only.
4350         (SimpleAssign): New.  Class to be used for normal assignments.
4351         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4352         * expression.cs, parameter.cs, statement.cs: Likewise.
4353
4354 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4355
4356         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4357         for incompatible underlying types, more to come, uff.
4358
4359 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4360
4361         Fix gtest-388.cs
4362         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4363         Handle 'leave_copy'.
4364
4365 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4366
4367         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4368
4369 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4370
4371         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4372         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4373         * statement.cs (While, Do, For): Allow test to have side effects.
4374         (For.DoEmit): Always emit InitStatement.
4375
4376         Fix test-635.cs
4377         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4378         Always create SideEffectConstant.
4379         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4380         of type EnumConstant.
4381
4382         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4383         Handle 'right' being SideEffectConstant of type 'bool'.
4384
4385         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4386         Use left.EmitBranchable instead of open coding it, so as to
4387         improve optimization opportunities.
4388
4389         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4390
4391         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4392         assumptions.
4393         (Expression.EmitSideEffect): Document.
4394
4395 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4396
4397         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4398
4399 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4400
4401         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4402
4403 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4404
4405         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4406         conversion to expression tree.
4407
4408 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4409
4410         * ecore.cs: Removed unused expression.
4411
4412 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4413
4414         * expression.cs: Implemented NegateChecked and New expressions.
4415
4416 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4417
4418         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4419
4420 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4421
4422         Fix #351102
4423         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4424         needing final 'ret' instruction.
4425
4426 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4427
4428         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4429
4430 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4431
4432         * expression.cs: Emit ldnull and not null expression as an instance argument
4433          of static method expression calls.
4434
4435 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4436
4437         A fix for bug #378200
4438         * expression.cs: Fixed crash when creating parameterless expression tree
4439         method call.
4440
4441 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4442
4443         A fix for bug #375297
4444         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4445         method.
4446
4447 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4448
4449         A fix for bug #377596
4450         * decl.cs, class.cs: Emit delegate type argument attributes.
4451
4452 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4453
4454         A fix for bug #365314
4455         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4456         
4457 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4458
4459         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4460         only.
4461
4462 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4463
4464         * generic.cs (TypeParameter): Removed redundant location.
4465
4466 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4467
4468         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4469         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4470         FullNamedExpression in all declaration type expression, statements will come
4471         later.
4472
4473 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4474
4475         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4476         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4477
4478 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4479
4480         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4481         code.
4482
4483 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4484
4485         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4486         constraints.
4487
4488 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4489
4490         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4491         name expressions.
4492         Also fixes #340463.
4493
4494 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4495
4496         Hook up 'EmitSideEffect'
4497         * constant.cs (Constant.EmitSideEffect): New.
4498         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4499         (SideEffectConstant.EmitSideEffect): New.
4500         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4501         unconditional branch in EmitBranchable.
4502         (FieldExpr.EmitBranchable): New.
4503         * expression.cs (Unary.EmitSideEffect): New.
4504         (Binary.EmitSideEffect): New.
4505         (VariableReference.EmitSideEffect): New.  Do nothing.
4506
4507 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4508
4509         Introduce 'EmitSideEffect'
4510         * ecore.cs (Expression.EmitSideEffect): New.
4511         (TypeCast): Rename from EmptyCast.
4512         (EmptyCast): New.
4513         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4514         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4515         * convert.cs, nullable.cs: Update to changes.
4516
4517 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4518
4519         * class.cs, cs-parser.jay: Early check for base types expression.
4520
4521 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4522
4523         * decl.cs (MemberName): Declare PrettyName as obsolete.
4524
4525 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4526
4527         * namespace.cs: Use MemberName comparison.
4528
4529 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4530
4531         Fix build break
4532         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4533         FullName.
4534         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4535         (MemberName.FullyQualifiedName): New.  Provides the functionality
4536         that users assume FullName would have.
4537         * ecore.cs, namespace.cs: Update to changes.
4538
4539         * statement.cs (Using.assign): Make into ExpressionStatement.
4540         (Using.EmitPreTryBody): Simplify.
4541
4542 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4543
4544         * report.cs: ColorFormat is protected.
4545         
4546         * rootcontext.cs: Unused fields clean-up.
4547         
4548         * namespace.cs: Made UsingEntry name private.
4549
4550 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4551
4552         * cs-tokenizer.cs, location.cs: Removed unused field.
4553
4554 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4555             Raja R Harinath  <harinath@hurrynot.org>
4556
4557         Fix #379822
4558         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4559         (SideEffectConstant.side_effect): Rename from 'right'.
4560         (SideEffectConstant..ctor): Normalize 'side_effect'.
4561         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4562         value of this constant.
4563         * cfold.cs: Update to changes.
4564
4565 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4566
4567         * cs-paser.jay: Removed unused variable.
4568         
4569         * driver.cs: Made Compile instance method.
4570
4571 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4572
4573         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4574
4575 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4576
4577         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4578
4579 2008-04-13  Jb Evain  <jbevain@novell.com>
4580
4581         * namespace.cs: update the System.Core fullname for 2.1
4582         * driver.cs: update the list of required assemblies for 2.1.
4583         Merged from the Moonlight 2 branch.
4584
4585 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4586
4587         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4588         types and user defined operators. User operators arguments has to be checked
4589         for null value before invocation, which also means no operator is called
4590         when any argument is not convertible to unwrapped nullable type.
4591         
4592 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4593
4594         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4595         of Unary expressions to follow operator overloading rules precisely.
4596         Also fixes #321794, #323794
4597         
4598 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4599
4600         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4601         expression.
4602         
4603 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4604
4605         * expression.cs, ecore.cs: Implemented MemberInit expression.
4606         
4607 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4608
4609         Fix mono/tests/exception4.cs
4610         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4611         ec.NeedReturnLabel () rather emitting a 'nop'.
4612
4613         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4614         simple heuristic.
4615         (TryCatch.SomeCodeFollows): Likewise.
4616         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4617         for 'break', 'continue' and 'return' statements inside a try.
4618         We're fairly sure that the generated IL stream will have more
4619         instructions textually following the try.
4620         (FlowBranchingTryCatch): Likewise.
4621
4622         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4623         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4624         overrides.
4625
4626         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4627         wrapper -- forward everything to CollectionForeach.
4628         (CollectionForeach.NonDisposableWrapper): New.
4629         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4630         instead of a pop + branch to end.
4631
4632 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4633
4634         A fix for bug #377485
4635         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4636         Propagate location for extension method groups. Report conversion failure at
4637         right place.
4638
4639 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4640
4641         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4642         ListInit and Field expressions.
4643
4644 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4645
4646         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4647         Since $PC is always -1 inside the body of MoveNext, the fault
4648         handler is a no-op.
4649         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4650         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4651         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4652
4653         The denouement!  Fix #324708
4654         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4655         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4656         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4657         'finally' inside the finally clause.
4658
4659         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4660         inside an iterator.  Don't emit the body of the 'finally' inside
4661         the finally clause yet.
4662
4663         Use the ResumableStatement infrastructure for MoveNext ()
4664         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4665         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4666         'old_resume_points'.  Move dispatcher upfront.
4667         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4668         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4669         in an enumerator.  This encodes the main fix in this patch series
4670         -- we can only jump into the first instruction of a try from the
4671         outside, but we want to emit try/finally regions in iterators and
4672         resume in the middle of them.
4673
4674 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4675
4676         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4677         of NeedReturnLabel here.
4678
4679         Introduce a common point for emitting try/finally to IL
4680         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4681         features of the various subclasses, which are now driven by ...
4682         (ExceptionStatement.EmitPreTryBody): ... this and ...
4683         (ExceptionStatement.EmitTryBody): ... this and the original
4684         EmitFinallyBody.
4685         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4686         Remove DoEmit and update to follow above protocol.
4687
4688         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4689         of the dispatcher are the same, skip emitting the 'switch'.
4690         * iterator.cs (Iterator.EmitDispose): Update to changes.
4691
4692         Clean up handling of 'using' statement
4693         * statement.cs (UsingTemporary): New.  Carved out of ...
4694         (Using): ... this.  Simplify drastically.  Handle exactly
4695         one variable.
4696         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4697         or Using as appropriate.  If there are multiple variable declared,
4698         create nested Using statements.
4699         (resource_acquisition): Kill.
4700
4701         * statement.cs (ExceptionStatement.EmitForDispose): Use
4702         EmitFinallyBody, not EmitFinally.
4703
4704         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4705         * iterator.cs: Update to changes.
4706
4707         Start using the ResumableStatement infrastructure
4708         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4709         (ResumableStatement.EmitForDispose): New.
4710         (ExceptionStatement): Override them.
4711         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4712         EmitForDispose to create the body of the Dispose method.  Don't
4713         use OldResumePoint.
4714
4715         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4716         * statement.cs (Toplevel.AddResumePoint): ... here.
4717         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4718         * flowanalysis.cs (FlowBranchingIterator): New.
4719         * codegen.cs (EmitContext): Update to changes.
4720
4721         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4722         (Iterator.old_resume_points): Rename from 'resume_points'.
4723         (Iterator.MoveNextStatement): Remove unused class.
4724
4725         New infrastructure for try/finally in iterators (still unused)
4726         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4727         (FlowBranchingToplevel.AddResumePoint): Hook into
4728         ToplevelBlock.AddResumePoint.
4729         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4730         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4731         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4732         resume points and assign program-counter values.
4733         (ExceptionBlock.AddResumePoint): Collect resume points for
4734         de-muxer at the top of try block.
4735         * iterators.cs (Yield.CheckContext): Simplify.
4736         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4737
4738 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4739
4740         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4741         argument to an ExitStatement.
4742         (FlowBranchingException): Refactor saved origins code.
4743         * statement.cs (ExitStatement): Update to cahges.
4744         * iterator.cs (YieldBreak): Likewise.
4745
4746         * statement.cs (ResumableStatement): New.  Common base class for
4747         YieldReturn and ExceptionStatement.
4748         (ExitStatement): New.  Common base class for Return and YieldBreak.
4749         (Return): Update to changes.
4750         * iterator.cs (YieldBreak): Likewise.
4751         * lambda.cs (ContextualReturn): Likewise.
4752
4753         Fix #377028
4754         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4755         emit a meaningful error message.
4756
4757         Fix #324765, #319508
4758         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4759         (VariableInfo.SetAssigned): Set it.
4760         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4761         determine if CS0219 or CS0168 is appropriate.  Don't use
4762         flow-analysis information.
4763         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4764         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4765         (EmitContext.EndFlowBranching): ... this.
4766
4767 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4768
4769         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4770
4771 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4772
4773         A fix for bug #376508
4774         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4775         ImplicitConversionExists.
4776
4777 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4778
4779         * expression.cs (Binary): Added remaining binary operators to expression
4780         tree builder.
4781
4782         * nullable.cs: Optimize shift with null argument.
4783
4784 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4785
4786         Fix minor IL regression
4787         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4788         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4789         * cs-parser.jay (try_statement): Update to changes.
4790
4791         * statement.cs (TryFinally.need_exc_block): Delete.
4792         (TryFinally): Update to changes.
4793
4794         Now all ExceptionStatements are unconditional
4795         * statement.cs (CollectionForeach.DisposableWrapper): New.
4796         Extract out the try/finally code into a new wrapper.
4797         (CollectionForeach.Resolve): Use it to simplify the code.
4798
4799 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4800
4801         Start at simplifying ExceptionStatement semantics a bit
4802         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4803         * cs-parser.jay (try_statement): Update to changes.
4804         (opt_catch_clauses): Remove.
4805         * flowanalysis.cs: Update to changes.
4806         (FlowBranching.BranchingType.TryCatch): New.
4807         (FlowBranchingTryCatch): New.
4808
4809         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4810         (FlowBranching.CreateBranching): Update to changes.
4811         (FlowBranchingBlock.AddSibling): Add sanity check.
4812         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4813         Update to changes.
4814
4815         * iterators.cs (Iterator.MarkFinally): Remove.
4816         * statement.cs (ExceptionStatement): Update to changes.
4817
4818         Add support for skipping over finally blocks at runtime.  First
4819         in a series to fix #324708
4820         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4821         (Iterator.EmitMoveNext): Initialize it.
4822         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4823         branch over the body of the 'finally' clause.
4824
4825 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4826
4827         Avoid lopsided use of Foo/DoFoo names
4828         * statement.cs (ExpressionStatement.EmitFinallyBody):
4829         Rename from EmitFinally.
4830         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4831         * iterator.cs: Update to changes.
4832
4833 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4834
4835         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4836         based on UserOperatorCall. More binary nullable operators clean up.
4837
4838 2008-04-02  Martin Baulig  <martin@ximian.com>
4839
4840         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4841
4842 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4843
4844         * nullable.cs: Merge user and empty conversions when lifting expression
4845         trees.
4846         
4847         * expression.cs (StringConcat): Implemented expression tree representation.
4848
4849 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4850
4851         * nullable.cs: When lifting null literal and a user operator exists, no call 
4852         is made.
4853         
4854 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4855
4856         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4857         null.
4858
4859 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4860
4861         * nullable.cs, expression.cs: Use namespace instead heavily nested
4862         monster abstract class.
4863
4864 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4865
4866         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4867         lifting of null literal and user operators. Clean up of some temporary
4868         nullable hacks.
4869
4870 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4871
4872         Fix #368224, test-629.cs
4873         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4874         if it crossed an unwind-protect boundary.
4875         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4876         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4877         inside an unwind-protected region.
4878         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4879         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4880         'leave' instead of a 'br' if unwind-protected.
4881         (Iterator.EmitYieldBreak): Likewise.
4882
4883 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4884
4885         * driver.cs: Only define versioninfo resources if no win32 resource
4886         file was specified.
4887
4888 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4889
4890         A fix for bug #372375
4891         * convert.cs: Fixed boxing of nullable types.
4892
4893 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4894
4895         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4896         type.
4897
4898 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4899
4900         A fix for bug #374619
4901         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4902         
4903 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4904
4905         * lambda.cs: Check return type only for invocation.
4906         
4907 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4908
4909         A fix for bug #374214
4910         * ecore.cs: Correctly report argument type mismatch.
4911
4912 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4913
4914         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4915         and not rely on broken IsEnum.
4916
4917 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4918
4919         * nullable.cs: New file, extracted from generic.cs.
4920         
4921         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4922
4923 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4924
4925         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4926         predefined comparison operators and null literals.
4927         
4928         * report.cs: New warning ID.
4929         
4930 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4931
4932         A fix for bug #370577
4933         * lambda.cs: Check return type too.
4934
4935 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4936
4937         A fix for bug #372846
4938         * class.cs: Automatic properties can be declared as unsafe.
4939
4940 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4941
4942         * location.cs: Use string based concatenation.
4943         
4944         * expression.cs: LiftedBinaryOperator is gmcs only.
4945         
4946 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4947
4948         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4949         conversions rules and expression trees.
4950
4951 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4952
4953         * delegate.cs: Use extension method source as delegate target.
4954
4955 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4956
4957         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4958         binary operations to be purely based on binary operations and optimized
4959         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4960         and other ET refactoring.
4961         
4962         * typemanager.cs: Fixed warning.
4963         
4964 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4965
4966         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4967         
4968         * symbolwriter.cs: Fixed.
4969
4970 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4971
4972         * anonymous.cs, driver.cs: Reset anonymous types counters.
4973
4974 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4975
4976         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4977         
4978         * class.cs: Use fullname for all type member definitions.
4979         
4980 2008-02-19  Martin Baulig  <martin@ximian.com>
4981
4982         * class.cs
4983         (IMethodData.EmitExtraSymbolInfo): New interface method.
4984         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4985         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4986         interface method here as an empty public virtual method.
4987
4988         * anonymous.cs
4989         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4990         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4991         CodeGen.SymbolWriter.SetRealMethodName().       
4992
4993 2008-02-18  Martin Baulig  <martin@ximian.com>
4994
4995         * anonymous.cs
4996         (ScopeInfo.EmitType): Override this and emit debugging
4997         information for captured variables.
4998         (RootScopeInfo.EmitType): Override this and emit symbol
4999         information for a captured `this'.
5000
5001 2008-02-15  Martin Baulig  <martin@ximian.com>
5002
5003         * iterators.cs: Emit debugging info.
5004
5005         * codegen.cs
5006         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5007         (EmitContext.OmitDebuggingInfo): New public property.
5008
5009         * statement.cs
5010         (While): Override Emit() and don't emit symbol info there; do it
5011         inside DoEmit() instead.
5012         (Block.Emit): Omit symbol information while emitting the scope
5013         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5014         block logic.
5015         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5016         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5017         .ctor to make `IsIterator' work.
5018
5019 2008-03-14  Martin Baulig  <martin@ximian.com>
5020
5021         * symbolwriter.cs: Added the new symbol writer function from the
5022         debugger's `terrania' branch; temporarily enclose them inside
5023         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5024         my vacations.
5025
5026 2008-03-14  Martin Baulig  <martin@ximian.com>
5027
5028         * symbolwriter.cs
5029         (SymbolWriter): Make this a public static class.
5030
5031         * codegen.cs
5032         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5033         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5034
5035 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5036
5037         A fix for bug #370577
5038         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5039         return type.
5040         
5041 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5042
5043         * typemanager.cs (CSharpName): Made 250 times faster.
5044
5045 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5046
5047         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5048         
5049 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5050
5051         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5052         crash when predefined field does not exist.
5053         
5054 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5055
5056         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5057         
5058 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5059
5060         * class.cs (FixedField): Don't crash when contructors are missing.
5061
5062 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5063
5064         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5065         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5066         check internal types accessibility for internal and external types.
5067         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5068
5069 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5070
5071         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5072         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5073         attribute.cs, statement: Use corect instance of predefined types (work
5074         related to #364674).
5075
5076 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5077
5078         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5079         
5080 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5081
5082         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5083         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5084         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5085         predefined types clean up, delayed predefined types members initialization
5086         (work related to #364674).
5087
5088 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5089
5090         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5091         
5092 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5093
5094         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5095         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5096         predefined types clean up (work related to #364674).
5097
5098 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5099
5100         * ecore.cs: Print an error message instead of throwing exception.
5101         
5102 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5103
5104         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5105         expression.cs, statement.cs: Unififed null literal representation.
5106
5107 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5108
5109         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5110         expression.cs: Refactored binary operators resolve phase and improved speed.
5111         The nullable code is still missing and won't work correctly, more fixes
5112         required.
5113
5114         It also fixes #323726, #324312, #324248, and many other unreported issues.
5115
5116 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5117
5118         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5119         instead of 'gmcs'.
5120
5121 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5122
5123         * ecore.cs: Clean-up and split BetterConversion.
5124         
5125 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5126
5127         Fix #363791
5128         * enum.cs (EnumMember.Value): Only access 'value' if
5129         ResolveValue says it's ok.
5130         (EnumMember.DoResolveValue): Don't set prev_member.value.
5131         (Enum.GetDefinition): Reverse arguments of Equals --
5132         EnumMember.Value can return 'null'.
5133
5134         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5135
5136 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5137
5138         * generic.cs, expression.cs: More ongoing work on expression trees.
5139         
5140 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5141
5142         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5143         handle missing matches when mutiple operators exist.
5144         
5145 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5146
5147         A fix for bug #363218
5148         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5149         initializers.
5150         
5151 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5152
5153         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5154         update. This time to deal correctly with SideEffectConstant expression used
5155         as an argument for another constant folding.
5156
5157 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5158
5159         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5160         MethodBuilder.
5161
5162 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5163
5164         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5165
5166 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5167
5168         A fix for bug #328136
5169         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5170         side is a false constant, because we still need to evaluate the right-hand
5171         side.
5172
5173         * statement.cs (If): Emit two types of boolean constants (simple constant,
5174         side-effect constant).
5175
5176 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5177
5178         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5179
5180         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5181         constants.
5182
5183 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5184
5185         A fix for bug #361457
5186         * ecore.cs (IsApplicable): Params methods have lower priority.
5187
5188         * support.cs: Return correct parameter modifier for params types.
5189
5190 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5191
5192         * generic.cs (TypeParameter): Cache attribute target name.
5193
5194         * support.cs: Removed unused variable.
5195
5196         * typemanager.cs: Removed debugging leftover.
5197
5198         * ecore.cs: Use local type instead of a property;
5199
5200         * class.cs (VerifyMembers): Consider also parent to test whether type member
5201         is local or public.
5202
5203         * expression.cs (FullMethodDesc): Removed.
5204
5205         * attribute.cs (IsValidArgumentType): Made static.
5206
5207 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5208
5209         Cleanup to be more readable.
5210         * Makefile (GMCS_PROFILE): Remove.
5211         (COMPILER_NAME): New helper.
5212
5213 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5214
5215         * cs-tokenizer.cs: if a conditional expression happens inside a
5216         (...) this also means that we do not need to de-ambiguate between
5217         an parenthesized expression and a cast.
5218
5219         Fixes 346484.
5220
5221         * constant.cs (SideEffectConstant): a constant value that happens
5222         to have a side effect.
5223
5224         Fixes the build regressions introduced by the fix for #359789
5225
5226 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5227
5228         * expression.cs (Conditional.Emit): when emitting the ternary
5229         operator, use local variables to generate code verifiable code.
5230
5231         The verifier cannot infer that the type on stack before the
5232         stloc.0 is executed is of type ParentB. This happens because the
5233         stack merge algorithm uses only parent types when deciding which
5234         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5235         335.
5236
5237         This code compiled with mcs is not verifiable under MS. The MS
5238         verifier picks the first common interface of Foo and Bar, which is
5239         wrong, but doesn't use a full join type of the 2 interfaces.
5240
5241         CSC uses a clever hack to compile such code in a verifiable
5242         way. It stores the intermediate values in a local variable with
5243         the expected type.
5244
5245         Fixes: #358102
5246
5247 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5248
5249         * expression.cs: Do not fold BitwiseAnd operators when the left
5250         side is a false constant, because we still need to evaluate the
5251         right-hand side.
5252
5253         Fixes #359789
5254
5255         * support.cs: Instead of throwing an InternalErrorException when
5256         the position of the stream is outside the boundary of our buffer,
5257         reset the state of the reader, and restart the reading from the
5258         beginning of the file.
5259
5260 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5261
5262         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5263
5264 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5265
5266         A fix for bug #361686
5267         * decl.cs: A protected types used inside a private class which parents
5268         derives from the protected class are accessible.
5269
5270 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5271
5272         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5273         the parameterless constructor.
5274
5275 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5276
5277         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5278         lookup methods to use standard member cache when doing member lookup.
5279
5280 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5281
5282         * driver.cs: Don't report full path for referenced module as assembly error.
5283
5284 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5285
5286         * Makefile: Fixed `qh' target to work on all machines.
5287
5288         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5289         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5290         and HasElementType with TypeManager implementation.
5291
5292 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5293
5294         A fix for bugs #325134, #359749
5295         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5296         first binds point to non-method member expression.
5297
5298 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5299
5300         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5301
5302 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5303
5304         A fix for bugs #321394, #323028
5305         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5306         Reworked naive IsAccessibleAs implementation to handle nested types.
5307
5308 2008-02-05  Jb Evain  <jbevain@novell.com>
5309
5310         * class.cs: use generic type comparison for parameters
5311         as well.
5312
5313 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5314
5315         A fix for bug #325372
5316         * class.cs: Use generic type comparison when testing method signatures.
5317
5318 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5319
5320         A fix for bug #357047
5321         * ecore.cs: Applied C# 3.0 changes to better conversion.
5322
5323 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5324
5325         A fix for bug #358374
5326         * cs-parser.jay: Correctly set modifiers for all constructor types.
5327
5328 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5329
5330         A fix for bug #355251
5331         * generic.cs: Added base class constraint based type inference.
5332
5333 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5334
5335         A fix for bug #357255
5336         * decl.cs: One more missing visibility check.
5337
5338 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5339
5340         * support.cs: Fixed broken return.
5341
5342 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5343
5344         * report.cs: Correctly reset warnings count after probing.
5345
5346 2008-01-25  Martin Baulig  <martin@ximian.com>
5347
5348         * namespace.cs
5349         (NamespaceEntry.SymbolFileID): Make this work again after
5350         MemberName.ToString() is gone.
5351
5352 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5353
5354         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5355         expressions.
5356
5357 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5358
5359         * generic.cs: Use full implicit conversion for type inference fixing.
5360
5361 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5362
5363         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5364         Fixed user operator conversions.
5365
5366 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5367
5368         * generic.cs: Do nullable type to null comparison optimization during
5369         resolve phase.
5370
5371 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5372
5373         A fix for bug #355163
5374         * generic.cs: Enabled l-value resolve on nullable expressions.
5375
5376 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5377
5378         A fix for bug #353986
5379         * class.cs: Ingore static ctors with parameters for any further checks.
5380
5381 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5382
5383         A fix for bug #354310
5384         * namespace.cs: Removed redundant check.
5385
5386 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5387
5388         A fix for bug #354928
5389         * expression.cs: ElementInitializers can be resolved only once.
5390
5391 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5392
5393         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5394         Condition expressions.
5395
5396 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5397
5398         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5399
5400 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5401
5402         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5403         not allowed.
5404
5405         * generic.cs: Implemented coalesce expression.
5406
5407 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5408
5409         A fix for bug #355145
5410         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5411         expression tree type inference.
5412
5413 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5414
5415         Fix #354663
5416         * expression.cs (Binary.IsUnsignedType): Fix typo.
5417
5418 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5419
5420         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5421
5422 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5423
5424         A fix for bug #355161
5425         * ecore.cs, expression.cs: Wider range of extension method supported
5426         expressions.
5427
5428 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5429
5430         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5431         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5432         bug #354970.
5433
5434 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5435
5436         A fix for bug #355148
5437         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5438
5439 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5440
5441         * expression.cs (CreateExpressionTree): Add support for or and
5442         logical or, and indent following the coding conventions.
5443
5444         * typemanager.cs (LinqExpression): renamed from
5445         ExpressionTreeManager, for a shorter name.
5446
5447         Use TypeManager.CoreLookupType to lookup types from our core
5448         assemblies and turn those into "Type" variables.
5449
5450         Consumers that previously used "Namespace" and "Type" from this
5451         class should instead use the TypeExpression which is a type that
5452         is fully resolved (without involving the regular C# resolution
5453         rules). 
5454
5455         This typically looks like this:
5456
5457         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5458         new MemberAccess (texpr, name, type_arguments, loc)
5459
5460         This avoids the problem in: #355178
5461
5462 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5463
5464         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5465         feature in parser only as we do in other cases.
5466         
5467 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5468
5469         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5470         typemanager.cs: A refactoring of params arguments to reuse existing
5471         expressions (params -> array initializer) to emit params argument instead
5472         of specialized handling.
5473         It was required by expression tree implementation and it has other benefits
5474         as well, we now apply same optimization for params arguments as we do for
5475         array initializers.
5476         
5477 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5478
5479         A fix for bug #353526
5480         * generic.cs: A type inference of params arguments may not required any
5481         temporary array creation.
5482         
5483 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5484
5485         A fix for bug #353534
5486         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5487         supported for delegates only.
5488         
5489 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5490
5491         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5492         type for more than 1 candidates.
5493         
5494 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5495
5496         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5497         expressions.
5498         
5499 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5500
5501         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5502         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5503         operator) expressions. 
5504                 
5505 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5506
5507         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5508         not accessed from the generated IL.
5509
5510 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5511
5512         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5513         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5514         statement.cs: The first expression tree implementation drop, mostly
5515         infrastructure work.
5516
5517 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5518
5519         * ecore.cs (IsNestedChild): Refactored.
5520
5521 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5522
5523         * lambda.cs: Don't use a cast on unknown expression statement.
5524
5525 2008-01-10  Geoff Norton  <gnorton@novell.com>
5526
5527         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5528         arguments
5529
5530 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5531
5532         * doc.cs: Report better /doc crash details.
5533         
5534 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5535
5536         A fix for bug #352536
5537         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5538
5539 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5540
5541         A fix for bug #352287
5542         * ecore.cs, expression.cs: Do `this' access checking in all member access
5543         expressions.
5544         
5545 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5546
5547         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5548         
5549         * report.cs: Reset message stacks.
5550         
5551 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5552
5553         * generic.cs (InferInPhases): Correctly calculate params position.
5554         
5555 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5556
5557         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5558         arguments.
5559
5560 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5561
5562         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5563         
5564         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5565         
5566         * driver.cs: Updated --help option.
5567         
5568 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5569
5570         * generic.cs (InferParamsTypeArguments): Removed.
5571         (InferInPhases): Add params type inference.
5572         (LowerBoundInference): Fixed scoring mechanism.
5573         
5574         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5575         
5576 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5577
5578         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5579         byte array for unsigned "baked" assemblies.
5580
5581 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5582
5583         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5584         array for assemblies that are not strongnamed.
5585
5586 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5587
5588         A fix for bug #351481
5589         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5590         declaring type for nested generic types.
5591         
5592 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5593
5594         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5595         instead of ToString.
5596         
5597 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5598
5599         A fix for bug #351047
5600         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5601         null and structs only when equality and inequality operators are defined
5602         either as an user-operators or predefined operators.
5603         
5604 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5605
5606         A fix for bug #351047
5607         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5608         
5609 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5610
5611         A fix for bug #351257
5612         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5613         
5614 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5615
5616         A fix for bug #351157
5617         * class.cs (Using): Fixed yet another broken cloning.
5618         
5619         (Block): Put back more sensible default value for statements.
5620         
5621 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5622
5623         * codegen.cs: Allow AssemblyVersion with only major version component.
5624         Fixes bug #351055.
5625
5626 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5627
5628         A fix for bug #324654
5629         * class.cs: Use FullName property as member name.
5630
5631 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5632
5633         A fix for bug #342117
5634         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5635         constructor constraint.
5636
5637 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5638
5639         A fix for bug #338273
5640         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5641         only.
5642
5643 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5644
5645         A fix for bug #350839
5646         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5647
5648 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5649
5650         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5651         GHOP:
5652         
5653         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5654
5655         * statement.cs: Changed some Hashtables to use HybridDictionaries
5656         instead. It was observed that some HashTables only contained a few
5657         items in the vast majority of cases. Since HybridDictionary is
5658         more efficient on small sets (<10 elements), "known_variables"
5659         from class ExplicitBlock as well as "labels" and "constants " from
5660         class Block were changed to HybridDictionaries. 
5661
5662         Atsai results: (56216kb->54987kb)
5663
5664         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5665
5666
5667 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5668
5669         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5670         GHOP:
5671         
5672         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5673         
5674         * expression.cs: foreach loop to for loop, saved on allocation of
5675         enumerator (59333kb->59141kb)
5676
5677         * statement.cs. Changed foreach loops to for loops, saved on
5678         allocation of enumerator (59141kb->59006kb)
5679
5680         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5681         when constructed with no specified capacity. This was causing a
5682         few ArrayLists to allocate more memory than they would potentially
5683         need in the Block class and MemberCache class. Setting the
5684         ArrayLists to construct with a capacity of 1 saves some
5685         memory. (56216kb->55585kb)
5686
5687 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5688
5689         A fix for bug #347189 (2nd issue)
5690         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5691         type.
5692
5693 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5694         
5695         * report.cs: Do not use colors if stdout and stderr are not a
5696         terminal.
5697
5698 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5699
5700         A fix for bug #346998
5701         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5702         overloads.
5703
5704 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5705
5706         A fix for bug #343465
5707         * class.cs: Explicit method name for nested types uses dots only.
5708
5709 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5710
5711         A fix for bug #343707
5712         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5713
5714 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5715
5716         * ecore.cs: Report type inference errors only when arguments count matches
5717         parameter count.
5718         
5719         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5720         
5721         * expression.cs, report.cs: New warning.
5722         
5723         * typemanager.cs: Catch anonymous method type too.
5724
5725 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5726
5727         A fix for bug #346379
5728         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5729
5730 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5731
5732         A fix for bug #347359
5733         * expression.cs (Invocation): Don't resolve already resolved expression.
5734
5735 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5736
5737         A fix for bug #347189
5738         * class.cs (FixedField): Use non-dependent code only in the define phase.
5739
5740 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5741
5742         A fix for bug #348076
5743         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5744
5745 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5746
5747         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5748         discovered extension methods.
5749
5750 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5751
5752         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5753         method.
5754
5755 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5756
5757         * report.cs (ErrorMessage): Add support for using colors on
5758         terminals that support it. 
5759
5760 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5761
5762         * ecore.cs: Use information about expanded params for error reporting.
5763
5764 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5765
5766         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5767         and logic for params overloads.
5768         
5769 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5770
5771         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5772         as this is also created from the parser.  Fixes #349034
5773
5774 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5775
5776         * statement.cs (Throw.CloneTo): it is valid to have empty
5777         expressions for throw. 
5778
5779 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5780
5781         * cs-parser.jay: Set delegate constraint parsing region correctly.
5782
5783 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5784
5785         A fix for bug #345467
5786         * typemanager.cs (IsEqual): Compare generic parameters position only.
5787         
5788 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5789
5790         * expression.cs (BaseAccess): Type arguments can be null.
5791
5792 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5793
5794         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5795         consistent even when an error has occured.
5796         (Switch.Resolve): Likewise.
5797
5798 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5799
5800         A fix for bug #334505
5801         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5802         overrides.
5803         
5804 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5805
5806         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5807         refactorings required to resolve extension methods correctly when mixing
5808         generics and non-generics members.
5809         
5810 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5811
5812         A fix for bug #342584
5813         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5814         conversion.
5815         
5816 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5817
5818         A fix for bug #342512
5819         * delegate.cs: Use delegate argument expression when is available. Don't
5820         emit virtual call when class is sealed.
5821         
5822 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5823
5824         A fix for bug #325423
5825         * assign.cs (FieldInitializer): Use resolved expression for emit.
5826         
5827         * class.cs: Print less confusing error message.
5828         
5829 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5830
5831         * cs-tokenizer.cs: Removed GMCS ifdefs.
5832         
5833         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5834         mcs.
5835         
5836         * cs-parser.jay: Disabled nullable check.
5837         
5838         * generic-mcs: Copied more generic stuff.
5839                 
5840 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5841
5842         * gcs-parser.jay: Merged to cs-parser.jay.
5843         
5844         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5845         * *.csproj, *.sources: Updated to use only jay parser file.
5846
5847 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5848
5849         * gcs-parser.jay: Added nullable and default expression feature checks.
5850         
5851 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5852
5853         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5854         it fixes many TODOs and hidden bugs.
5855         
5856         * expression: Removed duplicate error check.
5857
5858 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5859
5860         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5861         implicitly type local variable only when it is used in a declaration.
5862
5863 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5864
5865         * attribute.cs: Use CS0612 for empty strings.
5866
5867 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5868
5869         * lambda.cs, statement.cs: Contextual return may act as a statement.
5870
5871 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5872
5873         A fix for a regression cause by #324222
5874         * class.cs: Don't report unused even when it implements an interface.
5875         
5876 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5877
5878         A fix for bug #341205
5879         * ecore.cs, expression.cs: Method group expression cannot do static
5880         method access with an instance reference check before overloading takes
5881         a place.
5882         
5883 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5884
5885         A fix for bug #325359
5886         * class.cs: Use predictable name for automatically generated property.
5887         
5888 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5889
5890         A fix for bug #324996
5891         * expression.cs (Is): Handle case where D is nullable and T is not
5892         correctly.
5893         
5894         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5895         
5896 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5897
5898         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5899         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5900         Flush small error reporting changes.
5901         
5902 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5903
5904         A fix for bug #324996
5905         * expression.cs: Rewrote Is expression implementation to work with
5906         generics, nullable types, anonymous method. A const result expression 
5907         uses existing infrastructure instead of custom not fully-featured one.
5908         
5909 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5910
5911         A fix for bug #340202
5912         * class.cs: Consider generics for volatile field.
5913
5914 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5915
5916         A fix for bug #335594
5917         * expression.cs: Use conversion rules when handling string addition.
5918         
5919 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5920
5921         A fix for bug #336651
5922         * expression.cs: Fixed a crash when probing is on.
5923         
5924 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5925
5926         A fix for bug #324242
5927         * covert.cs: Added a conversion from any nullable-type with an 
5928         underlying enum-type to the type System.Enum.
5929         
5930 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5931
5932         A fix for bug #324222
5933         * class.cs: Report all non-used event fields.
5934         
5935 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5936
5937         A fix for bug #325161
5938         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5939         qualifier for generic types.
5940         
5941 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5942
5943         A fix for bug #322971
5944         * expression.cs, ecore.cs: Added intermediate result value check for
5945         indexers. 
5946         
5947 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5948
5949         A fix for bug #324754
5950         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5951         when it was requested.
5952
5953 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5954
5955         A fix for bug #325101
5956         * expression.cs: Do type not value comparison for `is' expression.
5957
5958 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5959
5960         A fix for bug #320236
5961         * convert.cs: Don't apply user conversion on underlying target type.
5962
5963 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5964
5965         * expression.cs: Don't use unresolved expression for error reporting.
5966  
5967 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5968
5969         A fix for bugs #337712, #324490
5970         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5971         overloading resolution too.
5972         
5973         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5974         the process consistent and more robust.
5975         
5976         * expression.cs, linq.cs, report.cs: Update.
5977
5978 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5979
5980         A fix for bug #332909
5981         * attribute.cs: Resolve attributes in correct context using error
5982         handling procedure.
5983         
5984         * rootcontext.cs: Define Obsolete attribute members as core members.
5985         
5986 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5987
5988         * statement.cs: Removed unused methods.
5989         
5990 2007-10-31  Wade Berrier  <wberrier@novell.com>
5991
5992         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5993         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5994         during 'make dist')
5995
5996 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5997
5998         A fix for bug #338102
5999         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6000         methods registered as non-generics.
6001         
6002 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6003
6004         A fix for bugs #337712, #324490
6005         * delegate.cs: Delegate covariance and contravariance is not allowed for
6006         value types.
6007         
6008 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6009
6010         A fix for bug #337719 
6011         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6012         `from' keyword.
6013         
6014 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6015  
6016         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6017
6018 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6019  
6020         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6021         query expressions.
6022
6023 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6024
6025         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6026
6027 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6028  
6029         A fix for bug #334652
6030         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6031         extension methods when we have not found the best candidate in normal
6032         container.
6033
6034 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6035
6036         * AssemblyInfo.cs: Keep up-to-date.
6037
6038 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6039
6040         * Makefile: Fixed generics compiler name.
6041         
6042 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6043
6044         * lambda.test: removed, lambda parsing is done differently.
6045         
6046         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6047
6048 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6049
6050         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6051
6052 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6053
6054         * Makefile, *.sources : All C# compilers are in mcs folder.
6055         
6056         * *.cs: Use existing 2_1 define for smcs.
6057
6058 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6059
6060         A fix for bug #335847
6061         * assign.cs, expression.cs: Couple of changes to avoid creating a
6062         temporary variable for each object initializer assignment statement. It
6063         simplifies struct initialization too, otherwise two temporary variables
6064         would be required.
6065         Implemented optimization of redundant default element initializers.
6066         
6067 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6068
6069         A fix for bug #336766
6070         * expression.cs (Class.CheckBase): Use generic name when method is
6071         generic.
6072         
6073 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6074
6075         A fix for bug #334737
6076         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6077         variable and not variable argument for prepared copies.
6078
6079 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6080
6081         A fix for bug #325110
6082         * class.cs, expression.cs, attribute.cs: Use open generic method when
6083         checking conditional attribute.
6084         
6085 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6086
6087         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6088         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6089         FeatureIsNotAvailable.
6090
6091 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6092
6093         ** C# 3.0 Partial methods
6094         
6095         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6096         methods support. Because of member cache issue with generics only
6097         non-generics partial methods are fully supported.
6098         
6099 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6100         
6101         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6102         generics and to use member cache for member checking. It also improves
6103         performance and fixes remaining overloads issues.
6104         
6105 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6106         
6107         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6108         roottypes.cs, typemanager.cs:
6109                 
6110         A member cache creation logic changed to add members immediately and
6111         not rely on fallback. The member cache is now only prefered way
6112         how to access and find type declaration members. It saves 5 MB of memory
6113         during MWF compilation and makes code ready for more optimizations and
6114         clean-ups, it's also a pre-requirement for partial methods.
6115         
6116 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6117
6118         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6119         handling for generic parameters.
6120
6121 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6122         
6123         * class.cs (FixedField): Removed redundant volatile check.
6124         
6125 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6126         
6127         * class.cs, decl.cs: Fixed overload members verification to do only one
6128         check per possible collision.
6129         
6130 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6131         
6132         A fix for bug #325478
6133         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6134         and create only one disposable flags container.
6135         
6136 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6137         
6138         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6139         * statement.cs (Fixed): Fixed variables cloning.
6140         
6141 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6142         
6143         A fix for bug #333342
6144         * class.cs (EventField): Don't mark value type event as synchronized. 
6145         
6146 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6147         
6148         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6149         inference to identify best candidate method correctly.
6150         (ProperyExpr): A range variable is read only and cannot be modified.
6151         
6152 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6153         
6154         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6155         logic to identify best candidate method correctly.
6156         
6157 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6158         
6159         * location.cs (Equals, GetHashCode): Removed.
6160         
6161 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6162         
6163         * report.cs: Implemented message recorder. It is used mainly for lambda
6164         expressions to capture otherwise swallowed error messages.
6165         
6166         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6167
6168         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6169         and not at the top.
6170         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6171                 
6172         * expression.cs (MemberAccess): Always report lookup failure.
6173         
6174         * location.cs: Implemented Equals, GetHashCode.
6175         
6176         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6177         
6178 2007-10-10  Jb Evain  <jbevain@novell.com>
6179
6180         * codegen.cs: re-enable assembly version check.
6181
6182 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6183         
6184         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6185         checks.
6186         
6187         * namespace.cs (UsingAlias): Do correct version check.
6188         
6189 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6190         
6191         * expresison.cs, ecore.cs: Issue extension method error message when
6192         appropriate.
6193         
6194         * rootcontext.cs: Added ISO_2 compiler mode option.
6195
6196 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6197         
6198         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6199          message.
6200         
6201 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6202         
6203         * attribute.cs (GetString, GetBoolean): Work with both literal and
6204         constant.
6205         
6206         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6207         Moved method overload specific methods to MethodGroupExpr.
6208         
6209         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6210         it should be less memory consuming.
6211         
6212 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6213
6214         * codegen.cs: remove the assembly version check until the buildbot is
6215         fixed.
6216
6217 2007-10-07  Jb Evain  <jbevain@novell.com>
6218
6219         * attribute.cs (Attribute.GetString): if the value
6220         expression is a StringConstant, return its string value.
6221
6222 2007-10-07  Jb Evain  <jbevain@novell.com>
6223
6224         * typemanager.cs: add `assembly_version_attribute_type`.
6225         * codegen.cs: on attribute emission, check that the
6226         AssemblyVersionAttribute doesn't overflow.
6227
6228 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6229         
6230         A fix for bug #324677
6231         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6232         parent container of a scope container with currently resolved one. 
6233         
6234 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6235         
6236         A fix for bug #325534
6237         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6238         only.
6239         
6240 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6241         
6242         A fix for bug #327504
6243         * class.cs (Operator.Define): Refactored implicit and explicit user
6244         operator conversion rules.
6245         
6246 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6247         
6248         A fix for bug #327520
6249         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6250         
6251 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6252         
6253         A fix for bug #328022
6254         * class.cs (MethodData.Define): Use correct method to check whether
6255         a method implementents an accessor.
6256         
6257 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6258         
6259         A fix for bug #330069
6260         * statement.cs (Fixed.Resolve): Read the first array element only when
6261         an array is instantiated. 
6262         
6263 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6264         
6265         * expression.cs, assign.cs, generics.cs: Print correct operator when
6266         compound assignment is used.
6267         
6268 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6269         
6270         A fix for bug #325841
6271         * expression.cs (ArrayAccess): Use full argument cloning only for
6272         string compound concatenation.
6273         
6274 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6275         
6276         A fix for bug #328774
6277         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6278         assignment.
6279         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6280         assignment.
6281
6282 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6283
6284         Fix #328490
6285         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6286         Event accessibility checks here.  Remove some bogus code that
6287         accidently made GenericMethods work.
6288         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6289
6290 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6291         
6292         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6293         
6294         * statement.cs (Block): Refactored AddVariable to allow error handling
6295         customization.
6296         
6297         * generic.cs: New stub.
6298         
6299 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6300         
6301         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6302         flag.
6303         
6304 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6305
6306         * class.cs: Use partial container to record whether any partial part
6307         contains static field initializer and therefore default contructor has
6308         to be defined.
6309         
6310 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6311
6312         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6313         mono-list when only one of two partial parts has defined accessibility
6314         modifier.
6315         
6316 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6317
6318         A fix for bug #82845
6319         
6320         * class.cs (TypeContainer): Set correct resolve context for all field
6321         initializers.
6322         
6323 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6324
6325         * assign.cs: Fixed a crash when field is resolved twice with an error.
6326         
6327         * codegen.cs: Changed InFieldInitializer to be flag.
6328         
6329         * anonymous.cs, ecore.cs, expression.cs: Update after
6330         IsInFieldInitializer rename.
6331         
6332         * const.cs: Removed unused parameter.
6333         
6334         * class.cs: Changed the way how we resolve and emit field initializers.
6335         The field initilizers have to have access to contructor block to emit
6336         compiler generated code.
6337
6338 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6339
6340         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6341         generics use TypeContainer instead.
6342         
6343 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6344         
6345         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6346
6347         * lambda.cs (ResolveParameters): Use more powerful
6348         InflateGenericArgument.
6349         
6350         * parameters.cs: Better exception message.
6351                 
6352 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6353
6354         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6355         correct expression block type. 
6356         
6357         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6358         
6359         * expression.cs (Invocation): Extracted method group resolve to
6360         DoResolveOverload.
6361         
6362 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6363
6364         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6365         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6366         
6367         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6368         generic extension methods.
6369
6370 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6371
6372         A fix for bug #82676 (Do I get it right now?)
6373         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6374         object before a standard conversion is applied.
6375         
6376 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6377
6378         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6379         #82676.
6380         
6381 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6382
6383         A fix for bug #82676
6384         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6385         non-generic interface types.
6386         
6387 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6388
6389         A fix for bug #82690
6390         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6391         
6392 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6393
6394         A fix for bug #82571
6395         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6396         modifier for container based methods.
6397         
6398 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6399
6400         A fix for bug #82676
6401         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6402         any interface-type T means to any of interface type T.
6403
6404 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6405
6406         * namespace.cs: We have 2 versions of System.Core assembly.
6407
6408 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6409
6410         A fix for bug #82652
6411         * class.cs (Class.GetClassBases): Compare types and not expressions.
6412
6413 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6414
6415         A fix for bug #82620
6416         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6417         actually never worked before.
6418         (IndexerAccess): Emit prepared arguments before they are modified.
6419         
6420 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6421
6422         A fix for bug #82563
6423         * assign.cs: Revert wrong fix.
6424         
6425         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6426         correctly.
6427         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6428         Instead of ldelema/stdind we have to use temporary variables to handle
6429         cases like String.Concat (params string[]).
6430         
6431 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6432
6433         * class.cs: EmitAttributes to Emit rename.
6434         
6435         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6436         null.
6437         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6438         GetClsCompliantAttributeValue execution.
6439         
6440 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6441
6442         * anonymous.cs: Use shorter type prefix.
6443         
6444         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6445         when exist.
6446         
6447         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6448         variables when probing is on.
6449         
6450         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6451         unresolved variables.
6452         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6453         handle transparent identifiers.
6454         
6455 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6456
6457         * attribute.cs (IsClsCompliant): Add nullable types test.
6458         
6459 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6460
6461         * doc.cs : catch other types of exception than XmlException to
6462           report CS1570. Fixed bug #82565.
6463
6464 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6465
6466         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6467         The number of delegate parameters has to match.
6468         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6469         arrays.
6470
6471 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6472
6473         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6474         to fix problem with private arguments.
6475
6476 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6477
6478         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6479         
6480         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6481         
6482         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6483         empty. Add cloning suport.
6484         
6485         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6486
6487 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6488
6489         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6490         to create EmptyCast. It handles EmptyConstantCast specialization for
6491         constants.
6492         
6493 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6494
6495         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6496         (EmitArrayArgument): One routine for array arguments.
6497         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6498         
6499 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6500
6501         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6502
6503 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6504
6505         * anonymous.cs: MemberLookupFinal update.
6506
6507         * class.cs (ConstructorInitializer): Is expression based.
6508         
6509         * delegate.cs: MethodGroupExpr update.
6510         
6511         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6512         messages.
6513         (Error_MemberLookupFailed): Customizable error override.
6514         (MethodGroupExpr): Keep queried type for later usage.
6515         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6516         resolve.
6517         
6518         * expression.cs: Error_MemberLookupFailed refactoring.
6519         (New.DoResolve): Resolve as much as possible.
6520         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6521         customization for invalid member types.
6522
6523         * statement.cs: MethodGroupExpr update.
6524         
6525 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6526
6527         * modifier.cs (Check): Check all modifiers and not only accessibility
6528         ones.
6529
6530 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6531
6532         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6533         type and not an expression.
6534
6535 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6536
6537         * statement.cs (Catch.Clone): Type and variable can be null.
6538
6539 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6540
6541         A fix for bug #81979
6542         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6543         I am really not sure whether this is the best fix.
6544         
6545         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6546         only once.
6547         
6548 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6549
6550         ** C# 3.0 Object and collection initializers (major re-write)
6551         
6552         * assign.cs (DoResolve): Initializers are not assign related.
6553         
6554         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6555         used during collection or object initialization.
6556         
6557         * expression.cs (Error_InvalidArguments): Add initializers specific
6558         messages. More will come later because it requires some general
6559         refactoring.
6560         (New.DoResolve): Better error handling for unsafe types.
6561         (EmptyExpressionStatement): New class.
6562         (ElementInitializer): An object initializer expression.
6563         (CollectionElementInitializer): A collection initializer expression.
6564         (CollectionOrObjectInitializers): A block of object or collection
6565         initializers.
6566         (NewInitialize): New expression with element/object initializers.
6567         
6568         * statement.cs: Reverted object/collection initializer hacks.
6569         
6570         * typemanager.cs (CSharpName): Filter __arglist type.
6571         
6572 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6573
6574         ** C# 3.0 Anonymous Types (update to the latest standard)
6575         
6576         * expression.cs (Binary.ResolveOperator): Threat all null based types
6577         same.
6578         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6579         (AnonymousTypeParameter): Updated.
6580         
6581         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6582         (AnonymousTypeClass): New anonymous type container.
6583         
6584         * class.cs (AddField): Return operation result.
6585         
6586         * generic.cs: Another empty TypeArguments overload.
6587         
6588         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6589         are stored at top of normal hierarchy.
6590         
6591         * typemanager.cs (CSharpName): Filter anonymous types.
6592         
6593 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6594
6595         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6596         as single Concat call. How could we miss that :-(
6597         
6598 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6599
6600         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6601         
6602 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6603
6604         * expression.cs: Fix the previous commit, the creation of the
6605         arguments array list needs also to be conditional on the arguments
6606         not being null.
6607
6608         * class.cs: Add a little bit of help to help narrow down problems.
6609
6610         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6611         not try to copy in that case. 
6612
6613         * driver.cs: When building SMCS, include a new different set of
6614         default assemblies here.   Do this here so we can control whether
6615         to include the default assemblies with /noconfig.
6616
6617 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6618
6619         A fix for bug #81979
6620         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6621         only.
6622
6623 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6624
6625         A fix for bug #82300
6626
6627         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6628         we are in probing scope.
6629
6630 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6631
6632         A fix for bug #82301
6633
6634         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6635         (Statement.CloneTo): Clone and not map children blocks.
6636
6637 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6638
6639         A fix for bug #82299
6640
6641         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6642         variable too.
6643         
6644         * statement.cs (Statement.CloneTo): Clone variables before statements
6645         to allow remaping of local variables.
6646
6647 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6648
6649         A fix for bug #82296
6650
6651         * anonymous.cs,
6652         * report.cs: Log crash details for future clone problems.
6653         
6654         * statement.cs (Return.Clone): Don't clone non-existent expression.
6655
6656 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6657
6658         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6659         (Class.AddBasesForPart): Move CS0537 check here from ...
6660         * cs-parser.jay (class_declaration): ... here.  Move calling of
6661         'AddBasesForPart' to ...
6662         (class_bases): ... here.
6663         (struct_declaration, interface_declaration): Update to changes.
6664
6665 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6666
6667         A fix for bug #81923
6668
6669         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6670         conversion is allowed.
6671
6672 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6673
6674         A fix for bug #81564
6675
6676         * ecore.cs (EventExpr): Add IsBase handling.
6677
6678         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6679         too.    
6680         
6681 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6682
6683         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6684         * cs-parser.jay: Some whitespace cleanups.
6685         (current_delegate): New.
6686         (type_name): New.
6687         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6688         a dummy code block, and use 'type_name' instead of 'member_name'.
6689         (interface_declaration, class_declaration): Likewise.
6690         (delegate_declaration): Likewise.  Rearrange slightly and use
6691         'current_delegate'.
6692         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6693         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6694
6695 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6696
6697         A fix for bug #82039
6698
6699         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6700         available.
6701
6702         * typemanager.cs (CSharpName): Split to string overload.
6703
6704 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6705
6706         * expression.cs,
6707         * report.cs: Updated warning CS0472.
6708
6709 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6710
6711         A fix for bug #82181
6712         * cs-parser.jay,
6713         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6714
6715 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6716
6717         A fix for bug #82277
6718         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6719
6720 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6721
6722         ** C# 3.0 Type Inference (major bits are working)
6723         
6724         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6725         (.ImplicitStandardConversionExists): Uses compatible.
6726         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6727         (.InferReturnType): New method.
6728         (.Compatible): Refactored.
6729         (.ResolveParameters): Uses factory to create resolved parameters.
6730         (.CompatibleMethod): Add probing mode support.
6731         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6732         clearly distinguish between 2 different operations.
6733         (LambdaMethod): Moved to lambda.cs.
6734         (AnonymousMethod): Removed unused fields and methods.
6735         (AnonymousDelegate): Simplified.
6736         
6737         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6738         
6739         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6740         
6741         * delegate.cs (Delegate): New mehods to reduce code duplication.
6742         (.GetConstructor): New method.
6743         (.GetInvokeMethod): New method.
6744         (DelegateCreation): Updated.
6745         
6746         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6747         does not exist.
6748         (OverloadResolve): Made probing little bit faster.
6749         
6750         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6751         when probing is on.
6752         
6753         * generic.cs (TypeInferenceContext): Dummy implementation.
6754         
6755         * iterators.cs: Updated after Resolve/Define rename.
6756         
6757         * lambda.cs (LambdaExpression)
6758         (.ResolveParameters): Handles both type of arguments and type inference too.
6759         
6760         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6761         (InflateTypes): Updated.
6762         
6763         * support.cs (InflateTypes): Changed signature and updated.
6764         
6765         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6766         (MemberLookup_FindMembers): More MS tricks.
6767         (GetParameterData): Ditto.
6768         (GetDelegateParameters): Uses quick path for dynamic types.
6769         
6770 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6771
6772         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6773         only.
6774
6775 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6776
6777         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6778         syntax.
6779         
6780 2007-07-26  Jb Evain  <jbevain@novell.com>
6781
6782         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6783         which takes a boolean 'report_errors', similar to the GetMethod.
6784         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6785         in .net 2.1, do not report errors here.
6786
6787         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6788         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6789         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6790         in .net 2.1.
6791
6792         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6793         of the type InternalsVisibleToAttribute before the first call
6794         to CoreLookupType which is allowed to fail (third boolean parameter
6795         to true). Because, during the resolution for a type that is not
6796         immediately found, we try to check if the type is not defined in
6797         a friend assembly, and to do so, we need the
6798         InternalVisibleToAttribute.
6799
6800 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6801
6802         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6803         feature that allows structs to be compared against null and inline
6804         the result as true or false.
6805
6806         Notice that the same code is not permitted inside a generic block
6807         of code that would do:
6808
6809         class Foo<T> where T : struct {
6810             bool Eval (T x)
6811             {
6812                  return x == null;
6813             }
6814         }
6815
6816         It is only allowed if the type of T is not bound (no where
6817         clause).   In my opinion, this CSC 2 behavior is broken but people
6818         seem to be using it (IronRuby does, a few bug reports on bugzilla
6819         have it and some people have complained about it).
6820
6821         All of the users that depend on this behavior have code that is
6822         very likely broken. 
6823         
6824         * report.cs (Warning, Error): make these take object arguments,
6825         not strings, as that allows us to take advantage of Format.
6826
6827 2007-07-20  William Holmes  <billholmes54@gmail.com>
6828
6829         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6830           Left member variable for the Count.
6831         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6832           MemberName.CountTypeArguments to avoid a NRE. 
6833
6834         This code is contributed under the MIT X11 license
6835
6836 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6837
6838         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6839
6840 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6841
6842         * doc.cs : generic method arguments are written as ``x while generic
6843           type arguments are `x. Combined with the previous change, fixed bug
6844           #79706.
6845
6846 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6847
6848         Fix #82120
6849         * expression.cs (Binary.ResolveOperator): When converting
6850         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6851
6852 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6853
6854         * doc.cs : when T: or whatever x: is specified, it does not really
6855           check the doc comment's syntax correctness. Fixed bug #82006.
6856
6857 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6858
6859         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6860         LambdaExpression better.
6861         
6862         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6863         
6864         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6865         
6866         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6867         as it can be generated.
6868         
6869         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6870         modifiers.
6871         
6872         * lambda.cs (LambdaExpression): Refactored to share same code with
6873         AnonymousMethodExpression.
6874         
6875 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6876
6877         * anonymous.cs (MakeName): Include host name for easier debugging.
6878         (LambdaMethod): New class for lambda spcecific stuff.
6879         
6880         * attribute.cs: Set EmitContext return type.
6881
6882         * class.cs: Set EmitContext return type.
6883         
6884         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6885         with null/void meaning.
6886         
6887         * iterators.cs (ContainerType): Implemented.
6888         
6889         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6890         
6891         * statement.cs (Return): Updated to lambda expressions.
6892         (Block.CloneTo): Parent can be null.
6893                 
6894 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6895
6896         A fix for bug #81917
6897         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6898         
6899         * class.cs (FixedField): Check whether field is in unsafe scope.
6900
6901         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6902         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6903
6904         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6905         FieldExpr.
6906         
6907         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6908                 
6909 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6910
6911         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6912         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6913         from Report class.
6914
6915 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6916
6917         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6918         
6919 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6920
6921         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6922         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6923         
6924         * codegen.cs(EmitContext): Add ProbingMode flag.
6925         
6926         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6927         
6928         * driver.cs: For now set both warning values.
6929         
6930         * ecore.cs (SimpleName): Name is readonly.
6931         (MethodGroup.OverloadResolve): One quick path for probing.
6932         
6933         * expression.cs (Unary): Set Oper r/o.
6934         (Binary): Set Oper r/o.
6935         (ParameterReference): Set few instance variables as r/o.
6936         (ParameterReference.DoResolveBase): Don't capture aruments when 
6937         the probing is on.
6938         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6939         (Arglist): arguments are private.
6940         (SizeOf): type is private and r/o.
6941         (MemberAccess): arguments are private.
6942
6943         * report.cs: Enhanced reporting on/off capabilities.
6944         
6945         * lambda.cs: Uses ec.IsInProbingMode.
6946         (ContextualReturn): Derives from return.
6947         
6948         * rootcontext.cs: For now set both warning values.
6949         
6950         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6951         copy if one exists.
6952         (Return.Resolve): Don't die immediately.
6953         (Block.Resolve): Speed-up probing.
6954         (Block.CloneTo): Clone only child blocks.
6955
6956 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6957
6958         * iterators.cs: reverted Miguel's latest change (r81925) as it
6959         breaks the build in System.
6960
6961 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6962
6963         * iterators.cs (Yield.CheckContext): Check for the iterator type
6964         also here as we can call into Yield even in codepaths that are not
6965         directly checked by
6966         (MethodOrOperator is the only path that was checked).
6967
6968         In addition to the standard check, use a more specific check for
6969         constructors to report a more verbose error. 
6970
6971 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6972
6973         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6974         report the warning and continue 
6975
6976         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6977         values on the stack on the call to Emit.   Use EmitStatement if
6978         possible, or using Emit + Pop if not possible.   Fixes #82064
6979
6980 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6981
6982         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6983         avoid try...finally in some cases.
6984
6985 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6986
6987         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6988         
6989         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6990         instead of method. Re-use standard error handling.
6991         (ConstructorInitializer.Emit): Simplified.
6992         
6993         * delegate.cs: Updated after Invocation.EmitCall change.
6994         
6995         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6996         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6997         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6998         method and don't permanently changing input arguments.
6999         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7000         is resolved it has one of the candidates is the best one which is later
7001         used to emit. Removed a few unused method.
7002         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7003
7004         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7005         (Binary.ResolveOperator): Ditto.
7006         (ConditionalLogicalOperator.DoResolve): Ditto.
7007         (Invocation): Uses method group.
7008         (Invocation.DoResolve): Simplified.
7009         (Invocation.EmitCall): Removed useless is_static.
7010         (Invocation.Emit): Delegate to method group.
7011         (Invocation.EmitStatement): Simplified.
7012         (New): Uses method group.
7013         (MemberAccess.DoResolve): Don't destroy original expression.
7014         
7015         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7016         
7017 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7018
7019         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7020         
7021         * anonymous.cs,
7022         * lambda.cs: Add custom error message type.
7023
7024 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7025
7026         * lambda.cs: Simplified little bit.
7027         
7028         * parameter.cs: Introduced ImplicitLambdaParameter.
7029         (Parameters.CreateFullyResolved): New factory instead of ctor.
7030         
7031         * anonymous.cs,
7032         * class.cs,
7033         * delegate.cs: Updated parameter creation.
7034         
7035 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7036
7037         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7038         arguments.
7039         
7040         * generic.cs: Synchronized with gmcs.
7041         
7042 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7043
7044         * class.cs (Indexer): Check return type as soon as possible.
7045         
7046         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7047         members too.
7048         
7049         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7050         
7051         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7052         
7053         * parameter.cs (Parameter): Use expression type when it is available.
7054         
7055         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7056         method modifier for the first parameter only.
7057
7058 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7059
7060         A fix for bug #81938
7061         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7062         
7063         * constant.cs: Tide up an exception message.
7064
7065 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7066
7067         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7068         an uninitialized variable is used.
7069         
7070         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7071
7072 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7073
7074         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7075         not found error handling.
7076
7077         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7078         simplified.
7079         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7080         (ArrayCreation.DoResolve): Simplified.
7081         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7082         its own resolve process.
7083         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7084
7085 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7086
7087         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7088         more error details.
7089         
7090 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7091
7092         * cs-tokenizer.cs: Removed var related stuff.
7093         
7094         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7095         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7096         a type and a keyword at same time.
7097         
7098         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7099         matches to "var".
7100         
7101         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7102         implicitly typed arrays, more changes will follow.
7103         
7104         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7105         
7106 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7107
7108         * ecore.cs (VarExpr): Removed Handled field.
7109         
7110         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7111         build-in assign functionality.
7112         (ForEach.Resolve): Removed all implicitly typed local variable code and
7113         simplified.
7114         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7115         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7116
7117 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7118
7119         * assign.cs: Removed implicitly typed local variable check.
7120         
7121         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7122         referencing implicitly typed local variable.
7123         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7124         variable here.
7125         
7126         * statement.cs (Fixed): Removed unsupported implicitly typed local
7127         variable code.
7128
7129 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7130
7131         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7132
7133 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7134
7135         A fix for bugs #81855 and #76274
7136         * attribute.cs (AttachTo): Always set owner for global attributes to
7137         prefined owner.
7138         
7139         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7140         usefull too.
7141         
7142         * cs-parser.jay: Assembly and module attributes must precede all other
7143         elements except using clauses and extern alias declarations.
7144
7145 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7146
7147         A fix for bug #81748
7148         * cs-tokenizer.cs,
7149         * expression.cs: More checks for non ISO-1 features.
7150
7151 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7152
7153         A fix for bug #81807
7154         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7155         present inside switch statement and it is required by nullable check.
7156
7157 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7158
7159         A fix for bug #81840
7160         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7161         when type matching fails.
7162         
7163         * namespace.cs: Tiny error message change.
7164
7165 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7166
7167         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7168         reporting. Added automatic property check.
7169         
7170         * class.cs: Updated after CheckAbstractAndExtern relocation.
7171         (AEventPropertyAccessor.GetSignatureForError): Customized.
7172         
7173 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7174
7175         * class.cs (DefineBaseTypes): Base type can be undefined.
7176         
7177         * ecore.cs (TypeLookup): Minor refactoring.
7178         (DoResolveAsTypeStep): Removed redundant check.
7179
7180         * namespace.cs (Lookup): Removed redundant check.
7181                 
7182         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7183         ResolveAsTypeTerminal step.
7184         (BootstrapCorlib_*): Simplified.
7185         (PopulateCoreType): Core types can be now external.
7186
7187 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7188
7189         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7190          verification only.
7191          (InferTypeArguments): Infers anonymous expression type arguments.
7192          (Compatible): Split to Compatible and InferTypeArguments. 
7193         
7194         * lambda.cs: Updated.
7195
7196 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7197
7198         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7199
7200 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7201
7202         Fix #80477, cs0135-2.cs, cs0135-3.cs
7203         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7204         names to the "known" variables list.
7205         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7206         parameter names are also "known".
7207         (Block.CheckError136): Remove.
7208         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7209         null.
7210
7211 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7212
7213         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7214
7215 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7216
7217         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7218         internal error not an user error.
7219          
7220         * expression.cs (IsApplicable): Refactored to make debugging easier.
7221
7222         * support.cs: More tricks for non-mono runtimes.
7223         
7224         * typemanager.cs (CoreLookupType): Made public.
7225         (InitSystemCore): All linq specific stuff moved to linq.cs
7226
7227 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7228
7229         * typemanager.cs (CSharpSignature): One more missing build-in types
7230         replacement.
7231         More tricks for non-mono runtime.
7232
7233 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7234
7235         * statement.cs (Block.CheckError136_InParents): Remove.
7236         (Block.AddVariable): Use GetParameterInfo instead.
7237         (ToplevelBlock.ProcessArguments): Likewise.
7238
7239 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7240
7241         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7242         information too.
7243         (ToplevelBlock.GetParameterInfo): Split out of ...
7244         (ToplevelBlock.GetParameterRefernce): ... this.
7245         (ToplevelBlock.ParameterMap): Remove.
7246         * expression.cs (ParameterReference): Update to use
7247         ToplevelParameterInfo.
7248
7249         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7250         regression.
7251
7252         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7253         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7254
7255         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7256         (ToplevelBlock.ProcessParameters) ... here.
7257         (ToplevelBlock..ctor): Invoke it.
7258
7259         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7260         new parameters.
7261
7262         * statement.cs (IKnownVariable): New interface.
7263         (LocalInfo): Implement it.
7264         (ToplevelParameterInfo): New class.
7265         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7266         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7267         GetKnownVariableInfo.
7268
7269 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7270
7271         Partly speed up CS0136 error checks.
7272         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7273         'recurse' parameter.
7274         (Block.DoCheckError136): Only check errors in parameters.  Move
7275         local variable checks ...
7276         (Block.AddVariable): ... here, and ...
7277         (ToplevelBlock.ResolveMeta): ... here.
7278
7279 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7280
7281         * statement.cs (Block.IsChildOf): Remove.
7282
7283         * statement.cs (Statement.Clone): Move special case code ...
7284         (Block.CloneTo): ... here.
7285
7286 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7287
7288         * statement.cs (ToplevelBlock.container): Remove field.  It's
7289         redundant with 'Parent'.
7290         (ToplevelBlock.ContainerBlock): Remove accessor.
7291         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7292         child with parent here, ...
7293         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7294         current_block.
7295         (start_anonymous): Don't save current_block.
7296         (top_current_block): Remove.
7297
7298         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7299         (Block.Resolve): Update to changes.
7300         (Block..ctor): Move setting of "correct" 'Toplevel'
7301         and 'Explicit' fields to ...
7302         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7303
7304 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7305
7306         Kill Block.Implicit
7307         * statement.cs (Block.Implicit): Remove.
7308         (Block): Update to changes.
7309         * flowanalysis.cs: Likewise.
7310
7311         Mildly speed up CheckInvariantMeaningInBlock
7312         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7313         Recursively call AddKnownVariable to all enclosing blocks.
7314         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7315         Remove recursive calls.
7316         (Block): Update to changes.
7317
7318         New ExplicitBlock invariants
7319         * statement.cs (Block.Explicit): New field.  It points to the
7320         immediately enclosing non-implicit block.
7321         (Block..ctor): Maintain the invariant.
7322         * cs-parser.jay: Take advantage of invariant.
7323
7324         Introduce ExplicitBlock
7325         * statement.cs (ExplicitBlock): New.
7326         (ToplevelBlock): Derive from it.
7327         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7328         sense of flag.
7329         (Block.Implicit): Update to changes.
7330         * cs-parser.jay: Update to changes.
7331
7332         Remove unused field
7333         * codegen.cs (EmitContext.IsLastStatement): Remove.
7334         * statement.cs (Block.DoEmit): Update to changes.
7335
7336 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7337
7338         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7339         modifying current_block directly.
7340
7341 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7342         
7343         * class.cs: Implemented automatic properties (C# 3.0)
7344           Thanks to Marek for the help.
7345
7346 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7347
7348         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7349         variable as assigned, note also that all its components are
7350         assigned too.
7351         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7352
7353 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7354
7355         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7356         member is marked as compiler generated.
7357         
7358         * decl.cs (MemberCore): Refactored ModFlags into property.
7359
7360         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7361         (Check): Check only accessibility modifiers.
7362
7363 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7364
7365         Track all assignable slots in one bit array
7366         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7367         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7368         logic from VariableMap constructor here.  Use the same 'offset'
7369         variable that's later used for computing offsets of local
7370         variables.
7371         * flowanalysis.cs (UsageVector.parameters): Remove.
7372         (UsageVector): Update to changes.
7373         (VariableMap): Remove.
7374
7375         Avoid creating ParameterMap in every block
7376         * statement.cs (Block.ParameterMap): Move ...
7377         (ToplevelBlock.ParameterMap): ... here.
7378         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7379         only once.
7380         * flowanalysis.cs (FlowBranching.param_map): Remove.
7381         (FlowBranching.UsageVector): Update to changes.
7382         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7383
7384         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7385
7386         * expression.cs (ParameterReference): Distinguish between block
7387         where parameter was referenced and declared.
7388
7389 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7390
7391         * flowanalysis.cs, statement.cs: Put back improved error handling.
7392
7393 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7394         
7395         * assign.cs:
7396         * expression.cs:
7397           Imporved object and collection initialization (C# 3.0).
7398
7399 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7400
7401         A fix for bug #81380
7402         * expression.cs (Is.DoResolve): Only value types have constant `is'
7403         behaviour.
7404
7405 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7406
7407         * statement.cs (ToplevelBlock.child): Remove.
7408
7409 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7410
7411         Rationalize ResolveMeta: refactoring
7412         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7413         out constant handling code into ...
7414         (Block.DoResolveConstants): ... this.
7415
7416         Rationalize ResolveMeta: kill local_map
7417         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7418         (Block.AssignableSlots): New.
7419         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7420         for locals -- move code from VariableMap here.  Avoid unnecessary
7421         allocations.
7422         * flowanalysis.cs (FlowBranching.local_map): Remove.
7423         (FlowBranching..ctor): Use Block.AssignableSlots.
7424         (VariableMap): Remove unused constructors.
7425
7426 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7427
7428         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7429
7430 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7431
7432         * typemanager.cs (IsFriendAssembly): Should not be called for building
7433         assembly.
7434
7435 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7436
7437         * literal.cs (NullConstant): Print null in all cases.
7438         
7439         * expression.cs (Binary.ResolveOperator): Implemented delegate
7440          comparison based on C# 2.0 changes.
7441
7442 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7443
7444         This code is contributed under the MIT X11 license
7445         
7446         The following enables support for several C# 3.0 language features:
7447         
7448         * cs-tokenizer.cs: Added support for the "var" keyword.
7449         
7450         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7451           Added VarExpr class to facilitate type inferencing.
7452         
7453         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7454           to support anonymous types.
7455         
7456         * assign.cs: Added support for type inferencing and initialization.
7457         
7458         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7459         
7460         * expression.cs: Added implicit array support to ArrayCreation.
7461           Added 5 types and 1 interface:
7462           
7463           IInitializable                Implementing classes can inject initializing
7464                                         statements after object instantiation.
7465           
7466           Initializer                   Stores data for object initialization.
7467           
7468           AnonymousType                 An expression for anonymous types.
7469           
7470           AnonymousTypeParameter        Stores data about an anonymous type's field.
7471           
7472           NewInitialize                 An expression for object initialization.
7473           
7474           CollectionInitialize          An expression for collection initialization.
7475         
7476         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7477           statements.
7478
7479 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7480
7481         A fix for bug #81500
7482         * cs-tokenizer.cs: Add special handling for coalescing operator.
7483
7484 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7485
7486         A fix for bug #81529
7487         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7488         its value from base class until it is redefined.
7489
7490 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7491
7492         Fix regression in cs0631-3.cs
7493         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7494         fallback.  Make error fallback catch more cases.
7495
7496 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7497
7498         * cs-parser.jay: Allow parameters in operator declarations to have
7499         attributes. 
7500
7501 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7502
7503         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7504         exists. 
7505
7506         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7507         inside the ContextualReturn, it does not have to be an
7508         ExpressionStatement. 
7509
7510 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7511
7512         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7513         set, set it.
7514
7515 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7516
7517         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7518         method in two methods: ResolveNoDefine and Resolve.
7519
7520         ResolveNoDefine will stop just after ResolveTopBlock has been
7521         called.   
7522
7523         Resolve will then continue by creating a method and issuing the
7524         call to method.Define ().
7525
7526         (AnonymousMethod): Split and implement the new Resolve and
7527         ResolveNoDefine as well.
7528
7529         * lambda.cs (LambdaExpression): Split the anonymous method
7530         resolution code into a separate routine (CoreCompatibilityTest)
7531         from DoCompatibleTest.
7532
7533         (LambdaExpression.TryBuild): New method, this method tries to
7534         build the LambdaExpression with the given set of types to be used
7535         as the types for the various parameters of the lambda expression. 
7536
7537         If the compilation succeed with the given types, the infered type
7538         of the Anonymous method is returned, otherwise null is returned.
7539
7540 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7541
7542         A fix for bug #81414
7543         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7544
7545 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7546
7547         * cs-tokenizer.cs: Change various identifiers here from the
7548         camelCasing to the recommended Linux-like style for instance
7549         variables from the Coding Guidelines. 
7550
7551 2007-04-19  Martin Baulig  <martin@ximian.com>
7552
7553         * convert.cs
7554         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7555         System.Enum to System.ValueType.
7556
7557 2007-04-13  Martin Baulig  <martin@ximian.com>
7558
7559         Rewrote implicit reference conversions.  We need to distinguish
7560         between implicit reference conversions (13.1.4) and implicit
7561         boxing conversions (13.1.5).
7562
7563         According to the spec, there's an an implicit conversion
7564         "From a one-dimensional array-type S[] to IList<T> and base
7565         interfaces of this interface, provided there is an implicit
7566         reference conversion from S to T."  Note that this does not
7567         include boxing conversions.
7568
7569         * convert.cs
7570         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7571         (Convert.ImplicitReferenceConversion): Split into
7572         ImplicitReferenceConversionCore() and
7573         ImplicitBoxingConversionExist().
7574         (Convert.ImplicitReferenceConversionExists): Use the new
7575         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7576
7577 2007-04-12  Martin Baulig  <martin@ximian.com>
7578
7579         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7580         `TypeManager.null_type' checks up to the top of the method.
7581
7582 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7583
7584         A fix for bug #81350
7585         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7586         extension methods.
7587
7588 2007-04-11  Martin Baulig  <martin@ximian.com>
7589
7590         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7591         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7592         to make this work for generic classes; fixes #79561.
7593
7594 2007-04-11  Martin Baulig  <martin@ximian.com>
7595
7596         * expression.cs (As): Add support for nullable types; fixes #79371.
7597
7598 2007-04-11  Martin Baulig  <martin@ximian.com>
7599
7600         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7601         `type.FullName' is null; fixes #80243.
7602
7603 2007-04-11  Martin Baulig  <martin@ximian.com>
7604
7605         * expression.cs (Invocation.IsApplicable): Don't modify the method
7606         if type inference succeeded, but the method was not applicable.
7607         Fixes #81250.
7608
7609 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7610
7611         A fix for bug #81324
7612         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7613         internal and external namespaces containers.
7614
7615 2007-04-10  Martin Baulig  <martin@ximian.com>
7616
7617         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7618         TypeManager.DropGenericMethodArguments() so we also call
7619         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7620
7621 2007-04-10  Martin Baulig  <martin@ximian.com>
7622
7623         * iterators.cs (Iterator.CreateIterator): Don't crash if
7624         `method.ReturnType' is null.  This happens if something went wrong
7625         while resolving that typ (we already reported an error in this case).
7626
7627 2007-04-10  Martin Baulig  <martin@ximian.com>
7628
7629         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7630         generic interfaces; report the CS0144 directly.
7631
7632 2007-04-10  Martin Baulig  <martin@ximian.com>
7633
7634         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7635         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7636
7637 2007-04-10  Martin Baulig  <martin@ximian.com>
7638
7639         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7640
7641 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7642
7643         A better fix
7644         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7645         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7646
7647         Fix #81338
7648         * statement.cs (For.Resolve): If resolution fails, use
7649         KillFlowBranching.
7650
7651 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7652
7653         * anonymous.cs (MakeName): Make faster and zero-based.
7654         (VerifyExplicitParameterCompatibility): Back to mode where generic
7655         parameter is ignored.
7656         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7657
7658         * class.cs (EmitType): Method can emit another new method.
7659
7660         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7661
7662         * driver.cs: Updated.
7663
7664         * lambda.cs: Reuse predefined empty parameters.
7665
7666         * parameter.cs: Updated
7667
7668         * support.cs: Implemented InflateTypes.
7669
7670         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7671         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7672
7673 2007-04-03  Martin Baulig  <martin@ximian.com>
7674
7675         Fix #80632.
7676
7677         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7678         version of TypeManager.IsOverride() which also works with generic
7679         types.  
7680
7681 2007-04-03  Martin Baulig  <martin@ximian.com>
7682
7683         Fix #81044.
7684
7685         * convert.cs
7686         (Convert.ExplicitReferenceConversion): We need to cast when
7687         converting from IList<T> to S[].
7688
7689 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7690
7691         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7692         at this level.
7693         
7694         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7695
7696 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7697
7698         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7699         argument and return type inferring.
7700
7701         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7702         (ReturnType): Turned to property.
7703
7704         * statement.cs (Return): Implemented return type inferring.
7705
7706         * support.cs (ReflectionParameters): Use local types if possible.
7707
7708 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7709
7710         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7711         (FlowBranching.UsageVector): Update to changes.
7712
7713         Prepare to kill 'Reachability'
7714         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7715         argument of constructor.
7716
7717 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7718
7719         Prepare to kill 'Reachability'
7720         * flowanalysis.cs (UsageVector.is_unreachable): New.
7721         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7722         'reachability', and verify they're consistent.
7723
7724         Fix #81121
7725         * expression.cs (New.EmitStatement): Handle type parameters here too.
7726
7727 2007-03-29  Martin Baulig  <martin@ximian.com>
7728
7729         Fix #79148.
7730
7731         * anonymous.cs
7732         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7733         CompilerGeneratedClass.
7734         (ScopeInfo.EmitScopeInstance): Make this protected.
7735         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7736         `ec.CurrentAnonymousMethod.Scope == Scope'.
7737
7738         * statement.cs (Block.ScopeInfo): Make this a property.
7739
7740 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7741
7742         Prepare to kill 'Reachability'
7743         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7744         (FlowBranching.UsageVector.Reachability): Remove property.
7745         (FlowBranching.UsageVector.IsUnreachable): New property.
7746         (FlowBranching.UsageVector.ResetBarrier): New.
7747         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7748         * codegen.cs, statement.cs: Update to changes.
7749
7750 2007-03-27  Martin Baulig  <martin@ximian.com>
7751
7752         Fix #81209.
7753
7754         * decl.cs
7755         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7756         generic types.
7757
7758 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7759
7760         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7761         instead of TriState.  Remove all mention of TriState.
7762
7763         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7764         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7765         and maintain invariants.
7766
7767 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7768
7769         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7770
7771 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7772
7773         * expression.cs: Stop using obsolete 2.0 opcodes.
7774
7775 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7776
7777         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7778         one of the latests Martin's fixes.
7779
7780 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7781
7782         * expression.cs: On BigEndian systems, swap the bytes, temporary
7783         solution until we get a new bitconverter class.
7784
7785 2007-03-23  Martin Baulig  <martin@ximian.com>
7786
7787         Fix #81158.
7788
7789         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7790         "Method" and "Method`1".  Normally, a cache lookup is done on the
7791         "Method" form (ie. without the generic arity), but this one makes
7792         lookups on the full form work as well.
7793
7794 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7795
7796         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7797         unused properties.
7798
7799 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7800         * class.cs: 
7801         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7802         ordered_member_list, to TypeBuilder to store members to be defined
7803         in the order they were parsed in.
7804         - ordered_explicit_member_list contains all properties indexers
7805           and methods that are defined as explicit implementation of an
7806           interface or base class.
7807         - ordered_member_list contains all properties indexers and methods
7808           that are not defined as explicit implementation of an interface
7809           or base class.
7810
7811         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7812         functionality in these removed classes has been replaced with 
7813         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7814         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7815
7816         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7817         to CheckForDuplications inside GetMethod and SetMethod Define Method
7818         to handle method property and indexer name conflicts.
7819
7820         Fixes #79434
7821
7822         All code is contributed under the MIT/X11 license.
7823
7824 2007-03-20  Martin Baulig  <martin@ximian.com>
7825
7826         * class.cs (TypeContainer.Interfaces): Removed; they're now
7827         included in `TypeContainer.Types'.
7828
7829 2007-03-20  Martin Baulig  <martin@ximian.com>
7830
7831         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7832
7833         * class.cs (TypeContainer.CreateType): New public method.  This is
7834         now called before DefineType() to create the TypeBuilders.
7835         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7836         has already been created by CreateType().
7837         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7838         don't resolve our base classes here; this has been moved into
7839         DefineBaseTypes().  We're now called from CreateType().
7840         (TypeContainer.DefineBaseTypes): New private method; resolve our
7841         base classes here.  We're now called from DefineType().
7842
7843         * rootcontext.cs
7844         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7845         our types first to create all the TypeBuilders.  After that, call
7846         TypeContainer.DefineType() on all the types which'll resolve their
7847         base classes and setup the resolve order.
7848
7849 2007-03-20  Martin Baulig  <martin@ximian.com>
7850
7851         * class.cs (TypeContainer.Enums): Removed; they're now included in
7852         `TypeContainer.Types'.  
7853
7854 2007-03-20  Martin Baulig  <martin@ximian.com>
7855
7856         * class.cs
7857         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7858         (TypeContainer.DoResolveMembers): Call DefineType() on our
7859         `compiler_generated' classes; moved here from DefineNestedTypes().
7860
7861         * rootcontext.cs
7862         (RootContext.ResolveTree): Call ResolveMembers() on all
7863         TypeContainer's in the `type_container_resolve_order'.
7864
7865 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7866
7867         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7868
7869 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7870
7871         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7872         implementation flags.
7873
7874 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7875
7876         * class.cs: More optimizations for type parameters.
7877
7878 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7879
7880         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7881
7882         * ecore.cs, parameter.cs: More common code for both corlibs.
7883
7884         * typemanager.cs (IsGenericMethod): Simplified.
7885
7886 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7887
7888         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7889         'returns'.
7890         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7891
7892         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7893         unconditionally.  Simplify explanation.
7894         (Try.Resolve, Using.Resolve): Likewise.
7895
7896 2007-03-15  Martin Baulig  <martin@ximian.com>
7897
7898         Fix #80731.
7899
7900         * decl.cs (DeclSpace): If we're a partial class, use our
7901         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7902
7903 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7904
7905         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7906         'throws'.
7907         (FlowBranching.UsageVector): Update to changes.
7908         (FlowBranching.MergeSiblings): Likewise.
7909         * statement.cs: Likewise.
7910
7911 2007-03-15  Martin Baulig  <martin@ximian.com>
7912
7913         Fix #79302.
7914
7915         * decl.cs
7916         (MemberCache): Added a special .ctor for type parameters.
7917
7918         * typemanager.cs
7919         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7920         `MemberCache'.  
7921
7922 2007-03-09  Martin Baulig  <martin@ximian.com>
7923
7924         * enum.cs (Enum): Make this a TypeContainer.
7925         (EnumMember): Derive from `Const'.
7926
7927         * const.cs
7928         (Const.DoResolveValue): New protected virtual method; move most of
7929         the functionality of ResolveValue() here so we can override it in
7930         `EnumMember'.
7931         (Const.CreateConstantReference): Make this virtual.
7932
7933         * class.cs (Kind): Add `Kind.Enum'.
7934         (TypeContainer.Emit): Don't emit the enums here; they're already
7935         in the `RootContext.typecontainer_resolve_order'.
7936
7937         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7938         here; they're already in the `typecontainer_resolve_order'.
7939
7940         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7941         TypeManager.DropGenericTypeArguments().
7942
7943         * typemanager.cs
7944         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7945         (TypeManager.IsEnumType): Likewise.
7946         (TypeManager.EnumToUnderlying): Likewise.
7947         (TypeManager.IsEqual): Add support for enums.
7948
7949 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7950
7951         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7952         DefaultParameterValueAttribute to be undefined, say if System.dll
7953         is not referenced.
7954
7955 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7956
7957         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7958         any mscorlib.
7959
7960 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7961
7962         * class.cs, parameter.cs: Unified parameters verification.
7963
7964 2007-03-08  Martin Baulig  <martin@ximian.com>
7965
7966         * cs-parser.jay (constructor_header): Pass the location to the
7967         newly created TopLevelBlock.
7968
7969 2007-03-07  Martin Baulig  <martin@ximian.com>
7970
7971         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7972
7973 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7974
7975         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7976         with the changes from David, fixes the build.
7977
7978 2007-03-05  David Mitchell  <dmitchell@logos.com>
7979
7980         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7981         and its base interfaces to a one-dimensional array type S[],
7982         provided there is an implicit or explicit reference conversion
7983         from S to T.
7984
7985 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7986
7987         * cs-tokenizer.cs: Implemented basic linq grammar.
7988
7989         * driver.cs: Set linq lang version on demand.
7990
7991 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7992
7993         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7994
7995 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7996
7997         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7998         (Fixes #80455)
7999
8000         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8001         here.
8002         Check property and event extern attributes.
8003
8004         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8005         charset.
8006
8007 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8008
8009         A fix for bug #80407
8010         * ecore.cs: Don't report ambiguity error when methods have same parent.
8011
8012 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8013
8014         A fix for bug #80878
8015         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8016
8017 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8018
8019         * attribute.cs: Enable ExtensionAttribute presence test.
8020
8021 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8022
8023         * class.cs: Warn about missing GetHashCode only when Equals is override.
8024
8025         * decl.cs: Check accessibility of type arguments.
8026
8027         * typemanager.cs: Correctly report nullable array.
8028
8029 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8030
8031         * class.cs, report.cs: Capture more details when things go wrong.
8032
8033 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8034
8035         A fix for bug #80650
8036         * cs-parser.jay: Anonymous container starts at constructor declaration
8037         and not at block beginning because it has to be usable in constructor
8038         initializer.
8039
8040         * statement.cs: Use context location and not block one for error reporting.
8041
8042 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8043
8044         A fix for bug #78712
8045         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8046         too.
8047
8048 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8049
8050         A fix for bug #80493 by Atsushi Enomoto
8051         * cs-parser.jay: Ignore invalid attribute target.
8052
8053 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8054  
8055         * cs-tokenizer.cs: Ignore '\0' as white space character.
8056
8057 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8058
8059         * cs-parser.jay: Add support for lambda expressions to the mcs
8060         compiler as well.
8061
8062         * lambda.cs: Only clone when we are probing, not on the final call
8063         (Compatible is the final call). 
8064
8065         * statement.cs (CloneContext): Introduce class to provide block
8066         remapping during clone.
8067
8068         All statements Clone themselves now.
8069
8070         (Clone): special handling for blocks, when we clone a block, we
8071         register the block inside this routine, as children of the block
8072         might trigger a lookup. 
8073         
8074         * expression.cs: Add support for CloneContext in all expressions. 
8075         
8076 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8077  
8078         A fix for bug #80493
8079         * statement.cs: Report ambiguous warning when interfaces are not related.
8080
8081 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8082
8083         C# 3.0 extension methods.
8084
8085         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8086         cannot be used directly.
8087
8088         * class.cs (Class.Emit): Emit extension attribute if any class method
8089         is extension method.
8090         (Method.Define): Add basic extension method validation conditions.
8091         (Method.Emit): Emit extension attribute for method.
8092
8093         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8094         extension method exists. Currently we follow same approach as Microsoft
8095         does, emit even if a method or a class are private but this can change
8096         later.
8097
8098         * cs-parser.jay: Add handling of `this' keyword in method parameters
8099         context.
8100
8101         * decl.cs (DeclSpace.IsStaticClass): New property.
8102         (MemberCache.FindExtensionMethods): Looks for extension methods with
8103         defined name and extension type.
8104
8105         * doc.cs: Updated after OverloadResolve changes.
8106
8107         * driver.cs: Add new soft reference to System.Core.dll.
8108
8109         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8110         (ExtensionMethodGroupExpr): Represents group of extension methods.
8111
8112         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8113         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8114         to MethodGroupExpr and made non-static for easier customization.
8115         (Invocation.DoResolve): Add extension method lookup when no standard
8116         method was found.
8117         (MemberAccess.DoResolve): Try extension methods if no member exists.
8118
8119         * modifiers.cs: Add METHOD_EXTENSION modifier.
8120
8121         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8122         as well as candidate extension type.
8123         (ComputeNamespaces): When assembly constains extension methods registers
8124         them.
8125         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8126         extension method lookup.
8127         (Namespace.LookupExtensionMethod): Looks for extension method in this
8128         namespace.
8129         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8130         find a method which matches name and extensionType.
8131
8132         * parameter.cs (Parameter): Add This modifer.
8133         (HasExtensionMethodModifier): New property.
8134         (Resolve): Add extension parameter check.
8135         (ModFlags): turned to property to exclude this modifier as it is not real
8136         parameter modifier.
8137         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8138
8139         * support.cs (ParameterData): Add ExtensionMethodType.
8140         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8141
8142         * typemanager.cs: Add type and ctor extension attribute type.
8143
8144 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8145
8146         * report.cs (DisableErrors, EnableErrors): used to prevent error
8147         output when we are "trying" to compile various methods with
8148         different types. 
8149
8150         * ecore.cs (Expression): Add Clone method that calls the virtual
8151         CloneTo method.  The current CloneTo method in Expression throws
8152         an exception so we can track down all the places where this must
8153         be implemented (not using abstract, because that would be a lot of
8154         up-front-work before we can start testing the implementation
8155         idea). 
8156
8157         Important: we only need Clone capabilities for expressions created
8158         by the parser, as the expressions we will be cloning are
8159         expressions in the pre-resolved state.   This vastly simplifies
8160         the work required. 
8161         
8162         (SimpleName): Add CloneTo that does nothing.
8163         (EmptyCast): Add CloneTo.
8164         
8165         * expression.cs (Binary): Implement CloneTo.
8166         (Invocation.IsApplicable): Store the current ec in
8167         EmitContext.TempEc and restore it on return.  This is used so we
8168         do not have to sprinkle hundres of methods with an extra
8169         EmitContext, we know that the only user is the lambda expression
8170         ImplicitConversionExists code. 
8171         
8172         (Argument): Add Cloning capabilities.
8173         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8174         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8175         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8176         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8177         IndexerAccess): Add Clone capability.
8178
8179         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8180
8181         (Argument): Add cloning capability.
8182
8183         * assign.cs (Assign): Implement CloneTo.
8184
8185         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8186         
8187         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8188         version by calling Convert with the EmitContext (that we are
8189         currently storing in ec, this is not great, but will do for now,
8190         to avoid passing EmitContext parameters to hundreds of functions
8191         that do not need them now).
8192
8193         (SetExpression): Remove, it is not needed.
8194         
8195         (ContextualReturn): Implement CloneTo.
8196
8197         * statement.cs (Statement): Implement cloning infrastructure,
8198         similar to expressions.
8199
8200         (Block): Partial implementation of Clone for statements.
8201
8202         (Return): Implement clone.
8203         
8204         * constant.cs (Constant.CloneTo): New method, does nothing.
8205
8206         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8207         solution, until we decide how to exactly do this.  
8208         
8209 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8210  
8211         A fix for bug #80493
8212         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8213         a property is override we need to use second accessor.
8214
8215 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8216  
8217         A fix for bug #80418
8218         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8219         methods.
8220
8221 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8222
8223         Another fix for bug #80749
8224         * pending.cs: Abstract class has priority over interfaces.
8225
8226 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8227
8228         Another fix for bug #80749
8229         * pending.cs: Abstract class has priority over interfaces.
8230
8231 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8232
8233         Another fix for bug #80749
8234         * pending.cs: Abstract class has priority over interfaces.
8235
8236 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8237
8238         Another fix for bug #80749
8239         * pending.cs: Abstract class has priority over interfaces.
8240
8241 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8242
8243         * class.cs Better error message.
8244
8245         * driver.cs: Add shorter versions of -optimize option.
8246
8247 2007-02-13  Martin Baulig  <martin@ximian.com>
8248
8249         * class.cs (Constructor.Emit): Check the return value of
8250         ec.ResolveTopBlock() and return on error.
8251
8252 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8253
8254         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8255         message to fix error message regression.
8256
8257 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8258
8259         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8260
8261 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8262
8263         A fix for bug #80749
8264         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8265         its parent container.
8266
8267         * class.cs (DefineFieldInitializers): Each initializer can has different
8268         resolve context.
8269
8270         * const.cs: Updated.
8271
8272 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8273
8274         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8275         now all the heavy lifting to check that embedded statements or
8276         expressions have the right form is done in the ContextualReturn.
8277
8278         (ContextualReturn): New class.  
8279
8280         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8281         method that can be invoked to report 201, so we do not replicate
8282         this everywhere.
8283
8284         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8285         
8286         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8287         treating tabs as spaces. 
8288
8289 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8290
8291         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8292         * assign.cs: Use full implicit conversion for right side check.
8293
8294 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8295
8296         * statement.cs (Switch): Switch over boolean type is not standardized.
8297
8298 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8299
8300         A fix for bug #80755
8301         * decl.cs (FindBaseEvent): Don't use method cache for events.
8302
8303 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8304
8305         * cs-parser.jay: Better syntax error handling.
8306
8307         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8308         instead of underlying type value.
8309
8310 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8311
8312         * driver.cs: Check define identifier before is registered.
8313
8314         * namespace.cs: Use existing error message.
8315
8316         * report.cs: New warning.
8317
8318 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8319
8320         A fix for bug #80742
8321         * expression.cs: Delegate Invoke method can be called directly.
8322
8323 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8324
8325         A fix for bug #80676
8326         * class.cs (IsEntryPoint): The Main method can have params modifier.
8327
8328 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8329
8330         * parameter.cs (Parameter, Parameters): Add Clone method.
8331
8332         * anonymous.cs (Compatible): Turn method into virtual method, so
8333         LambdaExpression can implement a different behavior.
8334
8335         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8336         out the basic checking here, so it can be used by
8337         LambdaExpressions.
8338         
8339         * lambda.cs: Introduce "Compatible" function that will do the
8340         heavy lifting.
8341
8342 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8343
8344         * attribute.cs: Unified one error message.
8345
8346         * class.cs (Class): Use type attributes and not properties to test static
8347         class.
8348         (IsEntryPoint): Don's pass local variable.
8349
8350         * convert.cs: Removed duplicate check.
8351
8352         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8353
8354         * driver.cs: Don't crash when soft reference does not exist.
8355
8356         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8357         (UsingEntry): Removed redundant allocation.
8358
8359         * parameter.cs: Add fast path for type parameters.
8360
8361         * support.cs: Don't allocate attribute when it's not used.
8362
8363 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8364
8365         * anonymous.cs
8366         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8367         this into a virtual method, so we can override it in LambdaExpression.
8368
8369         * driver.cs: Improve diagnostics in case of failure. 
8370
8371         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8372         write a function that is slightly more complex and that parses:
8373
8374         type identifier [, type identifier]* )
8375
8376         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8377         this expression:
8378
8379                 (canEmpty ? i >= 0 : i > 0)
8380
8381 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8382
8383         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8384         exception on possibly valid code.
8385
8386 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8387
8388         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8389         Push/PopPosition.
8390         (parse_opt_type_arguments): Remove.  It's almost the same as
8391         parse_less_than.
8392         (parse_namespace_or_typename): Use parse_less_than.
8393
8394 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8395
8396         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8397         this bug took a few hours to find, because the state saved and
8398         restored by PushPosition and PopPosition was ignoring the state of
8399         parse_generic_less_than.
8400
8401         I can also now remove the handling of OP_LT and OP_GT, this solves
8402         the big mistery.
8403         
8404         * cs-tokenizer.cs: store the location for the ARROW token, we use
8405         that in the parser.
8406
8407         (PushPosition, PopPosition): save/restore also `current_token',
8408         restore `parse_generic_less_than' (was missing).
8409
8410         (parse_opt_type_arguments): use parse_type, not
8411         parse_namespace_or_typename to parse types.
8412
8413         * lambda.cs: Empty new file, will eventually have the lambda
8414         expression implementation.
8415
8416         * lambda.test: used to test the internal tokenizer. 
8417
8418         * report.cs (FeatureIsNotISO1): Rename from
8419         FeatureIsNotStandardized, because it was about the language level
8420         (1 vs 2) it was not about standarization.
8421
8422         (FeatureRequiresLINQ): New.
8423
8424         * support.cs (SeekableStreamReader): Only require that the reader
8425         is a TextReader, not a StreamReader, so we can plug StringReader. 
8426
8427         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8428         given position in the input stream the following tokens can be
8429         parsed as a type followed by an identifier.
8430
8431         (is_punct): after a '(' if parse_type_and_parameter returns true,
8432         then return a special token OPEN_PARENS_LAMBDA which is used to
8433         avoid reduce/reduce errors in the grammar for the
8434         lambda_expression rules.
8435
8436         (parse_type): implement a type parser inside the
8437         tokenizer, the parser only returns true or false depending on
8438         whether the input at a given position can be parsed as a type.
8439
8440         (peek_token): new method used during type parsing.
8441
8442 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8443
8444         Fix #80531
8445         * anonymous.cs (ScopeInfo.InflateParameters): New.
8446         (AnonymousContainer.Resolve): Use it to redirect types of
8447         delegate parameters.
8448
8449 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8450
8451         Fix #80530
8452         * expression.cs (Error_InvalidArguments): Don't use two different
8453         messages for CS1503.  Use ExtraInformation and
8454         SymbolRelatedToPreviousError instead.
8455
8456         Fix #80358
8457         * decl.cs (DeclSpace.initialize_type_params): Don't access
8458         'type_params' of a partial class directly.
8459
8460 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8461
8462         * constant.cs: Removed a handful of out-of-range checks that were
8463         not necessary. 
8464
8465 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8466
8467         * expression.cs (CheckUselessComparison): Add additional check for char
8468         constants.
8469
8470         * namespace.cs: Fixed typo.
8471
8472 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8473
8474         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8475         gone, instead we inline the test, preventing the needless casts to
8476         longs, ulongs and doubles for the parameters, avoiding calls to
8477         methods that overchecked stuff, and instead inlined things
8478         nicely. 
8479
8480 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8481
8482         * cs-parser.jay: Better parameter error handling.
8483
8484 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8485
8486         A fix for bug #80368, #80522
8487         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8488         whether array initializer contains constants only.
8489         (ArrayCreation.Emit): Use better formula to decide when
8490         are array initializers for static initialization.
8491         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8492         have to emit even constants otherwise they are pre-initialized.
8493
8494 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8495             Raja R Harinath  <rharinath@novell.com>
8496
8497         Fix emit order of 'get' vs. 'set'.
8498         * support.cs (Accessors): New.
8499         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8500         Note the order in which accessors are declared in the source.
8501         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8502         Refactored from Property.Define and Indexer.Define.
8503         (PropertyBase.DefineAccessors): New helper that calls the above in
8504         appropriate order as noted by the parser.
8505         (Property.Define, Indexer.Define): Update to changes.
8506         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8507
8508 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8509
8510         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8511         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8512         there's an implicit conversion from the current type to the target
8513         type before converting the underlying constant.
8514
8515 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8516
8517         * const.cs (ResolveValue): Updated after constant conversion was made more
8518         generic.
8519
8520         * constant.cs (GetAttributableValue): constant to object conversion is
8521         used for attributes only.
8522         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8523         constant conversions.
8524         (LongConstant.ConvertImplicitly): Ditto.
8525
8526         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8527         (ImplicitConversionStandard): Handle constant conversion as extra step.
8528         It solves the issue when constant conversion was called indirectly like
8529         inside array initializer and constant folding was skipped.
8530
8531         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8532         this change.
8533
8534         * statement.cs(ImplicitConversionStandard): Updated after constant
8535         conversion was made more generic.
8536
8537 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8538
8539         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8540         Constraints, solves the problem where the compiler incorrectly
8541         reported that a type parameter was not constrained to a class (Bug
8542         80518)
8543
8544 2007-01-14  Marek Habersack  <grendello@gmail.com>
8545
8546         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8547
8548 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8549
8550         A fix for bug #80368
8551         * assign.cs (FieldInitializer): New class implements field
8552         initializer statement.
8553
8554         * attribute.cs: Update after FieldMember rename.
8555
8556         * class.cs (PropertyBasedMember): New common class for property based
8557         types.
8558         (InterfaceMemberBase): New base class for all members which can be used as
8559         an interface members.
8560         (MethodCore): Moved really common code to InterfaceMemberBase.
8561         (Method.Define): Equal and GetHasCode detection is relevant for methods
8562         only.
8563         (MethodData.Define): Don't assume that public event implements an
8564         interface automatically.
8565         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8566         modifier is used.
8567         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8568         (FieldMember): Merged with FieldBase.
8569         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8570         event extern modifier can be used.
8571         (EventField.EventFieldAccessor): Moved event field specific code here.
8572         (Event.AllowedModifiers): Even event can be extern.
8573         (Event.FindOutBaseMethod): New override specific to events.
8574         (Indexer.parameters): Reintroduce parameters because base class holds
8575         only properties common data.
8576         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8577         need do extra parameters check.
8578
8579         * const.cs: Update after FieldMember rename.
8580
8581         * decl.cs (MemberCache.FindBaseEvent): New method.
8582
8583         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8584         to reflect that indexer is now derived from PropertyBased.
8585
8586         * ecore.cs (GetMemberType): Made public.
8587         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8588         obsolete event.
8589
8590         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8591         
8592         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8593         (RegisterEvent): Removed.
8594         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8595         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8596
8597 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8598
8599         Fix #80249
8600         * statement.cs (CollectionForeach.TryType): Prefer generic
8601         GetEnumerator over non-generic variant.  Fix code to follow comments.
8602
8603 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8604
8605         Fix #80446
8606         * support.cs (ReflectionParameter): Don't use an invalid index on
8607         the generic parameter data.
8608
8609 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8610
8611         * driver.cs: Just add a tiny bit of infrastructure.
8612
8613 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8614
8615         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8616         where field type is struct from current assembly.
8617         
8618         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8619         it is possible.
8620
8621 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8622
8623         A fix for bug #80381
8624         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8625         the core types.
8626
8627         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8628         messages.
8629         (Namespace.LookupType): Always use core types from corlib when speficied.
8630
8631         * report.cs: A new warning.
8632
8633         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8634         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8635         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8636
8637         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8638         (InitCoreTypes): Set expression type of object_type and value_type
8639         immediately after lookup.
8640
8641 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8642
8643         * cs-tokenizer.cs: Accept Pc class characters (Connector
8644         Punctuation) as valid identifiers.  Fixes #78259
8645
8646         * expression.cs (Invocation.DoResolve): Moved the check for the
8647         use of `this' for doing method calls to the Invocation resolution
8648         step, after overload resolution has taken place instead of doing
8649         the check at the low-level `This.DoResolve' level.
8650
8651         The `This.DoResolve'(appens before overload resolution, so it has
8652         no way of knowing if the method that will be called will be
8653         instace or static, triggering an erroneous report for cs0188 (Bug
8654         78113).
8655
8656         We now do the check for instance method invocations after we know
8657         what method will be called.
8658
8659         (This.CheckThisUsage): Move the actual use of this structure
8660         checking into its own method and expose it. 
8661
8662         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8663         EmitContext.
8664
8665         Exceptions: Null.ConvertImplicitly,
8666         Constant.ImplicitConversionRequired as there are too many call
8667         sites for passing the ec. 
8668
8669         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8670         EmitContext, if the value is null, then we do not try to provide
8671         the extra information from the error (If a userdefined conversion
8672         exists, as UserDefinedConversion requires a non null-EmitContext).
8673
8674         Fixes: #80347
8675
8676 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8677
8678         * flowanalysis.cs (MyBitVector): Document some invariants.
8679         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8680         introduced below, and add a couple of others, 
8681
8682 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8683
8684         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8685         GetPropertyFromAccessor and GetEventFromAccessor.
8686         
8687         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8688         overrides non-obsolete one.
8689         (Indexer.Define): Error message has been moved to the parser.
8690
8691         * cs-parser.jay: Better syntax errors handling.
8692
8693         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8694         when an invocation has no arguments.
8695
8696         * ecore.cs: Removed not used caching.
8697
8698         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8699         implementation.
8700
8701         * report.cs: Add a new warning.
8702
8703         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8704
8705         * typemanager.cs (enumeration_type): Removed.
8706         (CSharpSignature): Reuses IsSpecialMethod.
8707         (IsEqual): Hack for MS BCL.
8708         (GetPropertyFromAccessor): New method.
8709         (GetEventFromAccessor): New method.
8710         (IsSpecialMethod): Fixed to handle more cases.
8711
8712 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8713
8714         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8715         Made white spaces array static.
8716
8717         * ecore.cs (RemoveGenericArity): Optimized.
8718
8719         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8720         10 times faster).
8721         (MyBitVector.initialize_vector): Simplified.
8722
8723 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8724
8725         * ecore.cs: Am not entirely happy with this hack, but it seems to
8726         address the issue in 80257 (a small test case for
8727         CreativeDocs.NET). 
8728
8729         I set the MethodGroupExpr.Type to an internal compiler type
8730         (itself in this case) to force the resolution to take place.   Why
8731         it does not take place with a null is beyond me.
8732
8733 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8734
8735         A fix for bug #80288
8736         * expression.cs (ResolveOperator): Consider user defined conversion for
8737         logical and operator too.
8738         (EmitBranchable): Optimization for logical and when full constant folding
8739         could not be applied but one operand is constant.
8740
8741 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8742
8743         * class.cs (GetClassBases): Write 5 times every day, will never use
8744         FullName for error reporting.
8745
8746         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8747
8748 2006-12-19  Martin Baulig  <martin@ximian.com>
8749
8750         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8751         the symbol file info here.
8752
8753 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8754
8755         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8756         of `elseif' is taking then following sections are not taking.
8757         Fixes an issue reported on mono mailing list.
8758
8759 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8760
8761         A fix for bug #80300
8762         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8763         a caller is not taking.
8764
8765 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8766
8767         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8768         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8769         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8770         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8771         * class.cs: Update to changes.
8772
8773 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8774
8775         A fix for bug #79934
8776         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8777         partial container.
8778
8779         * class.cs (ResolveMembers): Register an iterator in current container and
8780         not in shared one.
8781
8782 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8783
8784         Fix test-543.cs
8785         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8786         satisfy a params annotated parameter.
8787
8788 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8789
8790         A fix for bug #77014
8791         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8792         paramters correctly and not rely on hacks in Parameters class.
8793         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8794         at any possition.
8795         (Invocation.VerifyArgumentsCompat): Ditto.
8796         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8797         any possition.
8798
8799         * parameter.cs (HasParams): Don't assume that params is the last one.
8800
8801         * support.cs (ReflectionParameters.ctor): Look for params attribute
8802         correctly.
8803         (ReflectionParameters.ParameterType): Removed hack when we returned last
8804         parameter for out of range parameters.
8805         (ParameterName, ParameterModifier): Ditto.
8806
8807 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8808
8809         A fix for bug #79987
8810         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8811         when assembly is not CLS compliant but type is. I have no idea why is this
8812         allowed.
8813
8814         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8815
8816 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8817
8818         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8819         in struct constructors, they are basically no-ops.
8820
8821 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8822
8823         * cs-tokenizer.cs (Position): Save preprocessor status too.
8824
8825 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8826
8827         A fix for bug #77794
8828         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8829
8830 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8831
8832         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8833         Fixes #69299.
8834         (pp_expr): Report error for an invalid expression.
8835         (handle_preprocessing_directive): Simplified; add more error checking.
8836
8837 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8838
8839         A fix for bug #74939
8840         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8841         directives handling.
8842
8843 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8844
8845         A fix for bugs #80093, and #75984
8846         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8847         logic, it seems to me as it worked before "by coincidence".
8848         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8849         (cleanup): Enabled endif check.
8850
8851 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8852
8853         A fix for bug #80162
8854         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8855         enumerators are never ambiguous.
8856
8857 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8858
8859         Fix #80060
8860         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8861
8862 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8863
8864         A fix for bug #80144
8865         * class.cs (EventProperty.Define): Explicit implementation means
8866         that an even is used.
8867
8868 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8869
8870         Fixes the operators implementation (part II)
8871
8872         * cfold.cs (DoConstantNumericPromotions): Renamed to
8873         DoBinaryNumericPromotions and simplified.
8874         (BinaryFold): Couple of conversion fixes; simplified.
8875
8876         * constant.cs, ecore.cs, literal.cs
8877         (ToType): Renamed to ConvertImplicitly.
8878         (Reduce): Renamed to ConvertExplicitly.
8879
8880         * class.cs, convert.cs: Updated.
8881
8882         * expression.cs: TryReduce doesn't throw an exception.
8883
8884 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8885
8886         A fix for bug #80108
8887         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8888         compatible.
8889
8890 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8891
8892         Fixes unary operators implementation (part I)
8893         Also fixes #80026
8894
8895         * cfold.cs (Error_CompileTimeOverflow): Made internal
8896
8897         * const.cs (IConstant): Changed to use reference to constant and
8898         not constant itself.
8899         Updated IConstant implementations.
8900
8901         * constant.cs (CreateConstant): New factory method.
8902         Updated IConstant implementation.
8903
8904         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8905
8906         * ecore.cs: Updated to use CreateConstantReference.
8907
8908         * enum.cs: Reflects IConstant changes.
8909
8910         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8911
8912         * literal.cs (NullConstant): Change to be independently usable.
8913
8914 2006-11-29  Martin Baulig  <martin@ximian.com>
8915
8916         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8917         we need to emit the scope initializer before calling the base .ctor.
8918
8919         * anonymous.cs: Merged back from the new anonymous methods branch.
8920         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8921
8922         * expression.cs (ParameterReference.DoResolveBase): Create a
8923         "normal" ScopeInfo when capturing parameters rather than using the
8924         root scope; this makes things work with anonymous methods having
8925         parameters.
8926
8927         * statement.cs
8928         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8929
8930 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8931
8932         A fix for bug #79987
8933         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8934         check to a base class.
8935         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8936         only when assembly has missing attribute.
8937         * report.cs: Update.
8938
8939 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8940
8941         * cs-tokenizer.cs: Merged with gmcs version.
8942
8943 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8944
8945         * cs-tokenizer.cs,
8946         * cs-parser.jay: Better error message when partial keyword is misplaced.
8947
8948 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8949
8950         A fix for bug #79810
8951         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8952         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8953         a RuntimeWrappedException by default.
8954
8955 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8956
8957         A fix for bug #79843
8958         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8959         implementation.
8960         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8961
8962 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8963
8964         * driver.cs, namespace.cs: Uses faster IndexOf version.
8965
8966 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8967
8968         A fix for bug #79941
8969         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8970         operators.
8971         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8972         even if internal name is different.
8973         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8974         (UserDefinedConversion): Simplified as the operators cannot be internal.
8975         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8976         conversions.
8977         (MethodLookup): Replaced EmitContext with parentType.
8978         * expression.cs: Updated.
8979
8980 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8981
8982         * driver.cs (BadAssembly): Handle all the ugliness of
8983         DefineDynamicAssembly.
8984
8985 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8986
8987         Address parts of #58244 -- most of what's left is in the runtime
8988         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8989         CS1509 error checks, and handle them for all assembly loads, not
8990         just the first invocation.
8991         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8992         * codegen.cs (AssemblyClass.AddModule): ... here.
8993
8994 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8995
8996         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8997         IEnumerable<T> is ambiguous.
8998
8999 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9000
9001         A fix for bug #67689
9002         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9003         GetEnumerator is ambiguous.
9004
9005         * report.cs: Add new warning.
9006
9007 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9008
9009         A fix for bug #78602
9010         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9011         to protected member can be nested type.
9012
9013 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9014
9015         A fix for bug #78965
9016         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9017         to protected member must derive from current type.
9018
9019 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9020
9021         assign.cs: Reuses error method.
9022
9023         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9024         instead of type for constants.
9025         (Expression.Error_ValueAssignment): Common error method.
9026
9027         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9028         for any assignment.
9029
9030 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9031
9032         A fix for bug #79081
9033         * expression.cs (MemberAccess.DoResolve): Check nested type
9034         accessibility.
9035
9036 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9037
9038         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9039
9040 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9041
9042         A fix for bug #76591
9043         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9044
9045 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9046
9047         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9048         type forwarder of the same type multiple times.
9049
9050 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9051
9052         Fix #78820
9053         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9054         instance as an rvalue, even when we later resolve as an lvalue.
9055
9056 2006-10-25  Martin Baulig  <martin@ximian.com>
9057
9058         * anonymous.cs: Fix #79673.
9059
9060 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9061
9062         A fix for bug #79666
9063         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9064         ignored when is optimized (= default value) as its value is already set.
9065
9066 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9067
9068         A fix for bug #79724
9069         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9070         TypeContainer for type lookup.
9071
9072 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9073
9074         A fix for bug #79231
9075         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9076         * expression.cs (OverloadResolve): Always convert type name for
9077         an error message.
9078         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9079         other member.
9080
9081 2006-10-18  Martin Baulig <martin@ximian.com>
9082
9083         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9084
9085 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9086
9087         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9088         an int32, but requesting an int64 from the conversion
9089
9090 2006-10-12  Martin Baulig  <martin@ximian.com>
9091
9092         * anonymous.cs
9093         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9094         
9095 2006-10-12  Martin Baulig  <martin@ximian.com>
9096
9097         * statement.cs
9098         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9099
9100 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9101
9102         * convert.cs: Remove broken code: I was doing the "Existance"
9103         tests for Implicit conversions.
9104
9105 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9106
9107         * convert.cs: Added one missing case in
9108         ImplicitStandardConversionExists uint64 to intptr.
9109
9110         Fixes #59800
9111         
9112         * typemanager.cs (uintptr_type): another core known type.   
9113
9114         * ecore.cs (OperatorCast): routine used to do cast operations that
9115         depend on op_Explicit.  We could change some of the Decimal
9116         conversions to use this.
9117
9118         This one has a probe mechanism that checks both types for an op_
9119         which it coudl be used to eliminate two classes: CastToDecimal
9120         and CastFromDecimal.
9121
9122         * convert.cs: Implement the conversions documented in #59800
9123         
9124 2006-10-10  Martin Baulig  <martin@ximian.com>
9125
9126         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9127         before RootScope.ResolveMembers().
9128
9129         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9130         `CurrentType' if appropriate.
9131
9132 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9133
9134         A fix for bug #78568
9135         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9136         when contains binary operators.
9137         * cs-parser.jay: Updated.
9138
9139 2006-10-09  Martin Baulig  <martin@ximian.com>
9140
9141         * delegate.cs
9142         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9143         moved that into Define() and also do the other type parameter
9144         checks there.  Fixes #79094.  Added gtest-292.cs.
9145
9146         * expression.cs
9147         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9148         since that doesn't include type parameters; don't use `Ldelema'
9149         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9150
9151 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9152
9153         A fix for #77796
9154         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9155         conversion is allowed.
9156
9157 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9158
9159         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9160         error reporting when no error occurs.
9161
9162 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9163
9164         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9165         does not exist.
9166
9167 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9168
9169         Fix #79584
9170         * class.cs (DefineTypeBuilder): Check circular dependencies before
9171         setting the parent of the TypeBuilder.
9172         (CheckRecursiveDefinition): Don't use 'BaseType', since
9173         it may not be valid until after DefineTypeBuilder.  Use
9174         'base_type' instead.
9175
9176 2006-10-04  Martin Baulig  <martin@ximian.com>
9177
9178         Merged the Anonymous Methods patch.
9179
9180         * anonymous.cs, iterators.cs: The new anonymous methods code.
9181
9182         * statement.cs (Variable): New public abstract class.
9183         (LocalInfo.Variable): New public property.
9184         (LocalInfo.ResolveVariable): New public method.
9185         (Block.Flags): Add `IsIterator'.
9186         (Block.AddVariable): Improved the CS0136 check.
9187         (Block.AnonymousChildren): New public property.
9188         (Block.AddAnonymousChild): New public method.
9189         (ToplevelBlock): Update to use the new anonymous method framework.
9190         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9191         `ToplevelBlock'; this is required to correctly implement the
9192         CS0136 check.
9193         (Fixed, Using): Use `TemporaryVariable' instead of directly
9194         creating the `LocalBuilder'.
9195
9196         * parameter.cs (Parameter.ResolveVariable): New public method.
9197         (Parameters.ResolveVariable): Likewise.
9198
9199         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9200
9201         * class.cs (TypeContainer): Replaced the `iterators' list and
9202         corresponding methods with a list of `CompilerGeneratedClass'es.
9203         (TypeContainer.ResolveMembers): New public method.
9204         (Method): `IIteratorContainer' has been replaced by
9205         `IAnonymousHost'.
9206
9207         * expression.cs (VariableReference): New public abstract base
9208         class for `LocalVariableReference', `ParameterReference' and
9209         `This'.
9210
9211         * codegen.cs (EmitContext): Removed `capture_context',
9212         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9213         (EmitContext.EmitThis): Removed.
9214
9215         * cs-parser.jay: Replace `iterator_container' with
9216         `anonymous_host'.       
9217
9218 2006-10-04  Martin Baulig  <martin@ximian.com>
9219
9220         * generic.cs (GenericMethod): Don't make this abstract.
9221         (Constraints.Clone): Added dummy implementation.
9222
9223 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9224
9225         Fix #79577
9226         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9227         'declspaces'.  Avoid allocating arrays willy-nilly.
9228
9229         Fix #79553
9230         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9231         cases out of the switch.
9232
9233 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9234
9235         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9236         message when non-generic type is used with the type arguments.
9237         * expression.cs: Updated.
9238
9239 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9240
9241         Fix #79013
9242         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9243         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9244         Change semantics slightly.  Don't insist on having only one
9245         temporary EmptyExpression -- just throttle the creation of new ones.
9246
9247         Fix #79451
9248         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9249         non-interfaces too.  If no methods are found, don't try to create
9250         a MethodGroupExpr.
9251
9252 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9253
9254         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9255         generic type.
9256
9257         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9258         us produce better error message.
9259
9260 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9261
9262         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9263         of the `|' operator.
9264
9265         * report.cs: A new warning added.
9266
9267 2006-09-27  Martin Baulig  <martin@ximian.com>
9268
9269         * generic.cs (GenericMethod): Don't make this abstract.
9270
9271 2006-09-27  Martin Baulig  <martin@ximian.com>
9272
9273         * report.cs
9274         (InternalErrorException): Added overloaded ctor taking a params array.
9275
9276 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9277
9278         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9279         Fixed the cases when same error was reported twice.
9280
9281         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9282         now report symbol information.
9283
9284 2006-09-25  Martin Baulig  <martin@ximian.com>
9285
9286         * class.cs: Completely unified with the gmcs version.
9287
9288 2006-09-25  Martin Baulig  <martin@ximian.com>
9289
9290         * typemanager.cs (TypeManager.IsNullableType): New public function.
9291         (TypeManager.IsNullableTypeOf): Likewise.
9292         (TypeManager.IsNullableValueType): Likewise.
9293
9294         * class.cs (MethodCore): Added the `GenericMethod' argument from
9295         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9296
9297 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9298
9299         * convert.cs: Unify with gmcs version.
9300
9301 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9302
9303         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9304         verify them as well.
9305
9306         * report.cs: New warning.
9307
9308 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9309
9310         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9311         for anonymous block with out argument.
9312
9313 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9314
9315         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9316         not used private events only.
9317
9318 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9319
9320         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9321
9322         * const.cs (Const.Define): Check for constant type.
9323         (Const.IsConstantTypeValid): Looks for valid constant types.
9324
9325         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9326
9327         * ecore.cs (EmptyConstantCast): New common class for all constant based
9328         EmptyCast(s).
9329
9330         * expression.cs (Is.DoResolve): Handle null constant especially.
9331         (New.DoResolve): Check for new void().
9332         (MemberAccess.DoResolve): Cope with all kind of nulls.
9333
9334         * literal.cs (NullConstant): Uses EmptyConstantCast.
9335         (NullDefault): Based on EmptyConstantCast.
9336         (NullLiteral): Uses EmptyConstantCast.
9337
9338         * statement.cs (Block.ResolveMeta): Check for constant type.
9339
9340 2006-09-22  Martin Baulig  <martin@ximian.com>
9341
9342         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9343
9344 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9345
9346         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9347         not the null type.
9348
9349         Fix part of #79451
9350         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9351         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9352         code slightly.
9353
9354 2006-09-22  Martin Baulig  <martin@ximian.com>
9355
9356         * ecore.cs: Merged with the gmcs version.
9357
9358         * generic.cs (ConstructedType): New dummy class.
9359         (TypeArguments): Don't make this abstract.
9360
9361         * typemanager.cs
9362         (TypeManager.IsGenericTypeDefinition): New method.
9363         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9364
9365 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9366
9367         * expression.cs (ComposedCast): Check for arrays of TypedReference
9368         before creating the type, not after.
9369
9370 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9371
9372         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9373         after ToType change.
9374
9375         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9376         when constant must be implicitly convertible.
9377
9378         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9379
9380         * ecore.cs (NullCast): Derives from NullConstant.
9381
9382         * expression.cs (Is.DoResolve): Removed useless variables.
9383         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9384         (New.Constantify): Add enum support.
9385         (MemberAccess.DoResolve): Add warning when accessing null constant or
9386         variable.
9387
9388         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9389         property.
9390
9391         * literal.cs (NullConstant): New abstract class with common
9392         functionality for all null specializations.
9393         (NullDefault): Represents default(X) when result can be
9394         reduced to null.
9395         (NullLiteral): Updated.
9396
9397         * report.cs: Add new warning.
9398
9399 2006-09-21  Martin Baulig  <martin@ximian.com>
9400
9401         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9402
9403 2006-09-21  Martin Baulig  <martin@ximian.com>
9404
9405         * generic.cs (GenericConstraints): New dummy class.
9406         (Constraints): Likewise.
9407         (TypeParameter): Likewise.
9408         (TypeParameterName): Likewise.
9409         (GenericMethod): Likewise.
9410
9411         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9412
9413         * decl.cs: Merged with the gmcs version.
9414
9415 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9416
9417         * generic.cs (TypeParameter): Implement IMemberContainer.
9418         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9419
9420         * rootcontext.cs: Unify with gmcs version.
9421
9422         * report.cs: Unify with gmcs version.
9423         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9424         from gmcs/generics.cs.
9425         * generics.cs (TypeParameter): New dummy class.
9426
9427         * support.cs: Unify with gmcs version.
9428
9429 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9430
9431         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9432         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9433
9434         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9435         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9436         * mcs.exe.sources: Add generic.cs.
9437
9438         * codegen.cs: Unify with gmcs version.
9439
9440         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9441         (EmitContext): Add GenericDeclContainer implementation.
9442         * decl.cs (MemberCore, DeclSpace): Likewise.
9443         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9444
9445         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9446         MCS TypeManager has a corresponding dummy method.
9447
9448 2006-09-19  Martin Baulig  <martin@ximian.com>
9449
9450         * expression.cs: Completely merged with the gmcs version.
9451
9452 2006-09-19  Martin Baulig  <martin@ximian.com>
9453
9454         * expression.cs (Invocation): Merged with the gmcs version.
9455         (ArrayAccess.GetStoreOpcode): Likewise.
9456
9457 2006-09-19  Martin Baulig  <martin@ximian.com>
9458
9459         * typemanager.cs
9460         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9461         (TypeManager.IsGenericMethodDefinition): Likewise.
9462
9463 2006-09-19  Martin Baulig  <martin@ximian.com>
9464
9465         * typemanager.cs
9466         (TypeManager.IsEqual): Moved the gmcs implementation here.
9467         (TypeManager.DropGenericTypeArguments): Likewise.
9468         (TypeManager.DropGenericMethodArguments): Likewise.
9469         (TypeManager.GetTypeArguments): Moved here from gmcs.
9470         (TypeManager.HasGenericArguments): Likewise.
9471
9472 2006-09-19  Martin Baulig  <martin@ximian.com>
9473
9474         * expression.cs (Binary): Merged with the gmcs version.
9475
9476 2006-09-19  Martin Baulig  <martin@ximian.com>
9477
9478         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9479
9480 2006-09-19  Martin Baulig  <martin@ximian.com>
9481
9482         * typemanager.cs: Merged with the gmcs version.
9483
9484 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9485
9486         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9487         * driver.cs: Likewise.
9488
9489 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9490
9491         A fix for #79401
9492         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9493         only if parent type is class.
9494         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9495         update.
9496
9497 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9498
9499         * cs-parser.jay,
9500         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9501         keywords are used.
9502         * typemanager.cs(CSharpName): Converts NullType to null.
9503
9504 2006-09-15  Martin Baulig  <martin@ximian.com>
9505
9506         * typemanager.cs
9507         (TypeManager.GetMethodName): Added mcs implementation.
9508         (TypeManager.IsEqual): Likewise.
9509
9510         * ecore.cs
9511         (SimpleName.RemoveGenericArity): Added dummy implementation.
9512
9513         * pending.cs: Merged with the gmcs version.     
9514
9515 2006-09-15  Martin Baulig  <martin@ximian.com>
9516
9517         * statement.cs: Merge with the gmcs version.
9518
9519 2006-09-15  Martin Baulig  <martin@ximian.com>
9520
9521         * statement.cs (Switch): Merge with the gmcs implementation
9522         (without nullables), which is newer.
9523
9524 2006-09-15  Martin Baulig  <martin@ximian.com>
9525
9526         * statement.cs (Block.Variables): Make this public.
9527         (ToplevelBlock.Parameters): Make this a property.
9528         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9529
9530 2006-09-15  Martin Baulig  <martin@ximian.com>
9531
9532         * namespace.cs: Merge with the gmcs version.
9533
9534 2006-09-15  Martin Baulig  <martin@ximian.com>
9535
9536         * decl.cs (MemberName): Minor code cleanups.
9537
9538 2006-09-15  Martin Baulig  <martin@ximian.com>
9539
9540         * parameter.cs: Merge with the gmcs version.
9541
9542 2006-09-15  Martin Baulig  <martin@ximian.com>
9543
9544         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9545         and an error in mcs.
9546
9547 2006-09-15  Martin Baulig  <martin@ximian.com>
9548
9549         * flowanalysis.cs: Merged from GMCS; added the generics code into
9550         a `GMCS_SOURCE' conditional so we can share this file.
9551
9552 2006-09-08  Martin Baulig  <martin@ximian.com>
9553
9554         * typemanager.cs (TypeManager.interlocked_type): New public field.
9555         (TypeManager.int_interlocked_compare-exchange): New public field.
9556         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9557         enumerator types here and call InitGenericCoreTypes().
9558         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9559         after calling InitEnumUnderlyingTypes().
9560
9561         * rootcontext.cs
9562         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9563         `classes_second_stage'. 
9564
9565 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9566
9567         * assign.cs, ecore.cs, expression.cs: Share error message text.
9568         * class.cs (FieldMember.Define): Check for varible of static type.
9569         * driver.cs (LoadAssembly): Uses error output for errors.
9570         * statement.cs: Updated.
9571
9572 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9573
9574         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9575         type instance.
9576
9577 2006-09-07  Martin Baulig  <martin@ximian.com>
9578
9579         * driver.cs
9580         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9581
9582 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9583
9584         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9585         
9586 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9587
9588         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9589         #52019 and #79064, the use of the \uXXXX sequence in source code
9590         to represent unicode characters.
9591
9592 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9593
9594         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9595         support.
9596         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9597
9598 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9599
9600         * assign.cs: Catch attempts to assign to a method groups in += and
9601         report as 1656
9602
9603 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9604
9605         A fix for #79056
9606         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9607
9608 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9609
9610         * class.cs (Method.Define): Issue a warning when generic method looks like
9611         an entry point.
9612         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9613         as well.
9614
9615 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9616  
9617         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9618         looking for ctor.
9619         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9620         search all base interfaces as a member can be ambiguous.
9621         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9622         Constructor member type filter. 
9623         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9624         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9625         reporting for returned memberinfos.
9626         * report.cs: Updated.
9627         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9628         version to work on all runtimes.
9629         (TypeManager.RealMemberLookup): Removed members filtering.
9630
9631 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9632
9633         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9634         (PropertyExpr.EmitAssign): Likewise.
9635         * expression.cs (Indirection.EmitAssign): Likewise.
9636         (LocalVariableReference.EmitAssign): Likewise.
9637         (ParameterReference.EmitAssign): Likewise.
9638         (Invocation.EmitArguments): Likewise.
9639         (ArrayAccess.EmitAssign): Likewise.
9640         (IndexerAccess.EmitAssign): Likewise.
9641         (This.EmitAssign): Likewise.
9642         (ConditionalLogicalOperator.Emit): Likewise.
9643
9644         Fix #79026
9645         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9646         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9647         leave it in after returning it.
9648         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9649
9650 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9651
9652         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9653         message.
9654
9655 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9656
9657         Fix cs0146-3.cs and cs0146-4.cs.
9658         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9659         enclosing types don't depend on the current type.
9660
9661 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9662
9663         Fix #77963
9664         * class.cs (TypeContainer.DoDefineMembers): Use
9665         FindBaseMemberWithSameName on Parent, since we're interested in
9666         whether we hide inherited members or not.
9667         (FindBaseMemberWithSameName): Make slightly more robust.
9668
9669         Fix the non-generic testcase from #77396
9670         * decl.cs (DeclSpace.DeclContainer): Remove override.
9671
9672         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9673         declspaces for doppelgangers too.
9674         (UsingEntry): Implement IResolveContext.
9675         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9676         'this' as the resolve context.
9677         (LocalAliasEntry): Likewise.
9678
9679         Implement parts of #77403
9680         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9681         toplevel declaration space.  Each namespace declaration introduces
9682         a "partial" root declaretion space.
9683         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9684         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9685         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9686         from 'current_namespace.SlaveDeclSpace'.
9687         (namespace_declaration): Likewise.
9688         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9689         check.  It can't happen now.
9690         * decl.cs (DeclSpace.LookupType): Likewise.
9691         * driver.cs (MainDriver): Sanity check.
9692
9693 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9694
9695         * decl.cs (DeclSpace.FindNestedType): Remove.
9696         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9697         LookupTypeContainer to get the container of the nested type.
9698         * class.cs (TypeContainer.FindNestedType): Make non-override.
9699
9700 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9701
9702         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9703         * class.cs (TypeContainer.PartialContainer): ... here.
9704         (TypeContainer.AddBasesForPart): New helper.
9705         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9706         instead.
9707         * cs-parser.jay (current_class): Convert to DeclSpace.
9708         (struct_declaration, interface_declaration, class_declaration):
9709         Use AddBasesForPart instead of .Bases directly.
9710         * const.cs, iterators.cs: Update to changes.
9711
9712 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9713
9714         * class.cs (TypeContainer.AddMemberType): Rename from
9715         AddToTypeContainer.
9716         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9717         (AddTypeContainer): New.  Combine AddClassOrStruct and
9718         AddInterface.
9719         (AddPartial): Update.  Add 'is_partial' argument.
9720         * roottypes.cs: Update to changes.
9721         * cs-parser.jay (push_current_class): New helper for handling
9722         current_container and current_class.
9723         (struct_declaration, interface_declaration, class_declaration):
9724         Use it.
9725
9726 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9727
9728         * roottypes.cs: Rename from tree.cs.
9729
9730         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9731         * tree.cs (Tree, ITreeDump): Remove types.
9732         * rootcontext.cs (tree, Tree): Remove fields.
9733         (root, ToplevelTypes): New.
9734         * *.cs: Update to rename.
9735
9736         * tree.cs (Tree.RecordDecl): Remove.
9737         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9738         namespace here.
9739         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9740
9741 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9742
9743         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9744         DoFlowAnalysis and OmitStructFlowAnalysis here.
9745         (ec.With): Rename from WithUnsafe and generalize.
9746         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9747         (ec.WithFlowAnalyis): New.
9748         * ecore.cs, expression.cs, statement.cs: Update.
9749
9750 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9751
9752         * statement.cs (Block.ResolveMeta): Simplify slightly.
9753
9754         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9755         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9756         check_state to flags.
9757         (CheckState, ConstantCheckState): Update.
9758         (InUnsafe): New read-only property.
9759         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9760         arbitrary flags.
9761         (WithUnsafe): New helper similar to WithCheckState.
9762         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9763         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9764
9765 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9766
9767         Make comparisons use the same IL irrespective of whether they're
9768         in a 'checked' or 'unchecked' context: one of the issues in #78899
9769         * codegen.cs (EmitContext.CheckState): Make read-only property.
9770         (EmitContext.ConstantCheckState): Likewise.
9771         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9772         helper that implement a save/restore stack for CheckState
9773         values.  This is the only way to change check-state.
9774         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9775         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9776         (CheckedExpr.EmitBranchable): New forwarding method.
9777         (UnCheckedExpr): Likewise.
9778         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9779         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9780         (Checked.Resolve, checked.DoEmit): Likewise.
9781
9782 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9783
9784         * anonymous.cs: Cache the resolved anonymous delegate, and return
9785         this so that the ResolveTopBlock is only triggered once, not
9786         twice.
9787
9788         Currently we trigger ResolvetopBlock twice due to a first pass of
9789         argument check compatibility, and a second pass that does the
9790         actual resolution.   
9791         
9792 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9793
9794         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9795         modifiers.
9796         * rootcontext.cs (Reset): Add helper_classes.
9797
9798 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9799
9800         A fix for #78860
9801         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9802         correctly.
9803
9804 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9805
9806         * statement.cs (Lock): Handle expressions of type
9807         TypeManager.null_type specially.  Fixes #78770
9808
9809 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9810
9811         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9812         to an event.
9813
9814 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9815
9816         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9817         for accessors as well.
9818         * ecore.cs (EventExpr): Add AccessorTable.
9819
9820 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9821
9822         A fix for #78738
9823         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9824         for CS0122 where appropriate.
9825         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9826         level attributes.
9827         (Filter): Assembly can be null in the case of top level attributes.
9828
9829 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9830
9831         A fix for #78690
9832
9833         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9834         is done at global level.
9835
9836 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9837
9838         A fix for #77002, Implemented TypeForwarder support.
9839
9840         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9841         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9842         * typemanager.cs (): Add type_forwarder_attr_type.
9843
9844 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9845
9846         * report.cs: Add CS0469 warning.
9847
9848 2006-06-21  Martin Baulig  <martin@ximian.com>
9849
9850         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9851         the `try'-block, so we also report CS0016 etc. there.
9852
9853 2006-06-21  Martin Baulig  <martin@ximian.com>
9854
9855         * delegate.cs
9856         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9857
9858 2006-06-21  Martin Baulig  <martin@ximian.com>
9859
9860         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9861         also report CS1686 for parameters.
9862
9863 2006-06-21  Martin Baulig  <martin@ximian.com>
9864
9865         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9866         instead of an error if the value is not implicitly convertible to
9867         the switch types; fixes #77964.
9868
9869 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9870
9871         Fix #78673
9872         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9873         FieldBuilder is null.
9874
9875         Fix #78662
9876         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9877         'left' and 'right' before error-checking.
9878
9879 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9880
9881         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9882         Fixed bug #78601.
9883         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9884         (FieldExpr.DoResolve): likewise.
9885         (PropertyExpr.InstanceResolve): likewise.
9886         (EventExpr.InstanceResolve): likewise. 
9887
9888 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9889
9890         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9891         attribute applicable tests for attribute argument.
9892
9893 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9894
9895         Fix #78079
9896         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9897         (Binary.OverloadResolve_PredefinedIntegral): New.
9898         (Binary.OverloadResolve_PredefinedFloating): New.
9899         (Binary.OverloadResolve_PredefinedString): New.
9900         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9901         Follow the standard more closely, and treat numeric promotions in
9902         terms of overload resolution.
9903         (Binary.CheckShiftArguments): Simplify.
9904
9905 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9906
9907         * flowanalysis.cs (MyBitVector): Simplify representation.
9908         (MyBitVector.Clone): Avoid allocating BitArray.
9909         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9910         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9911         (*): Update.  Change all references to MyBitVector.And and
9912         MyBitVector.Or to &= and |=.
9913
9914 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9915
9916         Fix cs0231-[34].cs.
9917         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9918         to param arguments too.
9919
9920 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9921
9922         * cs-parser.jay: Catch another parsing form for arglist being
9923         followed by other arguments.  Fixes #78313.
9924
9925 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9926
9927         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9928         checking of out parameters to ...
9929         (FlowBranchingToplevel.Merge): ... here.
9930         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9931         set, propagate the origin upward, and only complain if there was
9932         no other error.
9933         (FlowBranchingException.AddContinueOrigin): Likewise.
9934         (FlowBranchingException.AddReturnOrigin): Likewise.
9935         (FlowBranchingException.AddGotoOrigin): Likewise.       
9936
9937 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9938
9939         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9940         unreachable, skip it.
9941         (FlowBranchingException.Merge): Always propagate jumps, even if
9942         the finally block renders subsequent code unreachable.
9943
9944 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9945
9946         Fix #77601
9947         * statement.cs (Goto.Resolve): Move responsibility for resolving
9948         'goto' to FlowBranching.AddGotoOrigin.
9949         (Goto.SetResolvedTarget): New.  Callback to set the
9950         LabeledStatement that's the target of the goto.
9951         (Goto.DoEmit): Use Leave instead of Br when crossing an
9952         unwind-protect boundary.
9953         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9954         LookupLabel and adjust to new semantics.
9955         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9956         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9957         Goto.SetResolvedTarget to update target.
9958         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9959         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9960         AddBreakOrigin & co.  Delay propagation until ...
9961         (FlowBranchingException.Merge): ... this.
9962
9963         * statement.cs (Block.Resolve): Always depend on flow-branching to
9964         determine unreachability.  Kill workaround that originally emitted
9965         only one statement after an "unreachable" label (see infloop in
9966         test-515.cs).
9967
9968         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9969         This is still "wrong", but anything better would probably need a
9970         multi-pass algorithm.
9971         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9972         usage vector.  Force current usage vector to be reachable, to
9973         optimistically signify backward jumps.
9974         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9975         detected.
9976         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9977         detected, return the original salted-away usage vector instead,
9978         updated with appropriate changes.  Print unreachable warning if
9979         necessary.
9980         * statement.cs (Block.Resolve): Don't print unreachable warning on
9981         a labeled statement.
9982
9983 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9984
9985         * driver.cs: Pass filename without path to AssemblyBuilder's 
9986         AddResourceFile. Fixes bug #78407.
9987
9988 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9989
9990         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9991         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9992         (FlowBranching.MergeChild): Overwrite
9993         reachability information from Labeled branchings too.
9994
9995 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9996
9997         * statement.cs (Goto.Resolve): Merge jump origins here ...
9998         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9999
10000         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10001         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10002         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10003         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10004         here, ...
10005         * statement.cs (Goto.Resolve): ... not here.
10006         (Goto.Emit): Remove CS1632 check.
10007
10008 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10009
10010         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10011         error message.
10012
10013 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10014
10015         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10016         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10017         (FlowBranchingException.Label): Likewise.
10018
10019         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10020         given value.
10021         (MyBitVector.Or): Use it to avoid losing information (Count).
10022         (FlowBranching.MergeOrigins): Likewise.
10023
10024         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10025         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10026         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10027         (UsageVector.ToString): Simplify.
10028         (UsageVector.MergeSiblings): Move here from ...
10029         (FlowBranching.Merge): ... here.
10030         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10031         not a MyBitVector.
10032
10033 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10034
10035         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10036         null bitvector is treated as all-true.
10037
10038         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10039         (MyBitVector): Rationalize invariants.  'vector != null' implies
10040         that we have our own copy of the bitvector.  Otherwise,
10041         'InheritsFrom == null' implies all inherited bits are true.
10042
10043 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10044
10045         * statement.cs (LocalInfo): Add IsConstant.
10046         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10047         local variable for constants.
10048
10049 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10050
10051         * flowanalysis.cs (MyBitVector.Empty): New.
10052         (MyBitVector): Don't allow InheritedFrom to be null.
10053         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10054         (UsageVector, FlowBranching): Update to changes.
10055
10056         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10057         recursion.  The 'Parent == null' condition isn't sufficient for
10058         anonymous methods.
10059         (FlowBranching.AddBreakOrigin): Likewise.
10060         (FlowBranching.AddContinueOrigin): Likewise.
10061         (FlowBranching.AddReturnOrigin): Likewise.
10062         (FlowBranching.StealFinallyClauses): Likewise.
10063         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10064         (FlowBranching.CheckOutParameters): Likewise.
10065         (FlowBranchingToplevel): Terminate all the above recursions here.
10066         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10067         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10068
10069         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10070         toplevel block.
10071         (FlowBranchingToplevel): New.  Empty for now.
10072         (FlowBranching.MergeTopBlock): Update.
10073         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10074         branching for the anonymous delegate.
10075         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10076
10077         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10078         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10079         information at the start of the merge.  Reorganize.
10080
10081 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10082
10083         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10084
10085 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10086
10087         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10088         to newly introduced ctor.
10089
10090         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10091         message to one place.
10092         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10093         global namespace.
10094
10095 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10096
10097         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10098
10099         * ecore.cs (Expression.ResolveAsConstant): Updated.
10100
10101         * statement.cs (ResolveMeta): Updated.
10102
10103 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10104
10105         * cs-parser.jay: __arglist cannot be used in initializer.
10106
10107 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10108
10109         A fix for #77879
10110         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10111         private types.
10112
10113 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10114
10115         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10116         (LabeledStatement): Add 'name' parameter.
10117         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10118         (Block.AddLabel): Update to changes.
10119         * cs-parser.jay (labeled_statement): Likewise.
10120
10121         * flowanalysis.cs (BranchingType.Labeled): New.
10122         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10123         (FlowBranchingLabeled): New.  Does nothing for now, but will
10124         eventually handle 'goto' flows.
10125         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10126         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10127         that's terminated ...
10128         (Block.Resolve): ... here.
10129
10130         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10131         (UsageVector.MergeFinallyOrigins): Likewise.
10132         (FlowBranching.InTryOrCatch): Likewise.
10133         (FlowBranching.AddFinallyVector): Likewise.
10134         (FlowBranchingException): Update to changes.
10135
10136         Fix #78290
10137         * statement.cs (Return.Resolve): Move error checking to ...
10138         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10139         (FlowBranchingException): Handle return origins like break and
10140         continue origins.
10141         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10142
10143 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10144
10145         A fix for #76122
10146         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10147         filter.
10148
10149 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10150
10151         A fix for #77543
10152         * class.cs (MethodData.Define): Do public accessor check only when method
10153         implements an interface.
10154
10155 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10156
10157         Remove special handling of 'break'
10158         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10159         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10160         (UsageVector.Break): Remove.
10161         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10162         reachability.
10163         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10164
10165         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10166         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10167
10168 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10169
10170         A fix for #75726
10171         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10172         be the interface member.
10173
10174 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10175
10176         A fix for #60069
10177         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10178         for emitting small (int) values.
10179
10180 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10181
10182         Fix #59427
10183         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10184         control-flow passes through the 'finally' after merging-in all the
10185         control-flows from 'try' and the 'catch' clauses.
10186
10187         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10188         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10189         always true at the only non-recursive entry point.
10190         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10191         FlowBranchingBreakable.
10192         (FlowBranchingLoop): Remove.
10193         * statement.cs (Return.DoResolve): Update to changes.
10194
10195         Fix #76471, #76665
10196         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10197         (FlowBranching.CreateBranching): Handle it: create a
10198         FlowBranchingContinuable.
10199         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10200         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10201         except that it handles the 'continue' command.
10202         (FlowBranching.UsageVector.MergeOrigins): Rename from
10203         MergeBreakOrigins.
10204         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10205         except that it overrides AddContinueOrigin.
10206         (FlowBranchingException): Override AddContinueOrigin, similar to
10207         AddBreakOrigin.
10208         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10209         Create a new branching around the embedded statement.
10210         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10211         control flow after the embedded statement.
10212         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10213
10214         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10215         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10216         FlowBranchingBreakable.
10217         (FlowBranchingSwitch): Remove.
10218
10219         Fix test-503.cs
10220         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10221         error reporting to ...
10222         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10223         Rename from 'AddBreakVector'.  Add new location argument.  Return
10224         a bool indicating whether the 'break' crosses an unwind-protect.
10225         (FlowBranchingException.AddBreakOrigin): Add.
10226         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10227         flowbranching after updating with the effects of the 'finally'
10228         clause.
10229         (FlowBranchingBreakable): New common base class for
10230         FlowBranchingLoop and FlowBranchingSwitch.
10231
10232         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10233         embedded statement.
10234         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10235
10236 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10237
10238         * statement.cs (Do.Resolve): If the loop is infinite, set the
10239         barrier.
10240         (While.Resolve, For.Resolve): Set a barrier after the embedded
10241         statement.  There's no direct control flow that goes from the end
10242         of the embedded statement to the end of the loop.
10243         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10244         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10245         above ensure that the reachability is correctly computed.
10246
10247         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10248         (UsageVector.MergeBreakOrigins): If the current path is
10249         unreachable, treat it as if all parameters/locals are initialized.
10250         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10251         infinite loops before merging-in break origins.
10252
10253         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10254         (Reachability.Reachable): Split part into ...
10255         (Reachability.Unreachable): ... this.  Simplify.
10256         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10257
10258         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10259         (Reachability.SetThrowsSometimes): Likewise.
10260         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10261         TriState.Always, use corresponding property.
10262         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10263         (Block.Resolve): Likewise.  Remove some redundant checks.
10264
10265 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10266
10267         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10268         (Reachability.Meet): Don't bother checking AlwaysThrows --
10269         barrier is always set.
10270         (FlowBranchingBlock.Merge): Likewise.
10271
10272 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10273
10274         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10275         checks for unreachable.
10276
10277 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10278
10279         A fix for #77980
10280         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10281
10282         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10283         whether field is really assigned.
10284
10285 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10286
10287         * flowanalysis.cs (Reachability): Make 4-argument constructor
10288         private.
10289         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10290         (Reachability.Always): Rename from the highly misleading
10291         'Reachability.Never'.
10292         (FlowBranching.Merge): Update to changes.  Mark an impossible
10293         situation with a 'throw'.
10294         (*): Update to changes.
10295
10296 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10297
10298         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10299         Remove 'Undefined'.
10300         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10301         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10302         (*): Update to changes.
10303         * statement.cs: Update to changes.
10304
10305 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10306
10307         A fix for #78049
10308         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10309
10310 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10311
10312         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10313         dummy UsageVector.
10314
10315         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10316         argument to two arguments: an usage-vector and a bool.  Move call
10317         to FlowBranching.Merge () ...
10318         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10319
10320         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10321         handling of loop and switch reachability to ...
10322         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10323
10324 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10325
10326         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10327         handling to FlowBranchingLoop.InLoop.
10328         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10329
10330 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10331
10332         A fix for #78115
10333         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10334         anonymous method is allowed from AnonymousContainer here.
10335
10336         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10337
10338 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10339
10340         Fix #78156
10341         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10342
10343 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10344
10345         A fix for #49011.
10346         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10347         (DoubleConstant.Reduce): Ditto.
10348
10349 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10350
10351         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10352         Remove 'lvalue_right_side' argument.  Move parts to ...
10353         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10354         (LocalVariable.DoResolveLValue): ... these.
10355
10356 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10357
10358         Fix cs1655.cs
10359         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10360         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10361         (LocalVariableReference.DoResolveBase): Use it to implement new
10362         CS1655 check.
10363         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10364         (Argument.Resolve): Simplify.  Move CS1510 check ...
10365         * ecore.cs (Expression.ResolveLValue): ... here.
10366         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10367         (PropertyExpr.DoResolveLValue): Likewise.
10368         (FieldExpr.Report_AssignToReadonly): Likewise.
10369         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10370         LValueMemberAccess or LValueMemberOutAccess on instance depending
10371         on it.
10372         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10373         DoResolve as appropriate.
10374
10375 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10376
10377         Fix #75800
10378         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10379         implicit conversions on 'out' and 'ref' arguments.
10380
10381         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10382         improve clarity.  Remove dead code.
10383
10384         Fix #66031
10385         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10386         (Catch.Resolve): Resolve VarBlock if it exists.
10387
10388 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10389
10390         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10391         twice, this was some residual code, the enumerator was emitted
10392         properly in the two branche of if later.
10393
10394 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10395
10396         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10397         cast is never an lvalue.
10398         (Cast.DoResolve, Cast.ResolveRest): Combine.
10399         (Argument.Emit): Simplify slightly.  Move 'Expr is
10400         IMemoryLocation' check ...
10401         (Argument.Resolve): ... here.
10402         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10403
10404         Simplifications.  Fix cs0191-2.cs
10405         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10406         CS1649 and CS1651 to ...
10407         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10408         the actual selection of the error code and message to a lookup
10409         table.  Add a dummy return value to simplify callsites.
10410         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10411         readonly fields of other instances of the same type.  Move CS0197
10412         warning from ...
10413         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10414         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10415         resolution of an out or ref argument.  The code simplification
10416         above uses this invariant.
10417
10418 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10419
10420         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10421         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10422         CheckMarshallByRefAccess.  Drop parameter.
10423         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10424         warning.
10425         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10426         InstanceExpression.
10427         * report.cs (AllWarnings): Add CS1690.
10428         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10429         for ref access too.
10430         (LocalVariableReference.DoResolveBase): Update.
10431
10432 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10433
10434         * class.cs (MethodOrOperator): Moved common parts from method class.
10435         detect obsolete attributes.
10436         (Method.Define): Simplified as it reuses code from base.
10437         (Constructor.ValidAttributeTargets): Fixed issue found during
10438         refactoring.
10439         (Destructor.ValidAttributeTargets): Fixed issue found during
10440         refactoring.
10441         (Operator): Finished refactoring set off by #78020. Operator class is now
10442         ordinary method class.
10443
10444         * anonymous.cs: Updated.
10445
10446         * decl.cs (DeclSpace): Add IsGeneric
10447
10448 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10449
10450         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10451
10452 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10453
10454         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10455         detect obsolete attributes.
10456         (Method.CreateEmitContext): Moved to MethodOrOperator.
10457
10458 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10459
10460         A fix for #78048.
10461         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10462         customized exception to make crash detection easier.
10463         (MethodOrOperator): Started to work on new base class for methods and
10464         operators.
10465         (Method): Derives from MethodOrOperator.
10466         (Constructor.Emit): Emits its own attributes.
10467         (AbstractPropertyEventMethod.Emit): Ditto.
10468         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10469         patch.
10470         (Operator.Emit): It's temporary more tricky than should be.
10471         
10472         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10473
10474         * report.cs (InternalErrorException): Add ctor with inner exception.
10475
10476 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10477
10478         A fix for #76744.
10479         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10480         only not visible.
10481
10482 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10483
10484         A fix for #77916.
10485         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10486         array.
10487
10488 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10489
10490         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10491         attribute is present and Guid not.
10492         (Interface.ApplyAttributeBuilder): Ditto.
10493
10494         * attribute.cs: Add error message.
10495
10496 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10497
10498         A fix for #78020.
10499
10500         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10501         sources (it's composite) so hold them in extra array as they are used in
10502         Emit phase only. It worked in the previous versions by mistake.
10503         (Attribute.Emit): Emit attribute for more owners when exist.
10504
10505         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10506         it has now different behaviour.
10507
10508 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10509
10510         * constant.cs (Constant.IsDefaultInitializer): New method.
10511
10512         * class.cs: Updated.
10513
10514         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10515         re-initialize default values. It saves KBs almost for every assembly.
10516         Thanks Zoltan for the idea.
10517         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10518         (ArrayCreation.DoResolve): Resolve only once.
10519         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10520         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10521
10522 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10523
10524         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10525         From #77961.
10526
10527 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10528
10529         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10530         in an embedded statement too.
10531
10532 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10533
10534         Fix #77958
10535         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10536
10537 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10538
10539         A fix for #77966.
10540
10541         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10542         was not specified.
10543
10544         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10545
10546 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10547
10548         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10549         phase.
10550
10551         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10552         LocalTemporary change.
10553
10554         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10555         TypeContainer.
10556         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10557         initializers optimization.
10558         (ClassOrStruct.TypeAttr): Moved from modifiers.
10559         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10560         (FieldBase.ResolveInitializer): Resolves initializer.
10561         (FieldBase.HasDefaultInitializer): New property.
10562
10563         * cs-parser.jay: Removed message.
10564
10565         * expression.cs (CompilerGeneratedThis): New specialization.
10566
10567         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10568
10569 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10570
10571         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10572
10573 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10574
10575         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10576         be now EnumConstants only.
10577
10578 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10579
10580         * attribute.cs, driver.cs: Reset more caches.
10581
10582 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10583
10584         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10585
10586 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10587
10588         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10589         for easier reuse. Updated all overrides.
10590         (IntegralConstant): New base class for all integral constants.
10591         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10592         of the constant range, report custom error.
10593         (UIntConstant.Reduce): Fixed uint conversion.
10594
10595         * ecore.cs, literal.cs: Reduce updates.
10596
10597 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10598
10599         A fix for #75813.
10600
10601         * class.cs (Constructor.Define): Removed extra if for default ctors.
10602         A patch from Atsushi Enomoto.
10603
10604 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10605
10606         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10607         GetAttributableValue.
10608
10609         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10610         when required.
10611
10612         * convert.cs (ImplicitConversionRequired): Error message moved to
10613         DoubleLiteral.
10614
10615         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10616         automatic implicit conversion of an output value.
10617         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10618
10619         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10620         conversion.
10621         (TypeOf.GetAttributableValue): Add extra handling for object type.
10622
10623         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10624         special error message.
10625
10626 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10627
10628         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10629         InternalCall.
10630         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10631         compatible with MS runtime.
10632
10633 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10634
10635         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10636         attribute arguments here.
10637
10638         * class.cs (Indexer.Define): The check was moved to attribute class.
10639
10640 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10641
10642         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10643         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10644         easier.
10645
10646 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10647
10648         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10649         mcs to keep code differences small.
10650         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10651         * typemanager.cs (parameter_default_value_attribute_type): New.
10652         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10653         CS1908 check.
10654
10655 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10656
10657         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10658
10659 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10660
10661         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10662
10663         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10664         the blocks too.
10665
10666 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10667
10668         * doc-bootstrap.cs : fix build.
10669
10670 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10671
10672         * expression.cs (StringConcat.Append): Issue a warning when empty string
10673         is going to append.
10674
10675 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10676
10677         * assign.cs (CompoundAssign.ResolveSource): Removed.
10678
10679         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10680         clean up.
10681
10682         * class.cs (TypeContainer.FindMethods): Removed.
10683         (TypeContainer.CheckMemberUsage): Made static.
10684
10685         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10686
10687         * constant.cs (CheckRange): Removed unused type argument.
10688         (CheckUnsigned): Removed unused type argument.
10689
10690         * cs-parser.jay: Updated after MemberAccess clean up.
10691         Uses Length for empty string test.
10692
10693         * cs-tokenizer.cs: Uses Length for empty string test.
10694         (IsCastToken): Made static.
10695         (is_hex): Made static.
10696         (real_type_suffix): Made static.
10697
10698         * decl.cs (SetupCache): Made static.
10699         (OnGenerateDocComment): Removed unused ds argument.
10700
10701         * delegate.cs (VerifyDelegate): Removed unused argument.
10702
10703         * doc.cs: Uses Length for empty string test.
10704
10705         * driver.cs: Uses Length for empty string test.
10706
10707         * enum.cs (IsValidEnumType): Made static
10708
10709         * expression.cs (EnumLiftUp): Removed unused argument.
10710         (ResolveMethodGroup): Ditto.
10711         (BetterConversion): Ditto.
10712         (GetVarargsTypes): Ditto.
10713         (UpdateIndices): Ditto.
10714         (ValidateInitializers): Ditto.
10715         (MemberAccess.ctor): Ditto.
10716         (GetIndexersForType): Ditto.
10717
10718         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10719
10720         * iterators.cs: Updated after MemberAccess clean up.
10721
10722         * location.cs: Uses Length for empty string test.
10723
10724         * namespace.cs: Uses Length for empty string test.
10725
10726          * report.cs (CheckWarningCode): Made static.
10727
10728         * statement.cs (LabeledStatement): Removed unused argument.
10729
10730         * typemanager.cs (FilterNone): Removed.
10731
10732 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10733
10734         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10735         obsolete.
10736
10737         * class.cs: Updated.
10738
10739 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10740
10741         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10742
10743 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10744
10745         A fix for #77822.
10746
10747         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10748         reporting, it's more tricky than I thought.
10749
10750 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10751
10752         A fix for #77816.
10753
10754         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10755         host container.
10756         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10757         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10758         Add more error reporting; Fixed issue with params.
10759
10760         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10761
10762         * cs-parser.jay: AnonymousMethod requires host container.
10763
10764         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10765
10766 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10767
10768         * class.cs: Change 'TypeContainer ds' constructor argument to
10769         'DeclSpace parent'.  Some classes were missed below due to
10770         different naming convention.
10771
10772         * class.cs (MemberCore.Parent): Delete.  This makes the
10773         ParentContainer changes below enforceable by the compiler.
10774
10775         Treat pointers to enclosing declaration space as 'DeclSpace', not
10776         'TypeContainer'.
10777         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10778         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10779
10780         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10781         of TypeContainer.
10782         (Block.AddThisVariable): Likewise.
10783         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10784         (AbstractPropertyEventMethod.Emit): Likewise.
10785         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10786         (GetMethod.Define, SetMethod.Define): Likewise.
10787         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10788         (DelegateMethod.EmitMethod): Likewise.
10789
10790         Fix regression test-partial-13.cs.
10791         Rationalize use of PartialContainer.  Ensure that the partial
10792         class semantics can be tied to type-correctness, i.e., any
10793         violation will cause a compile error.
10794         * class.cs, const.cs: Access all fields that belong to class
10795         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10796         Resolve()-like functions still use 'Parent'.
10797
10798         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10799         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10800         (PropertyMethod.CheckModifiers): Remove unused argument.
10801         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10802         DeclSpace.
10803
10804 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10805
10806         Make semantics of PartialContainer simpler.
10807         * decl.cs (DeclSpace.IsPartial): Remove.
10808         * class.cs (TypeContainer.IsPartial): Likewise.
10809         (TypeContainer..ctor): Set PartialContainer to point to self.
10810         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10811         (TypeContainer.FindNestedType): Likewise.
10812         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10813
10814 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10815
10816         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10817
10818 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10819
10820         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10821         classes.
10822
10823 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10824
10825         * class.cs (Operator.Define): An error for base conversion was not
10826         reported correctly.
10827
10828 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10829
10830         * iterator.cs : yield break is allowed in try statement which has
10831           catch clauses. Fixed bug #77767.
10832
10833 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10834
10835         A fix for #77593, #77574.
10836
10837         * class.cs (MethodCore.CheckBase): Another if for operator.
10838
10839 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10840
10841         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10842         were not resolved
10843
10844         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10845         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10846         conversion test.
10847         
10848         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10849         not needed.
10850
10851         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10852         Updated after another emitcontext usage was clean up. It should help us to
10853         synchronize with gmcs easier.
10854
10855 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10856
10857         A fix for #77353.
10858
10859         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10860         (Event.Define): ditto
10861         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10862
10863         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10864         Removed redundant code and set NewSlot for Invoke method too.
10865
10866         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10867         (Parameters.MergeGenerated): New method. Use this method when you merge
10868         compiler generated argument with user arguments.
10869
10870 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10871
10872         * attribute.cs (ResolveAsTypeTerminal): Removed.
10873
10874         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10875         specialization for predefined types; 30% speed up.
10876         Finally placed obsolete check to right place.
10877         (Expression.ResolveType): Removed.
10878
10879         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10880         Updated after ResolveType was removed.
10881
10882         * expression.cs (Cast.ctor): Check void cast.
10883         (Binary.ResolveAsTypeTerminal): Is never type.
10884         (Conditional.ResolveAsTypeTerminal): Is never type.
10885
10886         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10887
10888 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10889
10890         Fix #77679.
10891         * expression.cs (ParameterReference.DoResolveBase): Change return
10892         type to bool.
10893         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10894         Update.
10895
10896         Fix #77628.
10897         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10898
10899         Fix #77642.
10900         * typemanager.cs (GetFullNameSignature): Don't nullref on
10901         protected accessors.
10902
10903 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10904
10905         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10906         these two separated members to simplify the code.
10907         (Attribute.Resolve): Refactored to use new fields and methods.
10908         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10909         implemented obsolete attribute checking.
10910         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10911         implemented obsolete checking again. It look line never ending quest ;-)
10912         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10913
10914         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10915
10916         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10917
10918         *class.cs (Property.Define): Add RegisterProperty call.
10919
10920         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10921         argument groups (only 2).
10922
10923         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10924         encoding expression to arguments.
10925         (Expression.ExprClassToResolveFlags): Just turned to property.
10926
10927         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10928         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10929         optimized as well as implemented support for zero-length attributes.
10930
10931         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10932         Add caching of PropertyInfo's.
10933
10934 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10935
10936         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10937         error multiple times.
10938
10939 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10940
10941         New partial class implementation.
10942         A fix for #77027, #77029, #77403
10943
10944         * attribute.cs (Attributable): Made attributes protected.
10945
10946         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10947         the replacements of ClassPart and PartialContainer.
10948         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10949         (TypeContainer.AddInterface): Ditto.
10950         (TypeContainer.AddPartial): The main method for partial classes. It checks
10951         for errors and merges ModFlags and attributes. At the end class is added to
10952         partial_parts list.
10953         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10954         required here.
10955         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10956         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10957         from the rest of partial classes.
10958         (TypeContainer.GetClassBases): Simplified.
10959         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10960         DefineType.
10961         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10962         (TypeContainer.HasExplicitLayout): Uses Flags now.
10963         (PartialContainer): Removed.
10964         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10965         (StaticClass): Was merged with Class.
10966         (Class.GetClassBases): class and static class bases are verified here.
10967         (Class.TypeAttr): Added static attributes when class is static.
10968         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10969         (MemberBase): In some cases we need to call parent container for partial
10970         class. It should be eliminated but it's not easy now.
10971
10972         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10973
10974         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10975         partial classed to accumulate class comments.
10976         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10977
10978         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10979
10980         * driver.cs (MainDriver): Tree.GetDecl was removed.
10981
10982         * modifiers.cs (Modifiers): Add partial modifier.
10983
10984         * tree.cs (Tree.decl): Removed.
10985         (RootTypes): Started to use this class more often for root types
10986         specializations.
10987
10988 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10989
10990         A fix for #77615
10991
10992         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10993         external interface does not have an attribute.
10994
10995 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10996
10997         Another prerequisites for new partial classs implementation.
10998         
10999         * attribute.cs (Attribute.Equal): Implemented.
11000         (Attribute.Emit): Changed as attributes can be applied more than twice.
11001         (Attributes.Emit): Check for duplicate attributes here.
11002
11003         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11004         as a parameter, clean-up.
11005
11006 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11007
11008         A fix for #77485
11009
11010         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11011         contains obsolete attribute check which can in some cases look for base
11012         type of current class which is not initialized yet.
11013         (TypeContainer.BaseType): Replacement of ptype.
11014
11015         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11016
11017 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11018
11019         First of prerequisites for new partial classs implemention.
11020         
11021         * attribute.cs (Attributable): Extended by ResolveContext;
11022         Attributes finally have correct context for resolving in all cases.
11023         (AttachTo): Attribute owner is assigned here.
11024
11025         * codegen.cs (IResolveContext): Introduce new interface to hold
11026         all information needed in resolving phase.
11027         (EmitContext): Implements IResolveContext; more clean-up needed here.
11028         
11029         * decl.cs (MemberCore): Implemented IResolveContext.
11030
11031         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11032         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11033         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11034         Refactored to use new IResolveContext instead of EmitContext; cleanup
11035
11036 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11037
11038         * codegen.cs (EmitScopeInitFromBlock): check here the
11039         capture_context, there is no need to make two calls to the
11040         EmitContext. 
11041
11042         * anonymous.cs: Add some debugging messages that might help me
11043         track other instances of this problem in the future (the
11044         regression of test 467).
11045
11046         * cs-parser.jay: track the variable block, as we need to initalize
11047         any captured variables declared in this block for the "catch"
11048         portion of the "Try" statement.
11049
11050         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11051         scope initialization for captured variables. 
11052
11053         Also, move the emit for the variables after the block location has
11054         been marked.
11055
11056 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11057
11058         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11059
11060 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11061
11062         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11063         commit yesterday, the initialization for the roots is necessary.
11064         What is not necessary is the scope activation.
11065
11066 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11067
11068         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11069         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11070         CS0206 checks.
11071         (Argument.Resolve): Remove CS0206 checks.
11072
11073 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11074
11075         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11076         scopes for all the roots, the scopes will now be emitted when the
11077         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11078
11079         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11080         code.  This reduces a lot of existing cruft.
11081         
11082         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11083         that the ScopeInfo is generated as we enter the scope, not at the
11084         time of use, which is what we used to do before.
11085
11086         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11087         every time a Block is about to be emitted if we have a
11088         CaptureContext. 
11089
11090 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11091
11092         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11093         (Reset): Update.
11094         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11095
11096         * typemanager.cs (cons_param_array_attribute): Make private.
11097         (Reset): Set it to null.
11098         (InitCoreHelpers): Don't initialize it.
11099         (ConsParamArrayAttribute): New.  Initialize it as needed.
11100         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11101
11102 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11103
11104         * expression.cs: There might be errors reported during the
11105         selection of applicable methods.  If there are errors, do not
11106         continue execution as it will lead the compiler to crash.
11107
11108 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11109
11110         * expression.cs: Member access is not allowed on anonymous
11111         methods.  Fixes #77402.
11112
11113 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11114
11115         Fix #77401
11116         * cs-parser.jay (VariableDeclaration): Don't set
11117         current_array_type to null.
11118         (field_declaration, event_declaration, declaration_statement):
11119         Set it to null here.
11120
11121 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11122
11123         * typemanager.cs (GenericParameterPosition): New.
11124         * doc.cs: Use it.
11125
11126 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11127
11128         * doc.cs : To process "include" elements, first we should create
11129           another list than XmlNodeList, because it could result in node
11130           removal, which could result in that the XmlNodeList gives up
11131           yielding next node.
11132
11133           (Also made code identical to gmcs again.)
11134
11135 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11136
11137         * ecore.cs: Introduce an error report that we were not catching
11138         before, if not silent, we must report the error.  Gonzalo ran into
11139         it.
11140
11141 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11142
11143         A fix for bug: #76957
11144         
11145         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11146         ComputeMethodHost before creating the method, this is a new
11147         requirement. 
11148
11149         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11150         that this method references (RegisterScope).  The actual scope
11151         where the method is hosted is computed with the ComputeMethodHost
11152         before we create the method.
11153
11154         Moved the Deepest routine here.
11155
11156         (AnonymousContainer.ComputeMethodHost): New routine used to
11157         compute the proper ScopeInfo that will host the anonymous method.
11158
11159         (ScopeInfo): Deal with multiple roots.  The problem was that we
11160         did not have a unique root where all ScopeInfos could be hanged
11161         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11162         of roots.  
11163
11164         Remove AdjustMethodScope which is now computed at the end.  Remove
11165         LinkScope which did a partial link, instead link all ScopeInfos
11166         before code generation from the new "LinkScopes" routine. 
11167
11168         Simplify all the Add* routines as they no longer need to maintain
11169         the tree, they just need to record that they are using variables
11170         from a ScopeInfo.
11171
11172         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11173         routines to produce the forest of ScopeInfo trees.
11174
11175         * class.cs (TypeContainer.AppendMethod): This is just like
11176         AddMethod, but ensures that an interface implementation method
11177         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11178         methods, but at the end.
11179
11180         We use this functionality to ensure that the generated MoveNext
11181         method in the iterator class is resolved/emitted before the
11182         enumerator methods created.   
11183
11184         This is required because the MoveNext method computes the right
11185         ScopeInfo for the method.  And the other methods will eventually
11186         need to resolve and fetch information computed from the anonymous
11187         method. 
11188
11189 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11190             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11191
11192         Fix rest of #76995.
11193         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11194         the 'aliases' hash.
11195         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11196         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11197
11198 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11199
11200         Fix #76656, cs0231-2.cs.
11201         * cs-parser.jay (formal_parameter_list): Make error case catch
11202         more issues.
11203         (parenthesized_expression_0): Add CS1026 check.
11204         (invocation_expression): Remove unused { $$ = lexer.Location }.
11205
11206 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11207
11208         Fix #76824.
11209         * cs-parser.jay (statement_expression): Don't list out the
11210         individual statement-expressions.  Convert syntax error into
11211         CS0201 check.
11212
11213 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11214
11215         Fix #76874.
11216         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11217         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11218         CheckIntermediateModification.
11219         (FieldExpr.DoResolve): Add new two-argument version that
11220         allows us to resolve the InstanceExpression as an lvalue.
11221         The one-argument variant is now just a wrapper.
11222         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11223         Resolve the lhs as an lvalue if the it has a value type.
11224         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11225         from Assign.DoResolve.
11226         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11227         resolved as an lvalue.
11228         (PropertyExpr.DoResolve): Update.
11229         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11230         has a value type.  Move CS1612 check here from
11231         CheckIntermediateModification.
11232         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11233         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11234         'right_side' of a ResolveLValue on an 'out' argument.
11235         (EmptyExpression.LValueMemberAccess): New.  Used as the
11236         'right_side' of a propagated ResolveLValue on a value type.
11237         (LocalVariableReference.DoResolveBase): Recognize
11238         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11239         Add CS1654 check.
11240         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11241         EmptyExpression.Null.
11242
11243 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11244
11245         * typemanager.cs : added IsGenericParameter(). In mcs it always
11246           return false.
11247         * doc.cs : for generic parameters, use GenericParameterPosition,
11248           not FullName.
11249
11250 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11251
11252         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11253
11254 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11255
11256         This fixes the problem where we used ldfld instead of ldflda to
11257         load the "THIS" pointer on captured parameters, when THIS is a
11258         value type.  See bug #77205.
11259         
11260         * iterators.cs (CapturedThisReference.Emit): Pass false to
11261         EmitThis (we do not need the address).
11262
11263         * codegen.cs (EmitThis): it needs to know whether we need the
11264         address of `this' or not.  This is used by value types.  
11265
11266         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11267         every other call passes false.
11268
11269 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11270
11271         Fix #77221.
11272         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11273         GetOverride.
11274         * expression.cs (Invocation.OverloadResolve): Update.
11275         (Invocation.DoResolve): Avoid double resolution of invocation.
11276
11277 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11278
11279         Fix #77180.
11280         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11281         unary negation of floating point types as 0-expr; negation cannot
11282         overflow in floating point types.
11283
11284         Fix #77204.
11285         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11286         on operands of 'void' type.
11287
11288         Fix #77200.
11289         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11290         and ExclusiveOr for boolean constants too.
11291
11292 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11293
11294         Fix #75636.
11295         * expression.cs (Invocation.OverloadResolve): Replace reflected
11296         override methods with their base virtual methods, rather than
11297         skipping over them.
11298         * typemanager.cs (TypeManager.GetOverride): New.
11299
11300 2006-01-05  Jb Evain  <jbevain@gmail.com>
11301
11302         * class.cs (Property.Define, Indexer.Define): do not tag the
11303         properties as SpecialName | RTSpecialName.
11304
11305 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11306
11307         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11308         doing a low-level comparission of parameter types.  It was lacking
11309         a check for __argslist. 
11310
11311 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11312
11313         * expression.cs (ParameterReference.DoResolveBase): Allow
11314         reference parameters if they are local to this block. 
11315
11316         This allows the ref and out parameters of a delegate to be used in
11317         an anonymous method, for example:
11318
11319         delegate void set (out int x);
11320
11321         set s = delegate (out int x){
11322                 x = 0;
11323         };
11324
11325         This is used by functionality introduced late in the C# language.
11326         
11327         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11328         method that take ref and out parameters. 
11329
11330         Fixes #77119 which was a late change in the spec.
11331
11332 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11333
11334         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11335         parent if its the same scope.  Fixes #77060.
11336
11337 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11338
11339         * driver.cs: Report the case of no source files and no -out:
11340         argument provided.
11341
11342 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11343
11344         Fix #77035.
11345         * expression.cs (ComposedCast.GetSignatureForError): Define.
11346
11347 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11348
11349         Fix #76995
11350
11351         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11352         ListDictionary, to contain the ExternAliasEntry entries (in
11353         addition to the NamespaceEntry.aliases hashtable). This field is
11354         shared between the original entry and its doppelganger (bodyless 
11355         copy of it).
11356         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11357         extern_aliases field.
11358         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11359         lookup in extern_aliases.
11360
11361 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11362
11363         Fix #77006.
11364         * class.cs (TypeContainer.Mark_HasEquals): New.
11365         (TypeContainer.Mark_HasGetHashCode): New.
11366         (ClassPart): Override them.
11367         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11368
11369         Fix #77008.
11370         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11371         'parent' argument to the base constructor.
11372
11373         Remove all mention of TypeContainer from decl.cs.
11374         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11375         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11376         (DeclSpace.DeclSpace): Likewise.
11377         (DeclSpace.DefineMembers): Remove unused argument.
11378         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11379         debugging check -- we don't care if the debug code throws an
11380         InvalidCastException instead of an InternalErrorException.
11381         * class.cs (TypeContainer.DefineMembers): Update to changes.
11382         (TypeContainer.DoDefineMembers): Likewise.
11383         (TypeContainer.GetMethods): Likewise.
11384         (PropertyMember.Define): Likewise.
11385         (MemberBase.Parent): New property that forwards to
11386         MemberCore.Parent, but ensures that we get a TypeContainer.
11387         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11388         (RootContext.PopulateTypes): Likewise.  Remove special case code
11389         for !RootContext.StdLib: DefineMembers is idempotent.
11390
11391 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11392
11393         * convert.cs (ExplicitConversionCore): Check the return value from
11394         ExplicitConversionCore which can return null on failure.  Fixes #76914
11395
11396 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11397
11398         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11399
11400 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11401
11402         * doc.cs : The search for referenced namespace was insufficient to
11403           get global one as it used to do. Fixed bug #76965.
11404
11405 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11406
11407         * doc.cs : check name in cref in the last phase that whether it is
11408           namespace or not.
11409
11410 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11411
11412         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11413           Mono.C5.
11414
11415 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11416
11417         * doc.cs : so it turned out that we cannot skip override check for 
11418           interface members. Fixed bug #76954.
11419
11420 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11421
11422         * cs-tokenizer.cs : fixed bug #75984:
11423           - #warning and #error should not be handled when the source line
11424             is disabled.
11425           - #line is not checked strictly when the source line is disabled.
11426           - #define and #undef is on the other hand checked strictly at any
11427             state.
11428
11429 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11430
11431         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11432           CS1027 report.
11433
11434 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11435
11436         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11437
11438         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11439         event initializers.
11440         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11441         (FieldBase.Initializer): Initializer is now optional.
11442         (EventField.Define): Only event field can have initializer.
11443
11444         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11445
11446         * const.cs (Const): Reuse initializer.
11447
11448         * cs-parser.jay: Updated after FieldBase changes.
11449         Added current_array_type to simplify array initializers.
11450
11451         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11452
11453         * expression.cs, iterators.cs: Updated.
11454
11455         * namespace.cs (NamespaceEntry): Made UsingFound private.
11456
11457 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11458
11459         * parameterCollection.cs: Obsolete, removed.
11460         * parser.cs: Obsolete, removed.
11461
11462 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11463
11464         Fix #76849.
11465         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11466
11467         * enum.cs (Enum.Define): Set obsolete context here.
11468
11469 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11470
11471         * doc.cs :
11472           - FindDocumentedMember() now expects 1) paramList as null
11473             when "we don't have to check the number of parameters" and
11474             2) Type.EmptyTypes when "there is no arguments".
11475           - Introduced FoundMember struct to hold the exact type which was
11476             used to find the documented member (the above change broke
11477             test-xml-044; it might be better just to use DeclaringType than
11478             what MS does, like this change does, but it depends on usage.)
11479
11480 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11481
11482         * doc.cs : documented member might be from DeclaringType for nested
11483           types. Fixed bug #76782.
11484
11485 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11486
11487         * anonymous.cs: Have the param code handle leaving copies on the
11488         stack etc. Allows anonymous params to take part in the assignment
11489         code (++, +=, etc). Fixes bug #76550
11490
11491         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11492         it down to the anon code.
11493
11494         * iterators.cs: Use dummy var here
11495
11496         * codegen.cs: Handle new vars
11497
11498 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11499
11500         Fix #76849.
11501         * class.cs (MethodData.Define): Set proper Obsolete context.
11502
11503         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11504         obsolete context.
11505         (FieldExpr.DoResolve): Ditto.
11506
11507 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11508
11509         Fix #76849.
11510         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11511         parent is not obsolete.
11512
11513 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11514
11515         * doc.cs : (FindDocumentedMember) find parameterless members first
11516           and get CS0419 in the early stage. Fixed first case of bug #76727.
11517
11518 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11519
11520         Fix #76859.
11521         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11522         no error was reported.
11523
11524         *expression.cs (Binary.DoResolve): left can be null.
11525
11526 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11527
11528         Fix #76783.
11529         * class.cs (MethodData.Emit): Parameters should be labeled first.
11530
11531 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11532
11533         Fix #76761.
11534         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11535
11536 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11537
11538         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11539
11540         * class.cs (MethodCore): Parameter clean up.
11541         (IMethodData): Added ParameterInfo.
11542         (MethodData): Parameter clean up.
11543         (Indexer.Define): Parameter clean up.
11544
11545         * anonymous.cs,
11546         * codegen.cs,
11547         * cs-parser.jay,
11548         * decl.cs,
11549         * doc.cs,
11550         * ecore.cs,
11551         * flowanalysis.cs,
11552         * iterators.cs,
11553         * pending.cs,
11554         * statement.cs,
11555         * typemanager.cs: Parameter clean up.
11556
11557         * delegate.cs (Define): Get rid of duplicated code.
11558
11559         * expression.cs (ParameterReference): Removed useless parameters
11560         and simplified.
11561         (Invocation): Ditto.
11562
11563         * parameter.cs (ParamsParameter): New class, params specialization.
11564         (ArglistParameter): Attemp to separate arglist.
11565         (Parameter): Refactored to be reusable and faster.
11566         (Parameter.Modifier): Made understandable.
11567         (Parameters): Changed to be used as a class for `this' assembly
11568         parameters. Refactored to use new specialized classes.
11569
11570         * support.cs (ParameterData): Added Types property.
11571         (InternalParameters): Deleted.
11572
11573 2005-08-20  Martin Baulig  <martin@ximian.com>
11574
11575         Merging this patch from GMCS to fix #75867.
11576
11577         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11578         scope if we don't already have it.
11579
11580 2005-11-17  Martin Baulig  <martin@ximian.com>
11581
11582         * anonymous.cs
11583         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11584         inherit the scope from our parent.  Fixes #76653.
11585
11586 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11587
11588         * doc.cs : the previous patch does not actually fix the bug.
11589           PropertyInfo override check is now implemented and really fixed it.
11590         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11591
11592 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11593
11594         * doc.cs : apply "override filter" also to properties.
11595           Fixed bug #76730.
11596
11597 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11598
11599         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11600           no need to check overrides. For classes, omit those results from 
11601           interfaces since they must exist in the class. Fixed bug #76726.
11602
11603 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11604
11605         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11606           with different parameters. Fixed the second problem in #76685.
11607
11608 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11609
11610         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11611           get expected 'protected' access in CheckValidFamilyAccess()).
11612           Fixed bug #76692.
11613
11614 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11615
11616         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11617           Fixed bug #76705.  CS1569 was incorrectly commented out.
11618
11619 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11620
11621         * doc.cs : use Invocation.IsOverride() to do real override check.
11622         * expression.cs : made Invocation.IsOverride() internal.
11623
11624 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11625
11626         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11627           TypeBuilder.FindMembers() and filter overriden base members out.
11628           Fixed bug #76990.
11629
11630 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11631
11632         * doc.cs : ref/out parameters are represented as '@' (instead of
11633           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11634
11635 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11636
11637         * doc.cs : when there was no '.' in cref to methods in doc comment,
11638           then parameters were missing in the output. Fixed bug #76691.
11639
11640 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11641
11642         * driver.cs : don't output docs when there is an error.
11643           Fixed bug #76693.
11644
11645 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11646
11647         * doc.cs :
11648           Now it should detect indexers. Fixed primary concern in bug #76685.
11649           Fixed CS0419 message to not show the identical member signature in
11650           the message.
11651
11652 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11653
11654         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11655           instead of Type.FindMembers() since it does not handle events.
11656           Fixed bug #71604.
11657
11658 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11659
11660         * codegen.cs: Fixed typo (speficied -> specified).
11661
11662 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11663
11664         Fix #76369.
11665         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11666
11667 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11668
11669         * attribute.cs: Changed error message.
11670
11671         * cs-tokenizer.cs: One more check.
11672
11673 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11674
11675         * statement.cs (Block.Resolve): Ignore empty statement.
11676
11677 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11678
11679         * report.cs: Made error/warning methods more strict to avoid
11680         their misuse.
11681
11682         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11683         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11684         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11685         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11686
11687 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11688
11689         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11690         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11691
11692         * class.cs (TypeContainer.IsComImport): New property.
11693         (Constructor.Define): Create proper ctor for ComImport types.
11694
11695         * expression.cs (New.CheckComImport): Fixed.
11696
11697 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11698
11699         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11700         that a parameter has been captured does not mean that we do not
11701         have to do the rest of the processing.  This fixes the second part
11702         of #76592.  If there was another anonymous method capturing
11703         values in the past, the Scope would never be set for the second
11704         method that captured the same parameter.
11705
11706         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11707         properly manipulate the stack.   Second part of fix for #76592.
11708
11709         * expression.cs (New): Add support for invoking "new" on
11710         interfaces that have been flagged with the ComImport attribute and
11711         the CoClass.  Fixes #76637 
11712
11713         * statement.cs (Try.DoEmit): When a variable is captured, do not
11714         try to emit the vi.LocalBuilder variable as it has been captured.
11715         Create a temporary variable and store the results on the
11716         FieldBuilder.  Fixes #76642
11717
11718 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11719
11720         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11721
11722         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11723
11724         * expression.cs (Binary.DoResolve): Added && optimalization.
11725     
11726         * typemanager.cs (AddUserType): Removed useless argument.
11727
11728 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11729
11730         * statement.cs (Block.variables): Uses ListDictionary.
11731
11732 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11733
11734         Fix #75969.
11735         * class.cs (PartialContainer.EmitType): Customized to emit
11736         security attributes.
11737         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11738         for partial classes.
11739
11740 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11741
11742         Fix #76599.
11743         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11744         access has to be fixed.
11745         
11746         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11747
11748 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11749
11750         Fix #76590.
11751         * ecore.cs (NullCast.Reduce): Implemented.
11752
11753         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11754         constant type.
11755         
11756         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11757         properly.
11758         (Foreach.Resolve): Catch null properly.
11759
11760 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11761  
11762         * cs-tokenizer.cs: Warning text fix.
11763
11764         * driver.cs: AllWarningNumbers exposed on public interface.
11765
11766         * report.cs (): Reviewed warning numbers.
11767         (IsValidWarning): Use binary search.
11768
11769 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11770  
11771         * driver.cs: Implemeted resource visibility.
11772         (Resources): New class for code sharing between /res: and
11773         /linkres:
11774  
11775 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11776
11777         Fix #76568.
11778         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11779         folding.
11780         
11781         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11782         contants only.
11783         
11784         * ecore.cs (NullCast): Child is contant only.
11785         
11786         * literal.cs (NullLiteral.Reduce): null can be converted to any
11787         reference type.
11788
11789 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11790
11791         * driver.cs: Use Encoding.Default as default code page instead
11792           of ISO-28591.
11793
11794 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11795
11796         Fix #76085.
11797         * expression.cs (Invocation.Error_InvalidArguments): Handle
11798         __arglist parameters.
11799         (Invocation.VerifyArgumentsCompat): Likewise.
11800         * support.cs (ReflectionParameters.GetSignatureForError): Print
11801         __arglist parameters.
11802         (InternalParamters.GetSignatureForError): Likewise.
11803         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11804
11805 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11806
11807         * attribute.cs (GetPropertyValue): Made public.
11808
11809         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11810         Resolve.
11811         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11812         attribute.
11813         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11814         is not defined.
11815         
11816         * driver.cs: Reflect method name change.
11817         
11818         * statement.cs (Try.Resolve): Warn when try has both general
11819         exception handlers.
11820         
11821         * typemanager.cs: runtime_compatibility_attr_type new predefined
11822         type.
11823
11824 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11825
11826         Fix #76419.
11827         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11828         treat it as an empty parameter list.
11829
11830 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11831
11832         Fix #76271.     
11833         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11834         ResolveAsTypeStep silent.
11835         * statement.cs (Block.AddConstant): Mark block as used.
11836         (Block.ResolveMeta): Avoid piling on error messages
11837         if a constant initializer resolution fails.
11838
11839 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11840
11841         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11842         Remove.
11843         (NamespaceEntry.VerifyAllUsing): New.
11844         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11845         behaviour.  Delegates actual resolution of alias to ...
11846         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11847         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11848         Update.
11849         * driver.cs (Driver.MainDriver): Update.
11850         
11851         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11852         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11853         property.
11854         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11855         Remove.
11856         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11857         RootNamespace.DefineNamespacesForAll.
11858
11859 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11860
11861         * typemanager.cs (assemblies, external_aliases, modules)
11862         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11863         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11864         overhead.  Move resposibility ...
11865         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11866         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11867
11868 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11869
11870         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11871         cached_namespaces.  Improve usage.
11872         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11873         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11874         Move from GlobalRootNamespace and simplify.
11875         (RootNamespace.Global): Make instance variable.
11876         (RootNamespace.RootNamespace): Add "alias name" parameter.
11877         (GlobalRootNamespace): Simplify drastically.
11878         (Namespace.Lookup): Don't use GetNamespace.
11879         * typemanager.cs (GetRootNamespace): Rename from
11880         ComputeNamespaceForAlias.
11881         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11882
11883 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11884
11885         * anonymous.cs (AnonymousContainer): Don't crash when container
11886         doesn't exist.
11887
11888 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11889
11890         * expression.cs (Binary.DoResolve): Warn when comparing same
11891         values.
11892
11893 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11894
11895         Fix #76486.
11896         * expression.cs (Binary.DoResolve): It looks like there are no
11897         convetsion rules in enum context.
11898
11899 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11900
11901         Add support for extern alias qualifiers.
11902         * typemanager.cs: Move some LookupTypeReflection code
11903         to namespace.cs, to have cleaner code. Added some methods
11904         to help us keep track of the extern aliased references.
11905         * driver.cs: Add suport for extern alias assemblies on command
11906         line and check for their warnings/errors. Also keep track of the
11907         extern aliased assemblies.
11908         * namespace.cs: Move the global functionality of Namespace
11909         to GlobalRootNamespace/RootNamespace. Now the global namespace
11910         is GlobalRootNamespace.Globa. Also the code moved from 
11911         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11912         Finally added LocalAliasEntry (AliasEntry before) and
11913         ExternAliasEntry, to handle alias statements.
11914         * cs-parser.jay: Add support in the grammar for extern alias
11915         statement.
11916         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11917         Update callings to Namespace (now in GlobalRootNamespace).
11918
11919 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11920
11921         Fix #76371.
11922         * class.cs (TypeContainer.DefineType): Move updating of
11923         topological sort earlier in the code.
11924         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11925
11926 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11927
11928         Fix #76273.
11929         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11930         
11931         * constant.cs (Constant.TryReduce): Moved from Cast class.
11932         (Reduce): Made little bit more OO and fixed missing conversions.
11933         
11934         * ecore.cs (Reduce): Implemented.
11935         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11936         
11937         * literal.cs (Reduce): Implemented.
11938         
11939         * class.cs: Reverted Miguel's wrong commit.
11940
11941 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11942
11943         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11944
11945 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11946
11947         * cs-parser.jay, expression.cs : CS0214 was missing error location
11948           for constants. Fixed bug #76404.
11949
11950 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11951
11952         Fix #76370.
11953         * convert.cs (ExplicitConversionCore): Fixed object->enum
11954         conversion.
11955
11956 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11957
11958         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11959         InstanceExpression.
11960         (PropertyExpr.EmitCall): Likewise.
11961         * expression.cs (Invocation.EmitArguments): Handle case where
11962         arguments == null.
11963         (Invocation.EmitCall): Avoid allocating temporary variable if
11964         there are no arguments.
11965
11966 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11967
11968         Fix #76323.
11969         * convert.cs (ImplicitConversionStandard): Move conversion of
11970         void* to arbitrary pointer types ...
11971         (ExplicitConversionStandard): .. here.
11972         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11973         error to always print typenames.
11974
11975 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11976
11977         * convert.cs (GetConversionOperator): Rename from
11978         GetConversionOperators.  Move operator selection code from ...
11979         (UserDefinedConversion): ... here.
11980
11981 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11982
11983         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11984         conversion.
11985
11986 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11987
11988         * assign.cs (Assign.DoResolve): Error method changed.
11989
11990         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11991         
11992         * const.cs (ResolveValue): Reset in_transit immediately.
11993         
11994         * constant.cs: Error method changed.
11995         
11996         * convert.cs: Removed useless location parameter.
11997         (ExplicitNumericConversion): Don't do double enum check.
11998         (ExplicitConversionCore): Renamed from ExplicitConversion.
11999         (ExplicitUnsafe): Extracted from ExplicitConversion.
12000         (ExplicitConversion): Uses for error reporting.
12001         
12002         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12003         error messages.
12004         (ResolveBoolean): Uses common error method.
12005         (CastToDecimal): Get rid of ec.
12006         (CastFromDecimal): Optimized.
12007         (ConvCast): Get rid of ec.
12008         
12009         * enum.cs (ResolveValue): Reset in_transit immediately.
12010         (Emit): Return after first error.
12011         
12012         * expression.cs: Convert changes.
12013         
12014         * literal.cs: Error method changed.
12015         
12016         * statement.cs: Error method changed.
12017
12018 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12019
12020         * support.cs (SeekableStreamReader.Position): Don't error out when
12021         the requested position is just beyond the end of the current
12022         buffered data.
12023
12024 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12025
12026         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12027         try to keep in sync with the byte count of the underlying Stream.
12028         However, this limits us to a window size of 2048 characters: i.e.,
12029         the maximum lookahead of our lexer/parser can be 2048 characters.
12030
12031 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12032
12033         Fix #76255.
12034         * driver.cs: Fix compilation files with full root path.
12035
12036 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12037
12038         * report.cs (SymbolRelatedToPreviousError): Format the output so
12039         it does not use an open parenthesis that is never closed. 
12040
12041         * driver.cs: Follow coding guidelines
12042
12043 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12044
12045         Fix #72930.
12046         * const.cs (Const.ResolveValue): Check for assigning non-null
12047         value to reference type.
12048
12049 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12050
12051         * anonymous.cs: Implemented ExprClassName.
12052         
12053         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12054         delegate.
12055         
12056         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12057         check.
12058         
12059         * class.cs (StaticClass.DefineContainerMembers): Report protected
12060         members as error.
12061         
12062         * codegen.cs: if(ed) PRODUCTION.
12063         
12064         * convert.cs (Error_CannotImplicitConversion): Better error
12065         distinction.
12066         
12067         * cs-parser.jay: More error checks.
12068         
12069         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12070         
12071         * driver.cs (CSCParseOption): Enabled wrong option check.
12072         
12073         * ecore.cs (Expression.ExprClassName): Turned to property.
12074         (MemberExpr.CheckIntermediateModification): For checking boxed
12075         value types     modification.
12076         
12077         * statement.cs (Fixed.Resolve): Expression type must be
12078         convertible to fixed type.
12079         (CollectionForeach.GetEnumeratorFilter,TryType):
12080         Small refactoring for easier error checking.
12081
12082 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12083
12084         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12085         attributes.
12086         
12087         * class.cs (GeneratedBaseInitializer): New class for customization
12088         compiler generated initializers.
12089         (MemberBase.DoDefine): Check Obsolete attribute here.
12090         (FieldMember.DoDefine): Ditto.
12091         
12092         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12093         constants.
12094         
12095         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12096         (MemberCore.GetObsoleteAttribute): Removed argument.
12097         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12098         (MemberCore.CheckObsoleteType): New helper.
12099         
12100         * delegate.cs,
12101         * enum.cs,
12102         * statement.cs: Updates after MemberCore changes.
12103         
12104         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12105         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12106         
12107         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12108         obsolete attribute for compiler construct.
12109         (As.DoResolve): Cache result.
12110         
12111         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12112
12113 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12114
12115         Fix #76133.
12116         * expression.cs (This.VerifyFixed): In a value type T, the type of
12117         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12118         value type R, 'this' is treated as a value parameter.
12119
12120 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12121
12122         * statement.cs (Lock): Use the TemporaryVariable class instead of
12123         manually using local variables as those do not work when variables
12124         are captured.
12125
12126         * ecore.cs: Moved the TemporaryVariable class from being a nested
12127         class inside Foreach to be a public class that can be employed in
12128         other places. 
12129
12130 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12131
12132         * cs-parser.jay: interface_accessors replaced by
12133         accessor_declarations.
12134
12135         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12136         location.
12137         
12138         * statement.cs (GotoCase.Resolve): Convert null constant to
12139         null case.
12140         (SwitchLabel.ResolveAndReduce): Ditto.
12141         (SwitchLabel.NullStringCase): Custom null stamp.
12142         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12143         
12144         typemanager.cs (CSharpSignature): Don't skip first argument
12145         for full names.
12146
12147 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12148
12149         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12150
12151         * location.cs (InEmacs): in this mode, do not report column
12152         location as it confuses Emacs.
12153
12154 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12155
12156         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12157         expression.cs, iterators.cs, literal.cs: Store constants and
12158         literals location.
12159         
12160         * class.cs (MemberBase.ShortName): Pass location.
12161         
12162         * cs-parser.jay: Some location fixes.
12163         
12164         * ecore.cs (Expression.Location): Made virtual.
12165
12166 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12167
12168         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12169         if the underlying types are the same, otherwise we need to produce
12170         code that will do the proper cast.
12171
12172         This was exposed by Marek's constant rewrite which produced
12173         invalid code for the call site:
12174
12175         enum X : long { a }
12176         void Method (X v) {}
12177
12178         Method ((X) 5)
12179
12180         This fixes test-49.cs
12181
12182 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12183
12184         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12185           Type/Object should be allowed as well. Fixed bug #75968.
12186
12187 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12188
12189         * expression.cs : (Binary.DoResolve): when one is enum constant and
12190           another is constant 0, then return enum one *as enum type*.
12191           Fixed bug 74846.
12192
12193 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12194
12195         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12196         internal.
12197
12198         Fix #75941.
12199         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12200         flow-branching for LocalVariableReferences in case we were invoked
12201         from a MemberAccess.
12202         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12203         Carved out of ...
12204         (LocalVariableReference.DoResolveBase): ... this.
12205         (MemberAccess.Resolve): Do the check that was disabled during
12206         SimpleNameResolve.
12207
12208 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12209
12210         * class.cs :
12211           (PartialContainer.Create): check abstract/sealed/static strictly
12212           but abstract/sealed can exist only at one side. Fixed bug #75883.
12213
12214 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12215
12216         Fix #75945.
12217         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12218         specified, don't default to UnmanagedType.I4.
12219
12220 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12221
12222         * expression.cs : conditional operator should check possibly
12223           incorrect assign expression. Fixed bug #75946.
12224
12225 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12226
12227         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12228           Reverting the change. gmcs is much complex than mcs on this matter.
12229
12230 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12231
12232         * cs-tokenizer.cs : To read another token ahead of the actual 
12233           consumption, use new SavedToken and cache token instead of moving
12234           back the stream with SeekableStreamReader (it seemed problematic).
12235         * cs-parser.jay,
12236           driver.cs : Thus use StreamReader directly.
12237         * support.cs : Thus removed SeekableStreamReader.
12238
12239 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12240
12241         Fix #75934.
12242         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12243         (ScopeInfo.EmitScopeType): Use it to construct field names from
12244         names of captured locals.
12245
12246         Fix #75929.
12247         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12248         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12249         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12250         (ExplicitConversion): Remove enum cases already handled by
12251         implicit conversion.  Move implicit conversion check to the beginning.
12252         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12253         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12254         Don't treat System.Enum as a struct.
12255
12256 2005-08-30  Jb Evain  <jbevain@gmail.com>
12257
12258         * attribute.cs: handles as expression in parameters.
12259
12260 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12261
12262         Fix #75802.
12263         * class.cs (TypeContainer.VerifyClsName): Don't use a
12264         PartialContainer when verifying CLS compliance.
12265         (AbstractPropertyEventMethod): Set Parent here, ...
12266         (PropertyMethod): ... not here.
12267
12268 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12269
12270         * attribute.cs : escaped attribute name should not be allowed to be
12271           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12272
12273 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12274
12275         Fix #75927.
12276         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12277         when converting a long constant to unsigned long.
12278         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12279         detect where IsApplicable and VerifyArgumentsCompat disagree.
12280
12281 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12282         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12283
12284         Fix #75848.
12285         * class.cs (TypeContainer.CanElideInitializer): New helper.
12286         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12287         can safely emitting the initializer of a field.
12288
12289 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12290
12291         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12292           allowed inside a switch (without loop). Fixed bug #75433.
12293
12294 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12295
12296         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12297         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12298
12299 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12300
12301         * driver.cs : kinda reverting the default encoding changes (not exact 
12302           revert since I noticed that "codepage:reset" might not work fine).
12303
12304 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12305
12306         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12307           Location. Now getter and setter store location correctly.
12308           (errors/cs0111-12.cs now reports the expected location.)
12309
12310 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12311
12312         * driver.cs : Use default encoding on the environment.
12313           Removed (now that) extra parameter for SeekableStreamReader.
12314         * support.cs : (SeekableStreamReader) third .ctor() argument for
12315           StreamReader is not required (always true). preamble size could
12316           be acquired in simpler and safe way.
12317
12318 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12319
12320         * cs-parser.jay: report CS0642 at warning level 3
12321           and report CS0642 for an if else statement also
12322           fixes bug #74745. Patch by John Luke (and a bit
12323           modified by me).
12324           Removed extra CS0642 warning check for "while",
12325           "for" and "fixed".
12326         * statement.cs: In Block.Resolve(), CS0642 check
12327           is reimplemented to check a sequence of an empty
12328           statement and a block.
12329
12330           Both fix bug #66777.
12331
12332 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12333
12334         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12335         detection until I fix it.
12336         
12337         * cs-tokenizer.cs: Changed error message.
12338         
12339         * cs-parser.jay: Fixed 2 error locations.
12340         
12341         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12342         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12343         properties.
12344         
12345         * enum.cs (GetSignatureForError): Fixed.
12346         
12347         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12348         method detection.
12349         
12350         * class.cs,
12351         * typemanager.cs (RegisterProperty): Removed.
12352         
12353         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12354
12355 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12356
12357         Fix #75874.
12358         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12359         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12360
12361 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12362
12363         * expression.cs : tiny fix is required for not warning positive ulong.
12364           See test-441.cs.
12365
12366 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12367
12368         * expression.cs : add CS0652 check for constant and integral
12369           expression. Fixed bug #53974.
12370
12371 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12372
12373         * expression.cs : in DoNumericPromotions(), check if there is implicit
12374           conversion overload for string (to check CS0034). Fixed bug #52492.
12375
12376 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12377
12378         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12379
12380 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12381
12382         * ecore.cs : report location when it is *not* Null.
12383
12384 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12385
12386         * codegen.cs,
12387           ecore.cs,
12388           flowanalysis.cs,
12389           expression.cs:
12390           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12391           correctly. Fixed bug #75721.
12392
12393 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12394
12395         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12396         loop that performs 'min (pos, char_count)'.
12397
12398         Fix #75862.
12399         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12400         converted value in Operator.OnesComplement.
12401
12402 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12403
12404         * anonymous.cs: If the anon method is pulled into a helper class,
12405         it needs to be `internal' not `private'. Fixes runtime behavior on
12406         msft. bug #75704
12407
12408 2005-08-20  Martin Baulig  <martin@ximian.com>
12409
12410         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12411         scope if we don't already have it.
12412
12413         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12414         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12415         fixes #75867.
12416
12417 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12418
12419         Fix #75803
12420         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12421         is a partial class.
12422
12423 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12424
12425         The big constants rewrite
12426         Fix #75746, #75685 and more
12427         As a side effect saved 1MB for MWF ;-)
12428         
12429         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12430         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12431         enum based for corlib compilation.
12432         
12433         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12434         subtractions.
12435         
12436         * class.cs (FixedField.Define): Use ResolveAsConstant.
12437         
12438         * const.cs (IConstant): Interface constants and enums.
12439         (Const.ResolveValue): New method for constant resolvning.
12440         (ExternalConstant): Constants from imported assemblies.
12441         
12442         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12443         conversion; like enums.
12444         (Constant.ToType): Converts this constant to different type.
12445         (Constant.Increment): Adds 1.
12446         
12447         * convert.cs (ImplicitConversionRequired): Simplified.
12448         
12449         * cs-parser.jay: Create EnumMember directly.
12450         
12451         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12452         
12453         * doc.cs (GenerateEnumDocComment): Removed.
12454         
12455         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12456         (ConvertIntLiteral): Removed.
12457         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12458         
12459         * enum.cs (EnumMember): Implement IConstant.
12460         (Enum.IsValidEnumConstant): Removed.
12461         (Enum.GetNextDefaultValue): Removed.
12462         (Enum.FindMembers): Updated.
12463         (Enum.GenerateDocComment): Iterate enum members.
12464         
12465         * expression.cs (Cast.TryReduce): Handle enums correctly.
12466         (New.Constantify): Made public.
12467         (MemberAccess.DoResolve): Removed contant specific if(s).
12468         
12469         * literal.cs (NullLiteral): Implement new abstract methods.
12470         
12471         * statement.cs (GotoCase.Resolve): Use new constant methods.
12472         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12473         
12474         * typemanager.cs (LookupEnum): Removed.
12475         (IsEnumType): Fixed to work with corlib.
12476         (RegisterConstant): Removed.
12477         (LookupConstant): Removed.
12478         (GetConstant): Changed to work with IConstant.
12479
12480 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12481
12482         * location.cs : Fixed overflown (>255) column number.
12483
12484 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12485
12486         First cut of the qualified-alias-member feature.
12487         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12488         token.
12489         * cs-parser.jay (DOUBLE_COLON): New token.
12490         (namespace_or_type_name): Add rule for recognizing
12491         qualified-alias-members.
12492         (primary_expression): Likewise.
12493         (element_access): Allow QualifiedAliasMember as a possible
12494         type-bearing expression.
12495         (local_variable_type, local_variable_pointer_type): Likewise.
12496         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12497         aliases in the current and enclosing namespace declarations.
12498         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12499         * decl.cs (MemberName.is_double_colon): New.
12500         (MemberName.MemberName): Add new constructor for alias-member.
12501         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12502         * expression.cs (QualifiedAliasMember): New expression type.
12503
12504 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12505
12506         * location.cs : it borked when no argument was specified.
12507
12508 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12509
12510         * location.cs : tiny ToString() format fix.
12511
12512 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12513
12514         * statement.cs : oops, it was missing.
12515
12516 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12517
12518         A set of fixes for precise line/column location.
12519
12520         * location.cs :
12521           "token" field now holds a file/line "delta", a line number offset 
12522           from the segment, and a column number. See also:
12523           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12524           December/009508.html
12525           Removed static IsNull. Use instance IsNull property instead.
12526         * cs-tokenizer.cs :
12527           For some tokens it stores Location. For Identifier it stores
12528           LocatedToken which is a pair of string name and location.
12529           Column numbers are adjusted only at getChar().
12530         * report.cs :
12531           Use Location.ToString() for reporting (it now contains column).
12532         * cs-parser.jay :
12533           Largely modified to use LocatedToken instead of
12534           string (IDENTIFIER), and to acquire Location from some tokens.
12535         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12536           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12537           codegen.cs :
12538           Now MemberName holds Location. DeclSpace.ctor() receives Location
12539           as a parameter. Removed extra parameters to all derived classes.
12540           Replaced Location.IsNull() with instance property.
12541         * assign.cs, expression.cs :
12542           Added .ctor() overload that omits Location.
12543         * attribute.cs :
12544           Added "nameEscaped" flag that indicates the identifier was escaped
12545           in the source file. This fixes bug #57047.
12546
12547 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12548
12549         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12550         New method, looking for lo-case imported cls type.
12551
12552         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12553         here.
12554
12555         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12556
12557         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12558
12559         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12560         all_imported_types.
12561         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12562
12563         Optimized to save 3.5 MB for SWF compilation.
12564
12565 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12566
12567         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12568         (PartialContainer.Create): Moved logic AddToContainer.
12569         (PartialContainer.MarkForDuplicationCheck): Shares name.
12570         
12571         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12572         place.
12573         
12574         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12575         initialization.
12576         (Namespace.GetSignatureForError): New method.
12577         
12578         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12579         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12580
12581 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12582
12583         Fix #75669.
12584         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12585         member lookup rather than qualifier_type, since qualifier_type can
12586         be null.
12587
12588 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12589
12590         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12591         enum member.
12592
12593 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12594
12595         * statement.cs: Copy the local exception into the exception
12596         captured local.  Fixes 75674
12597
12598 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12599
12600         Fix #75658.
12601         * expression.cs (Invocation.OverloadResolve): Don't report error
12602         CS1501 if error CS1502 has been reported.
12603         (New.DoResolve): Delegate CS1501 reporting to
12604         Invocation.OverloadResolve.
12605
12606         Fix #75656.
12607         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12608         invariant-meaning-in-block property in an enclosing block if
12609         necessary.
12610
12611 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12612
12613         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12614         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12615         (Switch.CheckSwitch): Just save 50kb for SWF.
12616
12617 2005-07-27  Martin Baulig  <martin@ximian.com>
12618
12619         * anonymous.cs (CaptureContext.AddField): Added
12620         `AnonymousContainer am' argument; compute its toplevel scope if
12621         it's not already computed.  Fixes #75649.
12622
12623 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12624
12625         Fix #75628.
12626         * class.cs (Constructor.Emit): Reset block to null if the block
12627         resolve fails.
12628
12629 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12630
12631         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12632
12633 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12634
12635         * class.cs (MethodData.Define): Check whether accessor implementing
12636         interface is public.
12637
12638         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12639
12640 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12641
12642         Fix #57245
12643         * namespace.cs (LookupType): Moved same type check to...
12644         
12645         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12646         with the same name.
12647
12648 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12649
12650         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12651         already found a typebuilder.
12652         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12653         MemberNames, not strings.
12654
12655         * const.cs (Error_ExpressionMustBeConst): 
12656         Rename from Error_EpressionMustBeConst.
12657         * const.cs, class.cs, statement.cd: Update.
12658
12659 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12660
12661         Fix #65573
12662
12663         * const.cs (Const.LookupConstantValue): Report missing contant expression
12664         everytime.
12665         (Error_EpressionMustBeConstant): Only one error method.
12666
12667         * class.cs, statement.c: Updated.
12668
12669 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12670
12671         * statement.cs (Block.Flags): Add back HasVarargs.
12672         (Block.flags): Make protected.
12673         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12674
12675         * typemanager.cs (types, typecontainers, user_types): Remove.
12676         (UserTypes, TypeContainers): Likewise.
12677         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12678         (CleanUp, Reset): Update.
12679         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12680         (GetNestedType): Use Type.GetNestedType.
12681         (CoreLookupType): Take two arguments, the namespace and the
12682         basename of the type.  Update to use the Namespace.Lookup
12683         mechanism.
12684         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12685         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12686         string concatenation and substring matches.
12687         * class.cs, enum.cs, delegate.cs: Update to changes.
12688
12689 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12690
12691         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12692         Expression and made virtual.
12693
12694         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12695         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12696
12697         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12698
12699         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12700         error message.
12701
12702         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12703         change.
12704
12705 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12706
12707         Fix #57707
12708         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12709         AssemblyCultureAttribute is not used on executable.
12710
12711         * rootcontext.cs,
12712         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12713
12714 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12715
12716         Fix #60638.
12717         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12718         New.  Reports CS0252/CS0253.
12719         Mostly taken from preliminary patch by Duncak Mak.
12720         (Binary.DoResolveOperator): Store results of operator lookup.
12721         Use them to detect if we need to warn about unintended reference
12722         comparisons.
12723
12724 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12725
12726         Fix #72969.
12727         * namespace.cs (Namespace.Lookup): Add back location parameter.
12728         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12729         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12730
12731         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12732         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12733         (Namespace.LookupType): ... this.
12734         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12735         of namespaces.
12736         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12737         purported to handle pointers.
12738         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12739         CoreLookupType.
12740
12741 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12742
12743         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12744         type as namespace.
12745
12746 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12747
12748         * namespace.cs (Namespace.Lookup): Drop location parameter.
12749         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12750         (NamespaceEntry.Lookup): ... this.
12751         (NamespaceEntry.Error_AmbiguousTypeReference):
12752         Move here from DeclSpace.
12753         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12754         names ...
12755         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12756         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12757         Move to NamespaceEntry.
12758         * delegate.cs, expression.cs: Update to changes.
12759
12760 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12761
12762         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12763         CheckAttributeType and refactored.
12764         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12765         ResolveAsTypeTerminal error handling.
12766         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12767         handling.
12768         (GetSignatureForError): Print errors in same way.
12769
12770         * class.cs,
12771         * codegen.cs: Reflect attribute GetSignatureForError change.
12772
12773         * ecore.cs,
12774         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12775
12776         * namespace.cs (UsingEntry): Refactored to make fields private.
12777
12778         * assign.cs,
12779         statement.cs: Error_UnexpectedKind has extra parameter.
12780
12781 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12782
12783         * ecore.cs (IAlias): Remove.
12784         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12785         that implement the interface.
12786         * namespace.cs (Namespace): Likewise.
12787         (Namespace.declspaces): Renamed from 'defined_names'.
12788         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12789         DeclSpace instead of an IAlias.
12790         * tree.cs (Tree.AddDecl): Update.
12791
12792 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12793
12794         * statement.cs (Block.Flags); Remove HasVarargs.
12795         (Block.HasVarargs): Move to ToplevelBlock.
12796         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12797         (Block.Variables): Make protected.  Initialize variable hashtable
12798         if necessary.
12799         (Block.AddVariable): Update.
12800         (Block.Resolve): Update to changes.
12801         (ToplevelBlock.HasVarargs): New boolean.
12802         (ToplevelBlock.ThisVariable): Move here from Block.
12803         (ToplevelBlock.AddThisVariable): Likewise.
12804         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12805         * expression.cs (This.ResolveBase): Update to changes.
12806         (ArglistAccess.DoResolve): Likewise.
12807
12808 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12809
12810         Fix #75321
12811         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12812
12813         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12814         not used and not used & assigned.
12815         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12816
12817 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12818
12819         Fix #75053
12820         * expression.cs (Is.DoResolve): null is never provided type.
12821
12822 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12823
12824         Fix #52496
12825         * cs-parser.jay: Less strict event error rule to catch more errors.
12826
12827 2005-07-08  Martin Baulig  <martin@ximian.com>
12828
12829         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12830         gettter (allowed) or setter (not allowed).
12831
12832         * class.cs (Accessor): Implement IIteratorContainer.
12833         (Accessor.Yields): New public field.
12834         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12835         per-accessor basis.
12836
12837         * cs-parser.jay
12838         (get_accessor_declaration, set_accessor_declaration): Set the
12839         `yields' flag on the accessor, not the property.
12840         (property_declaration): Do the iterators check on a per-accessor
12841         basis and not for the whole property.
12842
12843 2005-07-08  Martin Baulig  <martin@ximian.com>
12844
12845         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12846         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12847
12848 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12849
12850         Fix #74975
12851         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12852         (ExtractSecurityPermissionSet): Cope with self referencing security
12853         attributes properly.
12854
12855         * driver.cs (SetOutputFile): Made public property OutputFile.
12856
12857 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12858
12859         Fix #75486.
12860         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12861         has_nonstatic_fields.  Make into a FieldBase pointer.
12862         (TypeContainer.AddField): Add CS0282 check.
12863         (TypeContainer.EmitType): Update.
12864
12865 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12866
12867         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12868         compare if they start with __.
12869
12870 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12871
12872         * statement.cs (Switch.SwitchGoverningType): Only look at
12873         UserCasts that don't need implicit standard conversions to one of
12874         the allowed switch types (Fixes test-322.cs).
12875         (LocalInfo.Resolve): Re-enable sanity-test.
12876
12877 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12878
12879         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12880         
12881         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12882         
12883         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12884
12885 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12886
12887         Fix #75472.
12888         * ecore.cs (SimpleName.GetSignatureForError): Add.
12889         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12890         (MemberAccess.GetSignatureForError): Add.
12891
12892 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12893  
12894         The big error and warning messages review.
12895         
12896         * anonymous.cs,
12897         * assign.cs,
12898         * attribute.cs,
12899         * class.cs,
12900         * codegen.cs,
12901         * convert.cs,
12902         * cs-parser.jay,
12903         * cs-tokenizer.cs,
12904         * decl.cs,
12905         * delegate.cs,
12906         * doc.cs,
12907         * driver.cs,
12908         * ecore.cs,
12909         * enum.cs,
12910         * expression.cs,
12911         * flowanalysis.cs,
12912         * iterators.cs,
12913         * literal.cs,
12914         * location.cs,
12915         * modifiers.cs,
12916         * namespace.cs,
12917         * parameter.cs,
12918         * pending.cs,
12919         * report.cs,
12920         * rootcontext.cs,
12921         * statement.cs,
12922         * support.cs,
12923         * tree.cs,
12924         * typemanager.cs: Updated.
12925         
12926         * class.cs: (MethodCore.SetYields): Moved here to share.
12927         (PropertyMethod.Define): Moved iterator setup here.
12928         
12929         * iterators.cs: Add orig_method to have full access to parent
12930         container.
12931
12932 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12933
12934         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12935         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12936         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12937         variable of struct type.
12938         * expression.cs (Unary.ResolveOperator): Update to change.
12939         (Indirection.VerifyFixed): Likewise.
12940         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12941         (ParameterReference.VerifyFixed): Value parameters are fixed.
12942         (This.VerifyFixed): Treat 'this' as a value parameter.
12943         * statement.cs (LocalInfo.IsFixed): Remove.
12944
12945 2005-07-01  Martin Baulig  <martin@ximian.com>
12946
12947         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12948         `ec.EmitThis ()' to get the correct scope.
12949
12950 2005-07-01  Martin Baulig  <martin@ximian.com>
12951
12952         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12953         instance is a ParameterReference; fixes #75299.
12954
12955 2005-07-01  Martin Baulig  <martin@ximian.com>
12956
12957         Reverted Marek's latest patch (r46725):
12958         - it contains structural changes which are neither mentioned in
12959           the ChangeLog nor explained anywhere; for example the additional
12960           argument of EmitContext's and Iterator's .ctor's and the
12961           TypeContainer.DefineMembers() change.
12962         - structural changes like this should go in in seperate patches
12963           and not be hidden in a huge patch which just seems to affect
12964           warnings and errors.
12965           a big and hard to understand patch.
12966         - it breaks iterators and causes regressions, for instance in
12967           test-iter-03.cs.      
12968
12969 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12970
12971         Fix #75412.
12972         * expression.cs (Indexers.map): Remove.
12973         (Indexers.Append): Filter out inaccessible setters and getters.
12974         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12975
12976         Fix #75283.
12977         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12978         Refactored from ...
12979         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12980         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12981         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12982         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12983
12984 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12985
12986         Fix #75322
12987         * class.cs (FieldBase.GetInitializerExpression): One more field
12988         for backup.
12989
12990 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12991
12992         * pending.cs: Do not define a proxy if the base method is virtual,
12993         it will be picked up by the runtime (bug 75270).
12994
12995 2005-06-08  Martin Baulig  <martin@ximian.com>
12996
12997         The big Iterators rewrite :-)
12998
12999         * iterators.cs: Rewrite this to use the anonymous methods framework.
13000
13001         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13002         before the TypeContainers; see 2test-21.cs.
13003
13004         * class.cs
13005         (TypeContainer.DefineType): Don't create a new EmitContext if we
13006         already have one (this only happens if we're an Iterator).
13007         (TypeContainer.Define): Also call Define() on all our iterators.
13008         (Method.CreateEmitContext): Added support for iterators.
13009
13010         * anonymous.cs
13011         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13012         (AnonymousContainer.CreateMethodHost): Moved here from
13013         AnonymousMethod and made abstract.
13014         (AnonymousContainer.CreateScopeType): New abstract method.
13015         (AnonymousContainer.IsIterator): New public property.
13016         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13017         get the ScopeTypeBuilder rather than manually defining it here. 
13018         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13019         iterators here.
13020
13021         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13022         before RootContext.DefineTypes().
13023
13024         * codegen.cs (EmitContext.RemapToProxy): Removed.
13025         (EmitContext.CurrentAnonymousMethod): Changed type from
13026         AnonymousMethod -> AnonymousContainer.
13027         (EmitContext.ResolveTopBlock): Protect from being called twice.
13028         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13029         (EmitContext.EmitThis): Removed the iterators hacks; use the
13030         anonymous methods framework for that.
13031
13032         * statement.cs
13033         (ToplevelBlock.Container): Make this a property, not a field.
13034         (ToplevelBlock.ReParent): New public method; move the
13035         ToplevelBlock into a new container.
13036         (Foreach.TemporaryVariable): Simplify.
13037
13038 2005-06-05  Martin Baulig  <martin@ximian.com>
13039
13040         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13041         (Block.AddTemporaryVariable): New public method; creates a new
13042         `LocalInfo' for a temporary variable.
13043         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13044         variables here.
13045         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13046         non-iterator variables.
13047
13048 2005-06-05  Martin Baulig  <martin@ximian.com>
13049
13050         * statement.cs (Foreach.TemporaryVariable): Create the
13051         LocalBuilder in the Emit phase and not in Resolve since in some
13052         situations, we don't have an ILGenerator during Resolve; see
13053         2test-19.cs for an example.
13054
13055 2005-06-04  Martin Baulig  <martin@ximian.com>
13056
13057         **** Merged r45395 from GCS ****
13058
13059         The big Foreach rewrite - Part II.
13060
13061         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13062         with `PropertyInfo ienumerator_getcurrent'.
13063
13064         * codegen.cs (VariableStorage): Removed.
13065
13066         * statement.cs
13067         (Foreach): Derive from Statement, not ExceptionStatement.
13068         (Foreach.CollectionForeach): New nested class.  Moved all the code
13069         dealing with collection foreach here.
13070         (Foreach.ForeachHelperMethods): Removed.
13071         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13072
13073 2005-05-23  Martin Baulig  <martin@ximian.com>
13074
13075         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13076         don't need to.  Fix #75014.
13077
13078 2005-05-20  Martin Baulig  <martin@ximian.com>
13079
13080         Merged r44808 from GMCS.
13081
13082         * class.cs (TypeContainer.CircularDepException): Removed.
13083         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13084         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13085         (CS0146) and interface (CS0529) dependencies here.
13086
13087 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13088
13089         * expression.cs (Invocation.EmitCall): Fix initialization
13090         'this_call' to reflect current behaviour.  Fix indentation.
13091
13092         * convert.cs (FindMostEncompassedType): Add two trivial special
13093         cases (number_of_types == 0 || number_of_types == 1).
13094         (FindMostEncompasingType): Likewise.
13095
13096 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13097
13098         Some cleanups preparing for the fix of #75283.
13099         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13100         error testing.
13101         (EventExpr.InstanceResolve): Likewise.
13102         (EventExpr.DoResolve): Remove redundant checks.
13103
13104 2005-06-10  Duncan Mak  <duncan@novell.com>
13105
13106         * cs-tokenizer.cs (process_directives): New flag for controlling
13107         the processing of preprocessor directives.
13108         (x_token): After seeing a '#', return Token.NONE instead of going
13109         to handle_preprocessing_directive() when not processing
13110         directives. This avoids unnecessary processing during the token peek in
13111         is_punct().
13112
13113         This fixes #74939.
13114
13115         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13116         the existing error reporting methods instead of Report.Error.
13117
13118         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13119         after Raja's rewrite.
13120
13121 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13122
13123         * class.cs: Small fix.
13124
13125 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13126
13127         Fix #75160.
13128         * class.cs (GetPartialBases): Fix return value check of
13129         part.GetClassBases.
13130
13131 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13132
13133         Ensure that partial classes are registered in their enclosing
13134         namespace.  Initial part of fix of #75160.
13135         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13136         Register declspace with namespace here, not in
13137         DeclSpace.RecordDecl.
13138         * cs-parser.jay: Pass namespace to RecordDecl.
13139         * class.cs (PartialContainer.Create): Likewise.
13140         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13141         called.
13142         * decl.cs (Declspace.RecordDecl): Remove.
13143         * namespace.cs (NamespaceEntry.DefineName): Remove.
13144
13145 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13146
13147         * rootcontext.cs: Reset TargetExt as well.
13148
13149 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13150
13151         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13152         -langversion:ISO-1.
13153
13154 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13155
13156         Fix #75080, cs0119.cs.
13157         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13158         of ...
13159         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13160         allowing ExprClass.Type and ExprClass.Namespace for
13161         ResolveFlags.VariableOrValue.
13162         (Expression.Resolve) [1-argument variant]: Change default resolve
13163         flags based on language version.
13164         (Expression.Error_UnexpectedKind): Use a simple string array
13165         rather than an ArrayList.
13166         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13167         not ExprClass.Type.
13168         (TypeOfVoid.DoResolve): Likewise.
13169         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13170         flags argument -- it always has the same value.
13171
13172 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13173
13174         Fix #75081.
13175         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13176         Use it in the error message.
13177         * assign.cs, expression.cs, statement.cs: Update.
13178
13179 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13180
13181         Fix #75088.
13182         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13183         the "almostMatchedMember" case too.
13184         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13185         that failed the accessibility checks to 'almost_match'.
13186
13187 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13188
13189         * attribute.cs: Use internal MethodBuilder methods to set
13190         ExactSpelling and SetLastError on PInvoke methods, instead
13191         of passing them via charset.  Fixes #75060.
13192
13193 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13194
13195         * parameter.cs (Parameter): Remove TODO comment.
13196         (Parameter.DefineParameter): Remove Location parameter.
13197         (Parameters.LabelParameters): Likewise.
13198         * class.cs (Constructor.Emit): Update to change.
13199         (MethodData.Emit): Likewise.
13200         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13201         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13202
13203 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13204
13205         * parameter.cs,
13206           Removed Parameters.Location and added Parameter.Location instead.
13207           Removed Location parameter from Emit() and GetSignature().
13208         * anonymous.cs,
13209           class.cs,
13210           cs-parser.jay,
13211           delegate.cs,
13212           iterators.cs,
13213           statement.cs :
13214           Modified all related calls.
13215
13216 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13217
13218         Improve user-defined conversion handling.
13219         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13220         applicable operators.
13221         (AddConversionOperators): New.  Helper for GetConversionOperators.
13222         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13223         there is only one most encompassed/encompassing type.
13224         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13225         "applicable operator" handling.
13226         (UserConversion): Move cache here from GetConversionOperators.
13227         Directly cache the chosen operator, rather than the whole
13228         MethodGroup.
13229         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13230         case.  Allow conversion of decimal to sbyte and byte too.
13231         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13232         New static methods.  Used to avoid allocating EmptyExpressions in
13233         convert.cs.
13234
13235 2005-05-24  Duncan Mak  <duncan@novell.com>
13236
13237         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13238         another class, used in Convert.ExplicitNumericConversion.
13239         (CastToDecimal): New class, similar to above, but casts to
13240         System.Decimal, used in Convert.ImplicitNumericConversion and also
13241         in explicit convesion from double/float to decimal.
13242
13243         * convert.cs (ImplicitNumericConversion): Handle implicit
13244         conversions to System.Decimal.
13245         (ExplicitNumericConversion): handle explicit conversions to
13246         System.Decimal.
13247
13248         This fixes #68711.
13249         
13250 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13251
13252         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13253         know the type at this stage, just break through.   Fixes #75008 
13254
13255 2005-05-19  Martin Baulig  <martin@ximian.com>
13256
13257         * delegate.cs
13258         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13259         to disable error reporting.
13260
13261         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13262         here since we don't want to report an error; see the new test-336.cs.
13263
13264 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13265
13266         * statement.cs (ToplevelBlock.GetParameterReference)
13267         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13268         Move here from class Block.
13269         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13270         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13271
13272 2005-05-18  Martin Baulig  <martin@ximian.com>
13273
13274         Fix #74978.
13275
13276         * flowanalysis.cs
13277         (FlowBranching.Reachability): Add non-static public And() and Or()
13278         methods.
13279         (FlowBranchingSwitch): New class; do the `break_origins' thing
13280         like in FlowBranchingLoop.
13281         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13282         reachability, not just locals and parameters.
13283         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13284         switch; MergeBreakOrigins() now takes care of that.
13285
13286 2005-05-18  Martin Baulig  <martin@ximian.com>
13287
13288         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13289         a loop and may leave it, reset the barrier; fixes #74974.
13290
13291 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13292         
13293         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13294         is back.
13295         
13296         * cs-parser.jay: Catch more lexical errors.
13297         
13298         * report.cs: Add one more Error method.
13299         
13300         * rootcontext.cs,
13301         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13302
13303 2005-05-17  Martin Baulig  <martin@ximian.com>
13304
13305         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13306         #70970. 
13307
13308 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13309
13310         Fix test-382.cs.  Emit values of decimal constants.
13311         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13312         Carved out of ...
13313         (TypeContainer.AddField): ... this.
13314         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13315         with initializers to include 'Const's.
13316         (ClassPart.RegisterFieldForInitialization): Forward to
13317         PartialContainer.
13318         * const.cs (Const.Const): Pass initializer to base class.
13319         (Const.Define): In case of decimal constants, register them for
13320         initialization in a static constructor.
13321
13322 2005-05-14  Martin Baulig  <martin@ximian.com>
13323
13324         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13325         do not call ResolveUnreachable() on unreachable statements in
13326         here, see the comment in the source code.
13327
13328 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13329
13330         Fix #74934.
13331         * expression.cs (BinaryResolveOperator): If one of the operands of
13332         an equality comparison is 'null' and the other is a pointer type,
13333         convert the null to a NullPointer.
13334         * convert.cs (ImplicitReferenceConversion): If the expression is a
13335         NullLiteral and the target type is a pointer type, return a
13336         NullPointer instead.
13337         (ImplicitConversionStandard): Likewise.
13338
13339 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13340         
13341         * cs-parser.jay: Set readonly context based on special constructs.
13342         
13343         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13344         readonly variable error handling.
13345         
13346         * rootcontext.cs (EmitCode): Don't verify members when error
13347         occurred.
13348         
13349         * statement.cs (LocalInfo): Add reaodnly context information.
13350         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13351
13352 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13353
13354         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13355         for #74041 to initialize 'resolved' to false only for explicit
13356         blocks.  Fixes #74873.
13357
13358 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13359
13360         Fix #74920.
13361         * typemanager.cs (unmanaged_enclosing_types): New.
13362         (IsUnmanagedType): Avoid infloops by using
13363         'unmanaged_enclosing_types' to talk with recursive invocations.
13364
13365 2005-05-13  Martin Baulig  <martin@ximian.com>
13366
13367         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13368         instance variable, not a local.  Fix #74873.
13369         (Block.ResolveUnreachable): Set it to true here.
13370
13371 2005-05-11  Duncan Mak  <duncan@novell.com>
13372
13373         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13374         continuing to process for 'arg'.
13375         (handle_preprocessing_directive): Check the argument of the #endif
13376         directive and report error CS1025 if there are any trailing
13377         characters.
13378
13379         According to the C# spec, having even whitespace after the #endif
13380         directive is illegal; however, because we call arg.TrimEnd ()
13381         beforehand, we have the same behavior as csc, allowing whitespace
13382         after the directive.
13383
13384         Fixes #74892.
13385
13386 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13387
13388         Fix #74863.
13389         
13390         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13391         (Constructor.GetObsoleteAttribute): Implemented correctly.
13392
13393 2005-05-10  Martin Baulig  <martin@ximian.com>
13394
13395         * support.cs (ReflectionParameters.ParameterModifier): Use
13396         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13397         and `ParameterAttributes.In'.  Fixes #74884.
13398
13399 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13400
13401         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13402         
13403         * expression.cs (Argument.GetParameterModifier): Turned to property.
13404         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13405         
13406         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13407         its C# equivalent.
13408         
13409 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13410
13411         Fix #74852.
13412         * decl.cs (MemberCache.AddMethods): Register override methods,
13413         rather than non-override methods.
13414         * typemanager.cs (RegisterOverride): New.
13415         (IsOverride): Update.
13416
13417 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13418
13419         Fix #73105.
13420         
13421         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13422         recursive declaration.
13423         
13424         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13425         
13426 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13427
13428         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13429         
13430         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13431
13432 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13433
13434         Fix #74797.
13435         * decl.cs (DeclSpace.FamilyAccessible): 
13436         Use TypeManager.IsNestedFamilyAccessible.
13437
13438         Fix reopened #64812.
13439         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13440         internal'.
13441
13442 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13443             Abin Thomas  <projectmonokochi@rediffmail.com>
13444             Anoob V E  <projectmonokochi@rediffmail.com>
13445             Harilal P R  <projectmonokochi@rediffmail.com>
13446
13447         Fix #64812.
13448         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13449         allow access to all static members.
13450
13451 2005-05-04  Martin Baulig  <martin@ximian.com>
13452
13453         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13454
13455 2005-05-04  Martin Baulig  <martin@ximian.com>
13456
13457         Fix #74655.
13458
13459         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13460         section at the end; make things work if `default' is not the last
13461         section.        
13462
13463 2005-05-04  Martin Baulig  <martin@ximian.com>
13464
13465         Fix #70400.
13466
13467         * statement.cs (Switch): Replaced the `got_default' field with a
13468         `default_section' one.
13469         (Switch.CheckSwitch): Set `default_section' here.
13470         (Switch.Resolve): If we're a constant switch and the constant is
13471         not found, use the default section.
13472
13473 2005-05-03  Martin Baulig  <martin@ximian.com>
13474
13475         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13476
13477         * statement.cs (Foreach.ArrayForeach): New nested class.
13478         (Foreach.TemporaryVariable): New nested class.
13479         (Foreach.EmitArrayForeach): Removed; this is now in the new
13480         ArrayForeach class.
13481
13482 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13483
13484         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13485         more conservative.
13486         (VerifyPendingMethods): Revert change below.
13487
13488         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13489         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13490         that used to trigger warning -28.  Remove warning -28.
13491         * expression.cs (Invocation.OverloadResolve): Use
13492         TypeManager.IsOverride to distinguish override methods.
13493
13494         Fix #74773.
13495         * pending.cs (VerifyPendingMethods): If a base type implements the
13496         requested interface, don't bother checking individual methods of
13497         the base type.  As a side-effect, this prevents the creation of
13498         unnecessary proxies.
13499
13500 2005-05-02  Martin Baulig  <martin@ximian.com>
13501
13502         Fix #70182.
13503
13504         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13505         Also `And' the locals if the old vector is null.
13506         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13507         null; in this case we basically reset all the variables.        
13508
13509 2005-05-02  Martin Baulig  <martin@ximian.com>
13510
13511         Fix #74529.
13512
13513         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13514         Added `FlowBranching branching' argument; always `and' the
13515         variables instead of `or'ing them unless we're an infinite loop.
13516
13517         * statement.cs (While.Resolve): Create a new sibling unless we're
13518         infinite.       
13519
13520 2005-05-02  Martin Baulig  <martin@ximian.com>
13521
13522         Fix #70140.
13523
13524         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13525         arguments; use it instead of creating a new TopLevelBlock.
13526         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13527         our ConstructorInitializer.
13528
13529         * statement.cs
13530         (TopLevelBlock.TopLevelBranching): New public property.
13531         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13532         and create our `TopLevelBranching'.
13533
13534         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13535         anonymous method host, use `block.TopLevelBranching' rather than
13536         creating a new branching.
13537
13538 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13539
13540         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13541         a ScopeInfo, if any of the current children is a child of the new
13542         entry, move those children there.
13543
13544 2005-04-30  Martin Baulig  <martin@ximian.com>
13545
13546         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13547         at the beginning of a SwitchSection.  Fix #73335.
13548
13549 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13550
13551         Fix #74378
13552         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13553         
13554         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13555         (FieldExpr.DoResolve): Obsolete members are ignored for field
13556         initializers.
13557         
13558 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13559
13560         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13561         of arrays detection.
13562
13563         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13564         verification.
13565         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13566
13567         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13568         arrays report.
13569
13570 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13571
13572         * cs-parser.jay: Use the prefered version of -unsafe in error
13573         message.
13574
13575 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13576
13577         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13578         circumstances.
13579
13580 2005-04-20  John Luke  <john.luke@gmail.com>
13581
13582         * driver.cs: fix typo in error message, --outout to --output
13583
13584 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13585
13586         * codegen.cs (InRefOutArgumentResolving): New field.
13587         
13588         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13589         fields outside contructor.
13590         
13591         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13592         
13593 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13594
13595         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13596         parameter code was not completed ever, so it was not as up-to-date
13597         as local variables.  Must finish it.
13598
13599         The bug fix was to compare the Toplevel of the block, not the
13600         current block.  Thanks for Ben for pointing this out. 
13601
13602 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13603
13604         * decl.cs (AddMethods): Use the declaring type of the problem
13605         method to determine if we want to squash a warning.
13606
13607 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13608
13609         * attribute.cs: Removed debug output.
13610
13611         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13612         
13613         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13614         Report.Stderr.
13615         
13616 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13617
13618         Fix #74481.
13619         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13620         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13621         all null comparisons against reference types.
13622
13623 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13624
13625         Fix# 74565
13626         * class.cs (TypeContainer.CircularDepException) New nested
13627         exception class.
13628         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13629         (TypeContainer.DefineType): Removed error, reset InTransit before
13630         exit.
13631         (Class.DefineType): Throw exception when is in Transit.
13632         Catch exception and report error.
13633         (Struct.DefineType): Throw exception when is in Transit.
13634         Catch exception and report error.
13635         (Interface.DefineType): Throw exception when is in Transit.
13636         Catch exception and report error.
13637
13638         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13639         handle nested exception handlers.
13640
13641         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13642         a catch.
13643
13644         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13645         InFinally and InCatch storage.
13646
13647         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13648         (Catch.Resolve): Set and Restore ec.InCatch.
13649         (Try.Resolve): Set and Restore ec.InFinally.
13650         (Try.HasCatch): True when try has catch.
13651
13652 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13653
13654         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13655           for the same event member, so exclude such cases from warning 419.
13656           Fixed bug #74633.
13657
13658 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13659
13660         * expression.cs (Binary.ResolveOperator): Apply patch from John
13661         Luke to fix bug 59864: operators &, | and ^ on enumerations
13662         require that the same enum type on both sides.
13663
13664         * driver.cs: Add warnings to old flag usage, this is to assist
13665         people who produce Makefiles and hope that the Makefiles will be
13666         used on Windows.
13667
13668         * class.cs (TypeContainer.EmitType): Moved the definition of the
13669         special $PRIVATE$ field from the resolve phase to the Emit phase.
13670         During resolve we do not know if we are a struct with
13671         HasExplicitLayout, we know this only after the attributes for the
13672         type are emitted.
13673
13674         Set the FieldOffset to zero on the dummy field that we create for
13675         the class.   Fixes 74590.
13676
13677 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13678
13679         Fix #73834.
13680         * ecore.cs (PropertyExpr.resolved): New.
13681         (DoResolve): Use it to handle a case of double resolution here.
13682         Handle a case of identical-name-and-type-name.
13683         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13684         resolution by storing the results of expression resolution back
13685         into the "probes" array.
13686
13687 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13688
13689         Fix cs0208-7.cs and cs0208-8.cs.
13690         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13691         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13692         error reporting to point out the reason a struct is not unmanaged.
13693
13694 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13695
13696         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13697           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13698
13699 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13700
13701         Fix #74528.
13702         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13703         IdenticalNameAndTypeName here.
13704         (EventExpr.InstanceResolve): Likewise.
13705
13706 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13707
13708         C# 2.0 DefaultCharSetAttribute implementation
13709         
13710         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13711         which allows us to set GlobalNamespace for every resolve.
13712         (Attribute.ResolveArguments): Cut from Resolve.
13713         (Attribute.GetCharSetValue): Returns CharSet named argument.
13714         (Attribute.DefinePInvokeMethod): Gets default charset from
13715         module settings.
13716         (GlobalAttribute.ResolveAsTypeStep): Override.
13717         (GlobalAttribute.ResolveArguments): Override.
13718         
13719         * class.cs (TypeAttr): Is protected.
13720         
13721         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13722         (ModuleClass.DefaultCharSetType): New memeber.
13723         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13724         
13725         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13726         charset from module.
13727         
13728         * delegate.cs (TypeAttr): Override.
13729         (Delegate.DefineType): Use this TypeAttr.
13730         
13731         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13732         at very early stage (before types are defined) to resolve model
13733         module attributes. It will probably not work with corlib but it
13734         should be ok.
13735         
13736         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13737         charset from module.
13738         
13739         * typemanager.cs (default_charset_type): New type.
13740
13741 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13742
13743         * decl.cs (MemberCache.AddMethods): Don't warn if
13744         System.Object.Finalize has buggy MethodAttributes.
13745
13746         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13747         removed below.
13748
13749 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13750
13751         * doc.cs : detect ambiguous reference to overloaded members.
13752           Fixed bug #71603. MS 1.1 csc does not detect it.
13753
13754 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13755
13756         * doc.cs : delegates must not be referenced with parameters.
13757           Fixed bug #71605.
13758
13759 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13760
13761         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13762
13763 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13764
13765         * driver.cs (MainDriver): Stop processing if the CLS stage found
13766         errors. 
13767
13768         (CompilerCallableEntryPoint.InvokeCompiler): Always
13769         reset after execution;   Take a TextWriter argument for the
13770         output.
13771
13772         * report.cs: Use the error stream instead of hardcoding stderr. 
13773
13774 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13775
13776         * class.cs: Reduce code paths to test, too small of an
13777         optimization to make it worth the extra testing.  Always perform
13778         it. 
13779
13780 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13781
13782         Fix #74510.
13783         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13784         operators that had errors reported on them.
13785
13786 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13787
13788         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13789         argument types.
13790         (Attribute.Resolve): Add named argument type checking.
13791         
13792         * class.cs (FixedField.Define): Use IsPrimitiveType
13793         
13794         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13795         
13796         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13797         unsafe parameter types.
13798         
13799         * statement.cs (Using.ResolveExpression): Add better error description.
13800         
13801         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13802         
13803 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13804
13805         Fix #74484.
13806         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13807         AttributeUsageAttribute in the emitcontext of the attribute class,
13808         not in the emitcontext of the attributable entity it was attached to.
13809         * cs-parser.jay: Use 'current_class', not 'current_container',
13810         when creating a GlobalAttribute.
13811
13812 2005-04-08  Alp Toker  <alp@atoker.com>
13813
13814         * pending.cs: The fix to #58413 failed to compile methods implementing
13815         interfaces with/without params modifiers and vice versa, even though
13816         params modifiers aren't part of the signature. Make the modifier check
13817         less strict as in csc.
13818
13819 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13820             Anoob V E  <projectmonokochi@rediffmail.com>
13821             Harilal P R  <projectmonokochi@rediffmail.com>
13822
13823         Fix #58413.
13824         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13825         modifiers of pending methods.
13826         (PendingImplementation.PendingImplementation): Initialize it.
13827         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13828         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13829         with ParameterData.  Add check for modifiers.
13830         * class.cs (MethodData.Define): Update to changes.
13831
13832 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13833
13834         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13835
13836 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13837
13838         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13839         property.
13840         
13841         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13842         
13843         * rootcontext.cs,
13844         * typemanager.cs: Registered RequiredAttributeAttribute.
13845         
13846 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13847
13848         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13849         Warning CS0169 is back at level 3.
13850         (IMethodData.SetMemberIsUsed): New method.
13851         
13852         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13853         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13854         
13855         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13856
13857         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13858         contants.
13859         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13860         is used.
13861         
13862         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13863         is used.
13864         
13865         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13866         to avoid the problems with nested types.
13867
13868 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13869             Anoob V.E  <projectmonokochi@rediffmail.com>
13870             Harilal P.R  <projectmonokochi@rediffmail.com>
13871             Raja R Harinath  <rharinath@novell.com>
13872
13873         Fix #73820.
13874         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13875         attribute.
13876         * typemanager (GetConstructor): Make public.
13877
13878 2005-04-05  John Luke  <john.luke@gmail.com>
13879             Raja R Harinath  <rharinath@novell.com>
13880
13881         Fix #62232.
13882         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13883         struct too.  Return false quicker in a few cases.
13884         (VerifyUnManaged): Use it.
13885
13886 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13887
13888         Fix #74041.
13889         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13890         not 'unreachable_seen'.
13891
13892 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13893
13894         * attribute.cs (Attribute.GetValue): Removed unused.
13895         
13896         * codegen.cs (CodeGen.TrimExt): Removed unused.
13897         
13898         * cs-parser.jay (output): Removed unused.
13899         
13900         * cs-tokenizer.cs (hex_digits): Removed unused.
13901         
13902         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13903         
13904         * expression.cs (Indirection.LoadExprValue): Removed unused.
13905         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13906         
13907         * iterators.cs (Iterator.param_types): Removed unused.
13908         
13909         * statement.cs (Goto.block): Removed unused.
13910         (ToplevelBlock.did): Removed unused.
13911         (Switch.ResolveConstantSwitch): Removed unused.
13912
13913 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13914
13915         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13916         resetting thingy.
13917
13918 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13919
13920         Fix #74232 and cs0208-3.cs.
13921         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13922         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13923         unmanaged type.  Don't use FieldBuilders when 't' is a
13924         TypeBuilder.  Use ModFlags and MemberType fields.
13925         * class.cs (MemberBase.member_type): Rename from MemberType.
13926         (MemberBase.MemberType): New property.  Determines member_type on
13927         demand.
13928         (MemberBase.DoDefine): Don't initialize MemberType here.
13929         (FieldMember.Define): Likewise.
13930
13931 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13932
13933         Fix #74241
13934         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13935         Attributes are emitted there.
13936         
13937 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13938
13939         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13940         keyword in 'partial enum' too.
13941         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13942         is not allowed).
13943         Report from Kamil Skalski <nazgul@omega.pl>.
13944
13945         Fix #74309.
13946         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13947         have partial containers too.
13948
13949         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13950         in block' checks to Block.CheckInvariantMeaningInBlock.
13951         * statement.cs (Block.GetKnownVariableInfo): Make private.
13952         (Block.IsVariableUsedInChildBlock): Remove.
13953         (Block.IsVariableUsedInBlock): Likewise.
13954         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13955         conflicting declaration.
13956         (Block.AddVariable): Make error messages less long-winded and more
13957         specific.  Show location of conflicting declaration.
13958         * parameter.cs (Parameters.Location): New readonly property.
13959
13960 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13961
13962         Clean up semantics of invoking ResolveMemberAccess.
13963         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13964         can have an instance, ensure that we pass in a non-TypeExpression
13965         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13966         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13967         argument.  Update to changes and simplify.
13968         (FieldExpr.Emitinstance): Remove CS0120 check.
13969         (PropertyExpr.EmitInstance): Likewise.
13970         * expression.cs (Argument.Resolve): Likewise.
13971         (Invocation.DoResolve): Update to changes in semantics of
13972         InstanceExpression.
13973
13974 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13975
13976         Fix #74241
13977         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13978         customization.
13979         
13980         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13981
13982 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13983
13984         Fix difference in behaviour with commandline invocation.
13985         * driver.cs (Driver.Reset): New.
13986         (CompilerCallableEntryPoint): Call it.
13987
13988         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13989         variable" warnings if the boolean expression failed to resolve.
13990
13991 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13992
13993         * attribute.cs: Fix the union of several permissions when some of them
13994         are unrestricted (so the result isn't an unrestricted permission set).
13995         Fix #74036.
13996
13997 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13998
13999         * ecore.cs (MemberExpr): New class.  Convert from interface
14000         IMemberExpr.
14001         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14002         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14003         error checks.
14004         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14005         (MethodGroupExpr.IsExplicitImpl): Remove.
14006         (Expression.GetFieldFromEvent): Remove.
14007         (SimpleName.MemberStaticCheck): Remove.
14008         (SimpleName.DoSimpleNameResolve): Update to changes.
14009         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14010         (MemberAccess.IdenticalNameAndTypeName): Remove.
14011         (MemberAccess.error176): Move to MemberExpr.
14012         (MemberAccess.DoResolve): Update to changes.
14013         (BaseAccess.DoResolve): Likewise.
14014
14015 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14016
14017         C# 2.0 Conditional attribute class implementation
14018         
14019         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14020         Analyzes class whether it has attribute which has ConditionalAttribute
14021         and its condition is not defined.
14022         
14023         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14024         (Class.IsExcluded): New method. Search for at least one defined
14025         condition in ConditionalAttribute of attribute class.
14026
14027 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14028
14029         * ecore.cs (PropertyExpr): Derive from Expression, not
14030         ExpressionStatement.
14031         (PropertyExpr.EmitStatement): Remove.
14032
14033 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14034
14035         Fix #74060.
14036         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14037         internal field "value__" of an enum be private.  The examples for
14038         "value__" that I found on MSDN all used FieldAttributes.Private.
14039
14040         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14041         Don't mention IL method attribute names.
14042
14043         Fix #47991.  Remove a TODO.
14044         * statement.cs (Block.Toplevel): Make into a field.
14045         (Block.Parameters): Move into ToplevelBlock.
14046         (Block.known_variables): Rename from child_variable_names.
14047         (Block.Block): Remove variants that take Parameters.  Initialize
14048         'Toplevel' with the immediately surrounding toplevel block.
14049         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14050         LocalInfo parameter.
14051         (Block.GetKnownVariableInfo): New.
14052         (Block.IsVariableNameUsedInChildBlock): Update.
14053         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14054         the block, even though it may not be in scope.
14055         (Block.AddVariable): Remove Parameters parameter.  Use
14056         Toplevel.Parameters instead.
14057         (Block.AddConstant): Remove Parameters parameter.
14058         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14059         (Block.IsParamaterReference): Likewise.
14060         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14061         (ToplevelBlock.Parameters): New.  Moved from Block.
14062         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14063         initialize Parameters to a non-null value.
14064         * cs-parser.jay: Update to changes.
14065         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14066         simple names that mean different things in the same block.  Use
14067         Block.IsVariableNameUsedInBlock.
14068
14069 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14070
14071         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14072         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14073         GetTypeHandle.  It is possible for a reflected type to derive from
14074         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14075         System.Array during mscorlib compilation).
14076         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14077         contain a method_hash, don't create one either.  Don't create a
14078         deep copy of the base cache's method_hash.
14079         (MemberCache.SetupCache): Rename back from DeepCopy.
14080         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14081         already initialized.  If we see an override function, add its
14082         underlying base virtual function to the member_hash too.
14083
14084         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14085
14086 2005-03-26  Raja R Harinath  <harinath@acm.org>
14087
14088         Fix #73038.
14089         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14090         fails to resolve, ensure that the LHS is still resolved as an
14091         lvalue.
14092
14093 2005-03-25  Raja R Harinath  <harinath@acm.org>
14094
14095         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14096         ec.ContainerType.
14097         (Enum.current_ec): Remove.
14098         (Enum.LookupEnumValue): Remove EmitContext argument.
14099         Just uses the one created during DefineType.
14100         (Enum.FindMembers): Update.
14101         * expression.cs (MemberAccess.DoResolve): Update.
14102
14103 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14104
14105         * assign.cs (Assign.DoResolve): Check for CS1717 when
14106         source and target are same (uses Equals).
14107
14108         * expression.cs (LocalVariableReference, ParameterReference,
14109         This): Implemented Equals, GetHashCode.
14110
14111         * statement.cs (Block.GetParameterReference): Removed useless
14112         local variable.
14113
14114 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14115
14116         Fix cs0128.cs
14117         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14118         blocks before deciding whether the error is cs0136 or cs0128.
14119
14120         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14121         (using_alias_directive, using_namespace_directive): Pass
14122         MemberName, not an expression to Namespace.UsingAlias and
14123         Namespace.Using.
14124         (MakeName): Use the MemberName of the namespace.
14125         * namespace.cs (Namespace.MemberName): New.
14126         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14127         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14128         Likewise.
14129         * decl.cs (MemberName.Name): Make readonly.
14130         (MemberName.FromDotted): New "constructor".
14131         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14132         (MemberCore.Name): Compute from MemberName on demand.
14133         (MemberCore.SetMemberName): Provide a way to change the
14134         MemberName.
14135         (MemberCore.AddToContainer): Don't take a fullname parameter.
14136         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14137         fully qualified name of the container to the member name.
14138         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14139         only if the type is a member of the root container.
14140         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14141         MemberName.Left rather than searching for an embedded ".".
14142         (PartialContainer.CreatePart): Update to changes in RootContext.
14143         (MemberBase.ShortName): Turn into a property.  Use
14144         MemberCore.SetMemberName.
14145         (MemberBase.ExplicitInterfaceName): Remove.
14146         (MemberBase.UpdateMemberName): Remove.
14147         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14148         (PropertyBase.SetMemberName): New override.
14149         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14150         (Tree.GetDecl): New.
14151         (Tree.AllDecls): Rename from Decls.
14152         * attribute.cs, enum.cs, report.cs: Update to changes.
14153         * driver.cs (MainDriver): Use MemberName.FromDotted on
14154         RootContext.MainClass.
14155
14156 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14157
14158         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14159         checks.
14160
14161         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14162
14163 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14164
14165         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14166         property accessor modifiers.
14167
14168         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14169         fixed buffer attribute (CS1716).
14170         (PropertyMethod.HasCustomAccessModifier): When property accessor
14171         has custom modifier.
14172
14173         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14174         modifiers.
14175         (PropertyExpr.DoResolveLValue): Add CS0272.
14176
14177 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14178
14179         * convert.cs: When converting to a pointer, use the proper Conv.U
14180         or Conv.I depending on the source data type.
14181
14182         * cs-tokenizer.cs: Make the size for large decimal constants,
14183         fixes #72957.
14184
14185 2005-03-17  Martin Baulig  <martin@ximian.com>
14186
14187         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14188         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14189
14190 2005-03-17  Martin Baulig  <martin@ximian.com>
14191
14192         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14193         to bool so we can return an error condition.
14194         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14195         returned an error.
14196
14197 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14198
14199         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14200         attributes.
14201
14202 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14203
14204         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14205         Refactor to avoid traversing the list of assemblies, and to avoid
14206         string concatenation.
14207         * typemanager.cs (guid_attr_type): Remove.
14208         (negative_hits, pointers, references): Remove hashes.
14209         (type_hash): New.
14210         (GetConstructedType): New.  Uses type_hash to handle constructed
14211         types (arrays, references, pointers).
14212         (GetReferenceType, GetPointerType): Use it.
14213         (GetNestedType): New.  Uses type_hash to handle nested types of
14214         reflected types.
14215         (LookupType, LookupTypeDirect): Remove.
14216         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14217         'types' hash and LookupTypeReflection directly.
14218         (params_string, params_object): Use GetConstructedType.
14219         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14220         top-level types.
14221         (Namespace.Lookup): Use cached_types.
14222         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14223         provided by old TypeManager.LookupType.
14224         * rootcontext.cs (MakeFQN): Remove.
14225         * decl.cs (DeclSpace.MakeFQN): Likewise.
14226         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14227         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14228         TypeManager.GetConstructedType.
14229         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14230
14231 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14232
14233         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14234         indexers.
14235
14236         * cs-parser.jay: Reports CS1527 for any namespace element.
14237
14238         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14239         Added CS0407.
14240
14241         * expression.cs (ParameterReference.IsAssigned): Changed error to
14242         CS0269.
14243         (Error_WrongNumArguments): Moved CS0245 detection here.
14244
14245         * statement.cs (Return.Resolve): Add CS1622 report.
14246
14247 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14248
14249         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14250
14251 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14252
14253         * attribute.cs expression.cs: Get rid of some allocations.
14254
14255 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14256
14257         * doc.cs : just eliminate the latest change.
14258
14259 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14260
14261         * doc.cs : commented out the latest change. It breaks xml-030.cs
14262
14263 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14264
14265         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14266           fail. So invoke CreateType() in FindDocumentedType().
14267
14268 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14269
14270         * cs-tokenizer.cs : added IsKeyword().
14271         * doc.cs : Detect keyword incorrectly used as identifier.
14272           Allow identifiers prefixed by @.
14273
14274 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14275
14276         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14277         It caused exception in namespace resolving (again!).
14278         
14279         * class.cs (Class.ctor): Removed exit.
14280         (PropertyMethod.ctor): ditto.
14281         
14282         * codegen.cs (Codegen.Reset): Reset static data.
14283         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14284         
14285         * cs-tokenizer.cs (Cleanup): Removed.
14286         
14287         * driver.cs (GetSystemDir): Rewrote to one line command.
14288         It caused problem with unloaded dynamic modules.
14289         (UnixParseOption): Removed Exit.
14290         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14291         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14292         Now can be mcs used as library.
14293         
14294         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14295         empty location.
14296         
14297         * location.cs (Reset): Reset static data.
14298         
14299         * namespace.cs (Reset): Reset static data.
14300         
14301         * report.cs (Report.Reset): Reset static data.
14302         
14303         * rootcontext.cs (RootContext.Reset): Reset static data.
14304         
14305         * tree.cs (RootTypes.ctor): Use Location.Null
14306         
14307         * typemanager.cs (TypeManager.Reset): Reset static data.
14308         (CoreLookupType): Removed Exit.
14309         (TypeHandle.Reset): Reset static data.
14310         
14311 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14312
14313         Fix #73516.
14314         * typemanager.cs (ComputeNamespaces): Import namespaces from
14315         referenced modules too.
14316
14317 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14318
14319         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14320         than '.'.
14321
14322 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14323
14324         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14325         enclosing DeclSpace.  This ensures that a name-lookup populates
14326         more caches and there are fewer 'TypeExpression's.  Carve out
14327         nested type lookup into ...
14328         (LookupNestedTypeInHierarchy): ... this.
14329
14330 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14331
14332         Clean up a few partial-class semantics.  
14333         Fixes test-357.cs and cs1618-2.cs.
14334         * cs-parser.jay (struct_declaration): Use 'current_class' as
14335         parent of newly-created struct.  Remove call to Register ().
14336         Use 'pop_current_class' to complete handing the current struct.
14337         (interface_declaration): Likewise.
14338         (class_declaration): Likewise.
14339         (enum_declaration): Use 'current_class' as parent of newly created
14340         enum.
14341         (delegate_declaration): Likewise.
14342         (pop_current_class): New function.  This is used to handle closing
14343         up the 'current_class' and 'current_container', and pointing them
14344         to the enclosing class/container.
14345         (CSharpParser): Initialize 'current_class' too.
14346         * decl.cs (MemberCore): Add check for invariant: a partial
14347         container is not a parsed entity, and thus does not enclose any
14348         parsed members.
14349         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14350         (DeclSpace.BaseTypeExpr): Use it.
14351         (DeclSpace.LookupType): Add check for invariant.
14352         * class.cs (TypeContainer): Add check for invariant: a nested
14353         class should have the same NamespaceEntry as its enclosing class.
14354         (TypeContainer.EmitFieldInitializers): Make virtual.
14355         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14356         MemberCore.
14357         (TypeContainer.Register): Remove.
14358         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14359         null.  Use TypeResolveEmitContext for resolving base types and
14360         interfaces.  Move initialization of Parts.TypeBuilder here from
14361         ...
14362         (TypeContainer.DefineNestedTypes): ... here.
14363         (PartialContainer): Take a Namespace not a NamespaceEntry.
14364         (PartialContainer.Create): Don't use Register.  Call the
14365         appropriate Add... function directly.
14366         (ClassPart): Take both the PartialContainer and the enclosing
14367         class as constructor arguments.
14368         (ClassPart.EmitFieldInitializers): Override.
14369         (ClassPart.PartFindNestedTypes): Remove.
14370         (FieldBase.GetInitializerExpression): Resolve the initializer
14371         expression in the emit context of the enclosing class.
14372         * tree.cs (RootTypes): Remove Register ().
14373         
14374 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14375
14376         * cs-parser.jay: Removed CS0134.
14377         
14378         * driver.cs: Removed CS1901.
14379         
14380         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14381         for predefined types.
14382
14383 2005-03-07  Duncan Mak  <duncan@novell.com>
14384
14385         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14386         well. Fixes bug #73454.
14387
14388 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14389
14390         * cs-tokenizer.cs (xtoken): Add CS1035.
14391         
14392         * class.cs (MethodData.Define): Add CS0683.
14393         (FieldMember.ctor): Add CS0681.
14394
14395 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14396
14397         * ecore.cs (SimpleName.DoResolve): Rename from
14398         SimpleName.DoResolveAllowStatic.
14399         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14400         Pass 'intermediate' flag to MemberStaticCheck.
14401         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14402         of "intermediate" lookups via MemberAccess.
14403         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14404         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14405
14406 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14407
14408         Fix #73394.
14409         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14410         slipped in because of variable names that are identical to a
14411         builtin type's BCL equivalent ('string String;', 'int Int32;').
14412         (PropertyExpr.EmitInstance): Likewise.
14413
14414 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14415
14416         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14417         
14418         * report.cs (warning_ignore_table): Made public.
14419
14420 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14421
14422         Fix #73282.
14423         * class.cs (MethodData.Emit): Pass 'container' to
14424         container.GetObsoleteAttribute instead of 'container.Parent'.
14425
14426 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14427
14428         * cs-parser.jay: Add 1534 error test.
14429
14430         * iterators.cs (Yield.CheckContext): Add error 1629.
14431         (Iterator.ctor): Save unsafe modifier.
14432         (MoveNextMethod.DoEmit): Restore unsafe context.
14433
14434         * namespace.cs (UsingAlias): Better error message.
14435
14436 2005-03-03  Dan Winship  <danw@novell.com>
14437
14438         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14439         the warning message [#73219]
14440
14441 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14442
14443         Fix compile with MCS 1.0.0.0.
14444         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14445         w_restore to not depend on string constant folding.
14446
14447 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14448
14449         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14450         CS0246 check to users who passed 'silent = false'.
14451         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14452         check.
14453         (SimpleName.SimpleNameResolve): Update.
14454         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14455         (MemberAccess.IdenticalNameAndTypeName): Update.
14456         * doc.cs (FindDocumentedTypeNonArray): Update.
14457
14458 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14459
14460         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14461         * parameters.cs (ComputeAndDefineParameters): Remove.
14462         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14463         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14464         Use GetParameterInfo.
14465
14466 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14467
14468         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14469
14470 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14471
14472         Unify DeclSpace.LookupType and DeclSpace.FindType.
14473         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14474         is in charge of defining nested types on demand.
14475         (DeclSpace.LookupType): Use it when the current_type is a
14476         TypeBuilder.  Use LookupTypeDirect for reflected types.
14477         (DeclSpace.FindType): Remove.
14478         (DeclSpace.LookupInterfaceOrClass): Likewise.
14479         (DeclSpace.DefineTypeAndParents): Likewise.
14480         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14481         DeclSpace.LookupType.
14482         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14483         * typemanager.cs (LookupType): Simplify.
14484         (AddUserType): Remove type from negative_hits.
14485         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14486         * class.cs (TypeContainer.FindMembers): Move handling of nested
14487         types ...
14488         (TypeContainer.FindMembers_NestedTypes): ... here.
14489         (TypeContainer.FindNestedType): Implement override.
14490         (ClassPart.FindNestedType): Delegate to PartialContainer.
14491         (ClassPart.PartFindNestedType): Looks up the nested types of the
14492         part alone.
14493
14494 2005-03-02  Martin Baulig  <martin@ximian.com>
14495
14496         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14497         static constructor in static classes.
14498
14499 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14500
14501         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14502         sizeParamIndex is not specified.
14503
14504 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14505
14506         Fix #73117
14507         * report.cs (WarningMessage.IsEnabled): Missing null check.
14508
14509 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14510
14511         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14512         in the fields and not in the properties.
14513
14514 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14515
14516         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14517         fields as well.
14518
14519 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14520
14521         * attribute.cs: Small refactoring (improved robustness).
14522         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14523         (ValidateGuid): Removed.
14524         (Resolve): Removed referenced to above mentioned.
14525         (GetAttributeUsage): Made private and changed to work without
14526         class assistance.
14527         (GetIndexerAttributeValue): Don't crash.
14528         (GetConditionalAttributeValue): Ditto.
14529         (GetClsCompliantAttributeValue): Ditto.
14530         (ExtractSecurityPermissionSet): All attributes exceptions are
14531         error 648.
14532         (GetPropertyValue): New helper.
14533         (GetMethodImplOptions): New method.
14534         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14535         some missing properties.
14536         
14537         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14538         (Method.ApplyAttributeBuilder): Updated.
14539         
14540         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14541         exception.
14542
14543 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14544
14545         Fix #73052.
14546         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14547         non-simple types (array, pointer, reference).
14548
14549 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14550
14551         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14552
14553         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14554         for operators.
14555         (Method.CheckBase): Catch wrong destructor here.
14556         (MethodData.Define): Add errors 550, 668.
14557
14558         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14559
14560         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14561
14562         * pending.cs (VerifyPendingMethods): Add error 551.
14563
14564         * typemanager.cs (CSharpName): Next error report helper.
14565
14566 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14567
14568         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14569         attributes. Removed useless attribute double check.
14570         It saves almost 2MBs for corlib.
14571
14572 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14573
14574         Fix #72924.
14575         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14576         called twice in case of error.
14577
14578 2005-02-23  Chris Toshok  <toshok@ximian.com>
14579
14580         Fix compiler portions of #72827.
14581         * statement.cs (Block.Emit): call Begin/EndScope on the
14582         EmitContext instead of the ILGenerator.
14583
14584         * codegen.cs (EmitContext.BeginScope): new method, call
14585         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14586         we have one.)
14587         (EmitContext.BeginScope): same, but EndScope and CloseScope
14588
14589         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14590         offset and call the superclass's OpenScope(int) with it.
14591         (SymbolWriter.CloseScope): get the current il
14592         offset and call superclass's CloseScope(int) with it.
14593
14594 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14595
14596         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14597         CS1677 for out and ref as well.
14598
14599         * class.cs (Method.Define): Add error CS1599 detection.
14600         
14601         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14602         
14603         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14604         
14605         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14606         
14607         * support.cs.cs (ModifierDesc): New helper method.
14608
14609 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14610             Abin Thomas  <projectmonokochi@rediffmail.com>
14611             Anoob V E  <projectmonokochi@rediffmail.com>
14612             Harilal P R  <projectmonokochi@rediffmail.com>
14613
14614         Fix #57851, #72718.
14615         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14616         MemberLookup (used for error reporting) actually returns a result.
14617         Fix error report number (122, not 112).
14618
14619 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14620             Anoob V E  <projectmonokochi@rediffmail.com>
14621             Harilal P R  <projectmonokochi@rediffmail.com>
14622
14623         Fix #71134.
14624         * pending.cs (PendingImplementation.GetAbstractMethods):
14625         Find NonPublic members too.
14626
14627 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14628
14629         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14630         Fixed error 217.
14631         
14632         * class.cs (MethodCore.CheckMethodAgainstBase):
14633         Add error 239 report.
14634
14635 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14636
14637         Fix #68955.
14638         * expression.cs (Invocation.IsApplicable): Make public.
14639         (Invocation.IsParamsMethodApplicable): Likewise.
14640         * delegate.cs (Delegate.VerifyApplicability): Don't use
14641         Invocation.VerifyArgumentCompat for parameter applicability
14642         testing.  Use Invocation.IsApplicable and
14643         Invocation.IsParamsMethodApplicable.
14644
14645 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14646
14647         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14648         
14649         * class.cs (Operator.Define): Add error 217 report.
14650         
14651 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14652
14653         * namespace.cs (UsingEntry.Resolve): Undo change below.
14654
14655 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14656
14657         Fix #72756.
14658         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14659         disable the error message when the extended MemberLookup also
14660         fails.
14661         (Expression.MemberLookupFinal): Update.
14662         (SimpleName.DoSimpleNameResolve): Update.
14663         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14664         Don't use MemberLookupFinal.
14665         (New.DoResolve): Update.
14666         (BaseAccess.CommonResolve): Update.
14667
14668 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14669
14670         Fix #72732.
14671         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14672         occured previously, don't resolve again.
14673
14674 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14675
14676         Fix #69949
14677         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14678         argument. Call ResolveAttributeUsage for unresolved.
14679         when types doesn't match ctor arguments.
14680         
14681         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14682         for nested attribute classes.
14683         (Class.attribute_usage): Removed.
14684         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14685         for attribute class.
14686         
14687         * ecore.cs (IsAttribute): Removed.
14688         
14689         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14690         
14691         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14692         now normal types.
14693         (attribute_types): Removed.
14694         (EmitCode): Global attributes are emited as the latest.
14695
14696 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14697
14698         * class.cs (EmitFieldInitializers): Don't emit field initializer
14699         for default values when optimilization is on.
14700         
14701         * constant.cs (Constant.IsDefaultValue): New property.
14702         
14703         * driver.cs: Add /optimize handling.
14704         
14705         * constant.cs,
14706         * ecore.cs,
14707         * literal.cs: Implement new IsDefaultValue property.
14708         
14709         * rootcontext.cs (Optimize): New field, holds /optimize option.
14710
14711 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14712
14713         Fix crasher in re-opened #72347.
14714         * namespace.cs (Namespace.Lookup): Return null if
14715         DeclSpace.DefineType returns null.
14716
14717         Fix #72678.
14718         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14719
14720 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14721
14722         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14723         now returns null if it cannot resolve to an lvalue.
14724         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14725         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14726         returned null.  Remove check for SimpleName.
14727         (EventExpr.DoResolveLValue): New.
14728         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14729         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14730         error from ...
14731         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14732         avoid CS0131 error.
14733         (Unary.ResolveOperator): Move CS0211 check ...
14734         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14735         CS0131 error.
14736         (Unary.DoResolveLValue): Simplify.
14737         (AddressOf.DoResolveLValue): New.
14738         (ArrayAccess.DoResolveLValue): New.
14739
14740 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14741
14742         * attribute.cs (Attribute.Resolve): Add arguments casting for
14743         when types doesn't match ctor arguments.
14744
14745 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14746
14747         Fix parts of #63202.
14748         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14749         lookup of operator in base type.  Ensure that all checks happen
14750         when the operator resolves to an "op_..." method.
14751
14752 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14753
14754         Fix #71992.
14755         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14756         'ignore_cs0104' parameter.  Pass it to ...
14757         (NamespaceEntry.Lookup): ... this.
14758         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14759         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14760         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14761         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14762         Update.  Request that cs0104 errors be ignored.
14763         (ComposedCast.ResolveAsTypeStep): Update.
14764
14765 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14766
14767         Fix #59209.
14768         * expression.cs (Invocation.BetterFunction): Remove support for
14769         comparing virtual functions and their overrides.
14770         (Invocation.IsOverride): New.
14771         (Invocation.OverloadResolve): Don't consider 'override' functions
14772         during candidate selection.  Store them in a lookaside list.
14773         If the selected method is a 'virtual' function, use the list to
14774         find any overrides that are closer to the LHS type.
14775
14776 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14777
14778         * expression.cs (New.DoResolve): Add complex core type reduction.
14779         (New.Constantify): Converts complex core type syntax like 'new int ()'
14780         to simple constant.
14781         
14782 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14783
14784         * decl.cs (EntryType.EntryType): New constructor to create an
14785         updated copy of a cache entry.
14786         (MemberCache.AddMethods): Use it.
14787         (MemberCache.ClearDeclaredOnly): Remove.
14788         (MemberCache.MemberCache): Update.
14789
14790 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14791
14792         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14793         variable.  This one is represents the actual low-level declaration
14794         of the method, as opposed to the semantic level `IsStatic'.   
14795
14796         An anonymous method which is hosted into a static method might be
14797         actually an instance method.  IsStatic would reflect the
14798         container, while MethodIsStatic represents the actual code
14799         generated.
14800
14801         * expression.cs (ParameterReference): Use the new MethodIsStatic
14802         instead of IsStatic.
14803
14804         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14805         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14806         set on the current EmitContext. 
14807
14808         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14809         resolve our casted expression as an LValue.  This triggers the
14810         proper LValue processing that is later required by Assign.
14811
14812         This fixes 72347.
14813
14814         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14815
14816 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14817
14818         C# 2.0 Fixed buffer implementation
14819
14820         * anonymous.cs: Update after RegisterHelperClass renaming.
14821
14822         * attribute.cs (AttributeTester.fixed_buffer_cache):
14823         Cache of external fixed buffers.
14824         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14825         implementation if field is fixed buffer else null.
14826
14827         * class.cs
14828         (TypeContainer.AddField): Accept FieldMember instead of Field.
14829         (FieldBase.IsFieldClsCompliant): Extracted code from
14830         VerifyClsCompliance descendant customization.
14831         (FixedField): New class handles fixed buffer fields.
14832         (FixedFieldExternal): Keeps information about imported fixed
14833         buffer.
14834         (IFixedField): Make access to internal or external fixed buffer
14835         same.
14836
14837         * cs-parser.jay: Add fixed buffer parsing.
14838
14839         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14840         buffer.
14841
14842         * expression.cs (Indirection): Extended implementation to accept
14843         fixed buffer field.
14844         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14845         (ElementAccess.MakePointerAccess): Get type as parameter.
14846         (DoResolve): Add fixed buffer field expression conversion.
14847         (DoResolveLValue): Ditto.
14848         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14849         (ArrayPtr): Derives from FixedBufferPtr.
14850         (ArrayPtr.Emit): Add extra emit for array elements.
14851
14852         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14853
14854         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14855         for compiler generated types.
14856         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14857
14858         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14859         and consume less memory.
14860         (Fixed.Resolve): Add fixed buffer case.
14861
14862         * typemanager.cs (compiler_generated_attr_ctor,
14863         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14864         (HasElementType): Add our own implementation to work on every
14865         runtime.
14866
14867 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14868
14869         * anonymous.cs (CaptureContext): Track whether `this' has been
14870         referenced.   
14871
14872         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14873         only captured `this' if it was implicitly done (instance
14874         methods/variables were used). 
14875
14876         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14877         `this' must be captured.
14878
14879 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14880  
14881         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14882         is null it means that there has been no need to capture anything,
14883         so we just create a sibling.
14884
14885         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14886
14887         Just a partial fix.  The other half is fairly elusive.
14888         
14889 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14890
14891         Fix #52586, cs0121-4.cs.
14892         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14893         and return a hashtable.
14894         (MemberCache.ClearDeclaredOnly): New.
14895         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14896         the method_hash of a base type too.
14897         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14898         type methods.  Overwrite entries with the same MethodHandle so
14899         that the ReflectedType is correct.  The process leaves in base
14900         virtual functions and their overrides as distinct entries.
14901         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14902         matters since it was boxed in a ArrayList before.
14903         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14904         modifier.
14905         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14906         case of a virtual function and its override (choose the overload
14907         as better).
14908         (Invocation.OverloadResolve): Avoid 'override' members during
14909         'applicable_type' calculation.
14910
14911 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14912
14913         Combine two near-redundant caches.
14914         * typemanager.cs (method_params): Rename from method_internal_params.
14915         (TypeManager.GetParameterData): New.  Replace
14916         Invocation.GetParameterData.
14917         (TypeManager.LookupParametersByBuilder): Remove.
14918         * expression.cs (Invocation.method_parameter_cache): Remove.
14919         (Invocation.GetParameterData): Remove.
14920         Update to changes.
14921         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14922         Update to changes.
14923
14924 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14925
14926         Fix #72015.
14927         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14928         TypeManager.multicast_delegate_type is null, resolve it by looking
14929         up "System.MulticastDelegate".
14930         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14931
14932 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14933             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14934             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14935
14936         Fix cs0164.cs.
14937         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14938         (LabeledStatement.AddReference): New.  Set 'referenced'.
14939         (Goto.Resolve): Use it.
14940
14941 2005-02-05  John Luke  <john.luke@gmail.com>
14942
14943         * driver.cs: remove duplicate -doc line in Usage ()
14944
14945 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14946
14947         * location.cs (Location.AddFile): Fix CS2002 error report.
14948
14949 2005-02-02  Martin Baulig  <martin@ximian.com>
14950
14951         * delegate.cs (Delegate.DefineType): Report an internal error if
14952         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14953         details.        
14954
14955 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14956
14957         Fix a crasher in a variant of #31984.
14958         * const.cs (Constant.CheckBase): New override that defers the
14959         new-or-override check in case the base type hasn't been populated
14960         yet.
14961         (Constant.Define): Ensure the new-or-override check is performed.
14962
14963 2005-02-01  Duncan Mak  <duncan@ximian.com>
14964
14965         * const.cs (LookupConstantValue): Check that `ce' is not null
14966         before calling GetValue ().
14967
14968 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14969
14970         Fix test-334.cs (#69519).
14971         * cs-parser.jay (using_alias_directive): Pass in an expression to
14972         NamespaceEntry.UsingAlias.
14973         (using_namespace_directive): Pass in an expression to
14974         NamespaceEntry.Using.
14975         (namespace_name): Don't flatten to a string.
14976         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14977         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14978         ResolveAsTypeStep.
14979         (NamespaceEntry.UsingEntry): Likewise.
14980         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14981         changes.
14982         (NamespaceEntry.LookupForUsing): Remove.
14983         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14984         names.
14985         (NamespaceEntry.Lookup): Remove support for dotted names.
14986
14987 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14988
14989         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14990         split into two.
14991         (NamespaceEntry.ImplicitParent): Compute on demand.
14992         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14993         parallels the current.
14994         (NamespaceEntry.LookupForUsing): Use it.
14995         (NamespaceEntry.Lookup): If the current namespace-entry is
14996         implicit, don't search aliases and using tables.
14997
14998 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14999
15000         Fix #31984.
15001         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15002         BaseCache here.
15003         (TypeContainer.BaseCache): Compute on demand.
15004         (TypeContainer.FindMembers): Define constants and types if they're
15005         not already created.
15006         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15007         check.
15008         * const.cs (Constant.Define): Make idempotent.
15009
15010 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15011
15012         * pending.cs: Produce better code (no nops produced by using Ldarg
15013         + value).
15014         
15015         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15016         i - 1' it should be arg + 1.
15017
15018         Fixes bug #71819.
15019
15020 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15021
15022         * attribute.cs (Attribute.CheckAttributeType): Make private
15023         non-virtual.
15024         (Attribute.ResolveType): Make virtual.
15025         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15026         handling of RootContext.Tree.Types.
15027
15028 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15029
15030         Update attribute-handling to use the SimpleName/MemberAccess
15031         mechanisms.
15032         * cs-parser.jay (attribute): Pass in an expression to the
15033         constructors of Attribute and GlobalAttribute.
15034         * attribute.cs (Attribute): Take an expression for the name.
15035         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15036         passed in attribute name expression.
15037         (Attribute.CheckAttributeType): Use it.
15038         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15039         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15040         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15041         argument to prevent error messages if the lookup fails.
15042
15043 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15044
15045         * expression.cs (Indirection): Implemented IVariable interface
15046         to support indirection in AddressOf operator.
15047         (PointerArithmetic.Emit): Add optimalization for case where
15048         result can be precomputed.
15049
15050 2005-01-26  Martin Baulig  <martin@ximian.com>
15051
15052         * class.cs (TypeContainer.AttributeTargets): Return the correct
15053         AttributeTargets depending on our `Kind' instead of throwing an
15054         exception; fixes #71632.
15055
15056 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15057
15058         Fix #71257
15059         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15060         constant members.
15061
15062 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15063
15064         Fix #71602.
15065         * expression.cs (MemberAccess.DoResolve): Don't complain with
15066         cs0572 when the LHS of a member access has identical name and type
15067         name.
15068
15069 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15070
15071         Fix #71651, #71675
15072         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15073         CreatePermission.
15074         Create custom PermissionSet only for PermissionSetAttribute.
15075
15076 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15077
15078         Fix #71649
15079         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15080         delegates in static class.
15081
15082 2005-01-24  Martin Baulig  <martin@ximian.com>
15083
15084         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15085         merging an implicit block, just use its reachability.
15086
15087         * statement.cs (Block.Resolve): Make the unreachable code check
15088         work wrt. implicit blocks; see test-337 from #63842.
15089
15090 2005-01-21  Alp Toker  <alp@atoker.com>
15091  
15092         * cs-parser.jay: destructor_declaration's container is PartialContainer
15093         not Class when partial types are used, so use Kind prop instead of
15094         'is'.
15095         
15096 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15097
15098         * cs-parser.jay: Improve error reporting when an interface
15099         declares new types.
15100
15101 2005-01-20  Dick Porter  <dick@ximian.com>
15102
15103         * support.cs: SeekableStreamReader fix from Sandor Dobos
15104         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15105         chars are read.  Fixes bug 70369.
15106
15107 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15108
15109         * cs-parser.jay (catch_clause): Simplify current_block handling
15110         somewhat.
15111
15112 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15113
15114         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15115         code with ImplicitStandardConversion to handle the implicit
15116         conversion of method groups into valid delegate invocations. 
15117
15118         The problem is that in parameter handling we were using this code
15119         path.  Fixes bug #64698
15120
15121 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15122
15123         * cs-parser.jay: Fix several infelicities.
15124         - Avoid assigning to the parser value stack.  Code like 
15125           '$3 = null' is unclean.  Synthesize a value for the code block
15126           instead. 
15127         - Avoid using oob_stack for storing location information.  Use ...
15128         (_mark_): ... this.  New (empty) rule.  Saves the current location
15129         in $$.
15130         (foreach_statement): Avoid using oob_stack for current_block
15131         handling.  Use technique used in for_statement and
15132         using_statement.  Synthesize a value for the code block to store
15133         additional intermediate information.
15134
15135 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15136
15137         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15138         of a different type is only allowed to private fields of a
15139         containing type, not on fields of a base class.
15140
15141         See test-174.cs and error cs0122-9.cs
15142
15143 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15144
15145         Fix test-335.cs (bug #58126).
15146         * cs-parser.jay (argument): Split out non-expression parts of the
15147         rule into 'non_simple_argument'.
15148         (invocation_expression): Support parenthesized invocations with
15149         multiple arguments, and with single non-simple arguments.
15150
15151 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15152
15153         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15154         places.
15155
15156 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15157
15158         Fix cs0038-1.cs, cs1640-6.cs.
15159         * ecore.cs (Expression.Resolve): Remove special-case for
15160         SimpleName in error-handling.
15161         (Expression.almostMatchedMembers): Relax access permission to
15162         protected.
15163         (Expression.MemberLookupFailed): Handle duplicates in
15164         almostMatchedMembers list.
15165         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15166         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15167         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15168         overload if the passed in MemberInfo is a MethodBase.
15169
15170 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15171
15172         Fix #70749
15173         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15174         for non-CAS & merge permission sets properly.
15175
15176 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15177
15178         Improve standard-compliance of simple name and member access 
15179         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15180         * ecore.cs (FullNamedExpression): New abstract base class 
15181         for Namespaces and TypeExpressions.
15182         (ResolveFlags.SimpleName): Remove.
15183         (SimpleName): Remove support for dotted names.
15184         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15185         DeclSpace.FindType and DeclSpace.LookupType.
15186         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15187         (Expression.ExprClassName): Make member function.
15188         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15189         a namespace.  Remove creation of dotted "SimpleName"s.
15190         (MemberAccess.DoResolve): Likewise.
15191         * decl.cs (DeclSpace.Cache): Make private.
15192         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15193         (DeclSpace.FindType): Update.
15194         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15195         FullNamedExpression.
15196         * namespace.cs (Namespace): Derive from FullNamedExpression
15197         so that it can be part of expression resolution.
15198         (Namespace.Lookup): Return an FullNamedExpression.
15199         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15200         namespace.
15201         * rootcontext.cs (NamespaceLookup): Remove.
15202         (LookupType): Move to DeclSpace.
15203         * attribute.cs (CheckAttributeType): Update.
15204         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15205         (FindDocumentedTypeNonArray): Likewise.
15206
15207 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15208
15209         Fix cs0509.cs, cs1632.cs.
15210         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15211         is the same as IsInterface.
15212         (TypeContainer.GetClassBases): Likewise.
15213         * statement.cs (LabeledStatement.ig): New field.
15214         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15215         label.
15216         (LabeledStatement.DoEmit): Check that the label was created with
15217         the same ILGenerator.
15218
15219 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15220
15221         Fix #71058
15222         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15223         accessors to its properties.
15224
15225         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15226         from accessors to property.
15227         
15228 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15229
15230         Fix #70722
15231         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15232         only for overrides.
15233         
15234 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15235
15236         * attribute.cs: Check for null and empty strings.  
15237
15238         I have lost another battle to Paolo.
15239
15240 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15241
15242         Fix #70942
15243         * class.cs (PropertyMethod): Set Parent field in ctors.
15244         (SetMethod.InternalParameters): Add unsafe switch hack.
15245         Override MarkForDuplicationCheck where it is appropriate.
15246
15247         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15248         It says whether container allows members with the same name.
15249         Base default is no.
15250         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15251         Removed is_method parameter.
15252
15253 2005-01-06  Duncan Mak  <duncan@ximian.com>
15254
15255         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15256         because the previous change led to incorrect reporting of CS1032
15257         ("Cannot define/undefine preprocessor symbols after first token in
15258         file"). Instead of using `tokens_seen' as the only flag that
15259         triggers CS1040, introduce `comments_seen'. This new flag is used
15260         to signify having seen comments on the current line, so it is
15261         unset after a newline.
15262
15263 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15264
15265         * doc.cs : When searching for a type, find nested type too.
15266           This fixes bug #71040.
15267
15268 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15269
15270         * doc.cs :
15271           - Warn missing member comment on those classes which also does not
15272             have doc comments. Fixed bug #71041.
15273           - Don't warn missing doc comment on default constructor.
15274             Fixed bug #71042.
15275
15276 2005-01-06  Duncan Mak  <duncan@ximian.com>
15277
15278         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15279         comments, set `tokens_seen' to true. This allows us to detect
15280         misplaced preprocessor directives (i.e. not at the beginning of
15281         the a line, nor after whitespaces). In that case, report error
15282         CS1040. This fixes bug #56460.
15283
15284         * cs-parser.jay (interface_member_declaration): Add checks for
15285         IsExplicitImpl, and report CS0541 error if an interface member is
15286         defined as an explicit interface declaration.
15287
15288 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15289
15290         Fix #70817
15291         * class.cs (PropertyMethod): Set Parent field in ctors.
15292         (SetMethod.InternalParameters): Add unsafe switch hack.
15293         
15294         * decl.cs (MemberCore.Parent): Cannot be readonly.
15295
15296 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15297
15298         * decl.cs (DeclSpace.ResolveType): Remove.
15299         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15300         Merge in code from ...
15301         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15302         * class.cs, enum.cs: Update to changes.
15303
15304 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15305
15306         * anonymous.cs: Ensure that we init the scope of our parent if it
15307         has not been initialized yet.
15308
15309 2004-12-30  Duncan Mak  <duncan@ximian.com>
15310
15311         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15312         if field.FieldBuilder is null. Fixes #70758.
15313
15314         * convert.cs: Fixed some typos and updated some of the comments.
15315         (ImplicitStandardConversionExists):
15316         (TryImplicitIntConversion): If `target_type' is an interface and
15317         the type of `ic' implements this interface, return true or a new
15318         BoxedCast instead of null. This fixes #70468.
15319
15320 2004-12-29  Duncan Mak  <duncan@ximian.com>
15321
15322         * expression.cs (Argument.Emit): Check that Expr is
15323         IMemoryLocation before casting to it, and report CS1510 otherwise.
15324
15325         This fixes #70402.
15326
15327 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15328
15329         * statement.cs (Block.ThisVariable): remove the recursion here, to
15330         make the --profile more sane.
15331
15332 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15333
15334         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15335         assembly, by JB Evain.
15336
15337 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15338
15339         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15340           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15341         "parent" refers to enclosing type/class.  "base" refers to superclass.
15342
15343 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15344
15345         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15346         Ensure that we only have GlobalAttributes.
15347         * attribute.cs (Attribute.Emit): Make non-virtual.
15348         (GlobalAttribute.Emit): Remove.
15349         (Attribute.Resolve): Make virtual.
15350         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15351         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15352         the argument. Don't create one.
15353         (Attribute.GetObsoleteAttribute): Likewise.
15354         (Attribute.GetClsCompliantAttributeValue): Likewise.
15355         * class.cs, decl.cs: Update to changes.
15356
15357 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15358
15359         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15360         
15361         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15362         
15363         * statement.cs (Foreach.Resolve): Add error 186 report.
15364
15365 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15366
15367         * expression.cs (Conditional.DoResolve): Add warning 429.
15368         
15369         * statement.cs (If.Resolve): Add warning 665.
15370
15371 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15372
15373         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15374         except when in the parser, and in GlobalAttribute.
15375         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15376         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15377         RootContext.Tree.Types.NamespaceEntry once work is done.
15378         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15379         and resets RootContext.Tree.Types.NamespaceEntry.
15380
15381 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15382
15383         * cs-parser.jay: Don't create a block for every variable.
15384
15385 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15386
15387         * location.cs: Provide extra information.
15388
15389         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15390         variables from the captured environment, it is the ldarg_0.
15391
15392 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15393
15394         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15395         find a conclusion.
15396         
15397         * class.cs: Changed warning level for 169 to avoid developer
15398         displeasure from warning flooding. It will be changed back when they
15399         fix most of current BCL warnings.
15400         
15401         * RootContext.cs: Pushed default WarningLevel to 3.
15402         
15403         * statement.cs: Removed unused variable.
15404
15405 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15406
15407         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15408         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15409         Add error 502 report.
15410         (StaticClass.DefineType): Add error 441 report.
15411         (Class.AllowedModifiersProp): New virtual property as temporary
15412         extension to AllowedModifiers.
15413         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15414         to share implementation with StaticClass and don't call virtual
15415         methods from ctor.
15416         
15417         * driver.cs (MainDriver): Add error 1558 test.
15418
15419         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15420         report. Moved error 36 test here.
15421
15422         * statement.cs (Throw.Resolve): Add error 724 report.
15423
15424         * typemanager.cs: Add out_attribute_type core type.
15425         
15426 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15427
15428         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15429         3018 report.
15430         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15431
15432         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15433         3017 report.
15434         
15435         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15436
15437         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15438         Add error 3023 report.
15439         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15440
15441         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15442         implementation.
15443
15444 2004-12-12  John Luke  <john.luke@gmail.com>
15445
15446         * driver.cs (AddArgs): take -- into account when
15447         adding arguments, fixes bug 65710 
15448
15449 2004-12-12  Martin Baulig  <martin@ximian.com>
15450
15451         * expression.cs (Unary.TryReduceNegative): Added support for
15452         SByteConstant and ByteConstant.
15453         (Unary.Reduce): Check error values from TryReduceNegative().
15454
15455 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15456
15457         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15458         and report exception as error 182.
15459
15460 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15461
15462         * driver.cs (Main): Fix message when there are warnings.
15463
15464 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15465
15466         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15467
15468 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15469
15470         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15471         Reduced number of warnings.
15472         
15473         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15474
15475 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15476
15477         * driver.cs: Removed message.
15478
15479         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15480
15481 2004-12-08    <vargaz@freemail.hu>
15482
15483         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15484
15485 2004-12-08  Martin Baulig  <martin@ximian.com>
15486
15487         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15488         instead of a CS3002 for properties and indexer.
15489
15490 2004-12-08  Martin Baulig  <martin@ximian.com>
15491
15492         * decl.cs (MemberName.ToString): Make this work again.
15493
15494 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15495
15496         * attribute.cs (Resolve): Add error 591 detection.
15497
15498         * class.cs (FieldMember.Define): Add error 1547 detection.
15499         (Indexer.Define): Add error 620 detection.
15500         (Operator.Define): Add error 590 detection.
15501
15502         * ecore.cs: Missing argument for error 79.
15503
15504         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15505         detection.
15506
15507 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15508
15509         Fix #70106
15510         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15511         only.
15512
15513 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15514
15515         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15516           Some operator comments were suppressed.
15517         * doc.cs : Implicit/explicit operator name in doc comments are like
15518           "op_Explicit(type)~returnType", so added suffix handling.
15519
15520 2004-12-07  Martin Baulig  <martin@ximian.com>
15521
15522         * decl.cs
15523         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15524         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15525         (DeclSpace.ec): New protected field; store the EmitContext here.
15526         (DeclSpace.EmitContext): New public property; moved here from
15527         `TypeContainer'.
15528         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15529         EmitContext.
15530
15531         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15532         (Enum.Emit): Don't create a new EmitContext.
15533
15534         * delegate.cs (Delegate.DefineType): Always create the
15535         EmitContext.
15536
15537         * iterators.cs (Iterators.DefineIterator): Create a new
15538         EmitContext and store it in `ec'.
15539
15540 2004-08-24  Martin Baulig  <martin@ximian.com>
15541
15542         * typemanager.cs
15543         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15544         this for accessibility checks.
15545         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15546         IsNestedFamilyAccessible.
15547         (TypeManager.IsSubclassOf): New method, do what the name actually
15548         says.   
15549
15550 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15551
15552         Fix crash on cs0657-17.cs.
15553         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15554         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15555         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15556         the case where the NamespaceEntry gets overwritten.
15557
15558 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15559
15560         Fixed #69195, #56821
15561         * ecore.cs (ResolveBoolean): Tiny refactoring.
15562
15563         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15564         of right expression resolving when left is false constant and
15565         operator is LogicalAnd OR true constant and operator is LogicalOr.
15566
15567         * statement.cs (ResolveUnreachable): Always reports warning.
15568
15569 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15570
15571         * class.cs: Distinguish between 1721 and 1722 (just a little help
15572         for the programmer).
15573
15574 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15575
15576         * delegate.cs: Only allow this on new versions of the language. 
15577
15578 2004-12-02  Duncan Mak  <duncan@ximian.com>
15579
15580         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15581         Expression class.
15582         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15583         here as a static method. Take an additional bool out parameter
15584         `must_do_cs1540_check' for signaling to InstanceResolve.
15585         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15586         member field from PropertyExpr class and made it an argument of
15587         the method instead.
15588         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15589         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15590         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15591         and `remove_accessor' as well as InstanceResolve: report CS0122
15592         where applicable.
15593
15594         Fixes #70129.
15595
15596 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15597
15598         Fix test-327.cs, test-328.cs, and put in early infrastructure
15599         for eventually fixing #52697.
15600         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15601         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15602         from other methods.
15603         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15604         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15605         (VerifyUsing, error246): Update.
15606         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15607         'NamespaceEntry.LookupNamespaceOrType'.
15608
15609 2004-12-03  Martin Baulig  <martin@ximian.com>
15610
15611         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15612         method as our child, call AnonymousMethod.Compatible() on it.
15613
15614 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15615
15616         Disable XML documentation support in 'basic' profile.
15617         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15618         Redirect XmlElement to System.Object.
15619         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15620         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15621         * mcs.exe.sources: Add doc-bootstrap.cs.
15622         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15623         of doc.cs.
15624
15625 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15626
15627         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15628           comments are allowed.
15629
15630 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15631
15632         * delegate.cs: Add checks for subtypes in paramaters and return values
15633         in VerifyMethod () to add support for Covariance/Contravariance
15634         in delegates.
15635         
15636 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15637
15638         * report.cs: Remove extra closing parenthesis.
15639
15640         * convert.cs (Error_CannotImplicitConversion): If the name of the
15641         types are the same, provide some extra information.
15642
15643         * class.cs (FieldBase): Use an unused bit field from the field to
15644         encode the `has_offset' property from the FieldMember.  This saves
15645         a couple of Ks on bootstrap compilation.
15646
15647         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15648         method as our child, return the AnonymousMethod resolved
15649         expression.
15650
15651         * expression.cs (New.DoResolve): Allow return values from
15652         NewDelegate to also include AnonymousMethods.
15653
15654         Fixes #70150.
15655
15656 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15657
15658         Fix bug #70102
15659         * attribute.cs (Resolve): Improved implementation of params
15660         attribute arguments.
15661
15662         * support.cs (ParameterData): Add HasParams to be faster.
15663
15664 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15665
15666         all things are for /doc support:
15667
15668         * doc.cs: new file that supports XML documentation generation.
15669         * mcs.exe.sources: added doc.cs.
15670         * driver.cs:
15671           Handle /doc command line option.
15672           Report error 2006 instead of 5 for missing file name for /doc.
15673           Generate XML documentation when required, after type resolution.
15674         * cs-tokenizer.cs:
15675           Added support for picking up documentation (/// and /** ... */),
15676           including a new XmlCommentState enumeration.
15677         * cs-parser.jay:
15678           Added lines to fill Documentation element for field, constant,
15679           property, indexer, method, constructor, destructor, operator, event
15680           and class, struct, interface, delegate, enum.
15681           Added lines to warn incorrect comment.
15682         * rootcontext.cs :
15683           Added Documentation field (passed only when /doc was specified).
15684         * decl.cs:
15685           Added DocComment, DocCommentHeader, GenerateDocComment() and
15686           OnGenerateDocComment() and some supporting private members for
15687           /doc feature to MemberCore.
15688         * class.cs:
15689           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15690         * delegate.cs:
15691           Added overriden DocCommentHeader.
15692         * enum.cs:
15693           Added overriden DocCommentHeader and GenerateDocComment().
15694
15695 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15696
15697         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15698         unwrapping the enumeration values, chain to
15699         DoConstantNumericPromotions again, so we can promote things to the
15700         fundamental types (takes care of enums that are bytes, sbytes).
15701
15702         Fixes bug #62054.
15703
15704 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15705
15706         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15707         Fix long-standing bug in type-lookup.  Use FindType instead of
15708         LookupType when ec.ResolvingTypeTree.
15709         (Attribute.ResolveType, Attribute.Resolve)
15710         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15711         Update to changes.
15712         (Attributes.Search): Remove internal version.  Update.
15713         (Attributes.SearchMulti): Update.
15714         (Attributes.GetClsCompliantAttribute): Remove.
15715         (Attributes.GetIndexerNameAttribute): Remove.
15716         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15717         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15718         * class.cs (Indexer.Define): Likewise.
15719
15720 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15721
15722         Fix bug #68790
15723         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15724         MarshallByReference members access.
15725
15726         * expression.cs: Use CheckMarshallByRefAccess;
15727         Better error CS0197 message.
15728
15729         * report.cs: Print whole related error message.
15730
15731 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15732
15733         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15734         the current directory to help debugging.
15735
15736 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15737
15738         * class (GetClassBases): Better error 60 report.
15739         (EventProperty): Disabled warning 67 detection.
15740
15741 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15742
15743         Fix bug #60324
15744         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15745
15746         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15747         precise values.
15748
15749 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15750
15751         Fix bug #49488
15752         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15753
15754         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15755
15756 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15757
15758         * attribute.cs (Attribute.Resolve): Refine error reporting and
15759         report a cs0117 if the identifier does not exist, to distinguish
15760         from 0617 which is a miss-use of the actual identifier.
15761
15762         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15763         between cs0070 and cs0079.
15764
15765         * class.cs (MemberBase.DoDefine): When reporting a wrong
15766         accessibility level, we use MethodCore to compare instead of
15767         Method (this was a regression in some refactoring effort).
15768
15769         So now we correctly report cs0056 again.
15770
15771         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15772         testing the target_type (which was known to be object_type) and
15773         not the source type (which is anonymous_method).
15774
15775         Fixed reporting of error cs1660.
15776
15777         * expression.cs (UserCast.Source): Expose the underlying cast.
15778
15779         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15780         allowed types to find a match to int32 first (most common).
15781
15782         In addition, it ignores any ImplicitUserConversions that did an
15783         internal implicit conversion (as the switch statement allows only
15784         one integral conversion to exist).
15785
15786         * class.cs (PartialContainer.Create): rename `name' to
15787         `member_name' for clarity.  Then replace the string calls with a
15788         call to MemberName.GetPartialName, as now using
15789         MemberName.ToString is an error (this is due to the side effects
15790         it had, that were fixed in the past).
15791
15792         This will restore the error reporting on a number of partial class
15793         errors that were missusing this (and getting an exception as a
15794         results, which is now just a plain textual warning, because
15795         yyparse debug output would crash otherwise).
15796
15797 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15798
15799         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15800
15801 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15802
15803         * rootcontext.cs (LookupType): Make sure to cache lookups that
15804         don't give us a negative result. This saves about 5% of corlib
15805         compilation time.
15806
15807 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15808
15809         * report.cs (AbstractMessage.Print): messages are sent to stderr
15810
15811         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15812         non-interface in the list of interfaces (at this point, either
15813         parent was properly set, or a base class is being listed in the
15814         interfaces section).
15815
15816         This flags error 1722, and resolves the crash from bug 69259.
15817
15818 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15819
15820         * statement.cs (Using.EmitExpressionFinally): make this work right
15821         for valuetypes. Fixes 69926.
15822
15823 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15824
15825         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15826         converted to an enum" here, before we try to change the underlying
15827         type.  This code exists, but it is a different code path than the
15828         one used while encoding constants.
15829
15830         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15831         old bug: when converting from the null literal to a pointer,
15832         return an EmptyCast, not the NullLiteral.
15833
15834         This fixes #69921, the recent null_type changes probably made this
15835         bug more prominent.
15836
15837         (ImplicitReferenceConversionExists): In addition, resynchronized
15838         the code here, so it matches the same code in
15839         ImplicitReferenceConversionExists for the `from any class-type S
15840         to any interface-type T'.
15841         
15842
15843 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15844
15845         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15846
15847 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15848
15849         * cs-parser.jay: Use verbosity accordingly. 
15850
15851 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15852
15853         * expression.cs (Unary.ResolveOperator): Do not report warning;
15854         AddressOf reads from variable.
15855         
15856         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15857
15858 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15859
15860         Fix bug #69462
15861
15862         * attribute.cs (Attributable): Removed CheckTargets.
15863         (Attributes.Emit): Explicit attribute targets are tested here.
15864
15865         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15866         not enabled for interfaces.
15867
15868         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15869         (GetAssemblyName): Ouch next bug there.
15870
15871 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15872
15873         * expression.cs: Error 275 added.
15874         
15875 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15876
15877         Fix bug #69177 (Implemented decimal constant support)
15878
15879         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15880         (BinaryFold): Add DecimalConstant.
15881
15882         * const.cs (Define): Decimal constant 
15883         (is not constant.
15884         (ChangeType): Add decimal type handling.
15885         (LookupConstantValue): Don't set value for decimal type but
15886         emit DecimalConstantAttribute. Needed for constant optimization.
15887
15888         * constant.cs (ToDecimal): New method.
15889         (ConvertToDecimal): New method.
15890         (IntConstant): Implemented ConvertToDecimal.
15891         (DecimalConstant.Emit): Emit optimized version for decimals in
15892         int range.
15893
15894         * expression.cs (ResolveOperator): Changed order of constant
15895         reduction to work correctly with native types which have
15896         overloaded operators.
15897         (ResolveMemberAccess): Extract constant value from attribute
15898         for decimal type.
15899
15900         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15901
15902         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15903         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15904         (ChangeType): Decimal is special.
15905         (TypeToCoreType): Add decimal type.
15906
15907 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15908
15909         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15910         decimal types.
15911
15912 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15913
15914         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15915         test cs1667-5.cs.
15916
15917 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15918
15919         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15920
15921         * pending.cs (PendingImplementation): Grab only interfaces.
15922
15923 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15924
15925         * statement.cs (ForeachHelperMethods): Add location member and
15926         error 202 detection.
15927
15928 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15929
15930         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15931         automatically handled by executable.make.
15932         (PROGRAM): Make profile-specific.
15933
15934 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15935
15936         * expression.cs (DoResolveBase): Fixed wrong warning for out
15937         variables.
15938
15939 2004-11-18  Martin Baulig  <martin@ximian.com>
15940
15941         Merged latest changes into gmcs.  Please keep this comment in
15942         here, it makes it easier for me to see what changed in MCS since
15943         the last time I merged.
15944
15945 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15946
15947         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15948         (TypeHandle.GetMemberCache): New.
15949         (TypeHandle.TypeHandle): Update.
15950         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15951         (TypeManager.LookupParentInterfacesCache):
15952         Rename from LookupInterfaceCache.  Optimize slightly.
15953         (TypeManager.MemberLookup_FindMembers): Update.
15954         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15955         multi-type variant.
15956         (AddCacheContents): Rename from AddHashtable.
15957         * class.cs (TypeContainer.parent_container): Remove.
15958         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15959         (TypeContainer.DoDefineMembers): Don't initialize it.
15960         Update to name changes.
15961         
15962 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15963
15964         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15965         that factors the code to check access modifiers on override.  
15966
15967         (PropertyBase): Use the code here.
15968
15969         Patch from Lluis S'anchez, fixes bug #69361.
15970
15971 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15972
15973         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15974         routine that is used to report the use of a captured variable
15975         whose address has been taken.
15976
15977         There are two checks: one when variables are being captured and
15978         the other check is when the address of a variable is taken. 
15979         
15980         (because an anonymous methods might be resolved before *or* after
15981         the address has been taken) and 
15982
15983         * expression.cs (Conditional.DoResolve): Remove the special
15984         casing that Martin added to trueExpr and falseExpr being both
15985         NullLiteral.  We get the right behavior now just by introducing
15986         the null_type into the compiler. 
15987
15988         * convert.cs (ExplicitConversion): Change the code to use
15989         null_type instead of testing `expr is NullLiteral'.
15990         (ImplicitConversionStandard): use null_type too.
15991         (ImplicitReferenceConversionExists): use null_type too.
15992         (ImplicitReferenceConversion): use null_type too.
15993
15994         * literal.cs: The type of `NullLiteral' is now null_type instead
15995         of object_type. 
15996         (Resolve): Set the type here.
15997
15998         * typemanager.cs: Introduce null_type.
15999
16000 2004-11-17  Martin Baulig  <martin@ximian.com>
16001
16002         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16003         direction, like FindMembers() does.  Fixes #69546, testcase is in
16004         test-315.cs.    
16005
16006 2004-11-16  Martin Baulig  <martin@ximian.com>
16007
16008         This is based on a patch from Marek Safar, see bug #69082.
16009         Fixes bugs #63705 and #67130.
16010
16011         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16012         method; create a MemberCache for an interface type and cache the
16013         result.
16014
16015         * decl.cs (IMemberContainer.ParentContainer): Removed.
16016         (IMemberContainer.ParentCache): New property.
16017         (MemberCache.SetupCacheForInterface): Removed.
16018         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16019         to create a cache for an interface's "parent".
16020
16021         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16022         interfaces too.
16023
16024 2004-11-16  Martin Baulig  <martin@ximian.com>
16025
16026         Merged back from gmcs; these changes already went into gmcs a
16027         couple of weeks ago.
16028
16029         * typemanager.cs
16030         (TypeManager.AddUserType): Removed the `ifaces' argument.
16031         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16032         `TypeExpr []'.
16033         (TypeManager.AddUserInterface): Removed.
16034         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16035         `TypeExpr []'.
16036         (TypeManager.GetInterfaces): Likewise.
16037         (TypeManager.GetExplicitInterfaces): Likewise.
16038
16039         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16040
16041         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16042         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16043
16044 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16045
16046         * statement.cs: Avoid adding bools to a hashtable.
16047
16048 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16049
16050         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16051         calling an unsafe method from a safe location.
16052
16053 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16054
16055         Fix #69167
16056         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16057
16058 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16059
16060         * namespace.cs (VerifyUsing): use GetPartialName instead of
16061         ToString. 
16062
16063 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16064
16065         * statement.cs (Return.Resolve): Fix regression in typo: if
16066         `in_exc', we have to request a NeedReturnLabel, this was a typo
16067         introduced in the anonymous method check-in.  Fixes #69131.
16068
16069         * Indexers were using the ShortName when defining themselves,
16070         causing a regression in the compiler bootstrap when applying the
16071         patch from 2004-11-02 (first part), now they use their full name
16072         and the bug is gone.
16073
16074 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16075
16076         * driver.cs: Strip the path from the names of embedded resources. Fixes
16077         #68519.
16078
16079 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16080
16081         Fix error message regression: cs0104-2.cs.
16082         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16083         (AliasEntry.Resolve): Update.
16084         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16085         'silent' flag.
16086         (RootContext.LookupType): Update.
16087
16088 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16089
16090         * cs-parser.jay: Add support for handling accessor modifiers
16091         * class: Add support port accessor modifiers and error checking,
16092         define PropertyMethod.Define as virtual (not abstract anymore)
16093         * ecore.cs: Add checking for proeprties access with access modifiers
16094         * iterators.cs: Modify Accessor constructor call based in the modified
16095         constructor
16096 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16097
16098         * expression.cs (StringConcat): Handle being called twice,
16099         as when we have a concat in a field init with more than two
16100         ctors in the class
16101
16102 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16103
16104         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16105         special case explicit implementations, we should always produce
16106         the .property or .event declaration.
16107         
16108         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16109         since it will not return correct data if people use this
16110         unresolved in the presence of using statements (see test-313).
16111
16112         * class.cs (MethodData.Define): If we are an explicit interface
16113         implementation, set the method name to the full name of the
16114         interface plus the name of the method.  
16115
16116         Notice that using the method.MethodName.GetFullName() does not
16117         work, as it will only contain the name as declared on the source
16118         file (it can be a shorthand in the presence of using statements)
16119         and not the fully qualifed type name, for example:
16120
16121         using System;
16122
16123         class D : ICloneable {
16124                 object ICloneable.Clone ()  {
16125                 }
16126         }
16127
16128         Would produce a method called `ICloneable.Clone' instead of
16129         `System.ICloneable.Clone'.
16130
16131         * namespace.cs (Alias.Resolve): Use GetPartialName.
16132         
16133 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16134
16135         * cs-parser.jay: Add error 1055 report.
16136
16137 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16138
16139         * assign.cs (Assign.DoResolve): Only do the transform of
16140         assignment into a New if the types are compatible, if not, fall
16141         through and let the implicit code deal with the errors and with
16142         the necessary conversions. 
16143
16144 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16145
16146         * cs-parser.jay: Add error 1031 report.
16147
16148         * cs-tokenizer.cs: Add location for error 1038.
16149
16150 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16151
16152         * cs-parser.jay: Add error 1016 report.
16153
16154 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16155
16156         * cs-parser.jay: Add errors 1575,1611 report.
16157
16158 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16159
16160         * cs-parser.jay: Add error 1001 report.
16161
16162 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16163
16164         Fix #68850
16165         * attribute.cs (GetMarshal): Add method argument for
16166         caller identification.
16167
16168         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16169         agument for GetMarshal and RuntimeMissingSupport.
16170
16171 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16172
16173         * attribute.cs (ExtractSecurityPermissionSet): Removed
16174         TypeManager.code_access_permission_type.
16175
16176         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16177
16178 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16179
16180         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16181         for obsolete use of a variable here.   Fixes regression on errors
16182         cs0619-25 and cs0619-26.
16183
16184 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16185
16186         Fix #62358, implemented security attribute encoding.
16187
16188         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16189         Tests permitted SecurityAction for assembly or other types.
16190         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16191         data from SecurityPermissionAttribute to PermisionSet class.
16192
16193         * class.cs (ApplyAttributeBuilder): Added special handling
16194         for System.Security.Permissions.SecurityAttribute based types.
16195
16196         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16197         special handling for System.Security.Permissions.SecurityAttribute
16198         based types.
16199
16200         * enum.cs (ApplyAttributeBuilder): Added special handling
16201         for System.Security.Permissions.SecurityAttribute based types.
16202
16203         * parameter.cs (ApplyAttributeBuilder): Added special handling
16204         for System.Security.Permissions.SecurityAttribute based types.
16205
16206         * rootcontext.cs: Next 2 core types.
16207
16208         * typemanager.cs (TypeManager.security_permission_attr_type):
16209         Built in type for the SecurityPermission Attribute.
16210         (code_access_permission_type): Build in type.
16211
16212 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16213
16214         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16215         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16216         all of this information into
16217         EmitContext.EmitCapturedVariableInstance.
16218         
16219         * codegen.cs (EmitCapturedVariableInstance): move here the
16220         funcionality of emitting an ldarg.0 in the presence of a
16221         remapping.   This centralizes the instance emit code.
16222
16223         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16224         then emit a load of this: it means that we have reached the
16225         topmost ScopeInfo: the one that contains the pointer to the
16226         instance of the class hosting the anonymous method.
16227
16228         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16229         captures to the topmost CaptureContext.
16230
16231 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16232
16233         * expression.cs (LocalVariableReference): Move the knowledge about
16234         the iterators into codegen's EmitCapturedVariableInstance.
16235
16236 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16237
16238         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16239         all code paths return a value from an anonymous method (it is the
16240         same as the 161 error, but for anonymous methods).
16241
16242 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16243
16244         The introduction of anonymous methods in the compiler changed
16245         various ways of doing things in the compiler.  The most
16246         significant one is the hard split between the resolution phase
16247         and the emission phases of the compiler.
16248
16249         For instance, routines that referenced local variables no
16250         longer can safely create temporary variables during the
16251         resolution phase: they must do so from the emission phase,
16252         since the variable might have been "captured", hence access to
16253         it can not be done with the local-variable operations from the runtime.
16254         
16255         * statement.cs 
16256
16257         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16258         is a toplevel block.
16259
16260         (ToplevelBlock): A new kind of Block, these are the blocks that
16261         are created by the parser for all toplevel method bodies.  These
16262         include methods, accessors and anonymous methods.
16263
16264         These contain some extra information not found in regular blocks:
16265         A pointer to an optional CaptureContext (for tracking captured
16266         local variables and parameters).  A pointer to the parent
16267         ToplevelBlock.
16268         
16269         (Return.Resolve): Catch missmatches when returning a value from an
16270         anonymous method (error 1662).
16271         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16272         phase.
16273
16274         (Break.Resolve): ditto.
16275
16276         (SwitchLabel): instead of defining the labels during the
16277         resolution phase, we now turned the public ILLabel and ILLabelCode
16278         labels into methods called GetILLabelCode() and GetILLabel() that
16279         only define the label during the Emit phase.
16280
16281         (GotoCase): Track the SwitchLabel instead of the computed label
16282         (its contained therein).  Emit the code by using
16283         SwitchLabel.GetILLabelCode ().
16284
16285         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16286         whether the Local has been captured or not.
16287
16288         (LocalInfo.IsCaptured): New property, used to tell whether the
16289         local has been captured.
16290         
16291         * anonymous.cs: Vastly updated to contain the anonymous method
16292         support.
16293
16294         The main classes here are: CaptureContext which tracks any
16295         captured information for a toplevel block and ScopeInfo used to
16296         track the activation frames for various local variables.   
16297
16298         Each toplevel block has an optional capture context associated
16299         with it.  When a method contains an anonymous method both the
16300         toplevel method and the anonymous method will create a capture
16301         context.   When variables or parameters are captured, they are
16302         recorded on the CaptureContext that owns them, for example:
16303
16304         void Demo () {
16305              int a;
16306              MyDelegate d = delegate {
16307                  a = 1;
16308              }
16309         }
16310
16311         Here `a' will be recorded as captured on the toplevel
16312         CapturedContext, the inner captured context will not have anything
16313         (it will only have data if local variables or parameters from it
16314         are captured in a nested anonymous method.
16315
16316         The ScopeInfo is used to track the activation frames for local
16317         variables, for example:
16318
16319         for (int i = 0; i < 10; i++)
16320                 for (int j = 0; j < 10; j++){
16321                    MyDelegate d = delegate {
16322                         call (i, j);
16323                    }
16324                 }
16325
16326         At runtime this captures a single captured variable `i', but it
16327         captures 10 different versions of the variable `j'.  The variable
16328         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16329         recorded on a child.  
16330
16331         The toplevel ScopeInfo will also track information like the `this'
16332         pointer if instance variables were referenced (this is necessary
16333         as the anonymous method lives inside a nested class in the host
16334         type of the method). 
16335
16336         (AnonymousMethod): Expanded to track the Toplevel, implement
16337         `AnonymousMethod.Compatible' to tell whether an anonymous method
16338         can be converted to a target delegate type. 
16339
16340         The routine now also produces the anonymous method content
16341
16342         (AnonymousDelegate): A helper class that derives from
16343         DelegateCreation, this is used to generate the code necessary to
16344         produce the delegate for the anonymous method that was created. 
16345
16346         * assign.cs: API adjustments for new changes in
16347         Convert.ImplicitStandardConversionExists.
16348
16349         * class.cs: Adjustments to cope with the fact that now toplevel
16350         blocks are of type `ToplevelBlock'. 
16351
16352         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16353         insteda of standard blocks.
16354
16355         Flag errors if params arguments are passed to anonymous methods.
16356
16357         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16358         `CurrentAnonymousMethod' which points to the current Anonymous
16359         Method.  The variable points to the AnonymousMethod class that
16360         holds the code being compiled.  It is set in the new EmitContext
16361         created for the anonymous method.
16362
16363         (EmitContext.Phase): Introduce a variable and an enumeration to
16364         assist in enforcing some rules about when and where we are allowed
16365         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16366         only one that enfonces this right now).
16367
16368         (EmitContext.HaveCaptureInfo): new helper method that returns
16369         whether we have a CapturedContext initialized.
16370
16371         (EmitContext.CaptureVariable): New method used to register that a
16372         LocalInfo must be flagged for capturing. 
16373
16374         (EmitContext.CapturedParameter): New method used to register that a
16375         parameters must be flagged for capturing. 
16376         
16377         (EmitContext.CapturedField): New method used to register that a
16378         field must be flagged for capturing. 
16379
16380         (EmitContext.HaveCapturedVariables,
16381         EmitContext.HaveCapturedFields): Return whether there are captured
16382         variables or fields. 
16383
16384         (EmitContext.EmitMethodHostInstance): This is used to emit the
16385         instance for the anonymous method.  The instance might be null
16386         (static methods), this (for anonymous methods that capture nothing
16387         and happen to live side-by-side with the current method body) or a
16388         more complicated expression if the method has a CaptureContext.
16389
16390         (EmitContext.EmitTopBlock): Routine that drives the emission of
16391         code: it will first resolve the top block, then emit any metadata
16392         and then emit the code.  The split is done so that we can extract
16393         any anonymous methods and flag any captured variables/parameters.
16394         
16395         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16396         during this phase, the ILGenerator should not be used as labels
16397         and local variables declared here might not be accessible to any
16398         code that is part of an anonymous method.  
16399
16400         Exceptions to this include the temporary variables that are
16401         created by some statements internally for holding temporary
16402         variables. 
16403         
16404         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16405         metadata for a cb
16406
16407         (EmitContext.TemporaryReturn): This method is typically called
16408         from the Emit phase, and its the only place where we allow the
16409         ReturnLabel to be defined other than the EmitMeta.  The reason is
16410         that otherwise we would have to duplicate a lot of logic in the
16411         Resolve phases of various methods that today is on the Emit
16412         phase. 
16413
16414         (EmitContext.NeedReturnLabel): This no longer creates the label,
16415         as the ILGenerator is not valid during the resolve phase.
16416
16417         (EmitContext.EmitThis): Extended the knowledge in this class to
16418         work in anonymous methods in addition to iterators. 
16419
16420         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16421         code is necessary on the stack to access the instance to a local
16422         variable (the variable will be accessed as a field).
16423
16424         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16425         EmitContext.EmitAddressOfParameter): Routines to support
16426         parameters (not completed at this point). 
16427         
16428         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16429         will also remove the parameters.
16430
16431         * convert.cs (Convert): Define a `ConstantEC' which points to a
16432         null.  This is just to prefity some code that uses
16433         ImplicitStandardConversion code and do not have an EmitContext
16434         handy.
16435
16436         The idea is to flag explicitly that at that point in time, it is
16437         known that the conversion will not trigger the delegate checking
16438         code in implicit conversions (which requires a valid
16439         EmitContext). 
16440
16441         Everywhere: pass new EmitContext parameter since
16442         ImplicitStandardConversionExists now requires it to check for
16443         anonymous method conversions. 
16444
16445         (Convert.ImplicitStandardConversionExists): If the type of an
16446         expression is the anonymous_method_type, and the type is a
16447         delegate, we invoke the AnonymousMethod.Compatible method to check
16448         whether an implicit conversion is possible. 
16449
16450         (Convert.ImplicitConversionStandard): Only do implicit method
16451         group conversions if the language level is not ISO_1.
16452
16453         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16454         MethodInfo for the Invoke method.  used by Delegate and
16455         AnonymousDelegate.
16456
16457         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16458         method conversions if the target type is a delegate.
16459
16460         Removed extra debugging nops.
16461
16462         (LocalVariableReference): Turn the `local_info' into a public
16463         field. 
16464
16465         Add `prepared' field, the same hack used for FieldExprs to cope
16466         with composed assignments, as Local variables do not necessarily
16467         operate purely on the stack as they used to: they can be captured
16468         fields. 
16469
16470         Add `temp' for a temporary result, like fields.
16471
16472         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16473
16474         It now copes with Local variables that are captured and emits the
16475         proper instance variable to load it from a field in the captured
16476         case. 
16477
16478         (ParameterReference.DoResolveBase): During the resolve phase,
16479         capture parameters if we are in an anonymous method.
16480
16481         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16482         anonymous method, use the EmitContext helper routines to emit the
16483         parameter reference.
16484
16485         * iterators.cs: Set RemapToProxy to true/false during the
16486         EmitDispose class.
16487
16488         * parameters.cs (GetParameterByName): New helper method. 
16489
16490         * typemanager.cs (anonymous_method_type) a new type that
16491         represents an anonyous method.  This is always an internal type,
16492         used as a fencepost to test against the anonymous-methodness of an
16493         expression. 
16494         
16495 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16496
16497         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16498         561 report.
16499         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16500
16501 2004-10-18  Martin Baulig  <martin@ximian.com>
16502
16503         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16504         `Type' directly, but call ResolveType() on it.
16505         (Catch.Resolve): Likewise.
16506         (Foreach.Resolve): Likewise.
16507
16508 2004-10-18  Martin Baulig  <martin@ximian.com>
16509
16510         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16511         `Type' directly, but call ResolveType() on it.
16512         (Probe.DoResolve): Likewise.
16513         (ArrayCreation.LookupType): Likewise.
16514         (TypeOf.DoResolve): Likewise.
16515         (SizeOf.DoResolve): Likewise.
16516
16517 2004-10-18  Martin Baulig  <martin@ximian.com>
16518
16519         * expression.cs (Invocation.BetterFunction): Put back
16520         TypeManager.TypeToCoreType().
16521
16522 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16523
16524         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16525         the ResolveType.
16526
16527 2004-10-18  Martin Baulig  <martin@ximian.com>
16528
16529         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16530         `Type' directly, but call ResolveType() on it.
16531
16532 2004-10-18  Martin Baulig  <martin@ximian.com>
16533
16534         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16535         `Type' directly, but call ResolveType() on it.
16536         (MemberBase.DoDefine): Likewise.
16537
16538         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16539         `Type' directly, but call ResolveType() on it.
16540         (ComposedCast.DoResolveAsTypeStep): Likewise.
16541
16542         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16543         `Type' directly, but call ResolveType() on it.
16544
16545 2004-10-17  John Luke  <john.luke@gmail.com>
16546
16547         * class.cs (Operator.GetSignatureForError): use CSharpName
16548
16549         * parameter.cs (Parameter.GetSignatureForError): Returns
16550         correct name even if was not defined.
16551
16552 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16553
16554         Fix #65816.
16555         * class.cs (TypeContainer.EmitContext): New property.
16556         (DefineNestedTypes): Create an emitcontext for each part.
16557         (MethodCore.DoDefineParameters): Use container's emitcontext.
16558         Pass type array to InternalParameters.
16559         (MemberBase.DoDefine): Use container's emitcontext.
16560         (FieldMember.Define): Likewise.
16561         (Event.Define): Likewise.
16562         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16563         Pass type array to InternalParameters.
16564         (SetIndexerMethod.GetParameterInfo): Likewise.
16565         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16566         * delegate.cs (Define): Pass emitcontext to
16567         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16568         array to InternalParameters.
16569         * expression.cs (ParameterReference.DoResolveBase): Pass
16570         emitcontext to GetParameterInfo.
16571         (ComposedCast.DoResolveAsTypeStep): Remove check on
16572         ec.ResolvingTypeTree.
16573         * parameter.cs (Parameter.Resolve): Change argument to
16574         EmitContext.  Use ResolveAsTypeTerminal.
16575         (Parameter.GetSignature): Change argument to EmitContext.
16576         (Parameters.ComputeSignature): Likewise.
16577         (Parameters.ComputeParameterTypes): Likewise.
16578         (Parameters.GetParameterInfo): Likewise.
16579         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16580         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16581         * support.cs (InternalParameters..ctor): Remove variant that takes
16582         a DeclSpace.
16583         * typemanager.cs (system_intptr_expr): New.
16584         (InitExpressionTypes): Initialize it.
16585
16586 2004-10-12  Chris Toshok  <toshok@ximian.com>
16587
16588         * cs-parser.jay: fix location for try_statement and catch_clause.
16589
16590 2004-10-11  Martin Baulig  <martin@ximian.com>
16591
16592         * report.cs: Don't make --fatal abort on warnings, we have
16593         -warnaserror for that.
16594
16595 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16596
16597         More DeclSpace.ResolveType avoidance.
16598         * decl.cs (MemberCore.InUnsafe): New property.
16599         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16600         with newly created EmitContext.
16601         (FieldMember.Define): Likewise.
16602         * delegate.cs (Delegate.Define): Likewise.
16603         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16604         only if normal name-lookup fails.
16605         (TypeExpr.DoResolve): Enable error-checking.
16606         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16607         (SizeOf.DoResolve): Likewise.
16608         (ComposedCast.DoResolveAsTypeStep): Likewise.
16609         (StackAlloc.DoResolve): Likewise.
16610         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16611         (Block.Unsafe): New property.
16612         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16613         (Unsafe): Set 'unsafe' flag of contained block.
16614         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16615         (Fixed.Resolve): Likewise.
16616         (Catch.Resolve): Likewise.
16617         (Using.ResolveLocalVariableDecls): Likewise.
16618         (Foreach.Resolve): Likewise.
16619
16620 2004-10-05  John Luke <john.luke@gmail.com>
16621
16622         * cs-parser.jay: add location to error CS0175
16623
16624 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16625
16626         * ecore.cs (Expression.Constantity): Add support for turning null
16627         into a constant.
16628
16629         * const.cs (Const.Define): Allow constants to be reference types
16630         as long as the value is Null.
16631
16632 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16633
16634         * namespace.cs (NamespaceEntry.Using): No matter which warning
16635         level is set, check if this namespace name has already been added.
16636
16637 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16638
16639         * expression.cs: reftype [!=]= null should always use br[true,false].
16640         # 67410
16641
16642 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16643
16644         Fix #67108
16645         * attribute.cs: Enum conversion moved to 
16646         GetAttributeArgumentExpression to be applied to the all
16647         expressions.
16648
16649 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16650
16651         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16652         * class.c (TypeContainer.DefineType): Flag error if
16653         base types aren't accessible due to access permissions.
16654         * decl.cs (DeclSpace.ResolveType): Move logic to
16655         Expression.ResolveAsTypeTerminal.
16656         (DeclSpace.ResolveTypeExpr): Thin layer over
16657         Expression.ResolveAsTypeTerminal.
16658         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16659         Refactor code into NestedAccess.  Use it.
16660         (DeclSpace.NestedAccess): New.
16661         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16662         argument to silence errors.  Check access permissions.
16663         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16664         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16665         (Cast.DoResolve): Likewise.
16666         (New.DoResolve): Likewise.
16667         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16668         (TypeOf.DoResolve): Likewise.
16669
16670         * expression.cs (Invocation.BetterConversion): Return the Type of
16671         the better conversion.  Implement section 14.4.2.3 more faithfully.
16672         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16673         section 14.4.2.2 explicit.
16674         (Invocation.OverloadResolve): Update.
16675         (Invocation): Remove is_base field.
16676         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16677         (Invocation.Emit): Likewise.
16678
16679 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16680
16681         * README: Update to changes.
16682
16683 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16684
16685         * cs-parser.jay: Reverted 642 warning fix.
16686
16687 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16688
16689         Fix bug #66615
16690         * decl.cs (FindMemberWithSameName): Indexer can have more than
16691         1 argument.
16692
16693 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16694
16695         * expression.cs (LocalVariableReference.DoResolveLValue):
16696         Do not report warning 219 for out values.
16697         (EmptyExpression.Null): New member to avoid extra allocations.
16698
16699 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16700
16701         * cs-parser.jay: Fix wrong warning 642 report.
16702
16703         * cs-tokenizer.cs (CheckNextToken): New helper;
16704         Inspect next character if is same as expected.
16705
16706 2004-09-23  Martin Baulig  <martin@ximian.com>
16707
16708         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16709         (Convert.ImplicitReferenceConversionExists): Likewise.
16710
16711 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16712
16713         * class.cs (Operator.Define): Add error 448 and 559 report.
16714
16715 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16716
16717         * class.cs (MemberBase.IsTypePermitted): New protected
16718         method for checking error CS0610.
16719
16720 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16721
16722         * class.cs (TypeContainer.HasExplicitLayout): New property
16723         Returns whether container has StructLayout attribute set Explicit.
16724         (FieldMember): New abstract class for consts and fields.
16725         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16726         (Field): Reuse FieldMember.
16727
16728         * const.cs (Const): Reuse FieldMember.
16729
16730         * rootcontext.cs: EmitConstants call moved to class.
16731
16732 2004-09-22  Martin Baulig  <martin@ximian.com>
16733
16734         Thanks to Peter Sestoft for this bug report.
16735
16736         * expression.cs (Conditional): If both the `trueExpr' and the
16737         `falseExpr' is a NullLiteral, return a NullLiteral.
16738
16739 2004-09-22  Martin Baulig  <martin@ximian.com>
16740
16741         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16742         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16743         for the "get_Current" call.
16744
16745 2004-09-22  Martin Baulig  <martin@ximian.com>
16746
16747         Marek and me just fixed one of our oldest bugs: #28562 :-)
16748
16749         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16750
16751         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16752         we're an EnumConstant, just return that.
16753         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16754         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16755         to get the value which'll actually be written into the attribute.
16756         However, we have to use GetValue() to access the attribute's value
16757         in the compiler.        
16758
16759 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16760
16761         * constant.cs (Constant.IsNegative): New abstract property
16762         IsNegative.
16763
16764         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16765         (StackAlloc.DoResolve): Reused IsNegative.
16766
16767 2004-09-21  Martin Baulig  <martin@ximian.com>
16768
16769         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16770         if we're used in an iterator, we may be called from different
16771         methods.
16772
16773         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16774         we actually have an exception block.
16775
16776 2004-09-20  John Luke <jluke@cfl.rr.com>
16777
16778         * class.cs, cs-parser.jay: Improve the error report for 1520:
16779         report the actual line where the error happens, not where the
16780         class was declared.
16781
16782         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16783         Pass location information that was available elsewhere.
16784
16785 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16786
16787         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16788         runtime to delay sign assemblies.
16789
16790 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16791
16792         * cs-parser.jay: Do not report the stack trace, this is barely
16793         used nowadays.
16794
16795 2004-08-22  John Luke  <john.luke@gmail.com>
16796  
16797         * driver.cs : check that a resource id is not already used
16798         before adding it, report CS1508 if it is, bug #63637
16799
16800 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16801
16802         * ecore.cs: Removed dead code.
16803
16804 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16805
16806         * class.cs: Do not report warning CS0067 on the interfaces.
16807
16808 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16809
16810         * cs-parser.jay: Add error 504 report.
16811
16812 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16813
16814         * rootcontext.cs: WarningLevel is 4 by default now.
16815
16816         * statement.cs (Fixed.Resolve): Do not null
16817         VariableInfo.
16818
16819 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16820
16821         Fixed bug #55780
16822         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16823         deep search when property is not virtual.
16824         (PropertyExpr.ResolveAccessors): Make one call for both
16825         accessors.
16826
16827 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16828
16829         Fixed bug #65766
16830         * statement.cs: Error 152 report constains also location.
16831
16832 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16833
16834         Fixed bug #65766
16835         * const.cs: Explicitly set constant as static.
16836
16837 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16838
16839         Fixed bug #64226
16840         * cs-parser.jay: Add error 1017 report.
16841
16842 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16843
16844         Fixed bug #59980, #64224
16845         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16846
16847         * typemanager.cs (IsSpecialMethod): Simplified
16848
16849 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16850
16851         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16852         condition with better params.
16853
16854 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16855
16856         Fixed bug #65238
16857         * attribute.cs (Resolve): Property has to have both
16858         accessors.
16859
16860 2004-09-14  Martin Baulig  <martin@ximian.com>
16861
16862         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16863
16864 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16865
16866         Fixed bug #61902
16867         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16868         called and is obsolete then this member suppress message
16869         when call is inside next [Obsolete] method or type.
16870
16871         * expression.cs: Use TestObsoleteMethodUsage member.
16872
16873 2004-09-14  Martin Baulig  <martin@ximian.com>
16874
16875         * cs-parser.jay: Sync a bit with the GMCS version.
16876
16877 2004-09-14  Martin Baulig  <martin@ximian.com>
16878
16879         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16880         (CSharpParser.yacc_verbose_flag): New public field.
16881
16882         * genericparser.cs: Removed.
16883
16884 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16885
16886         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16887
16888 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16889
16890         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16891
16892 2004-09-10  Martin Baulig  <martin@ximian.com>
16893
16894         Backported my MemberName changes from GMCS into MCS.
16895
16896         - we are now using a special `MemberName' class instead of using
16897         strings; in GMCS, the `MemberName' also contains the type
16898         arguments.
16899
16900         - changed the grammar rules a bit:
16901           * the old `member_name' is now a `namespace_or_type_name':
16902             The rule is that we use `namespace_or_type_name' everywhere
16903             where we expect either a "member name" (GetEnumerator) or a
16904             "member name" with an explicit interface name
16905             (IEnumerable.GetEnumerator).
16906             In GMCS, the explicit interface name may include type arguments
16907             (IEnumerable<T>.GetEnumerator).
16908           * we use `member_name' instead of just `IDENTIFIER' for
16909             "member names":
16910             The rule is that we use `member_name' wherever a member may
16911             have type parameters in GMCS.       
16912
16913         * decl.cs (MemberName): New public class.
16914         (MemberCore.MemberName): New public readonly field.
16915         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16916         (DeclSpace): Likewise.
16917
16918         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16919         * enum.cs (Enum.ctor): Likewise.
16920
16921         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16922         MemberName.     
16923         (AliasEntry.ctor): Take a MemberName, not an Expression.
16924         (AliasEntry.UsingAlias): Likewise.
16925
16926         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16927         (IMethodData.MemberName): Changed type from string to MemberName.
16928         (MemberBase.ExplicitInterfaceName): Likewise.
16929         (AbstractPropertyEventMethod.SetupName): Make this private.
16930         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16931         argument; compute the member name here.
16932         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16933         on the `member.MemberName' and the `prefix'.
16934
16935         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16936         not `type_name'.
16937         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16938         thus, we get a `MemberName' instead of a `string'.  These
16939         declarations may have type parameters in GMCS.
16940         (interface_method_declaration, delegate_declaration): Likewise.
16941         (class_declaration, interface_declaration): Likewise.
16942         (method_header): Use `namespace_or_type_name' instead of
16943         `member_name'.  We may be an explicit interface implementation.
16944         (property_declaration, event_declaration): Likewise.
16945         (member_name): This is now just an `IDENTIFIER', not a
16946         `namespace_or_type_name'.
16947         (type_name, interface_type): Removed.
16948         (namespace_or_type_name): Return a MemberName, not an Expression.
16949         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16950         call GetTypeExpression() on the MemberName to get an expression.
16951         (IndexerDeclaration.interface_type): Changed type from string to
16952         MemberName.
16953         (MakeName): Operate on MemberName's instead of string's.
16954
16955 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16956
16957         Fix bug #55770.
16958         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16959         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16960         lookup to avoid symbols introduced by 'using'.
16961         * rootcontext.cs (NamespaceLookup): Update.
16962
16963 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16964
16965         * class.cs (TypeContainer.DoDefineMembers): Do not call
16966         DefineDefaultConstructor for static classes.
16967
16968 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16969
16970         * attribute.cs (Attribute.Resolve): Add error 653 report.
16971
16972         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16973         report.
16974         (Method.ApplyAttributeBuilder): Add error 685 report.
16975         (Operator.Define): Add error 564 report.
16976
16977         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16978
16979         * expression.cs (Invocation.DoResolve): Add error
16980         245 and 250 report.
16981
16982         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16983         error 674 report.
16984
16985 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16986
16987         * class.cs (ConstructorInitializer.Resolve):
16988         Wrong error number (515->516).
16989
16990 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16991
16992         * class.cs (Indexer.Define): Add error 631 report.
16993
16994 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16995
16996         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16997
16998 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16999
17000         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17001
17002 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17003
17004         * cs-parser.jay: Added error CS0241 report.
17005
17006 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17007
17008         * cs-parser.jay (fixed_statement): Introduce a scope for the
17009         declaration in the 'fixed' statement.
17010
17011 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17012
17013         * cs-parser.jay: Added CS0230 error report.
17014
17015 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17016
17017         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17018
17019 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17020
17021         * expression.cs (Argument.Resolve): Added error CS0192 and
17022         CS0199 report.
17023
17024 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17025
17026         C# 2.0 #pragma warning feature
17027
17028         * cs-tokenizer.cs (PreProcessPragma): New method; 
17029         Handles #pragma directive.
17030
17031         * report.cs (WarningRegions): New class; Support
17032         class for #pragma warning directive. It tests whether
17033         warning is enabled for a given line.
17034
17035 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17036
17037         * const.cs: Add more descriptive error report, tahnks to
17038         Sebastien. 
17039
17040 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17041
17042         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17043
17044 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17045
17046         * expression.cs: Apply patch from Ben: Remove dead code from
17047         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17048         as that code just threw an exception anwyays.
17049
17050         * const.cs: Remove the call to the turnintoconstant, for details
17051         see bug: #63144
17052         
17053         * literal.cs: The type of the null-literal is the null type;  So
17054         we use a placeholder type (literal.cs:System.Null, defined here)
17055         for it.
17056
17057         * expression.cs (Conditional.DoResolve): Remove some old code that
17058         is no longer needed, conversions have been fixed.
17059
17060         (ArrayCreationExpression.DoResolve): Return false if we fail to
17061         resolve the inner expression.
17062
17063 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17064
17065         Fix test-290.cs.
17066         * cs-parser.jay (delegate_declaration): Record a delegate
17067         declaration as a type declaration.
17068         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17069
17070 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17071
17072         * parameter.cs: Do not crash if the type can not be resolved. 
17073
17074         * expression.cs: Report errors with unsafe pointers, fixes #64896
17075
17076 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17077
17078         * expression.cs: Pointer arith always needs to do a conv.i
17079         if the operand is a long. fix 65320
17080
17081 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17082
17083         Fixed cs0619-37.cs, cs0619-38.cs
17084
17085         * enum.cs (GetObsoleteAttribute): Removed.
17086
17087         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17088         on Enum member is double staged. The first is tested member
17089         and then enum.
17090
17091 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17092
17093         Fixed #56986, #63631, #65231
17094
17095         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17096         adds member to name container.
17097         (TypeContainer.AddToTypeContainer): New method, adds type to
17098         name container.
17099         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17100         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17101         AddOperator): Simplified by reusing AddToMemberContainer.
17102         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17103         instead of field.
17104         (Method.CheckForDuplications): Fixed implementation to test all
17105         possibilities.
17106         (MemberBase): Detection whether member is explicit interface
17107         implementation is now in constructor.
17108         (MemberBase.UpdateMemberName): Handles IndexerName.
17109         (Accessor): Changed to keep also location information.
17110         (AbstractPropertyEventMethod): Is derived from MemberCore.
17111         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17112         will be emited or not.
17113         (PropertyBase.AreAccessorsDuplicateImplementation):
17114         Tests whether accessors are not in collision with some method.
17115         (Operator): Is derived from MethodCore to simplify common
17116         operations.
17117
17118         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17119         must be performed.
17120         (DeclSpace.AddToContainer): Adds the member to defined_names
17121         table. It tests for duplications and enclosing name conflicts.
17122
17123         * enum.cs (EnumMember): Clean up to reuse the base structures
17124
17125 2004-09-03  Martin Baulig  <martin@ximian.com>
17126
17127         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17128         into TypeContainer, to make partial classes work again.
17129
17130 2004-09-03  Martin Baulig  <martin@ximian.com>
17131
17132         * rootcontext.cs (RootContext.V2): Removed.
17133
17134 2004-03-23  Martin Baulig  <martin@ximian.com>
17135
17136         * expression.cs (Invocation.OverloadResolve): Added `bool
17137         may_fail' argument and use it instead of the Location.IsNull() hack.
17138
17139 2004-09-03  Martin Baulig  <martin@ximian.com>
17140
17141         Merged latest changes into gmcs.  Please keep this comment in
17142         here, it makes it easier for me to see what changed in MCS since
17143         the last time I merged.
17144
17145 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17146
17147         Fix #61128.
17148         * expression.cs (BetterConversion): Don't allow either conversion 
17149         to be null.  Remove redundant implicit conversion test when 'q ==
17150         null' -- when this function is invoked, we already know that the
17151         implicit conversion exists.
17152         (BetterFunction): Assume that 'best' is non-null.  Remove
17153         redundant reimplementation of IsApplicable when 'best' is null.
17154         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17155         number of arguments.
17156         (IsAncestralType): Extract from OverloadResolve.
17157         (OverloadResolve): Make robust to the MethodGroupExpr being
17158         unsorted.  Implement all the logic of Section 14.5.5.1, and
17159         support overloading of methods from multiple applicable types.
17160         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17161
17162         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17163         (RealError, Warning): Append type of report to related symbol.
17164
17165 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17166
17167         * enum.cs: Fixed CLS-Compliance checks for enum members.
17168         Error tests cs3008-8.cs, cs3014-8.cs
17169
17170 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17171
17172         Fixed bug #62342, #63102
17173         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17174         like ImplementMethod.
17175
17176 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17177
17178         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17179         Fixed bug #65170.
17180
17181 2004-09-02  Martin Baulig  <martin@ximian.com>
17182
17183         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17184         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17185         on the MethodBase.
17186
17187 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17188
17189         C# 2.0 Static classes implemented
17190
17191         * class.cs (TypeContainer): instance_constructors,
17192         initialized_fields, initialized_static_fields,
17193         default_constructor, base_inteface_types are protected to be
17194         accessible from StaticClass.
17195         (TypeContainer.DefineDefaultConstructor): New virtual method
17196         for custom default constructor generating
17197         (StaticClass): New class to handle "Static classes" feature.
17198
17199         * cs-parser.jay: Handle static keyword on class like instance
17200         of StaticClass.
17201
17202         * driver.cs: Added "/langversion" command line switch with two
17203         options (iso-1, default).
17204
17205 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17206
17207         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17208
17209 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17210
17211         * delegate.cs: Style.
17212
17213 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17214
17215         * delegate.cs: Add seperate instance expr field for miguel.
17216
17217 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17218
17219         * PointerArithmetic (Resolve): make sure we are not doing
17220         pointer arith on void*. Also, make sure we are resolved
17221         by not setting eclass until resolve.
17222
17223         All callers: Make sure that PointerArithmetic gets resolved.
17224
17225 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17226
17227         * ArrayCreation (LookupType): If the type does not resolve 
17228         to an array, give an error.
17229
17230 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17231
17232         * statement.cs (Try.Resolve): Fixed bug #64222
17233
17234 2004-08-27  Martin Baulig  <martin@ximian.com>
17235
17236         * class.cs
17237         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17238         crash here.     
17239
17240 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17241
17242         * ecore.cs (Constantify): Get underlying type via
17243         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17244         Windows in special cases.
17245
17246 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17247
17248         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17249         for obtaining also private methods.
17250         (GetRemoveMethod): Used GetRemoveMethod (true)
17251         for obtaining also private methods.
17252
17253 2004-08-24  Martin Baulig  <martin@ximian.com>
17254
17255         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17256         MethodAttributes.HideBySig for operators.
17257
17258 2004-08-23  Martin Baulig  <martin@ximian.com>
17259
17260         Back to the old error reporting system :-)
17261
17262         * report.cs (Message): Removed.
17263         (Report.MessageData, ErrorData, WarningData): Removed.
17264         (Report.Error, Warning): Back to the old system.
17265
17266 2004-08-23  Martin Baulig  <martin@ximian.com>
17267
17268         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17269
17270         * class.cs (TypeContainer.ParentContainer): New public virtual
17271         method; replaces the explicit interface implementation.
17272         (ClassPart.ParentContainer): Override.
17273
17274 2004-08-23  Martin Baulig  <martin@ximian.com>
17275
17276         * statement.cs (Switch): Added support for constant switches; see
17277         #59428 or test-285.cs.
17278
17279 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17280
17281         Fixed bug #62740.
17282         * statement.cs (GetEnumeratorFilter): Removed useless
17283         logic because C# specs is strict. GetEnumerator must be
17284         public.
17285
17286 2004-08-22  Martin Baulig  <martin@ximian.com>
17287
17288         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17289         a switch and may break, reset the barrier.  Fixes #59867.
17290
17291 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17292
17293         CLS-Compliance speed up (~5% for corlib)
17294
17295         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17296         New method. Tests container for CLS-Compliant names
17297
17298         * class.cs (TypeContainer.VerifyClsName): New method.
17299         Checks whether container name is CLS Compliant.
17300         (Constructor): Implements IMethodData.
17301
17302         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17303         low-case table for CLS Compliance test.
17304         (MemberCache.VerifyClsParameterConflict): New method.
17305         Checks method parameters for CS3006 error.
17306
17307         * enum.cs (EnumMember): Is derived from MemberCore.
17308         (Enum.VerifyClsName): Optimized for better performance.
17309
17310 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17311
17312         * report.cs: Renamed Error_T to Error and changed all
17313         references.
17314
17315 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17316
17317         * class.cs (TypeContainer.IndexerArrayList): New inner class
17318         container for indexers.
17319         (TypeContainer.DefaultIndexerName): New constant for default
17320         indexer name. Replaced all "Item" with this constant.
17321         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17322
17323         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17324         DefaultMemberAttribute constructor.
17325
17326 2004-08-05  Martin Baulig  <martin@ximian.com>
17327
17328         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17329         Fix bug #59429.
17330
17331 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17332
17333         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17334         multi platforms problem.
17335
17336         * compiler.csproj: Included shared files.
17337
17338 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17339
17340         Fix bug 60333, 55971 in the more general way
17341         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17342         Added arg_type argument for constant conversion.
17343         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17344
17345 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17346
17347         Fix bug #59760
17348         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17349         OperatorArrayList, MethodCoreArrayList for typecontainer
17350         containers. Changed class member types to these new types.
17351         (MethodArrayList.DefineMembers): Added test for CS0659.
17352
17353 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17354
17355         * cfold.cs: Synchronize the folding with the code in expression.cs
17356         Binary.DoNumericPromotions for uint operands.
17357
17358         * attribute.cs: Revert patch from Raja, it introduced a regression
17359         while building Blam-1.2.1 (hard to isolate a test case).
17360
17361 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17362
17363         Fix for #55382
17364         * class.cs:
17365         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17366         name collision.
17367         (MethodCore.parent_method): New member. The method we're overriding
17368         if this is an override method.
17369         (MethodCore.CheckBase): Moved from Method class and made common.
17370         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17371         private.
17372         (MethodCore.CheckForDuplications): New abstract method. For custom
17373         member duplication search in a container
17374         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17375         method and its return type.
17376         (Event.conflict_symbol): New member. Symbol with same name in the
17377         parent class.
17378
17379         * decl.cs:
17380         (MemberCache.FindMemberWithSameName): New method. The method
17381         is looking for conflict with inherited symbols.
17382
17383 2004-08-04  Martin Baulig  <martin@ximian.com>
17384
17385         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17386
17387         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17388
17389 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17390
17391         * report.cs (Message): New enum for better error, warning reference in
17392         the code.
17393         (MessageData): New inner abstract class. It generally handles printing of
17394         error and warning messages.
17395         Removed unused Error, Warning, Message methods.
17396
17397 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17398
17399         Fix for cs0592-8.cs test
17400         * attribute.cs
17401         (Attributable.ValidAttributeTargets): Made public.
17402         (Attribute.ExplicitTarget): New member for explicit target value.
17403         (Attribute.CheckTargets): Now we translate explicit attribute
17404         target to Target here.
17405
17406 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17407
17408         * ecore.cs (MethodGroupExpr): new IsBase property.
17409
17410         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17411
17412         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17413         rather than an instance expr.
17414
17415         (DelegateCreation.Emit): Use the method group rather than
17416         the instance expression. Also, if you have base.Foo as the
17417         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17418
17419         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17420
17421         (NewDelegate.DoResolve): Only check for the existance of Invoke
17422         if the method is going to be needed. Use MethodGroupExpr.
17423
17424         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17425
17426         * expression.cs: For pointer arith., make sure to use
17427         the size of the type, not the size of the pointer to
17428         the type.
17429
17430 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17431
17432         Fix for #60722
17433         * class.cs (Class): Added error CS0502 test.
17434
17435 2004-08-03  John Luke  <jluke@cfl.rr.com>
17436             Raja R Harinath  <rharinath@novell.com>
17437
17438         Fix for #60997.
17439         * attribute.cs (Attribute.complained_before): New flag.
17440         (Attribute.ResolveType, Attribute.Resolve),
17441         (Attribute.DefinePInvokeMethod): Set it.
17442         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17443         
17444 2004-08-03  Martin Baulig  <martin@ximian.com>
17445
17446         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17447         use a user-defined operator; we still need to do numeric
17448         promotions in case one argument is a builtin type and the other
17449         one has an implicit conversion to that type.  Fixes #62322.
17450
17451 2004-08-02  Martin Baulig  <martin@ximian.com>
17452
17453         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17454         (LocalInfo.IsThis): New public property.
17455         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17456
17457 2004-08-01  Martin Baulig  <martin@ximian.com>
17458
17459         * class.cs (TypeContainer.GetClassBases): Don't set the default
17460         here since we may get called from GetPartialBases().
17461         (TypeContainer.DefineType): If GetClassBases() didn't return a
17462         parent, use the default one.
17463
17464 2004-07-30  Duncan Mak  <duncan@ximian.com>
17465
17466         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17467
17468 2004-07-30  Martin Baulig  <martin@ximian.com>
17469
17470         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17471
17472         * class.cs (SourceMethod): New public class, derive from the
17473         symbol writer's ISourceMethod.
17474         (Method): Use the new symbol writer API.
17475
17476         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17477         as argument and use the new symbol writer.
17478
17479         * location.cs
17480         (SourceFile): Implement the symbol writer's ISourceFile.
17481         (Location.SymbolDocument): Removed.
17482         (Location.SourceFile): New public property.
17483
17484         * symbolwriter.cs: Use the new symbol writer API.
17485
17486 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17487
17488         * Makefile (install-local): Remove.  Functionality moved to
17489         executable.make.
17490
17491 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17492
17493         * Makefile: Install mcs.exe.config file together with mcs.exe.
17494         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17495         correct runtime version.
17496         
17497 2004-07-25  Martin Baulig  <martin@ximian.com>
17498
17499         * class.cs
17500         (TypeContainer.RegisterOrder): Removed, this was unused.
17501         (TypeContainer, interface_order): Removed.
17502         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17503         TypeContainer as argument since we can also be called with a
17504         `PartialContainer' for a partial class/struct/interface.
17505         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17506         of checking whether we're an `Interface' - we could be a
17507         `PartialContainer'.
17508         (PartialContainer.Register): Override; call
17509         AddClass()/AddStruct()/AddInterface() on our parent.
17510
17511         * cs-parser.jay (interface_member_declaration): Add things to the
17512         `current_container', not the `current_class'.
17513
17514         * rootcontext.cs (RegisterOrder): The overloaded version which
17515         takes an `Interface' was unused, removed.
17516
17517         * typemanager.cs (TypeManager.LookupInterface): Return a
17518         `TypeContainer', not an `Interface'.
17519         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17520         contain a `PartialContainer' for an interface, so check it's
17521         `Kind' to figure out what it is.
17522
17523 2004-07-25  Martin Baulig  <martin@ximian.com>
17524
17525         * class.cs (Class.DefaultTypeAttributes): New public constant.
17526         (Struct.DefaultTypeAttributes): Likewise.
17527         (Interface.DefaultTypeAttributes): Likewise.
17528         (PartialContainer.TypeAttr): Override this and add the
17529         DefaultTypeAttributes.
17530
17531 2004-07-25  Martin Baulig  <martin@ximian.com>
17532
17533         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17534         we can just use the `Parent' field instead.
17535
17536 2004-07-25  Martin Baulig  <martin@ximian.com>
17537
17538         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17539
17540 2004-07-25  Martin Baulig  <martin@ximian.com>
17541
17542         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17543         our parts before defining any methods.
17544         (TypeContainer.VerifyImplements): Make this virtual.
17545         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17546         on our PartialContainer.
17547
17548 2004-07-25  Martin Baulig  <martin@ximian.com>
17549
17550         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17551
17552         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17553         argument, we can just use the `Parent' field instead.
17554
17555         * class.cs
17556         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17557         (MemberBase.DoDefine): Likewise.
17558
17559 2004-07-24  Martin Baulig  <martin@ximian.com>
17560
17561         * decl.cs (MemberCore.Parent): New public field.
17562         (DeclSpace.Parent): Moved to MemberCore.
17563
17564         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17565         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17566         parent's .ctor.
17567         (FieldBase, Field, Operator): Likewise.
17568         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17569         (EventField, Event): Likewise.
17570
17571 2004-07-23  Martin Baulig  <martin@ximian.com>
17572
17573         * class.cs (PartialContainer): New public class.
17574         (ClassPart): New public class.
17575         (TypeContainer): Added support for partial classes.
17576         (TypeContainer.GetClassBases): Splitted some of the functionality
17577         out into GetNormalBases() and GetPartialBases().
17578
17579         * cs-tokenizer.cs (Token.PARTIAL): New token.
17580         (Tokenizer.consume_identifier): Added some hacks to recognize
17581         `partial', but only if it's immediately followed by `class',
17582         `struct' or `interface'.
17583
17584         * cs-parser.jay: Added support for partial clases.
17585
17586 2004-07-23  Martin Baulig  <martin@ximian.com>
17587
17588         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17589         a `DeclSpace' and also made it readonly.
17590         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17591         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17592         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17593
17594         * cs-parser.jay: Pass the `current_class', not the
17595         `current_container' (at the moment, this is still the same thing)
17596         to a new Method, Property, Event, Indexer or Constructor.
17597
17598 2004-07-23  Martin Baulig  <martin@ximian.com>
17599
17600         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17601         and removed the `current_interface' one.
17602         (struct_declaration, class_declaration, interface_declaration):
17603         Set `current_class' to the newly created class/struct/interface;
17604         set their `Bases' and call Register() before parsing their body.
17605
17606 2004-07-23  Martin Baulig  <martin@ximian.com>
17607
17608         * class.cs (Kind): New public enum.
17609         (TypeContainer): Made this class abstract.
17610         (TypeContainer.Kind): New public readonly field.
17611         (TypeContainer.CheckDef): New public method; moved here from
17612         cs-parser.jay.
17613         (TypeContainer.Register): New public abstract method.
17614         (TypeContainer.GetPendingImplementations): New public abstract
17615         method.
17616         (TypeContainer.GetClassBases): Removed the `is_class' and
17617         `is_iface' parameters.
17618         (TypeContainer.DefineNestedTypes): Formerly known as
17619         DoDefineType().
17620         (ClassOrStruct): Made this class abstract.
17621
17622         * tree.cs (RootTypes): New public type. 
17623
17624 2004-07-20  Martin Baulig  <martin@ximian.com>
17625
17626         * tree.cs (Tree.RecordNamespace): Removed.
17627         (Tree.Namespaces): Removed.
17628
17629         * rootcontext.cs (RootContext.IsNamespace): Removed.
17630
17631         * cs-parser.jay (namespace_declaration): Just create a new
17632         NamespaceEntry here.
17633
17634 2004-07-20  Martin Baulig  <martin@ximian.com>
17635
17636         * statement.cs (ExceptionStatement): New abstract class.  This is
17637         now used as a base class for everyone who's using `finally'.
17638         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17639         our local variables before using them.
17640
17641         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17642         virtual method.  This is used by Yield.Resolve() to "steal" an
17643         outer block's `finally' clauses.
17644         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17645         argument.
17646
17647         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17648         version which takes an ExceptionStatement.  This version must be
17649         used to create exception branchings.
17650
17651         * iterator.cs
17652         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17653         (Iterator.EmitMoveNext): Added exception support; protect the
17654         block with a `fault' clause, properly handle 'finally' clauses.
17655         (Iterator.EmitDispose): Run all the `finally' clauses here.
17656
17657 2004-07-20  Martin Baulig  <martin@ximian.com>
17658
17659         * iterator.cs: This is the first of a set of changes in the
17660         iterator code.  Match the spec more closely: if we're an
17661         IEnumerable, then GetEnumerator() must be called.  The first time
17662         GetEnumerator() is called, it returns the current instance; all
17663         subsequent invocations (if any) must create a copy.
17664
17665 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17666
17667         * expression.cs: Resolve the constant expression before returning
17668         it. 
17669
17670 2004-07-19  Martin Baulig  <martin@ximian.com>
17671
17672         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17673         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17674         the return type of the new EmitContext.
17675
17676 2004-07-18  Martin Baulig  <martin@ximian.com>
17677
17678         * class.cs (Property.Define): Fix iterators.
17679
17680         * iterators.cs (Iterator.Define): Moved the
17681         `container.AddInterator (this)' call here from the .ctor; only do
17682         it if we resolved successfully.
17683
17684 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17685
17686         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17687         `true' for preprocessing directives that we parse.  The return
17688         value indicates whether we should return to regular tokenizing or
17689         not, not whether it was parsed successfully.
17690
17691         In the past if we were in: #if false ... #line #endif, we would
17692         resume parsing after `#line'.  See bug 61604.
17693
17694         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17695         building: IsEnumType should return true only for enums, not for
17696         enums or System.Enum itself.  This fixes #61593.
17697
17698         Likely what happened is that corlib was wrong: mcs depended on
17699         this bug in some places.  The bug got fixed, we had to add the
17700         hack, which caused bug 61593.
17701
17702         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17703         that was a workaround for the older conditions.
17704
17705 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17706
17707         * assign.cs: IAssignMethod has a new interface, as documented
17708         inline. All assignment code now uses this new api.
17709
17710         * ecore.cs, expression.cs: All classes which implement
17711         IAssignMethod now use the new interface.
17712
17713         * expression.cs (Invocation): add a hack to EmitCall so that
17714         IndexerAccess can be the target of a compound assignment without
17715         evaluating its arguments twice.
17716
17717         * statement.cs: Handle changes in Invocation api.
17718
17719 2004-07-16  Martin Baulig  <martin@ximian.com>
17720
17721         * iterators.cs: Rewrote this.  We're now using one single Proxy
17722         class for both the IEnumerable and the IEnumerator interface and
17723         `Iterator' derives from Class so we can use the high-level API.
17724
17725         * class.cs (TypeContainer.AddIterator): New method.
17726         (TypeContainer.DoDefineType): New protected virtual method, which
17727         is called from DefineType().
17728         (TypeContainer.DoDefineMembers): Call DefineType() and
17729         DefineMembers() on all our iterators.
17730         (TypeContainer.Emit): Call Emit() on all our iterators.
17731         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17732
17733         * codegen.cs (EmitContext.CurrentIterator): New public field.
17734
17735 2004-07-15  Martin Baulig  <martin@ximian.com>
17736
17737         * typemanager.cs
17738         (TypeManager.not_supported_exception_type): New type.   
17739
17740 2004-07-14  Martin Baulig  <martin@ximian.com>
17741
17742         * iterators.cs: Use real error numbers.
17743
17744 2004-07-14  Martin Baulig  <martin@ximian.com>
17745
17746         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17747         requires this to be a System.Collection.IEnumerable and not a
17748         class implementing that interface.
17749         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17750
17751 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17752
17753         * class.cs: Fixed previous fix, it broke some error tests.
17754
17755 2004-07-12  Martin Baulig  <martin@ximian.com>
17756
17757         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17758         Fixes #61293.
17759
17760 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17761
17762         * assign.cs (LocalTemporary): Add new argument: is_address,If
17763         `is_address' is true, then the value that we store is the address
17764         to the real value, and not the value itself.
17765         
17766         * ecore.cs (PropertyExpr): use the new local temporary
17767         stuff to allow us to handle X.Y += z (where X is a struct)
17768
17769 2004-07-08  Martin Baulig  <martin@ximian.com>
17770
17771         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17772         not always return, just like we're doing in Using.Resolve().
17773
17774 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17775
17776         * cs-parser.jay (fixed_statement): flag this as Pinned.
17777
17778 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17779
17780         * typemanager.cs (TypeManager): Removed MakePinned method, this
17781         mechanism is replaced with the .NET 2.x compatible mechanism of
17782         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17783
17784         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17785         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17786         `IsFixed' property which has a different meaning.
17787
17788 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17789
17790         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17791         visible from inside a nested class, not just the names of the
17792         immediately enclosing class.
17793         Fix for bug #60730.
17794
17795 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17796
17797         * expression.cs (BetterConversion): Remove buggy special-case
17798         handling of "implicit constant expression conversions".  At this
17799         point, we already know that the conversion is possible -- we're
17800         only checking to see which is better.
17801
17802 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17803
17804         * cs-parser.jay: Added error CS0210 test.
17805
17806 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17807
17808         * cs-parser.jay: Added error CS0134 test.
17809
17810 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17811
17812         Fix bug #52507
17813         * cs-parser.jay: Added error CS0145 test.
17814
17815 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17816
17817         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17818
17819 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17820         
17821         * expression.cs (StackAlloc.Resolve): The argument may not
17822         be a constant; deal with this case.
17823         
17824 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17825
17826         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17827         GetIndexerAttributeValue.
17828         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17829
17830         * class.cs (Indexer.Define): Added error tests for CS0415,
17831         CS0609.
17832
17833 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17834
17835         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17836         property code.
17837
17838 2004-06-23  Martin Baulig  <martin@ximian.com>
17839
17840         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17841         neither return nor throw, reset the barrier as well.  Fixes #60457.
17842
17843 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17844
17845         * class.cs : EventAttributes is now set to None by default.
17846           This fixes bug #60459.
17847
17848 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17849
17850         Fix bug #60219
17851         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17852         Don't throw exception but return null (it's sufficient now).
17853
17854 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17855
17856         * typemanager.cs (GetArgumentTypes): Faster implementation.
17857
17858 2004-06-18  Martin Baulig  <martin@ximian.com>
17859
17860         * attribute.cs (Attribute.Resolve): Check whether we're an
17861         EmptyCast which a Constant child.  Fixes #60333.
17862
17863 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17864
17865         * statement.cs (EmitCollectionForeach): Account for the fact that
17866         not all valuetypes are in areas which we can take the address of.
17867         For these variables, we store to a temporary variable. Also, make
17868         sure that we dont emit a `callvirt' on a valuetype method.
17869
17870 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17871
17872         * expression.cs (StackAlloc.DoReSolve): Added test for
17873         negative parameter (CS0247).
17874
17875 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17876
17877         Fix bug #59792
17878         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17879
17880 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17881
17882         Fix bug #59781
17883         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17884         ulong.
17885
17886 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17887
17888         Fix bug #58254 & cs1555.cs, cs1556.cs
17889         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17890
17891 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17892
17893         * cs-parser.jay: Added error CS1669 test for indexers.
17894
17895 2004-06-11  Martin Baulig  <martin@ximian.com>
17896
17897         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17898         call this twice: for params and varargs methods.
17899
17900 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17901
17902         * class.cs:
17903         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17904
17905 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17906
17907         * attribute.cs (Attribute.GetValidTargets): Made public.
17908
17909         * class.cs: 
17910         (AbstractPropertyEventMethod): New class for better code sharing.
17911         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17912         CS1667 report.
17913         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17914
17915 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17916
17917         Fix bug #59477.
17918         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17919         that the call to Resolve is part of a MemberAccess.
17920         (Expression.Resolve): Use it for SimpleName resolution.
17921         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17922         Add 'intermediate' boolean argument.
17923         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17924         error message when the SimpleName can be resolved ambiguously
17925         between an expression and a type.
17926         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17927         public.
17928         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17929         call on the left-side.
17930
17931 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17932
17933         * class.cs:
17934         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17935
17936 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17937
17938         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17939
17940 2004-06-11  Martin Baulig  <martin@ximian.com>
17941
17942         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17943         varargs methods if applicable.
17944
17945 2004-06-11  Martin Baulig  <martin@ximian.com>
17946
17947         * expression.cs (Invocation.EmitCall): Don't use
17948         `method.CallingConvention == CallingConventions.VarArgs' since the
17949         method could also have `CallingConventions.HasThis'.
17950
17951 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17952
17953         * class.cs (Event.GetSignatureForError): Implemented.
17954         Fixed crash in error test cs3010.cs
17955
17956 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17957
17958         * cs-tokenizer.cs: Change the way we track __arglist to be
17959         consistent with the other keywords.
17960
17961 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17962
17963         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17964         tomorrow.
17965
17966 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17967
17968         * codegen.cs: Check that all referenced assemblies have a strongname
17969         before strongnaming the compiled assembly. If not report error CS1577.
17970         Fix bug #56563. Patch by Jackson Harper.
17971         * typemanager.cs: Added a method to return all referenced assemblies.
17972         Fix bug #56563. Patch by Jackson Harper.
17973
17974 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17975
17976         * class.cs:
17977         (Method.ApplyAttributeBuilder): Moved and added conditional
17978         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17979
17980         * delegate.cs:
17981         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17982
17983 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17984
17985         Fixed #59640
17986         * class.cs: (EventField.attribute_targets): Changed default target.
17987
17988 2004-06-08  Martin Baulig  <martin@ximian.com>
17989
17990         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17991
17992 2004-06-08  Martin Baulig  <martin@ximian.com>
17993
17994         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17995
17996 2004-06-07  Martin Baulig  <martin@ximian.com>
17997
17998         Added support for varargs methods.
17999
18000         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18001         keyword.
18002
18003         * cs-parser.jay: Added support for `__arglist'.
18004
18005         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18006
18007         * expression.cs (Argument.AType): Added `ArgList'.
18008         (Invocation): Added support for varargs methods.
18009         (ArglistAccess): New public class.
18010         (Arglist): New public class.
18011
18012         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18013
18014         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18015         a method's top-level block if the method has varargs.
18016
18017         * support.cs (ReflectionParameters, InternalParameters): Added
18018         support for varargs methods.    
18019
18020 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18021
18022         * class.cs: Provide location in indexer error report.
18023
18024         * driver.cs: Use standard names.
18025
18026         * namespace.cs: Catch the use of using after a namespace has been
18027         declared also on using aliases.
18028
18029 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18030
18031         Bug #50820.
18032         * typemanager.cs (closure_private_ok, closure_invocation_type)
18033         (closure_qualifier_type, closure_invocation_assembly)
18034         (FilterWithClosure): Move to ...
18035         (Closure): New internal nested class.
18036         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18037         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18038         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18039         (MemberLookup, MemberLookupFailed): Use it.
18040         * expression.cs (New.DoResolve): Treat the lookup for the
18041         constructor as being qualified by the 'new'ed type.
18042         (Indexers.GetIndexersForTypeOrInterface): Update.
18043
18044 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18045
18046         * attribute.cs
18047         (GetConditionalAttributeValue): New method. Returns
18048         condition of ConditionalAttribute.
18049         (SearchMulti): New method.  Returns all attributes of type 't'.
18050         Use it when attribute is AllowMultiple = true.
18051         (IsConditionalMethodExcluded): New method.
18052
18053         * class.cs
18054         (Method.IsExcluded): Implemented. Returns true if method has conditional
18055         attribute and the conditions is not defined (method is excluded).
18056         (IMethodData): Extended interface for ConditionalAttribute support.
18057         (PropertyMethod.IsExcluded): Implemented.
18058
18059         * decl.cs
18060         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18061
18062         * expression.cs
18063         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18064         on the method.
18065
18066 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18067
18068         * expression.cs (ArrayCreationExpression): Make this just an
18069         `expression'. It can't be a statement, so the code here was
18070         dead.
18071
18072 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18073
18074         Fixed #59072
18075         * typemanager.cs (GetFullNameSignature): New method for
18076         MethodBase types.
18077
18078 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18079
18080         Fixed #56452
18081         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18082         Use this method when MethodBuilder is null.
18083         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18084         Added test for error CS0626 (MONO reports error for this situation).
18085         (IMethodData.GetSignatureForError): Extended interface.
18086
18087 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18088
18089         * attribute.cs
18090         (AttributeTester.GetObsoleteAttribute): Returns instance of
18091         ObsoleteAttribute when type is obsolete.
18092
18093         * class.cs
18094         (TypeContainer.VerifyObsoleteAttribute): Override.
18095         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18096         (MethodCode.VerifyObsoleteAttribute): Override.
18097         (MemberBase.VerifyObsoleteAttribute): Override.
18098
18099         * decl.cs
18100         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18101         and report proper error.
18102
18103         *delegate.cs
18104         Delegate.VerifyObsoleteAttribute): Override.
18105
18106         * ecore.cs
18107         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18108         and report proper error.
18109         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18110
18111         * enum.cs
18112         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18113         and enum member.
18114
18115         * expression.cs
18116         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18117         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18118         Added test for ObsoleteAttribute.
18119
18120         * statement.cs
18121         (Catch): Derived from Statement.
18122
18123 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18124  
18125         Fixed bug #59071 & cs0160.cs
18126  
18127         * statement.cs (Try.Resolve): Check here whether order of catch
18128         clauses matches their dependencies.
18129
18130 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18131
18132         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18133         caused a regression: #59343.  Referencing nested classes from an
18134         assembly stopped working.
18135
18136 2004-05-31  Martin Baulig  <martin@ximian.com>
18137
18138         MCS is now frozen for beta 2.
18139
18140 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18141
18142         * convert.cs: add a trivial cache for overload operator resolution.
18143
18144 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18145
18146         * decl.cs: If possible, use lookuptypedirect here. We can only do
18147         this if there is no `.' after the namespace. Avoids using
18148         LookupType, which does lots of slow processing.
18149         (FindNestedType) New method, does what it says :-).
18150         * namespace.cs: use LookupTypeDirect.
18151         * rootcontext.cs: use membercache, if possible.
18152         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18153
18154 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18155
18156         * expression.cs:
18157         According to the spec, 
18158
18159         In a member access of the form E.I, if E is a single identifier,
18160         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18161         field, property, localvariable, or parameter with the same type as
18162         the meaning of E as a type-name (§3.8), then both possible
18163         meanings of E are permitted.
18164
18165         We did not check that E as a simple-name had the same type as E as
18166         a type name.
18167
18168         This trivial check gives us 5-7% on bootstrap time.
18169
18170 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18171
18172         * expression.cs (Invocation.OverloadResolve): Avoid the
18173         use of hashtables and boxing here by allocating on demand.
18174
18175 2004-05-30  Martin Baulig  <martin@ximian.com>
18176
18177         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18178         we're doing a silent lookup.  Don't try to lookup nested types in
18179         TypeManager.object_type (thanks to Ben Maurer).
18180
18181 2004-05-30  Martin Baulig  <martin@ximian.com>
18182
18183         Committing a patch from Ben Maurer.
18184
18185         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18186
18187 2004-05-29  Martin Baulig  <martin@ximian.com>
18188
18189         * class.cs (IMethodData.ShouldIgnore): New method.
18190
18191         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18192         `Location' argument, we don't need it anywhere.  Use
18193         `IMethodData.ShouldIgnore ()' instead of
18194         `MethodData.GetMethodFlags ()'.
18195         (TypeManager.AddMethod): Removed.
18196         (TypeManager.AddMethod2): Renamed to AddMethod.
18197
18198 2004-05-29  Martin Baulig  <martin@ximian.com>
18199
18200         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18201
18202         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18203         converting from a class type S to an interface type and we already
18204         have an object on the stack, don't box it again.  Fixes #52578.
18205
18206 2004-05-29  Martin Baulig  <martin@ximian.com>
18207
18208         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18209         Added support for `params' parameters.  Fixes #59267.
18210
18211 2004-05-29  Martin Baulig  <martin@ximian.com>
18212
18213         * literal.cs (NullPointer): Provide a private .ctor which sets
18214         `type' to TypeManager.object_type.  Fixes #59048.
18215
18216 2004-05-29  Martin Baulig  <martin@ximian.com>
18217
18218         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18219         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18220
18221         * ecore.cs (EventExpr.instance_expr): Make the field private.
18222
18223 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18224
18225         Fixed bug #50080 & cs0214-2.cs
18226         * expression.cs (Cast.DoResolve): Check unsafe context here.
18227         
18228         * statement.cs (Resolve.DoResolve): Likewise.
18229
18230 2004-05-26  Martin Baulig  <martin@ximian.com>
18231
18232         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18233
18234         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18235         (RootContext.LookupType): Pass down the `silent' flag.
18236
18237 2004-05-25  Martin Baulig  <martin@ximian.com>
18238
18239         * expression.cs
18240         (MethodGroupExpr.IdenticalTypeName): New public property.
18241         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18242         expression actually refers to a type.
18243
18244 2004-05-25  Martin Baulig  <martin@ximian.com>
18245
18246         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18247         for #56176 and made it actually work.
18248
18249 2004-05-25  Martin Baulig  <martin@ximian.com>
18250
18251         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18252         (FieldExpr, PropertyExpr): Override and implement
18253         CacheTemporaries.  Fixes #52279.
18254
18255 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18256
18257         * location.cs: In the new compiler listing a file twice is a
18258         warning, not an error.
18259
18260 2004-05-24  Martin Baulig  <martin@ximian.com>
18261
18262         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18263         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18264
18265 2004-05-24  Martin Baulig  <martin@ximian.com>
18266
18267         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18268         walking the `using' list.  Fixes #53921.
18269
18270 2004-05-24  Martin Baulig  <martin@ximian.com>
18271
18272         * const.cs (Const.LookupConstantValue): Added support for
18273         EmptyCast's; fixes #55251.
18274
18275 2004-05-24  Martin Baulig  <martin@ximian.com>
18276
18277         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18278         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18279         which does the CS0135 check.  The reason is that we first need to
18280         check whether the variable actually exists.
18281
18282 2004-05-24  Martin Baulig  <martin@ximian.com>
18283
18284         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18285         than RootContext.LookupType() to find the explicit interface
18286         type.  Fixes #58584.
18287
18288 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18289
18290         * Makefile: Simplify.  Use executable.make.
18291         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18292
18293 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18294
18295         * decl.cs:
18296         * enum.cs:
18297         Use the invariant culture when doing String.Compare for CLS case
18298         sensitivity.
18299         
18300 2004-05-23  Martin Baulig  <martin@ximian.com>
18301
18302         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18303         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18304
18305         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18306         
18307 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18308
18309         * class.cs (MemberBase.Define): Reuse MemberType member for 
18310         resolved type. Other methods can use it too.
18311
18312 2004-05-23  Martin Baulig  <martin@ximian.com>
18313
18314         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18315         the variable also exists in the current block (otherwise, we need
18316         to report a CS0103).  Fixes #58670.
18317
18318 2004-05-23  Martin Baulig  <martin@ximian.com>
18319
18320         * flowanalysis.cs (Reachability.Reachable): Compute this
18321         on-the-fly rather than storing it as a field.
18322
18323 2004-05-23  Martin Baulig  <martin@ximian.com>
18324
18325         * flowanalysis.cs (Reachability.And): Manually compute the
18326         resulting `barrier' from the reachability.      
18327        
18328 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18329
18330         Fix bug #57835
18331         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18332         instance of ObsoleteAttribute when symbol is obsolete.
18333
18334         * class.cs
18335         (IMethodData): Extended interface for ObsoleteAttribute support.
18336
18337 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18338
18339         * attribute.cs: Fix bug #55970
18340
18341 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18342
18343         Fix bug #52705
18344         * attribute.cs
18345         (GetObsoleteAttribute): New method. Creates the instance of
18346         ObsoleteAttribute.
18347         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18348         ObsoleteAttribute when member is obsolete.
18349         (AttributeTester.Report_ObsoleteMessage): Common method for
18350         Obsolete error/warning reporting.
18351
18352         * class.cs
18353         (TypeContainer.base_classs_type): New member for storing parent type.
18354
18355         * decl.cs
18356         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18357         for this MemberCore.
18358
18359 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18360
18361         * attribute.cs, const.cs: Fix bug #58590
18362
18363 2004-05-21  Martin Baulig  <martin@ximian.com>
18364
18365         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18366         out parameters if the end of the method is unreachable.  Fixes
18367         #58098. 
18368
18369 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18370
18371         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18372         Hari was right, why extra method.
18373
18374 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18375
18376         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18377
18378 2004-05-20  Martin Baulig  <martin@ximian.com>
18379
18380         Merged this back from gmcs to keep the differences to a minumum.
18381
18382         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18383         instead of a Declspace.
18384         (Attribute.ResolveType): Likewise.
18385         (Attributes.Search): Likewise.
18386         (Attributes.Contains): Likewise.
18387         (Attributes.GetClsCompliantAttribute): Likewise.
18388
18389         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18390         argument.
18391         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18392         DeclSpace.
18393
18394 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18395
18396         Fix bug #58688 (MCS does not report error when the same attribute
18397         is assigned twice)
18398
18399         * attribute.cs (Attribute.Emit): Distinction between null and default.
18400
18401 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18402
18403         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18404         of a top-level attribute without an attribute target.
18405         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18406         Make non-static.
18407         (Attribute.Conditional_GetConditionName), 
18408         (Attribute.Obsolete_GetObsoleteMessage): Update.
18409         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18410         part of ScanForIndexerName.
18411         (Attribute.CanIgnoreInvalidAttribute): New function.
18412         (Attribute.ScanForIndexerName): Move to ...
18413         (Attributes.ScanForIndexerName): ... here.
18414         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18415         (Attributes.Search): New internal variant that can choose not to
18416         complain if types aren't resolved.  The original signature now
18417         complains.
18418         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18419         complaints suppressed.
18420         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18421         only if it not useful.
18422         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18423         top-level for attributes that are shared between the assembly
18424         and a top-level class.
18425         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18426         * class.cs: Update to reflect changes.
18427         (DefineIndexers): Fuse loops.
18428         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18429         a couple more variants of attribute names.
18430
18431 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18432
18433         Fix bug #52585 (Implemented explicit attribute declaration)
18434
18435         * attribute.cs:
18436         (Attributable.ValidAttributeTargets): New abstract method. It gets
18437         list of valid attribute targets for explicit target declaration.
18438         (Attribute.Target): It holds target itself.
18439         (AttributeSection): Removed.
18440         (Attribute.CheckTargets): New method. It checks whether attribute
18441         target is valid for the current element.
18442
18443         * class.cs:
18444         (EventProperty): New class. For events that are declared like
18445         property (with add and remove accessors).
18446         (EventField): New class. For events that are declared like field.
18447         class.cs
18448
18449         * cs-parser.jay: Implemented explicit attribute target declaration.
18450
18451         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18452         Override ValidAttributeTargets.
18453
18454         * parameter.cs:
18455         (ReturnParameter): Class for applying custom attributes on 
18456         the return type.
18457         (ParameterAtribute): New class. Class for applying custom
18458         attributes on the parameter type.
18459
18460 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18461
18462         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18463         definitions. 
18464
18465         (Method): Allow UNSAFE here.
18466
18467         * modifiers.cs: Support unsafe reporting.
18468
18469 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18470
18471         * decl.cs: Fix bug #58478.
18472
18473 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18474
18475         * statement.cs: When checking for unreachable code on an EmptyStatement,
18476         set the location. Fixes bug #58488.
18477
18478 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18479
18480         * driver.cs: Add -pkg handling.
18481
18482         From Gonzalo: UseShelLExecute=false
18483
18484 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18485
18486         * attribute.cs:
18487         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18488         for attribute.
18489         (Attribute.IsClsCompliaceRequired): Moved to base for better
18490         accesibility.
18491         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18492         when attribute is AttributeUsageAttribute.
18493         (Attribute.GetValidTargets): Simplified.
18494         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18495         attribute for this type.
18496         (Attribute.ApplyAttributes): Method renamed to Emit and make
18497         non-static.
18498         (GlobalAttributeSection): New class for special handling of global
18499         attributes (assembly, module).
18500         (AttributeSection.Emit): New method.
18501
18502         * class.cs: Implemented Attributable abstract methods.
18503         (MethodCore.LabelParameters): Moved to Parameter class.
18504         (Accessor): Is back simple class.
18505         (PropertyMethod): Implemented Attributable abstract class.
18506         (DelegateMethod): Implemented Attributable abstract class.
18507         (Event): New constructor for disctintion between normal Event
18508         and Event with accessors.
18509
18510         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18511
18512         * codegen.cs, const.cs, decl.cs, delegate.cs:
18513         (CommonAssemblyModulClass): Implemented Attributable abstract class
18514         and simplified.
18515
18516         * enum.cs: Implement IAttributeSupport interface.
18517         (EnumMember): New class for emum members. Implemented Attributable
18518         abstract class
18519
18520         * parameter.cs:
18521         (ParameterBase): Is abstract.
18522         (ReturnParameter): New class for easier [return:] attribute handling.
18523
18524         * typemanager.cs: Removed builder_to_attr.
18525
18526 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18527
18528         Fix bug #57151.
18529         * attribute.cs (Attribute.GetPositionalValue): New function.
18530         * class.cs (TypeContainer.VerifyMembers): New function.
18531         (TypeContainer.Emit): Use it.
18532         (ClassOrStruct): New base class for Class and Struct.
18533         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18534         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18535         class.
18536         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18537         then each non-static field should have a FieldOffset attribute.
18538         Otherwise, none of the fields should have a FieldOffset attribute.
18539         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18540         and FieldOffset attributes.
18541         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18542         (TypeManager.field_offset_attribute_type): New core types.
18543         (TypeManager.InitCoreTypes): Initialize them.
18544
18545 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18546
18547         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18548         Return correct type.
18549         From bug #58270.
18550
18551 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18552
18553         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18554         be implicitly converted to ulong.
18555         
18556         * expression.cs: The logic for allowing operator &, | and ^ worked
18557         was wrong, it worked before because we did not report an error in
18558         an else branch.  Fixes 57895.
18559
18560         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18561         allow volatile fields to be reference types.
18562
18563 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18564
18565         * driver.cs: Add support for /debug-
18566
18567 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18568
18569         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18570         Add a 'complain' parameter to silence errors.
18571         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18572         silently overlooked type-resolutions.
18573         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18574         to reflect changes.
18575         (Attributes.Search): New function.
18576         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18577         (Attributes.GetAttributeFullName): Remove hack.
18578         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18579         Update to reflect changes.
18580         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18581         Use Attributes.Search instead of nested loops.
18582
18583 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18584
18585         * decl.cs:
18586         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18587         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18588         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18589
18590         * report.cs: (Report.Warning): Renamed to Warning_T because of
18591         parameter collision.
18592
18593 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18594
18595         * expression.cs (MemberAccess.ResolveMemberAccess):
18596         Exit with non-zero status after Report.Error.
18597         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18598         Likewise.
18599         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18600
18601 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18602
18603         * support.cs: Don't hang when the file is empty.
18604
18605 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18606
18607         * support.cs: In SeekableStreamReader, compute the preamble size of the
18608           underlying stream. Position changes should take into account that initial
18609           count of bytes.
18610
18611 2004-05-03  Todd Berman  <tberman@sevenl.net>
18612
18613         * driver.cs: remove unused GetSysVersion function.
18614
18615 2004-05-03  Todd Berman  <tberman@sevenl.net>
18616
18617         * driver.cs: Remove the hack from saturday, as well as the hack
18618         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18619         link_paths to get that bit proper.
18620
18621 2004-05-01  Todd Berman  <tberman@sevenl.net>
18622
18623         * driver.cs: Try a LoadFrom before a Load, this checks the current
18624         path. This is currently a bug in mono that is be fixed, however, this
18625         provides a workaround for now. This will be removed when the bug
18626         is fixed.
18627
18628 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18629
18630         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18631         incomplete key pairs (#57941).
18632
18633 2004-05-01  Todd Berman  <tberman@sevenl.net>
18634
18635         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18636         from the GAC
18637
18638 2004-04-30  Jackson Harper  <jackson@ximian.com>
18639
18640         * codegen.cs: Open keys readonly.
18641         
18642 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18643
18644         * typemanager.cs: don't report cyclic struct layout when a struct
18645         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18646         which has 2 Pango.Rectangle fields.
18647
18648 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18649
18650         * expression.cs: Handle IntPtr comparisons with IL code
18651         rather than a method call.
18652
18653 2004-04-29  Martin Baulig  <martin@ximian.com>
18654
18655         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18656         the list of PropertyInfo's in class hierarchy and find the
18657         accessor.  Fixes #56013.
18658
18659 2004-04-29  Martin Baulig  <martin@ximian.com>
18660
18661         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18662
18663 2004-04-29  Martin Baulig  <martin@ximian.com>
18664
18665         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18666
18667         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18668
18669 2004-04-29  Martin Baulig  <martin@ximian.com>
18670
18671         * class.cs (ConstructorInitializer.Resolve): Check whether the
18672         parent .ctor is accessible.  Fixes #52146.
18673
18674 2004-04-29  Martin Baulig  <martin@ximian.com>
18675
18676         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18677
18678         * statement.cs (Using.EmitLocalVariableDecls): Use
18679         TypeManager.idisposable_type, not typeof (IDisposable).
18680         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18681
18682 2004-04-29  Martin Baulig  <martin@ximian.com>
18683
18684         * class.cs (Event.Define): Don't emit the field and don't set
18685         RTSpecialName and SpecialName for events on interfaces.  Fixes
18686         #57703. 
18687
18688 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18689
18690         Refactor Attribute.ApplyAttributes.
18691         * attribute.cs (Attributable): New base class for objects that can
18692         have Attributes applied on them.
18693         (Attribute): Make AttributeUsage fields public.
18694         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18695         (Attribute.IsInternalCall): New property.
18696         (Attribute.UsageAttr): Convert to a public read-only property.
18697         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18698         (Attribute.ResolveType, Attribute.Resolve)
18699         (Attribute.ScanForIndexerName): Update to reflect changes.
18700         (Attribute.CheckAttributeTarget): Re-format.
18701         (Attribute.ApplyAttributes): Refactor, to various
18702         Attributable.ApplyAttributeBuilder methods.
18703         * decl.cs (MemberCore): Make Attributable.
18704         * class.cs (Accessor): Make Attributable.
18705         (MethodData.ApplyAttributes): Use proper attribute types, not
18706         attribute names.
18707         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18708         (TypeContainer.ApplyAttributeBuilder)
18709         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18710         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18711         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18712         (Operator.ApplyAttributeBuilder): New factored-out methods.
18713         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18714         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18715         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18716         * parameter.cs (ParameterBase): New Attributable base class
18717         that can also represent Return types.
18718         (Parameter): Update to the changes.
18719
18720 2004-04-29  Jackson Harper  <jackson@ximian.com>
18721
18722         * driver.cs: Prefer the corlib system version when looking for
18723         assemblies in the GAC. This is still a hack, but its a better hack
18724         now.
18725         
18726 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18727
18728         * decl.cs, enum.cs: Improved error 3005 reporting.
18729   
18730         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18731         (related_symbols): New private member for list of symbols
18732         related to reported error/warning.
18733         
18734         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18735
18736 2004-04-29  Martin Baulig  <martin@ximian.com>
18737
18738         * ecore.cs (Expression.Constantify): If we're an enum and
18739         TypeManager.TypeToCoreType() doesn't give us another type, use
18740         t.UnderlyingSystemType.  Fixes #56178.  
18741
18742 2004-04-29  Martin Baulig  <martin@ximian.com>
18743
18744         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18745         interfaces and for each interface, only add members directly
18746         declared in that interface.  Fixes #53255.
18747
18748 2004-04-28  Martin Baulig  <martin@ximian.com>
18749
18750         * expression.cs (ConditionalLogicalOperator): Use a temporary
18751         variable for `left' to avoid that we evaluate it more than once;
18752         bug #52588.
18753
18754 2004-04-28  Martin Baulig  <martin@ximian.com>
18755
18756         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18757         `void[]' (CS1547).
18758
18759 2004-04-28  Martin Baulig  <martin@ximian.com>
18760
18761         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18762         void (CS1547).
18763
18764         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18765         whether the type is not void (CS1547).
18766
18767 2004-04-28  Martin Baulig  <martin@ximian.com>
18768
18769         * expression.cs (Unary.DoResolveLValue): Override this and report
18770         CS0131 for anything but Operator.Indirection.
18771
18772 2004-04-28  Martin Baulig  <martin@ximian.com>
18773
18774         Committing a patch from Ben Maurer; see bug #50820.
18775
18776         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18777         check for classes.
18778
18779         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18780         classes.        
18781
18782 2004-04-28  Martin Baulig  <martin@ximian.com>
18783
18784         Committing a patch from Ben Maurer; see bug #50820.
18785
18786         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18787         check for classes.
18788
18789         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18790         classes.        
18791
18792 2004-04-28  Martin Baulig  <martin@ximian.com>
18793
18794         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18795         (Block.AddLabel): Call DoLookupLabel() to only search in the
18796         current block.
18797
18798 2004-04-28  Martin Baulig  <martin@ximian.com>
18799
18800         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18801         comparing StringConstants and NullLiterals in Equality and Inequality.
18802
18803 2004-04-28  Jackson Harper  <jackson@ximian.com>
18804
18805         * driver.cs: Attempt to load referenced assemblies from the
18806         GAC. This is the quick and dirty version of this method that
18807         doesnt take into account versions and just takes the first
18808         canidate found. Will be good enough for now as we will not have more
18809         then one version installed into the GAC until I update this method.
18810
18811 2004-04-28  Martin Baulig  <martin@ximian.com>
18812
18813         * typemanager.cs (TypeManager.CheckStructCycles): New public
18814         static method to check for cycles in the struct layout.
18815
18816         * rootcontext.cs (RootContext.PopulateTypes): Call
18817         TypeManager.CheckStructCycles() for each TypeContainer.
18818         [Note: We only need to visit each type once.]
18819
18820 2004-04-28  Martin Baulig  <martin@ximian.com>
18821
18822         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18823
18824         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18825         success and added `out object value'.  Use a `bool resolved' field
18826         to check whether we've already been called rather than
18827         `ConstantValue != null' since this breaks for NullLiterals.
18828
18829 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18830
18831         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18832         setting of this flag, since the 'set' method may be non-public.
18833
18834 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18835
18836         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18837         check on current_vector.Block.
18838
18839 2004-04-27  Martin Baulig  <martin@ximian.com>
18840
18841         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18842         a field initializer.  Fixes #56459.
18843
18844 2004-04-27  Martin Baulig  <martin@ximian.com>
18845
18846         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18847         we're not attempting to use an indexer.  Fixes #52154.
18848
18849 2004-04-27  Martin Baulig  <martin@ximian.com>
18850
18851         * statement.cs (Return): Don't create a return label if we don't
18852         need it; reverts my change from January 20th.  Thanks to Ben
18853         Maurer for this.
18854
18855 2004-04-27  Martin Baulig  <martin@ximian.com>
18856
18857         According to the spec, `goto' can only leave a nested scope, but
18858         never enter it.
18859
18860         * statement.cs (Block.LookupLabel): Only lookup in the current
18861         block, don't recurse into parent or child blocks.
18862         (Block.AddLabel): Check in parent and child blocks, report
18863         CS0140/CS0158 if we find a duplicate.
18864         (Block): Removed this indexer for label lookups.
18865         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18866         this already does the error reporting for us.
18867
18868         * flowanalysis.cs
18869         (FlowBranching.UsageVector.Block): New public variable; may be null.
18870         (FlowBranching.CreateSibling): Added `Block' argument.
18871         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18872         label for the target of a `goto' and check whether we're not
18873         leaving a `finally'.
18874
18875 2004-04-27  Martin Baulig  <martin@ximian.com>
18876
18877         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18878         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18879         just for returns).
18880
18881 2004-04-27  Martin Baulig  <martin@ximian.com>
18882
18883         * statement.cs (Block.AddLabel): Also check for implicit blocks
18884         and added a CS0158 check.
18885
18886 2004-04-27  Martin Baulig  <martin@ximian.com>
18887
18888         * flowanalysis.cs (FlowBranchingLoop): New class.
18889         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18890         UsageVector's instead of an ArrayList.
18891         (FlowBranching.Label): Likewise.
18892         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18893         (FlowBranching.AddBreakVector): New method.
18894
18895 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18896
18897         * attribute.cs: Small regression fix: only convert the type if we
18898         the type is different, fixes System.Drawing build.
18899
18900 2004-04-27  Martin Baulig  <martin@ximian.com>
18901
18902         * attribute.cs (Attribute.Resolve): If we have a constant value
18903         for a named field or property, implicity convert it to the correct
18904         type.
18905
18906 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18907
18908         * statement.cs (Block.Block): Implicit blocks share
18909         'child_variable_names' fields with parent blocks.
18910         (Block.AddChildVariableNames): Remove.
18911         (Block.AddVariable): Mark variable as "used by a child block" in
18912         every surrounding block.
18913         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18914         been used in a child block, complain about violation of "Invariant
18915         meaning in blocks" rule.
18916         * cs-parser.jay (declare_local_variables): Don't use
18917         AddChildVariableNames.
18918         (foreach_statement): Don't create an implicit block: 'foreach'
18919         introduces a scope.
18920
18921 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18922
18923         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18924         converting from 0L to ulong.  Fixes 57522.
18925
18926 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18927
18928         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18929         derived class hides via 'new' keyword field from base class (test-242.cs).
18930         TODO: Handle this in the more general way.
18931         
18932         * class.cs (CheckBase): Ditto.
18933
18934 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18935
18936         * decl.cs (caching_flags): New member for storing cached values
18937         as bit flags.
18938         (MemberCore.Flags): New enum where bit flags for caching_flags
18939         are defined.
18940         (MemberCore.cls_compliance): Moved to caching_flags.
18941         (DeclSpace.Created): Moved to caching_flags.
18942
18943         * class.cs: Use caching_flags instead of DeclSpace.Created
18944         
18945 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18946
18947         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18948         if we are only a derived class, not a nested class.
18949
18950         * typemanager.cs: Same as above, but do this at the MemberLookup
18951         level (used by field and methods, properties are handled in
18952         PropertyExpr).   Allow for the qualified access if we are a nested
18953         method. 
18954
18955 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18956
18957         * class.cs: Refactoring.
18958         (IMethodData): New inteface; Holds links to parent members
18959         to avoid member duplication (reduced memory allocation).
18960         (Method): Implemented IMethodData interface.
18961         (PropertyBase): New inner classes for get/set methods.
18962         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18963         (Event): New inner classes for add/remove methods.
18964         (Event.DelegateMethod): Implemented IMethodData interface.
18965
18966         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18967         EmitContext (related to class.cs refactoring).
18968
18969 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18970
18971         * delegate.cs (Delegate.VerifyApplicability): If the number of
18972         arguments are the same as the number of parameters, first try to
18973         verify applicability ignoring  any 'params' modifier on the last
18974         parameter.
18975         Fixes #56442.
18976
18977 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18978
18979         * class.cs (TypeContainer.AddIndexer): Use
18980         'ExplicitInterfaceName' to determine if interface name was
18981         explicitly specified.  'InterfaceType' is not initialized at this time.
18982         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18983         Indexers array is already in the required order.  Initialize
18984         'IndexerName' only if there are normal indexers.
18985         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18986         (TypeContainer.Emit): Emit DefaultMember attribute only if
18987         IndexerName is initialized.
18988         Fixes #56300.
18989
18990 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18991
18992         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18993         Fixes #57007
18994
18995 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18996
18997         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18998         attributes.
18999         Fix for #56456.
19000
19001         * attribute.cs (Attribute.Resolve): Check for duplicate named
19002         attributes.
19003         Fix for #56463.
19004
19005 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19006
19007         * iterators.cs (MarkYield): track whether we are in an exception,
19008         and generate code accordingly.  Use a temporary value to store the
19009         result for our state.
19010
19011         I had ignored a bit the interaction of try/catch with iterators
19012         since their behavior was not entirely obvious, but now it is
19013         possible to verify that our behavior is the same as MS .NET 2.0
19014
19015         Fixes 54814
19016
19017 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19018
19019         * iterators.cs: Avoid creating temporaries if there is no work to
19020         do. 
19021
19022         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19023         Enumerations, use TypeManager.EnumToUnderlying and call
19024         recursively. 
19025
19026         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19027         bug #57013
19028
19029         (This.Emit): Use EmitContext.EmitThis to emit our
19030         instance variable.
19031
19032         (This.EmitAssign): Ditto.
19033
19034         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19035         codepaths, we will move all the functionality into
19036         Mono.CSharp.This 
19037
19038         (FieldExpr.EmitAssign): Ditto.
19039
19040         This fixes several hidden bugs that I uncovered while doing a code
19041         review of this today.
19042
19043         * codegen.cs (EmitThis): reworked so the semantics are more clear
19044         and also support value types "this" instances.
19045
19046         * iterators.cs: Changed so that for iterators in value types, we
19047         do not pass the value type as a parameter.  
19048
19049         Initialization of the enumerator helpers is now done in the caller
19050         instead of passing the parameters to the constructors and having
19051         the constructor set the fields.
19052
19053         The fields have now `assembly' visibility instead of private.
19054
19055 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19056
19057         * expression.cs (Argument.Resolve): Check if fields passed as ref
19058         or out are contained in a MarshalByRefObject.
19059
19060         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19061         another compiler type.
19062
19063 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19064
19065         * class.cs (Indexer.Define): use the new name checking method.
19066         Also, return false on an error.
19067         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19068         (is_identifier_[start/part]_character): make static.
19069
19070 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19071
19072         * expression.cs (Binary.ResolveOperator): Do no append strings
19073         twice: since we can be invoked more than once (array evaluation)
19074         on the same concatenation, take care of this here.  Based on a fix
19075         from Ben (bug #56454)
19076
19077 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19078
19079         * codegen.cs: Fix another case where CS1548 must be reported (when 
19080         delay-sign isn't specified and no private is available #56564). Fix
19081         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19082         error when MCS is used on the MS runtime and we need to delay-sign 
19083         (which seems unsupported by AssemblyBuilder - see #56621).
19084
19085 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19086
19087         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19088         (TypeManager.ComputeNamespaces): Faster implementation for
19089         Microsoft runtime.
19090
19091         * compiler.csproj: Updated AssemblyName to mcs.
19092
19093 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19094
19095         * rootcontext.cs: Add new types to the boot resolution.
19096
19097         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19098         MulticastDelegate is not allowed.
19099
19100         * typemanager.cs: Add new types to lookup: System.TypedReference
19101         and ArgIterator.
19102
19103         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19104         check for TypedReference or ArgIterator, they are not allowed. 
19105
19106         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19107         makes us properly catch 1510 in some conditions (see bug 56016 for
19108         details). 
19109
19110 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19111
19112         * CryptoConvert.cs: update from corlib version
19113         with endian fixes.
19114
19115 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19116
19117         * class.cs (Indexer.Define): Check indexername declaration
19118
19119 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19120
19121         * attribute.cs (IsClsCompliant): Fixed problem with handling
19122         all three states (compliant, not-compliant, undetected).
19123
19124 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19125
19126         * attribute.cs (Attribute): Location is now public.
19127         (Resolve): Store resolved arguments (pos_values) in attribute class.
19128         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19129         (GetClsCompliantAttributeValue): New method that gets
19130         CLSCompliantAttribute value.
19131         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19132         if exists else null.
19133         (AttributeTester): New class for CLS-Compliant verification routines.
19134
19135         * class.cs (Emit): Add CLS-Compliant verification.
19136         (Method.GetSignatureForError): Implemented.
19137         (Constructor.GetSignatureForError): Implemented
19138         (Constructor.HasCompliantArgs): Returns if constructor has
19139         CLS-Compliant arguments.
19140         (Constructor.Emit): Override.
19141         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19142         is needed to test only parameters.
19143         (FieldBase.GetSignatureForError): Implemented.
19144         (TypeContainer): New member for storing base interfaces.
19145         (TypeContainer.FindMembers): Search in base interfaces too.
19146
19147         * codegen.cs (GetClsComplianceAttribute): New method that gets
19148         assembly or module CLSCompliantAttribute value.
19149         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19150         for assembly.
19151         (ModuleClass.Emit): Add error 3012 test.
19152
19153         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19154
19155         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19156         state for all decl types.
19157         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19158         if CLS-Compliant tests are required.
19159         (IsClsCompliaceRequired): New method. Analyze whether code
19160         must be CLS-Compliant.
19161         (IsExposedFromAssembly): New method. Returns true when MemberCore
19162         is exposed from assembly.
19163         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19164         value or gets cached value.
19165         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19166         is explicitly marked with CLSCompliantAttribute.
19167         (IsIdentifierClsCompliant): New abstract method. This method is
19168         used to testing error 3005.
19169         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19170         for identifier and parameters CLS-Compliant testing.
19171         (VerifyClsCompliance): New method. The main virtual method for
19172         CLS-Compliant verifications.
19173         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19174         null. I don't know why is null (too many public members !).
19175         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19176         and get value of first CLSCompliantAttribute that found.
19177
19178         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19179         (VerifyClsCompliance): Override and add extra tests.
19180
19181         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19182         clscheck- disable CLS-Compliant verification event if assembly is has
19183         CLSCompliantAttribute(true).
19184
19185         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19186         ApllyAttribute is now called in emit section as in the other cases.
19187         Possible future Emit integration.
19188         (IsIdentifierClsCompliant): New override.
19189         (VerifyClsCompliance): New override.
19190         (GetEnumeratorName): Returns full enum name.
19191
19192         * parameter.cs (GetSignatureForError): Implemented.
19193
19194         * report.cs (WarningData): New struct for Warning message information.
19195         (LocationOfPreviousError): New method.
19196         (Warning): New method. Reports warning based on the warning table.
19197         (Error_T): New method. Reports error based on the error table.
19198
19199         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19200         verifications are done here.
19201
19202         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19203
19204         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19205         CLSCompliantAttribute.
19206         (all_imported_types): New member holds all imported types from other
19207         assemblies.
19208         (LoadAllImportedTypes): New method fills static table with exported types
19209         from all referenced assemblies.
19210         (Modules): New property returns all assembly modules.
19211
19212 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19213
19214         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19215         throwing a parser error.
19216
19217         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19218         which removes the hardcoded get_/set_ prefixes for properties, as
19219         IL allows for the properties to be named something else.  
19220
19221         Bug #56013
19222
19223         * expression.cs: Do not override operand before we know if it is
19224         non-null.  Fix 56207
19225
19226 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19227
19228         * typemanager.cs: support for pinned variables.
19229
19230 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19231
19232         * decl.cs, typemanager.cs: Avoid using an arraylist
19233         as a buffer if there is only one result set.
19234
19235 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19236
19237         * expression.cs: Make sure you cant call a static method
19238         with an instance expression, bug #56174.
19239
19240 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19241
19242         * class.cs (IsDuplicateImplementation): Improve error reporting to
19243         flag 663 (method only differs in parameter modifier).
19244
19245         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19246         in preprocessor directives.
19247
19248         * location.cs (LookupFile): Allow for the empty path.
19249
19250         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19251         better approach for some of that patch, but its failing with the
19252         CharSet enumeration.  For now try/catch will do.
19253
19254         * typemanager.cs: Do not crash if a struct does not have fields.
19255         Fixes 56150.
19256
19257 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19258
19259         * expression.cs: cs0213, cant fix a fixed expression.
19260         fixes 50231.
19261
19262 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19263
19264         * cs-parser.jay: detect invalid embeded statements gracefully.
19265         bug #51113.
19266
19267 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19268
19269         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19270         As a regex:
19271         s/
19272         the invocation type may not be a subclass of the tye of the item/
19273         The type of the item must be a subclass of the invocation item.
19274         /g
19275
19276         Fixes bug #50820.
19277
19278 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19279
19280         * attribute.cs: Added methods to get a string and a bool from an
19281         attribute. Required to information from AssemblyKeyFileAttribute,
19282         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19283         * codegen.cs: Modified AssemblyName creation to include support for
19284         strongnames. Catch additional exceptions to report them as CS1548.
19285         * compiler.csproj: Updated include CryptoConvert.cs.
19286         * compiler.csproj.user: Removed file - user specific configuration.
19287         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19288         Mono.Security assembly. The original class is maintained and tested in
19289         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19290         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19291         like CSC 8.0 (C# v2) supports.
19292         * Makefile: Added CryptoConvert.cs to mcs sources.
19293         * rootcontext.cs: Added new options for strongnames.
19294
19295 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19296
19297         * driver.cs: For --expect-error, report error code `2'
19298         if the program compiled with no errors, error code `1' if
19299         it compiled with an error other than the one expected.
19300
19301 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19302
19303         * compiler.csproj: Updated for Visual Studio .NET 2003.
19304         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19305         * compiler.sln: Updated for Visual Studio .NET 2003.
19306
19307 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19308
19309         * expression.cs: Fix bug #47234. We basically need to apply the
19310         rule that we prefer the conversion of null to a reference type
19311         when faced with a conversion to 'object' (csc behaviour).
19312
19313 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19314
19315         * statement.cs: Shorter form for foreach, eliminates
19316         a local variable. r=Martin.
19317
19318 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19319
19320         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19321         checks if we can use brtrue/brfalse to test for 0.
19322         * expression.cs: use the above in the test for using brtrue/brfalse.
19323         cleanup code a bit.
19324
19325 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19326
19327         * expression.cs: Rewrite string concat stuff. Benefits:
19328
19329         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19330         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19331         rather than a concat chain.
19332
19333         * typemanager.cs: Add lookups for more concat overloads.
19334
19335 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19336
19337         * expression.cs: Emit shorter il code for array init.
19338
19339         newarr
19340         dup
19341         // set 1
19342
19343         // set 2
19344
19345         newarr
19346         stloc.x
19347
19348         ldloc.x
19349         // set 1
19350
19351         ldloc.x
19352         // set 2
19353
19354 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19355
19356         * statement.cs: Before, two switch blocks would be merged if the
19357         total size of the blocks (end_item - begin_item + 1) was less than
19358         two times the combined sizes of the blocks.
19359
19360         Now, it will only merge if after the merge at least half of the
19361         slots are filled.
19362
19363         fixes 55885.
19364
19365 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19366
19367         * class.cs : csc build fix for GetMethods(). See bug #52503.
19368
19369 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19370
19371         * expression.cs: Make sure fp comparisons work with NaN.
19372         This fixes bug #54303. Mig approved this patch a long
19373         time ago, but we were not able to test b/c the runtime
19374         had a related bug.
19375
19376 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19377
19378         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19379
19380 2004-03-19  Martin Baulig  <martin@ximian.com>
19381
19382         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19383         error here and not in our caller.
19384
19385 2004-03-19  Martin Baulig  <martin@ximian.com>
19386
19387         * interface.cs: Completely killed this file.
19388         (Interface): We're now a TypeContainer and live in class.cs.
19389
19390         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19391         argument; we're now also called for interfaces.
19392         (TypeContainer.DefineMembers): Allow this method being called
19393         multiple times.
19394         (TypeContainer.GetMethods): New public method; formerly known as
19395         Interface.GetMethod().  This is used by PendingImplementation.
19396         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19397         it's now private and non-static.
19398         (Interface): Moved this here; it's now implemented similar to
19399         Class and Struct.
19400         (Method, Property, Event, Indexer): Added `bool is_interface'
19401         argument to their .ctor's.
19402         (MemberBase.IsInterface): New public field.
19403
19404         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19405         instances instead of InterfaceMethod, InterfaceProperty, etc.
19406         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19407         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19408
19409 2004-03-19  Martin Baulig  <martin@ximian.com>
19410
19411         * class.cs (MethodCore.IsDuplicateImplementation): New private
19412         method which does the CS0111 checking.
19413         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19414         Use IsDuplicateImplementation().
19415
19416 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19417
19418         * decl.cs (FindMemberToOverride): New method to find the correct
19419         method or property to override in the base class.
19420         * class.cs
19421             - Make Method/Property use the above method to find the
19422               version in the base class.
19423             - Remove the InheritableMemberSignatureCompare as it is now
19424               dead code.
19425
19426         This patch makes large code bases much faster to compile, as it is
19427         O(n) rather than O(n^2) to do this validation.
19428
19429         Also, it fixes bug 52458 which is that nested classes are not
19430         taken into account when finding the base class member.
19431
19432         Reviewed/Approved by Martin.
19433
19434 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19435
19436         * interface.cs: In all interface classes removed redundant
19437         member initialization.
19438
19439 2004-03-16  Martin Baulig  <martin@ximian.com>
19440
19441         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19442
19443 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19444
19445         * decl.cs (DefineTypeAndParents): New helper method to define a
19446         type's containers before the type itself is defined;  This is a
19447         bug exposed by the recent changes to Windows.Forms when an
19448         implemented interface was defined inside a class that had not been
19449         built yet.   
19450
19451         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19452
19453         (Check): Loop correctly to report errors modifiers
19454         (UNSAFE was not in the loop, since it was the same as TOP).
19455
19456         * interface.cs: Every interface member now takes a ModFlags,
19457         instead of a "is_new" bool, which we set on the base MemberCore. 
19458
19459         Every place where we called "UnsafeOk" in the interface, now we
19460         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19461         the unsafe settings from the member declaration instead of the
19462         container interface. 
19463
19464         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19465
19466         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19467         `set_indexer_name' to the pending bits (one per type).
19468
19469         We fixed a bug today that was picking the wrong method to
19470         override, since for properties the existing InterfaceMethod code
19471         basically ignored the method name.  Now we make sure that the
19472         method name is one of the valid indexer names.
19473
19474 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19475  
19476         * support.cs (SeekableStreamReader): Keep track of stream byte
19477         positions and don't mix them with character offsets to the buffer.
19478
19479         Patch from Gustavo Giráldez
19480
19481 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19482
19483         * interface.cs (InterfaceSetGetBase): Removed double member
19484         initialization, base class does it as well.
19485
19486 2004-03-13  Martin Baulig  <martin@ximian.com>
19487
19488         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19489         when compiling corlib.
19490
19491 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19492
19493         * convert.cs (ExplicitConversion): We were reporting an error on
19494         certain conversions (object_type source to a value type, when the
19495         expression was `null') before we had a chance to pass it through
19496         the user defined conversions.
19497
19498         * driver.cs: Replace / and \ in resource specifications to dots.
19499         Fixes 50752
19500
19501         * class.cs: Add check for duplicate operators.  Fixes 52477
19502
19503 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19504
19505         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19506         that are in the middle of the statements, not only at the end.
19507         Fixes #54987
19508
19509         * class.cs (TypeContainer.AddField): No longer set the
19510         `HaveStaticConstructor' flag, now we call it
19511         `UserDefineStaticConstructor' to diferentiate the slightly
19512         semantic difference.
19513
19514         The situation is that we were not adding BeforeFieldInit (from
19515         Modifiers.TypeAttr) to classes that could have it.
19516         BeforeFieldInit should be set to classes that have no static
19517         constructor. 
19518
19519         See:
19520
19521         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19522
19523         And most importantly Zoltan's comment:
19524
19525         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19526
19527         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19528          before its static fields are used', i.e. initialization does not need
19529          to be triggered by the first access to the type. Setting this flag
19530          helps the JIT to compile better code, since it can run the static
19531          constructor at JIT time, and does not need to generate code to call it
19532          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19533          this flag for lots of classes like String. 
19534          
19535          csc sets this flag if the type does not have an explicit static 
19536          constructor. The reasoning seems to be that if there are only static
19537          initalizers for a type, and no static constructor, then the programmer
19538          does not care when this initialization happens, so beforefieldinit
19539          can be used.
19540          
19541          This bug prevents the AOT compiler from being usable, since it 
19542          generates so many calls to mono_runtime_class_init that the AOT code
19543          is much slower than the JITted code. The JITted code is faster, 
19544          because it does not generate these calls if the vtable is type is
19545          already initialized, which is true in the majority of cases. But the
19546          AOT compiler can't do this."
19547
19548 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19549
19550         * class.cs (MethodData.Emit): Refactor the code so symbolic
19551         information is generated for destructors;  For some reasons we
19552         were taking a code path that did not generate symbolic information
19553         before. 
19554
19555 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19556
19557         * class.cs: Create a Constructor.CheckBase method that
19558         takes care of all validation type code. The method
19559         contains some code that was moved from Define.
19560
19561         It also includes new code that checks for duplicate ctors.
19562         This fixes bug #55148.
19563
19564 2004-03-09  Joshua Tauberer <tauberer@for.net>
19565
19566         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19567         a { ... }-style array creation invokes EmitStaticInitializers
19568         which is not good for reference-type arrays.  String, decimal
19569         and now null constants (NullCast) are not counted toward
19570         static initializers.
19571
19572 2004-03-05  Martin Baulig  <martin@ximian.com>
19573
19574         * location.cs (SourceFile.HasLineDirective): New public field;
19575         specifies whether the file contains or is referenced by a "#line"
19576         directive.
19577         (Location.DefineSymbolDocuments): Ignore source files which
19578         either contain or are referenced by a "#line" directive.        
19579
19580 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19581
19582         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19583         direct access to our parent, so check the method inline there.
19584
19585 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19586
19587         * expression.cs (Invocation.EmitCall): Miguel's last commit
19588         caused a regression. If you had:
19589
19590             T t = null;
19591             t.Foo ();
19592
19593         In Foo the implict this would be null.
19594
19595 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19596
19597         * expression.cs (Invocation.EmitCall): If the method is not
19598         virtual, do not emit a CallVirt to it, use Call.
19599
19600         * typemanager.cs (GetFullNameSignature): Improve the method to
19601         cope with ".ctor" and replace it with the type name.
19602
19603         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19604         as an argument the ConstructorBuilder where it is being defined,
19605         to catch the recursive constructor invocations.
19606
19607 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19608
19609         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19610         routines to check if a type is an enumerable/enumerator allow
19611         classes that implement the IEnumerable or IEnumerator interfaces.
19612
19613         * class.cs (Property, Operator): Implement IIteratorContainer, and
19614         implement SetYields.
19615
19616         (Property.Define): Do the block swapping for get_methods in the
19617         context of iterators.   We need to check if Properties also
19618         include indexers or not.
19619
19620         (Operator): Assign the Block before invoking the
19621         OperatorMethod.Define, so we can trigger the Iterator code
19622         replacement. 
19623
19624         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19625         Property and Operator classes are not created when we parse the
19626         declarator but until we have the block completed, so we use a
19627         singleton SimpleIteratorContainer.Simple to flag whether the
19628         SetYields has been invoked.
19629
19630         We propagate this setting then to the Property or the Operator to
19631         allow the `yield' to function.
19632
19633 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19634
19635         * codegen.cs: Implemented attribute support for modules.
19636         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19637         Assembly/Module functionality.
19638
19639         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19640         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19641         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19642
19643 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19644
19645         * interface.cs (FindMembers): The operation is performed on all base
19646         interfaces and not only on the first. It is required for future CLS Compliance patch.
19647
19648 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19649
19650         * statement.cs, codegen.cs:
19651         This patch deals with patterns such as:
19652
19653         public class List : IEnumerable {
19654
19655                 public MyEnumerator GetEnumerator () {
19656                         return new MyEnumerator(this);
19657                 }
19658
19659                 IEnumerator IEnumerable.GetEnumerator () {
19660                         ...
19661                 }
19662                 
19663                 public struct MyEnumerator : IEnumerator {
19664                         ...
19665                 }
19666         }
19667
19668         Before, there were a few things we did wrong:
19669         1) we would emit callvirt on a struct, which is illegal
19670         2) we emited ldarg when we needed to emit ldarga
19671         3) we would mistakenly call the interface methods on an enumerator
19672         type that derived from IEnumerator and was in another assembly. For example:
19673
19674         public class MyEnumerator : IEnumerator
19675
19676         Would have the interface methods called, even if there were public impls of the
19677         method. In a struct, this lead to invalid IL code.
19678
19679 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19680
19681         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19682           renamed to Emit.
19683
19684         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19685
19686 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19687
19688         * cs-parser.jay: Fix small regression: we were not testing V2
19689         compiler features correctly.
19690
19691         * interface.cs: If the emit context is null, then create one
19692
19693 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19694
19695         * decl.cs (GetSignatureForError): New virtual method to get full name
19696           for error messages.
19697
19698         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19699           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19700
19701         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19702           Duplicated members and code in these classes has been removed.
19703           Better encapsulation in these classes.
19704
19705 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19706
19707         * assign.cs (Assign.DoResolve): When dealing with compound
19708         assignments, there is a new rule in ECMA C# 2.4 (might have been
19709         there before, but it is documented here) that states that in:
19710
19711         a op= b;
19712
19713         If b is of type int, and the `op' is a shift-operator, then the
19714         above is evaluated as:
19715
19716         a = (int) a op b 
19717
19718         * expression.cs (Binary.ResolveOperator): Instead of testing for
19719         int/uint/long/ulong, try to implicitly convert to any of those
19720         types and use that in pointer arithmetic.
19721
19722         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19723         method to print information for from the type, not from the
19724         null-method we were given.
19725
19726 2004-02-01  Duncan Mak  <duncan@ximian.com>
19727
19728         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19729         parsing for cmd, fixes bug #53694.
19730
19731 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19732
19733         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19734         in the member name duplication tests. Property and operator name duplication
19735         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19736
19737 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19738
19739         * interface.cs (PopulateMethod): Fixed crash when interface method
19740         returns not existing type (error test cs0246-3.cs).
19741
19742 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19743
19744         * cs-parser.jay (interface_accessors): Re-write actions to also
19745         store attributes attached to get and set methods. Fix spelling
19746         while at it.
19747
19748         (inteface_property_declaration): Modify accordingly.
19749
19750         (InterfaceAccessorInfo): New helper class to store information to pass
19751         around between rules that use interface_accessors.
19752
19753         * interface.cs (Emit): Apply attributes on the get and set
19754         accessors of properties and indexers too.
19755
19756         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19757         right MethodBuilder when applying attributes to the get and set accessors.
19758
19759 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19760
19761         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19762
19763 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19764
19765         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19766
19767 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19768
19769         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19770         changes that treat `yield' specially when present before `break'
19771         or `return' tokens.
19772
19773         * cs-tokenizer.cs: yield is no longer a keyword.
19774
19775 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19776
19777         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19778         setting for default constructors.
19779         For default constructors are almost every time set wrong Modifier. The
19780         generated IL code has been alright. But inside mcs this values was
19781         wrong and this was reason why several of my CLS Compliance tests
19782         failed.
19783
19784 2004-01-22  Martin Baulig  <martin@ximian.com>
19785
19786         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19787         not a QualifiedIdentifier.  This is what `type_name_expression'
19788         was previously doing.
19789         (type_name_expression): Removed; the code is now in
19790         `namespace_or_type_name'.
19791         (qualified_identifier): Removed, use `namespace_or_type_name'
19792         instead.
19793         (QualifiedIdentifier): Removed this class.      
19794
19795 2004-01-22  Martin Baulig  <martin@ximian.com>
19796
19797         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19798         not a string as alias name.
19799
19800 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19801
19802         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19803         #52730 bug, and instead compute correctly the need to use a
19804         temporary variable when requesting an address based on the
19805         static/instace modified of the field and the constructor.
19806  
19807 2004-01-21  Martin Baulig  <martin@ximian.com>
19808
19809         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19810         class and namespace before looking up aliases.  Fixes #52517.
19811
19812 2004-01-21  Martin Baulig  <martin@ximian.com>
19813
19814         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19815         assinged in a 'try'; fixes exception4.cs.
19816
19817 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19818         * class.cs : Implemented parameter-less constructor for TypeContainer
19819
19820         * decl.cs: Attributes are now stored here. New property OptAttributes
19821
19822         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19823
19824         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19825
19826 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19827
19828         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19829           (CSharpSignature): New method for indexer and property signature.
19830
19831 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19832
19833         * pending.cs (IsVirtualFilter): Faster implementation.
19834
19835 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19836
19837         * typemanager.cs: Avoid inclusion of same assembly more than once.
19838
19839 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19840
19841         * cs-parser.jay: Fixed problem where the last assembly attribute
19842           has been applied also to following declaration (class, struct, etc.)
19843           
19844 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19845
19846         * class.cs: Added error CS0538, CS0539 reporting.
19847         Fixed crash on Microsoft runtime when field type is void.
19848
19849         * cs-parser.jay: Added error CS0537 reporting.
19850
19851         * pending.cs: Added error CS0535 reporting.
19852         Improved error report for errors CS0536, CS0534.
19853
19854 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19855
19856         Merge a few bits from the Anonymous Method MCS tree.
19857
19858         * statement.cs (ToplevelBlock): New class for toplevel methods,
19859         will hold anonymous methods, lifted variables.
19860
19861         * cs-parser.jay: Create toplevel blocks for delegates and for
19862         regular blocks of code. 
19863
19864 2004-01-20  Martin Baulig  <martin@ximian.com>
19865
19866         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19867         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19868         and `NeedExplicitReturn'; added `IsLastStatement'.
19869         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19870         have a `ReturnLabel' or we're not unreachable.
19871
19872         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19873         child's reachability; don't just override ours with it.  Fixes
19874         #58058 (lluis's example).
19875         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19876         InFinally(), InLoop(), InSwitch() and
19877         BreakCrossesTryCatchBoundary() methods.
19878
19879         * statement.cs (Return): Do all error checking in Resolve().
19880         Unless we are the last statement in a top-level block, always
19881         create a return label and jump to it.
19882         (Break, Continue): Do all error checking in Resolve(); also make
19883         sure we aren't leaving a `finally'.
19884         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19885         statement in a top-level block.
19886         (Block.Flags): Added `IsDestructor'.
19887         (Block.IsDestructor): New public property.
19888
19889 2004-01-20  Martin Baulig  <martin@ximian.com>
19890
19891         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19892
19893 2004-01-20  Martin Baulig  <martin@ximian.com>
19894
19895         * statement.cs (Statement.ResolveUnreachable): New public method.
19896         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19897         (Block.Resolve): Resolve unreachable statements.
19898
19899 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19900
19901         * expression.cs: We need to fix the case where we do
19902         not have a temp variable here.
19903
19904         * assign.cs: Only expression compound assignments need
19905         temporary variables.
19906
19907 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19908
19909         * flowanalysis.cs: Reduce memory allocation in a few ways:
19910           - A block with no variables should not allocate a bit
19911             vector for itself.
19912           - A method with no out parameters does not need any tracking
19913             for assignment of the parameters, so we need not allocate
19914             any data for it.
19915           - The arrays:
19916                 public readonly Type[] VariableTypes;
19917                 public readonly string[] VariableNames;
19918             Are redundant. The data is already stored in the variable
19919             map, so we need not allocate another array for it.
19920           - We need to add alot of checks for if (params | locals) == null
19921             due to the first two changes.
19922
19923 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19924
19925         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19926         implement IMemoryLocation, we store a copy on a local variable and
19927         take the address of it.  Patch from Benjamin Jemlich
19928
19929         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19930         to use a special "type_name_expression" rule which reduces the
19931         number of "QualifiedIdentifier" classes created, and instead
19932         directly creates MemberAccess expressions.
19933
19934 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19935
19936         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19937         that fixes #52853.  Null literal assignment to ValueType
19938
19939         * class.cs (MethodData.Emit): Instead of checking the name of the
19940         method to determine if its a destructor, create a new derived
19941         class from Method called Destructor, and test for that.  
19942
19943         * cs-parser.jay: Create a Destructor object instead of a Method.  
19944
19945         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19946
19947         Fixes: 52933
19948
19949 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19950
19951         * expression.cs (Binary.ResolveOperator): Perform an implicit
19952         conversion from MethodGroups to their delegate types on the
19953         Addition operation.
19954
19955         * delegate.cs: Introduce a new class DelegateCreation that is the
19956         base class for `NewDelegate' and `ImplicitDelegateCreation',
19957         factor some code in here.
19958
19959         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19960         conversion from MethodGroups to compatible delegate types. 
19961
19962         * ecore.cs (Expression.Resolve): Do not flag error 654
19963         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19964         we allow conversions from MethodGroups to delegate types now.
19965
19966         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19967         assignments in v2 either.
19968
19969 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19970
19971         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19972         static read-only fields in ctors.
19973
19974         Applied patch from Benjamin Jemlich 
19975
19976         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19977
19978 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19979
19980         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19981         here to return true, as they can be used like this:
19982
19983                 (XXX) int.MEMBER ()
19984
19985         Fixed 49836 and all the other dups
19986
19987 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19988
19989         * driver.cs: Implement /win32res and /win32icon.
19990
19991 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19992
19993         * cs-parser.jay: Add a rule to improve error handling for the
19994         common mistake of placing modifiers after the type.
19995
19996 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19997
19998         * cs-parser.jay (interface_event_declaration): Catch
19999         initialization of events on interfaces, and report cs0068
20000
20001         * cs-parser.jay (interface_event_declaration): Catch
20002         initialization of events. 
20003
20004         * ecore.cs: Better report missing constructors.
20005
20006         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20007         the error reporting done in the wrong place.  Fix.
20008
20009         * expression.cs (Binary.ResolveOperator): Catch the 
20010         operator + (E x, E y) error earlier, and later allow for implicit
20011         conversions in operator +/- (E e, U x) from U to the underlying
20012         type of E.
20013
20014         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20015         52596, if the container class is abstract, the default constructor
20016         is protected otherwise its public (before, we were always public).
20017
20018         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20019         fixed statement.
20020
20021         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20022         Jemlich that fixes bug #52597, MCS was generating invalid code for
20023         idisposable structs.   Thanks to Ben for following up with this
20024         bug as well.
20025
20026 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20027
20028         * driver.cs: Allow assemblies without code to be generated, fixes
20029         52230.
20030
20031 2004-01-07  Nick Drochak <ndrochak@gol.com>
20032
20033         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20034
20035 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20036
20037         * cs-parser.jay: Add rules to improve error reporting if fields or
20038         methods are declared at the namespace level (error 116)
20039
20040         * Add rules to catch event add/remove
20041
20042 2004-01-04  David Sheldon <dave-mono@earth.li>
20043
20044   * expression.cs: Added matching ")" to error message for 
20045   CS0077
20046
20047 2004-01-03 Todd Berman <tberman@gentoo.org>
20048
20049         * ecore.cs, attribute.cs:
20050         Applying fix from #52429.
20051
20052 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20053
20054         * ecore.cs, expression.cs, statement.cs:
20055         Total rewrite of how we handle branching. We
20056         now handle complex boolean expressions with fewer
20057         jumps. As well if (x == 0) no longer emits a ceq.
20058
20059         if (x is Foo) is much faster now, because we generate
20060         better code.
20061
20062         Overall, we get a pretty big improvement on our benchmark
20063         tests. The code we generate is smaller and more readable.
20064
20065         I did a full two-stage bootstrap. The patch was reviewed
20066         by Martin and Miguel.
20067
20068 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20069
20070         * cs-parser.jay: Make primary_expression not take a QI.
20071         we dont need this because the member_access rule covers
20072         us here. So we replace the rule with just IDENTIFIER.
20073
20074         This has two good effects. First, we remove a s/r conflict.
20075         Second, we allocate many fewer QualifiedIdentifier objects.
20076
20077 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20078
20079         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20080         set the correct information via SRE. This prevents
20081         hanging on the MS runtime. Fixes #29374.
20082
20083 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20084
20085         * convert.cs: correctly handle conversions to value types
20086         from Enum and ValueType as unboxing conversions.
20087
20088         Fixes bug #52569. Patch by Benjamin Jemlich.
20089
20090 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20091
20092         * expression.cs (BetterConversion): Prefer int -> uint
20093         over int -> ulong (csc's behaviour). This fixed bug #52046.
20094
20095 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20096
20097         * decl.cs (MemberCache.FindMembers): now returns a
20098         MemberInfo [].
20099
20100         * typemanager.cs: In general, go with with ^^.
20101         (CopyNewMethods): take an IList.
20102         (RealMemberLookup): Only allocate an arraylist
20103         if we copy from two sets of methods.
20104
20105         This change basically does two things:
20106         1) Fewer array lists allocated due to CopyNewMethods.
20107         2) the explicit cast in MemberList costed ALOT.
20108
20109 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20110
20111         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20112         a hashtable to avoid needless string allocations when an identifier is
20113         used more than once (the common case).
20114
20115 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20116
20117         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20118         is broken, it will not return anything. So, we
20119         have to use the information we have in mcs to
20120         do the task.
20121
20122         * typemanager.cs: Add a cache for GetInterfaces,
20123         since this will now be used more often (due to ^^)
20124
20125         (GetExplicitInterfaces) New method that gets the
20126         declared, not effective, interfaces on a type
20127         builder (eg, if you have interface IFoo, interface
20128         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20129         { IBar }.
20130
20131         This patch makes MCS able to bootstrap itself on
20132         Windows again.
20133
20134 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20135
20136         * expression.cs: Remove the Nop's that Miguel put
20137         in by mistake.
20138
20139 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20140
20141         * report.cs, codegen.cs: Give the real stack trace to
20142         the error when an exception is thrown.
20143
20144 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20145
20146         * decl.cs: only allocate hashtables for ifaces if 
20147         it is an iface!
20148
20149 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20150
20151         * expression.cs: fix the error from cs0121-2.cs
20152         (a parent interface has two child interfaces that
20153         have a function with the same name and 0 params
20154         and the function is called through the parent).
20155
20156 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20157
20158         * class.cs, rootcontext.cs, typmanager.cs: do not
20159         leak pointers.
20160
20161 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20162
20163         * codegen.cs: remove stack for the ec flow branching.
20164         It is already a linked list, so no need.
20165
20166 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20167
20168         * Makefile: Allow custom profiler here.
20169
20170 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20171
20172         * typemanager.cs (LookupType):
20173           - Use a static char [], because split takes
20174             a param array for args, so it was allocating
20175             every time.
20176           - Do not store true in a hashtable, it boxes.
20177
20178 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20179
20180         * flowanalysis.cs: bytify common enums.
20181
20182 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20183
20184         * modifiers.cs: Add a new set of flags for the
20185         flags allowed on explicit interface impls.
20186         * cs-parser.jay: catch the use of modifiers in
20187         interfaces correctly.
20188         * class.cs: catch private void IFoo.Blah ().
20189
20190         All related to bug #50572.
20191
20192 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20193
20194         * decl.cs: Rewrite the consistant accessability checking.
20195         Accessability is not linear, it must be implemented in
20196         a tableish way. Fixes #49704.
20197
20198 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20199
20200         * expression.cs: Handle negation in a checked context.
20201         We must use subtraction from zero. Fixes #38674.
20202
20203 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20204
20205         * class.cs: Ignore static void main in DLLs.
20206         * rootcontext.cs: Handle the target type here,
20207         since we are have to access it from class.cs
20208         * driver.cs: account for the above.
20209
20210 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20211
20212         * report.cs: Give line numbers and files if available.
20213
20214 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20215
20216         * driver.cs: Implement /addmodule.
20217
20218         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20219         ModuleBuilders.
20220
20221 2003-12-20  Martin Baulig  <martin@ximian.com>
20222
20223         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20224         (FieldBase.IsAssigned): Removed this field.
20225         (FieldBase.SetAssigned): New public method.
20226         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20227
20228 2003-12-20  Martin Baulig  <martin@ximian.com>
20229
20230         * expression.cs (LocalVariableReference.DoResolve): Don't set
20231         `vi.Used' if we're called from DoResolveLValue().
20232
20233         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20234         returns the usage vector it just merged into the current one -
20235         pass this one to UsageWarning().
20236         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20237         of the `EmitContext', don't call this recursively on our children.
20238
20239 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20240
20241         * driver.cs: Implement /target:module.
20242
20243 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20244
20245         * support.cs (CharArrayHashtable): New helper class.
20246
20247         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20248         char arrays, not strings, so we can avoid creating a string in
20249         consume_identifier if the identifier is a keyword.
20250
20251 2003-12-16  Martin Baulig  <martin@ximian.com>
20252
20253         * statement.cs (LocalInfo.Assigned): Removed this property.
20254         (LocalInfo.Flags): Removed `Assigned'.
20255         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20256         and uses flow analysis.
20257         (Block.UsageWarning): Made this method private.
20258         (Block.Resolve): Call UsageWarning() if appropriate.
20259
20260         * expression.cs (LocalVariableReference.DoResolve): Always set
20261         LocalInfo.Used here.
20262
20263 2003-12-13  Martin Baulig  <martin@ximian.com>
20264
20265         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20266         any value here; we're now using flow analysis to figure out
20267         whether a statement/block returns a value.
20268
20269 2003-12-13  Martin Baulig  <martin@ximian.com>
20270
20271         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20272         working again.
20273         (FlowBranching.MergeFinally): Don't call
20274         `branching.CheckOutParameters()' here, this is called in
20275         MergeTopBlock().
20276         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20277         when adding the `finally' vector.       
20278
20279 2003-12-13  Martin Baulig  <martin@ximian.com>
20280
20281         * flowanalysis.cs
20282         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20283         actually work and also fix #48962.
20284
20285 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20286
20287         * decl.cs: Do not check System.Object for nested types,
20288         since we know it does not have any. Big bang for buck:
20289
20290         BEFORE:
20291            Run 1:   8.35 seconds
20292            Run 2:   8.32 seconds
20293            corlib:  17.99 seconds
20294         AFTER:
20295            Run 1:   8.17 seconds
20296            Run 2:   8.17 seconds
20297            corlib:  17.39 seconds
20298
20299 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20300
20301         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20302         time we are returning 0 members, so we save alot here.
20303
20304 2003-12-11  Martin Baulig  <martin@ximian.com>
20305
20306         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20307         `MergeChild()', also just take the `FlowBranching' as argument;
20308         call Merge() on it and return the result.
20309         (FlowBranching.Merge): We don't need to do anything if we just
20310         have one sibling.
20311
20312 2003-12-11  Martin Baulig  <martin@ximian.com>
20313
20314         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20315         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20316         Maurer for this idea.
20317
20318 2003-12-11  Martin Baulig  <martin@ximian.com>
20319
20320         * flowanalysis.cs (MergeResult): This class is now gone; we now
20321         use the `UsageVector' for this.  The reason for this is that if a
20322         branching just has one sibling, we don't need to "merge" them at
20323         all - that's the next step to do.
20324         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20325         `MergeResult'.
20326
20327 2003-12-11  Martin Baulig  <martin@ximian.com>
20328
20329         Reworked flow analyis and made it more precise and bug-free.  The
20330         most important change is that we're now using a special `Reachability'
20331         class instead of having "magic" meanings of `FlowReturns'.  I'll
20332         do some more cleanups and optimizations and also add some more
20333         documentation this week.
20334
20335         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20336         largely reworked this class.
20337         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20338         the new `Reachability' class instead of having "magic" values here.
20339         (FlowBranching): We're now using an instance of `Reachability'
20340         instead of having separate `Returns', `Breaks' etc. fields.
20341
20342         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20343         based on flow analysis; ignore the return value of block.Emit ().
20344
20345 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20346
20347         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20348         if they are private.
20349
20350 2003-12-09  Martin Baulig  <martin@ximian.com>
20351
20352         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20353         call them directly on the UsageVector.
20354
20355 2003-12-09  Martin Baulig  <martin@ximian.com>
20356
20357         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20358         Changed return type from `FlowReturns' to `Reachability'.
20359
20360 2003-12-09  Martin Baulig  <martin@ximian.com>
20361
20362         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20363         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20364         `Reachable' fields with a single `Reachability' one.
20365
20366 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20367
20368         * class.cs (FindMembers): Remove foreach's.
20369
20370         Bootstrap times:
20371
20372         BEFORE
20373                 Run 1:   8.74 seconds
20374                 Run 2:   8.71 seconds
20375
20376         AFTER
20377                 Run 1:   8.64 seconds
20378                 Run 2:   8.58 seconds
20379
20380
20381 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20382
20383         * cs-parser.jay:
20384         * gen-treedump.cs:
20385         * statement.cs:
20386         This patch does a few things:
20387                 1. EmptyStatement is now a singleton, so it is never reallocated.
20388                 2. All blah is EmptyStatement constructs have been changed to
20389                    blah == EmptyStatement.Value, which is much faster and valid
20390                    now that EmptyStatement is a singleton.
20391                 3. When resolving a block, rather than allocating a new array for
20392                    the non-empty statements, empty statements are replaced with
20393                    EmptyStatement.Value
20394                 4. Some recursive functions have been made non-recursive.
20395         Mainly the performance impact is from (3), however (1) and (2) are needed for
20396         this to work. (4) does not make a big difference in normal situations, however
20397         it makes the profile look saner.
20398
20399         Bootstrap times:
20400
20401         BEFORE
20402         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20403         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20404         Total memory allocated: 56397 KB
20405
20406         AFTER
20407         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20408         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20409         Total memory allocated: 55666 KB
20410
20411 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20412
20413         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20414         than the hashtable in a hashtable version
20415
20416         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20417         we always end up concating a string. This results in a huge perf
20418         loss, because many strings have to be tracked by the GC. In this
20419         patch, we first use a hashtable that works with two keys, so that
20420         the strings do not need to be concat'ed.
20421
20422         Bootstrap times:
20423         BEFORE
20424                 Run 1:   8.74 seconds
20425                 Run 2:   8.71 seconds
20426
20427         AFTER
20428                 Run 1:   8.65 seconds
20429                 Run 2:   8.56 seconds
20430
20431 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20432
20433         * Makefile: Add a new target `do-time' that does a quick and simple
20434         profile, leaving easy to parse output.
20435
20436 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20437
20438         * codegen.cs (Init): Create the dynamic assembly with 
20439         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20440
20441 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20442
20443         * support.cs: Make the PtrHashtable use only one
20444         instance of its comparer.
20445
20446 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20447
20448         * typemanager.cs: Fix lookup of GetNamespaces.
20449
20450 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20451
20452         * expression.cs: Removed redundant line.
20453
20454         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20455         ArrayLists, use for loops with bounds.  
20456
20457         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20458         arraylist.
20459
20460         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20461         arraylists, use for loop with bounds.
20462
20463         The above three changes give us a 0.071 second performance
20464         improvement out of 3.294 seconds down to 3.223.  On my machine
20465         the above changes reduced the memory usage by 1,387 KB during
20466         compiler bootstrap.
20467
20468         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20469         QualifiedIdentifiers.  Before we created a new string through
20470         concatenation, and mostly later on, the result would be
20471         manipulated by DecomposeQI through string manipulation.
20472
20473         This reduced the compiler memory usage for bootstrapping from
20474         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20475         compile times in 0.05 seconds.
20476
20477 2003-11-28  Dick Porter  <dick@ximian.com>
20478
20479         * support.cs: Do string compares with the Invariant culture.
20480
20481         * rootcontext.cs: 
20482         * gen-treedump.cs: 
20483         * expression.cs: 
20484         * driver.cs: 
20485         * decl.cs: 
20486         * codegen.cs: 
20487         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20488         the comparison is done with the Invariant culture.
20489
20490 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20491
20492         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20493         GetEnumerator method.
20494
20495         (ProbeCollectionType): Iterate starting at the most specific type
20496         upwards looking for a GetEnumerator
20497
20498         * expression.cs: Shift count can be up to 31 for int/uint and 63
20499         for long/ulong.
20500
20501 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20502
20503         * statement.cs (Block.LookupLabel): Also look for the label on the
20504         children blocks.  Use a hash table to keep track of visited
20505         nodes. 
20506
20507         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20508         we actually did transform the other operand, otherwise fall back
20509         to the common codepath that casts to long.
20510
20511         * cs-tokenizer.cs: Use the same code pattern as the int case.
20512         Maybe I should do the parsing myself, and avoid depending on the
20513         Parse routines to get this done.
20514
20515 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20516
20517         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20518         which fixes bug 51347.  This time test it.
20519
20520         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20521         attributes for example can not tell the difference between these.
20522         The difference was only a syntax feature of the language. 
20523
20524         * attribute.cs: Apply attributes to delegates.
20525
20526         * delegate.cs: Call the apply attributes method.
20527
20528 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20529
20530         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20531         comparing 0 vs Byte.MinValue, not the value
20532
20533         (ImplicitConversionRequired): When reporting a conversion error,
20534         use error 31 to print out the constant error instead of the
20535         simpler 29.
20536
20537         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20538         which fixes bug 51347.
20539
20540 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20541
20542         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20543         which fixes the -warnaserror command line option.
20544
20545 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20546
20547         * cfold.cs (DoNumericPromotions): During constant folding of
20548         additions on UIntConstant, special case intconstants with
20549         IntConstants like we do on the expression binary operator. 
20550
20551 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20552
20553         * convert.cs (ImplicitReferenceConversion): We were missing a case
20554         (System.Enum are not value types or class types, so we need to
20555         classify them separatedly).
20556
20557         * driver.cs: We do not support error 2007.
20558
20559 2003-11-12 Jackson Harper <jackson@ximian.com>
20560
20561         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20562         system directory. Also use the full file name so users can
20563         libraries names mscorlib-o-tron.dll in a non system dir.
20564
20565 2003-11-10  Martin Baulig  <martin@ximian.com>
20566
20567         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20568         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20569         calling `ResolveType()' on them, directly assign their `Type'.
20570
20571 2003-11-08  Martin Baulig  <martin@ximian.com>
20572
20573         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20574         return value and the `out parent' parameter.
20575         (TypeContainer.DefineType): Moved the CS0644 check into
20576         GetClassBases().  Don't pass the interface types to the
20577         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20578         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20579
20580         * ecore.cs (TypeExpr.IsAttribute): New property.
20581         (TypeExpr.GetInterfaces): New method.
20582
20583         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20584         TypeExpr instead of a Type.
20585         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20586         (Interface.DefineType): Don't pass the interface types to the
20587         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20588         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20589
20590         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20591         instead of a `Type[]'.
20592         (TypeManager.RegisterBuilder): Likewise.
20593         (TypeManager.AddUserInterface): Likewise.
20594         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20595         `Type[]' and also return a `TypeExpr[]'.
20596         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20597
20598 2003-11-08  Martin Baulig  <martin@ximian.com>
20599
20600         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20601         Expression.     
20602
20603 2003-11-08  Martin Baulig  <martin@ximian.com>
20604
20605         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20606         TypeManager.ResolveExpressionTypes().
20607
20608         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20609         instead of an Expression.
20610         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20611         (TypeExpression): New public class; formerly known as `TypeExpr'.
20612
20613         * expression.cs (ComposedCast): Derive from TypeExpr.
20614
20615         * typemanager.cs (TypeManager.system_*_expr): These are now
20616         TypExpr's instead of Expression's.
20617         (TypeManager.ResolveExpressionTypes): New public static function;
20618         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20619         of them.        
20620
20621 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20622
20623         * expression.cs (New.DoResolve): Do not dereference value that
20624         might be a null return.
20625
20626         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20627         sure that the constant value has the right type.  Fixes an
20628         unreported bug, similar to 50425.
20629
20630         * const.cs (Const.LookupConstantValue): Call
20631         ImplicitStandardConversionExists before doing a conversion to
20632         avoid havng the TypeManager.ChangeType do conversions.
20633
20634         Reduced the number of casts used
20635
20636         (Const.ChangeType): New routine to enable reuse of the constant
20637         type changing code from statement.
20638
20639         * typemanager.cs (ChangeType): Move common initialization to
20640         static global variables.
20641
20642         Fixes #50425.
20643
20644         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20645         every value type to go through, even if it was void.  Fix that. 
20646
20647         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20648         character of the define, and the is_identifier_part_character for
20649         the rest of the string.
20650
20651 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20652
20653         * expression.cs (UnaryMutator.EmitCode): When I updated
20654         LocalVariableReference.DoResolve, I overdid it, and dropped an
20655         optimization done on local variable references.
20656
20657 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20658
20659         * ecore.cs: Convert the return from Ldlen into an int.
20660
20661 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20662
20663         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20664         the accessibility, this is a special case for toplevel non-public
20665         classes (internal for instance).
20666
20667 2003-10-20  Nick Drochak <ndrochak@gol.com>
20668
20669         * ecore.cs: Fix typo and build.  Needed another right paren.
20670
20671 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20672
20673         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20674         `internal' case regular and protected, but not allowing protected
20675         to be evaluated later.  Bug 49840
20676
20677 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20678
20679         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20680         to kb.Nlast, and not the kb.nFirst to isolate the switch
20681         statement.
20682
20683         Extract the underlying type, so enumerations of long/ulong are
20684         treated like long/ulong.
20685
20686 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20687
20688         * expression.cs (New): Overload the meaning of RequestedType to
20689         track the possible creation of the NewDelegate type, since
20690         DoResolve is invoked more than once for new constructors on field
20691         initialization.
20692
20693         See bugs: #48800 and #37014
20694
20695         * cs-parser.jay (declare_local_constants): Take an arraylist
20696         instead of a single constant.
20697
20698         (local_constant_declaration): It should take a
20699         constant_declarators, not a constant_declarator.  Fixes 49487
20700
20701         * convert.cs: Fix error report.
20702
20703 2003-10-13 Jackson Harper <jackson@ximian.com>
20704
20705         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20706         bug #49611
20707
20708 2003-10-09  Martin Baulig  <martin@ximian.com>
20709
20710         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20711         to the .ctor.
20712         (MethodCore.DoDefineParameters): Removed the TypeContainer
20713         argument; use the DeclSpace which was passed to the .ctor instead.
20714         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20715         TypeContainer; we only need a DeclSpace here.
20716
20717 2003-10-09  Martin Baulig  <martin@ximian.com>
20718
20719         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20720         to the .ctor.
20721         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20722         EmitContext's .ctor.    
20723
20724 2003-10-09  Martin Baulig  <martin@ximian.com>
20725
20726         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20727         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20728         AsAccessible(), moved them as well.
20729
20730         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20731
20732 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20733
20734         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20735
20736 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20737
20738         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20739         generation for >=, as spotted by Paolo, bug 48679.  
20740         Patch from David Waite.
20741
20742         * cs-tokenizer.cs: Add handling for #pragma.
20743
20744         * cs-parser.jay: Allow for both yield and yield return in the
20745         syntax.  The anti-cobolization of C# fight will go on!
20746
20747         * class.cs (TypeBuilder.DefineType): Catch error condition here
20748         (Parent.DefineType erroring out and returning null).
20749
20750         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20751         coping with enumerations variables, we were mistakenly processing
20752         them as a regular value type instead of built-in types.  Fixes the
20753         bug #48063
20754
20755         * typemanager.cs (IsBuiltinOrEnum): New method.
20756
20757 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20758
20759         * cs-parser.jay: Upgrade: yield now needs the return clause.
20760
20761 2003-09-19  Martin Baulig  <martin@ximian.com>
20762
20763         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20764         `MemberCache parent' argument.  Normally, an interface doesn't
20765         have a parent type except System.Object, but we use this in gmcs
20766         for generic type parameters.
20767
20768 2003-09-18  Martin Baulig  <martin@ximian.com>
20769
20770         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20771         on `type.IsInterface'; don't check whether the type has a parent
20772         to determine whether it's an interface.
20773
20774 2003-09-15  Martin Baulig  <martin@ximian.com>
20775
20776         * class.cs (TypeContainer.DefineType): Added an error flag to
20777         avoid reporting duplicate CS0146's ("class definition is
20778         circular.").
20779
20780         * driver.cs (Driver.MainDriver): Abort if
20781         RootContext.ResolveTree() reported any errors.
20782
20783 2003-09-07  Martin Baulig  <martin@ximian.com>
20784
20785         * report.cs (Error, Warning): Added overloaded versions which take
20786         a `params object[] args' and call String.Format().
20787
20788 2003-09-07  Martin Baulig  <martin@ximian.com>
20789
20790         * decl.cs (DeclSpace..ctor): Don't call
20791         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20792         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20793         (DeclSpace.RecordDecl): New method.
20794
20795         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20796
20797 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20798
20799         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20800         value attributes to be applied to ParameterBuilders.
20801
20802         * class.cs (MethodCore.LabelParameters): Make static and more
20803         generic so that it can be used from other places - like interface
20804         methods, for instance.
20805
20806         * interface.cs (Interface.Emit): Call LabelParameters before
20807         emitting attributes on the InterfaceMethod.
20808
20809 2003-08-26  Martin Baulig  <martin@ximian.com>
20810
20811         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20812         resolving aliases; fixes #47927.
20813
20814 2003-08-26  Martin Baulig  <martin@ximian.com>
20815
20816         * statement.cs (Using.DoResolve): This is internally emitting a
20817         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20818         do not always return.  Fixes #47681.
20819
20820 2003-08-26  Martin Baulig  <martin@ximian.com>
20821
20822         * decl.cs (MemberCore): Moved WarningNotHiding(),
20823         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20824         into MemberBase.
20825         (AdditionResult): Make this nested in DeclSpace.
20826         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20827         argument; call NamespaceEntry.Define() unless we're nested in a
20828         class or struct.
20829
20830         * namespace.cs (Namespace.DefineName): New public function.  This
20831         is called from DeclSpace's .ctor to add 
20832         (Namespace.Lookup): Include DeclSpaces in the lookup.
20833
20834         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20835
20836         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20837
20838 2003-08-25  Martin Baulig  <martin@ximian.com>
20839
20840         * convert.cs (Convert.ExplicitReferenceConversion): When
20841         converting from an interface type to a class, unbox if the target
20842         type is a struct type.  Fixes #47822.
20843
20844 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20845
20846         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20847         #47854.
20848
20849 2003-08-22  Martin Baulig  <martin@ximian.com>
20850
20851         * class.cs (TypeManager.DefineType): When defining a nested type,
20852         call DefineType() on our parent; fixes #47801.
20853
20854 2003-08-22  Martin Baulig  <martin@ximian.com>
20855
20856         * class.cs (MethodData.Define): While checking if a method is an
20857         interface implementation, improve the test a bit more to fix #47654.
20858
20859 2003-08-22  Martin Baulig  <martin@ximian.com>
20860
20861         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20862         correctly; fixes #47722.
20863
20864 2003-08-22  Martin Baulig  <martin@ximian.com>
20865
20866         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20867         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20868
20869         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20870
20871 2003-08-22  Martin Baulig  <martin@ximian.com>
20872
20873         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20874         can only be assigned in static constructors.  Fixes #47161.
20875
20876 2003-08-22  Martin Baulig  <martin@ximian.com>
20877
20878         Rewrote and improved the flow analysis code.
20879
20880         * flowbranching.cs (FlowBranching): Make this class abstract.
20881         (FlowBranching.CreateBranching): New static function to create a
20882         new flow branching.
20883         (FlowBranchingBlock, FlowBranchingException): New classes.
20884         (FlowBranching.UsageVector.Type): New public readonly field.
20885         (FlowBranching.UsageVector.Breaks): Removed the setter.
20886         (FlowBranching.UsageVector.Returns): Removed the setter.
20887         (FlowBranching.UsageVector): Added Break(), Return(),
20888         NeverReachable() and Throw() methods to modify the reachability.
20889         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20890         done by FlowBranching.Merge().
20891         (FlowBranching.UsageVector.MergeChild): New method; merges the
20892         merge result into the current vector.
20893         (FlowBranching.Merge): New abstract method to merge a branching.
20894
20895 2003-08-12  Martin Baulig  <martin@ximian.com>
20896
20897         * expression.cs (Indirection.CacheTemporaries): Create the
20898         LocalTemporary with the pointer type, not its element type.
20899
20900 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20901
20902         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20903         token was a keyword or not.
20904
20905         Add `error' options where an IDENTIFIER was expected;  Provide
20906         CheckToken and CheckIdentifierToken convenience error reporting
20907         functions. 
20908
20909         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20910
20911         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20912         NameSpaceEntry NameSpaceEntry.
20913
20914         (LookupInterfaceOrClass): Avoid creating a full qualified name
20915         from namespace and name: avoid doing lookups when we know the
20916         namespace is non-existant.   Use new Tree.LookupByNamespace which
20917         looks up DeclSpaces based on their namespace, name pair.
20918
20919         * driver.cs: Provide a new `parser verbose' to display the
20920         exception thrown during parsing.  This is turned off by default
20921         now, so the output of a failure from mcs is more graceful.
20922
20923         * namespace.cs: Track all the namespaces defined in a hashtable
20924         for quick lookup.
20925
20926         (IsNamespace): New method
20927
20928 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20929
20930         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20931         we know that we need to concatenate (full typename can never be
20932         null). 
20933
20934         * class.cs: ditto.
20935
20936         * statement.cs: Use a bitfield;  Do not initialize to null things
20937         which are done by the constructor by default.
20938
20939         * cs-parser.jay: bug fix, parameter was 4, not 3.
20940
20941         * expression.cs: Just use the property;
20942
20943         * statement.cs: No need for GetVariableInfo method.
20944
20945 2003-08-08  Martin Baulig  <martin@ximian.com>
20946
20947         * flowanalysis.cs (FlowReturns): This is now nested in the
20948         `FlowBranching' class.
20949         (MyBitVector): Moved this here from statement.cs.
20950         (FlowBranching.SiblingType): New enum type.
20951         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20952
20953 2003-08-07  Martin Baulig  <martin@ximian.com>
20954
20955         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20956         `FlowBranching' class and called `BranchingType'.
20957
20958 2003-08-07  Martin Baulig  <martin@ximian.com>
20959
20960         * flowanalysis.cs: Moved all the control flow analysis code into
20961         its own file.
20962
20963 2003-08-07  Martin Baulig  <martin@ximian.com>
20964
20965         * assign.cs (Assign.DoResolve): `target' must either be an
20966         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20967         #37319.
20968
20969 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20970
20971         * expression.cs (BinaryMethod): This kind of expression is created by the
20972         Binary class if it determines that the operator has to be handled
20973         by a method.
20974
20975         (BinaryDelegate): This kind of expression is created if we are
20976         dealing with a + or - operator on delegates.
20977
20978         (Binary): remove method, argumetns, and DelegateOperator: when
20979         dealing with methods, 
20980
20981         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20982
20983         * statement.cs (Block): use bitfields for the three extra booleans
20984         we had in use.   Remove unused topblock parameter.
20985
20986         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20987
20988         * assign.cs: Drop extra unneeded tests.
20989
20990 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20991
20992         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20993
20994         * statement.cs (Foreach): Use VariableStorage instead of
20995         LocalBuilders.   
20996
20997         * codegen.cs (VariableStorage): New class used by clients that
20998         require a variable stored: locals or fields for variables that
20999         need to live across yield.
21000
21001         Maybe provide a convenience api for EmitThis+EmitLoad?
21002
21003         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21004         these bad boys.
21005
21006 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21007
21008         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21009         RemapParameterLValue): New methods that are used to turn a
21010         precomputed FieldInfo into an expression like this:
21011
21012                 instance.FieldInfo
21013
21014         The idea is to use this instead of making LocalVariableReference
21015         have more than one meaning.
21016
21017         * cs-parser.jay: Add error production to BASE.
21018
21019         * ecore.cs: Deal with TypeManager.GetField returning null, which
21020         is now a valid return value.
21021
21022         (FieldExprNoAddress): New expression for Fields whose address can
21023         not be taken.
21024
21025         * expression.cs (LocalVariableReference): During the resolve
21026         phases, create new expressions if we are in a remapping context.
21027         Remove code that dealt with remapping here.
21028
21029         (ParameterReference): same.
21030
21031         (ProxyInstance): New expression, like the `This' expression, but
21032         it is born fully resolved.  We know what we are doing, so remove
21033         the errors that are targeted to user-provided uses of `this'.
21034
21035         * statement.cs (Foreach): our variable is now stored as an
21036         Expression;  During resolution, follow the protocol, dont just
21037         assume it will return this.
21038
21039 2003-08-06  Martin Baulig  <martin@ximian.com>
21040
21041         * support.cs (SeekableStreamReader.cs): New public class.
21042
21043         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21044         SeekableStreamReader instead of the normal StreamReader.
21045
21046 2003-08-04  Martin Baulig  <martin@ximian.com>
21047
21048         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21049         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21050         deambiguate casts and delegate invocations.
21051         (parenthesized_expression): Use the new tokens to ensure this is
21052         not a cast of method invocation.
21053
21054         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21055         when reading a `)' and Deambiguate_CloseParens () was previously
21056         called.
21057
21058         * expression.cs (ParenthesizedExpression): New class.  This is
21059         just used for the CS0075 test.
21060         (Binary.DoResolve): Check for CS0075.   
21061
21062 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21063
21064         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21065         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21066         reference comparison.
21067
21068         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21069         examine the ReturnType for equality - this is necessary in the
21070         cases of implicit and explicit operators whose signature also
21071         includes the return type.
21072
21073 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21074
21075         * namespace.cs: Cache the result of the namespace computation,
21076         instead of computing it every time.
21077
21078 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21079
21080         * decl.cs: Use a global arraylist that we reuse over invocations
21081         to avoid excesive memory consumption.  Reduces memory usage on an
21082         mcs compile by one meg (45 average).
21083
21084         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21085         private, work around that.
21086
21087 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21088
21089         * literal.cs (IntLiteral): Define Zero and One static literals. 
21090
21091         * cs-parser.jay (integer_literal): use static literals to reduce
21092         memory usage for the most used literals (0, 1 and -1).  211kb
21093         reduced in memory usage.
21094
21095         Replace all calls to `new ArrayList' with `new
21096         ArrayList(4)' which is a good average number for most allocations,
21097         and also requires only 16 bytes of memory for its buffer by
21098         default. 
21099
21100         This reduced MCS memory usage in seven megabytes for the RSS after
21101         bootstrapping.
21102
21103 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21104
21105         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21106         handle params methods the correct way by forming only one
21107         applicable set with params and normal methods in them. Earlier we
21108         were looking at params methods only if we found no normal methods
21109         which was not the correct thing to do.
21110
21111         (Invocation.BetterFunction): Take separate arguments indicating
21112         when candidate and the best method are params methods in their
21113         expanded form.
21114
21115         This fixes bugs #43367 and #46199.
21116
21117         * attribute.cs: Documentation updates.
21118
21119         (CheckAttribute): Rename to CheckAttributeTarget.
21120         (GetValidPlaces): Rename to GetValidTargets.
21121
21122         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21123         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21124
21125         Fixes bug #44468.
21126
21127 2003-07-28  Martin Baulig  <martin@ximian.com>
21128
21129         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21130         name when looking up the base class of a nested class.  Fixes #46977.
21131
21132 2003-07-26  Martin Baulig  <martin@ximian.com>
21133
21134         * expression.cs (Indexers.Indexer): New nested struct; contains
21135         getter, setter and the indexer's type.
21136         (Indexers.Properties): This is now an ArrayList of
21137         Indexers.Indexer's.
21138         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21139         indexer doesn't have any getters.
21140
21141         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21142         for embedded property and indexer assignments.
21143
21144 2003-07-26  Martin Baulig  <martin@ximian.com>
21145
21146         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21147         preprocessor directive is not the first non-whitespace character
21148         on a line.
21149
21150 2003-07-26  Martin Baulig  <martin@ximian.com>
21151
21152         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21153         namespace parsing, follow the spec more closely.
21154
21155         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21156         NamespaceEntry.Lookup().
21157
21158 2003-07-25  Martin Baulig  <martin@ximian.com>
21159
21160         * MethodCore.cs (OverridesSomething): New public field; it's set
21161         from TypeContainer.DefineMembers if this method overrides
21162         something (which doesn't need to be a method).  Fix #39462.
21163
21164 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21165
21166         * typemanager.cs (GetMembers): Ensure that the list of members is
21167         reversed. This keeps things in sync.
21168
21169         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21170         find an AttributeUsage attribute.
21171
21172         * expression.cs (Invocation.OverloadResolve): Perform the check
21173         which disallows Invoke to be directly called on a Delegate.
21174
21175         (Error_InvokeOnDelegate): Report error cs1533.
21176
21177 2003-07-25  Martin Baulig  <martin@ximian.com>
21178
21179         * expression.cs (Indexers.GetIndexersForType): Only look in the
21180         interface hierarchy if the requested type is already an
21181         interface.  Fixes #46788 while keeping #46502 fixed.
21182
21183 2003-07-25  Martin Baulig  <martin@ximian.com>
21184
21185         * class.cs (TypeContainer.DefineMembers): Check whether all
21186         readonly fields have been assigned and report warning CS0649 if
21187         not.
21188
21189         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21190         a valuetype.
21191
21192 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21193
21194         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21195         returned from GetMethods to make things consistent with the
21196         assumptions MCS makes about ordering of methods.
21197
21198         This should comprehensively fix bug #45127 and it does :-)
21199
21200         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21201         ordering is actually reverse.
21202
21203         * Clean up some debug messages I left lying around.
21204
21205         * interface.cs (Populate*): Get rid of code which emits attributes
21206         since the stage in which we emit attributes is the 'Emit' stage,
21207         not the define stage.
21208
21209         (Emit): Move attribute emission for interface members here.
21210
21211 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21212
21213         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21214         closely: we eliminate methods in base types when we have an
21215         applicable method in a top-level type.
21216
21217         Please see section 14.5.5.1 for an exact description of what goes
21218         on. 
21219
21220         This fixes bug #45127 and a host of other related to corlib compilation.
21221
21222         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21223         array is the method corresponding to the top-level type (this is
21224         because of the changes made to icall.c) so we change this
21225         accordingly.
21226
21227         (MethodGroupExpr.Name): This too.
21228
21229         * typemanager.cs (GetElementType): New method which does the right
21230         thing when compiling corlib. 
21231
21232         * everywhere: Make use of the above in the relevant places.
21233
21234 2003-07-22  Martin Baulig  <martin@ximian.com>
21235
21236         * cs-parser.jay (invocation_expression): Moved
21237         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21238         `cast_expression', but create a InvocationOrCast which later
21239         resolves to either an Invocation or a Cast.
21240
21241         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21242         method; call this before EmitStatement() to make sure that this
21243         expression can be used as a statement.
21244
21245         * expression.cs (InvocationOrCast): New class; resolves to either
21246         an Invocation or a Cast.
21247
21248         * statement.cs (StatementExpression): Call ResolveStatement() on
21249         the ExpressionStatement before emitting it.
21250
21251 2003-07-21  Martin Baulig  <martin@ximian.com>
21252
21253         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21254         `ref' and `out' attributes match; fixes #46220.
21255         (MemberAccess.ResolveMemberAccess): You can't reference a type
21256         through an expression; fixes #33180.
21257         (Indexers.GetIndexersForType): Don't return the indexers from
21258         interfaces the class implements; fixes #46502.
21259
21260 2003-07-21  Martin Baulig  <martin@ximian.com>
21261
21262         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21263         CS0661 checks; fixes bug #30442.
21264
21265 2003-07-21  Martin Baulig  <martin@ximian.com>
21266
21267         * decl.cs (AdditionResult): Added `Error'.
21268
21269         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21270
21271         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21272         makes cs0031.cs actually work.
21273
21274 2003-07-20  Martin Baulig  <martin@ximian.com>
21275
21276         * namespace.cs: Fixed that bug which caused a crash when compiling
21277         the debugger's GUI.
21278
21279 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21280
21281         * typemanager.cs (LookupTypeReflection): Never expose types which
21282         are NotPublic, NestedPrivate, NestedAssembly, or
21283         NestedFamANDAssem.  We used to return these, and later do a check
21284         that would report a meaningful error, but the problem is that we
21285         would not get the real match, if there was a name override.
21286
21287 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21288
21289         * namespace.cs (Namespace, Name): Do not compute the namespace
21290         name dynamically, compute it in the constructor.  This reduced
21291         memory usage by 1697 KB.
21292
21293         * driver.cs: Use --pause to pause at the end.
21294
21295 2003-07-17  Peter Williams  <peter@newton.cx>
21296
21297         * Makefile: Change the name of the test target so that it doesn't
21298         conflict with the recursive test target.
21299
21300 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21301
21302         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21303         AddressOf): Do not use EmitThis, that was wrong, use the actual
21304         this pointer.
21305
21306 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21307
21308         * class.cs (MethodData.Define): While checking if a method is an
21309         interface implementation, improve the test: If we are not public
21310         (use new test here: use the computed MethodAttributes directly,
21311         instead of the parsed modifier flags) check if the `implementing'
21312         method comes from an interface or not.
21313
21314         * pending.cs (VerifyPendingMethods): Slightly better error
21315         message.
21316
21317         * makefile: add test target that does the mcs bootstrap.
21318
21319 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21320
21321         * interface.cs (Define): Do nothing here since there are no
21322         members to populate etc. Move the attribute emission out of here
21323         since this was just totally the wrong place to put it. Attribute
21324         application happens during the 'Emit' phase, not in the 'Define'
21325         phase.
21326
21327         (Emit): Add this method and move the attribute emission here
21328
21329         * rootcontext.cs (EmitCode): Call the Emit method on interface
21330         types too.
21331
21332 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21333
21334         * expression.cs (OverloadResolve): Report error only if Location
21335         is not 'Null' which means that there was a probe going on.
21336
21337 2003-07-14  Martin Baulig  <martin@ximian.com>
21338
21339         * expression.cs (ConditionalLogicalOperator): New public class to
21340         implement user defined conditional logical operators.
21341         This is section 14.11.2 in the spec and bug #40505.
21342
21343 2003-07-14  Martin Baulig  <martin@ximian.com>
21344
21345         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21346
21347 2003-07-14  Martin Baulig  <martin@ximian.com>
21348
21349         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21350
21351         * ecore.cs (IVariable.VerifyFixed): New interface method.
21352
21353         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21354         operator, check whether the variable is actually fixed.  Fixes bug
21355         #36055.  Set a variable definitely assigned when taking its
21356         address as required by the spec.
21357
21358         * statement.cs (LocalInfo.IsFixed): New field.
21359         (LocalInfo.MakePinned): Set `IsFixed' to true.
21360
21361 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21362
21363         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21364         for .ctors, ensure that we only ask for members declared in the
21365         attribute type (BindingFlags.DeclaredOnly).
21366
21367         Fixes bug #43632.
21368
21369         * expression.cs (Error_WrongNumArguments): Report error 1501
21370         correctly the way CSC does.
21371
21372 2003-07-13  Martin Baulig  <martin@ximian.com>
21373
21374         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21375         lookup on the fully qualified name, to make things like "X.X" work
21376         where "X.X" is a fully qualified type name, but we also have a
21377         namespace "X" in the using list.  Fixes #41975.
21378
21379 2003-07-13  Martin Baulig  <martin@ximian.com>
21380
21381         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21382         function. If we're a CompoundAssign, we need to create an embedded
21383         CompoundAssign, not an embedded Assign.
21384         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21385         Fixes #45854.
21386
21387 2003-07-13  Martin Baulig  <martin@ximian.com>
21388
21389         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21390         work to fix bug #46088.
21391
21392 2003-07-13  Ravi Pratap <ravi@ximian.com>
21393
21394         * class.cs (Operator.Emit): Do not emit attributes here - it is
21395         taken care of by the Method class that we delegate too. This takes
21396         care of bug #45876.
21397
21398 2003-07-10  Martin Baulig  <martin@ximian.com>
21399
21400         * expression.cs (TypeOfVoid): New class.
21401         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21402
21403 2003-07-10  Martin Baulig  <martin@ximian.com>
21404
21405         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21406         bug #35957.
21407
21408 2003-07-10  Martin Baulig  <martin@ximian.com>
21409
21410         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21411         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21412
21413         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21414
21415         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21416
21417 2003-07-10  Martin Baulig  <martin@ximian.com>
21418
21419         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21420         of decimal.  Fixes #42850.
21421
21422         NOTE: I also fixed the created byte blob, but this doesn't work on
21423         the MS runtime and csc never produces any byte blobs for decimal
21424         arrays.
21425
21426 2003-07-10  Martin Baulig  <martin@ximian.com>
21427
21428         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21429         structs; fixes #32068.
21430         (Block.AddChildVariableNames): Fixed #44302.
21431
21432 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21433
21434         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21435
21436 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21437
21438         * attribute.cs: And this test is onger needed.
21439
21440 2003-07-08  Martin Baulig  <martin@ximian.com>
21441
21442         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21443         inaccessible types.  Fixes #36313.
21444
21445         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21446
21447         * namespace.cs (NamespaceEntry): Create implicit entries for all
21448         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21449         implicit entries for N1.N2 and N1.
21450
21451 2003-07-08  Martin Baulig  <martin@ximian.com>
21452
21453         Rewrote the handling of namespaces to fix a lot of the issues
21454         wrt. `using' aliases etc.
21455
21456         * namespace.cs (Namespace): Splitted this class into a
21457         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21458
21459         * typemanager.cs (TypeManager.IsNamespace): Removed.
21460         (TypeManager.ComputeNamespaces): Only compute namespaces from
21461         loaded assemblies here, not the namespaces from the assembly we're
21462         currently compiling.
21463
21464 2003-07-08  Martin Baulig  <martin@ximian.com>
21465
21466         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21467
21468 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21469
21470         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21471         already fixed it.  
21472
21473         I thought about the memory savings here, but LookupTypeReflection
21474         is used under already very constrained scenarios.  Compiling
21475         corlib or mcs only exposes one hit, so it would not really reduce
21476         any memory consumption.
21477
21478 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21479
21480         * typemanager.cs: fixes bug #45889 by only adding public types from
21481         other assemblies to the list of known types.
21482
21483 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21484
21485         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21486         on the type we resolved.
21487
21488 2003-07-05  Martin Baulig  <martin@ximian.com>
21489
21490         * pending.cs (PendingImplementation.ParentImplements): Don't
21491         create the proxy if the parent is abstract.
21492
21493         * class.cs (TypeContainer.DefineIndexers): Process explicit
21494         interface implementations first.  Fixes #37714.
21495
21496 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21497
21498         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21499         defined recursively;  but since we modify the input parameters
21500         (left is set to `this' temporarily), we reset this value if the
21501         left_is_explicit is false, which gives the original semantics to
21502         the code.  
21503
21504         * literal.cs (NullPointer): new class used to represent a null
21505         literal in a pointer context.
21506
21507         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21508         type is a pointer, use a NullPointer object instead of a
21509         NullLiteral.   Closes 43687
21510
21511         (ExplicitConversion): Convert pointer values using
21512         the conv opcode to the proper type.
21513
21514         * ecore.cs (New): change ValueTypeVariable property into a method,
21515         that returns whether the valuetype is suitable for being used.
21516
21517         * expression.cs (Binary.DoNumericPromotions): Only return if we
21518         the int constant was a valid uint, and we can return both left and
21519         right as uints.  If not, we continue processing, to trigger the
21520         type conversion.  This fixes 39018.
21521
21522         * statement.cs (Block.EmitMeta): During constant resolution, set
21523         the CurrentBlock property on the emitcontext, so that we resolve
21524         constants propertly.
21525
21526 2003-07-02  Martin Baulig  <martin@ximian.com>
21527
21528         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21529         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21530
21531         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21532         than emitting it here.
21533
21534         * statement.cs: Fixed some more flow analysis bugs.
21535
21536 2003-07-02  Martin Baulig  <martin@ximian.com>
21537
21538         * class.cs (MethodData.Define): When implementing interface
21539         methods, set Final unless we're Virtual.
21540
21541         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21542         check work for interface methods.
21543
21544 2003-07-01  Martin Baulig  <martin@ximian.com>
21545
21546         * ecore.cs (EmitContext.This): Replaced this property with a
21547         GetThis() method which takes a Location argument.  This ensures
21548         that we get the correct error location for a CS0188.
21549
21550 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21551
21552         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21553         ImplicitStandardConversion.
21554
21555         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21556
21557 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21558
21559         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21560         optimization.
21561
21562 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21563
21564         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21565         constructors.
21566
21567         (MethodData.Define): Turn off initlocals for unsafe methods.
21568
21569 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21570
21571         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21572         complete;  Fixes #37521.
21573
21574         * delegate.cs: Use Modifiers.TypeAttr to compute the
21575         TypeAttributes, instead of rolling our own.  This makes the flags
21576         correct for the delegates.
21577
21578 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21579
21580         * class.cs (Constructor.Define): Set the private flag for static
21581         constructors as well.
21582
21583         * cs-parser.jay (statement_expression): Set the return value to
21584         null, to avoid a crash when we catch an error.
21585
21586 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21587
21588         * cs-parser.jay: Applied patch from Jackson that adds support for
21589         extern and unsafe modifiers to destructor declarations.
21590
21591         * expression.cs: Report error 21 if the user is trying to index a
21592         System.Array.
21593
21594         * driver.cs: Add an error message, suggested by the bug report.
21595
21596         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21597         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21598
21599 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21600
21601         * namespace.cs: Add some information to reduce FAQs.
21602
21603 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21604
21605         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21606         underlying enumeration types.  Fixes #43915.
21607
21608         * expression.cs: Treat ushort/short as legal values to be used in
21609         bitwise operations.
21610
21611 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21612
21613         * delegate.cs: transfer custom attributes for paramenters from
21614         the delegate declaration to Invoke and BeginInvoke.
21615
21616 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21617
21618         * attribute.cs: handle custom marshalers and emit marshal info
21619         for fields, too.
21620
21621 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21622
21623         * makefile.gnu: Added anonymous.cs to the compiler sources.
21624
21625 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21626
21627         * iterators.cs: Change the name of the proxy class to include two
21628         underscores.
21629
21630         * cs-parser.jay: Update grammar to include anonymous methods.
21631
21632         * anonymous.cs: new file.
21633
21634 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21635
21636         * class.cs (Field.Define): Add missing test for pointers and
21637         safety. 
21638
21639 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21640
21641         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21642         we use the stobj opcode.
21643
21644         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21645         since it wasn't the correct fix. 
21646
21647         It still is puzzling that we are required to use stobj for IntPtr
21648         which seems to be a ValueType.
21649
21650 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21651
21652         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21653         during regular simple name resolution.   Now, the trick is that
21654         instead of returning for processing the simplename, we do a
21655         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21656         contextual lookup type).   If a match is found, return that, if
21657         not, return for further composition.
21658
21659         This fixes long-standing 30485.
21660
21661         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21662         using the address to initialize an object, do an Stobj instead of
21663         using the regular Stelem.
21664
21665         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21666         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21667         Because if we are a BaseIndexerAccess that value will be true.
21668         Fixes 43643.
21669
21670         * statement.cs (GotoCase.Resolve): Return after reporting an
21671         error, do not attempt to continue. 
21672
21673         * expression.cs (PointerArithmetic.Emit): If our operand is a
21674         long, convert our constants to match the operand before
21675         multiplying.  Convert to I type before adding.   Fixes 43670.
21676
21677 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21678
21679         * enum.cs (ImplicitConversionExists) : Rename to
21680         ImplicitEnumConversionExists to remove ambiguity. 
21681
21682         * ecore.cs (NullCast): New type of cast expression class which
21683         basically is very similar to EmptyCast with the difference being
21684         it still is a constant since it is used only to cast a null to
21685         something else
21686         (eg. (string) null)
21687
21688         * convert.cs (ImplicitReferenceConversion): When casting a null
21689         literal, we return a NullCast.
21690
21691         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21692         should be around anymore.
21693
21694         The renaming (reported was slightly wrong). Corrections:
21695
21696         ConvertImplicitStandard -> ImplicitConversionStandard
21697         ConvertExplicitStandard -> ExplicitConversionStandard
21698
21699         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21700         before passing them in !
21701
21702         * convert.cs (ImplicitConversionStandard): When comparing for
21703         equal expr and target types, ensure that expr is not a
21704         NullLiteral.
21705
21706         In general, we must not be checking (expr_type ==
21707         target_type) in the top level conversion methods
21708         (ImplicitConversion, ExplicitConversion etc). This checking is
21709         done in the methods that they delegate to.
21710
21711 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21712
21713         * convert.cs: Move Error_CannotConvertType,
21714         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21715         ImplicitNumericConversion, ImplicitConversionExists,
21716         ImplicitUserConversionExists, StandardConversionExists,
21717         FindMostEncompassedType, FindMostSpecificSource,
21718         FindMostSpecificTarget, ImplicitUserConversion,
21719         ExplicitUserConversion, GetConversionOperators,
21720         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21721         TryImplicitIntConversion, Error_CannotConvertImplicit,
21722         ConvertImplicitRequired, ConvertNumericExplicit,
21723         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21724         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21725         its own file.
21726
21727         Perform the following renames:
21728
21729         StandardConversionExists -> ImplicitStandardConversionExists
21730         ConvertImplicit -> ImplicitConversion
21731         ConvertImplicitStandard -> ImplicitStandardConversion
21732         TryImplicitIntConversion -> ImplicitIntConversion
21733         ConvertImplicitRequired -> ImplicitConversionRequired
21734         ConvertNumericExplicit -> ExplicitNumericConversion
21735         ConvertReferenceExplicit -> ExplicitReferenceConversion
21736         ConvertExplicit -> ExplicitConversion
21737         ConvertExplicitStandard -> ExplicitStandardConversion
21738
21739 2003-05-19  Martin Baulig  <martin@ximian.com>
21740
21741         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21742         (TypeInfo): Added support for structs having structs as fields.
21743
21744         * ecore.cs (FieldExpr): Implement IVariable.
21745         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21746         VariableInfo for the field.
21747
21748 2003-05-18  Martin Baulig  <martin@ximian.com>
21749
21750         * expression.cs (This.DoResolve): Report a CS0027 if we're
21751         emitting a field initializer.
21752
21753 2003-05-18  Martin Baulig  <martin@ximian.com>
21754
21755         * expression.cs (This.ResolveBase): New public function.
21756         (This.DoResolve): Check for CS0188.
21757
21758         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21759         This.Resolve().
21760
21761         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21762         `instance_expression' to null if we don't have any non-static
21763         methods.
21764
21765 2003-05-18  Martin Baulig  <martin@ximian.com>
21766
21767         Reworked the way how local variables and parameters are handled by
21768         the flow analysis code.
21769
21770         * statement.cs (TypeInfo, VariableMap): New public classes.
21771         (VariableInfo): New public class.  This is now responsible for
21772         checking whether a variable has been assigned.  It is used for
21773         parameters and local variables.
21774         (Block.EmitMeta): Take the InternalParameters as argument; compute
21775         the layout of the flow vectors here.
21776         (Block.LocalMap, Block.ParameterMap): New public properties.
21777         (FlowBranching): The .ctor doesn't get the InternalParameters
21778         anymore since Block.EmitMeta() now computes the layout of the flow
21779         vector.
21780         (MyStructInfo): This class is now known as `StructInfo' and nested
21781         in `TypeInfo'; we don't access this directly anymore.
21782
21783         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21784         property and removed IsAssigned(), IsFieldAssigned(),
21785         SetAssigned() and SetFieldAssigned(); we now call them on the
21786         VariableInfo so we don't need to duplicate this code everywhere.
21787
21788         * expression.cs (ParameterReference): Added `Block block' argument
21789         to the .ctor.
21790         (LocalVariableReference, ParameterReference, This): The new
21791         VariableInfo class is now responsible for all the definite
21792         assignment stuff.
21793
21794         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21795         IsParameterAssigned, SetParameterAssigned): Removed.
21796
21797 2003-05-18  Martin Baulig  <martin@ximian.com>
21798
21799         * typemanager.cs (InitCoreTypes): Try calling
21800         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21801         the 3-args-version.  Corlib now also needs our `void_type'.
21802         (GetMethod): Added overloaded version which takes an optional
21803         `bool report_errors' to allow lookups of optional methods.
21804
21805 2003-05-12  Martin Baulig  <martin@ximian.com>
21806
21807         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21808         only used for locals and not for parameters.
21809
21810 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21811
21812         * support.cs (InternalParameters.ParameterType): Return the
21813         ExternalType of the parameter.
21814
21815         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21816         they were unused.
21817
21818 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21819
21820         * class.cs (MethodData.Define): Do not set the `newslot' on
21821         interface members, if they are also flagged as "override".
21822
21823         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21824         better code for ++i and i++.  This only works for static fields
21825         and local variables.
21826
21827         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21828         want to pull the DeclSpace out of the builder_to_declspace instead
21829         of the TypeBuilder (like in TypeContainer.FindMembers).
21830
21831         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21832         instead of LookupTypeContainer.  Fixes the crash on .NET for
21833         looking up interface members.
21834
21835         * const.cs: Create our own emit context during the Definition
21836         stage, so that constants are evaluated in the proper context, when
21837         a recursive definition happens.
21838
21839 2003-05-11  Martin Baulig  <martin@ximian.com>
21840
21841         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21842         new block for a switch section.
21843         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21844         the adding/lookup in the switch block.  Fixes #39828.
21845
21846 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21847
21848         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21849         functionality: I needed to convert the data after I had performed
21850         the add/sub operation into the operands type size.
21851
21852         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21853         pass the type for the box operation, otherwise the resulting
21854         object would have been of type object.
21855
21856         (BoxedCast): Add constructor to specify the type to box as.
21857
21858 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21859
21860         * iterators.cs: I was reusing the `count' variable inadvertently,
21861         take steps to not allow this to happen.
21862
21863 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21864
21865         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21866         by creating an array at the point where the params starts and
21867         putting all those arguments there, then adjusting the size of the
21868         array.
21869
21870 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21871
21872         * expression.cs (New.AddressOf): Implement interface
21873         IMemoryLocation.  This is used when the `new' operator is used in
21874         the context of an invocation to a method on a value type.
21875
21876         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21877         example. 
21878
21879         * namespace.cs: Also check the using aliases here.
21880
21881         * driver.cs: Move the test for using validity after the types have
21882         been entered, so we do a single pass that also includes the using
21883         aliases. 
21884
21885         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21886         in the regular case.   CreateSiblingForFinally is doing extra
21887         error checking.
21888
21889         * attribute.cs (GetAttributeArgumentExpression): Store the result
21890         on an out value, and use the return value to indicate failure
21891         instead of using null (which is a valid return for Constant.GetValue).
21892
21893         * statement.cs: Perform the analysis flow for the increment
21894         portion after the statement, because this will be the real flow of
21895         execution.  Fixes #42385
21896
21897         * codegen.cs (EmitContext.EmitArgument,
21898         EmitContext.EmitStoreArgument): New helper functions when the
21899         RemapToProxy flag is set.
21900
21901         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21902         function.
21903
21904         Add support for remapping parameters. 
21905
21906         * iterators.cs: Propagate parameter values;  Store parameter
21907         values in the proxy classes.
21908
21909 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21910
21911         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21912         need a proxy reference;  I do not know what I was thinking
21913
21914         * cs-parser.jay (constructor_initializer): catch another error,
21915         and display nice message.
21916
21917         (field_declaration): catch void field declaration
21918         to flag a better error. 
21919
21920         * class.cs (MemberBase.CheckBase): Report an error instead of a
21921         warning if a new protected member is declared in a struct. 
21922         (Field.Define): catch the error of readonly/volatile.
21923
21924         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21925
21926         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21927         volatile variable is taken
21928
21929 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21930
21931         * statement.cs (Fixed.Resolve): Report an error if we are not in
21932         an unsafe context.
21933
21934 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21935
21936         * typemanager.cs: reuse the code that handles type clashes for
21937         delegates and enumerations.
21938
21939         * class.cs (Report28): Always report.
21940
21941         * expression.cs (EncodeAsAttribute): Allow nulls here.
21942
21943 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21944
21945         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21946         the functionality for testing whether an expression is valid for
21947         an attribute here.  Also handle the case of arrays of elements
21948         being stored. 
21949
21950         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21951         encoding a linear array into an array of objects that are suitable
21952         to be passed to an CustomAttributeBuilder.
21953
21954         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21955
21956         * ecore.cs: (FieldExpr): Handle field remapping here.
21957
21958         * iteratators.cs: Pass the instance variable (if the method is an
21959         instance method) to the constructors, so we can access the field
21960         variables on the class.
21961
21962         TODO: Test this with structs.  I think the THIS variable on
21963         structs might have to be a pointer, and not a refenrece
21964
21965 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21966
21967         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21968         local variables to fields in a proxy class.
21969
21970         * iterators.cs (PopulateProxy): Rename our internal fields to
21971         <XXX>.  
21972         Create a <THIS> field if we are an instance method, so we can
21973         reference our parent container variables.
21974         (MapVariable): Called back from the EmitContext code to enter a
21975         new variable to field mapping into the proxy class (we just create
21976         a FieldBuilder).
21977
21978         * expression.cs
21979         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21980         for using the remapped locals to fields.
21981
21982         I placed the code here, because that gives the same semantics to
21983         local variables, and only changes the Emit code.
21984
21985         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21986         statements inside iterators.
21987         (VariableInfo): Add a FieldBuilder for the cases when we are
21988         remapping local variables to fields in a proxy class
21989
21990         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21991         current_block != null.
21992
21993         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21994         not cope with strings, as it has been moved to the
21995         TableSwitchEmit.  Fixed bug in switch generation.
21996
21997         * expression.cs (New.DoResolve): Provide more context for the user
21998         when reporting an error.
21999
22000         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22001         pointers. 
22002
22003         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22004         check the permissions for it.  Note than in a type-resolution
22005         context the check was already present in DeclSpace.ResolveType,
22006         but was missing from the MemberAccess.
22007
22008         (ArrayCreation.CheckIndices): warn if the user has
22009         more nested levels of expressions, but there are no more
22010         dimensions specified.  Avoids crash on bug 41906.
22011
22012 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22013
22014         * statement.cs (Block): replace Implicit bool, for a generic
22015         flags.   
22016         New flag: `Unchecked'.  This is used during the EmitMeta phase
22017         (which is out-of-line with the regular Resolve/Emit process for a
22018         statement, as this is done ahead of time, but still gets a chance
22019         to call constant resolve).
22020
22021         (Block.Flags): new enum for adding a new flag.
22022
22023         (Block.EmitMeta): track the state of unchecked.
22024
22025         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22026         to enable constant resolution to work there as well.
22027
22028 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22029
22030         * typemanager.cs (ienumerable_type): Also look up
22031         System.Collections.IEnumerable. 
22032
22033 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22034
22035         TODO: Test more than one conditional per method.
22036
22037         * class.cs (Indexer.Define): Report the location where the user is
22038         referencing the unsupported feature.
22039
22040         (MethodData): Overload the use of `conditionals' to
22041         minimize the creation of needless ArrayLists.   This saves roughly
22042         212kb on my machine.
22043
22044         (Method): Implement the new IIteratorContainer interface.
22045         (Method.SetYields): Implement the method by setting the ModFlags
22046         to contain METHOD_YIELDS.
22047
22048         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22049         which just got set to null.
22050
22051         * iterators.cs: New file.
22052
22053         (Yield, YieldBreak): New statements.
22054
22055         * statement.cs (Return.Resolve): Flag an error if we are used in
22056         an iterator method.
22057
22058         * codegen.cs (InIterator): New flag set if the code is being
22059         compiled in an iterator method.
22060
22061         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22062         internal modifier, and we just use it to avoid adding extra
22063         fields, as this is seldom used.  
22064
22065         * cs-parser.jay: Add yield_statement (yield and yield break).
22066
22067         * driver.cs: New flag -v2 to turn on version 2 features. 
22068
22069         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22070         hashtable when v2 is enabled.
22071
22072 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22073
22074         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22075         there is already a namespace defined with this name.
22076
22077         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22078         people upgraded their corlibs.
22079
22080         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22081         always use fully qualified types, no need to use the compiler
22082         front end.
22083
22084         (TypeManager.IsNamespace): Use binarysearch.
22085
22086         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22087         AddDelegate): I did not quite use the new IsValid API properly: I
22088         have to pass the short-name and the fullname.  I was passing only
22089         the basename instead of the fullname sometimes. 
22090
22091         (TypeContainer.DefineType): call NamespaceClash.
22092
22093         * interface.cs (Interface.DefineType): use NamespaceClash before
22094         defining the type.
22095
22096         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22097         defining the type.
22098
22099         * enum.cs: (Enum.DefineType): use NamespaceClash before
22100         defining the type.
22101
22102         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22103         speed increase.  First, use the negative_hits cache when we get a
22104         negative.  Second, add the type with its full original name
22105         instead of the new . and + encoded name (reflection uses + to
22106         separate type from a nested type).  Use LookupTypeReflection
22107         directly which bypasses the type->name hashtable (that we already
22108         know does not contain the type.
22109
22110         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22111         location/container type. 
22112
22113         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22114
22115 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22116
22117         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22118
22119         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22120         method is being referenced in the method group from a static
22121         context, and report error 120 if so.
22122
22123         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22124         Error118. 
22125
22126         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22127         is created, we create the A namespace).
22128
22129         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22130         Fixes #41591
22131
22132 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22133
22134         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22135         invocation to ModuleBuilder.GetType with the same values will
22136         return a new type instance, so we need to cache its return
22137         values. 
22138
22139         * expression.cs (Binary.ResolveOperator): Only allow the compare
22140         operators on enums if they are of the same type.
22141
22142         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22143         types of ValueType on their own case.  Before we were giving them
22144         the same treatment as objects.
22145
22146         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22147         fullname.  Short name is used to compare against container name.
22148         Fullname is used to check against defined namespace names.
22149
22150         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22151         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22152
22153         (Method.CheckBase): Call parent.
22154         (MemberBase.CheckBase): Check for protected members on sealed
22155         classes.
22156         (PropertyBase.CheckBase): Call parent.
22157         (Field.Define): Call parent.
22158
22159         * report.cs: Negative error codes are now mapped to 8000 - code,
22160         so that the display is render more nicely.
22161
22162         * typemanager.cs: Do not use try/catch, instead report a regular
22163         error. 
22164
22165         (GetPointerType, GetReferenceType): These methods provide
22166         mechanisms to obtain the T* and T& from a T.  We had the code
22167         previously scattered around the code base, and it also used
22168         TypeManager.LookupType that would go through plenty of caches.
22169         This one goes directly to the type source.
22170
22171         In some places we did the Type.GetType followed by
22172         ModuleBuilder.GetType, but not in others, so this unifies the
22173         processing as well.
22174
22175         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22176         statements now that we have namespace information.
22177
22178         * typemanager.cs (IsNamespace): New method, returns whether the
22179         string presented is a namespace or not.
22180
22181         (ComputeNamespaces): New public entry point, computes the list of
22182         available namespaces, using the GetNamespaces API call in Mono, or
22183         the slower version in MS.NET.   
22184
22185         Now before we start the semantic analysis phase, we have a
22186         complete list of namespaces including everything that the user has
22187         provided.
22188
22189         Deleted old code to cache namespaces in .nsc files.
22190
22191 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22192
22193         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22194         class/struct location definition Location for the implicit
22195         constructor location.
22196
22197         (Operator.Define): Use the location of the operator for the
22198         implicit Method definition.
22199
22200         (Constructor.Emit): use the constructor location for the implicit
22201         base initializer constructor.
22202
22203         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22204         and the Expression class now contains two new methods:
22205
22206         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22207         isolate type lookup from the rest of the resolution process.
22208
22209         Since we use Expressions to hold type definitions due to the way
22210         we parse the input we have historically overloaded Resolve to
22211         perform the Type lookups if a special flag is passed.  Now this is
22212         eliminated and two methods take their place. 
22213
22214         The differences in the two methods between xStep and xTerminal is
22215         that xStep is involved in our current lookup system that uses
22216         SimpleNames to compose a name, while xTerminal is used just to
22217         catch the case where the simplename lookup failed.
22218
22219 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22220
22221         * expression.cs (ResolveMemberAccess): Remove redundant code.
22222         TypeExpr expressions are always born fully resolved.
22223
22224         * interface.cs (PopulateMethod): Do not lookup the types twice.
22225         We were doing it once during SemanticAnalysis and once during
22226         PopulateMethod.
22227
22228         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22229         in local variable type definitions, were being returned as a
22230         SimpleName (we decomposed everything into a string), that is
22231         because primary_expression was being used instead of a type in the
22232         grammar (reduce/reduce conflicts).
22233
22234         The part that was wrong is that we converted the expression into a
22235         string (an oversimplification in one hand, compounded with primary
22236         expressions doing string concatenation).
22237
22238         So things like:
22239
22240         A.B.C [] x;
22241
22242         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22243         using clauses from working on this particular context.  And a type
22244         was being matched directly against "A.B.C[]".
22245
22246         We now use the correct approach, and allow for ComposedCast to be
22247         part of the unary expression.  So the "A.B.C []" become a composed
22248         cast of "A.B.C" (as a nested group of MemberAccess with a
22249         SimpleName at the end) plus the rank composition "[]". 
22250
22251         Also fixes 35567
22252
22253 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22254
22255         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22256         for the access level checking.
22257
22258         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22259         `TypeContainer container', because I kept getting confused when I
22260         was debugging this code.
22261
22262         * expression.cs (Indexers): Instead of tracking getters/setters,
22263         we now track them in parallel.  We create one arraylist less, but
22264         most importantly it is possible now for the LValue code to find a
22265         matching get for a set.
22266
22267         (IndexerAccess.DoResolveLValue): Update the code.
22268         GetIndexersForType has been modified already to extract all the
22269         indexers from a type.  The code assumed it did not.
22270
22271         Also make the code set the correct return type for the indexer.
22272         This was fixed a long time ago for properties, but was missing for
22273         indexers.  It used to be void_type.
22274
22275         (Binary.Emit): Test first for doubles instead of
22276         floats, as they are more common.
22277
22278         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22279         when dealing with floats and the <=, >= operators.  This fixes bug
22280         #39314 
22281
22282         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22283         to load the array value by emitting a load on the foreach variable
22284         type.  This was incorrect.  
22285
22286         We now emit the code to load an element using the the array
22287         variable type, and then we emit the conversion operator.
22288
22289         Fixed #40176
22290
22291 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22292
22293         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22294
22295 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22296
22297         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22298         test for protection before we test for signatures. 
22299
22300         (MethodSignature.ToString): implement.
22301
22302         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22303         to the case where we reduced into a LongConstant.
22304
22305         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22306         depend on whether the information is acurrate, because the
22307         Microsoft runtime will always claim that the array type is public,
22308         regardless of the real state.
22309
22310         If the type is a pointer, another problem happens: the type is
22311         reported as non-public in Microsoft.  
22312
22313         In both cases we have to call CheckAccessLevel recursively with
22314         the underlying type as the argument to be tested.
22315
22316 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22317
22318         * assign.cs (Assign.Emit): If we are dealing with a compound
22319         assignment expression, we should use the code path that stores the
22320         intermediate result in a temporary value.  This fixes #40903.
22321
22322         *expression.cs (Indirection.ToString): Provide ToString method for
22323         debugging. 
22324
22325 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22326
22327         * class.cs: Null out fields holding references to Block objects so
22328         they can be garbage collected.
22329
22330         * expression.cs (OverloadResolve): Remove unused local.
22331
22332 2003-04-07  Martin Baulig  <martin@ximian.com>
22333
22334         * codegen.cs (EmitContext.CurrentFile): New public field.
22335         (EmitContext.Mark): Use the CurrentFile to check whether the
22336         location is in the correct file.
22337         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22338
22339 2003-04-07  Martin Baulig  <martin@ximian.com>
22340
22341         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22342
22343         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22344         location.  [FIXME: The location argument which gets passed to this
22345         method is sometimes wrong!]
22346
22347 2003-04-07  Nick Drochak <ndrochak@gol.com>
22348
22349         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22350
22351 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22352
22353         * expression.cs (Indirection.EmitAssign): We were using the
22354         temporary, but returning immediately instead of continuing the
22355         EmitAssing flow.
22356
22357 2003-04-06  Martin Baulig  <martin@ximian.com>
22358
22359         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22360         if it's a nested child, but also deriving from the outer class.
22361         See test 190.cs.
22362
22363         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22364         nested child, but also deriving from the outer class.  See
22365         test-190.cs.
22366         (FilterWithClosure): We may access private members of the outer
22367         class if we're a nested child and deriving from the outer class.
22368         (RealMemberLookup): Only set `closure_private_ok' if the
22369         `original_bf' contained BindingFlags.NonPublic.
22370
22371 2003-04-05  Martin Baulig  <martin@ximian.com>
22372
22373         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22374
22375 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22376
22377         * class.cs (Event.Define): Do not allow abstract events to have
22378         initializers. 
22379
22380 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22381
22382         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22383         block in event declarations.
22384
22385         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22386         value type, get its address.
22387
22388         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22389         leaving a class on the stack instead of a boolean value (int
22390         0/1).  Change the code so we compare against null, and then the
22391         result against zero.
22392
22393         * class.cs (TypeContainer.GetClassBases): We were checking for the
22394         parent class being sealed too late.
22395
22396         * expression.cs (Binary.Emit): For <= and >= when dealing with
22397         floating point values, use cgt.un and clt.un instead of cgt and
22398         clt alone.
22399
22400 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22401
22402         * statement.cs: Apply the same optimization as MS: skip the 
22403         GetEnumerator returning an IEnumerator, and use the one returning a 
22404         CharEnumerator instead. This allows us to avoid the try-finally block 
22405         and the boxing.
22406
22407 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22408
22409         * cs-parser.jay: Attributes cannot be applied to
22410                          namespaces. Fixes #40473
22411
22412 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22413
22414         * class.cs:
22415         (Add*): check if the name is valid using the full name for constants,
22416         fields, properties and events.
22417
22418 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22419
22420         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22421         char constants to be part of the enumeration.
22422
22423         * expression.cs (Conditional.DoResolve): Add support for operator
22424         true. Implements the missing functionality from 14.12
22425
22426         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22427         operator true/false as required by the spec.
22428
22429         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22430         implicit conversion to boolean.
22431
22432         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22433         also one where the type implements `operator true'. 
22434
22435         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22436         get an expression that will invoke operator true based on an
22437         expression.  
22438
22439         (GetConversionOperators): Removed the hack that called op_True
22440         here.  
22441
22442         (Expression.ResolveBoolean): Move this from Statement.
22443
22444 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22445
22446         * ecore.cs (FieldExpr): do not allow initialization of initonly
22447         fields on derived classes
22448
22449 2003-03-13  Martin Baulig  <martin@ximian.com>
22450
22451         * statement.cs (Block.Emit): Call ig.BeginScope() and
22452         ig.EndScope() when compiling with debugging info; call
22453         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22454
22455 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22456
22457         * expression.cs (Indexers): Do not construct immediately, allow
22458         for new members to be appended as we go.  Fixes 38143
22459
22460 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22461
22462         * expression.cs: save/restore context when resolving an unchecked
22463         expression.
22464
22465 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22466
22467         * cfold.cs: Catch division by zero in modulus operator during
22468         constant folding.
22469
22470 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22471
22472         * interface.cs (Interface.DefineMembers): Avoid defining members
22473         twice. 
22474
22475 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22476
22477         * driver.cs: handle the +/- options for -noconfig
22478
22479         * statement.cs (Unckeched.Resolve): Also track the state of
22480         unchecked in the Resolve phase.
22481
22482 2003-02-27  Martin Baulig  <martin@ximian.com>
22483
22484         * ecore.cs (Expression.MemberLookup): Don't create a
22485         MethodGroupExpr for something which is not a method.  Fixes #38291.
22486
22487 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22488
22489         * class.cs (MemberBase.CheckParameters): Also check that the type
22490         is unmanaged if it is a pointer.
22491
22492         * expression.cs (SizeOf.Resolve): Add location information.
22493
22494         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22495         a managed type is declared.
22496
22497         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22498         parameter modifiers as well.  Fixes bug 38606
22499
22500         * class.cs: Very sad.  Am backing out the speed up changes
22501         introduced by the ArrayList -> Array in the TypeContainer, as they
22502         were not actually that much faster, and introduced a bug (no error
22503         reports on duplicated methods).
22504
22505         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22506         source first, this will guarantee that we have a valid expression
22507         before calling in lower levels functions that will require a
22508         resolved object.  Then use this original_source in the
22509         target.ResolveLValue instead of the original source that was
22510         passed to us.
22511
22512         Another change.  Use target.Resolve instead of LValueResolve.
22513         Although we are resolving for LValues, we will let the Assign code
22514         take care of that (it will be called again from Resolve).  This
22515         basically allows code like this:
22516
22517         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22518         class Y { void A (X x) { x [0] += o; }
22519
22520         The problem was that the indexer was trying to resolve for
22521         set_Item (idx, object o) and never finding one.  The real set_Item
22522         was set_Item (idx, X).  By delaying the process we get the right
22523         semantics. 
22524
22525         Fixes bug 36505
22526
22527 2003-02-23  Martin Baulig  <martin@ximian.com>
22528
22529         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22530         while calling DoEmit ().
22531
22532         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22533         source files; if you use the #line directive inside a method, the
22534         compiler stops emitting line numbers for the debugger until it
22535         reaches the end of the method or another #line directive which
22536         restores the original file.
22537
22538 2003-02-23  Martin Baulig  <martin@ximian.com>
22539
22540         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22541
22542 2003-02-23  Martin Baulig  <martin@ximian.com>
22543
22544         * statement.cs (Block.AddChildVariableNames): We need to call this
22545         recursively, not just for our immediate children.
22546
22547 2003-02-23  Martin Baulig  <martin@ximian.com>
22548
22549         * class.cs (Event.Define): Always make the field private, like csc does.
22550
22551         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22552         actually work, fixes bug #37521.
22553
22554 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22555
22556         * delegate.cs: When creating the various temporary "Parameters"
22557         classes, make sure that we call the ComputeAndDefineParameterTypes
22558         on those new parameters (just like we do with the formal ones), to
22559         allow them to be resolved in the context of the DeclSpace.
22560
22561         This fixes the bug that Dick observed in Bugzilla #38530.
22562
22563 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22564
22565         * expression.cs (ResolveMemberAccess): When resolving a constant,
22566         do not attempt to pull a constant if the value was not able to
22567         generate a valid constant.
22568
22569         * const.cs (LookupConstantValue): Do not report more errors than required.
22570
22571 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22572
22573         * expression.cs: fixes bug #38328.
22574
22575 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22576
22577         * class.cs: Changed all the various members that can be part of a
22578         class from being an ArrayList to be an Array of the right type.
22579         During the DefineType type_list, interface_list, delegate_list and
22580         enum_list are turned into types, interfaces, delegates and enums
22581         arrays.  
22582
22583         And during the member population, indexer_list, event_list,
22584         constant_list, field_list, instance_constructor_list, method_list,
22585         operator_list and property_list are turned into their real arrays.
22586
22587         Although we could probably perform this operation earlier, for
22588         good error reporting we need to keep the lists and remove the
22589         lists for longer than required.
22590
22591         This optimization was triggered by Paolo profiling the compiler
22592         speed on the output of `gen-sample-program.pl' perl script. 
22593
22594         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22595         not crash in methods like MemberLookupFailed that use this field.  
22596
22597         This problem arises when the compiler fails to resolve a type
22598         during interface type definition for example.
22599
22600 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22601
22602         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22603         inherit from System.Object, so we have to stop at null, not only
22604         when reaching System.Object.
22605
22606 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22607
22608         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22609         DeclaredOnly because the parent indexer might have had a different
22610         name, but did not loop until the top of the hierarchy was reached.
22611
22612         The problem this one fixes is 35492: when a class implemented an
22613         indexer from an interface, we were getting the interface method
22614         (which was abstract) and we were flagging an error (can not invoke
22615         abstract method).
22616
22617         This also keeps bug 33089 functioning, and test-148 functioning.
22618
22619         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22620         out if a method is special is to see if it is declared in a
22621         property or event, or whether it is one of the predefined operator
22622         names.   This should fix correctly #36804.
22623
22624 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22625
22626         The goal here is to remove the dependency on EmptyCast.Peel ().
22627         Killing it completely.
22628
22629         The problem is that currently in a number of places where
22630         constants are expected, we have to "probe" for an EmptyCast, and
22631         Peel, which is not the correct thing to do, as this will be
22632         repetitive and will likely lead to errors. 
22633
22634         The idea is to remove any EmptyCasts that are used in casts that
22635         can be reduced to constants, so we only have to cope with
22636         constants. 
22637
22638         This bug hunt was triggered by Bug 37363 and the desire to remove
22639         the duplicate pattern where we were "peeling" emptycasts to check
22640         whether they were constants.  Now constants will always be
22641         constants.
22642
22643         * ecore.cs: Use an enumconstant here instead of wrapping with
22644         EmptyCast.  
22645
22646         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22647         throwing me off.  By handling this we can get rid of a few hacks.
22648
22649         * statement.cs (Switch): Removed Peel() code.
22650
22651 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22652
22653         * class.cs: Location information for error 508
22654
22655         * expression.cs (New.DoResolve): Add a guard against double
22656         resolution of an expression.  
22657
22658         The New DoResolve might be called twice when initializing field
22659         expressions (see EmitFieldInitializers, the call to
22660         GetInitializerExpression will perform a resolve on the expression,
22661         and later the assign will trigger another resolution
22662
22663         This leads to bugs (#37014)
22664
22665         * delegate.cs: The signature for EndInvoke should contain any ref
22666         or out parameters as well.  We were not doing this in the past. 
22667
22668         * class.cs (Field.Define): Do not overwrite the type definition
22669         inside the `volatile' group.  Turns out that volatile enumerations
22670         were changing the type here to perform a validity test, which
22671         broke conversions. 
22672
22673 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22674
22675         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22676         and structs, we do not want to load the instance variable
22677
22678         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22679         enum_type has to be handled like an object reference (implicit
22680         conversions exists from this to object), but the regular IsClass
22681         and IsValueType tests will never return true for this one.
22682
22683         Also we use TypeManager.IsValueType instead of type.IsValueType,
22684         just for consistency with the rest of the code (this is only
22685         needed if we ever use the construct exposed by test-180.cs inside
22686         corlib, which we dont today).
22687
22688 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22689
22690         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22691         just InternalCall.
22692
22693 2003-02-09  Martin Baulig  <martin@ximian.com>
22694
22695         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22696         (Namespace.DefineNamespaces): New static public method; this is
22697         called when we're compiling with debugging to add all namespaces
22698         to the symbol file.
22699
22700         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22701         pass it to the Namespace's .ctor.
22702
22703         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22704         and MethodBase arguments; pass the namespace ID to the symwriter;
22705         pass the MethodBase instead of the token to the symwriter.
22706         (SymbolWriter.DefineNamespace): New method to add a namespace to
22707         the symbol file.
22708
22709 2003-02-09  Martin Baulig  <martin@ximian.com>
22710
22711         * symbolwriter.cs: New file.  This is a wrapper around
22712         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22713         methods here in near future.
22714
22715 2003-02-09  Martin Baulig  <martin@ximian.com>
22716
22717         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22718         ILGenerator.MarkSequencePoint() which are actually used by the
22719         symbol writer.
22720
22721 2003-02-09  Martin Baulig  <martin@ximian.com>
22722
22723         * location.cs (SourceFile): New public sealed class.  This
22724         contains the name and an index which is used in the location's token.
22725         (Location): Reserve an appropriate number of bits in the token for
22726         the source file instead of walking over that list, this gives us a
22727         really huge performance improvement when compiling with debugging.
22728
22729         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22730         `SourceFile' argument instead of a string.
22731         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22732         but don't parse/tokenize here, we need to generate the list of all
22733         source files before we do that.
22734         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22735         the files.
22736
22737         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22738         instead of a string.
22739
22740         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22741         of a string.
22742
22743 2003-02-09  Martin Baulig  <martin@ximian.com>
22744
22745         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22746         filename on `#line default'.
22747
22748 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22749
22750         * statement.cs: don't clear the pinned var when the fixed statement
22751         returns from the method (fixes bug#37752).
22752
22753 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22754
22755         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22756         to IsValueType.
22757
22758 2003-02-07  Martin Baulig  <martin@ximian.com>
22759
22760         * driver.cs: Removed the `--debug-args' command line argument.
22761
22762         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22763         automatically by the AsssemblyBuilder.
22764         (CodeGen.InitializeSymbolWriter): We don't need to call any
22765         initialization function on the symbol writer anymore.  This method
22766         doesn't take any arguments.
22767
22768 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22769
22770         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22771         from referenced assemblies as well.
22772
22773 2003-02-02  Martin Baulig  <martin@ximian.com>
22774
22775         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22776
22777 2003-02-02  Martin Baulig  <martin@ximian.com>
22778
22779         * class.cs (Constructor.Emit): Open the symbol writer before
22780         emitting the constructor initializer.
22781         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22782         single-stepping through constructor initializers.
22783
22784 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22785
22786         * class.cs: Handle error 549: do not allow virtual methods in
22787         sealed classes. 
22788
22789 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22790
22791         * decl.cs: Check access levels when resolving types
22792
22793 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22794
22795         * statement.cs: Add parameters and locals set in catch blocks that might 
22796         return to set vector
22797
22798 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22799
22800         * class.cs (Operator): Set the SpecialName flags for operators.
22801
22802         * expression.cs (Invocation.DoResolve): Only block calls to
22803         accessors and operators on SpecialName methods.
22804
22805         (Cast.TryReduce): Handle conversions from char constants.
22806
22807
22808 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22809
22810         * statement.cs: small memory and time optimization in FlowBranching.
22811
22812 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22813
22814         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22815         problem that the last fix but in the other sid (Set).
22816
22817         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22818         access when there is no indexer in the hierarchy.
22819
22820 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22821
22822         * class.cs: Combine some if statements.
22823
22824 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22825
22826         * driver.cs: fixed bug #37187.
22827
22828 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22829
22830         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22831         any indexer, it's needed to build a list with all the indexers in the
22832         hierarchy (AllGetters), else we have problems. Fixes #35653.
22833
22834 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22835
22836         * class.cs (MethodData.Define): It is wrong for an interface
22837         implementation to be static in both cases: explicit and implicit.
22838         We were only handling this in one case.
22839
22840         Improve the if situation there to not have negations.
22841
22842         * class.cs (Field.Define): Turns out that we do not need to check
22843         the unsafe bit on field definition, only on usage.  Remove the test.
22844
22845 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22846
22847         * driver.cs: use assembly.Location instead of Codebase (the latest
22848         patch made mcs fail when using MS assemblies).
22849
22850 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22851
22852         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22853         get the path to *corlib.dll.
22854
22855 2003-01-21  Nick Drochak <ndrochak@gol.com>
22856
22857         * cs-tokenizer.cs:
22858         * pending.cs:
22859         * typemanager.cs: Remove compiler warnings
22860
22861 2003-01-20  Duncan Mak  <duncan@ximian.com>
22862
22863         * AssemblyInfo.cs: Bump the version number to 0.19.
22864
22865 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22866
22867         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22868
22869 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22870
22871         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22872
22873 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22874
22875         * cs-parser.jay: Small fix: we were not comparing the constructor
22876         name correctly.   Thanks to Zoltan for the initial pointer.
22877
22878 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22879
22880         * cs-tokenizer.cs: Set file name when specified with #line
22881
22882 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22883
22884         * cs-parser.jay: Only perform the constructor checks here if we
22885         are named like the class;  This will help provider a better
22886         error.  The constructor path is taken when a type definition is
22887         not found, but most likely the user forgot to add the type, so
22888         report that rather than the constructor error.
22889
22890 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22891
22892         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22893         allocations.
22894
22895 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22896
22897         * cs-parser.jay: Add cleanup call.
22898
22899 2003-01-13  Duncan Mak  <duncan@ximian.com>
22900
22901         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22902         consistent with other methods.
22903
22904 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22905
22906         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22907
22908 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22909
22910         * attribute.cs: only set GuidAttr to true when we have a
22911         GuidAttribute.
22912
22913 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22914
22915         * ecore.cs:
22916         * expression.cs:
22917         * typemanager.cs: fixes to allow mcs compile corlib with the new
22918         Type.IsSubclassOf fix.
22919
22920 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22921
22922         * expression.cs (LocalVariableReference.DoResolve): Classify a
22923         constant as a value, not as a variable.   Also, set the type for
22924         the variable.
22925
22926         * cs-parser.jay (fixed_statement): take a type instead of a
22927         pointer_type, so we can produce a better error message later.
22928
22929         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22930         as an error.  
22931
22932         (For.DoEmit): Make inifinite loops have a
22933         non-conditional branch back.
22934
22935         (Fixed.DoEmit): First populate the pinned variables, then emit the
22936         statement, then clear the variables.  Before I was emitting the
22937         code once for each fixed piece.
22938
22939
22940 2003-01-08  Martin Baulig  <martin@ximian.com>
22941
22942         * statement.cs (FlowBranching.MergeChild): A break in a
22943         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22944
22945 2003-01-08  Martin Baulig  <martin@ximian.com>
22946
22947         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22948         lives in the same number space than `param_map'.  Fixes #36154.
22949
22950 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22951
22952         * cs-parser.jay (constructor_declaration): Set the
22953         Constructor.ModFlags before probing for it.  This makes the
22954         compiler report 514, 515 and 132 (the code was there, but got
22955         broken). 
22956
22957         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22958         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22959         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22960
22961 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22962
22963         * enum.cs: create the enum static fields using the enum type.
22964
22965 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22966
22967         * class.cs: don't try to create the ParamBuilder for the return
22968         type if it's not needed (and handle it breaking for the ms runtime
22969         anyway).
22970
22971 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22972
22973         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22974
22975 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22976
22977         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22978         the command.   This showed up while compiling the JANET source
22979         code, which used \r as its only newline separator.
22980
22981 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22982
22983         * class.cs (Method.Define): If we are an operator (because it
22984         reuses our code), then set the SpecialName and HideBySig.  #36128
22985
22986 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22987
22988         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22989         exception, report error 120 `object reference required'.
22990
22991         * driver.cs: Add --pause option, used during to measure the size
22992         of the process as it goes with --timestamp.
22993
22994         * expression.cs (Invocation.DoResolve): Do not allow methods with
22995         SpecialName to be invoked.
22996
22997 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22998
22999         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23000         number before adding it.
23001
23002 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23003
23004         * ecore.cs (StandardImplicitConversion): When in an unsafe
23005         context, we allow conversion between void * to any other pointer
23006         type. This fixes bug #35973.
23007
23008 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23009
23010         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23011         is not thrown when extensionless outputs are used 
23012
23013 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23014
23015         * rootcontext.cs: fixed compilation of corlib.
23016
23017 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23018
23019         * attribute.cs (Attributes.Contains): Add new method.
23020
23021         * class.cs (MethodCore.LabelParameters): if the parameter is an
23022         `out' parameter, check that no attribute `[In]' has been passed.
23023
23024         * enum.cs: Handle the `value__' name in an enumeration.
23025
23026 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23027
23028         * decl.cs: Added special case to allow overrides on "protected
23029         internal" methods
23030
23031 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23032
23033         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23034         since it makes much more sense.
23035
23036         (Attributes.ctor): Don't require a Location parameter.
23037
23038         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23039
23040         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23041         since we already have that information per attribute.
23042
23043         * everywhere : make appropriate changes.
23044
23045         * class.cs (LabelParameters): Write the code which actually
23046         applies attributes to the return type. We can't do this on the MS
23047         .NET runtime so we flag a warning in the case an exception is
23048         thrown.
23049
23050 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23051
23052         * const.cs: Handle implicit null conversions here too.
23053
23054 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23055
23056         * class.cs (MethodCore.LabelParameters): Remove the extra
23057         Type [] parameter since it is completely unnecessary. Instead
23058         pass in the method's attributes so that we can extract
23059         the "return" attribute.
23060
23061 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23062
23063         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23064         of ignoring it and letting the compile continue.
23065
23066         * typemanager.cs (ChangeType): use an extra argument to return an
23067         error condition instead of throwing an exception.
23068
23069 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23070
23071         * expression.cs (Unary.TryReduce): mimic the code for the regular
23072         code path.  Perform an implicit cast in the cases where we can
23073         implicitly convert to one of the integral types, and then reduce
23074         based on that constant.   This fixes bug #35483.
23075
23076 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23077
23078         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23079
23080 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23081
23082         * namespace.cs: fixed bug #35489.
23083
23084 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23085
23086         * class.cs: Remove some dead code.
23087
23088         * cs-parser.jay: Estimate the number of methods needed
23089         (RootContext.MethodCount);
23090
23091         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23092         numbers instead of StringBuilders.
23093
23094         * support.cs (PtrHashtable): Add constructor with initial size;
23095         We can now reduce reallocations of the method table.
23096
23097 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23098
23099         * attribute.cs (ApplyAttributes): Keep track of the emitted
23100         attributes on a per-target basis. This fixes bug #35413.
23101
23102 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23103
23104         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23105         default to the Windows 1252 encoding.
23106
23107         (UnixParseOption): Support version, thanks to Alp for the missing
23108         pointer. 
23109
23110         * AssemblyInfo.cs: Add nice assembly information.
23111
23112         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23113         (bug 35169).
23114
23115         * cs-parser.jay: Allow a trailing comma before the close bracked
23116         in the attribute_section production.
23117
23118         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23119         address of the instance was being taken, I will take this out,
23120         because we take the address of the object immediately here.
23121
23122 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23123
23124         * typemanager.cs (AreMultipleAllowed): Take care of the most
23125         obvious case where attribute type is not in the current assembly -
23126         stupid me ;-)
23127
23128 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23129
23130         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23131         definitions, instead of doing that afterwards.  
23132
23133         Also we use a nice little hack, depending on the constructor, we
23134         know if we are a "composed" name or a simple name.  Hence, we
23135         avoid the IndexOf test, and we avoid 
23136
23137         * codegen.cs: Add code to assist in a bug reporter to track down
23138         the source of a compiler crash. 
23139
23140 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23141
23142         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23143         types have been emitted for a given element and flag an error
23144         if something which does not have AllowMultiple set is used more
23145         than once.
23146
23147         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23148         attribute types and their corresponding AllowMultiple properties
23149
23150         (AreMultipleAllowed): Check the property for a given type.
23151
23152         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23153         property in the case we have a TypeContainer.
23154
23155         (Attributes.AddAttribute): Detect duplicates and just skip on
23156         adding them. This trivial fix catches a pretty gross error in our
23157         attribute emission - global attributes were being emitted twice!
23158
23159         Bugzilla bug #33187 is now fixed.
23160
23161 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23162
23163         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23164         instead of pp_and).
23165
23166         * expression.cs (Binary.ResolveOperator): I can only use the
23167         Concat (string, string, string) and Concat (string, string,
23168         string, string) if the child is actually a concatenation of
23169         strings. 
23170
23171 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23172
23173         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23174         context where we need a 2-character lookahead.
23175
23176         * pending.cs (PendingImplementation): Rework so we can keep track
23177         of interface types all the time, and flag those which were
23178         implemented by parents as optional.
23179
23180 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23181
23182         * expression.cs (Binary.ResolveOperator): Use
23183         String.Concat(string,string,string) or
23184         String.Concat(string,string,string,string) when possible. 
23185
23186         * typemanager: More helper methods.
23187
23188
23189 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23190
23191         * pending.cs: remove the bogus return from GetMissingInterfaces()
23192         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23193
23194 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23195
23196         * namespace.cs: avoid duplicated 'using xxx' being added to
23197         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23198         when we get more than one 'using' statement for the same namespace.
23199         Report a CS0105 warning for it.
23200
23201 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23202
23203         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23204         of calling getChar/putback, uses internal knowledge of it.    
23205
23206         (xtoken): Reorder tokenizer so most common patterns are checked
23207         first.  This reduces the compilation time in another 5% (from 8.11s
23208         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23209
23210         The parsing time is 22% of the compilation in mcs, and from that
23211         64% is spent on the tokenization process.  
23212
23213         I tried using a binary search for keywords, but this is slower
23214         than the hashtable.  Another option would be to do a couple of
23215         things:
23216
23217                 * Not use a StringBuilder, instead use an array of chars,
23218                   with a set value.  Notice that this way we could catch
23219                   the 645 error without having to do it *afterwards*.
23220
23221                 * We could write a hand-parser to avoid the hashtable
23222                   compares altogether.
23223
23224         The identifier consumption process takes 37% of the tokenization
23225         time.  Another 15% is spent on is_number.  56% of the time spent
23226         on is_number is spent on Int64.Parse:
23227
23228                 * We could probably choose based on the string length to
23229                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23230                   computations. 
23231
23232         Another 3% is spend on wrapping `xtoken' in the `token' function.
23233
23234         Handle 0xa0 as whitespace (#34752)
23235
23236 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23237
23238         * typemanager.cs (IsCLRType): New routine to tell whether a type
23239         is one of the builtin types.  
23240
23241         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23242         typecode in more places instead of doing pointer comparissions.
23243         We could leverage some knowledge about the way the typecodes are
23244         laid out.
23245
23246         New code to cache namespaces in assemblies, it is currently not
23247         invoked, to be used soon.
23248
23249         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23250
23251         * expression.cs (Binary.ResolveOperator): specially handle
23252         strings, and do not perform user-defined operator overloading for
23253         built-in types.
23254
23255 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23256
23257         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23258         internalcall as it is a pretty simple operation;  Avoid whenever
23259         possible to call Char.IsLetter.
23260
23261         (consume_identifier): Cut by half the number of
23262         hashtable calls by merging the is_keyword and GetKeyword behavior.
23263
23264         Do not short-circuit, because if we do, we
23265         report errors (ie, #if false && true would produce an invalid
23266         directive error);
23267
23268
23269 2002-11-24  Martin Baulig  <martin@ximian.com>
23270
23271         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23272         check constant ranges and report a CS0221.  Fixes #33186.
23273
23274 2002-11-24  Martin Baulig  <martin@ximian.com>
23275
23276         * cs-parser.jay: Make this work for uninitialized variable
23277         declarations in the `for' initializer.  Fixes #32416.
23278
23279 2002-11-24  Martin Baulig  <martin@ximian.com>
23280
23281         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23282         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23283
23284 2002-11-24  Martin Baulig  <martin@ximian.com>
23285
23286         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23287         argument; if true, we also check for user-defined conversions.
23288         This is only needed if both arguments are of a user-defined type.
23289         Fixes #30443, added test-175.cs.
23290         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23291
23292         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23293
23294 2002-11-24  Martin Baulig  <martin@ximian.com>
23295
23296         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23297         function to get the store opcode.
23298         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23299         only emit the Ldelema if the store opcode is Stobj.  You must run
23300         both test-34 and test-167 to test this.  Fixes #34529.
23301
23302 2002-11-23  Martin Baulig  <martin@ximian.com>
23303
23304         * ecore.cs (Expression.MemberLookup): Added additional
23305         `qualifier_type' argument which is used when we're being called
23306         from MemberAccess.DoResolve() and null if we're called from a
23307         SimpleName lookup.
23308         (Expression.MemberLookupFailed): New method to report errors; this
23309         does the CS1540 check and reports the correct error message.
23310
23311         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23312         argument for the CS1540 check and redone the way how we're dealing
23313         with private members.  See the comment in the source code for details.
23314         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23315         `closure_start_type' to `closure_qualifier_type' and check whether
23316         it's not null.  It was not this filter being broken, it was just
23317         being called with the wrong arguments.
23318
23319         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23320         and pass it the correct `qualifier_type'; this also does the error
23321         handling for us.
23322
23323 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23324
23325         * expression.cs (Invocation.EmitParams): If the we are dealing
23326         with a non-built-in value type, load its address as well.
23327
23328         (ArrayCreation): Use a a pretty constant instead
23329         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23330         static initializers.  
23331
23332         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23333         because they are not really value types, just glorified integers. 
23334
23335         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23336
23337         * ecore.cs: Remove redundant code for enumerations, make them use
23338         the same code path as everything else, fixes the casting issue
23339         with enumerations in Windows.Forms.
23340
23341         * attribute.cs: Do only cast to string if it is a string, the
23342         validation happens later.
23343
23344         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23345         people upgrade their corlibs.
23346
23347         * ecore.cs: Oops, enumerations were not following the entire code path
23348
23349 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23350
23351         * typemanager.cs (FilterWithClosure): Commented out the test for
23352         1540 in typemanager.cs, as it has problems when accessing
23353         protected methods from a parent class (see test-174.cs). 
23354
23355         * attribute.cs (Attribute.ValidateGuid): new method.
23356         (Attribute.Resolve): Use above.
23357
23358 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23359
23360         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23361
23362         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23363         handling for enumerations, as we only needed the TypeContainer
23364         functionality to begin with (this is required for the fix below to
23365         work for enums that reference constants in a container class for
23366         example). 
23367
23368         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23369
23370         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23371         a valid TypeBuilder to perform lookups on.o
23372
23373         * class.cs (InheritableMemberSignatureCompare): Use true in the
23374         call to GetGetMethod and GetSetMethod, because we are comparing
23375         the signature, and we need to get the methods *even* if they are
23376         private. 
23377
23378         (PropertyBase.CheckBase): ditto.
23379
23380         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23381         GotoCase.Resolve): Use Peel on EmpytCasts.
23382
23383         * ecore.cs (EmptyCast): drop child, add Peel method.
23384
23385 2002-11-17  Martin Baulig  <martin@ximian.com>
23386
23387         * ecore.cs (EmptyCast.Child): New public property.
23388
23389         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23390         label resolved to an EmptyCast.  Fixes #34162.
23391         (GotoCase.Resolve): Likewise.
23392         (Block.EmitMeta): Likewise.
23393
23394 2002-11-17  Martin Baulig  <martin@ximian.com>
23395
23396         * expression.cs (Invocation.BetterConversion): Prefer int over
23397         uint; short over ushort; long over ulong for integer literals.
23398         Use ImplicitConversionExists instead of StandardConversionExists
23399         since we also need to check for user-defined implicit conversions.
23400         Fixes #34165.  Added test-173.cs.
23401
23402 2002-11-16  Martin Baulig  <martin@ximian.com>
23403
23404         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23405         with the `true' and `false' literals.  Fixes #33151.
23406
23407 2002-11-16  Martin Baulig  <martin@ximian.com>
23408
23409         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23410         October 22nd; don't do the cs1540 check for static members.
23411
23412         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23413         now using our own filter here and doing the cs1540 check again.
23414
23415 2002-11-16  Martin Baulig  <martin@ximian.com>
23416
23417         * support.cs (InternalParameters): Don't crash if we don't have
23418         any fixed parameters.  Fixes #33532.
23419
23420 2002-11-16  Martin Baulig  <martin@ximian.com>
23421
23422         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23423         when looking up static methods to make this work on Windows.
23424         Fixes #33773.
23425
23426 2002-11-16  Martin Baulig  <martin@ximian.com>
23427
23428         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23429         a setter rather than using PropertyInfo.CanWrite.
23430
23431 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23432
23433         * class.cs: Allow acces to block member by subclasses. Fixes build
23434         breaker.
23435
23436 2002-11-14  Martin Baulig  <martin@ximian.com>
23437
23438         * class.cs (Constructor.Emit): Added the extern/block check.
23439         Fixes bug #33678.
23440
23441 2002-11-14  Martin Baulig  <martin@ximian.com>
23442
23443         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23444         iteration while looking for indexers, this is needed because the
23445         indexer may have a different name in our base classes.  Fixed the
23446         error reporting (no indexers at all, not get accessor, no
23447         overloaded match).  Fixes bug #33089.
23448         (IndexerAccess.DoResolveLValue): Likewise.
23449
23450 2002-11-14  Martin Baulig  <martin@ximian.com>
23451
23452         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23453         indexers.  Fixes the first part of bug #33089.
23454         (MethodSignature.InheritableMemberSignatureCompare): Added support
23455         for properties.
23456
23457 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23458
23459         * attribute.cs (Attribute.Resolve): Catch the
23460         NullReferenceException and report it since it isn't supposed to
23461         happen. 
23462
23463 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23464
23465         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23466         LogicalOr and LogicalAnd that can benefit from recursively
23467         handling EmitBranchable.  The code now should be nice for Paolo.
23468
23469 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23470
23471         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23472         the Type lookups, as we perform quite a number of lookups on
23473         non-Types.  This can be removed once we can deterministically tell
23474         whether we have a type or a namespace in advance.
23475
23476         But this might require special hacks from our corlib.
23477
23478         * TODO: updated.
23479
23480         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23481         and double which avoids a conversion from an integer to a double.
23482
23483         * expression.cs: tiny optimization, avoid calling IsConstant,
23484         because it effectively performs the lookup twice.
23485
23486 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23487
23488         But a bogus return here to keep the semantics of the old code
23489         until the Mono runtime is fixed.
23490
23491         * pending.cs (GetMissingInterfaces): New method used to remove all
23492         the interfaces that are already implemented by our parent
23493         classes from the list of pending methods. 
23494
23495         * interface.cs: Add checks for calls after ResolveTypeExpr.
23496
23497 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23498
23499         * class.cs (Class.Emit): Report warning 67: event not used if the
23500         warning level is beyond 3.
23501
23502         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23503         being a NullLiteral.
23504
23505         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23506         specifiers. 
23507
23508         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23509         path that might fail if a type can not be resolved.
23510
23511         * expression.cs (Binary.Emit): Emit unsigned versions of the
23512         operators. 
23513
23514         * driver.cs: use error 5.
23515
23516 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23517
23518         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23519
23520 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23521
23522         * cs-parser.jay (switch_section): A beautiful patch from Martin
23523         Baulig that fixed 33094.
23524
23525 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23526
23527         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23528         Check whether the base is abstract and report an error if so.
23529
23530         * expression.cs (IndexerAccess.DoResolveLValue,
23531         IndexerAccess.DoResolve): ditto. 
23532
23533         (Invocation.DoResolve): ditto.
23534
23535         (Invocation.FullMethodDesc): Improve the report string.
23536
23537         * statement.cs (Block): Eliminate IsVariableDefined as it is
23538         basically just a wrapper for GetVariableInfo.
23539
23540         * ecore.cs (SimpleName): Use new 
23541
23542         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23543         type, as we return the actual parameter ref/unref state on a
23544         different call.
23545
23546 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23547
23548         * support.cs: Return proper flags REF/OUT fixing the previous
23549         commit.  
23550
23551         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23552         not used to mean `ref' but `ref or out' in ParameterReference
23553
23554         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23555         full type signature instead of calling TypeManger.CSharpName
23556         ourselves. 
23557
23558         * support.cs (InternalParameters.ParameterDesc): Do not compare
23559         directly to the modflags, because REF/OUT will actually be bitsets
23560         if set. 
23561
23562         * delegate.cs (VerifyMethod): Check also the modifiers.
23563
23564         * cs-tokenizer.cs: Fix bug where floating point values with an
23565         exponent where a sign was missing was ignored.
23566
23567         * driver.cs: Allow multiple assemblies to be specified in a single
23568         /r: argument
23569
23570 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23571
23572         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23573         because identifiers after a parenthesis would end up in this kind
23574         of production, and we needed to desamiguate it for having casts
23575         like:
23576
23577                 (UserDefinedType *) xxx
23578
23579 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23580
23581         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23582         we should set on the Bindingflags.NonPublic, but not turn on
23583         private_ok.  private_ok controls whether a Private member is
23584         returned (this is chekced on the filter routine), while the
23585         BindingFlags.NonPublic just controls whether private/protected
23586         will be allowed.   This fixes the problem part of the problem of
23587         private properties being allowed to be used in derived classes.
23588
23589         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23590         so we can call the children DoResolveLValue method (this will
23591         properly signal errors on lvalue assignments to base properties)
23592
23593         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23594         getter are null, and we have a property info, we know that this
23595         happened because the lookup failed, so we report an error 122 for
23596         protection level violation.
23597
23598         We also silently return if setter and getter are null in the
23599         resolve functions, this condition only happens if we have flagged
23600         the error before.  This is the other half of the problem. 
23601
23602         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23603         not have accessibility information, that is why we were returning
23604         true in the filter function in typemanager.cs.
23605
23606         To properly report 122 (property is inaccessible because of its
23607         protection level) correctly, we report this error in ResolveAccess
23608         by failing if both the setter and the getter are lacking (ie, the
23609         lookup failed). 
23610
23611         DoResolve and DoLResolve have been modified to check for both
23612         setter/getter being null and returning silently, the reason being
23613         that I did not want to put the knowledge about this error in upper
23614         layers, like:
23615
23616         int old = Report.Errors;
23617         x = new PropertyExpr (...);
23618         if (old != Report.Errors)
23619                 return null;
23620         else
23621                 return x;
23622
23623         So the property expr is returned, but it is invalid, so the error
23624         will be flagged during the resolve process. 
23625
23626         * class.cs: Remove InheritablePropertySignatureCompare from the
23627         class, as we no longer depend on the property signature to compute
23628         whether it is possible to implement a method or not.
23629
23630         The reason is that calling PropertyInfo.GetGetMethod will return
23631         null (in .NET, in Mono it works, and we should change this), in
23632         cases where the Get Method does not exist in that particular
23633         class.
23634
23635         So this code:
23636
23637         class X { public virtual int A { get { return 1; } } }
23638         class Y : X { }
23639         class Z : Y { public override int A { get { return 2; } } }
23640
23641         Would fail in Z because the parent (Y) would not have the property
23642         defined.  So we avoid this completely now (because the alternative
23643         fix was ugly and slow), and we now depend exclusively on the
23644         method names.
23645
23646         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23647         reference method, instead of using the property.
23648
23649         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23650         routines are gone now.
23651
23652         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23653         names, they were incorrectly named.
23654
23655         * cs-tokenizer.cs: Return are more gentle token on failure. 
23656
23657         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23658         had an out-of-sync index variable, which caused it to remove from
23659         the list of pending methods the wrong method sometimes.
23660
23661 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23662
23663         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23664         CanWrite, because those refer to this particular instance of the
23665         property, and do not take into account the fact that we can
23666         override single members of a property.
23667
23668         Constructor requires an EmitContext.  The resolution process does
23669         not happen here, but we need to compute the accessors before,
23670         because the resolution does not always happen for properties.
23671
23672         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23673         subclass, before we did not update this flag, but we did update
23674         bindingflags. 
23675
23676         (GetAccessors): Drop this routine, as it did not work in the
23677         presence of partially overwritten set/get methods. 
23678
23679         Notice that this broke the cs1540 detection, but that will require
23680         more thinking. 
23681
23682 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23683
23684         * class.cs:
23685         * codegen.cs:
23686         * driver.cs: issue a warning instead of an error if we don't support
23687         debugging for the platform. Also ignore a couple of errors that may
23688         arise when trying to write the symbols. Undo my previous patch.
23689
23690 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23691
23692         * driver.cs: ignore /debug switch except for Unix platforms.
23693
23694 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23695
23696         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23697
23698 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23699
23700         * driver.cs: Do not make mcs-debug conditional, so we do not break
23701         builds that use it.
23702
23703         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23704         review this patch.  But basically after all the children variables
23705         have been merged, the value of "Breaks" was not being set to
23706         new_breaks for Switch blocks.  I think that it should be set after
23707         it has executed.  Currently I set this to the value of new_breaks,
23708         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23709         conservative, but I do not understand this code very well.
23710
23711         I did not break anything in the build, so that is good ;-)
23712
23713         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23714
23715 2002-10-20  Mark Crichton  <crichton@gimp.org>
23716
23717         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23718
23719 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23720
23721         * cfold.cs: Fixed compile blocker.
23722
23723 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23724
23725         * driver.cs: I was chekcing the key, not the file.
23726
23727 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23728
23729         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23730         message that we were generating - we just need to silently return
23731         a null.
23732
23733 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23734
23735         * class.cs (Event.Define): Change my previous commit, as this
23736         breaks the debugger.  This is a temporary hack, as it seems like
23737         the compiler is generating events incorrectly to begin with.
23738
23739         * expression.cs (Binary.ResolveOperator): Added support for 
23740         "U operator - (E x, E y)"
23741
23742         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23743         y)".
23744
23745         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23746         init-only variables, but this path did not take into account that
23747         there might be also instance readonly variables.  Correct this
23748         problem. 
23749
23750         This fixes bug 32253
23751
23752         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23753         delegates as well.
23754
23755         * driver.cs: Change the extension for modules to `netmodule'
23756
23757         * cs-parser.jay: Improved slightly the location tracking for
23758         the debugger symbols.
23759
23760         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23761         modifiers that were specified instead of the hardcoded value
23762         (FamAndAssem).  This was basically ignoring the static modifier,
23763         and others.  Fixes 32429.
23764
23765         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23766         fixed a bug in the process (32476)
23767
23768         * expression.cs (ArrayAccess.EmitAssign): Patch from
23769         hwang_rob@yahoo.ca that fixes bug 31834.3
23770
23771 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23772
23773         * driver.cs: Make the module extension .netmodule.
23774
23775 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23776
23777         * driver.cs: Report an error if the resource file is not found
23778         instead of crashing.
23779
23780         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23781         false, like Emit does.
23782
23783 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23784
23785         * typemanager.cs: Remove unused private member.  Also reported mcs
23786         bug to report this as a warning like csc.
23787
23788 2002-10-15  Martin Baulig  <martin@gnome.org>
23789
23790         * statement.cs (Statement.Emit): Made this a virtual method; emits
23791         the line number info and calls DoEmit().
23792         (Statement.DoEmit): New protected abstract method, formerly knows
23793         as Statement.Emit().
23794
23795         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23796
23797 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23798
23799         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23800         have fixed a remaining problem: not every AddXXXX was adding a
23801         fully qualified name.  
23802
23803         Now everyone registers a fully qualified name in the DeclSpace as
23804         being defined instead of the partial name.  
23805
23806         Downsides: we are slower than we need to be due to the excess
23807         copies and the names being registered this way.  
23808
23809         The reason for this is that we currently depend (on the corlib
23810         bootstrap for instance) that types are fully qualified, because
23811         we dump all the types in the namespace, and we should really have
23812         types inserted into the proper namespace, so we can only store the
23813         basenames in the defined_names array.
23814
23815 2002-10-10  Martin Baulig  <martin@gnome.org>
23816
23817         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23818         from bug #31834, see the bug report for a testcase which is
23819         miscompiled.
23820
23821 2002-10-10  Martin Baulig  <martin@gnome.org>
23822
23823         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23824         flow analysis code for this.
23825
23826         * statement.cs (Do, While, For): Tell the flow analysis code about
23827         infinite loops.
23828         (FlowBranching.UsageVector): Added support for infinite loops.
23829         (Block.Resolve): Moved the dead code elimination here and use flow
23830         analysis to do it.
23831
23832 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23833
23834         * class.cs (Field.Define): Catch cycles on struct type
23835         definitions. 
23836
23837         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23838         fields if the fields are static.  We only need to check instance
23839         fields. 
23840
23841         * expression.cs (As.DoResolve): Test for reference type.
23842
23843         * statement.cs (Using.ResolveExpression): Use
23844         ConvertImplicitRequired, not ConvertImplicit which reports an
23845         error on failture
23846         (Using.ResolveLocalVariableDecls): ditto.
23847
23848         * expression.cs (Binary.ResolveOperator): Report errors in a few
23849         places where we had to.
23850
23851         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23852
23853 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23854
23855         * expression.cs: Use StoreFromPtr instead of extracting the type
23856         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23857
23858         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23859         an enumeration value to a System.Enum, but System.Enum is not a
23860         value type, but an class type, so we need to box.
23861
23862         (Expression.ConvertExplicit): One codepath could return
23863         errors but not flag them.  Fix this.  Fixes #31853
23864
23865         * parameter.cs (Resolve): Do not allow void as a parameter type.
23866
23867 2002-10-06  Martin Baulig  <martin@gnome.org>
23868
23869         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23870         if it's a class type and not a struct.  Fixes #31815.
23871
23872 2002-10-06  Martin Baulig  <martin@gnome.org>
23873
23874         * statement.cs: Reworked the flow analysis code a bit to make it
23875         usable for dead code elimination.
23876
23877 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23878
23879         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23880
23881 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23882
23883         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23884         to fix the test 165, will investigate deeper.
23885
23886 2002-10-04  Martin Baulig  <martin@gnome.org>
23887
23888         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23889         finally blocks actually work.
23890         (Try.Resolve): We don't need to create a sibling for `finally' if
23891         there is no finally block.
23892
23893 2002-10-04  Martin Baulig  <martin@gnome.org>
23894
23895         * class.cs (Constructor.Define): The default accessibility for a
23896         non-default constructor is private, not public.
23897
23898 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23899
23900         * class.cs (Constructor): Make AllowedModifiers public, add
23901         EXTERN.
23902
23903         * cs-parser.jay: Perform the modifiers test here, as the
23904         constructor for the Constructor class usually receives a zero
23905         because of the way we create it (first we create, later we
23906         customize, and we were never checking the modifiers).
23907
23908         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23909         is a version of LookupTypeReflection that includes the type-name
23910         cache.  This can be used as a fast path for functions that know
23911         the fully qualified name and are only calling into *.GetType() to
23912         obtain a composed type.
23913
23914         This is also used by TypeManager.LookupType during its type
23915         composition.
23916
23917         (LookupType): We now also track the real type name, as sometimes
23918         we can get a quey for the real type name from things like
23919         ComposedCast.  This fixes bug 31422.
23920
23921         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23922         complete type fullname, it does not have to go through the type
23923         resolution system to obtain the composed version of the type (for
23924         obtaining arrays or pointers).
23925
23926         (Conditional.Emit): Use the EmitBoolExpression to
23927         generate nicer code, as requested by Paolo.
23928
23929         (ArrayCreation.CheckIndices): Use the patch from
23930         hwang_rob@yahoo.ca to validate the array initializers. 
23931
23932 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23933
23934         * class.cs (ConstructorInitializer.Emit): simplify code by using
23935         Invocation.EmitCall, and at the same time, fix the bugs in calling
23936         parent constructors that took variable arguments. 
23937
23938         * ecore.cs (Expression.ConvertNumericExplicit,
23939         Expression.ImplicitNumericConversion): Remove the code that
23940         manually wrapped decimal (InternalTypeConstructor call is now gone
23941         as well).
23942
23943         * expression.cs (Cast.TryReduce): Also handle decimal types when
23944         trying to perform a constant fold on the type.
23945
23946         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23947
23948         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23949         that only turned off an error report, and did nothing else. 
23950
23951 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23952
23953         * driver.cs: Handle and ignore /fullpaths
23954
23955 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23956
23957         * expression.cs (Binary.ResolveOperator): Catch the case where
23958         DoNumericPromotions returns true, 
23959
23960         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23961
23962 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23963
23964         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23965         report error 70.
23966
23967 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23968
23969         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23970         conversion exists, but it is also required that the conversion be
23971         performed.  This manifested in "(Type64Enum) 2".  
23972
23973         * class.cs (TypeManager.AddMethod): The fix is not to change
23974         AddEnum, because that one was using a fully qualified name (every
23975         DeclSpace derivative does), but to change the AddMethod routine
23976         that was using an un-namespaced name.  This now correctly reports
23977         the duplicated name.
23978
23979         Revert patch until I can properly fix it.  The issue
23980         is that we have a shared Type space across all namespaces
23981         currently, which is wrong.
23982
23983         Options include making the Namespace a DeclSpace, and merge
23984         current_namespace/current_container in the parser.
23985
23986 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23987
23988         * cs-parser.jay: Improve error reporting when we get a different
23989         kind of expression in local_variable_type and
23990         local_variable_pointer_type. 
23991
23992         Propagate this to avoid missleading errors being reported.
23993
23994         * ecore.cs (ImplicitReferenceConversion): treat
23995         TypeManager.value_type as a target just like object_type.   As
23996         code like this:
23997
23998         ValueType v = 1;
23999
24000         Is valid, and needs to result in the int 1 being boxed before it
24001         is assigned to the value type v.
24002
24003         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24004         to validate the enumeration name.
24005
24006         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24007         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24008         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24009
24010         * ecore.cs (TryImplicitIntConversion): When doing an
24011         implicit-enumeration-conversion, check if the type is 64-bits and
24012         perform a conversion before passing to EnumConstant.
24013
24014 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24015
24016         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24017         report ambiguous type references.  Unlike the MS version, we
24018         report what the ambiguity is.   Innovation at work ;-)
24019
24020         (DeclSpace.FindType): Require a location argument to
24021         display when we display an ambiguous error.
24022
24023         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24024
24025         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24026
24027         * expression.cs (EmitDynamicInitializers): Apply patch from
24028         hwang_rob@yahoo.ca that fixes the order in which we emit our
24029         initializers. 
24030
24031 2002-09-21  Martin Baulig  <martin@gnome.org>
24032
24033         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24034         delegate takes no arguments.
24035
24036 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24037
24038         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24039         from integers.
24040
24041         * expression.cs: Extract the underlying type.
24042
24043         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24044
24045         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24046
24047 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24048
24049         * class.cs (TypeContainer.DefineType): We can not use the nice
24050         PackingSize with the size set to 1 DefineType method, because it
24051         will not allow us to define the interfaces that the struct
24052         implements.
24053
24054         This completes the fixing of bug 27287
24055
24056         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24057         means also structs.  This fixes part of the problem. 
24058         (Expresion.ImplicitReferenceConversionExists): ditto.
24059
24060         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24061         error if there were no errors reported during the type lookup
24062         process, to avoid duplicates or redundant errors.  Without this
24063         you would get an ambiguous errors plus a type not found.  We have
24064         beaten the user enough with the first error.  
24065
24066         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24067         reference. 
24068
24069         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24070         during the resolution process, stop the lookup, this avoids
24071         repeated error reports (same error twice).
24072
24073         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24074
24075         * typemanager.cs (LookupType): Redo the type lookup code to match
24076         the needs of System.Reflection.  
24077
24078         The issue is that System.Reflection requires references to nested
24079         types to begin with a "+" sign instead of a dot.  So toplevel
24080         types look like: "NameSpace.TopLevelClass", and nested ones look
24081         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24082         levels. 
24083
24084 2002-09-19  Martin Baulig  <martin@gnome.org>
24085
24086         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24087         says that a method always returns or always throws an exception,
24088         don't report the CS0161.
24089
24090         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24091         set `Returns = new_returns'.
24092
24093 2002-09-19  Martin Baulig  <martin@gnome.org>
24094
24095         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24096         to an enum constant, check for a CS0176.
24097
24098 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24099
24100         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24101         for operators that must be in pairs and report errors.
24102
24103         * ecore.cs (SimpleName.DoResolveType): During the initial type
24104         resolution process, when we define types recursively, we must
24105         check first for types in our current scope before we perform
24106         lookups in the enclosing scopes.
24107
24108         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24109
24110         (Invocation.VerifyArgumentsCompat): Call
24111         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24112         I thought we were supposed to always call this, but there are a
24113         few places in the code where we dont do it.
24114
24115 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24116
24117         * driver.cs: Add support in -linkres and -resource to specify the
24118         name of the identifier.
24119
24120 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24121
24122         * ecore.cs (StandardConversionExists): Sync with the conversion
24123         code: allow anything-* to void* conversions.
24124
24125         (FindMostSpecificSource): Use an Expression argument
24126         instead of a Type, because we might be handed over a Literal which
24127         gets a few more implicit conversions that plain types do not.  So
24128         this information was being lost.
24129
24130         Also, we drop the temporary type-holder expression when not
24131         required.
24132
24133 2002-09-17  Martin Baulig  <martin@gnome.org>
24134
24135         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24136         this is an explicit interface implementation.
24137
24138 2002-09-17  Martin Baulig  <martin@gnome.org>
24139
24140         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24141         different `IndexerName' attributes.
24142
24143         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24144         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24145         virtual CommonResolve().
24146
24147 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24148
24149         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24150         and convert that to the UnderlyingType.
24151
24152         * statement.cs (Foreach.Resolve): Indexers are just like variables
24153         or PropertyAccesses.
24154
24155         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24156         inside quoted strings, we were not doing this before.
24157
24158 2002-09-16  Martin Baulig  <martin@gnome.org>
24159
24160         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24161         resolve it.  This is needed for the definite assignment check of the
24162         instance expression, fixes bug #29846.
24163         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24164
24165 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24166
24167         * parameter.cs: Fix compile error.  Cannot reference static member
24168         from an instance object.  Is this an mcs bug?
24169
24170 2002-09-14  Martin Baulig  <martin@gnome.org>
24171
24172         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24173         multiple times.  Fixes bug #30295, added test-166.cs.
24174
24175 2002-09-14  Martin Baulig  <martin@gnome.org>
24176
24177         * statement.cs (Block.Emit): Don't emit unreachable code.
24178         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24179         `break' statements.
24180         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24181
24182 2002-09-14  Martin Baulig  <martin@gnome.org>
24183
24184         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24185         is set.
24186
24187 2002-09-14  Martin Baulig  <martin@gnome.org>
24188
24189         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24190         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24191         be false on the ms runtime.
24192
24193 2002-09-13  Martin Baulig  <martin@gnome.org>
24194
24195         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24196         the CS0038 error message.
24197
24198 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24199
24200         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24201         constant inside, return it.
24202
24203 2002-09-12  Martin Baulig  <martin@gnome.org>
24204
24205         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24206         implicit conversion can be done between enum types.
24207
24208         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24209         check whether an implicit conversion to the current enum's UnderlyingType
24210         exists and report an error if not.
24211
24212         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24213         without debugging support.
24214
24215         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24216         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24217
24218 2002-09-12  Martin Baulig  <martin@gnome.org>
24219
24220         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24221
24222         * ecore.cs (IMemberExpr.DeclaringType): New property.
24223         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24224         nonstatic member of an outer type (CS0038).
24225
24226 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24227
24228         * driver.cs: Activate the using-error detector at warning level
24229         4 (at least for MS-compatible APIs).
24230
24231         * namespace.cs (VerifyUsing): Small buglett fix.
24232
24233         * pending.cs (PendingImplementation): pass the container pointer. 
24234
24235         * interface.cs (GetMethods): Allow for recursive definition.  Long
24236         term, I would like to move every type to support recursive
24237         definitions, not the current ordering mechanism that we have right
24238         now.
24239
24240         The situation is this: Attributes are handled before interfaces,
24241         so we can apply attributes to interfaces.  But some attributes
24242         implement interfaces, we will now handle the simple cases
24243         (recursive definitions will just get an error).  
24244
24245         * parameter.cs: Only invalidate types at the end if we fail to
24246         lookup all types.  
24247
24248 2002-09-09  Martin Baulig  <martin@gnome.org>
24249
24250         * ecore.cs (PropertyExpr.Emit): Also check for
24251         TypeManager.system_int_array_get_length so this'll also work when
24252         compiling corlib.  Fixes #30003.
24253
24254 2002-09-09  Martin Baulig  <martin@gnome.org>
24255
24256         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24257         and throw an exception if we can't get the type's size.  Fixed #30040,
24258         added test-165.cs.
24259
24260 2002-09-09  Martin Baulig  <martin@gnome.org>
24261
24262         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24263
24264         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24265         context.  Fixes bug #30027.
24266
24267         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24268         virtual functions.  Fixes bug #30043, added test-164.cs.
24269
24270 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24271
24272         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24273
24274 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24275
24276         * driver.cs: Use an object to get the windows codepage since it's not a
24277         static property.
24278
24279 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24280
24281         * statement.cs (For.Emit): for infinite loops (test == null)
24282         return whether there is a break inside, not always "true".
24283
24284         * namespace.cs (UsingEntry): New struct to hold the name of the
24285         using definition, the location where it is defined, and whether it
24286         has been used in a successful type lookup.
24287
24288         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24289         strings.
24290
24291         * decl.cs: ditto.
24292
24293 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24294
24295         * attribute.cs : Fix incorrect code which relied on catching
24296         a NullReferenceException to detect a null being passed in
24297         where an object was expected.
24298
24299 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24300
24301         * statement.cs (Try): flag the catch variable as assigned
24302
24303         * expression.cs (Cast): Simplified by using ResolveType instead of
24304         manually resolving.
24305
24306         * statement.cs (Catch): Fix bug by using ResolveType.
24307
24308 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24309
24310         * expression.cs (BetterConversion): Special case for when we have
24311         a NullLiteral as the argument and we have to choose between string
24312         and object types - we choose string the way csc does.
24313
24314         * attribute.cs (Attribute.Resolve): Catch the
24315         NullReferenceException and report error #182 since the Mono
24316         runtime no more has the bug and having this exception raised means
24317         we tried to select a constructor which takes an object and is
24318         passed a null.
24319
24320 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24321
24322         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24323         message (1502, 1503) when we can't locate a method after overload
24324         resolution. This is much more informative and closes the bug
24325         Miguel reported.
24326
24327         * interface.cs (PopulateMethod): Return if there are no argument
24328         types. Fixes a NullReferenceException bug.
24329
24330         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24331         expressions too. Previously we were checking only in one place for
24332         positional arguments leaving out named arguments.
24333
24334         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24335         type to the enum type is not allowed. Remove code corresponding to
24336         that.
24337
24338         (ConvertNumericExplicit): Allow explicit conversions from
24339         the underlying type to enum type. This precisely follows the spec
24340         and closes a bug filed by Gonzalo.
24341
24342 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24343
24344         * compiler.csproj:
24345         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24346
24347 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24348
24349         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24350         it was important that we stored the right value after the
24351         reduction in `converted'.
24352
24353 2002-09-04  Martin Baulig  <martin@gnome.org>
24354
24355         * location.cs (Location.SymbolDocument): Use full pathnames for the
24356         source files.
24357
24358 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24359
24360         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24361         of the expression resolve mechanism, because that will catch the
24362         SimpleName error failures.
24363
24364         (Conditional): If we can not resolve the
24365         expression, return, do not crash.
24366
24367 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24368
24369         * cs-tokenizer.cs:
24370         (location): display token name instead of its number.
24371
24372 2002-08-28  Martin Baulig  <martin@gnome.org>
24373
24374         * expression.cs (Binary.ResolveOperator): Don't silently return
24375         but return an error if an operator cannot be applied between two
24376         enum types.
24377
24378 2002-08-28  Martin Baulig  <martin@gnome.org>
24379
24380         * class.cs (Constructor.Define): Set the permission attributes
24381         correctly instead of making all constructors public.
24382
24383 2002-08-28  Martin Baulig  <martin@gnome.org>
24384
24385         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24386         for private members before reporting a CS0103; if we find anything,
24387         it's a CS0122.
24388
24389 2002-08-28  Martin Baulig  <martin@gnome.org>
24390
24391         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24392         to check whether `closure_start_type == closure_invocation_type',
24393         we also need to check whether `m.DeclaringType == closure_invocation_type'
24394         before bypassing the permission checks.  We might be accessing
24395         protected/private members from the base class.
24396         (TypeManager.RealMemberLookup): Only set private_ok if private
24397         members were requested via BindingFlags.NonPublic.
24398
24399         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24400
24401         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24402         MethodGroupExpr.IsExplicitImpl if appropriate.
24403         (Invocation.DoResolve): Don't report the CS0120 for explicit
24404         interface implementations.
24405
24406 2002-08-27  Martin Baulig  <martin@gnome.org>
24407
24408         * expression.cs (Invocation.DoResolve): If this is a static
24409         method and we don't have an InstanceExpression, we must report
24410         a CS0120.
24411
24412 2002-08-25  Martin Baulig  <martin@gnome.org>
24413
24414         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24415         `==' between a valuetype and an object.
24416
24417 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24418
24419         * ecore.cs (TypeExpr): Provide a ToString method.
24420
24421 2002-08-24  Martin Baulig  <martin@gnome.org>
24422
24423         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24424         now called proggie.dbg and it's a binary file.
24425
24426 2002-08-23  Martin Baulig  <martin@gnome.org>
24427
24428         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24429
24430 2002-08-23  Martin Baulig  <martin@gnome.org>
24431
24432         * struct.cs (MyStructInfo.ctor): Make this work with empty
24433         structs; it's not allowed to use foreach() on null.
24434
24435 2002-08-23  Martin Baulig  <martin@gnome.org>
24436
24437         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24438         writer the full pathname of the generated assembly.
24439
24440 2002-08-23  Martin Baulig  <martin@gnome.org>
24441
24442         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24443         A `finally' block never returns or breaks; improved handling of
24444         unreachable code.
24445
24446 2002-08-23  Martin Baulig  <martin@gnome.org>
24447
24448         * statement.cs (Throw.Resolve): Allow `throw null'.
24449
24450 2002-08-23  Martin Baulig  <martin@gnome.org>
24451
24452         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24453         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24454         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24455         MemberLookup would return a wrong event if this is an explicit
24456         interface implementation and the class has an event with the same
24457         name.
24458
24459 2002-08-23  Martin Baulig  <martin@gnome.org>
24460
24461         * statement.cs (Block.AddChildVariableNames): New public method.
24462         (Block.AddChildVariableName): Likewise.
24463         (Block.IsVariableNameUsedInChildBlock): Likewise.
24464         (Block.AddVariable): Check whether a variable name has already
24465         been used in a child block.
24466
24467         * cs-parser.jay (declare_local_variables): Mark all variable names
24468         from the current block as being used in a child block in the
24469         implicit block.
24470
24471 2002-08-23  Martin Baulig  <martin@gnome.org>
24472
24473         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24474         find the symbol writer.
24475
24476         * driver.cs: csc also allows the arguments to /define being
24477         separated by commas, not only by semicolons.
24478
24479 2002-08-23  Martin Baulig  <martin@gnome.org>
24480
24481         * interface.cs (Interface.GetMembers): Added static check for events.
24482
24483 2002-08-15  Martin Baulig  <martin@gnome.org>
24484
24485         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24486         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24487
24488         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24489         why the MethodData.EmitDestructor() change was necessary.
24490
24491 2002-08-20  Martin Baulig  <martin@gnome.org>
24492
24493         * class.cs (TypeContainer.FindMembers): Added static check for events.
24494
24495         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24496
24497         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24498         use Type.GetEvents(), not Type.FindMembers().
24499
24500 2002-08-20  Martin Baulig  <martin@gnome.org>
24501
24502         * decl.cs (MemberCache): Added a special method cache which will
24503         be used for method-only searched.  This ensures that a method
24504         search will return a MethodInfo with the correct ReflectedType for
24505         inherited methods.      
24506
24507 2002-08-20  Martin Baulig  <martin@gnome.org>
24508
24509         * decl.cs (DeclSpace.FindMembers): Made this public.
24510
24511 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24512
24513         * delegate.cs: fixed build on windows.
24514         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24515
24516 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24517
24518         * ecore.cs (StandardConversionExists): Return a false
24519         if we are trying to convert the void type to anything else
24520         since that is not allowed.
24521
24522         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24523         we flag error 70 in the event an event is trying to be accessed
24524         directly from outside the declaring type.
24525
24526 2002-08-20  Martin Baulig  <martin@gnome.org>
24527
24528         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24529         MemberCache from typemanager.cs to decl.cs.
24530
24531 2002-08-19  Martin Baulig  <martin@gnome.org>
24532
24533         * class.cs (TypeContainer): Implement IMemberContainer.
24534         (TypeContainer.DefineMembers): Create the MemberCache.
24535         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24536         return public members if BindingFlags.Public was given, check
24537         whether members are static.
24538
24539 2002-08-16  Martin Baulig  <martin@gnome.org>
24540
24541         * decl.cs (DeclSpace.Define): Splitted this in Define and
24542         DefineMembers.  DefineMembers is called first and initializes the
24543         MemberCache.
24544
24545         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24546         DefineMembers() on all our DeclSpaces.
24547
24548         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24549         but call DefineMembers() on all nested interfaces.  We call their
24550         Define() in our new Define() function.
24551
24552         * interface.cs (Interface): Implement IMemberContainer.
24553         (Interface.Define): Moved all code except the attribute stuf to
24554         DefineMembers().
24555         (Interface.DefineMembers): Initialize the member cache.
24556
24557         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24558         need this anymore since we can use MemberCache.FindMembers directly.
24559
24560 2002-08-19  Martin Baulig  <martin@gnome.org>
24561
24562         * typemanager.cs (MemberCache): When creating the cache for an
24563         interface type, add all inherited members.
24564         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24565         to `out bool used_cache' and documented it.
24566         (TypeManager.MemberLookup): If we already used the cache in the first
24567         iteration, we don't need to do the interfaces check.
24568
24569 2002-08-19  Martin Baulig  <martin@gnome.org>
24570
24571         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24572         here from IMemberFinder and don't implement this interface anymore.
24573         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24574
24575         * typemanager.cs (IMemberFinder): This interface is now only used by
24576         classes which actually support the member cache.
24577         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24578         since we only put DeclSpaces into this Hashtable.
24579         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24580         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24581
24582 2002-08-16  Martin Baulig  <martin@gnome.org>
24583
24584         * typemanager.cs (ICachingMemberFinder): Removed.
24585         (IMemberFinder.MemberCache): New property.
24586         (TypeManager.FindMembers): Merged this with RealFindMembers().
24587         This function will never be called from TypeManager.MemberLookup()
24588         so we can't use the cache here, just the IMemberFinder.
24589         (TypeManager.MemberLookup_FindMembers): Check whether the
24590         IMemberFinder has a MemberCache and call the cache's FindMembers
24591         function.
24592         (MemberCache): Rewrote larger parts of this yet another time and
24593         cleaned it up a bit.
24594
24595 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24596
24597         * driver.cs (LoadArgs): Support quoting.
24598
24599         (Usage): Show the CSC-like command line arguments.
24600
24601         Improved a few error messages.
24602
24603 2002-08-15  Martin Baulig  <martin@gnome.org>
24604
24605         * typemanager.cs (IMemberContainer.Type): New property.
24606         (IMemberContainer.IsInterface): New property.
24607
24608         The following changes are conditional to BROKEN_RUNTIME, which is
24609         defined at the top of the file.
24610
24611         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24612         class'es members, but add all members from TypeHandle.ObjectType
24613         if we're an interface.
24614         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24615         is the current type.
24616         (MemberCache.CacheEntry.Container): Removed this field.
24617         (TypeHandle.GetMembers): Include inherited members.
24618
24619 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24620
24621         * typemanager.cs: fixed compilation and added a comment on a field that
24622         is never used.
24623
24624 2002-08-15  Martin Baulig  <martin@gnome.org>
24625
24626         * class.cs (ConstructorInitializer.Resolve): In the
24627         Expression.MemberLookup call, use the queried_type as
24628         invocation_type.
24629
24630         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24631         declared' attribute, it's always true.
24632         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24633         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24634         temporary wrapper for FindMembers which tells MemberLookup whether
24635         members from the base classes are included in the return value.
24636         This will go away soon.
24637         (TypeManager.MemberLookup): Use this temporary hack here; once the
24638         new MemberCache is completed, we don't need to do the DeclaredOnly
24639         looping here anymore since the MemberCache will take care of this.
24640         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24641         (MemberCache): When creating the MemberCache for a class, get
24642         members from the current class and all its base classes.
24643         (MemberCache.CacheEntry.Container): New field.  This is a
24644         temporary hack until the Mono runtime is fixed to distinguish
24645         between ReflectedType and DeclaringType.  It allows us to use MCS
24646         with both the MS runtime and the unfixed Mono runtime without
24647         problems and without accecting performance.
24648         (MemberCache.SearchMembers): The DeclaredOnly looping from
24649         TypeManager.MemberLookup is now done here.      
24650
24651 2002-08-14  Martin Baulig  <martin@gnome.org>
24652
24653         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24654         Type.GetFields on dynamic types but get the fields from the
24655         corresponding TypeContainer.
24656         (MyStructInfo.GetStructInfo): Added check for enum types.
24657
24658         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24659         (MemberList.SyncRoot): Implemented.
24660         (TypeManager.FilterWithClosure): No need to check permissions if
24661         closure_start_type == closure_invocation_type, don't crash if
24662         closure_invocation_type is null.
24663
24664 2002-08-13  Martin Baulig  <martin@gnome.org>
24665
24666         Rewrote TypeContainer.FindMembers to use a member cache.  This
24667         gives us a speed increase of about 35% for the self-hosting MCS
24668         build and of about 15-20% for the class libs (both on GNU/Linux).
24669
24670         * report.cs (Timer): New class to get enhanced profiling.  This
24671         whole class is "TIMER" conditional since it remarkably slows down
24672         compilation speed.
24673
24674         * class.cs (MemberList): New class.  This is an IList wrapper
24675         which we're now using instead of passing MemberInfo[]'s around to
24676         avoid copying this array unnecessarily.
24677         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24678         (ICachingMemberFinder, IMemberContainer): New interface.
24679         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24680         has already been checked, otherwise use it for the name comparision.
24681         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24682         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24683         if possible.  Returns a MemberList, not a MemberInfo [].
24684         (TypeHandle): New class, implements IMemberContainer.  We create
24685         one instance of this class per type, it contains a MemberCache
24686         which is used to do the member lookups.
24687         (MemberCache): New class.  Each instance of this class contains
24688         all members of a type and a name-based hash table.
24689         (MemberCache.FindMembers): This is our new member lookup
24690         function.  First, it looks up all members of the requested name in
24691         the hash table.  Then, it walks this list and sorts out all
24692         applicable members and returns them.
24693
24694 2002-08-13  Martin Baulig  <martin@gnome.org>
24695
24696         In addition to a nice code cleanup, this gives us a performance
24697         increase of about 1.4% on GNU/Linux - not much, but it's already
24698         half a second for the self-hosting MCS compilation.
24699
24700         * typemanager.cs (IMemberFinder): New interface.  It is used by
24701         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24702         Enum, Delegate or Interface.
24703         (TypeManager.finder_to_member_finder): New PtrHashtable.
24704         (TypeManager.finder_to_container): Removed.
24705         (TypeManager.finder_to_delegate): Removed.
24706         (TypeManager.finder_to_interface): Removed.
24707         (TypeManager.finder_to_enum): Removed.
24708
24709         * interface.cs (Interface): Implement IMemberFinder.
24710
24711         * delegate.cs (Delegate): Implement IMemberFinder.
24712
24713         * enum.cs (Enum): Implement IMemberFinder.
24714
24715         * class.cs (TypeContainer): Implement IMemberFinder.
24716
24717 2002-08-12  Martin Baulig  <martin@gnome.org>
24718
24719         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24720
24721 2002-08-12  Martin Baulig  <martin@gnome.org>
24722
24723         * ecore.cs (ITypeExpression): New interface for expressions which
24724         resolve to a type.
24725         (TypeExpression): Renamed to TypeLookupExpression.
24726         (Expression.DoResolve): If we're doing a types-only lookup, the
24727         expression must implement the ITypeExpression interface and we
24728         call DoResolveType() on it.
24729         (SimpleName): Implement the new ITypeExpression interface.
24730         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24731         hack, the situation that we're only looking up types can't happen
24732         anymore when this method is called.  Moved the type lookup code to
24733         DoResolveType() and call it.
24734         (SimpleName.DoResolveType): This ITypeExpression interface method
24735         is now doing the types-only lookup.
24736         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24737         (ResolveFlags): Added MaskExprClass.
24738
24739         * expression.cs (MemberAccess): Implement the ITypeExpression
24740         interface.
24741         (MemberAccess.DoResolve): Added support for a types-only lookup
24742         when we're called via ITypeExpression.DoResolveType().
24743         (ComposedCast): Implement the ITypeExpression interface.
24744
24745         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24746         Expression.Resolve() with ResolveFlags.Type instead.
24747
24748 2002-08-12  Martin Baulig  <martin@gnome.org>
24749
24750         * interface.cs (Interface.Define): Apply attributes.
24751
24752         * attribute.cs (Attribute.ApplyAttributes): Added support for
24753         interface attributes.
24754
24755 2002-08-11  Martin Baulig  <martin@gnome.org>
24756
24757         * statement.cs (Block.Emit): Only check the "this" variable if we
24758         do not always throw an exception.
24759
24760         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24761         whether the property has a set accessor.
24762
24763 2002-08-11  Martin Baulig  <martin@gnome.org>
24764
24765         Added control flow analysis support for structs.
24766
24767         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24768         with control flow analysis turned off.
24769         (IVariable): New interface.
24770         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24771         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24772         (FieldExpr.DoResolve): Resolve the instance expression with flow
24773         analysis turned off and do the definite assignment check after the
24774         resolving when we know what the expression will resolve to.
24775
24776         * expression.cs (LocalVariableReference, ParameterReference):
24777         Implement the new IVariable interface, only call the flow analysis
24778         code if ec.DoFlowAnalysis is true.
24779         (This): Added constructor which takes a Block argument.  Implement
24780         the new IVariable interface.
24781         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24782         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24783         This does the definite assignment checks for struct members.
24784
24785         * class.cs (Constructor.Emit): If this is a non-static `struct'
24786         constructor which doesn't have any initializer, call
24787         Block.AddThisVariable() to tell the flow analysis code that all
24788         struct elements must be initialized before control returns from
24789         the constructor.
24790
24791         * statement.cs (MyStructInfo): New public class.
24792         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24793         argument to this indexer.  If non-zero, check an individual struct
24794         member, not the whole struct.
24795         (FlowBranching.CheckOutParameters): Check struct members.
24796         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24797         overloaded versions of these methods which take an additional
24798         `int field_idx' argument to check struct members.
24799         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24800         overloaded versions of these methods which take an additional
24801         `string field_name' argument to check struct member.s
24802         (VariableInfo): Implement the IVariable interface.
24803         (VariableInfo.StructInfo): New public property.  Returns the
24804         MyStructInfo instance of the variable if it's a struct or null.
24805         (Block.AddThisVariable): New public method.  This is called from
24806         Constructor.Emit() for non-static `struct' constructor which do
24807         not have any initializer.  It creates a special variable for the
24808         "this" instance variable which will be checked by the flow
24809         analysis code to ensure that all of the struct's fields are
24810         initialized before control returns from the constructor.
24811         (UsageVector): Added support for struct members.  If a
24812         variable/parameter is a struct with N members, we reserve a slot
24813         in the usage vector for each member.  A struct is considered fully
24814         initialized if either the struct itself (slot 0) or all its
24815         members are initialized.
24816
24817 2002-08-08  Martin Baulig  <martin@gnome.org>
24818
24819         * driver.cs (Driver.MainDriver): Only report an error CS5001
24820         if there were no compilation errors.
24821
24822         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24823         `UnsafeContext' property to determine whether the parent is in
24824         unsafe context rather than checking the parent's ModFlags:
24825         classes nested in an unsafe class are unsafe as well.
24826
24827 2002-08-08  Martin Baulig  <martin@gnome.org>
24828
24829         * statement.cs (UsageVector.MergeChildren): Distinguish between
24830         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24831         we return.  Added test17() and test18() to test-154.cs.
24832
24833 2002-08-08  Martin Baulig  <martin@gnome.org>
24834
24835         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24836         Family access, make sure the invoking type isn't a subclass of the
24837         queried type (that'd be a CS1540).
24838
24839         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24840         this method which takes an additional `Type invocation_type'.
24841
24842         * expression.cs (BaseAccess.DoResolve): Use the base type as
24843         invocation and query type.
24844         (MemberAccess.DoResolve): If the lookup failed and we're about to
24845         report a CS0122, try a lookup with the ec.ContainerType - if this
24846         succeeds, we must report a CS1540.
24847
24848 2002-08-08  Martin Baulig  <martin@gnome.org>
24849
24850         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24851         (MethodGroupExpr): Implement the IMemberExpr interface.
24852
24853         * expression (MemberAccess.ResolveMemberAccess): No need to have
24854         any special code for MethodGroupExprs anymore, they're now
24855         IMemberExprs.   
24856
24857 2002-08-08  Martin Baulig  <martin@gnome.org>
24858
24859         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24860         Family, FamANDAssem and FamORAssem permissions.
24861         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24862
24863 2002-08-08  Martin Baulig  <martin@gnome.org>
24864
24865         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24866         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24867         or loop block.
24868
24869 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24870
24871         * driver.cs: implemented /resource option to embed managed resources.
24872
24873 2002-08-07  Martin Baulig  <martin@gnome.org>
24874
24875         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24876         (FieldBase.HasFieldInitializer): New public property.
24877         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24878         returns the field initializer and makes sure it is only resolved once.
24879         (TypeContainer.EmitFieldInitializers): Call
24880         FieldBase.GetInitializerExpression to get the initializer, this ensures
24881         that it isn't resolved multiple times.
24882
24883         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24884         the resolving process (SimpleName/MemberLookup) that we're currently
24885         emitting a field initializer (which must not access any instance members,
24886         this is an error CS0236).
24887
24888         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24889         argument, if the `IsFieldInitializer' flag is set, we must report and
24890         error CS0236 and not an error CS0120.   
24891
24892 2002-08-07  Martin Baulig  <martin@gnome.org>
24893
24894         * ecore.cs (IMemberExpr): New public interface.
24895         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24896         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24897         if the expression is an IMemberExpr.
24898
24899         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24900         to be null, implicitly default to `this' if we're non-static in
24901         this case.  Simplified the code a lot by using the new IMemberExpr
24902         interface.  Also fixed bug #28176 here.
24903
24904 2002-08-06  Martin Baulig  <martin@gnome.org>
24905
24906         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24907         ParameterReferences during semantic analysis so that we can do a
24908         type-only search when resolving Cast, TypeOf and SizeOf.
24909         (block): Pass the `current_local_parameters' to the Block's
24910         constructor.
24911
24912         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24913         argument to the constructor.
24914         (ConstructorInitializer.Resolve): Create a temporary implicit
24915         block with the parameters.
24916
24917         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24918         references here if we aren't doing a type-only search.
24919
24920         * statement.cs (Block): Added constructor which takes a
24921         `Parameters parameters' argument.
24922         (Block.Parameters): New public property.
24923
24924         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24925         to `Parameters' and made it public readonly.
24926
24927 2002-08-06  Martin Baulig  <martin@gnome.org>
24928
24929         * ecore.cs (Expression.Warning): Made this public as well.
24930
24931         * report.cs (Report.Debug): Print the contents of collections.
24932
24933 2002-08-06  Martin Baulig  <martin@gnome.org>
24934
24935         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24936         used to tell Resolve() which kinds of expressions it may return.
24937         (Expression.Resolve): Added overloaded version of this method which
24938         takes a `ResolveFlags flags' argument.  This can be used to tell
24939         Resolve() which kinds of expressions it may return.  Reports a
24940         CS0118 on error.
24941         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24942         ResolveFlags.SimpleName.
24943         (Expression.Error118): Added overloaded version of this method which
24944         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24945         which kinds of expressions are allowed.
24946
24947         * expression.cs (Argument.ResolveMethodGroup): New public method.
24948         Resolves an argument, but allows a MethodGroup to be returned.
24949         This is used when invoking a delegate.
24950
24951         * TODO: Updated a bit.
24952
24953 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24954
24955         Fixed compilation with csc.
24956
24957         * ecore.cs: Expression.Error made public. Is this correct? Should
24958         Warning be made public too?
24959
24960         * expression.cs: use ea.Location instead of ea.loc.
24961         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24962
24963 2002-08-06  Martin Baulig  <martin@gnome.org>
24964
24965         * ecore.cs (Expression.loc): Moved the location here instead of
24966         duplicating it in all derived classes.
24967         (Expression.Location): New public property.
24968         (Expression.Error, Expression.Warning): Made them non-static and
24969         removed the location argument.
24970         (Expression.Warning): Added overloaded version which takes an
24971         `int level' argument.
24972         (Expression.Error118): Make this non-static and removed the
24973         expression and location arguments.
24974         (TypeExpr): Added location argument to the constructor.
24975
24976         * expression.cs (StaticCallExpr): Added location argument to
24977         the constructor.
24978         (Indirection, PointerArithmetic): Likewise.
24979         (CheckedExpr, UnCheckedExpr): Likewise.
24980         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24981         (StringPtr): Likewise.
24982
24983
24984 2002-08-05  Martin Baulig  <martin@gnome.org>
24985
24986         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24987
24988         * assign.cs (Assign.DoResolve): Check whether the source
24989         expression is a value or variable.
24990
24991         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24992         while resolving the corresponding blocks.
24993
24994         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24995         an error, don't silently return null.
24996
24997         * statement.cs (Block.AddVariable): Do the error reporting here
24998         and distinguish between CS0128 and CS0136.
24999         (Block.DoResolve): Report all unused labels (warning CS0164).
25000         (LabeledStatement): Pass the location to the constructor.
25001         (LabeledStatement.HasBeenReferenced): New property.
25002         (LabeledStatement.Resolve): Set it to true here.
25003
25004         * statement.cs (Return.Emit): Return success even after reporting
25005         a type mismatch error (CS0126 or CS0127), this is what csc does and
25006         it avoids confusing the users with any consecutive errors.
25007
25008 2002-08-05  Martin Baulig  <martin@gnome.org>
25009
25010         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25011
25012         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25013
25014         * expression.cs (MemberAccess.DoResolve): Silently return if an
25015         error has already been reported.
25016
25017         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25018         error has already been reported.
25019
25020 2002-08-05  Martin Baulig  <martin@gnome.org>
25021
25022         * statement.cs (UsageVector): Only initialize the `parameters'
25023         vector if we actually have any "out" parameters.
25024
25025 2002-08-05  Martin Baulig  <martin@gnome.org>
25026
25027         * expression.cs (Binary.ResolveOperator): When combining delegates,
25028         they must have the same type.
25029
25030 2002-08-05  Martin Baulig  <martin@gnome.org>
25031
25032         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25033         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25034         work with the ms runtime and we also don't need it: if we're a
25035         PropertyBuilder and not in the `indexer_arguments' hash, then we
25036         are a property and not an indexer.
25037
25038         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25039         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25040         since the latter one doesn't work with the ms runtime.
25041
25042 2002-08-03  Martin Baulig  <martin@gnome.org>
25043
25044         Fixed bugs #27998 and #22735.
25045
25046         * class.cs (Method.IsOperator): New public field.
25047         (Method.CheckBase): Report CS0111 if there's already a method
25048         with the same parameters in the current class.  Report CS0508 when
25049         attempting to change the return type of an inherited method.
25050         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25051         and it's not marked abstract or extern.
25052         (PropertyBase): New abstract base class for Property and Indexer.
25053         (PropertyBase.CheckBase): Moved here from Property and made it work
25054         for indexers.
25055         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25056         the same so we can reuse it there.
25057         (Property, Indexer): Derive from PropertyBase.
25058         (MethodSignature.inheritable_property_signature_filter): New delegate
25059         to find properties and indexers.
25060
25061         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25062         argument and improved error reporting.
25063
25064         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25065         EmptyReadOnlyParameters and made it a property.
25066
25067         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25068         version of this method which takes a `PropertyInfo indexer'.
25069         (TypeManager.RegisterIndexer): New method.
25070
25071         * class.cs: Added myself as author of this file :-)
25072
25073 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25074
25075         * class.cs: fixed compilation on windoze.
25076
25077 2002-08-03  Martin Baulig  <martin@gnome.org>
25078
25079         * interface.cs (Interface.GetInterfaceBases): Check whether all
25080         base interfaces are at least as accessible than the current one.
25081
25082         * class.cs (TypeContainer.GetClassBases): Check whether base types
25083         are at least as accessible than the current type.
25084         (TypeContainer.AsAccessible): Implemented and made non-static.
25085         (MemberBase.CheckParameters): Report errors if the accessibility
25086         checks fail.
25087
25088         * delegate.cs (Delegate.Delegate): The default visibility is
25089         internal for top-level types and private for nested types.
25090         (Delegate.Define): Report errors if the accessibility checks fail.
25091
25092         * enum.cs (Enum.Enum): The default visibility is internal for
25093         top-level types and private for nested types.
25094         (Enum.DefineType): Compute the correct visibility.
25095
25096         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25097         function which takes a `bool is_toplevel' instead of a TypeContainer.
25098
25099         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25100         builtin type.
25101
25102 2002-08-02  Martin Baulig  <martin@gnome.org>
25103
25104         * expression.cs (LocalVariableReferenc): Added constructor which
25105         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25106         (LocalVariableReference.IsReadOnly): New property.
25107         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25108         variable is readonly, use our own readonly flag to do this; you can
25109         use the new constructor to get a writable reference to a read-only
25110         variable.
25111
25112         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25113         reference to the local variable.
25114
25115 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25116
25117         * rootcontext.cs (ResolveCore): Also include System.Exception
25118
25119         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25120         we reach an EmptyStatement.
25121
25122         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25123         is also fine.
25124
25125         * expression.cs (Binary.ResolveOperator): Check error result in
25126         two places.
25127
25128         use brtrue/brfalse directly and avoid compares to null.
25129
25130 2002-08-02  Martin Baulig  <martin@gnome.org>
25131
25132         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25133         Fixes bug #28407, added test-155.cs.
25134
25135 2002-08-01  Martin Baulig  <martin@gnome.org>
25136
25137         * class.cs (Event.EmitDefaultMethod): Make this work with static
25138         events.  Fixes #28311, added verify-3.cs.
25139
25140 2002-08-01  Martin Baulig  <martin@gnome.org>
25141
25142         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25143         `is_disposable' fields.
25144         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25145         `hm.is_disposable' if we're using the collection pattern.
25146         (Foreach.EmitCollectionForeach): Use the correct type for the
25147         enumerator's local variable, only emit the try/finally block if
25148         necessary (fixes #27713).
25149
25150 2002-08-01  Martin Baulig  <martin@gnome.org>
25151
25152         * ecore.cs (Expression.report118): Renamed to Error118 and made
25153         it public static.
25154
25155         * statement.cs (Throw.Resolve): Check whether the expression is of
25156         the correct type (CS0118) and whether the type derives from
25157         System.Exception (CS0155).
25158         (Catch.Resolve): New method.  Do the type lookup here and check
25159         whether it derives from System.Exception (CS0155).
25160         (Catch.CatchType, Catch.IsGeneral): New public properties.
25161
25162         * typemanager.cs (TypeManager.exception_type): Added.
25163
25164 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25165
25166         * driver.cs: Updated About function.
25167
25168 2002-07-31  Martin Baulig  <martin@gnome.org>
25169
25170         Implemented Control Flow Analysis.
25171
25172         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25173         (EmitContext.CurrentBranching): Added.
25174         (EmitContext.StartFlowBranching): Added.
25175         (EmitContext.EndFlowBranching): Added.
25176         (EmitContext.KillFlowBranching): Added.
25177         (EmitContext.IsVariableAssigned): Added.
25178         (EmitContext.SetVariableAssigned): Added.
25179         (EmitContext.IsParameterAssigned): Added.
25180         (EmitContext.SetParameterAssigned): Added.
25181         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25182         Added control flow analysis stuff here.
25183
25184         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25185         resolve the expression as lvalue.
25186         (LocalVariableReference.DoResolve): Check whether the variable has
25187         already been assigned.
25188         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25189         the parameter as assigned here.
25190         (ParameterReference.DoResolve): Check whether the parameter has already
25191         been assigned.
25192         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25193         expression as lvalue.
25194
25195         * statement.cs (FlowBranching): New class for the flow analysis code.
25196         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25197         (LabeledStatement.IsDefined): New public property.
25198         (LabeledStatement.AddUsageVector): New public method to tell flow
25199         analyis that the label may be reached via a forward jump.
25200         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25201         flow analysis.
25202         (VariableInfo.Number): New public field.  This is used by flow analysis
25203         to number all locals of a block.
25204         (Block.CountVariables): New public property.  This is the number of
25205         local variables in this block (including the locals from all parent
25206         blocks).
25207         (Block.EmitMeta): Number all the variables.
25208
25209         * statement.cs: Added flow analysis support to all classes.
25210
25211 2002-07-31  Martin Baulig  <martin@gnome.org>
25212
25213         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25214         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25215         then use this argument.
25216
25217         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25218
25219         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25220         use this to specify /define options.
25221
25222 2002-07-29  Martin Baulig  <martin@gnome.org>
25223
25224         * statement.cs (Fixed): Moved all code that does variable lookups
25225         and resolvings from Emit to Resolve.
25226
25227         * statement.cs (For): Moved all code that does variable lookups
25228         and resolvings from Emit to Resolve.
25229
25230         * statement.cs (Using): Moved all code that does variable lookups
25231         and resolvings from Emit to Resolve.
25232
25233 2002-07-29  Martin Baulig  <martin@gnome.org>
25234
25235         * attribute.cs (Attribute.Resolve): Explicitly catch a
25236         System.NullReferenceException when creating the
25237         CustromAttributeBuilder and report a different warning message.
25238
25239 2002-07-29  Martin Baulig  <martin@gnome.org>
25240
25241         * support.cs (ParameterData.ParameterName): Added method to
25242         get the name of a parameter.
25243
25244         * typemanager.cs (TypeManager.IsValueType): New public method.
25245
25246 2002-07-29  Martin Baulig  <martin@gnome.org>
25247
25248         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25249         is a flag which specifies that it's either ref or out.
25250         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25251         the out parameter to `out Parameter.Modifier mod', also set the
25252         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25253
25254         * support.cs (InternalParameters.ParameterModifier): Distinguish
25255         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25256         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25257
25258         * expression.cs (Argument.GetParameterModifier): Distinguish
25259         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25260         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25261
25262 2002-07-29  Martin Baulig  <martin@gnome.org>
25263
25264         * expression.cs (ParameterReference.ParameterReference): Added
25265         `Location loc' argument to the constructor.
25266
25267         * cs-parser.jay: Pass location to ParameterReference.
25268
25269 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25270
25271         * statement.cs (Try): Initialize the location.
25272
25273         * cs-parser.jay: pass location to Try.
25274
25275         * expression.cs (Unary.Reduce): Change the prototype to return
25276         whether a constant fold could be performed or not.  The result is
25277         returned in an out parameters.  In the case of Indirection and
25278         AddressOf, we want to perform the full tests.
25279
25280 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25281
25282         * statement.cs (Statement.Emit): Flag dead code.
25283
25284 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25285
25286         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25287
25288 2002-07-27  Martin Baulig  <martin@gnome.org>
25289
25290         * class.cs (MethodData.Define): Put back call to
25291         TypeManager.AddMethod(), accidentally commented this out.
25292
25293         * report.cs (Debug): New public method to print debugging information,
25294         this is `[Conditional ("DEBUG")]'.
25295
25296 2002-07-26  Martin Baulig  <martin@gnome.org>
25297
25298         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25299         (switch_statement): Push the current_block to the switch_stack and
25300         pop it again when we're done with the switch.
25301         (switch_section): The new block is a child of the current_block.
25302         Fixes bug #24007, added test-152.cs.
25303
25304 2002-07-27  Martin Baulig  <martin@gnome.org>
25305
25306         * expression.cs (Invocation.EmitArguments): When calling a varargs
25307         function with only its fixed arguments, we need to pass an empty
25308         array.
25309
25310 2002-07-27  Martin Baulig  <martin@gnome.org>
25311
25312         Mono 0.13 has been released.
25313
25314 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25315
25316         * driver.cs: Rename --resource to --linkres, because that is what
25317         we do currently, we dont support --resource yet.
25318
25319         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25320
25321 2002-07-25  Martin Baulig  <martin@gnome.org>
25322
25323         * class.cs (MethodData): New public class.  This is a `method builder'
25324         class for a method or one accessor of a Property/Indexer/Event.
25325         (MethodData.GetMethodFlags): Moved here from MemberBase.
25326         (MethodData.ApplyAttributes): Likewise.
25327         (MethodData.ApplyObsoleteAttribute): Likewise.
25328         (MethodData.ApplyConditionalAttribute): Likewise.
25329         (MethodData.ApplyDllImportAttribute): Likewise.
25330         (MethodData.CheckAbstractAndExternal): Likewise.
25331         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25332         (MethodData.Emit): Formerly known as Method.Emit().
25333         (MemberBase): Moved everything which was specific to a single
25334         accessor/method to MethodData.
25335         (Method): Create a new MethodData and call Define() and Emit() on it.
25336         (Property, Indexer, Event): Create a new MethodData objects for each
25337         accessor and call Define() and Emit() on them.
25338
25339 2002-07-25  Martin Baulig  <martin@gnome.org>
25340
25341         Made MethodCore derive from MemberBase to reuse the code from there.
25342         MemberBase now also checks for attributes.
25343
25344         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25345         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25346         as virtual.
25347         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25348         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25349         (MemberBase.ApplyAttributes): New virtual method; applies the
25350         attributes to a method or accessor.
25351         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25352         (MemberBase.ApplyConditionalAttribute): Likewise.
25353         (MemberBase.ApplyDllImportAttribute): Likewise.
25354         (MemberBase.CheckAbstractAndExternal): Likewise.
25355         (MethodCore.ParameterTypes): This is now a property instead of a
25356         method, it's initialized from DoDefineParameters().
25357         (MethodCore.ParameterInfo): Removed the set accessor.
25358         (MethodCore.DoDefineParameters): New protected virtual method to
25359         initialize ParameterTypes and ParameterInfo.
25360         (Method.GetReturnType): We can now simply return the MemberType.
25361         (Method.GetMethodFlags): Override the MemberBase version and add
25362         the conditional flags.
25363         (Method.CheckBase): Moved some code from Define() here, call
25364         DoDefineParameters() here.
25365         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25366         here to avoid some larger code duplication.
25367         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25368         ensure that abstract and external accessors don't declare a body.
25369
25370         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25371         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25372         lookup in the attribute's parent classes, so we need to abort as soon
25373         as we found the first match.
25374         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25375         the attribute has no arguments.
25376
25377         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25378         of a Method.
25379
25380 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25381
25382         * cs-parser.jay: reverted previous patch.
25383
25384 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25385
25386         * cs-parser.jay: fixed bug #22119.
25387
25388 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25389
25390         * attribute.cs: fixed compilation. The error was:
25391         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25392         be assigned to before control leaves the current method."
25393         [FIXME:  Filed as bug #28186: MCS must report this error.]
25394
25395 2002-07-25  Martin Baulig  <martin@gnome.org>
25396
25397         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25398         method to pull the condition name ouf of a Conditional attribute.
25399         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25400         the obsolete message and error flag out of an Obsolete attribute.
25401
25402         * class.cs (Method.GetMethodFlags): New public method to get the
25403         TypeManager.MethodFlags for this method.
25404         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25405         private methods.
25406         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25407         if we're overriding a virtual function, set the new private variable
25408         `parent_method'; call the new TypeManager.AddMethod().
25409
25410         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25411         the MethodBuilder and the Method in a PtrHashtable.
25412         (TypeManager.builder_to_method): Added for this purpose.
25413         (TypeManager.MethodFlags): Added IsObsoleteError.
25414         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25415         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25416         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25417         the message from the attribute.
25418
25419 2002-07-24  Martin Baulig  <martin@gnome.org>
25420
25421         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25422         preprocessor directives, ensure that the argument to #define/#undef is
25423         exactly one identifier and that it's actually an identifier.
25424
25425         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25426         did not work ....
25427
25428 2002-07-24  Martin Baulig  <martin@gnome.org>
25429
25430         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25431         initialize it to TypeManager.object_type in the constructor.
25432         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25433         of the `hm.get_current' method if we're using the collection pattern.
25434         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25435         for the explicit conversion to make it work when we're using the collection
25436         pattern and the `Current' property has a different return type than `object'.
25437         Fixes #27713.
25438
25439 2002-07-24  Martin Baulig  <martin@gnome.org>
25440
25441         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25442         does not match, but don't report any errors.  This method is called in
25443         order for all methods in a MethodGroupExpr until a matching method is
25444         found, so we don't want to bail out if the first method doesn't match.
25445         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25446         matches, report the 123.  Fixes #28070.
25447
25448 2002-07-24  Martin Baulig  <martin@gnome.org>
25449
25450         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25451         TypeManager.TypeToCoreType() to the top of the method so the
25452         following equality checks will work.  Fixes #28107.
25453
25454 2002-07-24  Martin Baulig  <martin@gnome.org>
25455
25456         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25457         operand is of type uint, and the other operand is of type sbyte,
25458         short or int, the operands are converted to type long." -
25459         Actually do what this comment already told us.  Fixes bug #28106,
25460         added test-150.cs.
25461
25462 2002-07-24  Martin Baulig  <martin@gnome.org>
25463
25464         * class.cs (MethodBase): New abstract class.  This is now a base
25465         class for Property, Indexer and Event to avoid some code duplication
25466         in their Define() and DefineMethods() methods.
25467         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25468         generic methods for Define() and DefineMethods().
25469         (FieldBase): Derive from MemberBase, not MemberCore.
25470         (Property): Derive from MemberBase, not MemberCore.
25471         (Property.DefineMethod): Moved all the code from this method to the
25472         new MethodBase.DefineAccessor(), just call it with appropriate
25473         argumetnts.
25474         (Property.Define): Call the new Property.DoDefine(), this does some
25475         sanity checks and we don't need to duplicate the code everywhere.
25476         (Event): Derive from MemberBase, not MemberCore.
25477         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25478         accessors, this will also make them work with interface events.
25479         (Indexer): Derive from MemberBase, not MemberCore.
25480         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25481         (Indexer.Define): Use the new MethodBase functions.
25482
25483         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25484         argument to the constructor.
25485         (Interface.FindMembers): Added support for interface events.
25486         (Interface.PopluateEvent): Implemented.
25487
25488         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25489
25490 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25491
25492         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25493         but this is required to check for a method name being the same as
25494         the containing class.  
25495
25496         Handle this now.
25497
25498 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25499
25500         * interface.cs: initialize variable.
25501
25502 2002-07-23  Martin Baulig  <martin@gnome.org>
25503
25504         Implemented the IndexerName attribute in interfaces.
25505
25506         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25507         name if this is an explicit interface implementation.
25508         (Indexer.InterfaceIndexerName): New public variable.  If we're
25509         implementing an interface indexer, this is the IndexerName in that
25510         interface.  Otherwise, it's the IndexerName.
25511         (Indexer.DefineMethod): If we're implementing interface indexer,
25512         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25513         and Pending.ImplementIndexer methods.
25514         (Indexer.Define): Also define the PropertyBuilder if we're
25515         implementing an interface indexer and this is neither an explicit
25516         interface implementation nor do the IndexerName match the one in
25517         the interface.
25518
25519         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25520         If a method is defined here, then we always need to create a proxy
25521         for it.  This is used when implementing interface indexers.
25522         (Pending.IsInterfaceIndexer): New public method.
25523         (Pending.ImplementIndexer): New public method.
25524         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25525         This is used when implementing interface indexers to define a proxy
25526         if necessary.
25527         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25528         define a proxy if necessary.
25529
25530         * interface.cs (Interface.IndexerName): New public variable.
25531         (Interface.PopulateIndexer): Set the IndexerName.
25532         (Interface.DefineIndexers): New private method.  Populate all the
25533         indexers and make sure their IndexerNames match.
25534
25535         * typemanager.cs (IndexerPropertyName): Added support for interface
25536         indexers.
25537
25538 2002-07-22  Martin Baulig  <martin@gnome.org>
25539
25540         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25541         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25542         ret if HasReturnLabel.
25543         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25544         variables.
25545
25546         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25547         and set the ec.LoopBeginTryCatchLevel.
25548         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25549         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25550         the current ec.TryCatchLevel, the branch goes out of an exception
25551         block.  In this case, we need to use Leave and not Br.
25552
25553 2002-07-22  Martin Baulig  <martin@gnome.org>
25554
25555         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25556         block unless the block does not always return or it is contained in
25557         another try { ... } catch { ... } block.  Fixes bug #26506.
25558         Added verify-1.cs to the test suite.
25559
25560 2002-07-22  Martin Baulig  <martin@gnome.org>
25561
25562         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25563         then we do not always return.  Fixes bug #24985.
25564
25565 2002-07-22  Martin Baulig  <martin@gnome.org>
25566
25567         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25568         lookup on a per-class level; ie. walk up the class hierarchy until we
25569         found at least one applicable method, then choose the best among them.
25570         Fixes bug #24463 and test-29.cs.
25571
25572 2002-07-22  Martin Baulig  <martin@gnome.org>
25573
25574         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25575         return types of the methods.  The return type is not part of the
25576         signature and we must not check it to make the `new' modifier work.
25577         Fixes bug #27999, also added test-147.cs.
25578         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25579
25580         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25581         on the method's return type.
25582
25583 2002-07-21  Martin Baulig  <martin@gnome.org>
25584
25585         * assign.cs: Make this work if the rightmost source is a constant and
25586         we need to do an implicit type conversion.  Also adding a few more tests
25587         to test-38.cs which should have caught this.
25588
25589         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25590         target in the makefile for this.  The makefile.gnu is primarily intended
25591         for end-users who don't want to debug the compiler.
25592
25593 2002-07-21  Martin Baulig  <martin@gnome.org>
25594
25595         * assign.cs: Improved the Assign class so it can now handle embedded
25596         assignments (X = Y = Z = something).  As a side-effect this'll now also
25597         consume less local variables.  test-38.cs now passes with MCS, added
25598         a few new test cases to that test.
25599
25600 2002-07-20  Martin Baulig  <martin@gnome.org>
25601
25602         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25603         instructions.  Fixes bug #27977, also added test-146.cs.
25604
25605 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25606
25607         * cs-tokenizer.cs: fixed getHex ().
25608
25609 2002-07-19  Martin Baulig  <martin@gnome.org>
25610
25611         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25612         not Type.GetType() to lookup the array type.  This is needed when
25613         we're constructing an array of a user-defined type.
25614         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25615         single-dimensional arrays, but also for single-dimensial arrays of
25616         type decimal.
25617
25618 2002-07-19  Martin Baulig  <martin@gnome.org>
25619
25620         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25621         this function is called, it's not allowed to share LocalBuilders
25622         among ILGenerators.
25623
25624 2002-07-19  Martin Baulig  <martin@gnome.org>
25625
25626         * expression.cs (Argument.Resolve): Report an error 118 when trying
25627         to pass a type as argument.
25628
25629 2002-07-18  Martin Baulig  <martin@gnome.org>
25630
25631         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25632         Conv_R_Un for the signed `long' type.
25633
25634 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25635
25636         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25637         `expr' for the temporary result, as that will fail if we do
25638         multiple resolves on the same expression.
25639
25640 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25641
25642         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25643         ec.TypeContainer for looking up aliases. 
25644
25645         * class.cs (TypeContainer): Remove LookupAlias from here.
25646
25647         * decl.cs (DeclSpace); Move here.
25648
25649 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25650
25651         * class.cs (FindMembers): Only call filter if the constructor
25652         bulider is not null.
25653
25654         Also handle delegates in `NestedTypes' now.  Now we will perform
25655         type lookups using the standard resolution process.  This also
25656         fixes a bug.
25657
25658         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25659         This uses Expressions (the limited kind that can be parsed by the
25660         tree) instead of strings.
25661
25662         * expression.cs (ComposedCast.ToString): Implement, used to flag
25663         errors since now we have to render expressions.
25664
25665         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25666         FormArrayType. 
25667
25668         * ecore.cs (SimpleName.ToString): ditto.
25669
25670         * cs-parser.jay: Instead of using strings to assemble types, use
25671         Expressions to assemble the type (using SimpleName, ComposedCast,
25672         MemberAccess).  This should fix the type lookups in declarations,
25673         because we were using a different code path for this.
25674
25675         * statement.cs (Block.Resolve): Continue processing statements
25676         even when there is an error.
25677
25678 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25679
25680         * class.cs (Event.Define): Also remove the `remove' method from
25681         the list of pending items.
25682
25683         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25684         generate more compact code. 
25685
25686 2002-07-17  Martin Baulig  <martin@gnome.org>
25687
25688         * const.cs (Const.LookupConstantValue): Add support for constant
25689         `unchecked' and `checked' expressions.
25690         Also adding test case test-140.cs for this.
25691
25692 2002-07-17  Martin Baulig  <martin@gnome.org>
25693
25694         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25695         check whether mi.ReturnType implements the IEnumerator interface; the
25696         `==' and the IsAssignableFrom() will fail in this situation.
25697
25698 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25699
25700         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25701         here too.
25702
25703 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25704
25705         * expression.cs: fixed bug #27811.
25706
25707 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25708
25709         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25710         Molaro: when we are a ref, the value already contains a pointer
25711         value, do not take the address of it.
25712
25713 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25714         * removed mb-parser.jay and mb-tokenizer.cs
25715
25716 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25717
25718         * expression.cs: check against the building corlib void type.
25719
25720 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25721
25722         * ecore.cs: fix for valuetype static readonly fields: when 
25723         initializing them, we need their address, not the address of a copy.
25724
25725 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25726
25727         * typemanager.cs: register also enum_type in corlib.
25728
25729 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25730
25731         * class.cs: allow calling this (but not base) initializers in structs.
25732
25733 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25734
25735         * ecore.cs: make sure we compare against the building base types
25736         in GetTypeSize ().
25737
25738 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25739
25740         * typemanager.cs: fix TypeToCoreType() to handle void and object
25741         (corlib gets no more typerefs after this change).
25742
25743 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25744
25745         * expression.cs (ArrayCreation.EmitArrayArguments): use
25746         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25747
25748         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25749         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25750         array indexes, the runtime actually forbids them.
25751
25752         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25753         for array arguments here.
25754
25755         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25756         instead of the default for ValueTypes.
25757
25758         (New.DoEmit): Use IsValueType instead of
25759         IsSubclassOf (value_type)
25760         (New.DoResolve): ditto.
25761         (Invocation.EmitCall): ditto.
25762
25763         * assign.cs (Assign): ditto.
25764
25765         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25766         Statements *are* currently doing part of their resolution during
25767         Emit.  
25768
25769         Expressions do always resolve during resolve, but statements are
25770         only required to propagate resolution to their children.
25771
25772 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25773
25774         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25775
25776         (LoadAssembly): Do not add the dll if it is already specified
25777
25778         (MainDriver): Add the System directory to the link path at the end,
25779         after all the other -L arguments. 
25780
25781         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25782         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25783         ldelem.u1) and using the opposite for sbytes.
25784
25785         This fixes Digger, and we can finally run it.
25786
25787         * driver.cs (UnixParseOption): Move the option parsing here.  
25788         (CSCParseOption): Implement CSC-like parsing of options.
25789
25790         We now support both modes of operation, the old Unix way, and the
25791         new CSC-like way.  This should help those who wanted to make cross
25792         platform makefiles.
25793
25794         The only thing broken is that /r:, /reference: and /lib: are not
25795         implemented, because I want to make those have the same semantics
25796         as the CSC compiler has, and kill once and for all the confussion
25797         around this.   Will be doing this tomorrow.
25798
25799         * statement.cs (Unsafe.Resolve): The state is checked during
25800         resolve, not emit, so we have to set the flags for IsUnsfe here.
25801
25802 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25803
25804         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25805         not catch the Error_ObjectRefRequired in SimpleName (as it is
25806         possible to have a class/instance variable name that later gets
25807         deambiguated), we have to check this here.      
25808
25809 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25810
25811         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25812         make static and put into Expression.
25813
25814         (Event.Define): Register the private field of the event with the 
25815         TypeManager so that GetFieldFromEvent can get at it.
25816
25817         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25818         keep track of the private field associated with an event which
25819         has no accessors.
25820
25821         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25822         private field.
25823
25824         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25825
25826 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25827
25828         * expression.cs (Binary.EmitBranchable): this routine emits the
25829         Binary expression in a branchable context.  This basically means:
25830         we need to branch somewhere, not just get the value on the stack.
25831
25832         This works together with Statement.EmitBoolExpression.
25833
25834         * statement.cs (Statement.EmitBoolExpression): Use
25835         EmitBranchable. 
25836
25837 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25838
25839         * statement.cs (For): Reduce the number of jumps in loops.
25840
25841         (For): Implement loop inversion for the For statement.
25842
25843         (Break): We can be breaking out of a Try/Catch controlled section
25844         (foreach might have an implicit try/catch clause), so we need to
25845         use Leave instead of Br.
25846
25847         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25848         now).  If the instace expression supports IMemoryLocation, we use
25849         the AddressOf method from the IMemoryLocation to extract the
25850         address instead of emitting the instance.
25851
25852         This showed up with `This', as we were emitting the instance
25853         always (Emit) instead of the Address of This.  Particularly
25854         interesting when This is a value type, as we dont want the Emit
25855         effect (which was to load the object).
25856
25857 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25858
25859         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25860
25861         * statement.cs (Checked): Set the CheckedState during the resolve
25862         process too, as the ConvCast operations track the checked state on
25863         the resolve process, and not emit.
25864
25865         * cs-parser.jay (namespace_member_declaration): Flag that we have
25866         found a declaration when we do.  This is used to flag error 1529
25867
25868         * driver.cs: Report ok when we display the help only.
25869
25870 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25871
25872         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25873
25874 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25875
25876         * cs-tokenizer.cs (define): We also have to track locally the
25877         defines.  AllDefines is just used for the Conditional Attribute,
25878         but we also need the local defines for the current source code. 
25879
25880 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25881
25882         * statement.cs (While, For, Do): These loops can exit through a
25883         Break statement, use this information to tell whether the
25884         statement is the last piece of code.
25885
25886         (Break): Flag that we break.
25887
25888         * codegen.cs (EmitContexts): New `Breaks' state variable.
25889
25890 2002-07-03  Martin Baulig  <martin@gnome.org>
25891
25892         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25893         modifiers in method declarations in structs.  Otherwise, you won't
25894         be able to override things like Object.Equals().
25895
25896 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25897
25898         * class.cs (Method, Property, Indexer): Do not allow the public
25899         modifier to be used in explicit interface implementations.
25900
25901         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25902         override modifiers in method declarations in structs
25903
25904 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25905
25906         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25907         integer or real overflow, report an error
25908
25909 2002-07-02  Martin Baulig  <martin@gnome.org>
25910
25911         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25912         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25913         to tell the runtime about our newly created System.Object and
25914         System.ValueType types.
25915
25916 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25917
25918         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25919         struct instead of Ldarg/Starg.
25920
25921 2002-07-02  Martin Baulig  <martin@gnome.org>
25922
25923         * expression.cs (Indirection.Indirection): Call
25924         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25925
25926 2002-07-02  Martin Baulig  <martin@gnome.org>
25927
25928         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25929         ValueType, call TypeManager.TypeToCoreType() on it.
25930         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25931         the OpCodes.Newarr argument.
25932
25933 2002-07-02  Martin Baulig  <martin@gnome.org>
25934
25935         * expression.cs (Invocation.EmitCall): When compiling corlib,
25936         replace all calls to the system's System.Array type to calls to
25937         the newly created one.
25938
25939         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25940         System.Array methods.
25941         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25942         from the system's System.Array type which must be replaced.
25943
25944 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25945
25946         * typemanager.cs: load unverifiable_code_ctor so we can build
25947         corlib using the correct type. Avoid using GetTypeCode() with
25948         TypeBuilders.
25949         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25950         TypeManager.object_type to allow building corlib.
25951
25952 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25953
25954         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25955
25956 2002-07-01  Martin Baulig  <martin@gnome.org>
25957
25958         * class.cs: Make the last change actually work, we need to check
25959         whether `ifaces != null' to avoid a crash.
25960
25961 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25962
25963         * class.cs: when we build structs without fields that implement
25964         interfaces, we need to add the interfaces separately, since there is
25965         no API to both set the size and add the interfaces at type creation
25966         time.
25967
25968 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25969
25970         * expression.cs: the dimension arguments to the array constructors
25971         need to be converted if they are a long.
25972
25973 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25974
25975         * class.cs: don't emit ldarg.0 if there is no parent constructor
25976         (fixes showstopper for corlib).
25977
25978 2002-06-29  Martin Baulig  <martin@gnome.org>
25979
25980         MCS now compiles corlib on GNU/Linux :-)
25981
25982         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25983         ie. check for MethodImplOptions.InternalCall.
25984
25985         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25986         and TypeManager.attribute_type are null, so we must explicitly check
25987         whether parent is not null to find out whether it's an attribute type.
25988         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25989         and SetBuilder, not only if the property is neither abstract nor external.
25990         This is necessary to set the MethodImplOptions on the accessor methods.
25991         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25992         SetBuilder, see Property.Emit().
25993
25994         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25995         populate "System.Object", "System.ValueType" and "System.Attribute" since
25996         they've already been populated from BootCorlib_PopulateCoreTypes().
25997
25998 2002-06-29  Martin Baulig  <martin@gnome.org>
25999
26000         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26001         is the NullLiteral, we also need to make sure that target_type is not
26002         an enum type.   
26003
26004 2002-06-29  Martin Baulig  <martin@gnome.org>
26005
26006         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26007         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26008         before calling BootstrapCorlib_ResolveDelegate ().
26009
26010 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26011
26012         * statement.cs: fixed build-breaker. All tests passed ok.
26013
26014 2002-06-27  Martin Baulig  <martin@gnome.org>
26015
26016         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26017         for System.Decimal when compiling corlib.
26018
26019 2002-06-27  Martin Baulig  <martin@gnome.org>
26020
26021         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26022         switch blocks which contain nothing but a default clause.
26023
26024 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26025
26026        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26027
26028 2002-06-27  Martin Baulig  <martin@gnome.org>
26029
26030         * ecore.cs (PropertyExpr.PropertyExpr): Call
26031         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26032
26033         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26034         is already a TypeBuilder.
26035
26036 2002-06-27  Martin Baulig  <martin@gnome.org>
26037
26038         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26039         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26040         the "from an array-type to System.Array" case.  This makes it work
26041         when compiling corlib.
26042
26043 2002-06-27  Martin Baulig  <martin@gnome.org>
26044
26045         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26046         non-static PropertyExpr, set its InstanceExpression.  This makes
26047         the `ICollection.Count' property work in System/Array.cs.
26048
26049 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26050
26051         * driver.cs: Made error handling more consistent.  Errors now
26052         tracked by Report class, so many methods which used to return int
26053         now return void.  Main() now prints success/failure and 
26054         errors/warnings message.
26055
26056         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26057         the magic number return values (123 and 124).  Now, if the
26058         expected error occurs, the compiler exits with success (exit value
26059         0).  If the compilation completes without seeing that particular
26060         error, the compiler exits with failure (exit value 1).  The
26061         makefile in mcs/errors has been changed to handle the new behaviour.
26062
26063         * report.cs: Made 'expected error' number a property and renamed
26064         it from 'Probe' to 'ExpectedError'.
26065
26066         * genericparser.cs: Removed error handling support, since it is
26067         now all done by Report class.
26068
26069         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26070         class, so parse() no longer returns an int.
26071
26072         * namespace.cs: Use Report.Error instead of GenericParser.error
26073
26074 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26075
26076         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26077         TypeContainer.AddOperator): At the front of the list put the
26078         explicit implementations, so they get resolved/defined first. 
26079
26080 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26081
26082         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26083         interface type is implemented by this TypeContainer.  Used during
26084         explicit interface implementation.
26085
26086         (Property.Define, Indexer.Define, Method.Define): Validate that
26087         the given interface in the explicit implementation is one of the
26088         base classes for the containing type.
26089
26090         Also if we are explicitly implementing an interface, but there is
26091         no match in the pending implementation table, report an error.
26092
26093         (Property.Define): Only define the property if we are
26094         not explicitly implementing a property from an interface.  Use the
26095         correct name also for those properties (the same CSC uses,
26096         although that is really not needed).
26097
26098         (Property.Emit): Do not emit attributes for explicitly implemented
26099         properties, as there is no TypeBuilder.
26100
26101         (Indexer.Emit): ditto.
26102
26103         Hiding then means that we do not really *implement* a pending
26104         implementation, which makes code fail.
26105
26106 2002-06-22  Martin Baulig  <martin@gnome.org>
26107
26108         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26109         the return value of Object.GetType().  [FIXME: we need to do this whenever
26110         we get a type back from the reflection library].
26111
26112 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26113
26114         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26115
26116 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26117
26118         * attribute.cs: Return null if we can not look up the type.
26119
26120         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26121         the interface types found.
26122
26123         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26124         interface types found.
26125
26126         * typemanager.cs (GetInterfaces): Make this routine returns alll
26127         the interfaces and work around the lame differences between
26128         System.Type and System.Reflection.Emit.TypeBuilder in the results
26129         result for GetInterfaces.
26130
26131         (ExpandInterfaces): Given an array of interface types, expand and
26132         eliminate repeated ocurrences of an interface.  This expands in
26133         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26134         be IA, IB, IC.
26135
26136 2002-06-21  Martin Baulig  <martin@gnome.org>
26137
26138         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26139         on System.Enum.
26140
26141 2002-06-21  Martin Baulig  <martin@gnome.org>
26142
26143         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26144         and called with one of the core types, return the corresponding typebuilder for
26145         that type.
26146
26147         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26148         element type.
26149
26150 2002-06-21  Martin Baulig  <martin@gnome.org>
26151
26152         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26153         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26154         (Expression.ConvertReferenceExplicit): Likewise.
26155
26156         * expression.cs (ElementAccess.DoResolve): Likewise.
26157         (ElementAccess.DoResolveLValue): Likewise.
26158
26159 2002-06-10  Martin Baulig  <martin@gnome.org>
26160
26161         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26162         add the "value" parameter to the parameter list.
26163
26164         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26165         to our caller.
26166
26167 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26168
26169         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26170         the argument to an int, uint, long or ulong, per the spec.  Also
26171         catch negative constants in array creation.
26172
26173 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26174
26175         * class.cs: do not allow the same interface to appear twice in
26176         the definition list.
26177
26178 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26179
26180         * ecore.cs: don't use ldlen with System.Array.
26181
26182 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26183
26184         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26185
26186 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26187
26188         * modifiers.cs: produce correct field attributes for protected
26189         internal. Easy fix so miguel can work on ther harder stuff:-)
26190
26191 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26192
26193         * pending.cs: New file.  Move the code from class.cs here.
26194         Support clearning the pending flag for all methods (when not doing
26195         explicit interface implementation).
26196
26197 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26198
26199         * rootcontext.cs: added a couple more types needed to bootstrap.
26200
26201 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26202
26203         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26204         constructor in the type, instead of any constructor in the type
26205         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26206         a bug in the Mono runtime when applying the params attribute). 
26207
26208 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26209         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26210
26211 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26212
26213         * expression.cs (Unary.ResolveOperator): Use TypeManager
26214         to resolve the type.
26215
26216 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26217
26218         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26219         attached.
26220
26221         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26222         with each member too.
26223
26224         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26225         field builders too - this takes care of the enum member case.
26226
26227 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26228
26229         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26230         address-of operator on both value types and pointers.
26231
26232 2002-06-10  Martin Baulig  <martin@gnome.org>
26233
26234         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26235         PropertyBuilder to the `property_builders' list.
26236
26237         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26238         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26239         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26240         find any indexers which are inherited from an interface.
26241
26242 2002-06-09  Martin Baulig  <martin@gnome.org>
26243
26244         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26245         the same type as the constant if necessary.  There's also a test-130.cs
26246         for this.
26247
26248         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26249
26250         * typemanager.cs (TypeManager.ChangeType): Previously known as
26251         Enum.ChangeEnumType().
26252
26253 2002-06-09  Martin Baulig  <martin@gnome.org>
26254
26255         * expression.cs (Cast.TryReduce): Added support for consts.
26256
26257 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26258
26259         * class.cs (Accessor): Hold attributes information so we can pass
26260         it along.
26261
26262         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26263         Modify to pass in attributes attached to the methods.
26264
26265         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26266
26267         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26268         to handle the Accessor kind :-)
26269
26270         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26271
26272 2002-06-08  Martin Baulig  <martin@gnome.org>
26273
26274         * expression.cs (Unary.TryReduceNegative): Added support for
26275         ULongConstants.
26276
26277 2002-06-08  Martin Baulig  <martin@gnome.org>
26278
26279         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26280         name can't be found in the `defined_names' - the caller will do a
26281         MemberLookup in this case and thus find methods in System.Enum
26282         such as Enum.IsDefined().
26283
26284 2002-06-08  Martin Baulig  <martin@gnome.org>
26285
26286         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26287         Convert.ChangeType() which works with TypeBuilder created types.
26288         (Enum.LookupEnumValue, Enum.Define): Use it here.
26289
26290         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26291         `TypeBuilder.BaseType != null' check.
26292         (TypeContainer.FindMembers): Only lookup parent members if we
26293         actually have a parent.
26294         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26295         (ConstructorInitializer.Resolve): Likewise.
26296
26297         * interface.cs (Interface.FindMembers): Added
26298         `TypeBuilder.BaseType != null' check.
26299
26300         * rootcontext.cs (RootContext.ResolveCore): Added
26301         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26302         classes_second_stage.
26303
26304         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26305         debug_type and trace_type when compiling with --nostdlib.       
26306
26307 2002-06-07  Martin Baulig  <martin@gnome.org>
26308
26309         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26310         (AddField): Set it to true when adding a non-static field.
26311         (DefineType): Use `have_nonstatic_fields' to find out whether we
26312         have non-static fields, not `Fields != null'.
26313
26314 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26315
26316         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26317         dereferencing a null on the static-field code path)
26318
26319 2002-05-30  Martin Baulig  <martin@gnome.org>
26320
26321         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26322         to take command line arguments.  Use reflection to call the new
26323         custom `Initialize' function on the symbol writer and pass it the
26324         command line arguments.
26325
26326         * driver.cs (--debug-args): New command line argument to pass command
26327         line arguments to the symbol writer.
26328
26329 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26330
26331         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26332         the target type for indexers and properties.  Thanks to Joe for
26333         catching this.
26334
26335 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26336
26337         * typemanager.cs (MethodFlags): returns the method flags
26338         (Obsolete/ShouldIgnore) that control warning emission and whether
26339         the invocation should be made, or ignored. 
26340
26341         * expression.cs (Invocation.Emit): Remove previous hack, we should
26342         not do this on matching a base type, we should do this based on an attribute
26343
26344         Only emit calls to System.Diagnostics.Debug and
26345         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26346         on the command line.
26347
26348         * rootcontext.cs: Global settings for tracing and debugging.
26349
26350         * cs-tokenizer.cs (define): New utility function to track
26351         defines.   Set the global settings for TRACE and DEBUG if found.
26352
26353 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26354
26355         * interface.cs (Populate*): Pass in the TypeContainer as well as
26356         the DeclSpace as parameters so that we can create EmitContexts and
26357         then use that to apply attributes etc.
26358
26359         (PopulateMethod, PopulateEvent, PopulateProperty)
26360         (PopulateIndexer): Apply attributes everywhere.
26361
26362         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26363         etc.
26364
26365         (ApplyAttributes): Update accordingly.
26366
26367         We now apply interface attributes for all members too.
26368
26369 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26370
26371         * class.cs (Indexer.Define); Correctly check if we are explicit
26372         implementation (instead of checking the Name for a ".", we
26373         directly look up if the InterfaceType was specified).
26374
26375         Delay the creation of the PropertyBuilder.
26376
26377         Only create the PropertyBuilder if we are not an explicit
26378         interface implementation.   This means that explicit interface
26379         implementation members do not participate in regular function
26380         lookups, and hence fixes another major ambiguity problem in
26381         overload resolution (that was the visible effect).
26382
26383         (DefineMethod): Return whether we are doing an interface
26384         implementation. 
26385
26386         * typemanager.cs: Temporary hack until we get attributes in
26387         interfaces (Ravi is working on that) and we get IndexerName
26388         support in interfaces.
26389
26390         * interface.cs: Register the indexers as properties.
26391
26392         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26393         warning, I have verified that this is a bug in the .NET runtime
26394         (JavaScript suffers of the same problem).
26395
26396         * typemanager.cs (MemberLookup): When looking up members for
26397         interfaces, the parent of an interface is the implicit
26398         System.Object (so we succeed in searches of Object methods in an
26399         interface method invocation.  Example:  IEnumerable x;  x.ToString
26400         ()) 
26401
26402 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26403
26404         * class.cs (Event): Events should also register if they do
26405         implement the methods that an interface requires.
26406
26407         * typemanager.cs (MemberLookup); use the new GetInterfaces
26408         method. 
26409
26410         (GetInterfaces): The code used to lookup interfaces for a type is
26411         used in more than one place, factor it here. 
26412
26413         * driver.cs: Track the errors at the bottom of the file, we kept
26414         on going.
26415
26416         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26417         instance if the method we are calling is static!
26418
26419 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26420
26421         * attribute.cs (ApplyAttributes): Make this function filter out
26422         the IndexerName attribute (as that attribute in reality is never
26423         applied) and return the string constant for the IndexerName
26424         attribute. 
26425
26426         * class.cs (TypeContainer.Emit): Validate that all the indexers
26427         have the same IndexerName attribute, and if so, set the
26428         DefaultName attribute on the class. 
26429
26430         * typemanager.cs: The return value might contain other stuff (not
26431         only methods).  For instance, consider a method with an "Item"
26432         property and an Item method.
26433
26434         * class.cs: If there is a problem with the parameter types,
26435         return. 
26436
26437 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26438
26439         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26440         looks at user defined conversion after making a call to 
26441         StandardConversionExists - we need this for overload resolution.
26442
26443         * expression.cs : Update accordingly the various method calls.
26444
26445         This fixes 2 bugs filed against implicit user defined conversions 
26446
26447 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26448
26449         * statement.cs: Track the result of the assignment.
26450
26451 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26452
26453         * expression.cs (MemberAccess): Improved error reporting for
26454         inaccessible members.
26455
26456 2002-05-22  Martin Baulig  <martin@gnome.org>
26457
26458         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26459         itself with debugging support.
26460
26461 2002-05-22  Martin Baulig  <martin@gnome.org>
26462
26463         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26464         Removed, this isn't needed anymore.
26465
26466 2002-05-20  Martin Baulig  <martin@gnome.org>
26467
26468         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26469         be underlying type for an enum.
26470
26471 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26472
26473         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26474         that splits out the loading of just the core types.
26475
26476         * rootcontext.cs (ResolveCore): Split the struct resolution in
26477         two, so we can load the enumeration underlying types before any
26478         enums are used.
26479
26480         * expression.cs (Is): Bandaid until we fix properly Switch (see
26481         bug #24985 for details).
26482
26483         * typemanager.cs (ImplementsInterface): The hashtable will contain
26484         a null if there are no interfaces implemented.
26485
26486 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26487
26488         * cs-parser.jay (indexer_declarator): It is fine to have array
26489         parameters
26490
26491 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26492
26493         * typemanager.cs: (RegisterBuilder): New function used to register
26494         TypeBuilders that implement interfaces.  Since
26495         TypeBuilder.GetInterfaces (as usual) does not work with lame
26496         Reflection.Emit. 
26497         (AddUserType): register interfaces.
26498
26499         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26500         dealing with TypeBuilder.  Also, arrays are showing up as
26501         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26502         methods can not be invoked on them!
26503
26504         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26505         (ImplicitReferenceConversionExists): Split out from
26506         StandardConversionExists. 
26507
26508         * expression.cs (As): We were only implementing one of the three
26509         cases for the as operator.  We now implement them all.
26510         (Is): Implement the various other cases for Is as well.
26511
26512         * typemanager.cs (CACHE): New define used to control if we want or
26513         not the FindMembers cache.  Seems to have a negative impact on
26514         performance currently
26515
26516         (MemberLookup): Nested types have full acess to
26517         enclosing type members
26518
26519         Remove code that coped with instance/static returns for events, we
26520         now catch this in RealFindMembers.
26521
26522         (RealFindMembers): only perform static lookup if the instance
26523         lookup did not return a type or an event.  
26524
26525 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26526
26527         * assign.cs (CompoundAssign): We pass more semantic information
26528         now to Compound Assignments than we did before: now we have all
26529         the information at hand, and now we resolve the target *before* we
26530         do the expression expansion, which allows the "CacheValue" method
26531         to have the effect we intended (before, a [x] += 1 would generate
26532         two differen ArrayAccess expressions from the ElementAccess,
26533         during the resolution process).
26534
26535         (CompoundAssign.DoResolve): Resolve target and original_source here.
26536
26537 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26538
26539         * expression.cs (ArrayAccess): dropped debugging information. 
26540
26541         * typemanager.cs: Small bug fix: I was always returning i_members,
26542         instead of one of i_members or s_members (depending on which had
26543         the content).
26544
26545         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26546         method is invoked before any code generation takes place, and it
26547         is a mechanism to inform that the expression will be invoked more
26548         than once, and that the method should use temporary values to
26549         avoid having side effects
26550
26551         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26552
26553         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26554         implementation.
26555
26556         * expression.cs (Indirection, ArrayAccess): Add support for
26557         CacheTemporaries in these two bad boys. 
26558
26559         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26560         ldobj or ldind_ref.  
26561         (StoreFromPtr): Handle stobj as well.
26562
26563         * expression.cs (UnaryMutator): Share more code.
26564
26565         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26566         down: I was not tracking the Filter function as well, which
26567         was affecting the results of the cache.
26568
26569 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26570
26571         * attribute.cs: Remove the hack to handle the CharSet property on
26572         StructLayouts. 
26573
26574 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26575
26576         * attribute.cs (DoResolve): More uglyness, we now only try to
26577         resolve the attribute partially, to extract the CharSet
26578         information (only if we are a StructLayout attribute).  Otherwise 
26579
26580         (GetExtraTypeInfo): Add some code to conditionally kill in the
26581         future this.   I am more and more convinced that the .NET
26582         framework has special code to handle the attribute setting on
26583         certain elements.
26584
26585         * expression.cs (IsParamsMethodApplicable): Revert my previous
26586         foreach change here, it was wrong.
26587
26588 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26589
26590         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26591         (pp_expr): do not abort on unknown input, just return.
26592         (eval): abort if there are pending chars.
26593
26594         * attribute.cs (Attribute.Resolve): Positional parameters are
26595         optional.  Deal with that case.
26596
26597         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26598         the Ansi/Unicode/Auto information for the type.
26599
26600         (TypeContainer.DefineType): instantiate the EmitContext here, as
26601         we will be using it during the type definition (to resolve
26602         attributes) and during the emit phase.
26603
26604         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26605         to pull type information out of the attributes
26606
26607         (Attribute.Resolve): track the constructor builder, and allow for
26608         multiple invocations (structs and classes will use this).
26609
26610         * ecore.cs (MemberLookupFinal): new version with all the
26611         parameters customizable.
26612
26613         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26614         constructors.  Return if the result value is null (as the error
26615         would have been flagged already by MemberLookupFinal)
26616
26617         Do not allow instances of abstract classes or interfaces to be
26618         created.
26619
26620         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26621         We have to compare the assembly property here when dealing with
26622         FamANDAssem and Assembly access modifiers, because we might be
26623         creating an assembly from *modules* (that means that we are not
26624         getting TypeBuilders for types defined in other modules that are
26625         part of this assembly).
26626
26627         (Method.Emit): If the method is marked abstract and has a body,
26628         emit an error. 
26629
26630         (TypeContainer.DefineMembers): If both the defined member and the
26631         parent name match are methods, then do not emit any warnings: let
26632         the Method.Define routine take care of flagging warnings.  But if
26633         there is a mismatch (method overrides something else, or method is
26634         overriwritten by something, then emit warning).
26635
26636         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26637         set to null, this means `do not check for the return type on the
26638         signature'. 
26639
26640         (Method.Define): set the return type for the method signature to
26641         null, so that we get methods with the same name and parameters and
26642         different return types.  This is used to flag warning 114 (you are
26643         hiding a method, and you probably want to use the new/override
26644         keywords instead).
26645
26646         * typemanager.cs (MemberLookup): Implemented proper access
26647         control, closing a long standing set of bug reports.  The problem
26648         was that the Framework only has two bits: Public and NonPublic,
26649         and NonPublic includes private and protected methods, but we need
26650         to enforce the FamANDAssem, FamOrAssem and Family. 
26651
26652 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26653
26654         * statement.cs (GotoCase): Return true: Ammounts to giving up
26655         knowledge on whether we return or not, and letting the other case
26656         be responsible for it.
26657
26658 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26659
26660         * driver.cs: Do not load directories for each file processed, only
26661         do it if there is a pattern.
26662
26663         * ecore.cs: Report readonly assigns here as well, as we might have
26664         been resolved only by MemberAccess.
26665
26666         (SimpleName.SimpleNameResolve): Also be useful for LValue
26667         resolution.   We need this to propagate assign to local readonly variables
26668
26669         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26670         do not want to reuse potential criteria memory.
26671
26672         * class.cs (MyEventBuilder): Set reflected_type;
26673
26674         * ecore.cs (Constantify): Added support for constifying bools.
26675
26676         (RootContext.LookupType): Added a cache for values looked up in
26677         the declaration space.
26678
26679         * typemanager.cs (FindMembers): Now is a front-end to
26680         RealFindMembers, and provides a two-level hashtable-based cache to
26681         the request.  
26682
26683         15% performance improvement: from 22.5 to 19.2 seconds.
26684
26685         * expression.cs (IsParamsMethodApplicable): use foreach.
26686         (Invocation.DoResolve): ditto.
26687         (New.DoResolve): ditto.
26688         (ArrayCreation.DoResolve): ditto.
26689
26690         * ecore.cs (FindMostEncompassingType): use foreach.
26691
26692         * delegate.cs (NewDelegate.DoResolve): Use foreach
26693
26694         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26695         (RemoveMethods): use foreach.
26696
26697         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26698         nested foreach statements instead of for, and also break out of
26699         the inner loop once a match is found.
26700
26701         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26702
26703 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26704
26705         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26706         we actually unwrap the expression to allow for extra information
26707         to be extracted. 
26708
26709         * expression.cs: Use Shr_Un on unsigned operations. 
26710
26711 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26712
26713         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26714         applicable operators was not being considered correctly. This closes
26715         the bug Miguel reported.
26716
26717 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26718
26719         * attribute.cs: check that the type derives from System.Attribute
26720         and report the correct error in that case (moved the duplicate code to
26721         its own method, too).
26722
26723 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26724
26725         * attribute.cs: lookup attribute type name as the spec says: first the
26726         bare attribute name and then name + "Attribute" (nant compiles with
26727         mcs after this fix).
26728
26729 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26730
26731         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26732         Because of the way we parse things, we should try to see if a
26733         UIntConstant can fit in an integer.
26734
26735 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26736
26737         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26738         when we are in an explicit context.
26739
26740         (ConvertReferenceExplicit): When converting from Iface type S to Class
26741         T make sure the rules are implemented as an OR.
26742
26743         * parameter.cs (ParameterType): Make it a property for now although the
26744         purpose really isn't anything immediate.
26745
26746         * expression.cs (Is*Applicable): Do better checking on the parameter type
26747         of a ref/out parameter. The ones from the system assemblies are already 
26748         marked with the correct type so we don't need to do any correction.
26749
26750         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26751         the object type is standard too so include that.
26752
26753 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26754
26755         * ecore.cs (StandardConversionExists): Augment with missing code:
26756         deal with IntConstant, LongConstants and Enumerations.
26757
26758         * assign.cs: Report the error, instead of failing silently
26759
26760         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26761         typecontainer that they are declared, because the
26762         typecontainer/namespace will have the list of using clauses that
26763         need to be applied.
26764
26765         Assembly Attributes were escaping the normal registration
26766         mechanism. 
26767
26768         (EmitCode): Apply attributes within an EmitContext that represents
26769         the container they were declared on.
26770
26771         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26772
26773 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26774
26775         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26776         Revamp completely - make much cleaner as we now operate only
26777         on a set of Types.
26778
26779         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26780         to implement the logic detailed in the spec more correctly.
26781
26782         (UserDefinedConversion): Update accordingly.
26783
26784 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26785
26786         * statement.cs: Return flow analysis information up.
26787
26788         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26789         and the default.
26790
26791         (token): Do not consume an extra character before calling
26792         decimal_digits.
26793
26794 2002-05-06  Piers Haken <piersh@friskit.com>
26795
26796         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26797
26798 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26799
26800         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26801         EmitContext during the instance constructor initializer
26802         resolution, to stop access to instance variables.
26803
26804         This is mandated by the spec, last paragraph of the `constructor
26805         initializers' section. 
26806
26807 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26808
26809         * cs-parser.jay, class.cs (Accessor): new class used to represent
26810         an accessor (get or set).  In the past we used `null' to represent
26811         a missing accessor.  But this is ambiguous because there was no
26812         way to tell in abstract indexers/properties if one of them was
26813         specified.
26814
26815         Now there is a way of addressing that.
26816
26817         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26818         instead of FindMembers.
26819
26820         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26821         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26822
26823         * attribute.cs: Treat indexers and properties as the same in terms
26824         of applying attributes
26825
26826         * ecore.cs (FindMostEncompassedType): Use statically initialized
26827         EmptyExpressions()s like we do elsewhere to avoid creating useless
26828         objects (and we take this out of the tight loop).
26829
26830         (GetConversionOperators): Move the code to extract the actual
26831         operators to a separate routine to clean things up.
26832
26833 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26834
26835         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26836         events are always registered FieldBuilders.
26837
26838         * class.cs (FieldBase): New class shared by Fields 
26839
26840         * delegate.cs: If we are a toplevel delegate, use our full name.
26841         If we are a nested delegate, then only use our tail name.
26842
26843 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26844
26845         * expression.cs (IsApplicable): Ensure that we add the "&" to
26846         ref/out types before comparing it with the type of the argument.
26847
26848         (IsParamsMethodApplicable): Ditto.
26849
26850         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26851         silly me ;-)
26852
26853         * delegate.cs : Handle the case when we have more than one applicable
26854         method. Flag an error only when we finish checking all.
26855
26856 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26857
26858         * expression.cs: Add support for boolean static initializers.
26859
26860 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26861
26862         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26863
26864         * parameter.cs (ComputeParameterTypes,
26865         ComputeAndDefineParameterTypes): Better error handling: now we
26866         clear the `types' cache if we fail during any of the type lookups.
26867         We also return the status code correctly to our caller
26868
26869         * delegate.cs: If we fail to define a delegate, abort the extra
26870         steps. 
26871
26872         * expression.cs (Binary.ResolveOperator): for
26873         operator==(object,object) and operator !=(object, object) we also
26874         have to verify that there is an implicit conversion from one to
26875         the other.
26876
26877         (ArrayAccess.DoResolve): Array Access can operate on
26878         non-variables. 
26879
26880 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26881
26882         * assign.cs (CompoundAssign): A new class used as a "flag" that
26883         the assignment actually is happening as part of a compound
26884         assignment operator.
26885
26886         During compound assignment, a few new rules exist to enable things
26887         like:
26888
26889         byte b |= 1 + 2
26890
26891         From the spec:
26892
26893         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26894         to the type of x) if y is implicitly convertible to the type of x,
26895         and the operator is a builtin operator and the return type of the
26896         operator is explicitly convertible to the type of x. 
26897
26898         * rootcontext.cs: Reset warning level to 2.  4 catches various
26899         "interesting" features in mcs, we must clean this up at some
26900         point, but currently am trying to kill other bugs ;-)
26901
26902         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26903         in container classes as well.  
26904
26905         * expression.cs (Binary.ResolveOperator): Handle string case
26906         before anything else (as operator overloading does emit an error
26907         before doing anything else).
26908
26909         This code could go away when we move to a table driven model, but
26910         i could not come up with a good plan last night.
26911
26912 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26913
26914         * typemanager.cs (CSharpName): reimplementation using regex.
26915         * class.cs: added null check for fields in Emit
26916         * rootcontext.cs: set warninglevel to 4
26917
26918 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26919
26920         * typemanager.cs (CSharpName): reimplemented with Lupus
26921         suggestion.
26922
26923 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26924
26925         * statement.cs (If): correclty implement Resolve, because we were
26926         not catching sem errors in there.  The same process is needed
26927         everywhere else. 
26928         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26929
26930
26931         (Statement.Warning_DeadCodeFound): Factorize code.
26932         (While): Report dead code here too.
26933
26934         (Statement): Added Resolve virtual method to allow
26935         for resolution split from the emit code.
26936
26937 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26938
26939         * statement.cs (EmitBoolExpression): No longer try to resolve the
26940         expression here.    
26941         (MakeBoolean): New utility function that resolve, implicitly
26942         converts to boolean and tags the expression. 
26943
26944
26945         (If, Do): Implement dead code elimination.
26946         (While): Implement loop inversion
26947
26948         (Do, While, For, If): Resolve the expression prior to calling our
26949         code generation.
26950
26951 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26952
26953         * class.cs:
26954           - added method Report28 (warning: program has more than one entry point)
26955           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26956           - modified method Method.Define, the part at the end of the method
26957
26958         * rootcontext.cs: added static public Location EntryPointLocation;
26959           
26960         * ../errors/cs0028.cs : Add test case for the above warning.              
26961
26962         * typemanager.cs:
26963           - modified method CSharpName to allow arrays of primitive type to
26964             be printed nicely (e.g. instead of System.Int32[][] it now prints
26965             int[][])
26966           - added method CSharpSignature: returns the signature of a method
26967             in string format to be used in reporting errors, warnings, etc.
26968
26969         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26970         with String.Empty.
26971
26972 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26973
26974         * delegate.cs (Define): Fix extremely silly bug where I was
26975         setting the type of the 'object' parameter of the BeginInvoke
26976         method to System.IAsyncResult instead of System.Object ;-)
26977
26978 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26979
26980         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26981         here. 
26982
26983         (Constructor.Emit): return if we fail to initialize the
26984         constructor.  Another door closed!  
26985
26986         * expression.cs (New.DoResolve): Improve error message (from -6 to
26987         1501).  Use DeclaredOnly lookup to find the exact constructor.
26988
26989         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26990         loop.  This is useful.
26991
26992         * cs-parser.jay: Adjust the default parameters so that destructors
26993         have the proper signature.
26994
26995 2002-04-26  Martin Baulig  <martin@gnome.org>
26996
26997         * driver.cs (LoadAssembly): If `assembly' contains any characters
26998         which are only valid in path names and not in assembly names
26999         (currently slash, backslash and point), use Assembly.LoadFrom ()
27000         instead of Assembly.Load () on the `assembly' (before iteration
27001         over the link_paths).
27002
27003 2002-04-26  Martin Baulig  <martin@gnome.org>
27004
27005         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27006
27007 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27008
27009         * class.cs (Property): use the new typemanager.MemberLookup
27010
27011         (TypeContainer.MemberLookup): Implement using the
27012         TypeManager.MemberLookup now. 
27013
27014         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27015         and return MemberInfos, so that these can be used without an
27016         EmitContext (what we had before).
27017
27018 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27019
27020         * expression.cs: Fix the case where the argument to params if the
27021         type of the params.  I omitted handling this before.   Fixed
27022
27023 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27024
27025         * driver.cs: Call BootCorlib_PopulateCoreType
27026
27027         * class.cs (Property.CheckBase): Check for properties only, not
27028         for all members. 
27029
27030         * interface.cs: Temporary hack: try/catch around the
27031         CustomAttributeBuilder, because I am getting an exception that I
27032         do not understand.
27033
27034         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27035         types whose definitions are required to be there (attributes are
27036         defined before standard types).
27037
27038         Compute definitions as we boot the various types, as they are used
27039         immediately (value_type class will need object_type, but if we do
27040         not initialize object_type, we will pass a null, which will let
27041         the runtime pick the System.Object from the existing corlib, which
27042         is not what we want).
27043
27044 2002-04-22  Patrik Torstensson <totte@labs2.com>
27045
27046         * cs-tokenizer.cs: fixed a number of trim() issues.
27047
27048 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27049
27050         * expression.cs (Argument.Type): Ensure that we return the correct
27051         type when we have out or ref parameters [in which case we 
27052         append a "&"].
27053
27054 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27055
27056         * class.cs (Property, Indexer): Allow extern modifier in there. 
27057
27058         * typemanager.cs (InitBaseTypes): Initializes object_type and
27059         value_type, since those will be used early on during the bootstrap
27060         process to compile corlib.
27061
27062         (InitCoreTypes): Move code from here to InitBaseTypes.
27063
27064 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27065
27066         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27067         single-dimension arrays as using the ldlen opcode.  
27068
27069         Daniel Lewis discovered this optimization.  
27070
27071         * typemanager.cs: Add signature for System.Array::get_Length
27072
27073 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27074
27075         * statement.cs: report the error when the foreach does not apply to an
27076         array nor a collection.
27077
27078 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27079
27080         * expression.cs: Add implicit conversions to the operator ~.
27081
27082         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27083
27084         * typemanager.cs: Locate the decimal constructor.
27085
27086 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27087
27088         * attribute.cs: use the new property of TypeOf.
27089         * expression.cs: added 'get' property around typearg.
27090
27091         These changes fix a build breaker reported by NickD. Is this the
27092         correct way to fix?  If not, please, revert my changes and make it
27093         work :-).
27094
27095 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27096
27097         * attribute.cs: Add support for typeof in attribute invocations.
27098         I am not sure that this is right though.
27099
27100 2002-04-14  Duncan Mak  <duncan@ximian.com>
27101
27102         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27103         Binary.Operator.Division case.
27104
27105 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27106
27107         * class.cs (DefineType): Ensure that we do a proper check on
27108         attribute types and also register it with the TypeManager.
27109
27110         (TypeContainer.Targets): The default for attribute types is
27111         AttributeTargets.All.
27112
27113         * attribute.cs (ApplyAttributes): Registering the attribute type
27114         is done elsewhere, not when we discover we have a Usage attribute.
27115
27116 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27117
27118         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27119         and get rid of is_delegate parameter.
27120
27121         * everywhere : update.
27122
27123 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27124
27125         * cs-parser.jay (compilation_unit): Revamp completely to use
27126         some new ideas that I got from Rhys' grammar to solve the problems
27127         with assembly level attributes.
27128
27129         (outer_declaration): New grammar production.
27130
27131         (attribute_sections): Add.
27132
27133         (opt_attributes): Base on attribute_sections
27134
27135         (namespace_declaration): Allow opt_attributes to tackle the case
27136         when we have assembly level attributes - we are clever in this
27137         regard now ;-)
27138
27139         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27140         attributes in the non-global context.
27141
27142         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27143         instead of SetGlobalAttributes.
27144
27145         * class.cs, rootcontext.cs : Ensure we define and generate 
27146         attribute types before anything else.
27147
27148         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27149         and flag the new error -20 for the case when the attribute type
27150         does not have valid targets specified. csc does not catch this.
27151
27152         * ../errors/errors.txt : update for error # -20
27153
27154 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27155
27156         * support.cs (InternalParameters.ParameterModifier): Do some null
27157         checking and return sane values.
27158
27159         * class.cs (Method.Define): If we are a PInvoke method, ensure
27160         that we are static and extern. Report error # 601
27161
27162         * ../errors/cs0601.cs : Add test case for the above error.
27163
27164 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27165
27166         * rootcontext.cs (attribute_types): We need to keep type of
27167         all attribute types separately and emit code for them first.
27168
27169         (RegisterAttribute) : Implement.
27170
27171         * class.cs (DefineType): Check if the current Type is a custom
27172         attribute type and register it accordingly.
27173
27174         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27175         adding the first attribute twice and rename to
27176
27177         (SetGlobalAttributes): this.
27178
27179         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27180         lookups.
27181
27182         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27183         if we are processing global arguments. Hmm, I am unsure of this.
27184
27185 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27186
27187         * expression.cs: added static array of strings to avoid calling
27188         Enum.ToString () for Operator in Binary. Significant recover of
27189         performance.
27190
27191 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27192
27193         * class.cs (FindMembers): Allow the Builders of the various
27194         members to be null.  If they are skip them.  This only happens
27195         during the PInvoke declaration.
27196
27197 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27198
27199         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27200         failure, so we do not keep going afterwards.
27201
27202         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27203         wanted to pass `false' as the `is_delegate' argument.  If this is
27204         the case, why not use delegate_type == null to mean `is_delegate =
27205         false' and anything else as is_delegate = true.
27206
27207 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27208
27209         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27210         code for the section, not the beginning of the tests.
27211
27212 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27213
27214         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27215
27216         * expression.cs (Binary): same.  Warn about errors where we have
27217         Enum/Enum in operator + as well.
27218
27219 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27220
27221         * statement.cs:
27222                 - added support for switch(bool)
27223                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27224                 - add TableSwitchEmit() to handle table-based switch statements
27225
27226 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27227
27228         * expression.cs (Invocation.OverloadResolve): Factor out code which
27229         does parameter compatibility checking with arguments so that we can 
27230         re-use the code even from Delegate.VerifyApplicability
27231
27232         (VerifyArgumentsCompat): Move above code here.
27233
27234         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27235         and instead make a call to the above method.
27236
27237 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27238
27239         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27240         We use it to keep track of classes which are attribute types.
27241
27242 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27243
27244         * delegate.cs (Delegate.Define): Correctly define the types in the
27245         presence of fixed and array parameters.
27246
27247         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27248         doing FindMembers.
27249
27250         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27251         include NonPublic after the first iteration.
27252
27253         * class.cs (Indexer.CheckBase): Only check if both parents are
27254         non-null. 
27255
27256         * cs-parser.jay (accessor_body): If empty, set to null.
27257
27258         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27259         same code path here to resolve constants names that we did have in
27260         MemberAccess.DoResolve.  There is too much code duplicated here.
27261
27262 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27263
27264         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27265
27266         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27267         to MakeUnionSet.
27268
27269         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27270         tokens, numbers and strings.
27271
27272         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27273         parenthesis.
27274
27275         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27276         asyncronous parameters and the regular parameters.  
27277
27278         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27279         specify the target directory.
27280
27281         * expression.cs: (This.DoResolve): Simplify
27282         (As.Emit): Optimize, do not generate IsInst if the expression is
27283         always of the given type.
27284
27285         (Is.DoResolve): Bug fix, we were reporting both always/never for
27286         the is expression.
27287
27288         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27289         creating too many unnecessary arrays.
27290
27291 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27292
27293         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27294         fields instead of rolling our own initializer.   Takes care of all
27295         implicit conversions, and drops unnecessary static checks/argument.
27296
27297 2002-03-31  Dick Porter  <dick@ximian.com>
27298
27299         * driver.cs: use the GetDirectories() return values properly, and
27300         use "/" as path separator.
27301
27302 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27303
27304         * expression.cs (Unary): Optimize - - expr into expr.
27305         (Binary): Optimize a + (-b) into a -b.
27306
27307         * codegen.cs (CodeGen): Made all methods static.
27308
27309 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27310
27311         * rootcontext.cs: 
27312
27313         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27314         TypeBuilder property.
27315
27316         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27317         instead. 
27318
27319         * tree.cs: Removed the various RecordXXXX, and replaced with a
27320         single RecordDecl.  Removed all the accessor methods, and just
27321         left a single access point Type 
27322
27323         * enum.cs: Rename DefineEnum to DefineType.
27324
27325         * decl.cs: New abstract method `DefineType' used to unify the
27326         Defines for Enumerations, Interfaces, TypeContainers and
27327         Delegates.
27328
27329         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27330         LookupBaseClasses method that used to live in class.cs and
27331         interface.cs here, and renamed to FindType.
27332
27333         * delegate.cs: Implement DefineType.  Take advantage of the
27334         refactored pattern for locating the parent builder without taking
27335         the parent_builder argument (which we know does not work if we are
27336         nested, and triggering a toplevel definition).
27337
27338 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27339
27340         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27341         accessibility of a member has changed during override and report
27342         an error if so.
27343
27344         * class.cs (Method.Define, Property.Define): Only complain on
27345         overrides if the method is private, any other accessibility is
27346         fine (and since we just checked the permission is the same, we are
27347         good to go).
27348
27349         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27350         and elif are processed always.  The other pre-processing
27351         directives are only processed if we are "taking" the path
27352
27353 2002-03-29  Martin Baulig  <martin@gnome.org>
27354
27355         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27356         current location is not Null.
27357
27358         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27359         a separate method so we can profile it.
27360
27361         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27362         `span.Seconds' are just seconds, but no minutes or hours.
27363         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27364
27365 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27366
27367         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27368         Remove the gratuitous set of Final:
27369
27370                                 // If an interface implementation, then we can set Final.
27371                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27372                                     implementing.DeclaringType.IsInterface)
27373                                         flags |= MethodAttributes.Final;
27374
27375         I do not know what I was smoking when I used that.
27376
27377
27378         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27379         step into fixing the name resolution issues for delegates and
27380         unifying the toplevel name resolution.
27381
27382 2002-03-28  Martin Baulig  <martin@gnome.org>
27383
27384         * class.cs (Method.Emit): If we have a symbol writer, call its
27385         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27386         tell it about the current method.
27387
27388         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27389         writer that we're going to emit the first byte of IL code for a new
27390         statement (a new source line).
27391         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27392         EmitContext.Mark() before emitting any code.
27393
27394         * location.cs (SymbolDocument): Return null when we're Null.
27395
27396         * statement.cs (Statement): Moved the `Location loc' variable here.
27397         (Statement.EmitBoolExpression): If we have a symbol writer, call
27398         ec.Mark() before emitting any code to tell it that we're at the
27399         beginning of a new statement.
27400         (StatementExpression): Added `Location' argument to the constructor.
27401         (Block): Added public readonly variable `StartLocation' and public
27402         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27403         (Block): Added constructor which takes a start and end location.
27404         (Block.SetEndLocation): New method. This sets the end location.
27405         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27406         local variables we create.
27407         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27408         each statement and do also mark the begin and end of the block.
27409
27410         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27411         tell it the current lexer.Location, use Location.Null for the end of the
27412         block.
27413         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27414         current block, set its end location using SetEndLocation().
27415         (statement_expression): StatementExpression constructor now takes the
27416         lexer.Location as additional argument.
27417         (for_statement, declare_local_variables): Likewise.
27418         (declare_local_variables): When creating a new implicit block, use the
27419         new Block constructor and pass it the lexer.Location.
27420
27421 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27422
27423         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27424         members also on the parent interfaces recursively.
27425
27426 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27427
27428         * report.cs: Use new formats, since Gonzalo finished the missing
27429         bits. 
27430
27431         * expression.cs (Binary.ResolveOperator): added missing operator|
27432         operator& and operator^ for bool/bool.
27433
27434         * cs-parser.jay: CheckDef now takes a Location argument that is
27435         used to report errors more precisly (instead of reporting the end
27436         of a definition, we try to track something which is a lot closer
27437         to the source of the problem).
27438
27439         * cs-tokenizer.cs: Track global token use, so we can properly flag
27440         the use of #define/#undef after the first token has been seen.
27441
27442         Also, rename the reportXXXX to Error_DescriptiveName
27443
27444         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27445         TypeContainer, so that Enum and Interface can use this too.
27446
27447         * class.cs (TypeContainer.LookupInterfaceOrClass,
27448         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27449         `builder' argument.  Typically this was used to pass the parent
27450         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27451         the definition).  
27452
27453         The problem is that a nested class could trigger the definition of
27454         a toplevel class, and the builder would be obviously wrong in that
27455         case. 
27456
27457         So we drop this argument, and we compute dynamically the
27458         TypeBuilder/ModuleBuilder (the correct information was available
27459         to us anyways from DeclSpace.Parent)
27460
27461         * interface.cs (Interface.DefineInterface): Drop builder
27462         parameter cleanup like class.cs
27463
27464         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27465         like class.cs
27466
27467         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27468         values. 
27469
27470         (Try.Emit): Propagate the returns value from the statement.
27471
27472         (Return.Emit): Even if we are leavning 
27473
27474         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27475
27476         * modifiers.cs: Fix the computation of MethodAttributes flags.
27477
27478 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27479
27480         * driver.cs: allow compilation of files that start with '/'.
27481         Add a default case when checking the argument of --target.
27482
27483 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27484
27485         * interface.cs: Implement the same search algorithm for types in
27486         the interface code.
27487
27488         * delegate.cs: Do not allow multiple definition.
27489
27490         * Recovered ChangeLog that got accidentally amputated
27491
27492         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27493
27494         * rootcontext.cs: Load manually enum to allow core classes to
27495         contain enumerations.
27496
27497         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27498         Update to new static methods in TypeManager.
27499
27500         * typemanager.cs (GetMethod, GetConstructor): Use our
27501         implementation of FindMembers to find the members, since during
27502         corlib compilation, the types are TypeBuilders and GetMethod and
27503         GetConstructor do not work.
27504
27505         Make all methods in TypeManager static.
27506
27507         (InitCodeHelpers): Split the functionality from
27508         the InitCodeTypes function.
27509
27510         * driver.cs: Call InitCodeHelpers after we have populated the
27511         types. 
27512
27513         * cs-parser.jay (delegate_declaration): we did not used to compute
27514         the delegate name correctly for void delegates.
27515
27516 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27517
27518         * rootcontext.cs (RootContext): Init the interface_resolve_order
27519         and type_container_resolve_order always.
27520
27521         (ResolveCore, BootstrapCorlib_ResolveClass,
27522         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27523         compiler when compiling with --nostdlib
27524
27525         * class.cs (TypeContainer.DefineType): Check that our parent is
27526         not null.  This test is most important when we are bootstraping
27527         the core types.
27528
27529         * codegen.cs: Split out the symbol writing code.
27530
27531 2002-03-25  Martin Baulig  <martin@gnome.org>
27532
27533         * driver.cs (-g): Made -g an alias for --debug.
27534
27535 2002-03-24  Martin Baulig  <martin@gnome.org>
27536
27537         * codegen.cs (SymbolWriter): New public variable. Returns the
27538         current symbol writer.
27539         (CodeGen): Added `bool want_debugging_support' argument to the
27540          constructor. If true, tell the ModuleBuild that we want debugging
27541         support and ask it for the ISymbolWriter.
27542         (Save): If we have a symbol writer, call it's Close() method after
27543         saving the assembly.
27544
27545         * driver.c (--debug): New command line argument to create a
27546         debugger information file.
27547
27548         * location.cs (SymbolDocument): New public property. Returns an
27549         ISymbolDocumentWriter object for the current source file or null
27550         if we don't have a symbol writer.
27551
27552 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27553
27554         * driver.cs (LoadAssembly): Correctly return when all the paths
27555         have been tried and not before.
27556
27557         * statement.cs (Switch.Emit): return the actual coverage for this
27558         statement (returns/not-returns)
27559
27560         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27561         switch of the statement if we are the last switch section.  That
27562         kills two problems: try/catch problems (we used to emit an empty
27563         nop at the end) and switch statements where all branches would
27564         return. 
27565
27566 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27567
27568         * driver.cs: Add default assemblies (the equivalent to the
27569         Microsoft CSC.RSP file)
27570
27571         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27572         also update tokens_seen and set it to false.
27573
27574         * driver.cs: Implement --recurse for Mike.
27575
27576         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27577         correctly splitting out the paths.
27578
27579 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27580
27581         * interface.cs (Interface.PopulateProperty): Instead of using
27582         `parent' as the declaration space for the set parameters, use
27583         `this' 
27584
27585         * support.cs (InternalParameters): InternalParameters constructor
27586         takes a DeclSpace instead of a TypeContainer.
27587
27588         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27589         types are being initialized, load the address of it before calling
27590         the function.  
27591
27592         (New): Provide a mechanism to disable the generation of local
27593         value type temporaries when the caller will be providing us with
27594         an address to store it.
27595
27596         (ArrayCreation.EmitDynamicInitializers): Use it.
27597
27598 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27599
27600         * expression.cs (Invocation.EmitArguments): Only probe for array
27601         property if there is more than one argument.  Sorry about that.
27602
27603         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27604         empty param arrays.
27605
27606         * class.cs (Method.LabelParameters): Fix incorrect code path that
27607         prevented the `ParamArrayAttribute' from being applied to the
27608         params attribute.
27609
27610 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27611
27612         * support.cs (ReflectionParameters): Correctly compute whether the
27613         last argument is a params array.  Fixes the problem with
27614         string.Split ('a')
27615
27616         * typemanager.cs: Make the assemblies array always be non-null
27617         (empty, but non-null)
27618
27619         * tree.cs (RecordDecl): New function that abstracts the recording
27620         of names.  This reports error 101, and provides a pointer to the
27621         previous declaration.  Fixes a crash in the compiler.
27622
27623         * cs-parser.jay (constructor_declaration): Update to new grammar,
27624         and provide a constructor_body that can be empty.
27625
27626 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27627
27628         * driver.cs: Add support for --resources.
27629
27630         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27631         Make all types for the various array helper methods be integer.
27632
27633         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27634         CheckState to ConvCast.
27635
27636         (ConvCast): Now it takes a `checked' state argument, to avoid
27637         depending on the emit context for the conversion, and just using
27638         the resolve time setting.
27639
27640         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27641         instead of Invocation.EmitArguments.  We do not emit the original
27642         arguments, instead we emit those which have been converted to
27643         unsigned int expressions.
27644
27645         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27646
27647         * codegen.cs: ditto.
27648
27649         * expression.cs (LocalVariableReference): Drop the use of the
27650         Store function that depended on the variable index.
27651
27652         * statement.cs (VariableInfo): Drop the `Idx' property from this
27653         class, as this is not taking into account the indexes for
27654         temporaries tat we generate during the execution, getting the
27655         indexes wrong.
27656
27657         * class.cs: First emit class initializers, then call the parent
27658         constructor. 
27659
27660         * expression.cs (Binary): Fix opcode emision.
27661         (UnaryMutator.EmitCode): Support checked code generation
27662
27663         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27664         matches for events for both the Static and Instance scans,
27665         pointing to the same element.   Fix that.
27666
27667 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27668
27669         * rootcontext.cs (ResolveTree): Always set the
27670         interface_resolve_order, because nested interfaces will be calling
27671         into us.
27672
27673         * class.cs (GetInterfaceOrClass): Track the same resolution
27674         process used by TypeManager.LookupType.  This fixes the nested
27675         type lookups in class declarations (separate path from
27676         LookupType). 
27677
27678         (TypeContainer.DefineType): Also define nested interfaces.
27679         (TypeContainer.RegisterOrder): New public function used to
27680         register the order in which child interfaces need to be closed.
27681
27682         Nested interfaces need to be closed after their parents have been
27683         created. 
27684
27685         * interface.cs (InterfaceAttr): Put all the logic for computing
27686         the interface attribute here. 
27687
27688         (DefineInterface): Register our interface order with the
27689         RootContext or with the TypeContainer depending on the case.
27690
27691 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27692
27693         * cs-parser.jay: rework foreach statement to work with the new
27694         changes to the policy on SimpleNames.
27695
27696         * report.cs: support Stacktrace on warnings as well.
27697
27698         * makefile: drop --unsafe and /unsafe from the compile.
27699
27700 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27701
27702         * ecore.cs (StandardConversionExists): Modify to take an Expression
27703         as the first parameter. Ensure we do null -> reference type conversion
27704         checking.
27705
27706         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27707         temporary Expression objects.
27708
27709 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27710
27711         * interface.cs: workaround bug in method overloading resolution
27712         (there is already a bugzilla bug for it).
27713
27714 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27715
27716         We could also solve this problem by having a separate path for
27717         performing type lookups, instead of DoResolve, we could have a
27718         ResolveType entry point, and only participating pieces of the
27719         production (simplename, deref, array) would implement this. 
27720
27721         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27722         signal SimpleName to only resolve type names and not attempt to
27723         resolve anything else.
27724
27725         * expression.cs (Cast): Set the flag.
27726
27727         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27728
27729         * class.cs: Only report 108 if there is no `new' modifier.
27730
27731         * cs-parser.jay: rework foreach statement to work with the new
27732         changes to the policy on SimpleNames.
27733
27734         * report.cs: support Stacktrace on warnings as well.
27735
27736         * makefile: drop --unsafe and /unsafe from the compile.
27737
27738 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27739
27740         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27741         lookups here, instead of doing that at parse time.  This means
27742         that our grammar will not introduce `LocalVariableReferences' as
27743         expressions at this point.  That solves the problem of code like
27744         this:
27745
27746         class X {
27747            static void Main ()
27748            { int X = 1;
27749             { X x = null }}}
27750
27751         This is only half the fix.  The full fix requires parameters to
27752         also be handled in this way.
27753
27754         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27755         makes the use more obvious of the DeclSpace.  The
27756         ec.TypeContainer.TypeBuilder is now only used to pull the
27757         TypeBuilder for it.
27758
27759         My theory is that I can get rid of the TypeBuilder completely from
27760         the EmitContext, and have typecasts where it is used (from
27761         DeclSpace to where it matters).  
27762
27763         The only pending problem is that the code that implements Aliases
27764         is on TypeContainer, and probably should go in DeclSpace.
27765
27766         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27767         lookups here, instead of doing that at parse time.  This means
27768         that our grammar will not introduce `LocalVariableReferences' as
27769         expressions at this point.  That solves the problem of code like
27770         this:
27771
27772         class X {
27773            static void Main ()
27774            { int X = 1;
27775             { X x = null }}}
27776
27777         This is only half the fix.  The full fix requires parameters to
27778         also be handled in this way.
27779
27780         * class.cs (Property.DefineMethod): When implementing an interface
27781         method, set newslot, when implementing an abstract method, do not
27782         set the flag (before we tried never setting it, or always setting
27783         it, which is the difference).
27784         (Indexer.DefineMethod): same.
27785         (Method.DefineMethod): same.
27786
27787         * ecore.cs: Only set the status used flag if we get back a Field.
27788
27789         * attribute.cs: Temporary hack, so Paolo can keep working.
27790
27791 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27792
27793         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27794         the unmanaged type in the case we have a MarshalAs attribute.
27795
27796         (Resolve): Handle the case when we are parsing the special MarshalAs
27797         attribute [we need to store the unmanaged type to use later]
27798
27799         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27800         MarshalAs Attribute.
27801
27802         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27803         on parameters and accordingly set the marshalling info.
27804
27805 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27806
27807         * class.cs: Optimizing slightly by removing redundant code after
27808         we switched to the `NoTypes' return value.
27809         (Property.DefineMethod): use NoTypes here too.
27810
27811         This fixes the bug I introduced in my last batch of changes.
27812
27813 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27814
27815         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27816
27817         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27818         Enums since those are types too. 
27819
27820         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27821
27822         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27823         thanks to a call during the lookup process.
27824
27825 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27826
27827         * statement.cs (Foreach): Lots of work to accomodate a particular
27828         kind of foreach statement that I had not kept in mind.  It is
27829         possible to have foreachs on classes that provide a GetEnumerator
27830         method that return objects that implement the "pattern" for using
27831         a foreach, there is no need to support GetEnumerator
27832         specifically. 
27833
27834         This is needed to compile nant.
27835
27836         * decl.cs: Only report 114 if the member is not `Finalize' and if
27837         the warning level is at least 2.
27838
27839         * class.cs: Moved the compare function from Method to
27840         MethodSignature. 
27841
27842         (MethodSignature.InheritableMemberSignatureCompare): Add new
27843         filter function that is used to extract inheritable methods from a
27844         class. 
27845
27846         (Method.Define): Use the new `inheritable_method_signature_filter'
27847         delegate
27848
27849         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27850         command. 
27851
27852 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27853
27854         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27855
27856         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27857
27858         * expression.cs: Pass location information to
27859         ConvertImplicitStandard. 
27860
27861         * class.cs: Added debugging code to track return values from
27862         interfaces. 
27863
27864 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27865
27866         * expression.cs (Is.DoResolve): If either side of the `is' is an
27867         interface, do not flag the warning.
27868
27869         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27870         for interfaces
27871
27872         * report.cs: Allow for --fatal to be used with --probe.
27873
27874         * typemanager.cs (NoTypes): Move the definition for the empty Type
27875         array here. 
27876
27877         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27878         properties. 
27879         (TypeContainer.DefineProxy): New function used to proxy to parent
27880         implementations when implementing interfaces.
27881         (TypeContainer.ParentImplements): used to lookup if our parent
27882         implements a public function that is required by an interface.
27883         (TypeContainer.VerifyPendingMethods): Hook this up.
27884
27885         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27886         `modules' and `assemblies' arraylists into arrays.  We only grow
27887         these are the very early start up of the program, so this improves
27888         the speedof LookupType (nicely measured).
27889
27890         * expression.cs (MakeByteBlob): Replaced unsafe code with
27891         BitConverter, as suggested by Paolo.
27892
27893         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27894         folding of string concatenation, but if either side is a string,
27895         and the other is not, then return null, and let the runtime use
27896         the concatenation on the string plus the object (using
27897         `Object.ToString'). 
27898
27899 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27900
27901         Constant Folding has been implemented now.
27902
27903         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27904         the error instead on types that are not supported in one's
27905         complement. 
27906
27907         * constant.cs (Constant and all children): New set of functions to
27908         perform implict and explicit conversions.
27909
27910         * ecore.cs (EnumConstant): Implement the new functions to perform
27911         conversion by proxying to the child expression.
27912
27913         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27914         own separate setting that can not be turned off from the command
27915         line using --unchecked or --checked and is only controlled using
27916         the checked/unchecked statements and expressions.  This setting is
27917         used by the constant folder to flag errors.
27918
27919         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27920         ConstantCheckState as well.   
27921
27922         During Resolve, they also have to flag the state, because the
27923         constant folder runs completely in the Resolve phase.
27924
27925         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27926         well.
27927
27928 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27929
27930         * cfold.cs: New file, this file contains the constant folder.
27931
27932         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27933         argument to track whether we are using the resulting address to
27934         load or store a value and provide better error messages. 
27935
27936         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27937         new AddressOf arguments.
27938
27939         * statement.cs (Foreach.EmitCollectionForeach): Update
27940
27941         * expression.cs (Argument.Emit): Call AddressOf with proper
27942         arguments to track usage.
27943
27944         (New.DoEmit): Call AddressOf with new arguments.
27945
27946         (Unary.Emit): Adjust AddressOf call.
27947
27948 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27949
27950         * cs-parser.jay (member_access): Change the case for pre-defined types
27951         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27952         this suggestion.
27953
27954         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27955         a method body.
27956
27957         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27958         essentially like methods and apply attributes like MethodImplOptions to them too.
27959
27960         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27961         not being null.
27962
27963         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27964         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27965         is the DeclSpace.
27966
27967         * Update code everywhere accordingly.
27968
27969         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27970
27971         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27972
27973 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27974
27975         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27976         try performing lookups against those instead of jumping straight into using
27977         the 'using' clauses.
27978
27979         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27980
27981         (LookupType): Perform lookups in implicit parents too.
27982
27983         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27984         sequence as RootContext.LookupType. 
27985
27986         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27987         the various cases of namespace lookups into this method.
27988
27989 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27990
27991         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27992         in positional arguments)
27993
27994         * class.cs (Operator): Update the AllowedModifiers to contain
27995         extern. 
27996
27997         * cs-parser.jay: Update operator declaration to allow for the
27998         operator body to be empty.
27999
28000         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28001         values. 
28002
28003 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28004
28005         * class.cs (Method.Emit): Label parameters.
28006
28007         * driver.cs: Return 1 or 0 as the program exit code.
28008
28009 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28010
28011         * expression.cs: Special case the `null' object when trying to
28012         auto-compute the type, as anything can be explicitly converted to
28013         that. 
28014
28015         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28016         spotting this Paolo.
28017
28018         (Expression.ImplicitNumericConversion): Perform comparissions of
28019         the type using the underlying type in the case of an enumeration
28020         rather than using the enumeration type for the compare.
28021
28022         Cope with the underlying == type case, which is not possible to
28023         catch before. 
28024
28025         (Expression.ConvertNumericExplicit): Perform comparissions of
28026         the type using the underlying type in the case of an enumeration
28027         rather than using the enumeration type for the compare.
28028
28029         * driver.cs: If the user does not supply an extension, assume .exe
28030
28031         * cs-parser.jay (if_statement): Rewrote so that we can track the
28032         location for the if statement.
28033
28034         * expression.cs (Binary.ConstantFold): Only concat strings when
28035         the operation is "+", not everything ;-)
28036
28037         * statement.cs (Statement.EmitBoolExpression): Take a location
28038         argument. 
28039         (If, While, Do): Track location.
28040
28041         * expression.cs (Binary.ResolveOperator): In the object + string
28042         case, I was missing a call to ConvertImplicit
28043
28044 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28045
28046         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28047         Location arguments. Ensure we use RootContext.LookupType to do our work
28048         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28049
28050         * interface.cs (PopulateMethod): Handle the type of the parameter being
28051         null gracefully.
28052
28053         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28054         have a params method with no fixed arguments and a call is made with no
28055         arguments.
28056
28057 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28058
28059         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28060         the verbatim-string-literal
28061
28062         * support.cs (InternalParameters.ParameterModifier): handle null
28063         fixed parameters.
28064         (InternalParameters.ParameterType): ditto.
28065
28066         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28067         duplicating the name of the variable parameter.
28068         (GetParameterByName): Fix bug where we were not looking up array
28069         paramters if they were the only present (thanks Paolo!).
28070         (GetParameterInfo): We only have an empty set of types if both
28071         fixed and array are set to null.
28072         (GetParameterInfo-idx): Handle FixedParameter == null
28073
28074         * cs-parser.jay: Handle the case where there is no catch
28075         statements (missing null test).
28076
28077 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28078
28079         * driver.cs (MainDriver): Be conservative on our command line
28080         handling.
28081
28082         Catch DirectoryNotFoundException when calling GetFiles.
28083
28084         (SplitPathAndPattern): Used to split the input specification into
28085         a path and a pattern that we can feed to Directory.GetFiles.
28086
28087 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28088
28089         * statement.cs (Fixed): Implement the last case of the Fixed
28090         statement (string handling).
28091
28092         * expression.cs (StringPtr): New class used to return a char * to
28093         a string;  Used by the Fixed statement.
28094
28095         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28096
28097         * expression.cs (Binary.ResolveOperator): Remove redundant
28098         MemberLookup pn parent type.
28099         Optimize union call, we do not need a union if the types are the same.
28100         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28101         type.
28102
28103         Specialize the use of MemberLookup everywhere, instead of using
28104         the default settings. 
28105
28106         (StackAlloc): Implement stackalloc keyword.
28107
28108         * cs-parser.jay: Add rule to parse stackalloc.
28109
28110         * driver.cs: Handle /h, /help, /?
28111
28112         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28113         before we supported unsafe code.
28114
28115         * makefile: add --unsafe to the self compilation of mcs.
28116
28117 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28118
28119         * expression.cs (PointerArithmetic): New class that is used to
28120         perform pointer arithmetic.
28121         (Binary.Resolve): Handle pointer arithmetic
28122         Handle pointer comparission.
28123         (ArrayPtr): Utility expression class that is used to take the
28124         address of an array.
28125
28126         (ElementAccess): Implement array access for pointers
28127
28128         * statement.cs (Fixed): Implement fixed statement for arrays, we
28129         are missing one more case before we are done.
28130
28131         * expression.cs (Indirection): Implement EmitAssign and set the
28132         ExprClass to Variable.  This allows pointer dereferences to be
28133         treated as variables, and to have values assigned to them.
28134
28135         * ecore.cs (Expression.StoreFromPtr): New utility function to
28136         store values dereferencing.
28137
28138 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28139
28140         * expression.cs (Binary.ResolveOperator): Ensure that we are
28141         not trying to operate on a void type - this fixes the reported
28142         bug.
28143
28144         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28145         the parent implementation is sealed.
28146
28147         * ../errors/cs0239.cs : Add.
28148
28149         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28150
28151         * typemanager.cs (unverifiable_code_type): Corresponds to 
28152         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28153         which have unsafe code in them.
28154
28155         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28156         unsafe context.
28157
28158 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28159
28160         * cs-tokenizer.cs: Add support for @"litreal strings"
28161
28162         Make tokenizer accept pre-processor directives
28163         on any column (remove the old C-like limitation). 
28164
28165         * rootcontext.cs (EmitCode): Emit any global attributes.
28166         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28167
28168         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28169
28170         * cs-parser.jay: Add support for global attributes.  
28171
28172 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28173
28174         * expression.cs (Indirection): New helper class.  Unary will
28175         create Indirection classes to be able to implement the
28176         IMemoryLocation interface on it.
28177
28178 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28179
28180         * cs-parser.jay (fixed_statement): reference the right statement.
28181
28182         * statement.cs (Fixed.Emit): Finish implementing the fixed
28183         statement for the &x case.
28184
28185 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28186
28187         * class.cs (Property.Define, Method.Define): Remove newslot when
28188         `implementing'.  
28189
28190         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28191         wrong.  NewSlot should only be used if the `new' keyword is present.
28192
28193         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28194         locating our system dir.  Sorry about this.
28195
28196 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28197
28198         * driver.cs (GetSystemDir): Compute correctly the location of our
28199         system assemblies.  I was using the compiler directory instead of
28200         the library directory.
28201
28202 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28203
28204         * expression.cs (BetterFunction): Put back in what Miguel commented out
28205         since it is the correct fix. The problem is elsewhere ;-)
28206
28207         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28208         parameters of the parms method are themselves compatible or not !
28209
28210         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28211         to check that a class implements an interface before saying that an implicit
28212         conversion was allowed. Use ImplementsInterface to do the checking.
28213
28214 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28215
28216         * class.cs (Method.Define): Track whether we are an explicit
28217         implementation or not.  And only call DefineMethodOverride if we
28218         are an explicit implementation.
28219
28220         (Property.DefineMethod): Ditto.
28221
28222 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28223
28224         * expression.cs (BetterFunction): Catch hideous bug which was
28225          preventing us from detecting ambiguous calls due to implicit casts i.e
28226         cs0121.
28227
28228 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28229
28230         * support.cs (Pair): Remove un-needed method.  I figured why I was
28231         getting the error in cs-parser.jay, the variable in a foreach loop
28232         is readonly, and the compiler does not really treat this as a variable.
28233
28234         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28235         instead of EQUALS in grammar.  
28236
28237         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28238
28239         * expression.cs (Unary.DoResolve): Check whether the argument is
28240         managed or not.
28241
28242 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28243
28244         * support.cs: Api for Pair to set a value.  Despite the fact that
28245         the variables are public the MS C# compiler refuses to compile
28246         code that accesses the field if the variable is part of a foreach
28247         statement. 
28248
28249         * statement.cs (Fixed): Begin implementation of the fixed
28250         statement.
28251
28252         (Block.AddVariable): Return the VariableInfo on success and null
28253         on failure instead of true/false. 
28254
28255         * cs-parser.jay (foreach): Catch errors on variables already
28256         defined (we were ignoring this value before) and properly unwind
28257         the block hierarchy
28258
28259         (fixed_statement): grammar for the fixed statement.
28260
28261 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28262
28263         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28264         pointer types to be incretemented.
28265
28266         (SizeOf): Implement.
28267
28268         * cs-parser.jay (pointer_member_access): Implement
28269         expr->IDENTIFIER production.
28270
28271         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28272         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28273         on safe contexts.
28274
28275         (Unary): Implement indirection.
28276
28277         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28278         use in non-unsafe context).
28279
28280         (SimpleName.DoResolve): Check for pointers in field access on safe
28281         contexts. 
28282
28283         (Expression.LoadFromPtr): Factor the load-indirect code in this
28284         function.  This was duplicated in UnboxCast and ParameterReference
28285
28286 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28287
28288         * expression.cs (ComposedCast): report an error if a pointer cast
28289         is used in a safe region.
28290
28291         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28292         pointer type casts in unsafe context.
28293
28294         * codegen.cs (EmitContext): Set up IsUnsafe.
28295
28296         * cs-parser.jay (non_expression_type): Add productions for pointer
28297         casts. 
28298
28299         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28300         code.  We should not use force into static mode if the method is
28301         not virtual.  Fixes bug in MIS
28302
28303         * statement.cs (Do.Emit, While.Emit, For.Emit,
28304         Statement.EmitBoolExpression): Add support to Do and While to
28305         propagate infinite loop as `I do return' semantics.
28306
28307         Improve the For case to also test for boolean constants.
28308
28309         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28310         to the list of attributes we can add.
28311
28312         Remove `EmitContext' argument.
28313
28314         * class.cs (Method.Define): Apply parameter attributes.
28315         (Constructor.Define): Apply parameter attributes.
28316         (MethodCore.LabelParameters): Move here the core of labeling
28317         parameters. 
28318
28319         * support.cs (ReflectionParameters.ParameterModifier,
28320         InternalParameters.ParameterModifier): Use IsByRef on the type and
28321         only return the OUT bit for these parameters instead of in/out/ref
28322         flags.
28323
28324         This is because I miss-understood things.  The ParameterInfo.IsIn
28325         and IsOut represent whether the parameter has the [In] and [Out]
28326         attributes set.  
28327
28328 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28329
28330         * ecore.cs (FieldExpr.Emit): Release temporaries.
28331
28332         * assign.cs (LocalTemporary.Release): new function.
28333
28334         * codegen.cs (EmitContext.GetTemporaryStorage,
28335         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28336         temporary storage.  Now we can "put back" localbuilders when we
28337         are done with them
28338
28339 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28340
28341         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28342         need to make a copy of the variable to generate verifiable code.
28343
28344 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28345
28346         * driver.cs: Compute dynamically the system directory.
28347
28348         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28349         Slower, but more generally useful.  Used by the abstract
28350         registering implementation. 
28351
28352         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28353         the rules for the special rule on Type/instances.  First check if
28354         we have the same name, and if so, try that special static path
28355         rather than the instance path.
28356
28357 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28358
28359         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28360         for, while and if.
28361
28362         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28363         Enum, ValueType, Delegate or Array for non-corlib compiles.
28364
28365         * cs-tokenizer.cs: Catch long identifiers (645)
28366
28367         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28368         piece of code.
28369
28370         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28371         fix, we were returning too early, so we were not registering
28372         pending methods from abstract classes.
28373
28374         Do not register pending methods if the class is abstract.
28375
28376         * expression.cs (Conditional.DoResolve): Report circular implicit
28377         conversions when we neecd to compute it for conditional
28378         expressions. 
28379
28380         (Is.DoResolve): If the expression is always of the provided type,
28381         flag warning 183.  If the expression can not ever be of the
28382         provided type flag warning 184.
28383
28384         * class.cs: Catch 169 as well.
28385
28386         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28387         read. 
28388
28389 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28390
28391         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28392
28393 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28394
28395         * interface.cs: (PopulateMethod): Check for pointers being defined
28396         only if the unsafe context is active.
28397         (PopulateProperty): ditto.
28398         (PopulateIndexer): ditto.
28399
28400         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28401         specified.  If pointers are present, make sure that they are
28402         present in an unsafe context.
28403         (Constructor, Constructor.Define): ditto.
28404         (Field, Field.Define): ditto.
28405         (Property, Property.Define): ditto.
28406         (Event, Event.Define): ditto.
28407
28408         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28409         hashtable if there are classes or structs defined.
28410
28411         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28412         code, as the constant resolution moved.
28413
28414         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28415         the metadata, so we can flag error 133. 
28416
28417         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28418         pointer is being declared in an unsafe context.
28419
28420 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28421
28422         * modifiers.cs (Modifiers.Check): Require a Location argument.
28423         Report error 227 for Unsafe use.
28424
28425         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28426
28427         * statement.cs (For.Emit): If the test is null, then report that
28428         we do `return', as we wont reach anything afterwards.
28429
28430         (Switch.SwitchGoverningType): Track the expression that matched
28431         the conversion.
28432
28433         * driver.cs: Allow negative numbers as an error code to flag.
28434
28435         * cs-parser.jay: Handle 1551.
28436
28437         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28438
28439 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28440
28441         * cs-parser.jay: Report 1518 (type declaration can only contain
28442         class, struct, interface, enum or delegate)
28443
28444         (switch_label): Report 1523 (keywords `case' or `default' must
28445         preced code)
28446
28447         (opt_switch_sections): Report 1522 (empty switch)
28448
28449         * driver.cs: Report 1515 (response file specified multiple times)
28450         Report 1516 (Source file specified multiple times).
28451
28452         * expression.cs (Argument.Resolve): Signal 1510
28453
28454         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28455         access not allowed in static code)
28456
28457 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28458
28459         * typemanager.cs (IsPointerType): Utility method which we are going
28460         to need a lot.
28461
28462         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28463         the object type, so we take care of that.
28464
28465         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28466
28467         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28468         added to non-params parameters :-)
28469
28470         * typemanager.cs (CSharpName): Include 'void' type too. 
28471
28472         (void_ptr_type): Include in the set of core types.
28473
28474         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28475         duplicating code.
28476
28477         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28478         an unsafe context.
28479
28480         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28481         completely forgotten about it.
28482
28483 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28484
28485         * cs-parser.jay (pointer_type): Add. This begins our implementation
28486         of parsing rules for unsafe code.
28487
28488         (unsafe_statement): Implement.
28489
28490         (embedded_statement): Modify to include the above.
28491
28492         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28493
28494         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28495         if the current context is an unsafe one.
28496
28497         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28498         are handled differently, we need separate rules for them.
28499
28500         (local_variable_declaration): Update to use local_variable_pointer_type
28501         to allow variable declarations of unmanaged pointer types.
28502
28503         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28504         in unsafe contexts.
28505
28506         * ../errors/cs0214.cs : Add.
28507
28508 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28509
28510         * makefile: remove 'response' file when cleaning.
28511
28512 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28513
28514         * cs-parser.jay: Report 1524.
28515
28516 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28517
28518         * typemanager.cs (RegisterMethod): drop checking if we have
28519         registered this from here
28520
28521 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28522
28523         * class.cs (Method.EmitDestructor): Implement calling our base
28524         destructor. 
28525
28526         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28527         value of InFinally.
28528
28529         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28530         this routine and will wrap the call in a try/catch block.  Deal
28531         with the case.
28532
28533 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28534
28535         * ecore.cs (Expression.MemberLookup): instead of taking a
28536         parameter `same_type' that was used to tell whether we could
28537         access private members we compute our containing type from the
28538         EmitContext.
28539
28540         (FieldExpr): Added partial support for volatile fields.  This does
28541         not work for volatile fields exposed from assemblies, as I can not
28542         figure out how to extract the modreq from it.
28543
28544         Updated all the source files to use this.
28545
28546         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28547         because it is referenced by MemberLookup very often. 
28548
28549 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28550
28551         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28552         TypeBuilder.GetCustomAttributes to retrieve what we need.
28553
28554         Get rid of redundant default_member_attr_type as this is the same as
28555         default_member_type which already exists.
28556
28557         * interface.cs, attribute.cs : Update accordingly.
28558
28559 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28560
28561         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28562         work for TYpeBuilders though.  Ravi, can you please fix this?
28563
28564         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28565
28566         * expression.cs (Argument.Emit): Handle the case of ref objects
28567         being passed to ref functions;  
28568
28569         (ParameterReference.EmitLoad): Loads the content of the pointer
28570         without dereferencing.
28571
28572 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28573
28574         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28575
28576 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28577
28578         * class.cs (Indexer.DefineMethod): Incorporate the interface
28579         type in the name of the method if we are doing explicit interface
28580         implementation.
28581
28582         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28583
28584         (BetterConversion): Fix extremely trivial bug where we were referring to
28585         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28586         again !
28587
28588         * ../errors/bug16.cs : Add although we have fixed it.
28589
28590 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28591
28592         * expression.cs (BaseIndexer): Begin implementation.
28593
28594         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28595
28596         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28597         production directly to remove a shift/reduce, and implement
28598         explicit interface implementation.
28599
28600         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28601         after a floating point suffix.
28602
28603         * expression.cs (DoNumericPromotions): Improved the conversion for
28604         uint/uint.  If we have a constant, we avoid doing a typecast to a
28605         larger type.
28606
28607         * class.cs (Indexer): Implement explicit interface implementation
28608         for indexers.
28609
28610 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28611
28612         * class.cs: make the default instance constructor public and hidebysig.
28613
28614 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28615
28616         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28617         so we can call it from elsewhere.
28618
28619         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28620         we emit it internally if the class has a defined indexer; otherwise the user
28621         emits it by decorating the class definition with the DefaultMemberAttribute.
28622
28623         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28624         attribute is not used on a type which defines an indexer.
28625
28626         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28627         character when we skip whitespace.
28628
28629         * ../errors/cs0646.cs : Add.
28630
28631 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28632
28633         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28634         again. 
28635
28636         * makefile: Add practical target `mcs3.exe' which builds the third
28637         generation compiler. 
28638
28639         * expression.cs (New): Fix structures constructor calling.
28640
28641         * class.cs (Property, Method, Indexer): Emit Final flag on the
28642         method if we are an interface implementation and we are not
28643         abstract. 
28644
28645         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28646         whether this property is referencing a `base' method.
28647
28648         * expression.cs (Invocation.EmitCall): take an extra argument:
28649         is_base, this is used to determine whether the `call' or
28650         `callvirt' opcode should be used.
28651
28652
28653         * delegate.cs: update EmitCall.
28654
28655         * class.cs (Method.Define): Set NewSlot for the cases where we are
28656         not implementing an interface method.
28657
28658         (Property.Define): ditto.
28659
28660 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28661
28662         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28663         'r'.  Allows mcs to parse itself fully.
28664
28665 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28666
28667         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28668         of the number of initializers that require the InitializeArray method.
28669
28670         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28671         update the above field where necessary.
28672
28673         (MakeByteBlob): Update accordingly.
28674
28675         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28676         greater than 2.
28677
28678         (EmitDynamicInitializers): Update in accordance with the new optimization.
28679
28680         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28681         same OpCode applies.
28682
28683         * cs-parser.jay : Fix some glaring errors I introduced.
28684
28685 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28686
28687         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28688         so that we can check for name clashes there too.
28689
28690         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28691         for interface indexers.
28692
28693         * interfaces.cs (Define): Emit the default member attribute.
28694
28695         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28696         variable was being referred to while setting the value ;-)
28697
28698 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28699
28700         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28701         byte-by-byte information when we know the data is zero.
28702
28703         Make the block always a multiple of 4, because
28704         DefineInitializedData has a bug.
28705
28706         * assign.cs: Fix, we should assign from the temporary, not from
28707         the source. 
28708
28709         * expression.cs (MakeByteBlob): Fix my incorrect code.
28710
28711 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28712
28713         * typemanager.cs (EnumToUnderlying): This function is used to get
28714         the underlying type from an enumeration, because it does not
28715         always work. 
28716
28717         * constant.cs: Use the I4_S form for values between -128 and 127.
28718
28719         * statement.cs (Block.LookupLabel): Looks up a label.
28720         (Block): Drop support for labeled blocks.
28721
28722         (LabeledStatement): New kind of statement that represents a label
28723         only.
28724
28725         (Goto): Finally implement this bad boy.
28726
28727         * cs-parser.jay: Update to reflect new mechanism to implement
28728         labels.
28729
28730 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28731
28732         * codegen.cs (EmitContext.This): a codegen property that keeps the
28733         a single instance of this instead of creating many different this
28734         instances. 
28735
28736         * delegate.cs (Delegate.DoResolve): Update to use the property;
28737
28738         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28739
28740         * expression.cs (BaseAccess.DoResolve): Ditto.
28741
28742 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28743
28744         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28745         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28746
28747         (InitCoreTypes): Update accordingly.
28748
28749         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28750         so we can quickly store the state.
28751
28752         (ApplyAttributes): Set the correct implementation flags
28753         for InternalCall methods.
28754
28755 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28756
28757         * expression.cs (EmitCall): if a method is not virtual, then do
28758         not use callvirt on it.
28759
28760         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28761         user defined stuff) requires the use of stobj, which takes an
28762         address on the stack instead of an array and an index.  So emit
28763         the Ldelema operation for it.
28764
28765         (EmitStoreOpcode): Use stobj for valuetypes.
28766
28767         (UnaryMutator.EmitCode): Use the right 1 value depending on
28768         whether we are dealing with int64/uint64, float or doubles.
28769
28770         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28771         constructors that I implemented last night.
28772
28773         (Constructor.IsDefault): Fix to work properly for static
28774         constructors.
28775
28776         * cs-parser.jay (CheckDef): report method signature errors.
28777         Update error number 103 to be 132.
28778
28779         * decl.cs: New AdditionResult enumeration value: MethodExists.
28780         Although we do this check for methods later on in the semantic
28781         analysis, catching repeated default constructors is so easy that
28782         we catch these here. 
28783
28784         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28785         promotions code.
28786
28787         (ParameterReference.EmitAssign, Emit): handle
28788         bools as bytes.
28789
28790         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28791         (ArrayAccess.EmitStoreOpcode): ditto.
28792
28793         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28794
28795         * expression.cs (MakeByteBlob): Complete all the missing types
28796         (uint, short, ushort, byte, sbyte)
28797
28798         * class.cs: Only init instance field initializers on instance
28799         constructors. 
28800
28801         Rename `constructors' to instance_constructors. 
28802
28803         (TypeContainer.AddConstructor): Only add constructors to the list
28804         if it is not static.
28805
28806         Make sure that we handle default_static_constructor independently
28807         everywhere where we handle instance_constructors
28808
28809 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28810
28811         * class.cs: Do not lookup or create a base initializer for a
28812         static constructor.
28813
28814         (ConstructorInitializer.Resolve): use the proper type to lookup
28815         for constructors.
28816
28817         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28818
28819         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28820         in DeclSpace. 
28821
28822         * decl.cs: CloseType is now an virtual method, the default
28823         implementation just closes this type.
28824
28825 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28826
28827         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28828         to PreserveSig by default. Also emit HideBySig on such methods.
28829
28830         Basically, set the defaults to standard values.
28831
28832         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28833         argument, if candidate is better, it can't be worse than the best !
28834
28835         (Invocation): Re-write bits to differentiate between methods being
28836         applicable in their expanded form and their normal form - for params
28837         methods of course.
28838
28839         Get rid of use_standard everywhere as only standard conversions are allowed
28840         in overload resolution. 
28841
28842         More spec conformance.
28843
28844 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28845
28846         * driver.cs: Add --timestamp, to see where the compiler spends
28847         most of its time.
28848
28849         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28850         `this' in static code.
28851
28852         (SimpleName.DoResolve): Implement in terms of a helper function
28853         that allows static-references to be passed upstream to
28854         MemberAccess.
28855
28856         (Expression.ResolveWithSimpleName): Resolve specially simple
28857         names when called by MemberAccess to implement the special
28858         semantics. 
28859
28860         (Expression.ImplicitReferenceConversion): Handle conversions from
28861         Null to reference types before others, as Null's type is
28862         System.Object. 
28863
28864         * expression.cs (Invocation.EmitCall): Handle the special case of
28865         calling methods declared on a reference type from a ValueType
28866         (Base classes System.Object and System.Enum)
28867
28868         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28869         the left hand side is a TypeExpr, not on every enumeration. 
28870
28871         (Binary.Resolve): If types are reference types, then do a cast to
28872         object on operators != and == of both arguments.
28873
28874         * typemanager.cs (FindMembers): Extract instance and static
28875         members if requested.
28876
28877         * interface.cs (PopulateProperty): Use void_type instead of null
28878         as the return type for the setter method.
28879
28880         (PopulateIndexer): ditto.
28881
28882 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28883
28884         * support.cs (ReflectionParameters): Fix minor bug where we
28885         were examining the wrong parameter for the ParamArray attribute.
28886
28887         Cope with requests for the type of the parameter at position
28888         greater than the params parameter's. We now return the element
28889         type of the params array as that makes more sense.
28890
28891         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28892         accordingly as we no longer have to extract the element type
28893         ourselves.
28894
28895         (Invocation.OverloadResolve): Update.
28896
28897 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28898
28899         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28900         against IEnumerator, test whether the return value is a descendant
28901         of the IEnumerator interface.
28902
28903         * class.cs (Indexer.Define): Use an auxiliary method to implement
28904         the other bits of the method definition.  Begin support for
28905         explicit interface implementation.
28906
28907         (Property.DefineMethod): Use TypeManager.void_type instead of null
28908         for an empty return value.
28909
28910 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28911
28912         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28913         dealing with a FieldExpr which is composed of a FieldBuilder, in
28914         the code path we did extract the constant, but we should have
28915         obtained the underlying value to be able to cast it (otherwise we
28916         end up in an infinite loop, this is what Ravi was running into).
28917
28918         (ArrayCreation.UpdateIndices): Arrays might be empty.
28919
28920         (MemberAccess.ResolveMemberAccess): Add support for section
28921         14.5.4.1 that deals with the special case of E.I when E is a type
28922         and something else, that I can be a reference to a static member.
28923
28924         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28925         handle a particular array type to create byte blobs, it is just
28926         something we dont generate byteblobs for.
28927
28928         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28929         arguments. 
28930
28931         * location.cs (Push): remove the key from the hashtable that we
28932         are about to add.   This happens for empty files.
28933
28934         * driver.cs: Dispose files after we have parsed them.
28935
28936         (tokenize): new function that only runs the tokenizer on its
28937         input, for speed testing.
28938
28939 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28940
28941         * class.cs (Event.Define): Define the private field only if there
28942         are no accessors defined.
28943
28944         * expression.cs (ResolveMemberAccess): If there is no associated
28945         field with the event, that means we have an event defined with its
28946         own accessors and we should flag error cs0070 since transforming
28947         ourselves into a field is not valid in that case.
28948
28949         * ecore.cs (SimpleName.DoResolve): Same as above.
28950
28951         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28952         and charset to sane values.
28953
28954 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28955
28956         * assign.cs (DoResolve): Perform check on events only if they 
28957         are being accessed outside the declaring type.
28958
28959         * cs-parser.jay (event_declarations): Update rules to correctly
28960         set the type of the implicit parameter etc.
28961
28962         (add_accessor, remove_accessor): Set current local parameters.
28963
28964         * expression.cs (Binary): For delegate addition and subtraction,
28965         cast the return value from the method into the appropriate delegate
28966         type.
28967
28968 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28969
28970         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28971         of these as the workaround is unnecessary.
28972
28973         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28974         delegate data - none of that is needed at all.
28975
28976         Re-write bits to extract the instance expression and the delegate method
28977         correctly.
28978
28979         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28980         on delegates too.
28981
28982         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28983         of attaching attributes instead of duplicating code everywhere.
28984
28985         * everywhere : Update code to do attribute emission using the above method.
28986
28987 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28988
28989         * expression.cs (IsParamsMethodApplicable): if there are not
28990         parameters, return immediately.
28991
28992         * ecore.cs: The 0 literal can be implicity converted to an enum
28993         type. 
28994
28995         (SimpleName.DoResolve): First lookup the type, then lookup the
28996         members. 
28997
28998         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28999         want to get its address.  If the InstanceExpression is not
29000         addressable, store the result in a temporary variable, then get
29001         the address of it.
29002
29003         * codegen.cs: Only display 219 errors on warning level or above. 
29004
29005         * expression.cs (ArrayAccess): Make it implement the
29006         IMemoryLocation interface.
29007
29008         (Binary.DoResolve): handle the operator == (object a, object b)
29009         and operator != (object a, object b) without incurring into a
29010         BoxedCast (because 5 != o should never be performed).
29011
29012         Handle binary enumerator operators.
29013
29014         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29015         value type, otherwise use Ldelem_ref.
29016
29017         Use precomputed names;
29018
29019         (AddressOf): Implement address of
29020
29021         * cs-parser.jay (labeled_statement): Fix recursive block
29022         addition by reworking the production.
29023
29024         * expression.cs (New.DoEmit): New has a special case:
29025                 
29026                  If we are dealing with a ValueType, we have a few
29027                  situations to deal with:
29028                 
29029                     * The target of New is a ValueType variable, that is
29030                       easy, we just pass this as the variable reference
29031                 
29032                     * The target of New is being passed as an argument,
29033                       to a boxing operation or a function that takes a
29034                       ValueType.
29035                 
29036                       In this case, we need to create a temporary variable
29037                       that is the argument of New.
29038
29039
29040 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29041
29042         * rootcontext.cs (LookupType): Check that current_type is not null before
29043         going about looking at nested types.
29044
29045         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29046         not implement the IAssignMethod interface any more.
29047
29048         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29049         where we tranform them into FieldExprs if they are being resolved from within
29050         the declaring type.
29051
29052         * ecore.cs (SimpleName.DoResolve): Do the same here.
29053
29054         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29055
29056         * ../errors/bug10.cs : Add.
29057
29058         * ../errors/cs0070.cs : Add.
29059
29060         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29061
29062         * assign.cs : Get rid of EventIsLocal everywhere.
29063
29064 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29065
29066         * ecore.cs (ConvertIntLiteral): finished the implementation.
29067
29068         * statement.cs (SwitchLabel): Convert the value we are using as a
29069         key before looking up the table.
29070
29071 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29072
29073         * codegen.cs (EmitTopBlock): Require a Location argument now.
29074
29075         * cs-parser.jay (constructor_declarator): We need to setup
29076         current_local_parameters before we parse the
29077         opt_constructor_initializer, to allow the variables to be bound
29078         to the constructor arguments.
29079
29080         * rootcontext.cs (LookupType): First lookup nested classes in our
29081         class and our parents before we go looking outside our class.
29082
29083         * expression.cs (ConstantFold): Extract/debox the values at the
29084         beginnning. 
29085
29086         * rootcontext.cs (EmitCode): Resolve the constants first before we
29087         resolve the types.  This is not really needed, but it helps debugging.
29088
29089         * statement.cs: report location.
29090
29091         * cs-parser.jay: pass location to throw statement.
29092
29093         * driver.cs: Small bug fix.
29094
29095         * report.cs: Updated format to be 4-zero filled digits.
29096
29097 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29098
29099         * expression.cs (CheckIndices): Fix minor bug where the wrong
29100         variable was being referred to ;-)
29101
29102         (DoEmit): Do not call EmitStaticInitializers when the 
29103         underlying type is System.Object.
29104
29105 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29106
29107         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29108         and do the usual workaround for SRE.
29109
29110         * class.cs (MyEventBuilder.EventType): New member to get at the type
29111         of the event, quickly.
29112
29113         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29114
29115         * assign.cs (Assign.DoResolve): Handle the case when the target
29116         is an EventExpr and perform the necessary checks.
29117
29118         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29119         interface.
29120
29121         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29122
29123         (EventExpr): Set the type in the constructor itself since we 
29124         are meant to be born fully resolved.
29125
29126         (EventExpr.Define): Revert code I wrote earlier.
29127                 
29128         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29129         instance expression is null. The instance expression is a This in that case
29130         or a null, depending on whether it is a static method or not.
29131
29132         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29133         refers to more than one method.
29134
29135         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29136         and accordingly flag errors.
29137
29138 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29139
29140         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29141
29142 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29143
29144         * location.cs (ToString): Provide useful rutine.
29145
29146 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29147
29148         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29149         objects, return the actual integral boxed.
29150
29151         * statement.cs (SwitchLabel): define an ILLabel for each
29152         SwitchLabel. 
29153
29154         (Switch.CheckSwitch): If the value is a Literal, extract
29155         the underlying literal.
29156
29157         Also in the unused hashtable we had, add the SwitchLabel so we can
29158         quickly look this value up.
29159
29160         * constant.cs: Implement a bunch of new constants.  Rewrite
29161         Literal based on this.  Made changes everywhere to adapt to this.
29162
29163         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29164         dereferencing array only once, and also copes with enumrations.
29165
29166         bytes are two bytes wide, not one.
29167
29168         (Cast): Perform constant conversions.
29169
29170         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29171         wrappers to the literals here.
29172
29173         * expression.cs (DoNumericPromotions): long literals can converted
29174         to ulong implicity (this is taken care of elsewhere, but I was
29175         missing this spot).
29176
29177         * ecore.cs (Expression.Literalize): Make the return type Literal,
29178         to improve type checking.
29179
29180         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29181
29182 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29183
29184         * literal.cs: Revert code from ravi that checked the bounds.  The
29185         bounds are sane by the definition of the type itself. 
29186
29187         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29188         need to actually look up in our parent hierarchy for interfaces
29189         implemented. 
29190
29191         * const.cs: Use the underlying type for enumerations
29192
29193         * delegate.cs: Compute the basename for the delegate creation,
29194         that should fix the delegate test case, and restore the correct
29195         Type Lookup semantics in rootcontext
29196
29197         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29198         referencing a nested type with the Reflection API is using the "+"
29199         sign. 
29200
29201         * cs-parser.jay: Do not require EOF token at the end.
29202
29203 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29204
29205         * rootcontext.cs (LookupType): Concatenate type names with
29206         a '.' instead of a '+' The test suite passes again.
29207
29208         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29209         field of the enumeration.
29210
29211         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29212         the case when the member is an EventExpr.
29213
29214         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29215         static has an associated instance expression.
29216
29217         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29218
29219         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29220
29221         * class.cs (Event.Define): Register event and perform appropriate checks
29222         for error #111.
29223
29224         We define the Add and Remove methods even if the use provides none because
29225         in that case, we provide default implementations ourselves.
29226
29227         Define a private field of the type of the event. This is done by the CSC compiler
29228         and we should be doing it too ;-)
29229
29230         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29231         More methods we use in code we generate.
29232
29233         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29234         is important.
29235
29236         (InitCoreTypes): Update accordingly for the above.
29237
29238         * class.cs (Event.Emit): Generate code for default accessors that we provide
29239
29240         (EmitDefaultMethod): Do the job in the above.
29241
29242         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29243         appropriate place.
29244
29245 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29246
29247         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29248         builders even if we were missing one.
29249
29250         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29251         pass the Basename as our class name instead of the Name.  The
29252         basename will be correctly composed for us.
29253
29254         * parameter.cs (Paramters): Now takes a Location argument.
29255
29256         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29257         make all the code call directly LookupType in RootContext and take
29258         this chance to pass the Location information everywhere.
29259
29260         * Everywhere: pass Location information.
29261
29262 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29263
29264         * class.cs (Constructor.Define): Updated way of detecting the
29265         length of the parameters.
29266
29267         (TypeContainer.DefineType): Use basename as the type name for
29268         nested types.
29269
29270         (TypeContainer.Define): Do not recursively define types here, as
29271         definition is taken care in order by the RootContext.
29272
29273         * tree.cs: Keep track of namespaces in a per-file basis.
29274
29275         * parameter.cs (Parameter.ComputeSignature): Update to use
29276         DeclSpace. 
29277
29278         (Parameters.GetSignature): ditto.
29279
29280         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29281         instead of a TypeContainer.
29282
29283         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29284         resolve names.  Because we need to be resolve in our context, not
29285         our parents.
29286
29287         * driver.cs: Implement response files.
29288
29289         * class.cs (TypeContainer.DefineType): If we are defined, do not
29290         redefine ourselves.
29291
29292         (Event.Emit): Emit the code for add/remove handlers.
29293         (Event.Define): Save the MethodBuilders for add/remove.
29294
29295         * typemanager.cs: Use pair here too.
29296
29297         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29298         DictionaryEntry requires the first argument to be non-null.  
29299
29300         (enum_declaration): Compute full name for registering the
29301         enumeration.
29302
29303         (delegate_declaration): Instead of using
29304         formal_parameter_list, use opt_formal_parameter_list as the list
29305         can be empty.
29306
29307         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29308         (EventParsing): New property that controls whether `add' and
29309         `remove' are returned as tokens or identifiers (for events);
29310
29311 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29312
29313         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29314         use MyEventBuilder only and let it wrap the real builder for us.
29315
29316         (MyEventBuilder): Revamp constructor etc.
29317
29318         Implement all operations that we perform on EventBuilder in precisely the same
29319         way here too.
29320
29321         (FindMembers): Update to use the EventBuilder member.
29322
29323         (Event.Emit): Update accordingly.
29324
29325 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29326
29327         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29328         by calling the appropriate methods.
29329
29330         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29331         useful.
29332
29333         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29334
29335 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29336
29337         * delegate.cs (Delegate.Populate): Check that the return type
29338         and various parameters types are indeed accessible.
29339
29340         * class.cs (Constructor.Define): Same here.
29341
29342         (Field.Define): Ditto.
29343
29344         (Event.Define): Ditto.
29345
29346         (Operator.Define): Check that the underlying Method defined itself
29347         correctly - so it's MethodBuilder should not be null.
29348
29349         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29350         expression happens to be null.
29351
29352         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29353         members but as of now we don't seem to be able to do anything really useful with it.
29354
29355         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29356         not the EventBuilder.
29357
29358 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29359
29360         * cs-tokenizer.cs: Add support for defines.
29361         Add support for #if, #elif, #else, #endif
29362
29363         (eval_var): evaluates a variable.
29364         (eval): stubbed for evaluating functions.
29365
29366         * cs-parser.jay: Pass the defines information
29367
29368         * driver.cs: Add --define command line option.
29369
29370         * decl.cs: Move MemberCore here.
29371
29372         Make it the base class for DeclSpace.  This allows us to catch and
29373         report 108 and 109 for everything now.
29374
29375         * class.cs (TypeContainer.Define): Extract all the members
29376         before populating and emit the warning 108 (new keyword required
29377         to override) instead of having each member implement this.
29378
29379         (MemberCore.Define): New abstract method, we will be using this in
29380         the warning reporting engine in Populate.
29381
29382         (Operator.Define): Adjust to new MemberCore protocol. 
29383
29384         * const.cs (Const): This does not derive from Expression, it is a
29385         temporary object we use to create fields, it is a MemberCore. 
29386
29387         * class.cs (Method.Define): Allow the entry point to be in a
29388         specific class.
29389
29390         * driver.cs: Rewrite the argument handler to clean it up a bit.
29391
29392         * rootcontext.cs: Made it just an auxiliary namespace feature by
29393         making everything static.
29394
29395         * driver.cs: Adapt code to use RootContext type name instead of
29396         instance variable.
29397
29398         * delegate.cs: Remove RootContext argument.
29399
29400         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29401         argument. 
29402
29403         * class.cs (Event.Define): The lookup can fail.
29404
29405         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29406
29407         * expression.cs: Resolve the this instance before invoking the code.
29408
29409 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29410
29411         * cs-parser.jay: Add a production in element_access that allows
29412         the thing to become a "type" reference.  This way we can parse
29413         things like "(string [])" as a type.
29414
29415         Note that this still does not handle the more complex rules of
29416         casts. 
29417
29418
29419         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29420
29421         * ecore.cs: (CopyNewMethods): new utility function used to
29422         assemble the list of methods from running FindMembers.
29423
29424         (MemberLookup): Rework FindMembers so that 
29425
29426 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29427
29428         * class.cs (TypeContainer): Remove Delegates who fail to be
29429         defined.
29430
29431         * delegate.cs (Populate): Verify that we dont get null return
29432         values.   TODO: Check for AsAccessible.
29433
29434         * cs-parser.jay: Use basename to emit error 574 (destructor should
29435         have the same name as container class), not the full name.
29436
29437         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29438         possible representation.  
29439
29440         Also implements integer type suffixes U and L.
29441
29442 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29443
29444         * expression.cs (ArrayCreation.DoResolve): We need to do the
29445         argument resolution *always*.
29446
29447         * decl.cs: Make this hold the namespace.  Hold the root context as
29448         well.
29449         (LookupType): Move here.
29450
29451         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29452
29453         * location.cs (Row, Name): Fixed the code, it was always returning
29454         references to the first file.
29455
29456         * interface.cs: Register properties defined through interfaces.
29457
29458         * driver.cs: Add support for globbing on the command line
29459
29460         * class.cs (Field): Make it derive from MemberCore as well.
29461         (Event): ditto.
29462
29463 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29464
29465         * class.cs (Event::Define): Check that the type of the event is a delegate
29466         type else flag error #66.
29467
29468         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29469         same.
29470
29471         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29472         values of EntryPoint, CharSet etc etc.
29473
29474         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29475
29476         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29477         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29478         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29479         which needs this to do its work.
29480
29481         * ../errors/cs0066.cs : Add.
29482
29483 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29484
29485         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29486         helper functions.
29487
29488         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29489         clears out the parameters field.
29490         (MemberSignatureCompare): Cleanup
29491
29492         (MemberCore): New base class used to share code between MethodCore
29493         and Property.
29494
29495         (RegisterRequiredImplementations) BindingFlags.Public requires
29496         either BindingFlags.Instace or Static.  Use instance here.
29497
29498         (Property): Refactored code to cope better with the full spec.
29499
29500         * parameter.cs (GetParameterInfo): Return an empty array instead
29501         of null on error.
29502
29503         * class.cs (Property): Abstract or extern properties have no bodies.
29504
29505         * parameter.cs (GetParameterInfo): return a zero-sized array.
29506
29507         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29508         method modifier validation to the typecontainer so we can reuse
29509         this on properties.
29510
29511         (MethodCore.ParameterTypes): return an empty sized array of types.
29512
29513         (Property.Define): Test property modifier validity.
29514
29515         Add tests for sealed/override too.
29516
29517         (Method.Emit): abstract or extern methods have no bodies.
29518
29519 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29520
29521         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29522         thing.
29523
29524         (Method::Define, ::Emit): Modify accordingly.
29525
29526         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29527
29528         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29529
29530         * makefile: Pass in /unsafe.
29531
29532 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29533
29534         * class.cs (MakeKey): Kill routine.
29535
29536         * class.cs (TypeContainer.Define): Correctly define explicit
29537         method implementations (they require the full interface name plus
29538         the method name).
29539
29540         * typemanager.cs: Deply the PtrHashtable here and stop using the
29541         lame keys.  Things work so much better.
29542
29543         This of course broke everyone who depended on `RegisterMethod' to
29544         do the `test for existance' test.  This has to be done elsewhere.
29545
29546         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29547         the object stupid Equals method (because, that like fails all over
29548         the place).  We still do not use it.
29549
29550         * class.cs (TypeContainer.SetRequiredInterface,
29551         TypeContainer.RequireMethods): Killed these two routines and moved
29552         all the functionality to RegisterRequiredImplementations.
29553
29554         (TypeContainer.RegisterRequiredImplementations): This routine now
29555         registers all the implementations required in an array for the
29556         interfaces and abstract methods.  We use an array of structures
29557         which can be computed ahead of time to reduce memory usage and we
29558         also assume that lookups are cheap as most classes will not
29559         implement too many interfaces.
29560
29561         We also avoid creating too many MethodSignatures.
29562
29563         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29564         clear the "pending" bit if we find that there are problems with
29565         the declaration.
29566
29567         (TypeContainer.VerifyPendingMethods): Update to report errors of
29568         methods that look like implementations but are not.
29569
29570         (TypeContainer.Define): Add support for explicit interface method
29571         implementation. 
29572
29573 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29574
29575         * typemanager.cs: Keep track of the parameters here instead of
29576         being a feature of the TypeContainer.
29577
29578         * class.cs: Drop the registration of parameters here, as
29579         InterfaceMethods are also interface declarations.
29580
29581         * delegate.cs: Register methods with the TypeManager not only with
29582         the TypeContainer.  This code was buggy.
29583
29584         * interface.cs: Full registation here.
29585
29586 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29587
29588         * expression.cs: Remove reducer for binary expressions, it can not
29589         be done this way.
29590
29591         * const.cs: Put here the code that used to go into constant.cs
29592
29593         * constant.cs: Put here the code for constants, this is a new base
29594         class for Literals.
29595
29596         * literal.cs: Make Literal derive from Constant.
29597
29598 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29599
29600         * statement.cs (Return.Emit): Report error 157 if the user
29601         attempts to return from a finally block.
29602
29603         (Return.Emit): Instead of emitting a return, jump to the end of
29604         the function.
29605
29606         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29607         LocalBuilder to store the result of the function.  ReturnLabel is
29608         the target where we jump.
29609
29610
29611 2001-12-09  Radek Doulik  <rodo@ximian.com>
29612
29613         * cs-parser.jay: remember alias in current namespace
29614
29615         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29616         namespaces
29617
29618         * class.cs (LookupAlias): lookup alias in my_namespace
29619
29620         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29621         aliases hashtable
29622         (LookupAlias): lookup alias in this and if needed in parent
29623         namespaces
29624
29625 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29626
29627         * support.cs: 
29628
29629         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29630         making things static.  I need this to avoid passing the
29631         TypeContainer when calling ParameterType.
29632
29633         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29634         that did string manipulation to compute the type and then call
29635         GetType.  Use Parameter.ParameterType instead.
29636
29637         * cs-tokenizer.cs: Consume the suffix for floating values.
29638
29639         * expression.cs (ParameterReference): figure out whether this is a
29640         reference parameter or not.  Kill an extra variable by computing
29641         the arg_idx during emission.
29642
29643         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29644         function that returns whether a parameter is an out/ref value or not.
29645
29646         (Parameter.ParameterType): The type of the parameter (base,
29647         without ref/out applied).
29648
29649         (Parameter.Resolve): Perform resolution here.
29650         (Parameter.ExternalType): The full type (with ref/out applied).
29651
29652         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29653         support for expressions on the using statement.
29654
29655 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29656
29657         * statement.cs (Using.EmitLocalVariableDecls): Split the
29658         localvariable handling of the using statement.
29659
29660         (Block.EmitMeta): Keep track of variable count across blocks.  We
29661         were reusing slots on separate branches of blocks.
29662
29663         (Try.Emit): Emit the general code block, we were not emitting it. 
29664
29665         Check the type of the declaration to be an IDisposable or
29666         something that can be implicity converted to it. 
29667
29668         Emit conversions if required.
29669
29670         * ecore.cs (EmptyExpression): New utility class.
29671         (Expression.ImplicitConversionExists): New utility function.
29672
29673 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29674
29675         * statement.cs (Using): Implement.
29676
29677         * expression.cs (LocalVariableReference): Support read only variables.
29678
29679         * statement.cs: Remove the explicit emit for the Leave opcode.
29680         (VariableInfo): Add a readonly field.
29681
29682 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29683
29684         * ecore.cs (ConvCast): new class used to encapsulate the various
29685         explicit integer conversions that works in both checked and
29686         unchecked contexts.
29687
29688         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29689         properly generate the overflow opcodes.
29690
29691 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29692
29693         * statement.cs: The correct type for the EmptyExpression is the
29694         element_type, not the variable type.  Ravi pointed this out.
29695
29696 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29697
29698         * class.cs (Method::Define): Handle PInvoke methods specially
29699         by using DefinePInvokeMethod instead of the usual one.
29700
29701         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29702         above to do the task of extracting information and defining the method.
29703
29704 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29705
29706         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29707         of the condition for string type.
29708
29709         (Emit): Move that here. 
29710
29711         (ArrayCreation::CheckIndices): Keep string literals in their expression
29712         form.
29713
29714         (EmitDynamicInitializers): Handle strings appropriately.
29715
29716 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29717
29718         * codegen.cs (EmitContext): Replace multiple variables with a
29719         single pointer to the current Switch statement.
29720
29721         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29722         EmitContext.
29723
29724 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29725
29726         * statement.cs 
29727
29728         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29729         default'.
29730
29731         (Foreach.Emit): Foreach on arrays was not setting
29732         up the loop variables (for break/continue).
29733
29734         (GotoCase): Semi-implented.
29735
29736 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29737
29738         * attribute.cs (CheckAttribute): Handle system attributes by using
29739         Attribute.GetAttributes to examine information we need.
29740
29741         (GetValidPlaces): Same here.
29742
29743         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29744
29745         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29746
29747         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29748
29749         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29750
29751         (Method::Emit): Handle the case when we are a PInvoke method.
29752
29753 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29754
29755         * expression.cs: Use ResolveWithSimpleName on compound names.
29756
29757 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29758
29759         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29760         before trying to reduce it.
29761
29762         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29763
29764         * constant.cs (LookupConstantValue): Implement.
29765
29766         (EmitConstant): Use the above in emitting the constant.
29767
29768         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29769         that are user-defined by doing a LookupConstantValue on them.
29770
29771         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29772         too, like above.
29773
29774 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29775
29776         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29777
29778         (BaseAccess.DoResolve): Implement.
29779
29780         (MemberAccess.DoResolve): Split this routine into a
29781         ResolveMemberAccess routine that can be used independently
29782
29783 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29784
29785         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29786         As that share bits of the implementation.  Is returns a boolean,
29787         while As returns the Type that is being probed.
29788
29789 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29790
29791         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29792         instead of a Literal - much easier.
29793
29794         (EnumInTransit): Remove - utterly useless :-)
29795
29796         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29797
29798         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29799
29800         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29801         chain when we have no associated expression.
29802
29803 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29804
29805         * constant.cs (Define): Use Location while reporting the errror.
29806
29807         Also emit a warning when 'new' is used and there is no inherited
29808         member to hide.
29809
29810         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29811         populated.
29812
29813         (LookupEnumValue): Implement to lookup an enum member's value and define it
29814         if necessary.
29815
29816         (Populate): Re-write accordingly to use the above routine.
29817
29818 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29819
29820         * expression.cs (This): Fix prototype for DoResolveLValue to
29821         override the base class DoResolveLValue.
29822
29823         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29824         declarations) 
29825
29826         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29827         (we need to load the address of the field here).  This fixes
29828         test-22. 
29829
29830         (FieldExpr.DoResolveLValue): Call the DoResolve
29831         function to initialize the Instance expression.
29832
29833         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29834         correctly the GetEnumerator operation on a value type.
29835
29836         * cs-parser.jay: Add more simple parsing error catches.
29837
29838         * statement.cs (Switch): Add support for string switches.
29839         Handle null specially.
29840
29841         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29842
29843 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29844
29845         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29846
29847         (declare_local_constant): New helper function.
29848
29849         * statement.cs (AddConstant): Keep a separate record of constants
29850
29851         (IsConstant): Implement to determine if a variable is a constant.
29852
29853         (GetConstantExpression): Implement.
29854
29855         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29856
29857         * statement.cs (IsVariableDefined): Re-write.
29858
29859 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29860
29861         * class.cs (TypeContainer::FindMembers): Look for constants
29862         in the case when we are looking for MemberTypes.Field
29863
29864         * expression.cs (MemberAccess::DoResolve): Check that in the
29865         case we are a FieldExpr and a Literal, we are not being accessed
29866         by an instance reference.
29867
29868         * cs-parser.jay (local_constant_declaration): Implement.
29869
29870         (declaration_statement): Implement for constant declarations.
29871
29872 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29873
29874         * statement.cs (Switch): Catch double defaults.
29875
29876         (Switch): More work on the switch() statement
29877         implementation.  It works for integral values now, need to finish
29878         string support.
29879
29880
29881 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29882
29883         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29884         integer literals into other integer literals.  To be used by
29885         switch. 
29886
29887 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29888
29889         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29890         some memory.
29891
29892         (EmitDynamicInitializers): Cope with the above since we extract data
29893         directly from ArrayData now.
29894
29895         (ExpectInitializers): Keep track of whether initializers are mandatory
29896         or not.
29897
29898         (Bounds): Make it a hashtable to prevent the same dimension being 
29899         recorded for every element in that dimension.
29900
29901         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29902         from being found.
29903
29904         Also fix bug which was causing the indices to be emitted in the reverse
29905         order.
29906
29907 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29908
29909         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29910         unfinished.  They do not work, because the underlying code is
29911         sloppy.
29912
29913 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29914
29915         * cs-parser.jay: Remove bogus fixme.
29916
29917         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29918         on Switch statement.
29919
29920 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29921
29922         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29923         the same. 
29924
29925         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29926         parameter. Apparently, any expression is allowed. 
29927
29928         (ValidateInitializers): Update accordingly.
29929
29930         (CheckIndices): Fix some tricky bugs thanks to recursion.
29931
29932         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29933         I was being completely brain-dead.
29934
29935         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29936         and re-write acordingly.
29937
29938         (DelegateInvocation): Re-write accordingly.
29939
29940         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29941
29942         (MakeByteBlob): Handle types more correctly.
29943
29944         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29945         initialization from expressions but it is incomplete because I am a complete
29946         Dodo :-|
29947
29948 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29949
29950         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29951         on If.  Basically, we have to return `true' (ie, we do return to
29952         our caller) only if both branches of the if return.
29953
29954         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29955         short-circuit operators, handle them as short circuit operators. 
29956
29957         (Cast.DoResolve): Resolve type.
29958         (Cast.Cast): Take an expression as the target type.
29959
29960         * cs-parser.jay (cast_expression): Remove old hack that only
29961         allowed a limited set of types to be handled.  Now we take a
29962         unary_expression and we resolve to a type during semantic
29963         analysis.
29964
29965         Use the grammar productions from Rhys to handle casts (this is
29966         not complete like Rhys syntax yet, we fail to handle that corner
29967         case that C# has regarding (-x), but we will get there.
29968
29969 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29970
29971         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29972         field which is an array type.
29973
29974         * cs-parser.jay (declare_local_variables): Support array initialization too.
29975
29976         * typemanager.cs (MakeKey): Implement.
29977
29978         (everywhere): Use the above appropriately.
29979
29980         * cs-parser.jay (for_statement): Update for array initialization while
29981         declaring variables.
29982
29983         * ecore.cs : The error message was correct, it's the variable's names that
29984         were misleading ;-) Make the code more readable.
29985
29986         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29987         the correct type etc.
29988
29989         (ConvertExplicit): Handle Enum types by examining the underlying type.
29990
29991 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29992
29993         * parameter.cs (GetCallingConvention): Always return
29994         CallingConventions.Standard for now.
29995
29996 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29997
29998         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29999         and `r' after calling DoNumericPromotions.
30000
30001         * ecore.cs: Fix error message (the types were in the wrong order).
30002
30003         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30004         BindingFlags.Instance as well 
30005
30006         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30007         implicit int literal conversion in an empty cast so that we
30008         propagate the right type upstream.
30009
30010         (UnboxCast): new class used to unbox value types.
30011         (Expression.ConvertExplicit): Add explicit type conversions done
30012         by unboxing.
30013
30014         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30015         the target type before applying the implicit LongLiterals to ULong
30016         literal cast.
30017
30018 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30019
30020         * cs-parser.jay (for_statement): Reworked the way For works: now
30021         we declare manually any variables that are introduced in
30022         for_initializer to solve the problem of having out-of-band code
30023         emition (that is what got for broken).
30024
30025         (declaration_statement): Perform the actual variable declaration
30026         that used to be done in local_variable_declaration here.
30027
30028         (local_variable_declaration): Do not declare anything, just pass
30029         the information on a DictionaryEntry
30030
30031 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30032
30033         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30034         re-write of the logic to now make it recursive.
30035
30036         (UpdateIndices): Re-write accordingly.
30037
30038         Store element data in a separate ArrayData list in the above methods.
30039
30040         (MakeByteBlob): Implement to dump the array data into a byte array.
30041
30042 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30043
30044         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30045         into CheckIndices.
30046
30047         * constant.cs (Define): Implement.
30048
30049         (EmitConstant): Re-write fully.
30050
30051         Pass in location info.
30052
30053         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30054         respectively.
30055
30056         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30057         DictionaryEntry since we need location info too.
30058
30059         (constant_declaration): Update accordingly.
30060
30061         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30062         code into another method : UpdateIndices.
30063
30064 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30065
30066         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30067         some type checking etc.
30068
30069 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30070
30071         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30072         bits to provide dimension info if the user skips doing that.
30073
30074         Update second constructor to store the rank correctly.
30075
30076 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30077
30078         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30079         and try to implement.
30080
30081         * ../errors/cs0150.cs : Add.
30082
30083         * ../errors/cs0178.cs : Add.
30084
30085 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30086
30087         * statement.cs: Implement foreach on multi-dimensional arrays. 
30088
30089         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30090         name of the params argument.
30091
30092         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30093         initializing the array.
30094
30095         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30096         we can use this elsewhere.
30097
30098         * statement.cs: Finish implementation of foreach for single
30099         dimension arrays.
30100
30101         * cs-parser.jay: Use an out-of-band stack to pass information
30102         around, I wonder why I need this.
30103
30104         foreach_block: Make the new foreach_block the current_block.
30105
30106         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30107         function used to return a static Parameters structure.  Used for
30108         empty parameters, as those are created very frequently.
30109
30110         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30111
30112 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30113
30114         * interface.cs : Default modifier is private, not public. The
30115         make verify test passes again.
30116
30117 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30118
30119         * support.cs (ReflectionParameters): Fix logic to determine
30120         whether the last parameter is a params one. Test 9 passes again.
30121
30122         * delegate.cs (Populate): Register the builders we define with
30123         RegisterParameterForBuilder. Test 19 passes again.
30124
30125         * cs-parser.jay (property_declaration): Reference $6 instead
30126         of $$ to get at the location.
30127
30128         (indexer_declaration): Similar stuff.
30129
30130         (attribute): Ditto.
30131
30132         * class.cs (Property): Register parameters for the Get and Set methods
30133         if they exist. Test 23 passes again.
30134
30135         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30136         call to EmitArguments as we are sure there aren't any params arguments. 
30137         Test 32 passes again.
30138
30139         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30140         IndexOutOfRangeException. 
30141
30142         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30143         Test 33 now passes again.
30144
30145 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30146
30147         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30148         broke a bunch of things.  Will have to come up with a better way
30149         of tracking locations.
30150
30151         * statement.cs: Implemented foreach for single dimension arrays.
30152
30153 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30154
30155         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30156         an error.  This removes the lookup from the critical path.
30157
30158         * cs-parser.jay: Removed use of temporary_loc, which is completely
30159         broken. 
30160
30161 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30162
30163         * support.cs (ReflectionParameters.ParameterModifier): Report
30164         whether the argument is a PARAMS argument or not.
30165
30166         * class.cs: Set the attribute `ParamArrayAttribute' on the
30167         parameter argument.
30168
30169         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30170         and cons_param_array_attribute (ConstructorInfo for
30171         ParamArrayAttribute)., 
30172
30173         * codegen.cs: Emit the return using the `Return' statement, that
30174         way we can report the error correctly for missing return values. 
30175
30176         * class.cs (Method.Emit): Clean up.
30177
30178         * expression.cs (Argument.Resolve): Take another argument: the
30179         location where this argument is used.  Notice that this is not
30180         part of the "Argument" class as to reduce the size of the
30181         structure (we know the approximate location anyways).
30182
30183         Test if the argument is a variable-reference, if not, then
30184         complain with a 206.
30185
30186         (Argument.Emit): Emit addresses of variables.
30187
30188         (Argument.FullDesc): Simplify.
30189
30190         (Invocation.DoResolve): Update for Argument.Resolve.
30191
30192         (ElementAccess.DoResolve): ditto.
30193
30194         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30195         method should be virtual, as this method is always virtual.
30196
30197         (NewDelegate.DoResolve): Update for Argument.Resolve.
30198
30199         * class.cs (ConstructorInitializer.DoResolve): ditto.
30200
30201         * attribute.cs (Attribute.Resolve): ditto.
30202
30203 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30204
30205         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30206
30207         * expression.cs (ParameterReference): Drop IStackStorage and implement
30208         IAssignMethod instead. 
30209
30210         (LocalVariableReference): ditto.
30211
30212         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30213         IAssignMethod instead. 
30214
30215 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30216
30217         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30218         enumerations that are used in heavily used structures derive from
30219         byte in a laughable and pathetic attempt to reduce memory usage.
30220         This is the kind of pre-optimzations that you should not do at
30221         home without adult supervision.
30222
30223         * expression.cs (UnaryMutator): New class, used to handle ++ and
30224         -- separatedly from the other unary operators.  Cleans up the
30225         code, and kills the ExpressionStatement dependency in Unary.
30226
30227         (Unary): Removed `method' and `Arguments' from this class, making
30228         it smaller, and moving it all to SimpleCall, so I can reuse this
30229         code in other locations and avoid creating a lot of transient data
30230         strucutres when not required.
30231
30232         * cs-parser.jay: Adjust for new changes.
30233
30234 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30235
30236         * enum.cs (Enum.Populate): If there is a failure during
30237         definition, return
30238
30239         * cs-parser.jay (opt_enum_base): we used to catch type errors
30240         here, but this is really incorrect.  The type error should be
30241         catched during semantic analysis.
30242
30243 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30244
30245         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30246         current_local_parameters as expected since I, in my stupidity, had forgotten
30247         to do this :-)
30248
30249         * attribute.cs (GetValidPlaces): Fix stupid bug.
30250
30251         * class.cs (Method::Emit): Perform check on applicability of attributes.
30252
30253         (Constructor::Emit): Ditto.
30254
30255         (Field::Emit): Ditto.
30256
30257         (Field.Location): Store location information.
30258
30259         (Property, Event, Indexer, Operator): Ditto.
30260
30261         * cs-parser.jay (field_declaration): Pass in location for each field.
30262
30263         * ../errors/cs0592.cs : Add.
30264
30265 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30266
30267         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30268
30269         (InitCoreTypes): Update accordingly.
30270
30271         (RegisterAttrType, LookupAttr): Implement.
30272
30273         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30274         info about the same.
30275
30276         (Resolve): Update to populate the above as necessary.
30277
30278         (Error592): Helper.
30279
30280         (GetValidPlaces): Helper to the above.
30281
30282         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30283
30284         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30285
30286 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30287
30288         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30289
30290         * ../errors/cs0617.cs : Add.
30291
30292 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30293
30294         * enum.cs (Emit): Rename to Populate to be more consistent with what
30295         we expect it to do and when exactly it is called.
30296
30297         * class.cs, rootcontext.cs : Update accordingly.
30298
30299         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30300         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30301
30302         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30303
30304         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30305         of a fieldinfo using the above, when dealing with a FieldBuilder.
30306
30307 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30308
30309         * ../errors/cs0031.cs : Add.
30310
30311         * ../errors/cs1008.cs : Add.
30312
30313         * ../errrors/cs0543.cs : Add.
30314
30315         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30316         enum type.
30317
30318         (FindMembers): Implement.
30319
30320         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30321         enums and delegates too.
30322
30323         (enum_types): Rename to builder_to_enum.
30324
30325         (delegate_types): Rename to builder_to_delegate.
30326
30327         * delegate.cs (FindMembers): Implement.
30328
30329 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30330
30331         * typemanager.cs (IsEnumType): Implement.
30332
30333         * enum.cs (Emit): Re-write parts to account for the underlying type
30334         better and perform checking etc.
30335
30336         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30337         of the underlying type.
30338
30339         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30340         value
30341
30342         * enum.cs (error31): Helper to report error #31.
30343
30344         * cs-parser.jay (enum_declaration): Store location of each member too.
30345
30346         * enum.cs (member_to_location): New hashtable. 
30347
30348         (AddEnumMember): Update location hashtable.
30349
30350         (Emit): Use the location of each member while reporting errors.
30351
30352 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30353
30354         * cs-parser.jay: A for_initializer if is a
30355         local_variable_declaration really ammount to have an implicit
30356         block with the variable declaration and no initializer for for.
30357
30358         * statement.cs (For.Emit): Cope with null initializers.
30359
30360         This fixes the infinite loop on for initializers.
30361
30362 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30363
30364         * enum.cs: More cleanup.
30365
30366         * ecore.cs: Remove dead code.
30367
30368         * class.cs (Property.Emit): More simplification.
30369         (Event.Emit): ditto.
30370
30371         Reworked to have less levels of indentation.
30372
30373 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30374
30375         * class.cs (Property): Emit attributes.
30376
30377         (Field): Ditto.
30378
30379         (Event): Ditto.
30380
30381         (Indexer): Ditto.
30382
30383         (Operator): Ditto.
30384
30385         * enum.cs (Emit): Ditto.
30386
30387         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30388         Enums too.
30389
30390         * class.cs (Field, Event, etc.): Move attribute generation into the
30391         Emit method everywhere.
30392
30393         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30394         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30395         as we had no way of defining nested enums !
30396
30397         * rootcontext.cs : Adjust code accordingly.
30398
30399         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30400
30401 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30402
30403         * expression.cs (EvalConstantExpression): Move into ecore.cs
30404
30405         * enum.cs (Enum): Rename some members and make them public and readonly
30406         according to our convention.
30407
30408         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30409         nothing else.
30410
30411         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30412
30413         (Enum::Emit): Write a simple version for now which doesn't try to compute
30414         expressions. I shall modify this to be more robust in just a while.
30415
30416         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30417
30418         (TypeContainer::CloseType): Create the Enum types too.
30419
30420         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30421
30422         * expression.cs (EvalConstantExpression): Get rid of completely.
30423
30424         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30425         user-defined values and other cases.
30426
30427         (IsValidEnumLiteral): Helper function.
30428
30429         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30430         out there in the case we had a literal FieldExpr.
30431
30432         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30433
30434         (Literalize): Revamp a bit to take two arguments.
30435
30436         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30437
30438 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30439
30440         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30441
30442         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30443
30444         (Resolve): Use the above to ensure we have proper initializers.
30445
30446 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30447
30448         * expression.cs (Expression::EvalConstantExpression): New method to 
30449         evaluate constant expressions.
30450
30451         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30452
30453 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30454
30455         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30456         in an array.
30457
30458         (Binary.ResolveOperator): Handle operator != (object a, object b)
30459         and operator == (object a, object b);
30460
30461         (Binary.DoNumericPromotions): Indicate whether the numeric
30462         promotion was possible.
30463
30464         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30465         Implement.  
30466
30467         Made the ArrayAccess implement interface IAssignMethod instead of
30468         IStackStore as the order in which arguments are passed reflects
30469         this.
30470
30471         * assign.cs: Instead of using expr.ExprClass to select the way of
30472         assinging, probe for the IStackStore/IAssignMethod interfaces.
30473
30474         * typemanager.cs: Load InitializeArray definition.
30475
30476         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30477         static data that can be used to initialize arrays. 
30478
30479 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30480
30481         * expression.cs: Handle operator== and operator!= for booleans.
30482
30483         (Conditioal.Reduce): Implement reducer for the ?: operator.
30484
30485         (Conditional.Resolve): Implement dead code elimination.
30486
30487         (Binary.Resolve): Catch string literals and return a new
30488         concatenated string.
30489
30490         (Unary.Reduce): Implement reduction of unary expressions.
30491
30492         * ecore.cs: Split out the expression core handling here.
30493
30494         (Expression.Reduce): New method used to perform constant folding
30495         and CSE.  This is needed to support constant-expressions. 
30496
30497         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30498         targets, and optimize for !x.
30499
30500 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30501
30502         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30503         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30504         set custom atttributes.
30505
30506         * literal.cs (Literal::GetValue): New abstract method to return the actual
30507         value of the literal, cast as an object.
30508
30509         (*Literal): Implement GetValue method.
30510
30511         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30512         expressions to the arraylist but objects of type Argument.
30513
30514         * class.cs (TypeContainer::Emit): Emit our attributes too.
30515
30516         (Method::Emit, Constructor::Emit): Ditto.
30517
30518         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30519         to be ignoring earlier.
30520
30521 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30522
30523         * attribute.cs (AttributeSection::Define): Implement to do the business
30524         of constructing a CustomAttributeBuilder.
30525
30526         (Attribute): New trivial class. Increases readability of code.  
30527
30528         * cs-parser.jay : Update accordingly.
30529
30530         (positional_argument_list, named_argument_list, named_argument): New rules
30531
30532         (attribute_arguments): Use the above so that we are more correct.
30533
30534 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30535
30536         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30537         to perform all checks for a method with a params parameter.
30538
30539         (Invocation::OverloadResolve): Update to use the above method and therefore
30540         cope correctly with params method invocations.
30541
30542         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30543         params too.
30544
30545         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30546         constructors in our parent too because we can't afford to miss out on 
30547         protected ones ;-)
30548
30549         * attribute.cs (AttributeSection): New name for the class Attribute
30550
30551         Other trivial changes to improve readability.
30552
30553         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30554         use the new class names.
30555
30556 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30557
30558         * class.cs (Method::Define): Complete definition for params types too
30559
30560         (Indexer::Define): Ditto.
30561
30562         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30563         Cope everywhere with a request for info about the array parameter.
30564
30565 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30566
30567         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30568
30569         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30570         local_variable_type to extract the string corresponding to the type.
30571
30572         (local_variable_type): Fixup the action to use the new helper method.
30573
30574         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30575         go.
30576
30577         * expression.cs : Clean out code which uses the above.
30578
30579 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30580
30581         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30582         and bale out if necessary by returning a false.
30583
30584         (RegisterProperty): Ditto.
30585
30586         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30587         and print out appropriate error messages.
30588
30589         * interface.cs (everywhere): Ditto.
30590
30591         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30592         location to constructor.
30593
30594         * class.cs (Property, Event, Indexer): Update accordingly.
30595
30596         * ../errors/cs111.cs : Added.
30597
30598         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30599         of a method, as laid down by the spec.
30600
30601         (Invocation::OverloadResolve): Use the above method.
30602
30603 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30604
30605         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30606         now take a TypeContainer and a Parameters object.
30607
30608         (ParameterData): Modify return type of ParameterModifier method to be 
30609         Parameter.Modifier and not a string.
30610
30611         (ReflectionParameters, InternalParameters): Update accordingly.
30612
30613         * expression.cs (Argument::GetParameterModifier): Same here.
30614
30615         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30616         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30617         symbol in it at all so maybe this is only for now.
30618
30619 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30620
30621         * support.cs (InternalParameters): Constructor now takes an extra argument 
30622         which is the actual Parameters class.
30623
30624         (ParameterDesc): Update to provide info on ref/out modifiers.
30625
30626         * class.cs (everywhere): Update call to InternalParameters to pass in
30627         the second argument too.
30628
30629         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30630         to return the modifier info [ref/out etc]
30631
30632         (InternalParameters, ReflectionParameters): Implement the above.
30633
30634         * expression.cs (Argument::ParameterModifier): Similar function to return
30635         info about the argument's modifiers.
30636
30637         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30638         too.
30639
30640         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30641         a new SetFormalParameters object which we pass to InternalParameters.
30642
30643 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30644
30645         * expression.cs (NewArray): Merge into the ArrayCreation class.
30646
30647 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30648
30649         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30650         NewUserdefinedArray into one as there wasn't much of a use in having
30651         two separate ones.
30652
30653         * expression.cs (Argument): Change field's name to ArgType from Type.
30654
30655         (Type): New readonly property which returns the proper type, taking into 
30656         account ref/out modifiers.
30657
30658         (everywhere): Adjust code accordingly for the above.
30659
30660         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30661         whether we are emitting for a ref or out parameter.
30662
30663         * expression.cs (Argument::Emit): Use the above field to set the state.
30664
30665         (LocalVariableReference::Emit): Update to honour the flag and emit the
30666         right stuff.
30667
30668         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30669
30670         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30671
30672         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30673
30674         (ReflectionParameters, InternalParameters): Implement the above method.
30675
30676         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30677         reporting errors.
30678
30679         (Invocation::FullMethodDesc): Ditto. 
30680
30681 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30682
30683         * cs-parser.jay: Add extra production for the second form of array
30684         creation. 
30685
30686         * expression.cs (ArrayCreation): Update to reflect the above
30687         change. 
30688
30689         * Small changes to prepare for Array initialization.
30690
30691 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30692
30693         * typemanager.cs (ImplementsInterface): interface might be null;
30694         Deal with this problem;
30695
30696         Also, we do store negative hits on the cache (null values), so use
30697         this instead of calling t.GetInterfaces on the type everytime.
30698
30699 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30700
30701         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30702
30703         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30704         split functionality out into different classes.
30705
30706         (New::FormArrayType): Move into NewBuiltinArray.
30707
30708         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30709         quite useless.
30710
30711         (NewBuiltinArray): New class to handle creation of built-in arrays.
30712
30713         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30714         account creation of one-dimensional arrays.
30715
30716         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30717
30718         (NewUserdefinedArray::DoResolve): Implement.
30719
30720         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30721
30722         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30723         we maintain inside the TypeManager. This is necessary to perform lookups on the
30724         module builder.
30725
30726         (LookupType): Update to perform GetType on the module builders too.     
30727
30728         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30729
30730         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30731
30732 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30733
30734         * expression.cs (New::DoResolve): Implement guts of array creation.
30735
30736         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30737
30738 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30739
30740         * expression.cs: Fix bug I introduced lsat night that broke
30741         Delegates. 
30742
30743         (Expression.Resolve): Report a 246 error (can not resolve name)
30744         if we find a SimpleName in the stream.
30745
30746         (Expression.ResolveLValue): Ditto.
30747
30748         (Expression.ResolveWithSimpleName): This function is a variant of
30749         ResolveName, this one allows SimpleNames to be returned without a
30750         warning.  The only consumer of SimpleNames is MemberAccess
30751
30752 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30753
30754         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30755         might arrive here.  I have my doubts that this is correct.
30756
30757         * statement.cs (Lock): Implement lock statement.
30758
30759         * cs-parser.jay: Small fixes to support `lock' and `using'
30760
30761         * cs-tokenizer.cs: Remove extra space
30762
30763         * driver.cs: New flag --checked, allows to turn on integer math
30764         checking. 
30765
30766         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30767         Threading.Monitor.Exit 
30768
30769 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30770
30771         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30772         Expression Class to be IndexerAccess.
30773
30774         Notice that Indexer::DoResolve sets the eclass to Value.
30775
30776 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30777
30778         * class.cs (TypeContainer::Emit): Emit code for indexers.
30779
30780         * assign.cs (IAssignMethod): New interface implemented by Indexers
30781         and Properties for handling assignment.
30782
30783         (Assign::Emit): Simplify and reuse code. 
30784
30785         * expression.cs (IndexerAccess, PropertyExpr): Implement
30786         IAssignMethod, clean up old code. 
30787
30788 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30789
30790         * typemanager.cs (ImplementsInterface): New method to determine if a type
30791         implements a given interface. Provides a nice cache too.
30792
30793         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30794         method.
30795
30796         (ConvertReferenceExplicit): Ditto.
30797
30798         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30799         various methods, with correct names etc.
30800
30801         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30802         Operator.UnaryNegation.
30803
30804         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30805         we have a unary plus or minus operator.
30806
30807         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30808         UnaryMinus.
30809
30810         * everywhere : update accordingly.
30811
30812         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30813         respectively.
30814
30815         * class.cs (Method::Define): For the case where we are implementing a method
30816         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30817         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30818
30819 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30820
30821         * interface.cs (FindMembers): Implement to work around S.R.E
30822         lameness.
30823
30824         * typemanager.cs (IsInterfaceType): Implement.
30825
30826         (FindMembers): Update to handle interface types too.
30827
30828         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30829         use IsAssignableFrom as that is not correct - it doesn't work.
30830
30831         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30832         and accordingly override EmitStatement.
30833
30834         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30835         using the correct logic :-)
30836
30837 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30838
30839         * ../errors/cs-11.cs : Add to demonstrate error -11 
30840
30841 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30842
30843         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30844         then pass this as a hint to ResolveLValue.
30845
30846         * expression.cs (FieldExpr): Add Location information
30847
30848         (FieldExpr::LValueResolve): Report assignment to readonly
30849         variable. 
30850
30851         (Expression::ExprClassFromMemberInfo): Pass location information.
30852
30853         (Expression::ResolveLValue): Add new method that resolves an
30854         LValue. 
30855
30856         (Expression::DoResolveLValue): Default invocation calls
30857         DoResolve. 
30858
30859         (Indexers): New class used to keep track of indexers in a given
30860         Type. 
30861
30862         (IStackStore): Renamed from LValue, as it did not really describe
30863         what this did.  Also ResolveLValue is gone from this interface and
30864         now is part of Expression.
30865
30866         (ElementAccess): Depending on the element access type
30867
30868         * typemanager.cs: Add `indexer_name_type' as a Core type
30869         (System.Runtime.CompilerServices.IndexerNameAttribute)
30870
30871         * statement.cs (Goto): Take a location.
30872
30873 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30874
30875         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30876         if two delegates are compatible.
30877
30878         (NewDelegate::DoResolve): Update to take care of the case when
30879         we instantiate a delegate from another delegate.
30880
30881         * typemanager.cs (FindMembers): Don't even try to look up members
30882         of Delegate types for now.
30883
30884 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30885
30886         * delegate.cs (NewDelegate): New class to take care of delegate
30887         instantiation.
30888
30889         * expression.cs (New): Split the delegate related code out into 
30890         the NewDelegate class.
30891
30892         * delegate.cs (DelegateInvocation): New class to handle delegate 
30893         invocation.
30894
30895         * expression.cs (Invocation): Split out delegate related code into
30896         the DelegateInvocation class.
30897
30898 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30899
30900         * expression.cs (New::DoResolve): Implement delegate creation fully
30901         and according to the spec.
30902
30903         (New::DoEmit): Update to handle delegates differently.
30904
30905         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30906         because of which we were printing out arguments in reverse order !
30907
30908         * delegate.cs (VerifyMethod): Implement to check if the given method
30909         matches the delegate.
30910
30911         (FullDelegateDesc): Implement.
30912
30913         (VerifyApplicability): Implement.
30914
30915         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30916         delegate invocations too.
30917
30918         (Invocation::Emit): Ditto.
30919
30920         * ../errors/cs1593.cs : Added.
30921
30922         * ../errors/cs1594.cs : Added.
30923
30924         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30925
30926 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30927
30928         * typemanager.cs (intptr_type): Core type for System.IntPtr
30929
30930         (InitCoreTypes): Update for the same.
30931
30932         (iasyncresult_type, asynccallback_type): Ditto.
30933
30934         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30935         correct.
30936
30937         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30938         too.
30939
30940         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30941         the builders for the 4 members of a delegate type :-)
30942
30943         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30944         type.
30945
30946         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30947
30948         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30949
30950 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30951
30952         * statement.cs (Break::Emit): Implement.   
30953         (Continue::Emit): Implement.
30954
30955         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30956         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30957         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30958         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30959         end loop
30960
30961         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30962         properties that track the label for the current loop (begin of the
30963         loop and end of the loop).
30964
30965 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30966
30967         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30968         use of emitting anything at all.
30969
30970         * class.cs, rootcontext.cs : Get rid of calls to the same.
30971
30972         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30973
30974         (Populate): Define the constructor correctly and set the implementation
30975         attributes.
30976
30977         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30978         have been defined.
30979
30980         (AddDelegateType): Implement.
30981
30982         (IsDelegateType): Implement helper method.
30983
30984         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30985
30986         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30987         and accordingly handle it.
30988
30989         * delegate.cs (Populate): Take TypeContainer argument.
30990         Implement bits to define the Invoke method. However, I still haven't figured out
30991         how to take care of the native int bit :-(
30992
30993         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30994         Qualify the name of the delegate, not its return type !
30995
30996         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30997         conversion.
30998
30999         (StandardConversionExists): Checking for array types turns out to be recursive.
31000
31001         (ConvertReferenceExplicit): Implement array conversion.
31002
31003         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31004
31005 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31006
31007         * cs-parser.jay (delegate_declaration): Store the fully qualified
31008         name as it is a type declaration.
31009
31010         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31011         readonly.
31012
31013         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31014         as TypeContainer::DefineType.
31015
31016         (Populate): Method in which all the definition of the various methods (Invoke)
31017         etc is done.
31018
31019         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31020         see.
31021
31022         (CloseDelegate): Finally creates the delegate.
31023
31024         * class.cs (TypeContainer::DefineType): Update to define delegates.
31025         (Populate, Emit and CloseType): Do the same thing here too.
31026
31027         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31028         delegates in all these operations.
31029
31030 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31031
31032         * expression.cs: LocalTemporary: a new expression used to
31033         reference a temporary that has been created.
31034
31035         * assign.cs: Handle PropertyAccess back here, so that we can
31036         provide the proper semantic access to properties.
31037
31038         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31039         a few more explicit conversions. 
31040
31041         * modifiers.cs: `NEW' modifier maps to HideBySig.
31042
31043         * expression.cs (PropertyExpr): Make this into an
31044         ExpressionStatement, and support the EmitStatement code path. 
31045
31046         Perform get/set error checking, clean up the interface.
31047
31048         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31049         them into toplevel access objects.
31050
31051 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31052
31053         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31054         SRE.
31055
31056         * typemanager.cs: Keep track here of our PropertyBuilders again to
31057         work around lameness in SRE.
31058
31059 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31060
31061         * expression.cs (LValue::LValueResolve): New method in the
31062         interface, used to perform a second resolution pass for LValues. 
31063
31064         (This::DoResolve): Catch the use of this in static methods.
31065
31066         (This::LValueResolve): Implement.
31067
31068         (This::Store): Remove warning, assigning to `this' in structures
31069         is 
31070
31071         (Invocation::Emit): Deal with invocation of
31072         methods on value types.  We need to pass the address to structure
31073         methods rather than the object itself.  (The equivalent code to
31074         emit "this" for structures leaves the entire structure on the
31075         stack instead of a pointer to it). 
31076
31077         (ParameterReference::DoResolve): Compute the real index for the
31078         argument based on whether the method takes or not a `this' pointer
31079         (ie, the method is static).
31080
31081         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31082         value types returned from functions when we need to invoke a
31083         method on the sturcture.
31084
31085
31086 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31087
31088         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31089         defining the type in the Modulebuilder or Typebuilder. This is to take
31090         care of nested types which need to be defined on the TypeBuilder using
31091         DefineNestedMethod.
31092
31093         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31094         methods in RootContext, only ported to be part of TypeContainer.
31095
31096         (TypeContainer::GetInterfaceOrClass): Ditto.
31097
31098         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31099
31100         * interface.cs (Interface::DefineInterface): New method. Does exactly
31101         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31102         too.
31103
31104         (Interface::GetInterfaces): Move from RootContext here and port.
31105
31106         (Interface::GetInterfaceByName): Same here.
31107
31108         * rootcontext.cs (ResolveTree): Re-write.
31109
31110         (PopulateTypes): Re-write.
31111
31112         * class.cs (TypeContainer::Populate): Populate nested types too.
31113         (TypeContainer::Emit): Emit nested members too.
31114
31115         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31116         instead just use the name argument passed in as it is already fully
31117         qualified.
31118
31119         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31120         to TypeContainer mapping to see if a type is user-defined.
31121
31122         * class.cs (TypeContainer::CloseType): Implement. 
31123
31124         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31125         the default constructor.
31126
31127         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31128         twice.
31129
31130         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31131
31132         * interface.cs (CloseType): Create the type here.
31133
31134         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31135         the hierarchy.
31136
31137         Remove all the methods which are now in TypeContainer.
31138
31139 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31140
31141         * delegate.cs (Define): Re-write bits to define the delegate
31142         correctly.
31143
31144 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31145
31146         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31147
31148         * expression.cs (ImplicitReferenceConversion): handle null as well
31149         as a source to convert to any reference type.
31150
31151         * statement.cs (Return): Perform any implicit conversions to
31152         expected return type.  
31153
31154         Validate use of return statement.  
31155
31156         * codegen.cs (EmitContext): Pass the expected return type here.
31157
31158         * class.cs (Method, Constructor, Property): Pass expected return
31159         type to EmitContext.
31160
31161 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31162
31163         * expression.cs: Make DoResolve take an EmitContext instead of a
31164         TypeContainer.
31165
31166         Replaced `l' and `location' for `loc', for consistency.
31167
31168         (Error, Warning): Remove unneeded Tc argument.
31169
31170         * assign.cs, literal.cs, constant.cs: Update to new calling
31171         convention. 
31172
31173         * codegen.cs: EmitContext now contains a flag indicating whether
31174         code is being generated in a static method or not.
31175
31176         * cs-parser.jay: DecomposeQI, new function that replaces the old
31177         QualifiedIdentifier.  Now we always decompose the assembled
31178         strings from qualified_identifier productions into a group of
31179         memberaccesses.
31180
31181 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31182
31183         * rootcontext.cs: Deal with field-less struct types correctly now
31184         by passing the size option to Define Type.
31185
31186         * class.cs: Removed hack that created one static field. 
31187
31188 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31189
31190         * statement.cs: Moved most of the code generation here. 
31191
31192 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31193
31194         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31195         seem very right.
31196
31197         (ElementAccess): Remove useless bits for now - keep checks as the spec
31198         says.
31199
31200 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31201
31202         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31203         and start performing checks according to the spec.
31204
31205 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31206
31207         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31208         rank_specifiers instead.
31209
31210         (rank_specifiers): Change the order in which the rank specifiers are stored
31211
31212         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31213
31214         * expression.cs (ElementAccess): Implement the LValue interface too.
31215
31216 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31217
31218         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31219         except that user defined conversions are not included.
31220
31221         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31222         perform the conversion of the return type, if necessary.
31223
31224         (New::DoResolve): Check whether we are creating an array or an object
31225         and accordingly do the needful.
31226
31227         (New::Emit): Same here.
31228
31229         (New::DoResolve): Implement guts of array creation.
31230
31231         (New::FormLookupType): Helper function.
31232
31233 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31234
31235         * codegen.cs: Removed most of the code generation here, and move the
31236         corresponding code generation bits to the statement classes. 
31237
31238         Added support for try/catch/finalize and throw.
31239
31240         * cs-parser.jay: Added support for try/catch/finalize.
31241
31242         * class.cs: Catch static methods having the flags override,
31243         virtual or abstract.
31244
31245         * expression.cs (UserCast): This user cast was not really doing
31246         what it was supposed to do.  Which is to be born in fully resolved
31247         state.  Parts of the resolution were being performed at Emit time! 
31248
31249         Fixed this code.
31250
31251 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31252
31253         * expression.cs: Implicity convert the result from UserCast.
31254
31255 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31256
31257         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31258         prevented it from working correctly. 
31259
31260         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31261         merely ConvertImplicit.
31262
31263 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31264
31265         * typemanager.cs: Make the LookupTypeContainer function static,
31266         and not per-instance.  
31267
31268         * class.cs: Make static FindMembers (the one that takes a Type
31269         argument). 
31270
31271         * codegen.cs: Add EmitForeach here.
31272
31273         * cs-parser.jay: Make foreach a toplevel object instead of the
31274         inline expansion, as we need to perform semantic analysis on it. 
31275
31276 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31277
31278         * expression.cs (Expression::ImplicitUserConversion): Rename to
31279         UserDefinedConversion.
31280
31281         (Expression::UserDefinedConversion): Take an extra argument specifying 
31282         whether we look for explicit user conversions too.
31283
31284         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31285
31286         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31287
31288         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31289         with the appropriate arguments.
31290
31291         * cs-parser.jay (cast_expression): Record location too.
31292
31293         * expression.cs (Cast): Record location info.
31294
31295         (Expression::ConvertExplicit): Take location argument.
31296
31297         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31298         to determine if we are doing explicit conversions.
31299
31300         (UserCast::Emit): Update accordingly.
31301
31302         (Expression::ConvertExplicit): Report an error if everything fails.
31303
31304         * ../errors/cs0030.cs : Add.
31305
31306 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31307
31308         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31309         virtual and newslot bits. 
31310
31311         * class.cs (TypeContainer::RegisterRequiredImplementations):
31312         Record methods we need.
31313
31314         (TypeContainer::MakeKey): Helper function to make keys for
31315         MethodBases, since the Methodbase key is useless.
31316
31317         (TypeContainer::Populate): Call RegisterRequiredImplementations
31318         before defining the methods.   
31319
31320         Create a mapping for method_builders_to_methods ahead of time
31321         instead of inside a tight loop.
31322
31323         (::RequireMethods):  Accept an object as the data to set into the
31324         hashtable so we can report interface vs abstract method mismatch.
31325
31326 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31327
31328         * report.cs: Make all of it static.
31329
31330         * rootcontext.cs: Drop object_type and value_type computations, as
31331         we have those in the TypeManager anyways.
31332
31333         Drop report instance variable too, now it is a global.
31334
31335         * driver.cs: Use try/catch on command line handling.
31336
31337         Add --probe option to debug the error reporting system with a test
31338         suite. 
31339
31340         * report.cs: Add support for exiting program when a probe
31341         condition is reached.
31342
31343 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31344
31345         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31346         we do a forcible conversion regardless of type, to check if 
31347         ForceConversion returns a null.
31348
31349         (Binary::error19): Use location to report error.
31350
31351         (Unary::error23): Use location here too.
31352
31353         * ../errors/cs0019.cs : Check in.
31354
31355         * ../errors/cs0023.cs : Check in.
31356
31357         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31358         case of a non-null MethodInfo object with a length of 0 !
31359
31360         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31361         an applicable member - according to the spec :-)
31362         Also fix logic to find members in base types.
31363
31364         (Unary::ResolveOperator): Same here.
31365
31366         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31367         as I was getting thoroughly confused between this and error19 :-)
31368
31369         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31370         (::FindMostEncompassedType): Implement.
31371         (::FindMostEncompassingType): Implement.
31372         (::StandardConversionExists): Implement.
31373
31374         (UserImplicitCast): Re-vamp. We now need info about most specific
31375         source and target types so that we can do the necessary conversions.
31376
31377         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31378         mathematical union with no duplicates.
31379
31380 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31381
31382         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31383         in order from base classes to child classes, so that we can in
31384         child classes look up in our parent for method names and
31385         attributes (required for handling abstract, virtual, new, override
31386         constructs: we need to instrospect our base class, and if we dont
31387         populate the classes in order, the introspection might be
31388         incorrect.  For example, a method could query its parent before
31389         the parent has any methods and would determine that the parent has
31390         no abstract methods (while it could have had them)).
31391
31392         (RootContext::CreateType): Record the order in which we define the
31393         classes.
31394
31395 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31396
31397         * class.cs (TypeContainer::Populate): Also method definitions can
31398         fail now, keep track of this.
31399
31400         (TypeContainer::FindMembers): Implement support for
31401         DeclaredOnly/noDeclaredOnly flag.
31402
31403         (Constructor::Emit) Return the ConstructorBuilder.
31404
31405         (Method::Emit) Return the MethodBuilder. 
31406         Check for abstract or virtual methods to be public.
31407
31408         * rootcontext.cs (RootContext::CreateType): Register all the
31409         abstract methods required for the class to be complete and the
31410         interface methods that must be implemented. 
31411
31412         * cs-parser.jay: Report error 501 (method requires body if it is
31413         not marked abstract or extern).
31414
31415         * expression.cs (TypeOf::Emit): Implement.
31416
31417         * typemanager.cs: runtime_handle_type, new global type.
31418
31419         * class.cs (Property::Emit): Generate code for properties.
31420
31421 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31422
31423         * expression.cs (Unary::ResolveOperator): Find operators on base type
31424         too - we now conform exactly to the spec.
31425
31426         (Binary::ResolveOperator): Same here.
31427
31428         * class.cs (Operator::Define): Fix minor quirk in the tests.
31429
31430         * ../errors/cs0215.cs : Added.
31431
31432         * ../errors/cs0556.cs : Added.
31433
31434         * ../errors/cs0555.cs : Added.
31435
31436 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31437
31438         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31439         single integer which is really efficient
31440
31441 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31442
31443         *  expression.cs (Expression::ImplicitUserConversion): Use location
31444         even in the case when we are examining True operators.
31445  
31446         * class.cs (Operator::Define): Perform extensive checks to conform
31447         with the rules for operator overloading in the spec.
31448
31449         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31450         some of the other conversions mentioned in the spec.
31451
31452         * typemanager.cs (array_type): New static member for the System.Array built-in
31453         type.
31454
31455         (cloneable_interface): For System.ICloneable interface.
31456
31457         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31458         we start resolving the tree and populating types.
31459
31460         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31461  
31462 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31463
31464         * expression.cs (Expression::ExprClassFromMemberInfo,
31465         Expression::Literalize): Create literal expressions from
31466         FieldInfos which are literals.
31467
31468         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31469         type casts, because they were wrong.  The test suite in tests
31470         caught these ones.
31471
31472         (ImplicitNumericConversion): ushort to ulong requires a widening
31473         cast. 
31474
31475         Int32 constant to long requires widening cast as well.
31476
31477         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31478         for integers because the type on the stack is not i4.
31479
31480 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31481
31482         * expression.cs (report118): require location argument. 
31483
31484         * parameter.cs: Do not dereference potential null value.
31485
31486         * class.cs: Catch methods that lack the `new' keyword when
31487         overriding a name.  Report warnings when `new' is used without
31488         anything being there to override.
31489
31490         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31491
31492         * class.cs: Only add constructor to hashtable if it is non-null
31493         (as now constructors can fail on define).
31494
31495         (TypeManager, Class, Struct): Take location arguments.
31496
31497         Catch field instance initialization in structs as errors.
31498
31499         accepting_filter: a new filter for FindMembers that is static so
31500         that we dont create an instance per invocation.
31501
31502         (Constructor::Define): Catch errors where a struct constructor is
31503         parameterless 
31504
31505         * cs-parser.jay: Pass location information for various new
31506         constructs. 
31507
31508         * delegate.cs (Delegate): take a location argument.
31509
31510         * driver.cs: Do not call EmitCode if there were problesm in the
31511         Definition of the types, as many Builders wont be there. 
31512
31513         * decl.cs (Decl::Decl): Require a location argument.
31514
31515         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31516         into integers, and find the most appropiate integer for it.
31517
31518         * literal.cs: Implement ULongLiteral.
31519
31520         * rootcontext.cs: Provide better information about the location of
31521         failure when CreateType fails.
31522
31523 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31524
31525         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31526         as well.
31527
31528         * expression.cs (Binary::CheckShiftArguments): Add missing type
31529         computation.
31530         (Binary::ResolveOperator): Add type to the logical and and logical
31531         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31532         before.
31533
31534         (Binary::DoNumericPromotions): In the case where either argument
31535         is ulong (and most signed types combined with ulong cause an
31536         error) perform implicit integer constant conversions as well.
31537
31538 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31539
31540         * expression.cs (UserImplicitCast): Method should always be
31541         non-null. 
31542         (Invocation::BetterConversion): Simplified test for IntLiteral.
31543
31544         (Expression::ImplicitNumericConversion): Split this routine out.
31545         Put the code that performs implicit constant integer conversions
31546         here. 
31547
31548         (Expression::Resolve): Become a wrapper around DoResolve so we can
31549         check eclass and type being set after resolve.
31550
31551         (Invocation::Badness): Remove this dead function
31552
31553         (Binary::ResolveOperator): Do not compute the expensive argumnets
31554         unless we have a union for it.
31555
31556         (Probe::Emit): Is needs to do an isinst and then
31557         compare against null.
31558
31559         (::CanConvert): Added Location argument.  If the Location argument
31560         is null (Location.Null), then we do not report errors.  This is
31561         used by the `probe' mechanism of the Explicit conversion.  We do
31562         not want to generate an error for something that the user
31563         explicitly requested to be casted.  But the pipeline for an
31564         explicit cast first tests for potential implicit casts.
31565
31566         So for now, if the Location is null, it means `Probe only' to
31567         avoid adding another argument.   Might have to revise this
31568         strategy later.
31569
31570         (ClassCast): New class used to type cast objects into arbitrary
31571         classes (used in Explicit Reference Conversions).
31572
31573         Implement `as' as well.
31574
31575         Reverted all the patches from Ravi below: they were broken:
31576
31577                 * The use of `level' as a mechanism to stop recursive
31578                   invocations is wrong.  That was there just to catch the
31579                   bug with a strack trace but not as a way of addressing
31580                   the problem.
31581
31582                   To fix the problem we have to *understand* what is going
31583                   on and the interactions and come up with a plan, not
31584                   just get things going.
31585
31586                 * The use of the type conversion cache that I proposed
31587                   last night had an open topic: How does this work across
31588                   protection domains.  A user defined conversion might not
31589                   be public in the location where we are applying the
31590                   conversion, a different conversion might be selected
31591                   (ie, private A->B (better) but public B->A (worse),
31592                   inside A, A->B applies, but outside it, B->A will
31593                   apply).
31594
31595                 * On top of that (ie, even if the above is solved),
31596                   conversions in a cache need to be abstract.  Ie, `To
31597                   convert from an Int to a Short use an OpcodeCast', not
31598                   `To convert from an Int to a Short use the OpcodeCast on
31599                   the variable 5' (which is what this patch was doing).
31600
31601 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31602
31603         * expression.cs (Invocation::ConversionExists): Re-write to use
31604         the conversion cache
31605
31606         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31607         cache all conversions done, not just user-defined ones.
31608
31609         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31610         to determine if a conversion exists instead of acutually trying to 
31611         perform the conversion. It's faster too.
31612
31613         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31614         and only then attempt the implicit conversion.
31615
31616 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31617
31618         * expression.cs (ConvertImplicit): Use a cache for conversions
31619         already found. Check level of recursion and bail out if necessary.
31620
31621 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31622
31623         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31624         Export standard methods that we expect for string operations.
31625
31626         * statement.cs (Block::UsageWarning): Track usage of variables and
31627         report the errors for not used variables.
31628
31629         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31630         operator. 
31631
31632 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31633
31634         * codegen.cs: remove unnneded code 
31635
31636         * expression.cs: Removed BuiltinTypeAccess class
31637
31638         Fix the order in which implicit conversions are
31639         done.  
31640
31641         The previous fixed dropped support for boxed conversions (adding a
31642         test to the test suite now)
31643
31644         (UserImplicitCast::CanConvert): Remove test for source being null,
31645         that code is broken.  We should not feed a null to begin with, if
31646         we do, then we should track the bug where the problem originates
31647         and not try to cover it up here.
31648
31649         Return a resolved expression of type UserImplicitCast on success
31650         rather than true/false.  Ravi: this is what I was talking about,
31651         the pattern is to use a static method as a "constructor" for
31652         objects. 
31653
31654         Also, do not create arguments until the very last minute,
31655         otherwise we always create the arguments even for lookups that
31656         will never be performed. 
31657
31658         (UserImplicitCast::Resolve): Eliminate, objects of type
31659         UserImplicitCast are born in a fully resolved state. 
31660
31661         * typemanager.cs (InitCoreTypes): Init also value_type
31662         (System.ValueType). 
31663
31664         * expression.cs (Cast::Resolve): First resolve the child expression.
31665
31666         (LValue): Add new method AddressOf to be used by
31667         the `&' operator.  
31668
31669         Change the argument of Store to take an EmitContext instead of an
31670         ILGenerator, because things like FieldExpr need to be able to call
31671         their children expression to generate the instance code. 
31672
31673         (Expression::Error, Expression::Warning): Sugar functions for
31674         reporting errors.
31675
31676         (Expression::MemberLookup): Accept a TypeContainer instead of a
31677         Report as the first argument.
31678
31679         (Expression::ResolvePrimary): Killed.  I still want to improve
31680         this as currently the code is just not right.
31681
31682         (Expression::ResolveMemberAccess): Simplify, but it is still
31683         wrong. 
31684
31685         (Unary::Resolve): Catch errors in AddressOf operators.
31686
31687         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31688         index to a byte for the short-version, or the compiler will choose
31689         the wrong Emit call, which generates the wrong data.
31690
31691         (ParameterReference::Emit, ::Store): same.
31692
31693         (FieldExpr::AddressOf): Implement.
31694
31695         * typemanager.cs: TypeManager: made public variable instead of
31696         property.
31697
31698         * driver.cs: document --fatal.
31699
31700         * report.cs (ErrorMessage, WarningMessage): new names for the old
31701         Error and Warning classes.
31702
31703         * cs-parser.jay (member_access): Turn built-in access to types
31704         into a normal simplename
31705
31706 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31707
31708         * expression.cs (Invocation::BetterConversion): Fix to cope
31709         with q being null, since this was introducing a bug.
31710
31711         * expression.cs (ConvertImplicit): Do built-in conversions first.
31712
31713 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31714
31715         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31716
31717 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31718
31719         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31720         I had introduced long ago (what's new ?).
31721
31722         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31723         the work of all the checking. 
31724         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31725         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31726
31727         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31728         that is the right way. 
31729
31730         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31731         overloading resolution. Use everywhere instead of cutting and pasting code.
31732
31733         (Binary::ResolveOperator): Use MakeUnionSet.
31734
31735         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31736         we have to convert to bool types. Not complete yet.
31737
31738 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31739
31740         * typemanager.cs (TypeManager::CSharpName): support ushort.
31741
31742         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31743         to provide an expression that performsn an implicit constant int
31744         conversion (section 6.1.6).
31745         (Expression::ConvertImplicitRequired): Reworked to include
31746         implicit constant expression conversions.
31747
31748         (Expression::ConvertNumericExplicit): Finished.
31749
31750         (Invocation::Emit): If InstanceExpression is null, then it means
31751         that we perform a call on this.
31752
31753 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31754
31755         * expression.cs (Unary::Emit): Remove some dead code.
31756         (Probe): Implement Resolve and Emit for `is'.
31757         (Expression::ConvertImplicitRequired): Attempt to do constant
31758         expression conversions here.  Maybe should be moved to
31759         ConvertImplicit, but I am not sure.
31760         (Expression::ImplicitLongConstantConversionPossible,
31761         Expression::ImplicitIntConstantConversionPossible): New functions
31762         that tell whether is it possible to apply an implicit constant
31763         expression conversion.
31764
31765         (ConvertNumericExplicit): Started work on explicit numeric
31766         conversions.
31767
31768         * cs-parser.jay: Update operator constants.
31769
31770         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31771         (Parameters::GetSignature): Hook up VerifyArgs here.
31772         (Parameters::VerifyArgs): Verifies that no two arguments have the
31773         same name. 
31774
31775         * class.cs (Operator): Update the operator names to reflect the
31776         ones that the spec expects (as we are just stringizing the
31777         operator names).
31778
31779         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31780         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31781         previous usage did only work for our methods.
31782         (Expression::ConvertImplicit): Handle decimal implicit numeric
31783         conversions as well.
31784         (Expression::InternalTypeConstructor): Used to invoke constructors
31785         on internal types for default promotions.
31786
31787         (Unary::Emit): Implement special handling for the pre/post
31788         increment/decrement for overloaded operators, as they need to have
31789         the same semantics as the other operators.
31790
31791         (Binary::ResolveOperator): ditto.
31792         (Invocation::ConversionExists): ditto.
31793         (UserImplicitCast::Resolve): ditto.
31794
31795 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31796
31797         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31798         operator, return after emitting body. Regression tests pass again !
31799
31800         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31801         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31802         (Invocation::OverloadResolve): Ditto.
31803         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31804
31805         * everywhere : update calls to the above methods accordingly.
31806
31807 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31808
31809         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31810
31811         * expression.cs (ExpressionStatement): New base class used for
31812         expressions that can appear in statements, so that we can provide
31813         an alternate path to generate expression that do not leave a value
31814         on the stack.
31815
31816         (Expression::Emit, and all the derivatives): We no longer return
31817         whether a value is left on the stack or not.  Every expression
31818         after being emitted leaves a single value on the stack.
31819
31820         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31821         facilties of ExpressionStatement if possible.
31822
31823         * cs-parser.jay: Update statement_expression.
31824
31825 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31826
31827         * driver.cs: Change the wording of message
31828
31829 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31830
31831         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31832         the type of the expression to the return type of the method if
31833         we have an overloaded operator match ! The regression tests pass again !
31834         (Unary::ResolveOperator): Ditto.
31835
31836         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31837         to find "op_Implicit", not "implicit" ;-)
31838         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31839         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31840
31841         * everywhere : Correct calls to the above accordingly.
31842
31843         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31844         (ConvertImplicit): Do user-defined conversion if it exists.
31845
31846 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31847
31848         * assign.cs: track location.
31849         (Resolve): Use implicit conversions on assignment.
31850
31851         * literal.cs: Oops.  Not good, Emit of short access values should
31852         pass (Bytes) or the wrong argument will be selected.
31853
31854         * expression.cs (Unary::Emit): Emit code for -expr.
31855
31856         (Unary::ResolveOperator): Handle `Substract' for non-constants
31857         (substract from zero from the non-constants).
31858         Deal with Doubles as well. 
31859
31860         (Expression::ConvertImplicitRequired): New routine that reports an
31861         error if no implicit conversion exists. 
31862
31863         (Invocation::OverloadResolve): Store the converted implicit
31864         expressions if we make them
31865
31866 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31867
31868         * class.cs (ConstructorInitializer): Take a Location argument.
31869         (ConstructorBaseInitializer): Same here.
31870         (ConstructorThisInitializer): Same here.
31871
31872         * cs-parser.jay : Update all calls accordingly.
31873
31874         * expression.cs (Unary, Binary, New): Take location argument.
31875         Update accordingly everywhere.
31876
31877         * cs-parser.jay : Update all calls to the above to take a location
31878         argument.
31879
31880         * class.cs : Ditto.
31881
31882 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31883
31884         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31885         (Invocation::BetterConversion): Same here
31886         (Invocation::ConversionExists): Ditto.
31887
31888         (Invocation::ConversionExists): Implement.
31889
31890 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31891
31892         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31893         Also take an additional TypeContainer argument.
31894
31895         * All over : Pass in TypeContainer as argument to OverloadResolve.
31896
31897         * typemanager.cs (CSharpName): Update to check for the string type and return
31898         that too.
31899
31900         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31901         a given method.
31902
31903 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31904
31905         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31906         (Invocation::BetterFunction): Implement.
31907         (Invocation::BetterConversion): Implement.
31908         (Invocation::ConversionExists): Skeleton, no implementation yet.
31909
31910         Okay, things work fine !
31911
31912 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31913
31914         * typemanager.cs: declare and load enum_type, delegate_type and
31915         void_type. 
31916
31917         * expression.cs (Expression::Emit): Now emit returns a value that
31918         tells whether a value is left on the stack or not.  This strategy
31919         might be reveted tomorrow with a mechanism that would address
31920         multiple assignments.
31921         (Expression::report118): Utility routine to report mismatches on
31922         the ExprClass.
31923
31924         (Unary::Report23): Report impossible type/operator combination
31925         utility function.
31926
31927         (Unary::IsIncrementableNumber): Whether the type can be
31928         incremented or decremented with add.
31929         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31930         complemented. 
31931         (Unary::ResolveOperator): Implement ++, !, ~,
31932
31933         (Invocation::Emit): Deal with new Emit convetion.
31934
31935         * All Expression derivatives: Updated their Emit method to return
31936         whether they leave values on the stack or not.
31937
31938         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31939         stack for expressions that are statements. 
31940
31941 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31942
31943         * expression.cs (LValue): New interface.  Must be implemented by
31944         LValue objects.
31945         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31946         LValue interface.
31947
31948         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31949         interface for generating code, simplifies the code.
31950
31951 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31952
31953         * expression.cs (everywhere): Comment out return statements in ::Resolve
31954         methods to avoid the warnings.
31955
31956 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31957
31958         * driver.cs (parse): Report error 2001 if we can not open the
31959         source file.
31960
31961         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31962         not resolve it.
31963
31964         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31965         object. 
31966
31967         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31968         otherwise nested blocks end up with the same index.
31969
31970         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31971
31972         * expression.cs:  Instead of having FIXMEs in the Resolve
31973         functions, throw exceptions so it is obvious that we are facing a
31974         bug. 
31975
31976         * cs-parser.jay (invocation_expression): Pass Location information.
31977
31978         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31979         Use a basename for those routines because .NET does not like paths
31980         on them. 
31981
31982         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31983         already defined.
31984
31985 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31986
31987         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31988         are loading the correct data types (throws an exception if not).
31989         (TypeManager::InitCoreTypes): Use CoreLookupType
31990
31991         * expression.cs (Unary::ResolveOperator): return the child
31992         expression for expressions which are just +expr.
31993         (Unary::ResolveOperator): Return negative literals for -LITERAL
31994         expressions (otherwise they are Unary {Literal}).
31995         (Invocation::Badness): Take into account `Implicit constant
31996         expression conversions'.
31997
31998         * literal.cs (LongLiteral): Implement long literal class.
31999         (IntLiteral): export the `Value' of the intliteral. 
32000
32001 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32002
32003         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32004
32005         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32006         instead of 'Operator'
32007
32008         * expression.cs (Binary::ResolveOperator): Update accordingly.
32009         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32010         and 'Minus'
32011
32012         * cs-parser.jay (unary_expression): Update to use the new names.
32013
32014         * gen-treedump.cs (GetUnary): Same here.
32015
32016         * expression.cs (Unary::Resolve): Implement.
32017         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32018         operators are found instead of making noise ;-)
32019         (Unary::ResolveOperator): New method to do precisely the same thing which
32020         Binary::ResolveOperator does for Binary expressions.
32021         (Unary.method, .Arguments): Add.
32022         (Unary::OperName): Implement.   
32023         (Unary::ForceConversion): Copy and Paste !
32024
32025         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32026         a unary operator.
32027
32028         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32029         for the inbuilt operators. Only overloading works for now ;-)
32030
32031 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32032
32033         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32034         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32035
32036         * expression.cs (This::Emit): Implement. 
32037         (This::Resolve): Implement.
32038         (TypeOf:Resolve): Implement.
32039         (Expression::ResolveSimpleName): Add an implicit this to instance
32040         field references. 
32041         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32042         Bind instance variable to Field expressions.
32043         (FieldExpr::Instance): New field used to track the expression that
32044         represents the object instance.
32045         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32046         binding 
32047         (FieldExpr::Emit): Implement.
32048
32049         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32050         the last instruction contains a return opcode to avoid generating
32051         the last `ret' instruction (this generates correct code, and it is
32052         nice to pass the peverify output).
32053
32054         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32055         initializer for static and instance variables.
32056         (Constructor::Emit): Allow initializer to be null in the case of
32057         static constructors.  Only emit initializer for instance
32058         constructors. 
32059
32060         (TypeContainer::FindMembers): Return a null array if there are no
32061         matches.
32062
32063         Also fix the code for the MemberTypes.Method branch, as it was not
32064         scanning that for operators (or tried to access null variables before).
32065
32066         * assign.cs (Assign::Emit): Handle instance and static fields. 
32067
32068         * TODO: Updated.
32069
32070         * driver.cs: Stop compilation if there are parse errors.
32071
32072         * cs-parser.jay (constructor_declaration): Provide default base
32073         initializer for non-static constructors.
32074         (constructor_declarator): Do not provide a default base
32075         initializers if none was specified.
32076         Catch the fact that constructors should not have parameters.
32077
32078         * class.cs: Do not emit parent class initializers for static
32079         constructors, that should be flagged as an error.
32080
32081 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32082
32083         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32084         Move back code into TypeContainer::Populate.
32085
32086 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32087
32088         * class.cs (TypeContainer::AddConstructor): Fix the check to
32089         compare against Name, not Basename. 
32090         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32091
32092         * cs-parser.jay : Update accordingly.
32093
32094         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32095         for methods, don't forget to look into the operators too.
32096         (RegisterMethodBuilder): Helper method to take care of this for
32097         methods, constructors and operators.
32098         (Operator::Define): Completely revamp.
32099         (Operator.OperatorMethod, MethodName): New fields.
32100         (TypeContainer::Populate): Move the registering of builders into
32101         RegisterMethodBuilder.
32102         (Operator::Emit): Re-write.
32103
32104         * expression.cs (Binary::Emit): Comment out code path to emit method
32105         invocation stuff for the case when we have a user defined operator. I am
32106         just not able to get it right !
32107
32108 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32109
32110         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32111         argument. 
32112
32113         (Expression::MemberLookup): Provide a version that allows to
32114         specify the MemberTypes and BindingFlags. 
32115
32116         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32117         so it was not fetching variable information from outer blocks.
32118
32119         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32120         Beforefieldinit as it was buggy.
32121
32122         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32123         that Ravi put here.  
32124
32125         * class.cs (Constructor::Emit): Only emit if block is not null.
32126         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32127         deal with this by semantically definining it as if the user had
32128         done it.
32129
32130         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32131         constructors as we now "emit" them at a higher level.
32132
32133         (TypeContainer::DefineDefaultConstructor): Used to define the
32134         default constructors if none was provided.
32135
32136         (ConstructorInitializer): Add methods Resolve and Emit. 
32137
32138         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32139
32140 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32141
32142         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32143         the default constructor builder with our hashtable for methodbuilders
32144         to methodcores.
32145
32146         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32147         and argument_count is 0 in which case we have a match.
32148         (Binary::ResolveOperator): More null checking and miscellaneous coding
32149         style cleanup.
32150
32151 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32152
32153         * rootcontext.cs (IsNameSpace): Compare against null.
32154
32155         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32156
32157         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32158         and Unary::Operator.
32159
32160         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32161         accordingly.
32162
32163         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32164         we have overloaded operators.
32165         (Binary::ResolveOperator): Implement the part which does the operator overload
32166         resolution.
32167
32168         * class.cs (Operator::Emit): Implement.
32169         (TypeContainer::Emit): Emit the operators we have too.
32170
32171         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32172         the case when we have a user-defined operator.
32173
32174 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32175
32176         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32177
32178 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32179
32180         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32181         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32182         (Constructor::Emit): Implement.
32183         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32184         if we have no work to do. 
32185         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32186         Emit method.
32187
32188         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32189         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32190
32191         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32192         of parent.parent.
32193
32194 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32195
32196         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32197         in the source.
32198         (Tree::RecordNamespace): Method to do what the name says ;-)
32199         (Tree::Namespaces): Property to get at the namespaces hashtable.
32200
32201         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32202         keep track.
32203
32204         * rootcontext.cs (IsNamespace): Fixed it :-)
32205
32206 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32207
32208         * class.cs (TypeContainer::FindMembers): Add support for
32209         constructors. 
32210         (MethodCore): New class that encapsulates both the shared aspects
32211         of a Constructor and a Method.  
32212         (Method, Constructor): Factored pieces into MethodCore.
32213
32214         * driver.cs: Added --fatal which makes errors throw exceptions.
32215         Load System assembly as well as part of the standard library.
32216
32217         * report.cs: Allow throwing exceptions on errors for debugging.
32218
32219         * modifiers.cs: Do not use `parent', instead use the real type
32220         container to evaluate permission settings.
32221
32222         * class.cs: Put Ravi's patch back in.  He is right, and we will
32223         have to cope with the
32224
32225 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32226
32227         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32228         FamORAssem, not FamANDAssem.
32229
32230 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32231
32232         * driver.cs: Added --parse option that only parses its input files
32233         and terminates.
32234
32235         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32236         incorrect.  IsTopLevel is not used to tell whether an object is
32237         root_types or not (that can be achieved by testing this ==
32238         root_types).  But to see if this is a top-level *class* (not
32239         necessarly our "toplevel" container). 
32240
32241 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32242
32243         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32244         parent instead of a direct call to GetType.
32245
32246 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32247
32248         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32249         Modifiers.TypeAttr. This should just be a call to that method.
32250
32251         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32252         object so that we can determine if we are top-level or not.
32253
32254         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32255         TypeContainer too.
32256
32257         * enum.cs (Enum::Define): Ditto.
32258
32259         * modifiers.cs (FieldAttr): Re-write.
32260
32261         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32262         (TypeContainer::HaveStaticConstructor): New property to provide access
32263         to precisely that info.
32264
32265         * modifiers.cs (MethodAttr): Re-write.
32266         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32267
32268         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32269         of top-level types as claimed.
32270
32271 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32272
32273         * expression.cs (MemberLookup): Fruitless attempt to lookup
32274         constructors.  Maybe I need to emit default constructors?  That
32275         might be it (currently .NET emits this for me automatically).
32276         (Invocation::OverloadResolve): Cope with Arguments == null.
32277         (Invocation::EmitArguments): new function, shared by the new
32278         constructor and us.
32279         (Invocation::Emit): Handle static and instance methods.  Emit
32280         proper call instruction for virtual or non-virtual invocations.
32281         (New::Emit): Implement.
32282         (New::Resolve): Implement.
32283         (MemberAccess:Resolve): Implement.
32284         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32285         to track instances.
32286         (FieldExpr::Resolve): Set type.
32287
32288         * support.cs: Handle empty arguments.
32289                 
32290         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32291         SimpleLookup): Auxiliary routines to help parse a qualifier
32292         identifier.  
32293
32294         Update qualifier_identifier rule.
32295
32296         * codegen.cs: Removed debugging messages.
32297
32298         * class.cs: Make this a global thing, this acts just as a "key" to
32299         objects that we might have around.
32300
32301         (Populate): Only initialize method_builders_to_methods once.
32302
32303         * expression.cs (PropertyExpr): Initialize type from the
32304         PropertyType. 
32305
32306         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32307         Resolve pattern.  Attempt to implicitly convert value to boolean.
32308         Emit code.
32309
32310         * expression.cs: Set the type for the int32/int32 argument case.
32311         (Binary::ResolveOperator): Set the return type to boolean for
32312         comparission operators
32313
32314         * typemanager.cs: Remove debugging print code.
32315
32316         (Invocation::Resolve): resolve type.
32317
32318         * class.cs: Allocate a MemberInfo of the correct size, as the code
32319         elsewhere depends on the test to reflect the correct contents.
32320
32321         (Method::) Keep track of parameters, due to System.Reflection holes
32322
32323         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32324         mapping here.
32325
32326         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32327         of the exact size and return that.
32328
32329         (Class::LookupMethodByBuilder): New function that maps
32330         MethodBuilders to its methods.  Required to locate the information
32331         on methods because System.Reflection bit us again.
32332
32333         * support.cs: New file, contains an interface ParameterData and
32334         two implementations: ReflectionParameters and InternalParameters
32335         used to access Parameter information.  We will need to grow this
32336         as required.
32337
32338         * expression.cs (Invocation::GetParameterData): implement a cache
32339         and a wrapper around the ParameterData creation for methods. 
32340         (Invocation::OverloadResolve): Use new code.
32341
32342 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32343
32344         * class.cs (TypeContainer::EmitField): Remove and move into 
32345         (Field::Define): here and modify accordingly.
32346         (Field.FieldBuilder): New member.
32347         (TypeContainer::Populate): Update accordingly.
32348         (TypeContainer::FindMembers): Implement.
32349
32350 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32351
32352         * statement.cs: (VariableInfo::VariableType): New field to be
32353         initialized with the full type once it is resolved. 
32354
32355 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32356
32357         * parameter.cs (GetParameterInfo): Use a type cache to compute
32358         things only once, and to reuse this information
32359
32360         * expression.cs (LocalVariableReference::Emit): Implement.
32361         (OpcodeCast::Emit): fix.
32362
32363         (ParameterReference::Resolve): Implement.
32364         (ParameterReference::Emit): Implement.
32365
32366         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32367         that are expressions need to stay as Expressions.
32368
32369         * typemanager.cs (CSharpName): Returns the C# name of a type if
32370         possible. 
32371
32372         * expression.cs (Expression::ConvertImplicit): New function that
32373         implements implicit type conversions.
32374
32375         (Expression::ImplicitReferenceConversion): Implements implicit
32376         reference conversions.
32377
32378         (EmptyCast): New type for transparent casts.
32379
32380         (OpcodeCast): New type for casts of types that are performed with
32381         a sequence of bytecodes.
32382
32383         (BoxedCast): New type used for casting value types into reference
32384         types.  Emits a box opcode.
32385
32386         (Binary::DoNumericPromotions): Implements numeric promotions of
32387         and computation of the Binary::Type.
32388
32389         (Binary::EmitBranchable): Optimization.
32390
32391         (Binary::Emit): Implement code emission for expressions.
32392
32393         * typemanager.cs (TypeManager): Added two new core types: sbyte
32394         and byte.
32395
32396 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32397
32398         * class.cs (TypeContainer::FindMembers): Method which does exactly
32399         what Type.FindMembers does, only we don't have to use reflection. No
32400         implementation yet.
32401
32402         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32403         typecontainer objects as we need to get at them.
32404         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32405
32406         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32407         typecontainer object.
32408
32409         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32410         of just a Report object.
32411
32412 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32413
32414         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32415         "remove_"
32416         (TypeContainer::Populate): Now define the delegates of the type too.
32417         (TypeContainer.Delegates): Property to access the list of delegates defined
32418         in the type.
32419
32420         * delegates.cs (Delegate::Define): Implement partially.
32421
32422         * modifiers.cs (TypeAttr): Handle more flags.
32423
32424 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32425
32426         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32427         and not <=
32428         (Operator::Define): Re-write logic to get types by using the LookupType method
32429         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32430         (Indexer::Define): Ditto.
32431         (Event::Define): Ditto.
32432         (Property::Define): Ditto.
32433
32434 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32435
32436         * class.cs (TypeContainer::Populate): Now define operators too. 
32437         (TypeContainer.Operators): New property to access the list of operators
32438         in a type.
32439         (Operator.OperatorMethodBuilder): New member to hold the method builder
32440         for the operator we are defining.
32441         (Operator::Define): Implement.
32442
32443 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32444
32445         * class.cs (Event::Define): Make the prefixes of the accessor methods
32446         addOn_ and removeOn_ 
32447
32448         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32449         of the location being passed in too. Ideally, this should go later since all
32450         error reporting should be done through the Report object.
32451
32452         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32453         (Populate): Iterate thru the indexers we have and define them too.
32454         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32455         for the get and set accessors.
32456         (Indexer::Define): Implement.
32457
32458 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32459
32460         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32461         my previous implementation, did not work.
32462
32463         * typemanager.cs: Add a couple of missing types (the longs).
32464
32465         * literal.cs: Use TypeManager.bool_type instead of getting it.
32466
32467         * expression.cs (EventExpr): New kind of expressions.
32468         (Expressio::ExprClassFromMemberInfo): finish
32469
32470 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32471
32472         * assign.cs: Emit stores to static fields differently.
32473
32474 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32475
32476         * Merge in changes and adjust code to tackle conflicts. Backed out my
32477         code in Assign::Resolve ;-) 
32478
32479 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32480
32481         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32482         instead Report.Error and also pass in the location.
32483         (CSharpParser::Lexer): New readonly property to return the reference
32484         to the Tokenizer object.
32485         (declare_local_variables): Use Report.Error with location instead of plain 
32486         old error.
32487         (CheckDef): Ditto.
32488
32489         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32490         (Operator.CheckBinaryOperator): Ditto.
32491
32492         * cs-parser.jay (operator_declarator): Update accordingly.
32493
32494         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32495         (CheckBinaryOperator): Same here.
32496
32497         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32498         on the name without any prefixes of namespace names etc. This is because we
32499         already might have something already fully qualified like 
32500         'System.Console.WriteLine'
32501
32502         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32503
32504 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32505
32506         * cs-tokenizer.cs (location): Return a string which also contains
32507         the file name.
32508
32509         * expression.cs (ElementAccess): New class for expressions of the
32510         type 'element access.'
32511         (BaseAccess): New class for expressions of the type 'base access.'
32512         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32513         respectively.
32514
32515         * cs-parser.jay (element_access): Implement action.
32516         (base_access): Implement actions.
32517         (checked_expression, unchecked_expression): Implement.
32518
32519         * cs-parser.jay (local_variable_type): Correct and implement.
32520         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32521
32522         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32523
32524         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32525         name and the specifiers.
32526
32527         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32528
32529         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32530         making them all public ;-)
32531
32532         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32533         class anyways.
32534
32535 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32536
32537         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32538         PropertyExprs.
32539         (FieldExpr, PropertyExprs): New resolved expressions.
32540         (SimpleName::MemberStaticCheck): Perform static checks for access
32541         to non-static fields on static methods. Maybe this should be
32542         generalized for MemberAccesses. 
32543         (SimpleName::ResolveSimpleName): More work on simple name
32544         resolution. 
32545
32546         * cs-parser.jay (primary_expression/qualified_identifier): track
32547         the parameter index.
32548
32549         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32550         (EmitContext::EmitBoolExpression): Chain to expression generation
32551         instead of temporary hack.
32552         (::EmitStatementExpression): Put generic expression code generation.
32553
32554         * assign.cs (Assign::Emit): Implement variable assignments to
32555         local variables, parameters and fields.
32556
32557 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32558
32559         * statement.cs (Block::GetVariableInfo): New method, returns the
32560         VariableInfo for a variable name in a block.
32561         (Block::GetVariableType): Implement in terms of GetVariableInfo
32562
32563         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32564         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32565
32566 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32567
32568         * cs-parser.jay (operator_declaration): Continue on my quest : update
32569         to take attributes argument.
32570         (event_declaration): Ditto.
32571         (enum_declaration): Ditto.
32572         (indexer_declaration): Ditto.
32573
32574         * class.cs (Operator::Operator): Update constructor accordingly.
32575         (Event::Event): Ditto.
32576
32577         * delegate.cs (Delegate::Delegate): Same here.
32578
32579         * enum.cs (Enum::Enum): Same here.
32580
32581 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32582
32583         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32584
32585         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32586
32587         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32588         being passed around as an arraylist.
32589         (Attributes::AddAttribute): Method to add attribute sections.
32590
32591         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32592         (struct_declaration): Update accordingly.
32593         (constant_declaration): Update.
32594         (field_declaration): Update.
32595         (method_header): Update.
32596         (fixed_parameter): Update.
32597         (parameter_array): Ditto.
32598         (property_declaration): Ditto.
32599         (destructor_declaration): Ditto.
32600
32601         * class.cs (Struct::Struct): Update constructors accordingly.
32602         (Class::Class): Ditto.
32603         (Field::Field): Ditto.
32604         (Method::Method): Ditto.
32605         (Property::Property): Ditto.
32606         (TypeContainer::OptAttribute): update property's return type.
32607
32608         * interface.cs (Interface.opt_attributes): New member.
32609         (Interface::Interface): Update to take the extra Attributes argument.
32610
32611         * parameter.cs (Parameter::Parameter): Ditto.
32612
32613         * constant.cs (Constant::Constant): Ditto.
32614
32615         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32616         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32617         the attributes as a parameter.
32618         (InterfaceProperty): Update constructor call.
32619         (InterfaceEvent): Ditto.
32620         (InterfaceMethod): Ditto.
32621         (InterfaceIndexer): Ditto.
32622
32623         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32624         pass the attributes too.
32625         (interface_event_declaration): Ditto.
32626         (interface_property_declaration): Ditto.
32627         (interface_method_declaration): Ditto.
32628         (interface_declaration): Ditto.
32629
32630 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32631
32632         * class.cs (Method::Define): Track the "static Main" definition to
32633         create an entry point. 
32634
32635         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32636         EntryPoint if we find it. 
32637
32638         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32639         (EmitContext::ig): Make this variable public.
32640
32641         * driver.cs: Make the default output file be the first file name
32642         with the .exe extension.  
32643
32644         Detect empty compilations
32645
32646         Handle various kinds of output targets.  Handle --target and
32647         rename -t to --dumper.
32648
32649         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32650         methods inherited from Expression return now an Expression.  This
32651         will is used during the tree rewriting as we resolve them during
32652         semantic analysis.
32653
32654         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32655         the spec.  Missing entirely is the information about
32656         accessability of elements of it.
32657
32658         (Expression::ExprClassFromMemberInfo): New constructor for
32659         Expressions that creates a fully initialized Expression based on
32660         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32661         a Type.
32662
32663         (Invocation::Resolve): Begin implementing resolution of invocations.
32664
32665         * literal.cs (StringLiteral):  Implement Emit.
32666
32667 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32668
32669         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32670         member.
32671
32672 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32673
32674         * cs-parser.jay (attribute_arguments): Implement actions.
32675         (attribute): Fix bug in production. Implement action.
32676         (attribute_list): Implement.
32677         (attribute_target): Implement.
32678         (attribute_target_specifier, opt_target_specifier): Implement
32679         (CheckAttributeTarget): New method to check if the attribute target
32680         is valid.
32681         (attribute_section): Implement.
32682         (opt_attributes): Implement.
32683
32684         * attribute.cs : New file to handle attributes.
32685         (Attribute): Class to hold attribute info.
32686
32687         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32688         (attribute_section): Modify production to use 2 different rules to 
32689         achieve the same thing. 1 s/r conflict down !
32690         Clean out commented, useless, non-reducing dimension_separator rules.
32691
32692         * class.cs (TypeContainer.attributes): New member to hold list
32693         of attributes for a type.
32694         (Struct::Struct): Modify to take one more argument, the attribute list.
32695         (Class::Class): Ditto.
32696         (Field::Field): Ditto.
32697         (Method::Method): Ditto.
32698         (Property::Property): Ditto.
32699
32700         * cs-parser.jay (struct_declaration): Update constructor call to
32701         pass in the attributes too.
32702         (class_declaration): Ditto.
32703         (constant_declaration): Ditto.
32704         (field_declaration): Ditto.
32705         (method_header): Ditto.
32706         (fixed_parameter): Ditto.
32707         (parameter_array): Ditto.
32708         (property_declaration): Ditto.
32709
32710         * constant.cs (Constant::Constant): Update constructor similarly.
32711         Use System.Collections.
32712
32713         * parameter.cs (Parameter::Parameter): Update as above.
32714
32715 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32716
32717         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32718         (TypeContainer.delegates): New member to hold list of delegates.
32719
32720         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32721         this time as I seem to be on crack ;-)
32722
32723 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32724
32725         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32726         tell whether an identifier represents a namespace.
32727
32728         * expression.cs (NamespaceExpr): A namespace expression, used only
32729         temporarly during expression resolution.
32730         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32731         utility functions to resolve names on expressions.
32732
32733 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32734
32735         * codegen.cs: Add hook for StatementExpressions. 
32736
32737         * class.cs: Fix inverted test for static flag in methods.
32738
32739 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32740
32741         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32742         to make it coincide with MS' number.
32743         (Operator::CheckBinaryOperator): Ditto.
32744
32745         * ../errors/errors.txt : Remove error numbers added earlier.
32746
32747         * ../errors/cs1019.cs : Test case for error # 1019
32748
32749         * ../errros/cs1020.cs : Test case for error # 1020
32750
32751         * cs-parser.jay : Clean out commented cruft.
32752         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32753         used anywhere - non-reducing rule.
32754         (namespace_declarations): Non-reducing rule - comment out.
32755
32756         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32757         with TypeContainer::AddEnum.
32758
32759         * delegate.cs : New file for delegate handling classes.
32760         (Delegate): Class for declaring delegates.
32761
32762         * makefile : Update.
32763
32764         * cs-parser.jay (delegate_declaration): Implement.
32765
32766 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32767
32768         * class.cs (Event::Define): Implement.
32769         (Event.EventBuilder): New member.
32770
32771         * class.cs (TypeContainer::Populate): Update to define all enums and events
32772         we have.
32773         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32774         readonly fields for all these cases ?
32775
32776 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32777
32778         * class.cs (Property): Revamp to use the convention of making fields readonly.
32779         Accordingly modify code elsewhere.
32780
32781         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32782         the Define method of the Property class.
32783
32784         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32785         trivial bug.
32786         (TypeContainer::Populate): Update to define all the properties we have. Also
32787         define all enumerations.
32788
32789         * enum.cs (Define): Implement.
32790
32791 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32792
32793         * cs-parser.jay (overloadable_operator): The semantic value is an
32794         enum of the Operator class.
32795         (operator_declarator): Implement actions.
32796         (operator_declaration): Implement.
32797
32798         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32799         validity of definitions.
32800         (Operator::CheckBinaryOperator): Static method to check for binary operators
32801         (TypeContainer::AddOperator): New method to add an operator to a type.
32802
32803         * cs-parser.jay (indexer_declaration): Added line to actually call the
32804         AddIndexer method so it gets added ;-)
32805
32806         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32807         already taken care of by the MS compiler ?  
32808
32809 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32810
32811         * class.cs (Operator): New class for operator declarations.
32812         (Operator::OpType): Enum for the various operators.
32813
32814 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32815
32816         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32817         ostensibly handle this in semantic analysis.
32818
32819         * cs-parser.jay (general_catch_clause): Comment out
32820         (specific_catch_clauses, specific_catch_clause): Ditto.
32821         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32822         (catch_args, opt_catch_args): New productions.
32823         (catch_clause): Rewrite to use the new productions above
32824         (catch_clauses): Modify accordingly.
32825         (opt_catch_clauses): New production to use in try_statement
32826         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32827         and re-write the code in the actions to extract the specific and
32828         general catch clauses by being a little smart ;-)
32829
32830         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32831         Hooray, try and catch statements parse fine !
32832
32833 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32834
32835         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32836         string from the hashtable of variables.
32837
32838         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32839         I end up making that mistake ;-)
32840         (catch_clauses): Fixed gross error which made Key and Value of the 
32841         DictionaryEntry the same : $1 !!
32842
32843 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32844
32845         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32846
32847         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32848         when the add and remove accessors are specified. 
32849
32850 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32851
32852         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32853         information about indexer_declarator.
32854         (indexer_declarator): Implement actions.
32855         (parsing_indexer): New local boolean used to keep track of whether
32856         we are parsing indexers or properties. This is necessary because 
32857         implicit_parameters come into picture even for the get accessor in the 
32858         case of an indexer.
32859         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32860
32861         * class.cs (Indexer): New class for indexer declarations.
32862         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32863         (TypeContainer::indexers): New member to hold list of indexers for the
32864         type.
32865
32866 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32867
32868         * cs-parser.jay (add_accessor_declaration): Implement action.
32869         (remove_accessor_declaration): Implement action.
32870         (event_accessors_declaration): Implement
32871         (variable_declarators): swap statements for first rule - trivial.
32872
32873         * class.cs (Event): New class to hold information about event
32874         declarations.
32875         (TypeContainer::AddEvent): New method to add an event to a type
32876         (TypeContainer::events): New member to hold list of events.
32877
32878         * cs-parser.jay (event_declaration): Implement actions.
32879
32880 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32881
32882         * cs-parser.jay (dim_separators): Implement. Make it a string
32883         concatenating all the commas together, just as they appear.
32884         (opt_dim_separators): Modify accordingly
32885         (rank_specifiers): Update accordingly. Basically do the same
32886         thing - instead, collect the brackets here.
32887         (opt_rank_sepcifiers): Modify accordingly.
32888         (array_type): Modify to actually return the complete type string
32889         instead of ignoring the rank_specifiers.
32890         (expression_list): Implement to collect the expressions
32891         (variable_initializer): Implement. We make it a list of expressions
32892         essentially so that we can handle the array_initializer case neatly too.
32893         (variable_initializer_list): Implement.
32894         (array_initializer): Make it a list of variable_initializers
32895         (opt_array_initializer): Modify accordingly.
32896
32897         * expression.cs (New::NType): Add enumeration to help us
32898         keep track of whether we have an object/delegate creation
32899         or an array creation.
32900         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32901         members to hold data about array creation.
32902         (New:New): Modify to update NewType
32903         (New:New): New Overloaded contructor for the array creation
32904         case.
32905
32906         * cs-parser.jay (array_creation_expression): Implement to call
32907         the overloaded New constructor.
32908
32909 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32910
32911         * class.cs (TypeContainer::Constructors): Return member
32912         constructors instead of returning null.
32913
32914 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32915
32916         * typemanager.cs (InitCoreTypes): Initialize the various core
32917         types after we have populated the type manager with the user
32918         defined types (this distinction will be important later while
32919         compiling corlib.dll)
32920
32921         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32922         on Expression Classification.  Now all expressions have a method
32923         `Resolve' and a method `Emit'.
32924
32925         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32926         generation from working.     Also add some temporary debugging
32927         code. 
32928
32929 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32930
32931         * codegen.cs: Lots of code generation pieces.  This is only the
32932         beginning, will continue tomorrow with more touches of polish.  We
32933         handle the fundamentals of if, while, do, for, return.  Others are
32934         trickier and I need to start working on invocations soon.
32935
32936         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32937         s.InitStatement. 
32938
32939         * codegen.cs (EmitContext): New struct, used during code
32940         emission to keep a context.   Most of the code generation will be
32941         here. 
32942
32943         * cs-parser.jay: Add embedded blocks to the list of statements of
32944         this block.  So code generation proceeds in a top down fashion.
32945
32946 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32947
32948         * statement.cs: Add support for multiple child blocks.
32949
32950 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32951
32952         * codegen.cs (EmitCode): New function, will emit the code for a
32953         Block of code given a TypeContainer and its ILGenerator. 
32954
32955         * statement.cs (Block): Standard public readonly optimization.
32956         (Block::Block constructors): Link children. 
32957         (Block::Child): Child Linker.
32958         (Block::EmitVariables): Emits IL variable declarations.
32959
32960         * class.cs: Drop support for MethodGroups here, delay until
32961         Semantic Analysis.
32962         (Method::): Applied the same simplification that I did before, and
32963         move from Properties to public readonly fields.
32964         (Method::ParameterTypes): Returns the parameter types for the
32965         function, and implements a cache that will be useful later when I
32966         do error checking and the semantic analysis on the methods is
32967         performed.
32968         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32969         and made a method, optional argument tells whether this is a class
32970         or a structure to apply the `has-this' bit.
32971         (Method::GetCallingConvention): Implement, returns the calling
32972         convention. 
32973         (Method::Define): Defines the type, a second pass is performed
32974         later to populate the methods.
32975
32976         (Constructor::ParameterTypes): implement a cache similar to the
32977         one on Method::ParameterTypes, useful later when we do semantic
32978         analysis. 
32979
32980         (TypeContainer::EmitMethod):  New method.  Emits methods.
32981
32982         * expression.cs: Removed MethodGroup class from here.
32983
32984         * parameter.cs (Parameters::GetCallingConvention): new method.
32985
32986 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32987
32988         * class.cs (TypeContainer::Populate): Drop RootContext from the
32989         argument. 
32990
32991         (Constructor::CallingConvention): Returns the calling convention.
32992         (Constructor::ParameterTypes): Returns the constructor parameter
32993         types. 
32994
32995         (TypeContainer::AddConstructor): Keep track of default constructor
32996         and the default static constructor.
32997
32998         (Constructor::) Another class that starts using `public readonly'
32999         instead of properties. 
33000
33001         (Constructor::IsDefault): Whether this is a default constructor. 
33002
33003         (Field::) use readonly public fields instead of properties also.
33004
33005         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33006         track of static constructors;  If none is used, turn on
33007         BeforeFieldInit in the TypeAttributes. 
33008
33009         * cs-parser.jay (opt_argument_list): now the return can be null
33010         for the cases where there are no arguments. 
33011
33012         (constructor_declarator): If there is no implicit `base' or
33013         `this', then invoke the default parent constructor. 
33014
33015         * modifiers.cs (MethodAttr): New static function maps a set of
33016         modifiers flags into a MethodAttributes enum
33017         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33018         MethodAttr, TypeAttr to represent the various mappings where the
33019         modifiers are used.
33020         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33021
33022 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33023
33024         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33025         method arguments.
33026
33027         * interface.cs (PopulateIndexer): Implemented the code generator
33028         for interface indexers.
33029
33030 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33031
33032         * interface.cs (InterfaceMemberBase): Now we track the new status
33033         here.  
33034
33035         (PopulateProperty): Implement property population.  Woohoo!  Got
33036         Methods and Properties going today. 
33037
33038         Removed all the properties for interfaces, and replaced them with
33039         `public readonly' fields. 
33040
33041 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33042
33043         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33044         initialize their hashtables/arraylists only when they are needed
33045         instead of doing this always.
33046
33047         * parameter.cs: Handle refs and out parameters.
33048
33049         * cs-parser.jay: Use an ArrayList to construct the arguments
33050         instead of the ParameterCollection, and then cast that to a
33051         Parameter[] array.
33052
33053         * parameter.cs: Drop the use of ParameterCollection and use
33054         instead arrays of Parameters.
33055
33056         (GetParameterInfo): Use the Type, not the Name when resolving
33057         types. 
33058
33059 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33060
33061         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33062         and instead use public readonly fields.
33063
33064         * class.cs: Put back walking code for type containers.
33065
33066 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33067
33068         * class.cs (MakeConstant): Code to define constants.
33069
33070         * rootcontext.cs (LookupType): New function.  Used to locate types 
33071
33072
33073 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33074
33075         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33076         this System.Reflection code is.  Kudos to Microsoft
33077
33078         * typemanager.cs: Implement a type cache and avoid loading all
33079         types at boot time.  Wrap in LookupType the internals.  This made
33080         the compiler so much faster.  Wow.  I rule!
33081
33082         * driver.cs: Make sure we always load mscorlib first (for
33083         debugging purposes, nothing really important).
33084
33085         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33086         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33087
33088         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33089         on namespaces that have been imported using the `using' keyword.
33090
33091         * class.cs (TypeContainer::TypeAttr): Virtualize.
33092         (Class::TypeAttr): Return attributes suitable for this bad boy.
33093         (Struct::TypeAttr): ditto.
33094         Handle nested classes.
33095         (TypeContainer::) Remove all the type visiting code, it is now
33096         replaced with the rootcontext.cs code
33097
33098         * rootcontext.cs (GetClassBases): Added support for structs. 
33099
33100 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33101
33102         * interface.cs, statement.cs, class.cs, parameter.cs,
33103         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33104         Drop use of TypeRefs, and use strings instead.
33105
33106 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33107
33108         * rootcontext.cs: 
33109
33110         * class.cs (Struct::Struct): set the SEALED flags after
33111         checking the modifiers.
33112         (TypeContainer::TypeAttr): new property, returns the
33113         TypeAttributes for a class.  
33114
33115         * cs-parser.jay (type_list): Oops, list production was creating a
33116         new list of base types.
33117
33118         * rootcontext.cs (StdLib): New property.
33119         (GetInterfaceTypeByName): returns an interface by type name, and
33120         encapsulates error handling here.
33121         (GetInterfaces): simplified.
33122         (ResolveTree): Encapsulated all the tree resolution here.
33123         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33124         types. 
33125
33126         * driver.cs: Add support for --nostdlib, to avoid loading the
33127         default assemblies.
33128         (Main): Do not put tree resolution here. 
33129
33130         * rootcontext.cs: Beginning of the class resolution.
33131
33132 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33133
33134         * rootcontext.cs: Provide better error reporting. 
33135
33136         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33137
33138         * rootcontext.cs (CreateInterface): Handle the case where there
33139         are no parent interfaces.
33140
33141         (CloseTypes): Routine to flush types at the end.
33142         (CreateInterface): Track types.
33143         (GetInterfaces): Returns an array of Types from the list of
33144         defined interfaces.
33145
33146         * typemanager.c (AddUserType): Mechanism to track user types (puts
33147         the type on the global type hash, and allows us to close it at the
33148         end). 
33149
33150 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33151
33152         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33153         RecordInterface instead.
33154
33155         * cs-parser.jay: Updated to reflect changes above.
33156
33157         * decl.cs (Definition): Keep track of the TypeBuilder type that
33158         represents this type here.  Not sure we will use it in the long
33159         run, but wont hurt for now.
33160
33161         * driver.cs: Smaller changes to accomodate the new code.
33162
33163         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33164         when done. 
33165
33166         * rootcontext.cs (CreateInterface):  New method, used to create
33167         the System.TypeBuilder type for interfaces.
33168         (ResolveInterfaces): new entry point to resolve the interface
33169         hierarchy. 
33170         (CodeGen): Property, used to keep track of the code generator.
33171
33172 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33173
33174         * cs-parser.jay: Add a second production for delegate_declaration
33175         with `VOID'.
33176
33177         (enum_body): Put an opt_comma here instead of putting it on
33178         enum_body or enum_member_declarations so we can handle trailing
33179         commas on enumeration members.  Gets rid of a shift/reduce.
33180
33181         (type_list): Need a COMMA in the middle.
33182
33183         (indexer_declaration): Tell tokenizer to recognize get/set
33184
33185         * Remove old targets.
33186
33187         * Re-add the parser target.
33188
33189 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33190
33191         * cs-parser.jay: Add precendence rules for a number of operators
33192         ot reduce the number of shift/reduce conflicts in the grammar.
33193
33194 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33195
33196         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33197         and put it here.
33198
33199         Get rid of old crufty code.
33200
33201         * rootcontext.cs: Use this to keep track of the parsed
33202         representation and the defined types available to the program. 
33203
33204         * gen-treedump.cs: adjust for new convention.
33205
33206         * type.cs: Split out the type manager, and the assembly builder
33207         from here. 
33208
33209         * typemanager.cs: the type manager will live here now.
33210
33211         * cil-codegen.cs: And the code generator here. 
33212
33213 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33214
33215         * makefile: Fixed up for easy making.
33216
33217 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33218
33219         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33220         the 
33221
33222         (unary_expression): Expand pre_increment_expression and
33223         post_decrement_expression to reduce a shift/reduce.
33224
33225 2001-07-11  Simon Cozens
33226
33227         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33228
33229         Improve allow_keyword_as_indent name.
33230
33231 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33232
33233         * Adjustments for Beta2. 
33234
33235 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33236
33237         * decl.cs: Added `Define' abstract method.
33238         (InTransit): new property, used to catch recursive definitions. 
33239
33240         * interface.cs: Implement `Define'. 
33241
33242         * modifiers.cs: Map Modifiers.constants to
33243         System.Reflection.TypeAttribute flags.
33244
33245         * class.cs: Keep track of types and user-defined types.
33246         (BuilderInit): New method for creating an assembly
33247         (ResolveType): New function to launch the resolution process, only
33248         used by interfaces for now.
33249
33250         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33251         that are inserted into the name space. 
33252
33253 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33254
33255         * ARGH.  I have screwed up my tree so many times due to the use of
33256         rsync rather than using CVS.  Going to fix this at once. 
33257
33258         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33259         load types.
33260
33261 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33262
33263         * Experiment successful: Use System.Type rather that our own
33264         version of Type.  
33265
33266 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33267
33268         * cs-parser.jay: Removed nsAliases from here.
33269
33270         Use new namespaces, handle `using XXX;' 
33271
33272         * namespace.cs: Reimplemented namespace handling, use a recursive
33273         definition of the class.  Now we can keep track of using clauses
33274         and catch invalid using clauses.
33275
33276 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33277
33278         * gen-treedump.cs: Adapted for all the renaming.
33279
33280         * expression.cs (Expression): this class now has a Type property
33281         which returns an expression Type.
33282
33283         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33284         `Type', as this has a different meaning now in the base
33285
33286 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33287
33288         * interface.cs, class.cs: Removed from all the sources the
33289         references to signature computation, as we can not do method
33290         signature computation during the parsing time, as we are not
33291         trying to solve at that point distinguishing:
33292
33293         class X {
33294                 void a (Blah x) {}
33295                 void a (NS.Blah x) {}
33296         }
33297
33298         Which depending on the context might be valid or not, as we do not
33299         know if Blah is the same thing as NS.Blah at that point.
33300
33301         * Redid everything so the code uses TypeRefs now instead of
33302         Types.  TypeRefs are just temporary type placeholders, that need
33303         to be resolved.  They initially have a pointer to a string and the
33304         current scope in which they are used.  This is used later by the
33305         compiler to resolve the reference to an actual Type. 
33306
33307         * DeclSpace is no longer a CIR.Type, and neither are
33308         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33309         are all DeclSpaces, but no Types. 
33310
33311         * type.cs (TypeRefManager): This implements the TypeRef manager,
33312         which keeps track of all the types that need to be resolved after
33313         the parsing has finished. 
33314
33315 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33316
33317         * ARGH.  We are going to have to store `foreach' as a class rather
33318         than resolving it, as we need to verify error 1579 after name
33319         resolution.   *OR* we could keep a flag that says `This request to
33320         IEnumerator comes from a foreach statement' which we can then use
33321         to generate the error.
33322
33323 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33324
33325         * class.cs (TypeContainer.AddMethod): we now add methods to the
33326         MethodGroup instead of the method hashtable.  
33327
33328         * expression.cs: Add MethodGroup abstraction, which gets us one
33329         step closer to the specification in the way we handle method
33330         declarations.  
33331
33332         * cs-parser.jay (primary_expression): qualified_identifier now
33333         tried to match up an identifier to a local variable reference or
33334         to a parameter reference.
33335
33336         current_local_parameters is now a parser global variable that
33337         points to the current parameters for the block, used during name
33338         lookup.
33339
33340         (property_declaration): Now creates an implicit `value' argument to
33341         the set accessor.
33342
33343 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33344
33345         * parameter.cs: Do not use `param' arguments as part of the
33346         signature, per the spec.
33347
33348 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33349
33350         * decl.cs: Base class for classes, structs and interfaces.  This
33351         is the "Declaration Space" 
33352
33353         * cs-parser.jay: Use CheckDef for checking declaration errors
33354         instead of having one on each function.
33355
33356         * class.cs: Factor out some code for handling error handling in
33357         accordance to the "Declarations" section in the "Basic Concepts"
33358         chapter in the ECMA C# spec.
33359
33360         * interface.cs: Make all interface member classes derive from
33361         InterfaceMemberBase.
33362
33363 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33364
33365         * Many things: all interfaces are parsed and generated in
33366         gen-treedump.  Support for member variables, constructors,
33367         destructors, properties, constants is there.
33368
33369         Beginning of the IL backend, but very little done, just there for
33370         testing purposes. 
33371
33372 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33373
33374         * cs-parser.jay: Fix labeled statement.
33375
33376         * cs-tokenizer.cs (escape): Escape " and ' always.
33377         ref_line, ref_name: keep track of the line/filename as instructed
33378         by #line by the compiler.
33379         Parse #line.
33380
33381 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33382
33383         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33384         to match the values in System.CodeDOM.
33385
33386         Divid renamed to Divide.
33387
33388         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33389         statements. 
33390         (Statements.set): remove.
33391
33392         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33393         statements. 
33394
33395         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33396         falseStatements always have valid values. 
33397
33398         * cs-parser.jay: Use System.CodeDOM now.
33399