2010-05-18 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-05-18  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #446507
4         * method.cs: Only one method can implement an interface.
5
6 2010-05-18  Marek Safar  <marek.safar@gmail.com>
7
8         A fix for bug #594905
9         * convert.cs, constant.cs, expression.cs, literal.cs, ecore.cs:
10         Typed null can be used as a source for expression methods.
11
12 2010-05-18  Marek Safar  <marek.safar@gmail.com>
13
14         A fix for bug #606551
15         * namespace.cs: Using directive imports only types and not nested
16         namespaces.
17
18 2010-05-17  Marek Safar  <marek.safar@gmail.com>
19
20         * typespec.cs, expression.cs, statement.cs, ecore.cs, complete.cs,
21         delegate.cs: Member instance is resolved after member overload
22         definitely resolves static/instance property of member expression.
23         Fixes #545047, #358848, #456605, #460016, #603299
24
25 2010-05-12  Marek Safar  <marek.safar@gmail.com>
26
27         A fix for bug #604981
28         * generic.cs, decl.cs, anonymous.cs: Reset more type arguments
29         details for nested anonymous methods stories.
30
31 2010-05-11  Marek Safar  <marek.safar@gmail.com>
32
33         A fix for bug #604735
34         * namespace.cs: Don't report namespace collision.
35
36 2010-05-11  Marek Safar  <marek.safar@gmail.com>
37
38         A fix for bug #604748
39         * class.cs, typespec.cs: Search full imported attribute hierarchy
40         for AttributeUsage.
41
42 2010-05-11  Marek Safar  <marek.safar@gmail.com>
43
44         * namespace.cs: Ignore missing dependencies failure at
45         initialization.
46
47 2010-05-11  Marek Safar  <marek.safar@gmail.com>
48
49         A fix for bug #604640
50         * namespace.cs: Don't resolve using constraints too early.
51
52 2010-05-11  Marek Safar  <marek.safar@gmail.com>
53
54         A fix for bug #604239
55         * generic.cs: Copy partial type constraints to partial container.
56
57 2010-05-10  Marek Safar  <marek.safar@gmail.com>
58
59         A fix for bug #557210
60         * import.cs: Relax underlying enum field rules.
61
62 2010-05-10  Marek Safar  <marek.safar@gmail.com>
63
64         A fix for bug #603476
65         * property.cs: Implement IParametersMember for indexer accessors.
66
67 2010-05-07  Marek Safar  <marek.safar@gmail.com>
68
69         A fix for bug #601141
70         * class.cs: Update all partial modifiers.
71
72 2010-05-06  Marek Safar  <marek.safar@gmail.com>
73
74         A fix for bug #601708
75         * method.cs, membercache.cs: Destructors cannot be hidden.
76
77 2010-05-06  Marek Safar  <marek.safar@gmail.com>
78
79         A fix for bug #602551
80         * class.cs: Resursive reference of type definition is allowed.
81
82 2010-05-06  Marek Safar  <marek.safar@gmail.com>
83
84         * anonymous.cs: Mutate cached storey instance types too.
85
86 2010-05-06  Marek Safar  <marek.safar@gmail.com>
87
88         A fix for bug #602443
89         * convert.cs: Explicit enum conversion cannot involve user operators
90
91 2010-05-05  Miguel de Icaza  <miguel@novell.com>
92
93         * class.cs (TypeContainer.DefineBaseTypes)
94         (TypeContainer.CheckRecursiveDefinition): check for the iface not
95         being null, as we could have failed resolution and crashed;
96         Fixes #442144
97
98         * cs-parser.jay: Productions to catch common mistakes when other
99         punctuation operators are used instead of comma.   Fixes 571702 
100
101 2010-05-05  Marek Safar  <marek.safar@gmail.com>
102
103         * anonymous.cs: Mutate correct set of constraints.
104
105 2010-05-05  Marek Safar  <marek.safar@gmail.com>
106
107         A fix for bug #602842
108         * expression.cs: Resolve all array bound arguments.
109
110 2010-05-05  Marek Safar  <marek.safar@gmail.com>
111
112         * import.cs: Don't import private fields.
113
114 2010-04-30  Marek Safar  <marek.safar@gmail.com>
115
116         Partially based on patch by <sami.lamti@gmail.com>
117
118         * eval.cs, ecore.cs: Fixed eval show methods.
119
120 2010-04-30  Marek Safar  <marek.safar@gmail.com>
121
122         * generic.cs, delegate.cs: Implement output type inference of
123         methodgroup now when the specification was cleared at least little
124         bit.
125
126 2010-04-29  Marek Safar  <marek.safar@gmail.com>
127
128         A fix for bug #575611
129         * class.cs: Fix recursive unmanaged recursice sruct check.
130         
131 2010-04-29  Marek Safar  <marek.safar@gmail.com>
132
133         A fix for bug #479776
134         * expression.cs: Implement typeof unbounded nested generic types.
135
136 2010-04-29  Marek Safar  <marek.safar@gmail.com>
137
138         A fix for bug #474953
139         * class.cs: Fix valid recursive base type definition.
140
141 2010-04-29  Marek Safar  <marek.safar@gmail.com>
142
143         A fix for bug #421737
144         * convert.cs, expression.cs: A boxing conversion exists from a
145         nullable-type to a reference type, if a boxing conversion exists
146         from the underlying non-nullable-value-type to the reference type.
147
148 2010-04-29  Marek Safar  <marek.safar@gmail.com>
149
150         A fix for bug #376875
151         * import.cs: Import volatile modifier.
152
153 2010-04-29  Marek Safar  <marek.safar@gmail.com>
154
155         A fix for bug #372412
156         * typespec.cs, expression.cs, codegen.cs: Emit readonly prefix for
157         generic arrays.
158
159 2010-04-29  Marek Safar  <marek.safar@gmail.com>
160
161         A fix for bug #568955
162         * statements.cs: Handle recursive scope initializers.
163
164 2010-04-28  Marek Safar  <marek.safar@gmail.com>
165
166         A fix for bug #566511
167         * anonymous.cs: Always get inflated version of hoisted variable
168         on generic type definition.
169
170 2010-04-28  Marek Safar  <marek.safar@gmail.com>
171
172         * import.cs, membercache.cs: Relax rules for valid properties.
173
174 2010-04-28  Marek Safar  <marek.safar@gmail.com>
175
176         * import.cs: Intern arrays used in generic arguments.
177
178 2010-04-28  Marek Safar  <marek.safar@gmail.com>
179
180         A fix for bug #600398
181         * convert.cs: Actually use effective base type for the comparison.
182
183 2010-04-28  Marek Safar  <marek.safar@gmail.com>
184
185         A fix for bug #600326
186         * ecore.cs: Pass arity to base member lookup.
187
188 2010-04-28  Marek Safar  <marek.safar@gmail.com>
189
190         A fix for bug #573385
191         * expression.cs: MemberAccess is of generic type based on right
192         arity length only.
193
194 2010-05-28  Marek Safar  <marek.safar@gmail.com>
195
196         * cs-tokenizer.cs: Made tab size configurable.
197
198 2010-05-27  Marek Safar  <marek.safar@gmail.com>
199
200         * attribute.cs: Ensure Obsolete members are defined before doing
201         ctor look-up.
202
203 2010-05-27  Marek Safar  <marek.safar@gmail.com>
204
205         * visit.cs: Add DOM visitor skeleton.
206         
207         * *.cs: Updated.
208
209 2010-05-27  Marek Safar  <marek.safar@gmail.com>
210
211         * attribute.cs, codegen.cs: Drop COMPILER_ACCESS hack.
212         
213 2010-05-27  Marek Safar  <marek.safar@gmail.com>
214
215         * *.cs: Major rewrite of compiler internals to better work with
216         unmodified System.Reflection.Emit. Some of the key changes are
217         - TypeSpec replaces reflection specific System.Type.
218         - All Type(TypeSpec) operations are now done in compiler therefore
219         no dependency on SRE to inflate generic members and types or to
220         query unclosed types.
221         - MemberCache is now the only and full hierarchical topology.
222         - Generic constraints are implemented properly.
223         - And as a bonus compilation is on average 30% faster.
224
225 2010-04-15  Jb Evain  <jbevain@novell.com>
226
227         * dmcs.exe.config: update the runtime version to .net 4.0 RTM.
228
229 2010-04-12  Marek Safar  <marek.safar@gmail.com>
230
231         * expression.cs, attribute.cs, parameter.cs: More attribute type
232         checks.
233
234 2010-04-12  Marek Safar  <marek.safar@gmail.com>
235
236         A fix for bug #593342
237
238         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
239         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
240         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
241         codegen.cs: Add custom attribute encoder to deal with unfinished
242         types and easier corlib bootstrap from its own types.
243
244 2010-03-26  Marek Safar  <marek.safar@gmail.com>
245
246         * cs-parser.jay: Report invalid constraint types.
247
248 2010-03-16  Jb Evain  <jbevain@novell.com>
249
250         * Makefile: rename the net_2_1 profile to moonlight.
251
252 2010-03-11  Marek Safar  <marek.safar@gmail.com>
253
254         * statement.cs, cs-parser.jay: Use correct location for empty
255         statements.
256
257 2010-03-11  Marek Safar  <marek.safar@gmail.com>
258
259         * cs-parser.jay: Disable Location from expression.
260         
261         * generic.cs: Check constraints for overrides in the parser.
262
263 2010-03-09  Marek Safar  <marek.safar@gmail.com>
264
265         * cs-parser.jay (GetLocation): Use an expression when available.
266
267 2010-03-04  Marek Safar  <marek.safar@gmail.com>
268
269         A fix for bug #582579
270         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
271
272 2010-03-04  Marek Safar  <marek.safar@gmail.com>
273
274         A patch by kornelpal@gmail.com
275         
276         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
277         compiler generated classes sealed by default. Emit and close top
278         level compiler generated classes as well. 
279         
280         * support.cs: Use RuntimeHelpers.GetHashCode.
281
282 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
283
284         * Makefile: We need to use the internal bootstrapping gmcs for
285         net_2_1_bootstrap too now.
286
287 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
288
289         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
290
291 2010-03-02  Marek Safar  <marek.safar@gmail.com>
292
293         * cs-tokenizer.cs: Missed few locations in previous fix.
294
295 2010-03-02  Marek Safar  <marek.safar@gmail.com>
296
297         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
298         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
299         Report correct location for operator errors.
300
301 2010-03-02  Marek Safar  <marek.safar@gmail.com>
302
303         * typemanager.cs (IsDynamicType): Don't check external types when
304         the attribute is not external.
305
306 2010-02-24  Marek Safar  <marek.safar@gmail.com>
307
308         A fix for bug #582579
309         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
310         modifiers.
311
312 2010-02-24  Marek Safar  <marek.safar@gmail.com>
313
314         A fix for bug #581804
315         * ecore.cs: Fixed type comparison.
316
317 2010-02-08  Miguel de Icaza  <miguel@novell.com>
318
319         * namespace.cs (CompletionGetTypesStartingWith): Do not include
320         private types in the completion results.
321
322         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
323         ... let ?"
324
325 2010-02-17  Marek Safar  <marek.safar@gmail.com>
326
327         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
328         constraint parsing.
329
330 2010-02-14  Miguel de Icaza  <miguel@novell.com>
331
332         * eval.cs: Do not do the report printer dance unless the user has
333         set the DescribeTypes feature.
334
335 2010-02-10  Marek Safar  <marek.safar@gmail.com>
336
337         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
338
339 2010-02-08  Marek Safar  <marek.safar@gmail.com>
340
341         A fix for bug #577029
342         * anonymous.cs: Fixed TypeBuilder* check.
343
344 2010-02-06  Miguel de Icaza  <miguel@novell.com>
345
346         * eval.cs (CompileBlock): Also undo if there are problems during
347         semantic analysis, fixes various cases where invalid C# code would
348         be reported, but the internal changes would not be undone.
349
350 2010-02-03  Miguel de Icaza  <miguel@novell.com>
351
352         * driver.cs: Change the --fatal flag to allow a number to be
353         passed, this ignores the first N fatal errors.   Useful to debug
354         errors that do not happen on the first hit.
355
356         * cs-parser.jay (invocation_expression): accept both the
357         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
358         inside an invocation.
359
360         * driver.cs: Expose FatalErrors.
361
362         * eval.cs: Initialize the printer's Fatal property from the
363         Driver's FatalError flag, this allows csharp --fatal to work
364         again. 
365
366         Add support for calling Describe (typeof (TYPE)) if the expression
367         entered is a TYPE.
368         
369 2010-02-02  Marek Safar  <marek.safar@gmail.com>
370
371         A fix for bug #574991
372         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
373         --lint.
374
375 2010-02-02  Marek Safar  <marek.safar@gmail.com>
376
377         A fix for bug #575986
378         * expression.cs: Don't mutate typeof type definitions.
379
380 2010-01-28  Marek Safar  <marek.safar@gmail.com>
381
382         * decl.cs: Use only one set of modifiers.
383
384 2010-01-26  Marek Safar  <marek.safar@gmail.com>
385
386         A fix for bug #573329
387         * eval.cs: Don't disable error reporting completely on silent mode.
388         
389 2010-01-25  Marek Safar  <marek.safar@gmail.com>
390
391         A fix for bug #573312
392         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
393         pointer index of unknown size types greater than 2.
394
395 2010-01-15  Marek Safar  <marek.safar@gmail.com>
396
397         * *.cs: Use only 1 member kind enum.
398
399 2010-01-15  Marek Safar  <marek.safar@gmail.com>
400
401         * *.cs: Add event specification.
402
403 2010-01-14  Marek Safar  <marek.safar@gmail.com>
404
405         * membercache.cs: Extracted from decl.cs.
406         
407         * *.cs: Put more infrastructure in place.
408
409 2010-01-13  Marek Safar  <marek.safar@gmail.com>
410
411         * *.cs: Add property specification, unused yet.
412
413 2010-01-13  Marek Safar  <marek.safar@gmail.com>
414
415         * property.cs: Move all property based declarations into a new file.
416
417 2010-01-13  Marek Safar  <marek.safar at gmail.com>
418
419         * expression.cs (Conditional): Resolve reduced expression.
420
421 2010-01-13  Marek Safar  <marek.safar at gmail.com>
422
423         * *.cs: Introduced non-generic method specification.
424
425 2010-01-07  Marek Safar  <marek.safar@gmail.com>
426
427         * method.cs: Move all method based declarations into a new file.
428
429 2010-01-07  Marek Safar  <marek.safar@gmail.com>
430
431         * *.cs: Extract field specification.
432
433 2009-12-17  Marek Safar  <marek.safar@gmail.com>
434
435         * field.cs: Extracted from class.cs
436
437 2009-12-15  Marek Safar  <marek.safar@gmail.com>
438
439         * attribute.cs (GetFixedBuffer): Work on field definition only.
440
441 2009-12-15  Marek Safar  <marek.safar@gmail.com>
442
443         * *.cs: Clean up NET_4_0 conditional where possible.
444
445 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
446
447         support.cs (DynamicType): Assembly property returns the assembly builder.
448         This is required due to how compiler context works in corlib.
449
450 2009-12-14  Marek Safar  <marek.safar@gmail.com>
451
452         A fix for bug #564376
453         * assign.cs (LocalTemporary): Removed no longer needed special
454         by-ref handling.
455
456 2009-12-11  Marek Safar  <marek.safar@gmail.com>
457
458         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
459         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
460         enum for easier debugging.
461
462 2009-12-10  Marek Safar  <marek.safar@gmail.com>
463
464         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
465         point.
466         
467         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
468         directly.
469
470 2009-12-10  Marek Safar  <marek.safar@gmail.com>
471
472         * cs-parser.jay, statement.cs: Handle parser error in code
473         completition.
474
475 2009-12-10  Marek Safar  <marek.safar@gmail.com>
476
477         * ecore.cs: Ignore base imported methods when they are already
478         in method bag.
479         
480         * eval.cs: Handle non-existent keys.
481         
482         * report.cs, driver.cs: Make fatal work with console printer only.
483
484 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
485
486         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
487
488 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
489
490         * typemanager.cs: Add MakeGenericMethod that checks if the method
491         is really the generic method definition.
492
493         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
494         to inflate generic methods.
495
496 2009-12-08  Marek Safar  <marek.safar@gmail.com>
497
498         A fix for bug #561149
499         * anonymous.cs: Use actual type parameters when checking for generic
500         method host.
501
502 2009-12-08  Marek Safar  <marek.safar@gmail.com>
503
504         A fix for bug #561369
505         * expression.cs (DoNumericPromotion): Fixed typo.
506
507 2009-12-08  Marek Safar  <marek.safar@gmail.com>
508
509         *.cs: Moving to generics world.
510
511         cs-parser.jay: Removed current_array_type.
512
513 2009-12-07  Marek Safar  <marek.safar@gmail.com>
514
515         *.cs: Moving to generics world.
516
517 2009-12-04  Marek Safar  <marek.safar@gmail.com>
518
519         *.cs: Moving to generics world (day 2).
520
521 2009-12-03  Marek Safar  <marek.safar@gmail.com>
522
523         *.cs: Moving to generics world.
524
525 2009-12-02  Marek Safar  <marek.safar@gmail.com>
526
527         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
528         Encode dynamic type attribute for elements where attributes cannot
529         be used.
530
531 2009-12-01  Marek Safar  <marek.safar@gmail.com>
532
533          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
534          arguments by ref.
535
536 2009-12-01  Marek Safar  <marek.safar@gmail.com>
537
538         A fix for bug #360455
539         * class.cs: Never report a unused warning for generic events to
540         workaround wrong expression type.
541
542 2009-11-30  Marek Safar  <marek.safar@gmail.com>
543
544         A fix for bug #558305
545         * decl.cs, class.cs: Check partial method definitions using correct
546         flag.
547
548 2009-11-30  Marek Safar  <marek.safar@gmail.com>
549
550         * argument.cs: Don't cache rarely used dynamic flag.
551
552 2009-11-27  Marek Safar  <marek.safar@gmail.com>
553
554         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
555
556 2009-11-27  Marek Safar  <marek.safar@gmail.com>
557
558         * ecore.cs (SimpleName): Removed no longer needed in_transit as
559         Resolve is now non-reentrant (saves ~0.6MB for corlib).
560
561 2009-11-26  Marek Safar  <marek.safar@gmail.com>
562
563         A fix for bug #545081
564         * decl.cs: Check private nested types of nested types recursively.
565
566 2009-11-26  Marek Safar  <marek.safar@gmail.com>
567
568         A fix for bug #558305
569         * location.cs: Ignore self referencing #line directive
570
571 2009-11-26  Marek Safar  <marek.safar@gmail.com>
572
573         A fix for bug #558292
574         * class.cs: Allow single unsafe fixed buffer fields.
575
576 2009-11-26  Marek Safar  <marek.safar@gmail.com>
577
578         * expression: Optimize few more zero-based operations.
579
580 2009-11-26  Marek Safar  <marek.safar@gmail.com>
581
582         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
583         avoids boxing of literal values.
584
585 2009-11-26  Marek Safar  <marek.safar@gmail.com>
586
587         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
588         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
589         codegen.cs: LocatedToken redesing to avoid excessive allocation and
590         boxing (saves ~7MB for corlib). Also fixes presise token location.
591
592 2009-11-25  Marek Safar  <marek.safar@gmail.com>
593
594         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
595         common data buckers.
596
597 2009-11-24  Marek Safar  <marek.safar@gmail.com>
598
599         * expression.cs: Lower static array initializer barrier.
600         
601         * support.cs, driver.cs: Share reader buffer.
602
603 2009-11-23  Marek Safar  <marek.safar@gmail.com>
604
605         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
606
607 2009-11-23  Marek Safar  <marek.safar@gmail.com>
608
609         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
610         cleanup some obsolete code.
611
612 2009-11-20  Marek Safar  <marek.safar@gmail.com>
613
614         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
615         Expression.Resolve.
616
617 2009-11-20  Marek Safar  <marek.safar@gmail.com>
618
619         * *.cs: Resolved expressions are never resolved again, this helps to
620         uncover some not easy to find bugs and improve the performance.
621
622 2009-11-19  Marek Safar  <marek.safar@gmail.com>
623
624         * *.cs: Made constant expressions fully compatible with any other
625         expression.
626
627 2009-11-19  Marek Safar  <marek.safar@gmail.com>
628
629         * *.cs: DoResolve is a worker method and has to be protected.
630
631 2009-11-18  Marek Safar  <marek.safar@gmail.com>
632
633         * *.cs: More context specific handling.
634
635 2009-11-17  Marek Safar  <marek.safar@gmail.com>
636
637         * *.cs: More context specific handling.
638
639 2009-11-16  Marek Safar  <marek.safar@gmail.com>
640
641         * dynamic.cs, class.cs: Removed few fixed user types conversions.
642         
643         * symbolwriter.cs: Uses public ILOffset.
644
645 2009-11-13  Marek Safar  <marek.safar@gmail.com>
646
647         A fix for bug #553650
648         * generic.cs: Another missing TypeToCoreType, still too many to fix.
649
650 2009-11-13  Marek Safar  <marek.safar@gmail.com>
651
652         A fix for bug #555170
653
654         * class.cs, delegate.cs, enum.cs: Constants have to be available
655         for parameters resolve.
656
657 2009-11-12  Marek Safar  <marek.safar@gmail.com>
658
659         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
660         arrays.
661
662 2009-11-12  Marek Safar  <marek.safar@gmail.com>
663
664         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
665         with a statically known candidate set.
666
667 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
668
669         * generic.cs: Made type inflation for generic constraint checks
670         recursive. This fixes BGO #553655.
671
672 2009-11-11  Marek Safar  <marek.safar@gmail.com>
673
674         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
675         checks.
676
677 2009-11-10  Marek Safar  <marek.safar@gmail.com>
678
679         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
680         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
681         attribute.cs: Add some dynamic error checking.
682
683 2009-11-07  Marek Safar  <marek.safar@gmail.com>
684
685         A fix for bug #553465
686
687         * expression.cs: Fixed mixed version of expression tree anonymous
688         type.
689
690 2009-11-06  Marek Safar  <marek.safar@gmail.com>
691
692         A fix for bug #553031
693
694         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
695         expression tree version of anonymous type with members declaration.
696
697 2009-11-05  Marek Safar  <marek.safar@gmail.com>
698
699         * parameter.cs: Handle nullable parameter default expression.
700         
701         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
702         class.cs, attribute.cs: Check for wrong dynamic arguments.
703
704 2009-11-05  Marek Safar  <marek.safar@gmail.com>
705
706         * statement.cs: Dynamic statements.
707
708 2009-11-04  Marek Safar  <marek.safar@gmail.com>
709
710         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
711         Compound assignments over dynamic type.
712
713 2009-11-03  Marek Safar  <marek.safar@gmail.com>
714
715         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
716         constructor arguments.
717
718 2009-10-30  Marek Safar  <marek.safar@gmail.com>
719
720         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
721         codegen.cs: Unary mutator on dynamic member access expression.
722
723 2009-10-29  Marek Safar  <marek.safar@gmail.com>
724
725         A fix for bug #550580   
726         * convert.cs: Don't eliminate explicit precission casts.
727
728 2009-10-28  Marek Safar  <marek.safar@gmail.com>
729
730         A fix for bug #550404
731         
732         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
733         expression.cs, statement.cs, ecore.cs: Quote any nested expression
734         tree.
735
736 2009-10-27  Marek Safar  <marek.safar@gmail.com>
737
738         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
739         constant.
740         
741         * class.cs: Allow nullable binary user operators.
742
743 2009-10-26  Marek Safar  <marek.safar@gmail.com>
744
745         * expression.cs: Move binary expression optimization at the end of
746         resolve.
747
748 2009-10-23  Marek Safar  <marek.safar@gmail.com>
749
750         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
751         Separate NullConstant from NullLiteral.
752
753 2009-10-23  Marek Safar  <marek.safar@gmail.com>
754
755         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
756         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
757         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
758         ModuleContainer. Add common unclosed member check routine.
759
760 2009-10-22  Marek Safar  <marek.safar@gmail.com>
761
762         * argument.cs: Use literal flag for real literals only.
763
764         * dynamic.cs: Use correct return type for custom delegates.
765
766 2009-10-22  Marek Safar  <marek.safar@gmail.com>
767
768         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
769         resolver.
770
771 2009-10-22  Marek Safar  <marek.safar@gmail.com>
772
773         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
774
775 2009-10-21  Marek Safar  <marek.safar@gmail.com>
776
777         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
778         conversion.
779
780 2009-10-21  Marek Safar  <marek.safar@gmail.com>
781
782         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
783         binder flags.
784
785 2009-10-20  Marek Safar  <marek.safar@gmail.com>
786
787         * argument.cs, dynamic.cs, expression.cs: Latest API update.
788
789 2009-10-19  Marek Safar  <marek.safar@gmail.com>
790
791         * typemanager.cs, expression.cs: Dynamic array initializer.
792
793 2009-10-16  Marek Safar  <marek.safar@gmail.com>
794
795         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
796         is imported.
797
798 2009-10-16  Marek Safar  <marek.safar@gmail.com>
799
800         A fix for bug #493523, #507067
801         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
802         standard nullable conversion using underlying standard conversion
803         and not full conversion.
804
805 2009-10-15  Marek Safar  <marek.safar@gmail.com>
806
807         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
808         type in VerifyArgumentsCompat.
809
810 2009-10-15  Marek Safar  <marek.safar@gmail.com>
811
812         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
813         Reject variable used with type arguments.
814
815 2009-10-14  Marek Safar  <marek.safar@gmail.com>
816
817         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
818         Implement dynamic expressions assignment.
819
820 2009-10-14  Marek Safar  <marek.safar@gmail.com>
821
822         * expression.cs: Build underlying expression when resolving unary
823         mutators.
824
825 2009-10-14  Marek Safar  <marek.safar@gmail.com>
826
827         * expression.cs: Emit enum array initializer using binary blob.
828
829 2009-10-08  Marek Safar  <marek.safar@gmail.com>
830
831         * typemanager.cs, constant.cs: Optimize decimal constants which fit
832         to long range.
833
834 2009-10-07  Marek Safar  <marek.safar@gmail.com>
835
836         * typemanager.cs: Reset object_type.
837         
838         * assign: Made SimpleAssign public.
839
840 2009-10-06  Marek Safar  <marek.safar@gmail.com>
841
842         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
843         invocation assembly to IsThisOrFriendAssembly.
844
845 2009-10-05  Marek Safar  <marek.safar@gmail.com>
846
847         * expression.cs: Equality comparison of generic parameter with
848         class constraint.
849
850 2009-10-05  Marek Safar  <marek.safar@gmail.com>
851
852         A fix for bug #543570
853         * generic.cs: Import predefined constraints correctly.
854
855 2009-10-02  Marek Safar  <marek.safar@gmail.com>
856
857         * ecore.cs: Don't crash on overloads with optional paremeters where
858         arguments count overflows.
859         
860         * parameter.cs: Import optional parameter constants using optional
861         value type.
862
863 2009-10-01  Marek Safar  <marek.safar@gmail.com>
864
865         * Makefile: Default is gmcs compiler.
866
867 2009-10-01  Marek Safar  <marek.safar@gmail.com>
868
869         * cs-parser.jay: Fixed few NRE.
870
871 2009-10-01  Marek Safar  <marek.safar@gmail.com>
872
873         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
874
875 2009-09-30  Marek Safar  <marek.safar@gmail.com>
876
877         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
878         ShimExpression, ImplicitCast.
879
880 2009-09-30  Marek Safar  <marek.safar@gmail.com>
881
882         A fix for bug #542959
883         * delegate.cs: Emit correct delegate instance variable when there
884         are static and non-static overloads.
885
886 2009-09-29  Marek Safar  <marek.safar@gmail.com>
887
888         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
889         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
890
891 2009-09-28  Marek Safar  <marek.safar@gmail.com>
892
893         A fix for bug #542487
894         * ecore.cs: Resolve extension methods hidden by properties.
895
896 2009-09-25  Marek Safar  <marek.safar@gmail.com>
897
898         * expression.cs, ecore.cs: More dynamic binary expressions.
899
900 2009-09-22  Marek Safar  <marek.safar@gmail.com>
901
902         * nullable.cs, expression.cs: Fixed null lifted conversion for
903         bitwise enum operations.
904
905 2009-09-22  Marek Safar  <marek.safar@gmail.com>
906
907         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
908         values in checked context.
909
910 2009-09-22  Marek Safar  <marek.safar@gmail.com>
911
912         * expression.cs, ecore.cs: Fixed array index constant conversion.
913
914 2009-09-20  Miguel de Icaza  <miguel@novell.com>
915
916         * expression.cs: Do not crash when MemberLookup returns something
917         that is not a MemberExpr here.   Report error 582 instead. 
918
919         Fixes #499988.
920
921 2009-09-18  Marek Safar  <marek.safar@gmail.com>
922
923         * decl.cs, class.cs: Check protected property accessors.
924
925 2009-09-18  Marek Safar  <marek.safar@gmail.com>
926
927         * dynamic.cs, assign.cs: Dynamic compound assignment.
928
929 2009-09-17  Marek Safar  <marek.safar@gmail.com>
930
931         * expression.cs: Fixed compound assignment explicit conversion.
932
933 2009-09-17  Marek Safar  <marek.safar@gmail.com>
934
935         * expression.cs, ecore.cs: Cannot infer variables from method group.
936
937 2009-09-16  Marek Safar  <marek.safar@gmail.com>
938
939         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
940         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
941         codegen.cs: Dynamic binary operations scaffolding.
942
943 2009-09-15  Marek Safar  <marek.safar@gmail.com>
944
945         * expression.cs: Fixes nullable promotion for enum type variables.
946
947 2009-09-11  Marek Safar  <marek.safar@gmail.com>
948
949         * driver.cs, dynamic.cs: Reset more static variables.
950
951 2009-09-11  Marek Safar  <marek.safar@gmail.com>
952
953         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
954         driver.cs: Introduced Expression::MakeExpression.
955
956 2009-09-11  Marek Safar  <marek.safar@gmail.com>
957
958         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
959
960 2009-09-09  Marek Safar  <marek.safar@gmail.com>
961
962         * eval.cs, report.cs: Use Console.Out for all eval error or warning
963         output.
964
965 2009-09-09  Marek Safar  <marek.safar@gmail.com>
966
967         A fix for bug #518707
968         * expression.cs (Is): Optimize only generic parameter type
969         expression probing value type generic parameter.
970
971 2009-09-09  Marek Safar  <marek.safar@gmail.com>
972
973         A fix for bug #532571
974         * ecore.cs: Check for simple name type arguments used with
975         non-generic type.
976
977 2009-09-08  Marek Safar  <marek.safar@gmail.com>
978
979         A fix for bug #497421
980         * generic.cs (CheckConstraint): Don't use buildin types to check for
981         parameterless constructor.
982
983 2009-09-08  Marek Safar  <marek.safar@gmail.com>
984
985         A fix for bug #537402
986         * generic.cs (CheckConstraint): Correctly inflate generic type
987         arguments when checking generic method. 
988
989 2009-09-08  Marek Safar  <marek.safar@gmail.com>
990
991         A fix for bug #536463
992         * decl.cs (AddToContainer): Don't report collision between explicit
993         and parameterless non-explicit members.
994
995 2009-09-08  Marek Safar  <marek.safar@gmail.com>
996
997         * eval.cs: Reset more static stuff.
998
999 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1000
1001         A fix for bug #324625
1002         * expression.cs, ecore.cs: Create nested generic type expression
1003         using declaring and not current type.
1004
1005 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1006
1007         * *.cs: Changed Report class to accept various output printers and
1008         be an instance class. An expression resolver can now use different
1009         message reporter for each call and Report.Error can safely throw
1010         an exception. Part of ongoing work to turn mcs into proper library.
1011
1012 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1013
1014         * statement.cs, ecore.cs: Removed error reporting from emit code.
1015
1016 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1017
1018         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
1019
1020 2009-09-03  Marek Safar  <marek.safar@gmail.com>
1021
1022         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
1023         parser checks out of constructors.
1024
1025 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1026
1027         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
1028
1029 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1030
1031         A fix for bug #535448
1032         * anonymous.cs, class.cs: Copy return label between all contexts.
1033
1034 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1035
1036         A fix for bug #535395
1037         * namespace.cs: Resolve context can be null.
1038
1039 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1040
1041         A fix for bug #533912
1042         * generic.cs: Use correct context for constraints resolving.
1043
1044 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1045
1046         A fix for bug #532630
1047         * driver.cs: Trim conditional symbols.
1048
1049 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1050
1051         * context.cs: New file.
1052         
1053         * *.exe.sources, *.csproj: Updated.
1054
1055 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1056
1057         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
1058         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
1059         IMembercontext, some small cleanups.
1060
1061 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1062
1063         * *.cs: Split ResolveContext and EmitContext.
1064
1065 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1066
1067         * *.cs: Only ResolveContext implements IMemberContext.
1068
1069 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1070
1071         * *.cs: Renamed IResolveContext to IMemberContext.
1072
1073 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1074
1075         * *.cs: Detached ResolveContext from EmitContext.
1076
1077 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1078
1079         * codegen.cs: Moved flow-analysis to BlockContext.
1080
1081 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1082
1083         * *.cs: Detached BlockContext from EmitContext.
1084
1085 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
1086
1087         * statement.cs: avoid nullref when the return value of GetEnumerator()
1088         does not contain any MoveNext() method.
1089
1090 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1091
1092         * *.cs: Removed IResolveContext::GenericDeclContainer.
1093
1094 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1095
1096         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
1097
1098 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1099
1100         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
1101         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
1102
1103 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1104
1105         * *.cs: Removed boolean fields from EmitContext.
1106
1107 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1108
1109         * *.cs: Add IResolveContext::IsStatic.
1110
1111 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1112
1113         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
1114
1115 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1116
1117         * *.cs: Removed DeclContainer from EmitContext.
1118
1119 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1120
1121         * *.cs: Add IResolveContext::CurrentTypeParameters.
1122
1123 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1124
1125         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
1126
1127 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1128
1129         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
1130         codegen.cs: Add IResolveContext::LookupExtensionMethod.
1131
1132 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1133
1134         * decl.cs: Look in PartialContainer for parent type parameters.
1135
1136 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1137
1138         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
1139         codegen.cs: Add IResolveContext::LookupTypeParameter.
1140
1141 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1142
1143         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1144         Moved resolved logic from Emit to Resolve.
1145
1146 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1147
1148         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
1149         codegen.cs: Reworked atttributes handling of ResolveContext.
1150
1151 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1152
1153         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
1154         LookupNamespaceOrType to ResolveContext.
1155
1156 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1157
1158         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
1159         class.cs: Removed unused parameters and methods.
1160
1161 2009-08-11  Marek Safar  <marek.safar@gmail.com>
1162
1163         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
1164         codegen.cs: Finding the best common type of a set of expressions for
1165         lambda statements.
1166
1167 2009-08-07  Marek Safar  <marek.safar@gmail.com>
1168
1169         * dynamic.cs, expression.cs: More dynamic conversions.
1170
1171 2009-08-06  Miguel de Icaza  <miguel@novell.com>
1172
1173         * generic.cs: This loop was incorrect, it was increment ii, but
1174         checking for `i'.  This was a change introduced to fix #327497,
1175         now we fix #424012.
1176  
1177         * class.cs: Catch another case for cs0533 error, fixes #324782.
1178
1179 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
1180
1181         * typemanager.cs (GetGenericArguments): SRE returns null for
1182         generic methods on type builder instances if they are not generic
1183         themselves. For example, for Foo<int>::Bar() it returns null, but
1184         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
1185
1186 2009-08-05  Marek Safar  <marek.safar@gmail.com>
1187
1188         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
1189         delegate.cs: Work on dynamic binding.
1190
1191 2009-08-04  Marek Safar  <marek.safar@gmail.com>
1192
1193         A second fix for bug #525342
1194         * class.cs: Attach partial method attributes to method
1195         implementation.
1196
1197 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1198
1199         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
1200         restrictions.
1201         
1202         * rootcontext.cs: Default to langversion v4.
1203
1204 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1205
1206         * pending.cs: Check return type before member info is set.
1207
1208 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1209
1210         * anonymous.cs: Fully initialize generic hoisted field expression.
1211
1212 2009-08-02  Miguel de Icaza  <miguel@novell.com>
1213
1214         * cs-parser.jay: Flag variables declared on the interactive shell
1215         as used to prevent the 168 warning about local variable not being
1216         used. 
1217
1218 2009-07-31  Marek Safar  <marek.safar@gmail.com>
1219
1220         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
1221         attribute.cs: Emit dynamic export attribute.
1222
1223 2009-07-30  Marek Safar  <marek.safar@gmail.com>
1224
1225         * expression.cs: More verifier work.
1226
1227 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1228
1229         * nullable.cs: Fixed SRE crash during corlib compilation.
1230
1231 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1232
1233         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1234         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1235         More TypeManager.TypeToCoreType needed.
1236
1237 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1238
1239         * anonymous.cs: Update after recent SRE fixes.
1240
1241 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1242
1243         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1244         version of GetFieldHandle for fields of generic types.
1245
1246 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1247
1248         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1249         ecore.cs: Add TypeManager.IsDynamicType,
1250         PredefinedAttributes.Dynamic.
1251
1252 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1253
1254         A fix for bug #415375
1255         * expression.cs: Fixed object and reference type parameter
1256         comparison.
1257
1258 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1259
1260         A fix for bug #525342
1261         * class.cs: Attach partial method attributes to method
1262         implementation.
1263
1264 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1265
1266         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1267         Dynamic arguments.
1268
1269 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1270
1271         * anonymous.cs (MutateField): Add imported types handling.
1272
1273 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1274
1275         * expression.cs, delegate.cs: Moved arguments resolve into their
1276         counterparts expressions. Removed argument resolve from
1277         CollectionElementInitializer.
1278
1279 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1280
1281         A fix for bug #523683
1282         * convert.cs, delegate.cs: Use common overload mechanism for method
1283         group conversion check.
1284
1285 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1286
1287         A fix for bug #523899
1288         * generics.cs: Exact type inference with other bound types.
1289
1290 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1291
1292         Don't complain when the same type is implemented by the output
1293         assembly as well as multiple referenced assemblies
1294         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1295         'must_be_unique' flag.
1296         (GlobalRootNamespace): Update to changes.
1297         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1298         already have a type in hand.
1299
1300 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1301
1302         * expression.cs: More verifier instrumentation.
1303         
1304         * statement.cs: Do proper throw expression conversion.
1305
1306 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1307
1308         A fix for bug #522789
1309         * expression.cs: Mutate invocation return type.
1310
1311 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1312
1313         * anonymous.cs: Split assignable and readonly generated variable
1314         references.
1315
1316 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1317
1318         A fix for bug #521671
1319         * statement.cs: Fixed crash when checking missing type.
1320
1321 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1322
1323         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1324         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1325         class.cs, driver.cs: Work on dynamic binding.
1326
1327         * dynamic.cs: New file.
1328
1329         * *.sources, *.proj: Updated.
1330
1331 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1332
1333         * expression.cs (Conditional): Avoid double Resolve.
1334
1335 2009-07-13  Marcus Griep  <marcus@griep.us>
1336
1337         * ecore.cs: Fix obscure bug with resolving members of interfaces
1338         that hide parent interface members. Fixes bug #444388 and corrects
1339         bug #323096
1340
1341 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1342
1343         * expression.cs (LocalVariableReference): Bounce resolve.
1344
1345 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1346
1347         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1348         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1349         types to new class.
1350         
1351         * support.cs: New dynamic type wrapper.
1352
1353 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1354
1355         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1356         typed local variable.
1357
1358 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1359
1360         A fix for bug #519005
1361         * anonymous.cs: Use null_type as no return type placeholder.
1362
1363 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1364
1365         * generic.cs: Handle type inference of identical type parameters
1366         with different bounds.
1367
1368 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1369
1370         * expression.cs, class.cs: Events variance.
1371         
1372         * cs-parser.jay: Interface events error messages.
1373
1374 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1375
1376         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1377
1378 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1379
1380         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1381         parameter expression can be value-type New.
1382
1383         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1384
1385 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1386
1387         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1388         Implemented C# 4.0 named arguments.
1389
1390 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1391
1392         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1393         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1394         parameter modifier. Also fixes bug #515497.
1395
1396 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1397
1398         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1399         arguments expression to be implemented.
1400         
1401         *.sources: Add argument.cs
1402
1403 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1404
1405         * parameter.cs: Moved GetParameterIndexByName to base class.
1406         
1407         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1408         unused AType. Use argument's version of GetExpressionTree.
1409
1410 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1411
1412         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1413         arguments grammar.
1414
1415 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1416
1417         A fix for bug #514096
1418         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1419
1420 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1421
1422         * expression.cs: The first multi-dimensional array nested array
1423         initializers was not checked.
1424         
1425         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1426
1427 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1428
1429         A fix for bug #513400
1430         * nullable.cs (EmitEquality): Operands emit could be simplified for
1431         built-in types when we now emit user operators differently.
1432
1433 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1434
1435         * ecore.cs: Report inaccessible delegate methods correctly.
1436
1437 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1438
1439         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1440         cs-parser.jay: Implemented C# 4.0 optional parameters.
1441
1442 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1443
1444         * driver.cs: Removed broken DefineManifestResource.
1445
1446 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1447
1448         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1449         Use $(BOOTSTRAP_PROFILE) instead.
1450
1451 2009-06-12  Jb Evain  <jbevain@novell.com>
1452
1453         * rootcontext.cs: add a Platform field.
1454         * driver.cs: handle /platform.
1455         * codegen.cs: pass the proper flags according to
1456         the platform when saving the assembly.
1457
1458 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1459
1460         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1461         Add optional parameters grammar.
1462
1463 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1464
1465         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1466         driver.cs: Split lang version and metadata version.
1467
1468 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1469
1470         * decl.cs: Better overload ctor collision error message.
1471
1472 2009-06-05  Jb Evain  <jbevain@novell.com>
1473
1474         * driver.cs (EmbededResource): avoid using an internal method
1475         in gmcs to embed manifest resources.
1476
1477 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1478
1479         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1480         the compiler from older mono versions (like moon's bots)
1481
1482 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1483
1484         * namespace.cs (LookupTypeReflection): Ignore collisions between
1485         forwarded types.
1486
1487 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1488
1489         * codegen.cs: Enabled generic type forwarders.
1490
1491 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1492
1493         * dmcs.*: Add another version of SRE compiler.
1494
1495 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1496
1497         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1498         generic-mcs.cs: Fixed variant type conversions.
1499
1500 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1501
1502         A fix for bug #507863
1503         * codegen.cs: Fixes a crash on invalid string value attribute.
1504
1505 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1506
1507         A fix for bug #508334
1508         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1509         cs-parser.jay: Fully import __arglist modifier.
1510
1511 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1512
1513         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1514         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1515         actually work with closed generic types.
1516
1517 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1518
1519         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1520         Fix the build by replacing the use of 'var' with the actual type.
1521
1522 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1523
1524         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1525     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1526         declarations.
1527           
1528         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1529         filter.
1530
1531 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1532                         Marek Safar  <marek.safar@gmail.com>
1533
1534         A fix for bug #377509
1535         * parameter.cs: Use predefined and not empty name for implicit
1536         setters.
1537
1538 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1539
1540         * class.cs: Don't report wrong warnings for event fields.
1541
1542 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1543
1544         A fix for bug #504667
1545         * class.cs: Check for static class using parent container instead of
1546         parent type.
1547
1548 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1549
1550         A fix for bug #496922
1551         * expression.cs: Always use temporary variable when using object
1552         initializer.
1553
1554 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1555
1556         A fix for bug #495112
1557         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1558         local cache.
1559
1560 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1561
1562         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1563
1564 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1565
1566         * complete.cs: No idea how gonzalo got a null in the list, but
1567         avoid crashing.
1568
1569 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1570
1571         * complete.cs (CompletionElementInitializer): New completion class
1572         to support completing inside a C# 3 element initializer, so this
1573         allows completion for Silverlight situations where it is very
1574         common to do:
1575
1576         new TextBlock () { Fo<TAB>
1577
1578         (CompletionSimpleName): Expose the prefix that was
1579         passed to the simple name.
1580
1581         * cs-parser.jay (object_or_collection_initializer): Add support
1582         for element_initializers.
1583
1584         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1585         special case completion expressions as this method aggressively
1586         collects data before it operates, and errors were being thrown
1587         earlier than we were able to complete.
1588
1589 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1590
1591         * eval.cs: Make getcompletions silent and enable debugging output
1592         if the -v option is passed.
1593
1594         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1595         Consider looking up the namespace that matches the prefix being
1596         used. 
1597
1598         This is part of the support for allowing completions like:
1599         `System.Co<TAB>' to complete to System.Console.
1600
1601         * complete.cs (CompletionSimpleName.AppendResults): Make this
1602         routine reusable.
1603
1604 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1605
1606         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1607         COMPLETE_COMPLETION as internal.
1608
1609 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1610
1611         * complete.cs: Include namespace resolution in simple names as
1612         well as global types and types in the using scope in the
1613         resolution. 
1614
1615         * namespace.cs: Supporting infrastrcture to provide completions
1616         based on the current using scope. 
1617
1618         * eval.cs: Introduce an entry point that allows for initialization
1619         to return a list of the files passed on the command line.
1620
1621 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1622
1623         A fix for bug #494243
1624         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1625
1626 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1627
1628         A fix for bug #493887
1629         * statement.cs: Don't skip string multi-section with default or
1630         null label when populating string hashtable.
1631
1632 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1633
1634         A fix for bug #492329
1635         * expression.cs (New): Load variable when assigning type parameter
1636         to ref variable.
1637
1638 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1639
1640         A fix for bug #488960
1641         * decl.cs: Compare MVAR types using non-null values.
1642
1643 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1644
1645         * typemanager.cs, expression.cs: Removed unused nullable checks.
1646
1647 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1648
1649         * *.cs: Removed some gmcs conditionals.
1650
1651 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1652
1653         * generic.cs, support.cs: Moved generics stuff out of support.cs
1654
1655 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1656
1657         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1658         DeclaringType.
1659
1660 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1661
1662         * attribute.cs: Consider all members for error reporting when
1663         checking named arguments.
1664
1665 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1666
1667         A fix for bug #487625
1668         * namespace.cs: Use a warning for all predefined type conflicts.
1669
1670 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1671
1672         A fix for bug #485706
1673         * statement.cs: Explicitly type catch type argument to pass verifier
1674         check.
1675
1676 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1677
1678         Initial support to provide code completion facilities to consumers
1679         of the evaluator API.
1680         
1681         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1682         support the completion engine.   When we reach the end of the
1683         input stream instead of returning EOF, when this flag is true the
1684         tokenizer instead produces:
1685
1686                 One GENERATE_COMPLETION token: this token then must be
1687                 handled in the grammar at every point where the user
1688                 would likely request a completion.
1689
1690                 As many COMPLETE_COMPLETION tokens as necessary.   These
1691                 tokens are generated to assist the parser in unwinding and
1692                 producing a valid parse tree.    
1693
1694         The parser rules do not have to be perfect, the parser needs to be
1695         augmented with judicious use of GENERATE_COMPLETION tokens to
1696         improve the areas where we can provide completion and the parser
1697         needs to add support for COMPLETE_COMPLETION tokens in productions
1698         to make them work.
1699
1700         It is common to not have enough support for COMPLETE_COMPLETION
1701         under certain rules and that even if we generated the
1702         GENERATE_COMPLETION token that the resulting tree will be invalid
1703         due to the missing rules that support COMPLETE_COMPLETION.
1704
1705         The final EOF token is produced by having the parser notify the
1706         tokenizer when it reaches the root production that the next token
1707         should be EOF.
1708
1709         * support.cs (CompletionResult): New Exception.   This exception
1710         is thrown to return the completion results when one of the special
1711         completion expressions is reached.
1712
1713         This exception is thrown by the completing ExpressionStatements
1714         classes that live in complete.cs
1715
1716         * complete.cs (CompletingExpression): a new base class for
1717         completing expressions.   This derives from the
1718         ExpressionStatement class and not from Expression as it allows
1719         completion to happen not only where expressions are expected in
1720         the grammar, but also where statements are expected.
1721
1722         (CompletionSimpleName): A new class used to provide completions
1723         for SimpleNames.     This currently only resolves to local
1724         variables from the evaluator context (GetVars call).
1725
1726         (CompletionMemberAccess): Implements support for completing member
1727         access patterns. 
1728
1729         * cs-parser.jay: Add support for completion in a few places. 
1730
1731         * eval.cs (GetCompletions): New public API for the evaluator that
1732         returns a list of possible completions given the input.   The
1733         return value is an array of completions 
1734
1735         * anonymous.cs (Compatible): If the exception thrown from the
1736         resolved expression is a CompletionResult exception let that one
1737         through instead of printing a diagnostic error in the try/catch. 
1738 <       
1739 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1740
1741         * 
1742
1743         * driver.cs (Main): Use Environment.Exit to quit quickly and
1744         prevent the compiler from doing the usual wait for helper thread
1745         to terminate.  
1746
1747         This is to prevent a slowdown that was reported by Gonzalo on
1748         ASP.NET 
1749
1750 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1751
1752         * ecore.cs: Load build-in types directly instead of accessing
1753         an internal field.
1754
1755 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1756
1757         * ecore.cs: Always use unbox.any when available.
1758
1759 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1760
1761         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1762
1763 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1764
1765         * generic.cs: Removed obsolete version of type inference.
1766
1767 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1768
1769         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1770         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1771         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1772         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1773
1774 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1775
1776         A fix for bug #482996
1777         * anonymous.cs: Make sure we are not infering return type when
1778         checking type compatibility.
1779
1780 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1781
1782         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1783         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1784         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1785         attributes in their own structure. Needed when accessing their
1786         properties before they are resolved.
1787
1788 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1789
1790         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1791         hashtable (~10x faster).
1792         
1793         * driver.cs: Removed wrong Reset.
1794
1795 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1796
1797         * class.cs: Use correct common base type for unmanaged delayed
1798         check.
1799
1800         * rootcontext.cs: Wrap unhandled exception.
1801
1802 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1803
1804         Make SeekableStreamReader self-tuning and arbitrarily seekable
1805         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1806         the buffer.
1807         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1808         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1809         buffer size when the stream needs to be re-read from the beginning.
1810
1811 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1812
1813         A fix for bug #480100
1814         * parameter.cs: A parameter is not hoisted when used directly as ET.
1815
1816 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1817
1818         * statement.cs: Fixed an issue when using variable is of interface
1819         type.
1820
1821 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1822
1823         A fix for bug #480319
1824         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1825
1826 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1827
1828         A fix for bug #480867
1829         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1830         expression to have no valid type.
1831
1832 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1833
1834         A fix for bug #481258
1835         * class.cs: Set extension method flag in partial container.
1836
1837 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1838
1839         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1840         
1841         * attribute.cs: Add sanity check.
1842
1843 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1844
1845         * class.cs: Add external constructor error.
1846
1847 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1848
1849         A fix for bug #475354
1850         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1851         correctly user defined nullable equality operators.
1852
1853 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1854
1855         A fix for bug #479532
1856         * expression.cs: Implement NewInitialize::AddressOf.
1857
1858 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1859
1860         A fix for bug #413633
1861         * expression.cs: Iterate all base class-constraint types.
1862
1863 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1864
1865         A fix for bug #479209
1866         * literal.cs: Mutate null underlying type.
1867
1868 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1869
1870         A fix for bug #476295
1871         * convert.cs: Avoid wrapping implicitly convertible reference type.
1872
1873 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1874
1875         * iterators.cs: Create MemberName correctly.
1876
1877 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1878
1879         A fix for bug #478655
1880         * literal.cs: Check also underlying null type conversion.
1881
1882 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1883
1884         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1885
1886 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1887
1888         A fix for bug #477447
1889         * statement.cs: Add reference to correct parent storey when this
1890         is accessible from deep children storey (more than 1 level).
1891
1892 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1893
1894         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1895         * class.cs: Define base type members before setting up member cache.
1896
1897 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1898
1899         A fix for bug #477378
1900         * nullable.cs, expression.cs, statement.cs: More precise null type
1901         sanity checks.
1902
1903 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1904
1905         A fix for bug #472805
1906         * typemanager.cs, namespace.cs: Import only visible extension method
1907         types.
1908
1909 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1910
1911         A fix for bug #476895
1912         * attribute.cs: Use correct resolve context for attribute type.
1913
1914 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1915
1916         A fix for bug #476266
1917         * anonymous.cs: Mutate multi-dimensional arrays.
1918
1919 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1920
1921         A fix for bug #476400
1922         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1923
1924 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1925
1926         A fix for bug #476811
1927         * generics.cs: Fixed null-literal check.
1928
1929 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1930
1931         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1932         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1933         messing with static variables.
1934
1935 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1936
1937         A fix for bug #475965
1938         * generics.cs: Check generic parameter type after extracting from
1939         Expression<T>.
1940
1941 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1942
1943         A fix for bug #475823
1944         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1945         typed-null support.
1946
1947 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1948
1949         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1950         Simplified event field definition using backing field and not
1951         field builder directly.
1952
1953         * expression.cs (EmitLdArg): Optimize fast paths.
1954
1955 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1956
1957         A fix for bug #475327
1958         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1959
1960 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1961
1962         A fix for bug #475342
1963         * cs-parser.jay: Using 'super' instead of 'base' to call base
1964         constructor crashes compiler.
1965
1966 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1967
1968         A fix for bug #475354
1969         * expression.cs (Constantify): Add nullable types.
1970         
1971         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1972
1973 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1974
1975         A fix for bug #475246
1976         * expression.cs: More broken flowanalysis hacking needed.
1977
1978 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1979
1980         * attribute.cs: Compare only ref/out array modifiers. 
1981
1982 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1983
1984         * statement.cs: Use member cache when looking for foreach members.
1985
1986 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1987
1988         * expression.cs: Don't expose internal initializer types.
1989         
1990         * statement.cs: Check also explicit conversions for goto case.
1991
1992 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1993
1994         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1995
1996 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1997
1998         * *.cs: Replace null-type with NullLiteral where appropriate.
1999
2000 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2001
2002         * expression.cs: Initializer of reference argument use temporary
2003         variable to be verifiable.
2004         
2005         * parameter.cs: Share EmitLdArg.
2006
2007 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2008
2009         A fix for bug #473559
2010         * class.cs: Fixed: Not reporting error about nested class with the
2011         same name.
2012
2013 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
2014
2015         Contributed under the MIT/X11 license.
2016
2017         * generic.cs: Added VerifyVariantTypeParameters which performs new
2018         variance verification logic. The old logic, based on the spec, was
2019         wrong because the spec is full of LIES!
2020
2021         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
2022
2023         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
2024
2025         * class.cs:
2026         * ecore.cs: Added calls to the new variance verification logic.
2027
2028         * parameter.cs:
2029         * delegate.cs: Removed calls to the old variance verification logic.
2030
2031 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2032
2033         * delegate.cs: Use cached Invoke method directly.
2034
2035 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2036
2037         * expression.cs: Emit expression tree for hoisted variable access.
2038
2039 2009-02-04  Marek Safar  <marek.safar@gmail.com>
2040
2041         * namespace.cs: Add better extension class check.
2042
2043 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
2044
2045         * generic.cs: Fixed typeo (TypeParameter.Variacne).
2046
2047 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
2048
2049         This patch adds initial generic variance support to the compiler.
2050         It is contributed under the MIT/X11 license.
2051
2052         * typemanager.cs: Modified ImplementsInterface to check variance.
2053         Added VerifyVariantTypeParameters which checks the specified type to see
2054         if it uses a variant type parameter as a type argument (which is not
2055         allowed). Added IsVariantOf which determins if the first type is a
2056         variant of the second. NOTE: This only supports reference types at
2057         the moment to conform with the current level of VM support. When the
2058         VM supports value types, this will follow step.
2059
2060         * generic.cs: Added the Variance enum. Added a Variance property to
2061         TypeParameter and added variance support to definition phase. Added a
2062         Variance property to TypeParameterName. Also check to make sure that
2063         no variant types appear in generic method parameters.
2064
2065         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
2066         keywords if the langversion supports it.
2067
2068         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
2069         that variant types are only used in legal positions. Also added
2070         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
2071         parameters.
2072
2073         * decl.cs: Construct TypeParameter with the variance information.
2074
2075         * convert.cs: Checks variance in ImplicitReferenceConversionExists
2076         and ImplicitConversionStandard.
2077
2078         * rootcontext.cs: Added new "Future" language version.
2079
2080         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
2081         type parameters are not used as type arguments in interface inheritance.
2082         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
2083         parameters are not used as method return types. In MemberBase.
2084         ResolveMemberType, ensure that variant type parameters are not used
2085         as type arguments. Also call VerifyNoVariantTypeParameters on every
2086         set of parameters which are resolved.
2087
2088         * delegate.cs: Modified Delegate.Define to ensure that variant
2089         parameters are not used as type arguments and that a contravariant
2090         parameter is not used as the return type. Also call
2091         VerifyNoVariantTypeParameters on the delegate parameters.
2092
2093         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
2094         to specify generic variance.
2095
2096         * driver.cs: Added support for LanguageVersion.Future in the form of
2097         "-langversion:future".
2098
2099         * generic-mcs.cs: Stubbed out new members in generic.cs.
2100
2101 2009-02-03  Marek Safar  <marek.safar@gmail.com>
2102
2103         * class.cs, generic.cs: Emit type parameter constraints for nested
2104         types.
2105
2106 2009-02-02  Marek Safar  <marek.safar@gmail.com>
2107
2108         A fix for bug #471213
2109         * class.cs: Avoid emitting backing field for abstract event fields.
2110
2111 2009-02-01  Marek Safar  <marek.safar@gmail.com>
2112
2113         A fix for bug #359731
2114         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
2115         expressions.
2116
2117 2009-01-30  Marek Safar  <marek.safar@gmail.com>
2118
2119         A fix for bug #470767
2120         * statement.cs: Introduced BlockScopeExpression, needed when 
2121         expression tree conversion has to emit scope variables.
2122
2123 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2124
2125         * class.cs: Remove duplicate CallingConvention.
2126
2127 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2128
2129         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
2130         when I finally found the right naming convention.
2131
2132 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2133
2134         * cs-tokenizer.cs: Put back different open parens optimization.
2135
2136 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2137
2138         A fix for bug #470227
2139         * cs-tokenizer.cs: Remove too agressive parser optimization.
2140
2141 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2142
2143         A fix for bug #324319
2144         * class.cs: Remove too early base type resolve.
2145
2146 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2147
2148         A fix for bug #324319
2149         * ecore.cs: Explicitly type null when assigning to type argument to
2150         make pass verifier check.
2151
2152 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2153
2154         * anonymous.cs: Fixed recent regression when initializing captured 
2155         this.
2156
2157 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2158
2159         A fix for bug #469019
2160         * anonymous.cs: Use all parent type parameters when instantiating
2161         nested generic storey.
2162
2163 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2164
2165         * expression.cs: Check for null instance methodgroup expression.
2166
2167 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2168
2169         A fix for bug #469244
2170         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
2171         instance inside a conditional expression.
2172
2173 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2174
2175         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
2176         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
2177         GetElementType and HasElementType. IsValueType clean up.
2178
2179 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2180
2181         * nullable.cs: Use common EmitCall.
2182         
2183         * expression.cs: Emit constraint. for virtual calls only.
2184
2185 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2186
2187         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
2188         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
2189         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
2190         checks.
2191
2192 2009-01-22  Jb Evain  <jbevain@novell.com>
2193
2194         * anonymous.cs: make anonymous types' ToString implementation
2195         match what csc outputs.
2196
2197 2009-01-21  Marek Safar  <marek.safar@gmail.com>
2198
2199         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
2200         up.
2201
2202 2009-01-17  Marek Safar  <marek.safar@gmail.com>
2203
2204         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
2205         verifier checks.
2206
2207 2009-01-16  Marek Safar  <marek.safar@gmail.com>
2208
2209         * nullable.cs (LiftedBinaryOperator): Check for all possible null
2210         expressions.
2211
2212 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2213
2214         A fix for bug #466634
2215         * statement.cs: Add reference for nested storey when only this
2216         is captured.
2217
2218 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2219
2220         A fix for bug #466474
2221         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
2222         was specified.
2223
2224 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2225
2226         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
2227         Fixed nested stories parent referencing process. Also fixes #463985.
2228
2229 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2230
2231         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2232         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2233         implementation. Also fixes #463108.
2234
2235 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2236
2237         A fix for bug #416109
2238         * decl.cs: Issue correct CLSAttribute warning location.
2239
2240 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2241
2242         A fix for bug #456775
2243         * attribute.cs: Use attribute owner scope when resolving attribute
2244         arguments.
2245
2246 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2247
2248         A fix for bug #457257
2249         * decl.cs: Fixed incorrect member declaring type comparison.
2250
2251 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2252
2253         A fix for bug #460896
2254         * driver.cs: Handle /RES resources as embeddable.
2255
2256 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2257
2258         A fix for bug #462515
2259         * ecore.cs: Report inacessible members upwards.
2260
2261 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2262
2263         A fix for bug #463190, #463192
2264         * decl.cs, namespace.cs: Also import internal extension classes.
2265
2266 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2267
2268         A fix for bug #463415
2269         * generic.cs: Use right index for RemoveDependentTypes.
2270
2271 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2272
2273         A fix for bug #463196
2274         * expression.cs: Fixed enum to null comparison.
2275
2276 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2277
2278         A fix for bug #463121
2279         * nullable.cs: Fixed nullable user equality operator comparison.
2280
2281 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2282
2283         A fix for bug #462950
2284         * class.cs, decl.cs: Use full explicit name when defining automatic
2285         property backing field.
2286
2287 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2288
2289         A fix for bug #462592
2290         * pending.cs: Emit type arguments for generic proxy method.
2291
2292 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2293
2294         * expression.cs (As): Mutate all type arguments.
2295
2296 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2297
2298         A fix for bug #462622
2299         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2300         context.
2301
2302 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2303
2304         A fix for bug #450782
2305         * ecore.cs: Consider more variables of form V.I to be fixed.
2306
2307 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2308
2309         A fix for bug #460712
2310         * typemanager.cs: Core types could be imported.
2311
2312 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2313
2314         A fix for bugs #460847, #460772, #458049, #457339, #447807
2315         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2316         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2317         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2318         user lambdas used inside query clauses.
2319
2320 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2321
2322         A fix for bug #460229
2323         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2324
2325 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2326
2327         A fix for bug #459952
2328         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2329
2330 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2331
2332         A fix for bug #459630
2333         * convert.cs: Enum to valuetype conversion is not allowed.
2334
2335 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2336
2337         A fix for bug #457087
2338         * generic.cs: Don't crash when constraint comes from type
2339         declaration.
2340
2341 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2342
2343         A fix for bug #459221
2344         * anonymous.cs, statement.cs: Delay only captured this
2345         initialization.
2346
2347 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2348
2349         A fix for bug #457489
2350         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2351         and initialization to capture scope initializers correctly.
2352
2353 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2354
2355         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2356         ParameterReference refactoring.
2357
2358 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2359
2360         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2361         to be imported from any assembly.
2362
2363 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2364
2365         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2366         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2367         from anonymous method and lambda expression.
2368
2369 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2370
2371         A fix for bug #448560
2372         * expression.cs (As): Box any generic type arguments to be
2373         verifiable.
2374
2375 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2376
2377         Add tripwire for implicit conversion bugs
2378         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2379         for CS1501 error.
2380         (MethodGroupExpr.OverloadResolve): Add sanity check between
2381         IsApplicable and VerifyArgumentsCompat.
2382         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2383
2384 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2385
2386         Fix build break in System.Data_test
2387         * convert.cs (ImplicitConversionExists): Move NullLiteral
2388         conversions ...
2389         (ImplicitStandardConversionExists): ... here.
2390
2391 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2392
2393         * literal.cs: Emit correctly explicit null to nullable cast.
2394
2395 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2396
2397         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2398         resolve.
2399
2400 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2401
2402         A fix for bug #449005
2403         * convert.cs, nullable.cs: Use only one implicit nullable
2404         conversion.
2405
2406 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2407
2408         * convert.cs, literal.cs: More Convert cleanup is needed.
2409
2410 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2411
2412         * decl.cs, class.cs: Fixed misleading error message.
2413
2414 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2415
2416         A fix for bug #449005
2417         * nullable.cs (EmitEquality): Disable optimization for user operator
2418         operands.
2419
2420 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2421
2422         A fix for bug #447027
2423         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2424         with context variables stored as expression instances.
2425
2426 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2427
2428         A fix for bug #447027
2429         * delegate.cs: Fixed delegate VerifyMethod logic.
2430
2431 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2432
2433         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2434         but not verifiable.
2435
2436 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2437
2438         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2439         member type resolve to follow normal flow, instead of random
2440         property access.
2441
2442 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2443
2444         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2445         type.
2446
2447 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2448
2449         * const.cs: Emit decimal array constant as literal.
2450
2451 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2452
2453         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2454
2455 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2456
2457         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2458         into real property (saves 8 MB for corlib compilation).
2459
2460 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2461
2462         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2463         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2464         generic-mcs.cs: Small cleanup of TypeArguments.
2465
2466 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2467
2468         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2469         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2470         of ConstructedType expression, renamed to GenericTypeExpr.
2471
2472 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2473
2474         A fix for bug #445303
2475         * location.cs (IsConditionalDefined): Handle undefined global
2476         defines.
2477
2478 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2479
2480         A fix for bug #444678
2481         * expression.cs (TryReduceConstant): Always create new constant
2482         instance.
2483
2484 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2485
2486         A fix for bug #444673
2487         * ecore.cs: Ignore open generic types when used as generic type
2488         instance fields.
2489
2490 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2491
2492         A fix for bug #445458
2493         * expression.cs, cs-parser.jay: Don't crash when an expression
2494         statement is null.
2495
2496 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2497
2498         A fix for bug #445464
2499         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2500         inside unbound type.
2501
2502 2008-11-14  Jb Evain  <jbevain@novell.com>
2503
2504         * driver.cs: ignore empty -nowarn argument such as
2505         the one in -nowarn:12,13,,.
2506
2507 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2508
2509         A fix for bug #444271
2510         * anonymous.cs: Rescan parent storeys when best candidate was
2511         undone.
2512
2513 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2514
2515         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2516         useless UnboundTypeExpression.
2517         
2518         * attribute.cs: Do check obsolete attribute on generic types.
2519
2520 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2521
2522         A fix for bugs #425680, #400139
2523         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2524         refactoring.
2525
2526 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2527
2528         A fix for bug #435747
2529         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2530         compound value types assignment. Few micro optimizations added.
2531
2532 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2533
2534         A fix for bug #442610
2535         * anonymous.cs (MutateConstructor): More SRE hacking.
2536
2537 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2538
2539         A fix for bug #442579
2540         * ecore.cs: Also initialize expanded form of a method with 1 params
2541         parameter.
2542
2543 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2544
2545         * expression.cs (UnaryMutator): Do early l-side check.
2546
2547 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2548
2549         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2550         Init, otherwise we would crash later on when checking for friend
2551         assemblies. 
2552
2553         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2554         Otherwise we never get any meaningful information as to what
2555         failed. 
2556
2557 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2558
2559         A fix for bug #436318
2560         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2561
2562 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2563
2564         * namespace.cs: Turns out that it was a really bad idea to hide
2565         the errors for namespaces not found here in eval mode.    
2566
2567         * eval.cs: When we process using clauses, only enter those into
2568         the list of valid using clauses after they have been validated.   
2569
2570         The above change gives the proper semantics: it does not
2571         senselessly report the same errors with broken using statements by
2572         never storing them in the first place when they are invalid.
2573
2574 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2575
2576         A fix for bug #421839
2577         * cs-parser.jay: Remove expression from coalesce rule to force lower
2578         priority than the assignment operator.
2579
2580 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2581
2582         A fix for bug #437875
2583         * nullable.cs: Compile correctly method group operand used with null
2584         coalescing operator.
2585
2586 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2587
2588         A fix for bug #434589
2589         * expression.cs (Binary): Ignore lifted conversions when at least
2590         one operand is of reference type.
2591
2592 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2593
2594         * cs-parser.jay: Better syntax error report.
2595
2596 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2597
2598         A fix for bug #436792
2599         * cs-parser.jay: Use GetLocation to access location.
2600
2601 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2602
2603         A fix for bug #440774
2604         * cs-parser.jay: Also set current_array_type when parsing local
2605         variables types.
2606
2607 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2608
2609         A fix for bug #440785
2610         * expression.cs (As): Don't resolve self modifing expression
2611         multiple times.
2612
2613 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2614
2615         A fix for bug #439447
2616         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2617
2618 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2619
2620         A fix for bug #437571
2621         * cs-parser.jay: Fixes internal error for invalid expression
2622         statements.
2623
2624 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2625
2626         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2627
2628 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2629
2630         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2631
2632 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2633
2634         * cs-tokenizer.cs: More precise cast parsing.
2635
2636 2008-10-16  Martin Baulig  <martin@ximian.com>
2637
2638         * anonymous.cs (AnonymousMethodStorey): Put back the
2639         `hoisted_locals' hashtable and use it in EmitType().
2640
2641 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2642
2643         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2644         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2645         ~5MB for corlib.
2646
2647 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2648
2649         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2650
2651 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2652
2653         * statement.cs: Mutate scope initializers.
2654
2655 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2656
2657         * expression.cs: Use typeless value for This constant.
2658         
2659         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2660
2661 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2662
2663         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2664         tokenizer.
2665
2666 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2667
2668         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2669         type to type cast.
2670
2671 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2672
2673         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2674         parser and tokenizer. Fixes many ambiguities including #433258.
2675
2676 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2677
2678         * cs-parser.jay: Fixed missing accessor recovery.
2679
2680 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2681
2682         A fix for bug #433701
2683         * expression.cs: Better error message.
2684
2685 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2686
2687         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2688         
2689         * Makefile: Disabled unused debug symbols.
2690
2691         Also fixes: #320556, #321097, #321656, #321876, #351316
2692
2693 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2694
2695         * eval.cs: rename "<interactive>" to "{interactive}", to work
2696         around a requirement in the compiler that this be a valid
2697         filename, and in Windows it is not (433886).
2698
2699 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2700
2701         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2702
2703 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2704
2705         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2706         cs-parser.jay: Generic type declaration and type arguments cleanup.
2707
2708 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2709
2710         * cs-parser.jay: Allow parsing weird array creation construct.
2711
2712 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2713
2714         * cs-parser.jay: Conflicts reduction.
2715
2716 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2717
2718         * cs-parser.jay: Conflicts reduction.
2719
2720 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2721
2722         Fix #398325
2723         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2724         property.  Add a 'count' hint about the use of the shared vector.
2725         Ensure that we don't leak out dirty bits.
2726         (UsageVector.MergeChild): Throw away information about variables
2727         in child vectors.
2728         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2729
2730 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2731
2732         A fix for bug #431746
2733         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2734         parameters when iterator is created.
2735
2736 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2737
2738         A fix for bug #431827
2739         * expression.cs: Fixed right based pointer arithmetic operations
2740         emit.
2741
2742 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2743
2744         A fix for bug #353779
2745         * assign.cs, expression.cs: Fixed compound assignment conversions.
2746
2747 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2748
2749         A fix for bug #375262
2750         * statement.cs: Refactor ArrayForeach to be usable with string
2751         indexer. Optimized single dimentional arrays foreach.
2752
2753 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2754
2755         A fix for bug #431255
2756         * anonymous.cs, expression.cs: Removed broken optimization.
2757
2758 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2759
2760         * anonymous.cs: Use full type parameters of parent generic
2761         containers. Removed unnecessary AddParentStoreyReference call.
2762
2763 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2764
2765         A fix for bug #324702
2766         * class.cs: Use better shorter names for explicit interface member
2767         implementations.
2768
2769         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2770
2771 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2772         
2773         * expression.cs: Use new interface to check fixed expression.
2774
2775 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2776
2777         A fix for bug #421101
2778         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2779         interface to check for fixed fixed-buffers.
2780
2781 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2782
2783         A fix for bug #429264
2784         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2785         
2786         * delegate.cs: Removed unnecessary casts.
2787
2788 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2789
2790         A fix for bug #352151
2791         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2792         class.cs: Fixed already defined explicit interface members check.
2793
2794 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2795
2796         cs-tokenizer.cs: Fix typo.
2797
2798 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2799
2800         * eval.cs (InteractiveBase): The quit command now just sets a
2801         flag, instead of calling Environment.Exit(), it is milder on
2802         embedded hosts. 
2803
2804         CompiledMethod is now in Mono.CSharp, not nested inside
2805         the Evaluator, it was inconvenient to use.
2806
2807 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2808
2809         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2810         code to be invoked without having to reparse.
2811
2812 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2813
2814         * ecore.cs: The recent changes to FieldExpr broke this as well.
2815         Fixes LINQ queries in the interactive shell.
2816
2817         * Multiple files: indentation fixing for the Mono coding
2818         guidelines for the switch statement.
2819
2820         * eval.cs: Make the Evaluator API thread safe.
2821
2822 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2823
2824         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2825         constructor parsing.
2826
2827 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2828
2829         A fix for bug #325326
2830         * statement.cs: Check possible mistaken empty statement using
2831         explicit blocks only.
2832
2833 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2834
2835         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2836         RootNamespace.ComputeNamespaces to update the internal list of
2837         namespaces, this is no longer done for us.
2838
2839         (InteractiveBase): Use the Evaluator APIs instead of calling into
2840         Driver directly
2841
2842 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2843
2844         A fix for bug #429264
2845         * expression.cs: Missing mutator for access to multidimensional
2846         arrays.
2847
2848 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2849
2850         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2851         entry wrapper.
2852         
2853         * driver.cs: Missing input argument check.
2854
2855 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2856
2857         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2858         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2859         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2860         DefineMembers.
2861
2862 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2863
2864         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2865         fully constructed FieldExpr, fixes the regression introduced in
2866         the last commit.
2867         
2868         * ecore.cs, expression.cs: Plug back the eclass initialization as
2869         otherwise it regresses `csharp'. 
2870
2871 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2872
2873         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2874         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2875         phase to resolve phase. It resolves problems with expression trees
2876         and fixes bugs #323796, #325156.
2877
2878 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2879
2880         * codegen.cs: Report better error when symbol writer is missing.
2881
2882 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2883
2884         * codegen.cs: Set .NET symbol writer.
2885         
2886         * decl.cs: Guard against null generic arguments.
2887         
2888         * report.cs: Don't report exactly same additional details.
2889
2890 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2891
2892         A fix for bug #324917
2893         * cs-parser.jay: Add missing multidimensional non-expression type
2894         ranks.
2895         
2896 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2897
2898         A fix for bug #428191
2899         * anonymous.cs: Create an outer generic fields also for non-storey
2900         anonymous methods.
2901
2902 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2903
2904         A fix for bug #378294
2905         * class.cs: Make fixed size buffers gmcs feature only.
2906
2907 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2908
2909         A fix for bug #355622, #324993
2910         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2911         field initializer.
2912
2913 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2914
2915         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2916         error reporting.
2917
2918 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2919
2920         A fix for bug #416110
2921         * generic.cs: Struct constraint results in default ctor and
2922         ValueType base type constraint to be set.
2923
2924 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2925
2926         A fix for bug #423791
2927         * generic.cs: Fixed params output type type-inference.
2928
2929 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2930
2931         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2932         
2933 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2934
2935         * cs-tokenizer.cs: Don't break on extra partial modifier.
2936
2937 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2938
2939         A fix for bug #427592
2940         * generic.cs: Use common parameter resolve method.
2941
2942 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2943
2944         A fix for bug #414758
2945         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2946         property.
2947
2948 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2949
2950         * driver.cs, namespace.cs: Read types and namespaces after all
2951         requested assemblies are loaded, fixes issues with System.Core
2952         auto-reference, and #419888.
2953
2954 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2955
2956         A fix for bug #417705
2957         * cs-parser.jay: Fixed as/is operator expression split.
2958
2959 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2960
2961         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2962         Fixed expression tree representation of empty new expression and
2963         new initializer expression.
2964
2965 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2966
2967         * eval.cs: Remove warning, keep reference to driver around.
2968
2969         * Hide fields that do not need to be public.
2970
2971 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2972
2973         A fix for bug #426385
2974         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2975         conversion for array elements.
2976
2977 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2978
2979         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2980         void parsing conflicts.
2981
2982 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2983
2984         A fix for bug #425601
2985         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2986         System.Core only when there is no custom ExtensionAttribute
2987         implementation.
2988
2989 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2990
2991         * namespace.cs: Do not report CS0246 (name
2992
2993 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2994
2995         A fix for bug #425669
2996         * generic.cs: Don't cache generic static anonymous method 
2997         containers.
2998
2999 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3000
3001         * generic.cs, class.cs, delegate.cs: Check recursive inherited
3002         conflicting constraints.
3003
3004 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
3005
3006         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
3007         mcs too.
3008
3009 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3010
3011         * literal.cs, convert.cs, expression.cs, statement.cs: More null
3012         to null pointer conversion fixes.
3013
3014 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3015
3016         * cs-parser.jay, expression.cs: An implicitly typed local variable
3017         declarator cannot use an array initializer.
3018
3019 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3020
3021         * cs-parser.jay: Reduced number of printed tokens, add sorting.
3022
3023 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3024
3025         * generic.cs (InflatedConstraints): Don't crash when constraints
3026         are different.
3027         
3028         * cs-parser.jay: const_declarator is a block.
3029
3030         * constant.cs: Check for not allowed NaN conversions.
3031
3032 2008-09-10  Miguel de Icaza  <miguel@novell.com>
3033
3034         * driver.cs: Drop --shell argument, the compiler is no longer a
3035         REPL. 
3036
3037         * eval.cs: Move most of the code that deals with evaluation into
3038         this file and document the public API from repl.cs
3039
3040         * repl.cs: Remove from here.
3041         
3042 2008-09-10  Marek Safar  <marek.safar@gmail.com>
3043
3044         A fix for bug #424684
3045         * generic.cs: Generic class constraints must come first.
3046
3047 2008-09-09  Miguel de Icaza  <miguel@novell.com>
3048
3049         * cs-parser.jay: Improve error reporting for syntax errors in
3050         statements and expressions, we now report the expected tokens
3051         instead of reporting the useless "; expected".
3052
3053         Drop the strings from the token declaration, it turns out that
3054         they did not do what I thought they did.  Instead they were adding
3055         two sets of tokens to the tables.
3056
3057 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3058
3059         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
3060         delegate.cs: Share special type check.
3061
3062 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3063
3064         A fix for bug #423981
3065         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
3066
3067 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3068
3069         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
3070         ConvertImplicitly.
3071
3072 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3073
3074         A fix for bugs: #324750, #335946
3075         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
3076         lookup rule to determine ?-based tokens.
3077
3078 2008-09-08  Miguel de Icaza  <miguel@novell.com>
3079
3080         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
3081         expressions (like event adding or removing) end up here, so we
3082         need to treat those as statements.
3083
3084         Add LoadAssembly method.
3085
3086 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3087
3088         * repl.cs: Add Time method.
3089
3090 2008-09-05  Marek Safar  <marek.safar@gmail.com>
3091
3092         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
3093
3094 2008-09-05  Miguel de Icaza  <miguel@novell.com>
3095
3096         * repl.cs: Add workaround for old compilers.
3097
3098 2008-09-04  Jb Evain  <jbevain@novell.com>
3099
3100         * repl.cs (PrettyPrint): pretty print everything that
3101         implements IDictionary, as well as IEnumerables. Also,
3102         add a quit helper property.
3103
3104 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3105
3106         * constant.cs: Better error reporting for decimal literals.
3107         
3108         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
3109         field attributes.
3110         
3111 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3112                         Miguel de Icaza  <miguel@novell.com>
3113
3114         A fix for bug #422951
3115         * assign.cs (Assign.DoResolve): Perform the type conversions
3116         checks before we attempt to initialize `New' initializers. 
3117
3118 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3119
3120         A fix for bug #422853
3121         * delegate.cs (DelegateCreation): Add special handling for
3122         EmptyExpression.Null instance expression which is just another
3123         hack for undecided member instance exression.
3124
3125 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3126
3127         * expression.cs, ecore.cs: Emit full expression tree for reduced
3128         binary expressions.
3129
3130 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3131
3132         * expression.cs (This): Guard against multi-resolving.
3133         
3134         * ecore.cs, statement.cs (Throw): Simplified.
3135         
3136         * flowanalysis.cs: Also verify event fields.
3137
3138 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3139
3140         * assign.cs (Assign.DoResolve): Perform the type conversions
3141         checks before we attempt to initialize `New' initializers. 
3142
3143         * repl.cs (PrettyPrint): Add Hashtable prettyprint
3144
3145         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
3146         public. 
3147
3148         * repl.cs: Update help.
3149
3150 2008-09-03  Miguel de Icaza  <miguel@novell.com>
3151
3152         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
3153         handling of the default config handling, including the special
3154         treatment of System.Core assembly. 
3155
3156         Fixes the REPL processing for LINQ.
3157
3158 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3159
3160         A fix for bug #422507
3161         * expression.cs (UnboxCast): Add missing child expression mutator.
3162
3163 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3164
3165         * driver.cs: Don't self reference System.Core assembly.
3166
3167 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3168
3169         A fix for bug #422507
3170         * expression.cs (StringConcat): Add missing type mutator.
3171
3172 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3173
3174         * generic.cs (TypeInferenceContext): Follow equality rule for
3175         constructed type lower bound type inference.
3176
3177 2008-09-02  Miguel de Icaza  <miguel@novell.com>
3178
3179         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
3180         <dblank@cs.brynmawr.edu> which updates the cursor position on
3181         refresh.
3182         
3183 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3184
3185         A fix for bug #367145
3186         * driver.cs: Fixed import of extension methods when using -noconfig
3187         option.
3188
3189 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3190
3191         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
3192         version from non-generic implementation instead.
3193
3194 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3195
3196         A fix for bug #418908
3197         * class.cs: Use AddScopeStatement for field initializers.
3198
3199 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3200
3201         A fix for bug #415385
3202         * ecore.cs, convert.cs: Do method group conversion for equal group types.
3203
3204 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3205
3206         A fix for bug #421736
3207         * iterators.cs: Don't crash on unreachable iterators.
3208
3209 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3210
3211         A fix for bug #421628
3212         * parameter.cs, attribute.cs: Clone also parameter attributes.
3213
3214 2008-08-30  Miguel de Icaza  <miguel@novell.com>
3215
3216         * namespace.cs (LookupType): In EvalMode, try to replace
3217         the TypeBuilder from our cache with a Type as Reflection.Emit does
3218         not  like to mix code from older assemblies emitted and new
3219         assemblies emitted. 
3220
3221         This sounds like a serious Mono bug that prevents multiple
3222         assemblies to be generated and consumed at the same time.
3223
3224         * cs-parser.jay (push_current_class): Do not make interactive
3225         classes internal or private, make them public as we currently
3226         generate each new class in a new assembly.   
3227
3228 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3229
3230         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3231         remove types that are entered into the global namespace during
3232         parsing so that we can remove them on failure.
3233  
3234         * cs-parser.jay: Parsing: we now keep track of types that are
3235         entered into global variables and queue those in case the parsing
3236         or resolution fail.
3237  
3238         This happens in a few situations: during partial-input, we invoke
3239         the parser repeatedly for example with the string "class X", this
3240         would cause X to be registed, and we need to remove this
3241         registration so that another parse attempt later with say "class X {"
3242         would actually work.
3243  
3244         Additionally, if there is an error in the resolution phase, for
3245         example: "class X : NonExistant {}" th
3246         
3247         * cs-parser.jay: Be more precise with the errors being raised,
3248         instead of flagging all exceptions during parsing to be attributed
3249         to the parsing process, distinguish those from errors happening in
3250         the actions and hint that using -v would produce the actual
3251         exception. 
3252
3253         * repl.cs: Do not load all compiler references on each reset,
3254         doing the partial reset takes care of this.
3255         
3256 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3257
3258         * repl.cs: Add support for loading all the files from
3259         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3260         as shell libraries.
3261
3262         Introduce a micro-parser that is able to deambiguate on its input
3263         whether we are dealing with a compilation unit (namespace, class,
3264         interface, struct, delegate) declaration or a statement.   This
3265         allows both declarations and statements to be entered. 
3266
3267         Set history size by default to 300 lines.
3268
3269         Instead of distinguishing based on the parser.InteractiveResult,
3270         have only two cases: statements were parsed, or a compilation unit
3271         was.   Always pull the Using statement additions from the
3272         compilation unit parse.
3273         
3274         * cs-tokenizer.cs: Rename tokens to better describe their intent
3275         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3276         
3277         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3278         EvalMode is used to trigger the lookup of global variables while
3279         StatementMode is used turn variable declarations into static
3280         fields.
3281
3282         * getline.cs: Allow history size to be set.
3283         
3284 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3285
3286         A fix for bug #360755
3287         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3288
3289 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3290
3291         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3292         
3293         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3294         member name, it is too confusing
3295         
3296         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3297         
3298         * rootcontext.cs: Finally default to warning level 4.
3299
3300 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3301
3302         * class.cs (CheckBase): Ignore overloaded operators.
3303
3304 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3305
3306         A fix for bug #420830
3307         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3308
3309 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3310
3311         A fix for bug #420832
3312         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3313
3314 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3315
3316         A fix for bug #420386
3317         * nullables.cs: Fixed logic of nullable user comparison operators involving
3318         null values.
3319
3320 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3321         
3322         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3323
3324 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3325
3326         * repl.cs: Add support for aborting the running code with C-c. 
3327
3328 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3329
3330         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3331
3332 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3333
3334         * cs-parser.jay (interactive_statement_list): A new set of rules
3335         for hosting statements that uses the "interactive_" prefix.   
3336
3337         * repl.cs: Add support for parsing `using' as a statement or as a
3338         directive.  Deambiguating before passing this to the parser.
3339
3340         We need to distinguish statement_expressions that occur at the
3341         toplevel vs those that occur embedded into expressions.
3342
3343         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3344         that fixes the cursor key handling, and a history bug.
3345         
3346 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3347
3348         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3349         limitations in Console, instead the 2.0 bootstrap libraries now
3350         include the Console bits.
3351
3352         Also, remove the use of Nullables from getline.cs
3353
3354         ------------
3355         
3356         Interactive support for the C# compiler.   Use gmcs --shell to
3357         enter a read-eval-print loop shell.
3358
3359         Docs: http://www.mono-project.com/CsharpRepl
3360         
3361         * sources: include repl.cs here and getline.cs for gmcs.exe,
3362         everything else is getline.cs impaired.
3363
3364         * Makefile: when bootstrapping pass a special flag
3365         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3366         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3367         This distinguishes those two cases.
3368
3369         * repl.cs: Support for a read-eval-print loop.   Will be soon
3370         refactored into eval support and then REPL on top of it.
3371
3372         * ecore.cs: If a simplename lookup fails, before erroring out,
3373         if we are in EvalMode to resolve the name to a declaration in the
3374         Eval-land.    
3375
3376         This means that variable declarations that happened in previous
3377         classes (as repl puts every statement in a separate class) are
3378         made visible in this way.
3379
3380         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3381         triggered an error due to the end of file being reached.   This is
3382         used to do multi-line input, and notify the caller that the user
3383         needs to provide more text before a successful parse.
3384
3385         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3386         to drive the evaluation with a custom wrapper. 
3387
3388         * driver.cs: Add support for --shell, and refactor some code to be
3389         reused from repl.cs
3390         
3391         * namespace.cs: Add support for serializing the contents of the
3392         namespaces and reloading them.  
3393
3394         * getline.cs: A managed implementation of ReadLine under
3395         X11/Apache2 license terms.  Easy to embed in other applications as
3396         well.
3397
3398         * namespace.cs: Add some functions to save and restore the
3399         namespace state.
3400
3401         * rootcontext.cs: New public field.
3402
3403         * cs-tokenizer.cs: Add support for one of the possible characters
3404         we introduce into the token stream.  
3405
3406         This patch does not affect the regular tokenization process, the
3407         only performance hit would happen if there is an invalid character
3408         on the input string.
3409
3410         * support.cs: Move isatty helper routine here.
3411
3412         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3413         code generator for in-memory assemblies.
3414
3415 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3416
3417         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3418         parameter cannot be always used as a type.
3419
3420 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3421
3422         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3423
3424 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3425
3426         * convert.cs: Implement explicit array to IList<T> conversion.
3427
3428 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3429
3430         A fix for bug #362740
3431         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3432
3433 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3434         
3435         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3436         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3437         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3438         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3439         handling to use just one type of infrastructure and deal with generics
3440         more effectivelly.
3441
3442 2008-07-23  Martin Baulig  <martin@ximian.com>
3443
3444         *** Merged this from trunk revision 108527 ***
3445
3446         * statement.cs
3447         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3448         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3449         scope variable.
3450
3451 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3452         
3453         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3454         error checks.
3455
3456 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3457         
3458         * delegate.cs: Fixed compiler crash when creating delegate using partial
3459         method.
3460         
3461         * typemanager.cs: MulticastDelegate is not a delegate.
3462
3463 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3464         
3465         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3466         checks.
3467
3468 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3469
3470         * cs-parser.jay (type): Allow 'var' in mcs too.
3471         (local_variable_type): Likewise.
3472
3473 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3474         
3475         * driver.cs: Removed broken -noconfig variants.
3476
3477 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3478         
3479         A fix for bug #417078
3480         * expression.cs: Emit correctly left side pointer operators.
3481
3482 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3483
3484         * generic.cs, lambda.cs: Inflate method generic arguments only.
3485
3486 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3487
3488         * class.cs: Fixed struct layout check regression.
3489
3490 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3491
3492         * cs-parser.jay, enum.cs: Simplified enum parsing.
3493         
3494         * decl.cs: Check all type parameters conflicts.
3495         
3496         * expression.cs, statement.cs, attribute.cs: More expression checks.
3497
3498 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3499
3500         * generic.cs: Add type inference types restriction.
3501         
3502         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3503         anonymous.cs, expression.cs: Allocate less accessor parameters.
3504
3505 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3506
3507         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3508         classes.
3509
3510 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3511
3512         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3513
3514 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3515
3516         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3517         Also fixes #362146 and #381592.
3518
3519 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3520
3521         * ecore.cs: Reduced constant cannot be used as an attribute value.
3522         
3523         * cs-parser.jay: Base expression has to be a type.
3524         
3525         * expression.cs (Conditional): Uses ReducedExpression.
3526
3527 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3528
3529         A fix for bug #376826
3530         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3531         address of hoisted local variable or parameter cannot be taken.
3532
3533 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3534
3535         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3536         anonymous method inside checked/unchecked expression.
3537
3538 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3539
3540         * typemanager.cs (IsEqual): Guard against null.
3541         
3542         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3543         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3544         routine. Fixed few misleading conversion errors.
3545
3546 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3547
3548         * class.cs: Consider generics when checking cycles in struct layout.
3549
3550 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3551
3552         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3553
3554 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3555
3556         A fix for bug #414165
3557         * anonymous.cs: Use same anonymous implementation method for all anonymous
3558         method emits.
3559
3560 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3561
3562         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3563         constraints.
3564
3565 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3566
3567         * cs-parser.jay: Typeof argument has to be a type expression.
3568         
3569         * namespace.cs: Check alias and namespace definitions collisions.
3570         
3571         * class.cs, pending.cs: Moved explicit interface accessor implementation
3572         check.
3573         
3574         * delegate.cs, expression.cs: Verify special name invocations.
3575         
3576 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3577
3578         * cs-parser.jay: Don't choke on empty generic type arguments.
3579         
3580         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3581         
3582         * expression.cs, ecore.cs: Minor expressions bugs.
3583
3584 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3585
3586         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3587         and added more error handling.
3588         
3589         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3590         
3591         *  modifiers.cs, enum.cs: Fixed.
3592
3593 2008-07-31  Jb Evain  <jbevain@novell.com>
3594
3595         * driver.cs: remove -pkg ability of smcs.
3596
3597 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3598
3599         * statement.cs (Switch): Correctly set empty default target for single
3600         blocks.
3601
3602 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3603
3604         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3605         string switch statement implementation to use string dictionary which
3606         significantly (2-8x) improves performance of generated code.
3607
3608 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3609
3610         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3611         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3612         
3613 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3614
3615         A fix for bug #412595
3616         * typemanager.cs, convert.cs, expression.cs: Some types are never
3617         convertible to each other.
3618
3619 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3620
3621         * nullable.cs (CreateNullConstant): An error messages update.
3622
3623 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3624
3625         A fix for bug #412595
3626         * cfold.cs: Don't cast undefined bool constant.
3627
3628 2008-07-29  Martin Baulig  <martin@ximian.com>
3629
3630         * symbolwriter.cs
3631         (SymbolWriter.Reset): New public static method.
3632
3633         * driver.cs
3634         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3635
3636 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3637
3638         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3639         
3640         * expression.cs (ElementAccess): Exact size allocation.
3641
3642 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3643
3644         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3645
3646 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3647
3648         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3649         
3650         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3651         flow analysis.
3652
3653 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3654
3655         A fix for bug #412217
3656         * assign.cs: Mutate also assignment type.
3657
3658 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3659
3660         A fix for bug #323644
3661         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3662         indexers.
3663
3664 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3665
3666         A fix for bug #412134
3667         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3668         non-enumerable operands when overloading equality or bitwise operators.
3669
3670 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3671
3672         * anonymous.cs: Cache closed generic anonymous method delegates.
3673
3674 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3675
3676         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3677         anonymous.cs, statement.cs: Always emit anonymous method as static method
3678         when is instance free. Use nesting for nested anynomous methods blocks.
3679         
3680 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3681
3682         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3683         types.
3684
3685 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3686
3687         * expression.cs: Removed MakeSimpleCall.
3688
3689 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3690
3691         A fix for bug #323012
3692         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3693         Base method implementing interface has to be public.
3694
3695 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3696
3697         * cs-parser.jay: Don't break on missing argument.
3698
3699 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3700
3701         A fix for bug #320993
3702         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3703           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3704
3705 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3706
3707         A fix for bug #320748
3708         * convert.cs: Implicit user operators cannot convert to interfaces
3709
3710 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3711
3712         A fix for bug #312686
3713         * driver.cs: Ignore empty assembly references.
3714
3715 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3716
3717         A fix for bug #387040
3718         * ecore.cs: Skip constrains check for an explicit implementation.
3719
3720 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3721
3722         A fix for bug #409045
3723         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3724           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3725           identifiers are file specific unless passed as input arguments.
3726
3727 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3728
3729          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3730          to emit UnmanagedMarshal data under 2.0 profile.
3731
3732 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3733
3734         A fix for bug #410369
3735         * parameter.cs: Clone correctly ParamsParameter.
3736
3737 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3738
3739         * expression.cs (Argument): Always report type for type based expressions
3740         errors.
3741
3742 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3743
3744         A fix for bug #410666
3745         * anonymous.cs: Correctly initialize generic storey reference.
3746
3747 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3748
3749         * convert.cs: Don't box same type arguments.
3750
3751 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3752
3753         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3754         Finished missing generic type mutators.
3755
3756 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3757
3758         * iterators.cs, statement.cs: Finished statements CloneTo.
3759
3760 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3761
3762         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3763         
3764         * expression.cs: Emit optimized default value expressions in expression tree
3765         array initializer.
3766
3767 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3768
3769         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3770
3771 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3772
3773         A fix for bug #367536
3774         * cs-parser.jay: Check static constructor of generic types for an access
3775         modifier.
3776
3777 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3778
3779         A fix for bug #353800
3780         * lambda.cs: Emit ret for contextual statements.
3781         
3782         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3783         up emitting redundant ret for all anonymous methods with return.
3784
3785 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3786
3787         A fix for bug #365188
3788         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3789         create anonymous method storey in unreachable block.
3790
3791 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3792
3793         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3794         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3795         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3796         statement.cs: Fixed relevant defects found by Gendarme.
3797
3798 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3799
3800         A fix for bug #325291
3801         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3802         statement.cs: Replaced IAnonymousHost with top level block flag.
3803
3804 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3805
3806         * cs-parser.jay: Clean up unused open_parens.
3807
3808 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3809
3810         * ecore.cs: Custom error message for a range variable assignment.
3811
3812 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3813
3814         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3815         load.
3816
3817 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3818
3819         * literal.cs: Null literal is of object type.
3820
3821 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3822
3823         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3824         expression of nullable equality comparison.
3825
3826 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3827
3828         * expression.cs(PointerArithmetic): Removed redundant assignment.
3829
3830 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3831
3832         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3833
3834 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3835
3836         A fix for bug #408361
3837         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3838         they are replaced by GetMethod.
3839
3840 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3841
3842         A fix for bug #408721 by jeremie.laval@gmail.com
3843         * expression.cs (Indirection): Implemented CloneTo.
3844
3845 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3846
3847         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3848         assert check.
3849
3850 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3851
3852         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3853
3854 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3855
3856         * linq.cs: Reset tranparent parameter counter in probing mode.
3857
3858 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3859
3860         * anonymous.cs: Mutate anonymous method type.
3861
3862 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3863
3864         * ecore.cs, anonymous.cs: Mutate field expressions.
3865
3866 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3867
3868         A fix for bug #369670
3869         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3870
3871 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3872
3873         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3874
3875 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3876
3877         Fix bug #314902
3878         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3879         only one '>', and finds a '>>', abort the generic lookahead.
3880
3881 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3882
3883         A fix for bug #319902
3884         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3885
3886 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3887
3888         A fix for bug #406371
3889         * statement.cs: Moved EmitSymbolInfo to Block.
3890
3891 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3892
3893         * ecore.cs: Report better error for extension method overload failures.
3894
3895 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3896
3897         * expression.cs (Is): No need to box reference values.
3898
3899 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3900
3901         * class.cs: Use event resolve context when initializing CreateEmitContext.
3902
3903 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3904
3905         A fix for bug #394436
3906         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3907         method used inside expression trees. Added more LINQ to expression tree
3908         conversions.
3909
3910 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3911
3912         A fix for bug #378189, #370577
3913         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3914         from expression.
3915
3916 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3917
3918         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3919         hierarchically.
3920
3921 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3922
3923         A fix for bug #406702
3924         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3925
3926 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3927
3928         A fix for bug #406648
3929         * cs-parser.jay: Report nullable use in mcs for some cases.
3930
3931 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3932
3933         * ecore.cs: Improved argument mismatch error messages.
3934
3935 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3936
3937         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3938
3939 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3940
3941         * expression.cs (TypeOf): Mutate type argument.
3942
3943 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3944
3945         * class.cs: Report missing partial modifier for correct type.
3946
3947 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3948
3949         * ecore.cs, expression.cs (VariableReference): Variable property is 
3950         protected.
3951
3952 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3953
3954         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3955         
3956 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3957
3958         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3959         method delegates.
3960
3961 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3962
3963         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3964         anonymous method storey to an instance method when only "this" is hoisted.
3965
3966 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3967
3968         A fix for bug #321615
3969         * expression.cs: Pointer comparisons use unsigned operator.
3970
3971 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3972
3973         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3974
3975 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3976
3977         A fix for bug #404905
3978         * class.cs: Always initialize local unsafe variables.
3979
3980 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3981
3982         A fix for bug #396987
3983         * expression.cs (NewInitialize): Clear local temporary variable for next run
3984
3985 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3986
3987         A fix for bug #401020
3988         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3989
3990 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3991
3992         A fix for bug #398319
3993         * cs-parser.jay: Implemented undocumented base access expression inside
3994         anonymous types.
3995
3996 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3997
3998         A fix for bug #404227
3999         * cs-parser.jay: Parse namespace declaration using qualified identifier.
4000
4001 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4002
4003         A fix for bug #404227
4004         * convert.cs: Fixed explicit array to interface cast.
4005
4006 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4007
4008         A fix for bug #403894
4009         * delegate.cs: Mutate DelegateInvocation type.
4010
4011 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4012
4013         A fix for bug #379348
4014         * delegate.cs: Box a load of generic parameters.
4015
4016 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4017
4018         * expression.cs: Add an array creation arguments mutate.
4019
4020 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4021
4022         A fix for bug #386068
4023         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
4024         parameter.
4025
4026 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4027
4028         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
4029         CloneTo.
4030
4031 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4032
4033         A fix for bug #403518
4034         * delegate.cs: Type correctly anonymous method new invocation.
4035
4036 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4037
4038         A fix for bug #394826
4039         * anonymous.cs: Fully qualify members when resolving anonymous type internal
4040         calls.
4041
4042 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4043
4044         A fix for bug #394826
4045         * anonymous.cs, iterators.cs: Construct generic storey only when is really
4046         needed.
4047
4048 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4049
4050         * class.cs: Clone indexer parameters for localized capturing.
4051
4052 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4053
4054         A fix for bug #402379
4055         * expression.cs: Don't crash when an object initializer resolve fails.
4056
4057 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4058
4059         A fix for bug #402888
4060         * expression.cs: Mutate conditional expression.
4061
4062 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4063
4064         A fix for bug #401012
4065         * class.cs: Keep StructLayout in shared container.
4066
4067 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4068
4069         A fix for bug #400438
4070         * decl.cs, class.cs: Only properties can be automatically implemented.
4071
4072 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4073
4074         * statement.cs (ChangeToIterator): Copy also labels.
4075
4076 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4077
4078         * ecore.cs: Pass type argument details to parent extension method.
4079
4080 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4081
4082         A fix for bug #375966
4083         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
4084
4085 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
4086
4087         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
4088
4089 2008-06-22  Marek Safar  <marek.safar@gmail.com>
4090
4091         A fix for bug #394347
4092         * anonymous.cs: Cache compatible delegates as compatibility check produces
4093         a new method every time.
4094
4095 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4096
4097         * anonymous.cs: Propagate storey reference for single references.
4098
4099 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4100
4101         A fix for bug #387615
4102         * assign.cs, expression.cs: Correctly clone compound assignment.
4103
4104 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4105
4106         A fix for bug #359611, #359604
4107         * anonymous.cs: Mutate all types of hoisted parameters.
4108
4109 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4110
4111         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
4112         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
4113         expression.cs, codegen.cs, statement.cs
4114         
4115         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
4116         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
4117         
4118         ** Anonymous methods, lambda expressions rewrite **
4119         
4120         Anonymous expressions are now resolved when an explicit block is resolved 
4121         and they don't require any registration procedure anymore. Further,
4122         anonymous methods are defined when explicit block is emitted which allows
4123         better control of whole process and opens possibilities for more
4124         optimizations as well as alternative to reverse whole process.
4125         
4126         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
4127         process consistent and to correctly emit hoisted generic methods when they
4128         have at least 1 hoisted variable.
4129         
4130 2008-06-17  Martin Baulig  <martin@ximian.com>
4131
4132         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
4133         iterator method.
4134         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
4135         virtual property; check it in Emit().
4136         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
4137         an iterator.
4138         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
4139         an iterator.
4140         (Indexer.Define): Likewise.
4141
4142 2008-06-17  Marek Safar  <marek.safar@gmail.com>
4143
4144         * convert.cs: Don't use IsInterface on type arguments.
4145         
4146         * delegate.cs: DelegateInvocation uses MethodInfo.
4147         
4148         * parameter.cs: Removed IsTypeParameter.
4149         
4150         * generic-mcs.cs: More missing stuff.
4151
4152 2008-06-16  Martin Baulig  <martin@ximian.com>
4153
4154         * modifiers.cs
4155         (Modifiers.DEBUGGER_HIDDEN): New public const.
4156
4157         * typemanager.cs
4158         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
4159
4160         * class.cs
4161         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
4162         (AbstractPropertyEventMethod): Likewise.
4163         (Constructor.Emit): Likewise.
4164         (SourceMethod.SetCompilerGenerated): Removed.
4165
4166         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
4167         on MoveNext().
4168
4169         * anonymous.cs
4170         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
4171         if we're an `IteratorHost'.
4172         (AnonymousMethodMethod..ctor): Don't set
4173         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
4174         not on the method.
4175
4176 2008-06-16  Marek Safar  <marek.safar@gmail.com>
4177
4178         * statement.cs: Clean-up foreach statements.
4179
4180 2008-06-12  Marek Safar  <marek.safar@gmail.com>
4181
4182         * class.cs: Stop using public method which should not exist
4183         (MethodBuilder.SetGenericMethodSignature).
4184
4185 2008-06-11  Martin Baulig  <martin@ximian.com>
4186
4187         * location.cs
4188         (Location.LookupFile): Add `CompilationUnit' argument; when given
4189         a relative file name, make it relative to the directory the .cs
4190         file is located in instead of using the current directory.
4191
4192 2008-06-11  Martin Baulig  <martin@ximian.com>
4193
4194         * class.cs
4195         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
4196         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
4197         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
4198         (SourceMethod.SetCompilerGenerated): Likewise.
4199
4200 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4201
4202         * codegen.cs, driver: Only write symbol file when it's asked for.
4203
4204 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4205
4206         * codegen.cs: Don't use assembly writer error handling for symbol writer.
4207
4208 2008-06-10  Martin Baulig  <martin@ximian.com>
4209
4210         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
4211
4212 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4213
4214         A fix for bug #316290
4215         * expression.cs: Include decimal operators in predefined table.
4216         
4217         * parameters.cs: More readonlyness.
4218
4219 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4220
4221         A fix for bug #397213
4222         * cs-parser.jay: One more missing current_local_parameters reset.
4223
4224 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4225
4226         A fix for bug #396633
4227         * class.cs: Host backing field in partial container.
4228
4229 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4230
4231         A fix for bug #397068
4232         * expression.cs: Check both operand types when predefined operator is used.
4233
4234 2008-06-05  Martin Baulig  <martin@ximian.com>
4235
4236         Merged the `debugger-kahalo' branch.
4237
4238         * class.cs
4239         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4240         we're an iterator method.
4241         (SourceMethod): Reflect latest symbol writer changes;
4242         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4243         now `start_row' and `end_row'.
4244         (Constructor.Emit): Fix the logic whether to emit symbol information.
4245
4246         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4247         generated methods.
4248
4249         * location.cs
4250         (CompilationUnit): New public class; derives from `SourceFile'.
4251         (SourceFileEntry.DefineSymbolInfo): New public method.
4252         (SourceFileEntry.SetChecksum): New public method.
4253         (Location): Encode hidden line numbers by using `column == 255';
4254         the .ctor now accepts `column == -1' to mark a hidden line number.
4255         (Location.Hidden): New public property.
4256         (Location.CheckPoint): Add `CompilationUnit'.
4257         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4258         (Location.Push): Add `CompilationUnit compile_unit' argument.
4259         (Location.CompilationUnit): New public property.
4260
4261         * statement.cs
4262         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4263
4264         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4265
4266         * driver.cs: `SourceFile' -> `CompilationUnit'.
4267
4268         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4269
4270         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4271
4272         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4273         `#line hidden'.
4274
4275         * symbolwriter.cs
4276         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4277         new symbol writer API to also pass the file.
4278
4279 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4280
4281         * statement.cs: Emit catch variable assignment using variable expression.
4282         
4283 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4284
4285         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4286         with other variable types.
4287
4288 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4289
4290         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4291         GetLength method emit, it breaks resolve rules.
4292         
4293 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4294             Marek Safar  <marek.safar@gmail.com>
4295                         
4296         A fix for bug #395542
4297         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4298         declaration.
4299         
4300 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4301
4302         A fix for bug #395287
4303         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4304
4305 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4306
4307         A fix for bug #395845
4308         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4309         non-nullable parameter type.
4310         
4311 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4312
4313         * class.cs: Handle contructor initializer as a statement in top-level block.
4314
4315 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4316
4317         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4318         security attributes.
4319
4320 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4321
4322         * ecore.cs, expression.cs: Small IVariable refactoring.
4323
4324 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4325
4326         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4327
4328 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4329
4330         * cs-parser.jay: Removed redundant catch type check.
4331
4332 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4333
4334         A fix for bug #390372
4335         * nullable.cs: Set correct return type.
4336
4337 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4338
4339         A fix for bug #391062
4340         * typemanager.cs: Fixed crash when comparing null types.
4341
4342 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4343
4344         A fix for bug #391871
4345         * cs-parser.jay: Better error handling for invalid catch type.
4346
4347 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4348
4349         A fix for bug #392155
4350         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4351
4352 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4353
4354         A fix for bug #390666
4355         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4356         expressions.
4357
4358 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4359
4360         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4361         in getter.
4362
4363 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4364
4365         A fix for bug #389625
4366         * delegate.cs, generic.cs: Some progress on method group return type
4367         inference.
4368
4369 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4370
4371         A fix for bug #378419
4372         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4373
4374 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4375
4376         * class.cs (Constructor): Added IsCompilerGenerated.
4377
4378 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4379
4380         * expression.cs: Enum binary operators can accept non-enum operand only when
4381         is implicitly convertible to underlying type.
4382
4383 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4384
4385         A fix for bug #389272
4386         * support.cs: Workaround System.InvalidOperationException for enums.
4387
4388 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4389
4390         A fix for bug #389073
4391         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4392
4393 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4394
4395         * driver.cs: Split Parse.
4396         
4397         * location.cs (LookupFile): Uses string.Empty.
4398
4399 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4400
4401         * expression.cs, parameter.cs: Small ParameterReference clean up.
4402
4403 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4404
4405         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4406         hack. Fixes #387502.
4407
4408 2008-05-06  Martin Baulig  <martin@ximian.com>
4409
4410         * class.cs (Constructor.Emit): Fix the logic whether to emit
4411         symbol information.
4412
4413 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4414
4415         Fix #385503
4416         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4417         InvalidOperationException when the iterator is before the start or
4418         after the end.
4419
4420 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4421
4422         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4423         when left is nullable type.
4424
4425 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4426
4427         A fix for bug #386628
4428         * expression.cs (LocalVariableReference): Continue in resolving when
4429         variable is not assigned.
4430
4431 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4432
4433         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4434         nullable operations.
4435
4436 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4437
4438         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4439         it saves many redundant temporary variables for nullable operations.
4440
4441 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4442
4443         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4444         
4445         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4446         method.
4447         
4448         * nullable.cs: Constant coalescing operator optimizations.
4449
4450 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4451
4452         * constant.cs: Use unsigned conversion for values which are unsigned only.
4453
4454 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4455
4456         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4457         coalescing operator as it should be.
4458
4459 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4460
4461         A fix for bug #371016
4462         * expression.cs: All predefined delegate operators require implicit method
4463         group conversion.
4464         
4465 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4466
4467         * constant.cs: Emit long constant as uint when fits the range.
4468         
4469         * convert.cs, expression.cs: Fixed few unsafe conversions.
4470
4471 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4472
4473         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4474
4475 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4476
4477         Fix #385758
4478         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4479         'expr'.
4480         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4481
4482 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4483
4484         * constant.cs, literal.cs: IsLiteral property for error reporting.
4485         
4486         * ecore.cs, expression.cs: Implemented Property expression.
4487
4488 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4489
4490         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4491         
4492         * nullable.cs: Implemented nullable coalescing null operator.
4493
4494         * ecore.cs, expression.cs: Expression trees work.
4495
4496 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4497
4498         * ecore.cs: CreateExpressionTree is finally abstract.
4499
4500         * expression.cs, linq.cs: Updated.
4501
4502 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4503
4504         * expression.cs, ecore.cs: Block base access expression inside expression
4505         tree.
4506
4507 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4508
4509         A fix for bug #385058
4510         * expression.cs: User-defined operator implementations always take
4511         precedence over predefined operator implementations.
4512
4513 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4514
4515         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4516         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4517         expression tree conversions.
4518         
4519 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4520
4521         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4522         operators method details to Operator class.
4523
4524 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4525
4526         * anonymous.cs: Pass unsafe flags to anonymous container.
4527         
4528         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4529         inside expression tree.
4530
4531 2008-04-29  Martin Baulig  <martin@ximian.com>
4532
4533         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4534         (Tokenizer.PopPosition): Also restore the `line'.
4535
4536 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4537
4538         * delegate.cs: Implemented Invoke expression.
4539
4540 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4541
4542         * expression.cs: Fixed equality reference comparison regression.
4543
4544 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4545
4546         * ecore.cs: Clean up EmptyCast hack.
4547         
4548         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4549         using correct conversion rules. Also fixes #383993.
4550
4551 2008-04-28  Martin Baulig  <martin@ximian.com>
4552
4553         * class.cs (Constructor.Emit): Don't emit debugging information
4554         for generated default .ctor's.
4555
4556 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4557
4558         * convert.cs: Empty-cast ushort to int conversion.
4559
4560 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4561
4562         A fix for bug #384191
4563         * ecore.cs, expression.cs: Fixed expression cloning.
4564
4565 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4566
4567         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4568
4569 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4570
4571         Fix #381559, test-638.cs, test-639.cs
4572         * assign.cs (CompoundAssign.Helper): New wrapper.
4573         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4574         access.
4575         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4576         Pass unconverted expressions to the params array creation expression.
4577         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4578         (PropertyExpr.EmitAssign): Likewise.
4579         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4580         element if it is of kind CompoundAssign.Helper.
4581         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4582         first before anything else.
4583         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4584         (ArrayAccess.LoadArrayAndArguments): Simplify.
4585
4586 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4587
4588         * expression.cs: Fixed cloning of typeof(void).
4589
4590 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4591
4592         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4593         (Assign.Emit): Likewise.  Move it to ...
4594         (CompoundAssign.DoResolve): ... here and ...
4595         (CompoundAssign.Emit): ... here.
4596         (EventAddOrRemove): New helper to handle += and -= on events, and
4597         avoid the use of BinaryDelegates.
4598         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4599         (EventExpr.EmitAddOrRemove): Improve.
4600         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4601
4602         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4603         create VarExprs for 'foo.bar.var'.
4604         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4605         is a highly inappropriate name for its functionality.
4606
4607 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4608
4609         Simplify handling of multiple assignments
4610         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4611         inheritable-only.
4612         (SimpleAssign): New.  Class to be used for normal assignments.
4613         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4614         * expression.cs, parameter.cs, statement.cs: Likewise.
4615
4616 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4617
4618         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4619         for incompatible underlying types, more to come, uff.
4620
4621 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4622
4623         Fix gtest-388.cs
4624         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4625         Handle 'leave_copy'.
4626
4627 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4628
4629         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4630
4631 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4632
4633         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4634         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4635         * statement.cs (While, Do, For): Allow test to have side effects.
4636         (For.DoEmit): Always emit InitStatement.
4637
4638         Fix test-635.cs
4639         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4640         Always create SideEffectConstant.
4641         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4642         of type EnumConstant.
4643
4644         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4645         Handle 'right' being SideEffectConstant of type 'bool'.
4646
4647         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4648         Use left.EmitBranchable instead of open coding it, so as to
4649         improve optimization opportunities.
4650
4651         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4652
4653         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4654         assumptions.
4655         (Expression.EmitSideEffect): Document.
4656
4657 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4658
4659         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4660
4661 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4662
4663         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4664
4665 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4666
4667         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4668         conversion to expression tree.
4669
4670 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4671
4672         * ecore.cs: Removed unused expression.
4673
4674 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4675
4676         * expression.cs: Implemented NegateChecked and New expressions.
4677
4678 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4679
4680         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4681
4682 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4683
4684         Fix #351102
4685         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4686         needing final 'ret' instruction.
4687
4688 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4689
4690         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4691
4692 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4693
4694         * expression.cs: Emit ldnull and not null expression as an instance argument
4695          of static method expression calls.
4696
4697 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4698
4699         A fix for bug #378200
4700         * expression.cs: Fixed crash when creating parameterless expression tree
4701         method call.
4702
4703 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4704
4705         A fix for bug #375297
4706         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4707         method.
4708
4709 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4710
4711         A fix for bug #377596
4712         * decl.cs, class.cs: Emit delegate type argument attributes.
4713
4714 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4715
4716         A fix for bug #365314
4717         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4718         
4719 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4720
4721         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4722         only.
4723
4724 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4725
4726         * generic.cs (TypeParameter): Removed redundant location.
4727
4728 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4729
4730         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4731         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4732         FullNamedExpression in all declaration type expression, statements will come
4733         later.
4734
4735 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4736
4737         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4738         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4739
4740 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4741
4742         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4743         code.
4744
4745 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4746
4747         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4748         constraints.
4749
4750 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4751
4752         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4753         name expressions.
4754         Also fixes #340463.
4755
4756 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4757
4758         Hook up 'EmitSideEffect'
4759         * constant.cs (Constant.EmitSideEffect): New.
4760         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4761         (SideEffectConstant.EmitSideEffect): New.
4762         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4763         unconditional branch in EmitBranchable.
4764         (FieldExpr.EmitBranchable): New.
4765         * expression.cs (Unary.EmitSideEffect): New.
4766         (Binary.EmitSideEffect): New.
4767         (VariableReference.EmitSideEffect): New.  Do nothing.
4768
4769 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4770
4771         Introduce 'EmitSideEffect'
4772         * ecore.cs (Expression.EmitSideEffect): New.
4773         (TypeCast): Rename from EmptyCast.
4774         (EmptyCast): New.
4775         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4776         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4777         * convert.cs, nullable.cs: Update to changes.
4778
4779 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4780
4781         * class.cs, cs-parser.jay: Early check for base types expression.
4782
4783 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4784
4785         * decl.cs (MemberName): Declare PrettyName as obsolete.
4786
4787 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4788
4789         * namespace.cs: Use MemberName comparison.
4790
4791 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4792
4793         Fix build break
4794         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4795         FullName.
4796         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4797         (MemberName.FullyQualifiedName): New.  Provides the functionality
4798         that users assume FullName would have.
4799         * ecore.cs, namespace.cs: Update to changes.
4800
4801         * statement.cs (Using.assign): Make into ExpressionStatement.
4802         (Using.EmitPreTryBody): Simplify.
4803
4804 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4805
4806         * report.cs: ColorFormat is protected.
4807         
4808         * rootcontext.cs: Unused fields clean-up.
4809         
4810         * namespace.cs: Made UsingEntry name private.
4811
4812 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4813
4814         * cs-tokenizer.cs, location.cs: Removed unused field.
4815
4816 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4817             Raja R Harinath  <harinath@hurrynot.org>
4818
4819         Fix #379822
4820         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4821         (SideEffectConstant.side_effect): Rename from 'right'.
4822         (SideEffectConstant..ctor): Normalize 'side_effect'.
4823         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4824         value of this constant.
4825         * cfold.cs: Update to changes.
4826
4827 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4828
4829         * cs-paser.jay: Removed unused variable.
4830         
4831         * driver.cs: Made Compile instance method.
4832
4833 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4834
4835         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4836
4837 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4838
4839         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4840
4841 2008-04-13  Jb Evain  <jbevain@novell.com>
4842
4843         * namespace.cs: update the System.Core fullname for 2.1
4844         * driver.cs: update the list of required assemblies for 2.1.
4845         Merged from the Moonlight 2 branch.
4846
4847 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4848
4849         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4850         types and user defined operators. User operators arguments has to be checked
4851         for null value before invocation, which also means no operator is called
4852         when any argument is not convertible to unwrapped nullable type.
4853         
4854 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4855
4856         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4857         of Unary expressions to follow operator overloading rules precisely.
4858         Also fixes #321794, #323794
4859         
4860 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4861
4862         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4863         expression.
4864         
4865 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4866
4867         * expression.cs, ecore.cs: Implemented MemberInit expression.
4868         
4869 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4870
4871         Fix mono/tests/exception4.cs
4872         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4873         ec.NeedReturnLabel () rather emitting a 'nop'.
4874
4875         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4876         simple heuristic.
4877         (TryCatch.SomeCodeFollows): Likewise.
4878         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4879         for 'break', 'continue' and 'return' statements inside a try.
4880         We're fairly sure that the generated IL stream will have more
4881         instructions textually following the try.
4882         (FlowBranchingTryCatch): Likewise.
4883
4884         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4885         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4886         overrides.
4887
4888         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4889         wrapper -- forward everything to CollectionForeach.
4890         (CollectionForeach.NonDisposableWrapper): New.
4891         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4892         instead of a pop + branch to end.
4893
4894 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4895
4896         A fix for bug #377485
4897         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4898         Propagate location for extension method groups. Report conversion failure at
4899         right place.
4900
4901 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4902
4903         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4904         ListInit and Field expressions.
4905
4906 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4907
4908         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4909         Since $PC is always -1 inside the body of MoveNext, the fault
4910         handler is a no-op.
4911         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4912         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4913         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4914
4915         The denouement!  Fix #324708
4916         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4917         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4918         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4919         'finally' inside the finally clause.
4920
4921         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4922         inside an iterator.  Don't emit the body of the 'finally' inside
4923         the finally clause yet.
4924
4925         Use the ResumableStatement infrastructure for MoveNext ()
4926         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4927         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4928         'old_resume_points'.  Move dispatcher upfront.
4929         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4930         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4931         in an enumerator.  This encodes the main fix in this patch series
4932         -- we can only jump into the first instruction of a try from the
4933         outside, but we want to emit try/finally regions in iterators and
4934         resume in the middle of them.
4935
4936 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4937
4938         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4939         of NeedReturnLabel here.
4940
4941         Introduce a common point for emitting try/finally to IL
4942         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4943         features of the various subclasses, which are now driven by ...
4944         (ExceptionStatement.EmitPreTryBody): ... this and ...
4945         (ExceptionStatement.EmitTryBody): ... this and the original
4946         EmitFinallyBody.
4947         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4948         Remove DoEmit and update to follow above protocol.
4949
4950         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4951         of the dispatcher are the same, skip emitting the 'switch'.
4952         * iterator.cs (Iterator.EmitDispose): Update to changes.
4953
4954         Clean up handling of 'using' statement
4955         * statement.cs (UsingTemporary): New.  Carved out of ...
4956         (Using): ... this.  Simplify drastically.  Handle exactly
4957         one variable.
4958         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4959         or Using as appropriate.  If there are multiple variable declared,
4960         create nested Using statements.
4961         (resource_acquisition): Kill.
4962
4963         * statement.cs (ExceptionStatement.EmitForDispose): Use
4964         EmitFinallyBody, not EmitFinally.
4965
4966         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4967         * iterator.cs: Update to changes.
4968
4969         Start using the ResumableStatement infrastructure
4970         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4971         (ResumableStatement.EmitForDispose): New.
4972         (ExceptionStatement): Override them.
4973         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4974         EmitForDispose to create the body of the Dispose method.  Don't
4975         use OldResumePoint.
4976
4977         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4978         * statement.cs (Toplevel.AddResumePoint): ... here.
4979         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4980         * flowanalysis.cs (FlowBranchingIterator): New.
4981         * codegen.cs (EmitContext): Update to changes.
4982
4983         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4984         (Iterator.old_resume_points): Rename from 'resume_points'.
4985         (Iterator.MoveNextStatement): Remove unused class.
4986
4987         New infrastructure for try/finally in iterators (still unused)
4988         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4989         (FlowBranchingToplevel.AddResumePoint): Hook into
4990         ToplevelBlock.AddResumePoint.
4991         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4992         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4993         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4994         resume points and assign program-counter values.
4995         (ExceptionBlock.AddResumePoint): Collect resume points for
4996         de-muxer at the top of try block.
4997         * iterators.cs (Yield.CheckContext): Simplify.
4998         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4999
5000 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
5001
5002         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
5003         argument to an ExitStatement.
5004         (FlowBranchingException): Refactor saved origins code.
5005         * statement.cs (ExitStatement): Update to cahges.
5006         * iterator.cs (YieldBreak): Likewise.
5007
5008         * statement.cs (ResumableStatement): New.  Common base class for
5009         YieldReturn and ExceptionStatement.
5010         (ExitStatement): New.  Common base class for Return and YieldBreak.
5011         (Return): Update to changes.
5012         * iterator.cs (YieldBreak): Likewise.
5013         * lambda.cs (ContextualReturn): Likewise.
5014
5015         Fix #377028
5016         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
5017         emit a meaningful error message.
5018
5019         Fix #324765, #319508
5020         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
5021         (VariableInfo.SetAssigned): Set it.
5022         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
5023         determine if CS0219 or CS0168 is appropriate.  Don't use
5024         flow-analysis information.
5025         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
5026         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
5027         (EmitContext.EndFlowBranching): ... this.
5028
5029 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5030
5031         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
5032
5033 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5034
5035         A fix for bug #376508
5036         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
5037         ImplicitConversionExists.
5038
5039 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5040
5041         * expression.cs (Binary): Added remaining binary operators to expression
5042         tree builder.
5043
5044         * nullable.cs: Optimize shift with null argument.
5045
5046 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
5047
5048         Fix minor IL regression
5049         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
5050         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
5051         * cs-parser.jay (try_statement): Update to changes.
5052
5053         * statement.cs (TryFinally.need_exc_block): Delete.
5054         (TryFinally): Update to changes.
5055
5056         Now all ExceptionStatements are unconditional
5057         * statement.cs (CollectionForeach.DisposableWrapper): New.
5058         Extract out the try/finally code into a new wrapper.
5059         (CollectionForeach.Resolve): Use it to simplify the code.
5060
5061 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
5062
5063         Start at simplifying ExceptionStatement semantics a bit
5064         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
5065         * cs-parser.jay (try_statement): Update to changes.
5066         (opt_catch_clauses): Remove.
5067         * flowanalysis.cs: Update to changes.
5068         (FlowBranching.BranchingType.TryCatch): New.
5069         (FlowBranchingTryCatch): New.
5070
5071         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
5072         (FlowBranching.CreateBranching): Update to changes.
5073         (FlowBranchingBlock.AddSibling): Add sanity check.
5074         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
5075         Update to changes.
5076
5077         * iterators.cs (Iterator.MarkFinally): Remove.
5078         * statement.cs (ExceptionStatement): Update to changes.
5079
5080         Add support for skipping over finally blocks at runtime.  First
5081         in a series to fix #324708
5082         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
5083         (Iterator.EmitMoveNext): Initialize it.
5084         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
5085         branch over the body of the 'finally' clause.
5086
5087 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
5088
5089         Avoid lopsided use of Foo/DoFoo names
5090         * statement.cs (ExpressionStatement.EmitFinallyBody):
5091         Rename from EmitFinally.
5092         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
5093         * iterator.cs: Update to changes.
5094
5095 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5096
5097         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
5098         based on UserOperatorCall. More binary nullable operators clean up.
5099
5100 2008-04-02  Martin Baulig  <martin@ximian.com>
5101
5102         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
5103
5104 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5105
5106         * nullable.cs: Merge user and empty conversions when lifting expression
5107         trees.
5108         
5109         * expression.cs (StringConcat): Implemented expression tree representation.
5110
5111 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5112
5113         * nullable.cs: When lifting null literal and a user operator exists, no call 
5114         is made.
5115         
5116 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5117
5118         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
5119         null.
5120
5121 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5122
5123         * nullable.cs, expression.cs: Use namespace instead heavily nested
5124         monster abstract class.
5125
5126 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5127
5128         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
5129         lifting of null literal and user operators. Clean up of some temporary
5130         nullable hacks.
5131
5132 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
5133
5134         Fix #368224, test-629.cs
5135         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
5136         if it crossed an unwind-protect boundary.
5137         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
5138         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
5139         inside an unwind-protected region.
5140         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
5141         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
5142         'leave' instead of a 'br' if unwind-protected.
5143         (Iterator.EmitYieldBreak): Likewise.
5144
5145 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
5146
5147         * driver.cs: Only define versioninfo resources if no win32 resource
5148         file was specified.
5149
5150 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5151
5152         A fix for bug #372375
5153         * convert.cs: Fixed boxing of nullable types.
5154
5155 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5156
5157         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
5158         type.
5159
5160 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5161
5162         A fix for bug #374619
5163         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
5164         
5165 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5166
5167         * lambda.cs: Check return type only for invocation.
5168         
5169 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5170
5171         A fix for bug #374214
5172         * ecore.cs: Correctly report argument type mismatch.
5173
5174 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5175
5176         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
5177         and not rely on broken IsEnum.
5178
5179 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5180
5181         * nullable.cs: New file, extracted from generic.cs.
5182         
5183         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
5184
5185 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5186
5187         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
5188         predefined comparison operators and null literals.
5189         
5190         * report.cs: New warning ID.
5191         
5192 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5193
5194         A fix for bug #370577
5195         * lambda.cs: Check return type too.
5196
5197 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5198
5199         A fix for bug #372846
5200         * class.cs: Automatic properties can be declared as unsafe.
5201
5202 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5203
5204         * location.cs: Use string based concatenation.
5205         
5206         * expression.cs: LiftedBinaryOperator is gmcs only.
5207         
5208 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5209
5210         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
5211         conversions rules and expression trees.
5212
5213 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5214
5215         * delegate.cs: Use extension method source as delegate target.
5216
5217 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5218
5219         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
5220         binary operations to be purely based on binary operations and optimized
5221         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
5222         and other ET refactoring.
5223         
5224         * typemanager.cs: Fixed warning.
5225         
5226 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5227
5228         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5229         
5230         * symbolwriter.cs: Fixed.
5231
5232 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5233
5234         * anonymous.cs, driver.cs: Reset anonymous types counters.
5235
5236 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5237
5238         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5239         
5240         * class.cs: Use fullname for all type member definitions.
5241         
5242 2008-02-19  Martin Baulig  <martin@ximian.com>
5243
5244         * class.cs
5245         (IMethodData.EmitExtraSymbolInfo): New interface method.
5246         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5247         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5248         interface method here as an empty public virtual method.
5249
5250         * anonymous.cs
5251         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5252         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5253         CodeGen.SymbolWriter.SetRealMethodName().       
5254
5255 2008-02-18  Martin Baulig  <martin@ximian.com>
5256
5257         * anonymous.cs
5258         (ScopeInfo.EmitType): Override this and emit debugging
5259         information for captured variables.
5260         (RootScopeInfo.EmitType): Override this and emit symbol
5261         information for a captured `this'.
5262
5263 2008-02-15  Martin Baulig  <martin@ximian.com>
5264
5265         * iterators.cs: Emit debugging info.
5266
5267         * codegen.cs
5268         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5269         (EmitContext.OmitDebuggingInfo): New public property.
5270
5271         * statement.cs
5272         (While): Override Emit() and don't emit symbol info there; do it
5273         inside DoEmit() instead.
5274         (Block.Emit): Omit symbol information while emitting the scope
5275         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5276         block logic.
5277         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5278         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5279         .ctor to make `IsIterator' work.
5280
5281 2008-03-14  Martin Baulig  <martin@ximian.com>
5282
5283         * symbolwriter.cs: Added the new symbol writer function from the
5284         debugger's `terrania' branch; temporarily enclose them inside
5285         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5286         my vacations.
5287
5288 2008-03-14  Martin Baulig  <martin@ximian.com>
5289
5290         * symbolwriter.cs
5291         (SymbolWriter): Make this a public static class.
5292
5293         * codegen.cs
5294         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5295         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5296
5297 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5298
5299         A fix for bug #370577
5300         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5301         return type.
5302         
5303 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5304
5305         * typemanager.cs (CSharpName): Made 250 times faster.
5306
5307 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5308
5309         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5310         
5311 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5312
5313         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5314         crash when predefined field does not exist.
5315         
5316 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5317
5318         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5319         
5320 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5321
5322         * class.cs (FixedField): Don't crash when contructors are missing.
5323
5324 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5325
5326         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5327         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5328         check internal types accessibility for internal and external types.
5329         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5330
5331 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5332
5333         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5334         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5335         attribute.cs, statement: Use corect instance of predefined types (work
5336         related to #364674).
5337
5338 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5339
5340         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5341         
5342 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5343
5344         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5345         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5346         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5347         predefined types clean up, delayed predefined types members initialization
5348         (work related to #364674).
5349
5350 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5351
5352         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5353         
5354 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5355
5356         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5357         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5358         predefined types clean up (work related to #364674).
5359
5360 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5361
5362         * ecore.cs: Print an error message instead of throwing exception.
5363         
5364 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5365
5366         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5367         expression.cs, statement.cs: Unififed null literal representation.
5368
5369 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5370
5371         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5372         expression.cs: Refactored binary operators resolve phase and improved speed.
5373         The nullable code is still missing and won't work correctly, more fixes
5374         required.
5375
5376         It also fixes #323726, #324312, #324248, and many other unreported issues.
5377
5378 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5379
5380         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5381         instead of 'gmcs'.
5382
5383 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5384
5385         * ecore.cs: Clean-up and split BetterConversion.
5386         
5387 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5388
5389         Fix #363791
5390         * enum.cs (EnumMember.Value): Only access 'value' if
5391         ResolveValue says it's ok.
5392         (EnumMember.DoResolveValue): Don't set prev_member.value.
5393         (Enum.GetDefinition): Reverse arguments of Equals --
5394         EnumMember.Value can return 'null'.
5395
5396         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5397
5398 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5399
5400         * generic.cs, expression.cs: More ongoing work on expression trees.
5401         
5402 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5403
5404         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5405         handle missing matches when mutiple operators exist.
5406         
5407 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5408
5409         A fix for bug #363218
5410         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5411         initializers.
5412         
5413 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5414
5415         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5416         update. This time to deal correctly with SideEffectConstant expression used
5417         as an argument for another constant folding.
5418
5419 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5420
5421         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5422         MethodBuilder.
5423
5424 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5425
5426         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5427
5428 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5429
5430         A fix for bug #328136
5431         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5432         side is a false constant, because we still need to evaluate the right-hand
5433         side.
5434
5435         * statement.cs (If): Emit two types of boolean constants (simple constant,
5436         side-effect constant).
5437
5438 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5439
5440         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5441
5442         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5443         constants.
5444
5445 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5446
5447         A fix for bug #361457
5448         * ecore.cs (IsApplicable): Params methods have lower priority.
5449
5450         * support.cs: Return correct parameter modifier for params types.
5451
5452 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5453
5454         * generic.cs (TypeParameter): Cache attribute target name.
5455
5456         * support.cs: Removed unused variable.
5457
5458         * typemanager.cs: Removed debugging leftover.
5459
5460         * ecore.cs: Use local type instead of a property;
5461
5462         * class.cs (VerifyMembers): Consider also parent to test whether type member
5463         is local or public.
5464
5465         * expression.cs (FullMethodDesc): Removed.
5466
5467         * attribute.cs (IsValidArgumentType): Made static.
5468
5469 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5470
5471         Cleanup to be more readable.
5472         * Makefile (GMCS_PROFILE): Remove.
5473         (COMPILER_NAME): New helper.
5474
5475 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5476
5477         * cs-tokenizer.cs: if a conditional expression happens inside a
5478         (...) this also means that we do not need to de-ambiguate between
5479         an parenthesized expression and a cast.
5480
5481         Fixes 346484.
5482
5483         * constant.cs (SideEffectConstant): a constant value that happens
5484         to have a side effect.
5485
5486         Fixes the build regressions introduced by the fix for #359789
5487
5488 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5489
5490         * expression.cs (Conditional.Emit): when emitting the ternary
5491         operator, use local variables to generate code verifiable code.
5492
5493         The verifier cannot infer that the type on stack before the
5494         stloc.0 is executed is of type ParentB. This happens because the
5495         stack merge algorithm uses only parent types when deciding which
5496         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5497         335.
5498
5499         This code compiled with mcs is not verifiable under MS. The MS
5500         verifier picks the first common interface of Foo and Bar, which is
5501         wrong, but doesn't use a full join type of the 2 interfaces.
5502
5503         CSC uses a clever hack to compile such code in a verifiable
5504         way. It stores the intermediate values in a local variable with
5505         the expected type.
5506
5507         Fixes: #358102
5508
5509 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5510
5511         * expression.cs: Do not fold BitwiseAnd operators when the left
5512         side is a false constant, because we still need to evaluate the
5513         right-hand side.
5514
5515         Fixes #359789
5516
5517         * support.cs: Instead of throwing an InternalErrorException when
5518         the position of the stream is outside the boundary of our buffer,
5519         reset the state of the reader, and restart the reading from the
5520         beginning of the file.
5521
5522 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5523
5524         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5525
5526 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5527
5528         A fix for bug #361686
5529         * decl.cs: A protected types used inside a private class which parents
5530         derives from the protected class are accessible.
5531
5532 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5533
5534         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5535         the parameterless constructor.
5536
5537 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5538
5539         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5540         lookup methods to use standard member cache when doing member lookup.
5541
5542 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5543
5544         * driver.cs: Don't report full path for referenced module as assembly error.
5545
5546 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5547
5548         * Makefile: Fixed `qh' target to work on all machines.
5549
5550         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5551         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5552         and HasElementType with TypeManager implementation.
5553
5554 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5555
5556         A fix for bugs #325134, #359749
5557         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5558         first binds point to non-method member expression.
5559
5560 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5561
5562         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5563
5564 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5565
5566         A fix for bugs #321394, #323028
5567         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5568         Reworked naive IsAccessibleAs implementation to handle nested types.
5569
5570 2008-02-05  Jb Evain  <jbevain@novell.com>
5571
5572         * class.cs: use generic type comparison for parameters
5573         as well.
5574
5575 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5576
5577         A fix for bug #325372
5578         * class.cs: Use generic type comparison when testing method signatures.
5579
5580 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5581
5582         A fix for bug #357047
5583         * ecore.cs: Applied C# 3.0 changes to better conversion.
5584
5585 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5586
5587         A fix for bug #358374
5588         * cs-parser.jay: Correctly set modifiers for all constructor types.
5589
5590 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5591
5592         A fix for bug #355251
5593         * generic.cs: Added base class constraint based type inference.
5594
5595 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5596
5597         A fix for bug #357255
5598         * decl.cs: One more missing visibility check.
5599
5600 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5601
5602         * support.cs: Fixed broken return.
5603
5604 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5605
5606         * report.cs: Correctly reset warnings count after probing.
5607
5608 2008-01-25  Martin Baulig  <martin@ximian.com>
5609
5610         * namespace.cs
5611         (NamespaceEntry.SymbolFileID): Make this work again after
5612         MemberName.ToString() is gone.
5613
5614 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5615
5616         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5617         expressions.
5618
5619 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5620
5621         * generic.cs: Use full implicit conversion for type inference fixing.
5622
5623 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5624
5625         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5626         Fixed user operator conversions.
5627
5628 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5629
5630         * generic.cs: Do nullable type to null comparison optimization during
5631         resolve phase.
5632
5633 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5634
5635         A fix for bug #355163
5636         * generic.cs: Enabled l-value resolve on nullable expressions.
5637
5638 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5639
5640         A fix for bug #353986
5641         * class.cs: Ingore static ctors with parameters for any further checks.
5642
5643 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5644
5645         A fix for bug #354310
5646         * namespace.cs: Removed redundant check.
5647
5648 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5649
5650         A fix for bug #354928
5651         * expression.cs: ElementInitializers can be resolved only once.
5652
5653 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5654
5655         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5656         Condition expressions.
5657
5658 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5659
5660         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5661
5662 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5663
5664         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5665         not allowed.
5666
5667         * generic.cs: Implemented coalesce expression.
5668
5669 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5670
5671         A fix for bug #355145
5672         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5673         expression tree type inference.
5674
5675 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5676
5677         Fix #354663
5678         * expression.cs (Binary.IsUnsignedType): Fix typo.
5679
5680 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5681
5682         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5683
5684 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5685
5686         A fix for bug #355161
5687         * ecore.cs, expression.cs: Wider range of extension method supported
5688         expressions.
5689
5690 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5691
5692         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5693         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5694         bug #354970.
5695
5696 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5697
5698         A fix for bug #355148
5699         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5700
5701 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5702
5703         * expression.cs (CreateExpressionTree): Add support for or and
5704         logical or, and indent following the coding conventions.
5705
5706         * typemanager.cs (LinqExpression): renamed from
5707         ExpressionTreeManager, for a shorter name.
5708
5709         Use TypeManager.CoreLookupType to lookup types from our core
5710         assemblies and turn those into "Type" variables.
5711
5712         Consumers that previously used "Namespace" and "Type" from this
5713         class should instead use the TypeExpression which is a type that
5714         is fully resolved (without involving the regular C# resolution
5715         rules). 
5716
5717         This typically looks like this:
5718
5719         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5720         new MemberAccess (texpr, name, type_arguments, loc)
5721
5722         This avoids the problem in: #355178
5723
5724 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5725
5726         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5727         feature in parser only as we do in other cases.
5728         
5729 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5730
5731         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5732         typemanager.cs: A refactoring of params arguments to reuse existing
5733         expressions (params -> array initializer) to emit params argument instead
5734         of specialized handling.
5735         It was required by expression tree implementation and it has other benefits
5736         as well, we now apply same optimization for params arguments as we do for
5737         array initializers.
5738         
5739 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5740
5741         A fix for bug #353526
5742         * generic.cs: A type inference of params arguments may not required any
5743         temporary array creation.
5744         
5745 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5746
5747         A fix for bug #353534
5748         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5749         supported for delegates only.
5750         
5751 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5752
5753         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5754         type for more than 1 candidates.
5755         
5756 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5757
5758         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5759         expressions.
5760         
5761 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5762
5763         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5764         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5765         operator) expressions. 
5766                 
5767 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5768
5769         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5770         not accessed from the generated IL.
5771
5772 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5773
5774         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5775         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5776         statement.cs: The first expression tree implementation drop, mostly
5777         infrastructure work.
5778
5779 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5780
5781         * ecore.cs (IsNestedChild): Refactored.
5782
5783 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5784
5785         * lambda.cs: Don't use a cast on unknown expression statement.
5786
5787 2008-01-10  Geoff Norton  <gnorton@novell.com>
5788
5789         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5790         arguments
5791
5792 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5793
5794         * doc.cs: Report better /doc crash details.
5795         
5796 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5797
5798         A fix for bug #352536
5799         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5800
5801 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5802
5803         A fix for bug #352287
5804         * ecore.cs, expression.cs: Do `this' access checking in all member access
5805         expressions.
5806         
5807 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5808
5809         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5810         
5811         * report.cs: Reset message stacks.
5812         
5813 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5814
5815         * generic.cs (InferInPhases): Correctly calculate params position.
5816         
5817 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5818
5819         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5820         arguments.
5821
5822 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5823
5824         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5825         
5826         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5827         
5828         * driver.cs: Updated --help option.
5829         
5830 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5831
5832         * generic.cs (InferParamsTypeArguments): Removed.
5833         (InferInPhases): Add params type inference.
5834         (LowerBoundInference): Fixed scoring mechanism.
5835         
5836         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5837         
5838 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5839
5840         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5841         byte array for unsigned "baked" assemblies.
5842
5843 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5844
5845         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5846         array for assemblies that are not strongnamed.
5847
5848 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5849
5850         A fix for bug #351481
5851         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5852         declaring type for nested generic types.
5853         
5854 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5855
5856         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5857         instead of ToString.
5858         
5859 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5860
5861         A fix for bug #351047
5862         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5863         null and structs only when equality and inequality operators are defined
5864         either as an user-operators or predefined operators.
5865         
5866 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5867
5868         A fix for bug #351047
5869         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5870         
5871 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5872
5873         A fix for bug #351257
5874         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5875         
5876 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5877
5878         A fix for bug #351157
5879         * class.cs (Using): Fixed yet another broken cloning.
5880         
5881         (Block): Put back more sensible default value for statements.
5882         
5883 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5884
5885         * codegen.cs: Allow AssemblyVersion with only major version component.
5886         Fixes bug #351055.
5887
5888 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5889
5890         A fix for bug #324654
5891         * class.cs: Use FullName property as member name.
5892
5893 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5894
5895         A fix for bug #342117
5896         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5897         constructor constraint.
5898
5899 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5900
5901         A fix for bug #338273
5902         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5903         only.
5904
5905 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5906
5907         A fix for bug #350839
5908         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5909
5910 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5911
5912         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5913         GHOP:
5914         
5915         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5916
5917         * statement.cs: Changed some Hashtables to use HybridDictionaries
5918         instead. It was observed that some HashTables only contained a few
5919         items in the vast majority of cases. Since HybridDictionary is
5920         more efficient on small sets (<10 elements), "known_variables"
5921         from class ExplicitBlock as well as "labels" and "constants " from
5922         class Block were changed to HybridDictionaries. 
5923
5924         Atsai results: (56216kb->54987kb)
5925
5926         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5927
5928
5929 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5930
5931         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5932         GHOP:
5933         
5934         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5935         
5936         * expression.cs: foreach loop to for loop, saved on allocation of
5937         enumerator (59333kb->59141kb)
5938
5939         * statement.cs. Changed foreach loops to for loops, saved on
5940         allocation of enumerator (59141kb->59006kb)
5941
5942         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5943         when constructed with no specified capacity. This was causing a
5944         few ArrayLists to allocate more memory than they would potentially
5945         need in the Block class and MemberCache class. Setting the
5946         ArrayLists to construct with a capacity of 1 saves some
5947         memory. (56216kb->55585kb)
5948
5949 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5950
5951         A fix for bug #347189 (2nd issue)
5952         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5953         type.
5954
5955 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5956         
5957         * report.cs: Do not use colors if stdout and stderr are not a
5958         terminal.
5959
5960 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5961
5962         A fix for bug #346998
5963         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5964         overloads.
5965
5966 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5967
5968         A fix for bug #343465
5969         * class.cs: Explicit method name for nested types uses dots only.
5970
5971 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5972
5973         A fix for bug #343707
5974         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5975
5976 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5977
5978         * ecore.cs: Report type inference errors only when arguments count matches
5979         parameter count.
5980         
5981         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5982         
5983         * expression.cs, report.cs: New warning.
5984         
5985         * typemanager.cs: Catch anonymous method type too.
5986
5987 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5988
5989         A fix for bug #346379
5990         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5991
5992 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5993
5994         A fix for bug #347359
5995         * expression.cs (Invocation): Don't resolve already resolved expression.
5996
5997 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5998
5999         A fix for bug #347189
6000         * class.cs (FixedField): Use non-dependent code only in the define phase.
6001
6002 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6003
6004         A fix for bug #348076
6005         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
6006
6007 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6008
6009         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
6010         discovered extension methods.
6011
6012 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6013
6014         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
6015         method.
6016
6017 2007-12-21  Miguel de Icaza  <miguel@novell.com>
6018
6019         * report.cs (ErrorMessage): Add support for using colors on
6020         terminals that support it. 
6021
6022 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6023
6024         * ecore.cs: Use information about expanded params for error reporting.
6025
6026 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6027
6028         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
6029         and logic for params overloads.
6030         
6031 2007-12-15  Miguel de Icaza  <miguel@novell.com>
6032
6033         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
6034         as this is also created from the parser.  Fixes #349034
6035
6036 2007-12-12  Miguel de Icaza  <miguel@novell.com>
6037
6038         * statement.cs (Throw.CloneTo): it is valid to have empty
6039         expressions for throw. 
6040
6041 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6042
6043         * cs-parser.jay: Set delegate constraint parsing region correctly.
6044
6045 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6046
6047         A fix for bug #345467
6048         * typemanager.cs (IsEqual): Compare generic parameters position only.
6049         
6050 2007-11-28  Marek Safar  <marek.safar@gmail.com>
6051
6052         * expression.cs (BaseAccess): Type arguments can be null.
6053
6054 2007-11-27  Raja R Harinath  <harinath@gmail.com>
6055
6056         * statement.cs (Block.Resolve): Ensure flow-branching tree is
6057         consistent even when an error has occured.
6058         (Switch.Resolve): Likewise.
6059
6060 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6061
6062         A fix for bug #334505
6063         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
6064         overrides.
6065         
6066 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6067
6068         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
6069         refactorings required to resolve extension methods correctly when mixing
6070         generics and non-generics members.
6071         
6072 2007-11-20  Marek Safar  <marek.safar@gmail.com>
6073
6074         A fix for bug #342584
6075         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
6076         conversion.
6077         
6078 2007-11-19  Marek Safar  <marek.safar@gmail.com>
6079
6080         A fix for bug #342512
6081         * delegate.cs: Use delegate argument expression when is available. Don't
6082         emit virtual call when class is sealed.
6083         
6084 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6085
6086         A fix for bug #325423
6087         * assign.cs (FieldInitializer): Use resolved expression for emit.
6088         
6089         * class.cs: Print less confusing error message.
6090         
6091 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6092
6093         * cs-tokenizer.cs: Removed GMCS ifdefs.
6094         
6095         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
6096         mcs.
6097         
6098         * cs-parser.jay: Disabled nullable check.
6099         
6100         * generic-mcs: Copied more generic stuff.
6101                 
6102 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6103
6104         * gcs-parser.jay: Merged to cs-parser.jay.
6105         
6106         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
6107         * *.csproj, *.sources: Updated to use only jay parser file.
6108
6109 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6110
6111         * gcs-parser.jay: Added nullable and default expression feature checks.
6112         
6113 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6114
6115         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
6116         it fixes many TODOs and hidden bugs.
6117         
6118         * expression: Removed duplicate error check.
6119
6120 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6121
6122         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
6123         implicitly type local variable only when it is used in a declaration.
6124
6125 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6126
6127         * attribute.cs: Use CS0612 for empty strings.
6128
6129 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6130
6131         * lambda.cs, statement.cs: Contextual return may act as a statement.
6132
6133 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6134
6135         A fix for a regression cause by #324222
6136         * class.cs: Don't report unused even when it implements an interface.
6137         
6138 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6139
6140         A fix for bug #341205
6141         * ecore.cs, expression.cs: Method group expression cannot do static
6142         method access with an instance reference check before overloading takes
6143         a place.
6144         
6145 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6146
6147         A fix for bug #325359
6148         * class.cs: Use predictable name for automatically generated property.
6149         
6150 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6151
6152         A fix for bug #324996
6153         * expression.cs (Is): Handle case where D is nullable and T is not
6154         correctly.
6155         
6156         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
6157         
6158 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6159
6160         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
6161         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
6162         Flush small error reporting changes.
6163         
6164 2007-11-09  Marek Safar  <marek.safar@gmail.com>
6165
6166         A fix for bug #324996
6167         * expression.cs: Rewrote Is expression implementation to work with
6168         generics, nullable types, anonymous method. A const result expression 
6169         uses existing infrastructure instead of custom not fully-featured one.
6170         
6171 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6172
6173         A fix for bug #340202
6174         * class.cs: Consider generics for volatile field.
6175
6176 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6177
6178         A fix for bug #335594
6179         * expression.cs: Use conversion rules when handling string addition.
6180         
6181 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6182
6183         A fix for bug #336651
6184         * expression.cs: Fixed a crash when probing is on.
6185         
6186 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6187
6188         A fix for bug #324242
6189         * covert.cs: Added a conversion from any nullable-type with an 
6190         underlying enum-type to the type System.Enum.
6191         
6192 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6193
6194         A fix for bug #324222
6195         * class.cs: Report all non-used event fields.
6196         
6197 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6198
6199         A fix for bug #325161
6200         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
6201         qualifier for generic types.
6202         
6203 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6204
6205         A fix for bug #322971
6206         * expression.cs, ecore.cs: Added intermediate result value check for
6207         indexers. 
6208         
6209 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6210
6211         A fix for bug #324754
6212         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
6213         when it was requested.
6214
6215 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6216
6217         A fix for bug #325101
6218         * expression.cs: Do type not value comparison for `is' expression.
6219
6220 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6221
6222         A fix for bug #320236
6223         * convert.cs: Don't apply user conversion on underlying target type.
6224
6225 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6226
6227         * expression.cs: Don't use unresolved expression for error reporting.
6228  
6229 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6230
6231         A fix for bugs #337712, #324490
6232         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6233         overloading resolution too.
6234         
6235         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6236         the process consistent and more robust.
6237         
6238         * expression.cs, linq.cs, report.cs: Update.
6239
6240 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6241
6242         A fix for bug #332909
6243         * attribute.cs: Resolve attributes in correct context using error
6244         handling procedure.
6245         
6246         * rootcontext.cs: Define Obsolete attribute members as core members.
6247         
6248 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6249
6250         * statement.cs: Removed unused methods.
6251         
6252 2007-10-31  Wade Berrier  <wberrier@novell.com>
6253
6254         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6255         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6256         during 'make dist')
6257
6258 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6259
6260         A fix for bug #338102
6261         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6262         methods registered as non-generics.
6263         
6264 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6265
6266         A fix for bugs #337712, #324490
6267         * delegate.cs: Delegate covariance and contravariance is not allowed for
6268         value types.
6269         
6270 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6271
6272         A fix for bug #337719 
6273         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6274         `from' keyword.
6275         
6276 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6277  
6278         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6279
6280 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6281  
6282         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6283         query expressions.
6284
6285 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6286
6287         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6288
6289 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6290  
6291         A fix for bug #334652
6292         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6293         extension methods when we have not found the best candidate in normal
6294         container.
6295
6296 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6297
6298         * AssemblyInfo.cs: Keep up-to-date.
6299
6300 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6301
6302         * Makefile: Fixed generics compiler name.
6303         
6304 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6305
6306         * lambda.test: removed, lambda parsing is done differently.
6307         
6308         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6309
6310 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6311
6312         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6313
6314 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6315
6316         * Makefile, *.sources : All C# compilers are in mcs folder.
6317         
6318         * *.cs: Use existing 2_1 define for smcs.
6319
6320 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6321
6322         A fix for bug #335847
6323         * assign.cs, expression.cs: Couple of changes to avoid creating a
6324         temporary variable for each object initializer assignment statement. It
6325         simplifies struct initialization too, otherwise two temporary variables
6326         would be required.
6327         Implemented optimization of redundant default element initializers.
6328         
6329 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6330
6331         A fix for bug #336766
6332         * expression.cs (Class.CheckBase): Use generic name when method is
6333         generic.
6334         
6335 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6336
6337         A fix for bug #334737
6338         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6339         variable and not variable argument for prepared copies.
6340
6341 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6342
6343         A fix for bug #325110
6344         * class.cs, expression.cs, attribute.cs: Use open generic method when
6345         checking conditional attribute.
6346         
6347 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6348
6349         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6350         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6351         FeatureIsNotAvailable.
6352
6353 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6354
6355         ** C# 3.0 Partial methods
6356         
6357         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6358         methods support. Because of member cache issue with generics only
6359         non-generics partial methods are fully supported.
6360         
6361 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6362         
6363         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6364         generics and to use member cache for member checking. It also improves
6365         performance and fixes remaining overloads issues.
6366         
6367 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6368         
6369         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6370         roottypes.cs, typemanager.cs:
6371                 
6372         A member cache creation logic changed to add members immediately and
6373         not rely on fallback. The member cache is now only prefered way
6374         how to access and find type declaration members. It saves 5 MB of memory
6375         during MWF compilation and makes code ready for more optimizations and
6376         clean-ups, it's also a pre-requirement for partial methods.
6377         
6378 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6379
6380         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6381         handling for generic parameters.
6382
6383 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6384         
6385         * class.cs (FixedField): Removed redundant volatile check.
6386         
6387 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6388         
6389         * class.cs, decl.cs: Fixed overload members verification to do only one
6390         check per possible collision.
6391         
6392 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6393         
6394         A fix for bug #325478
6395         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6396         and create only one disposable flags container.
6397         
6398 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6399         
6400         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6401         * statement.cs (Fixed): Fixed variables cloning.
6402         
6403 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6404         
6405         A fix for bug #333342
6406         * class.cs (EventField): Don't mark value type event as synchronized. 
6407         
6408 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6409         
6410         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6411         inference to identify best candidate method correctly.
6412         (ProperyExpr): A range variable is read only and cannot be modified.
6413         
6414 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6415         
6416         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6417         logic to identify best candidate method correctly.
6418         
6419 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6420         
6421         * location.cs (Equals, GetHashCode): Removed.
6422         
6423 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6424         
6425         * report.cs: Implemented message recorder. It is used mainly for lambda
6426         expressions to capture otherwise swallowed error messages.
6427         
6428         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6429
6430         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6431         and not at the top.
6432         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6433                 
6434         * expression.cs (MemberAccess): Always report lookup failure.
6435         
6436         * location.cs: Implemented Equals, GetHashCode.
6437         
6438         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6439         
6440 2007-10-10  Jb Evain  <jbevain@novell.com>
6441
6442         * codegen.cs: re-enable assembly version check.
6443
6444 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6445         
6446         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6447         checks.
6448         
6449         * namespace.cs (UsingAlias): Do correct version check.
6450         
6451 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6452         
6453         * expresison.cs, ecore.cs: Issue extension method error message when
6454         appropriate.
6455         
6456         * rootcontext.cs: Added ISO_2 compiler mode option.
6457
6458 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6459         
6460         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6461          message.
6462         
6463 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6464         
6465         * attribute.cs (GetString, GetBoolean): Work with both literal and
6466         constant.
6467         
6468         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6469         Moved method overload specific methods to MethodGroupExpr.
6470         
6471         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6472         it should be less memory consuming.
6473         
6474 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6475
6476         * codegen.cs: remove the assembly version check until the buildbot is
6477         fixed.
6478
6479 2007-10-07  Jb Evain  <jbevain@novell.com>
6480
6481         * attribute.cs (Attribute.GetString): if the value
6482         expression is a StringConstant, return its string value.
6483
6484 2007-10-07  Jb Evain  <jbevain@novell.com>
6485
6486         * typemanager.cs: add `assembly_version_attribute_type`.
6487         * codegen.cs: on attribute emission, check that the
6488         AssemblyVersionAttribute doesn't overflow.
6489
6490 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6491         
6492         A fix for bug #324677
6493         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6494         parent container of a scope container with currently resolved one. 
6495         
6496 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6497         
6498         A fix for bug #325534
6499         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6500         only.
6501         
6502 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6503         
6504         A fix for bug #327504
6505         * class.cs (Operator.Define): Refactored implicit and explicit user
6506         operator conversion rules.
6507         
6508 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6509         
6510         A fix for bug #327520
6511         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6512         
6513 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6514         
6515         A fix for bug #328022
6516         * class.cs (MethodData.Define): Use correct method to check whether
6517         a method implementents an accessor.
6518         
6519 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6520         
6521         A fix for bug #330069
6522         * statement.cs (Fixed.Resolve): Read the first array element only when
6523         an array is instantiated. 
6524         
6525 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6526         
6527         * expression.cs, assign.cs, generics.cs: Print correct operator when
6528         compound assignment is used.
6529         
6530 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6531         
6532         A fix for bug #325841
6533         * expression.cs (ArrayAccess): Use full argument cloning only for
6534         string compound concatenation.
6535         
6536 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6537         
6538         A fix for bug #328774
6539         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6540         assignment.
6541         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6542         assignment.
6543
6544 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6545
6546         Fix #328490
6547         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6548         Event accessibility checks here.  Remove some bogus code that
6549         accidently made GenericMethods work.
6550         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6551
6552 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6553         
6554         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6555         
6556         * statement.cs (Block): Refactored AddVariable to allow error handling
6557         customization.
6558         
6559         * generic.cs: New stub.
6560         
6561 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6562         
6563         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6564         flag.
6565         
6566 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6567
6568         * class.cs: Use partial container to record whether any partial part
6569         contains static field initializer and therefore default contructor has
6570         to be defined.
6571         
6572 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6573
6574         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6575         mono-list when only one of two partial parts has defined accessibility
6576         modifier.
6577         
6578 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6579
6580         A fix for bug #82845
6581         
6582         * class.cs (TypeContainer): Set correct resolve context for all field
6583         initializers.
6584         
6585 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6586
6587         * assign.cs: Fixed a crash when field is resolved twice with an error.
6588         
6589         * codegen.cs: Changed InFieldInitializer to be flag.
6590         
6591         * anonymous.cs, ecore.cs, expression.cs: Update after
6592         IsInFieldInitializer rename.
6593         
6594         * const.cs: Removed unused parameter.
6595         
6596         * class.cs: Changed the way how we resolve and emit field initializers.
6597         The field initilizers have to have access to contructor block to emit
6598         compiler generated code.
6599
6600 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6601
6602         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6603         generics use TypeContainer instead.
6604         
6605 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6606         
6607         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6608
6609         * lambda.cs (ResolveParameters): Use more powerful
6610         InflateGenericArgument.
6611         
6612         * parameters.cs: Better exception message.
6613                 
6614 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6615
6616         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6617         correct expression block type. 
6618         
6619         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6620         
6621         * expression.cs (Invocation): Extracted method group resolve to
6622         DoResolveOverload.
6623         
6624 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6625
6626         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6627         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6628         
6629         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6630         generic extension methods.
6631
6632 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6633
6634         A fix for bug #82676 (Do I get it right now?)
6635         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6636         object before a standard conversion is applied.
6637         
6638 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6639
6640         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6641         #82676.
6642         
6643 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6644
6645         A fix for bug #82676
6646         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6647         non-generic interface types.
6648         
6649 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6650
6651         A fix for bug #82690
6652         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6653         
6654 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6655
6656         A fix for bug #82571
6657         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6658         modifier for container based methods.
6659         
6660 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6661
6662         A fix for bug #82676
6663         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6664         any interface-type T means to any of interface type T.
6665
6666 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6667
6668         * namespace.cs: We have 2 versions of System.Core assembly.
6669
6670 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6671
6672         A fix for bug #82652
6673         * class.cs (Class.GetClassBases): Compare types and not expressions.
6674
6675 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6676
6677         A fix for bug #82620
6678         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6679         actually never worked before.
6680         (IndexerAccess): Emit prepared arguments before they are modified.
6681         
6682 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6683
6684         A fix for bug #82563
6685         * assign.cs: Revert wrong fix.
6686         
6687         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6688         correctly.
6689         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6690         Instead of ldelema/stdind we have to use temporary variables to handle
6691         cases like String.Concat (params string[]).
6692         
6693 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6694
6695         * class.cs: EmitAttributes to Emit rename.
6696         
6697         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6698         null.
6699         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6700         GetClsCompliantAttributeValue execution.
6701         
6702 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6703
6704         * anonymous.cs: Use shorter type prefix.
6705         
6706         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6707         when exist.
6708         
6709         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6710         variables when probing is on.
6711         
6712         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6713         unresolved variables.
6714         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6715         handle transparent identifiers.
6716         
6717 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6718
6719         * attribute.cs (IsClsCompliant): Add nullable types test.
6720         
6721 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6722
6723         * doc.cs : catch other types of exception than XmlException to
6724           report CS1570. Fixed bug #82565.
6725
6726 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6727
6728         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6729         The number of delegate parameters has to match.
6730         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6731         arrays.
6732
6733 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6734
6735         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6736         to fix problem with private arguments.
6737
6738 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6739
6740         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6741         
6742         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6743         
6744         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6745         empty. Add cloning suport.
6746         
6747         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6748
6749 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6750
6751         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6752         to create EmptyCast. It handles EmptyConstantCast specialization for
6753         constants.
6754         
6755 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6756
6757         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6758         (EmitArrayArgument): One routine for array arguments.
6759         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6760         
6761 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6762
6763         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6764
6765 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6766
6767         * anonymous.cs: MemberLookupFinal update.
6768
6769         * class.cs (ConstructorInitializer): Is expression based.
6770         
6771         * delegate.cs: MethodGroupExpr update.
6772         
6773         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6774         messages.
6775         (Error_MemberLookupFailed): Customizable error override.
6776         (MethodGroupExpr): Keep queried type for later usage.
6777         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6778         resolve.
6779         
6780         * expression.cs: Error_MemberLookupFailed refactoring.
6781         (New.DoResolve): Resolve as much as possible.
6782         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6783         customization for invalid member types.
6784
6785         * statement.cs: MethodGroupExpr update.
6786         
6787 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6788
6789         * modifier.cs (Check): Check all modifiers and not only accessibility
6790         ones.
6791
6792 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6793
6794         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6795         type and not an expression.
6796
6797 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6798
6799         * statement.cs (Catch.Clone): Type and variable can be null.
6800
6801 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6802
6803         A fix for bug #81979
6804         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6805         I am really not sure whether this is the best fix.
6806         
6807         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6808         only once.
6809         
6810 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6811
6812         ** C# 3.0 Object and collection initializers (major re-write)
6813         
6814         * assign.cs (DoResolve): Initializers are not assign related.
6815         
6816         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6817         used during collection or object initialization.
6818         
6819         * expression.cs (Error_InvalidArguments): Add initializers specific
6820         messages. More will come later because it requires some general
6821         refactoring.
6822         (New.DoResolve): Better error handling for unsafe types.
6823         (EmptyExpressionStatement): New class.
6824         (ElementInitializer): An object initializer expression.
6825         (CollectionElementInitializer): A collection initializer expression.
6826         (CollectionOrObjectInitializers): A block of object or collection
6827         initializers.
6828         (NewInitialize): New expression with element/object initializers.
6829         
6830         * statement.cs: Reverted object/collection initializer hacks.
6831         
6832         * typemanager.cs (CSharpName): Filter __arglist type.
6833         
6834 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6835
6836         ** C# 3.0 Anonymous Types (update to the latest standard)
6837         
6838         * expression.cs (Binary.ResolveOperator): Threat all null based types
6839         same.
6840         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6841         (AnonymousTypeParameter): Updated.
6842         
6843         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6844         (AnonymousTypeClass): New anonymous type container.
6845         
6846         * class.cs (AddField): Return operation result.
6847         
6848         * generic.cs: Another empty TypeArguments overload.
6849         
6850         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6851         are stored at top of normal hierarchy.
6852         
6853         * typemanager.cs (CSharpName): Filter anonymous types.
6854         
6855 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6856
6857         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6858         as single Concat call. How could we miss that :-(
6859         
6860 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6861
6862         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6863         
6864 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6865
6866         * expression.cs: Fix the previous commit, the creation of the
6867         arguments array list needs also to be conditional on the arguments
6868         not being null.
6869
6870         * class.cs: Add a little bit of help to help narrow down problems.
6871
6872         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6873         not try to copy in that case. 
6874
6875         * driver.cs: When building SMCS, include a new different set of
6876         default assemblies here.   Do this here so we can control whether
6877         to include the default assemblies with /noconfig.
6878
6879 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6880
6881         A fix for bug #81979
6882         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6883         only.
6884
6885 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6886
6887         A fix for bug #82300
6888
6889         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6890         we are in probing scope.
6891
6892 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6893
6894         A fix for bug #82301
6895
6896         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6897         (Statement.CloneTo): Clone and not map children blocks.
6898
6899 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6900
6901         A fix for bug #82299
6902
6903         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6904         variable too.
6905         
6906         * statement.cs (Statement.CloneTo): Clone variables before statements
6907         to allow remaping of local variables.
6908
6909 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6910
6911         A fix for bug #82296
6912
6913         * anonymous.cs,
6914         * report.cs: Log crash details for future clone problems.
6915         
6916         * statement.cs (Return.Clone): Don't clone non-existent expression.
6917
6918 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6919
6920         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6921         (Class.AddBasesForPart): Move CS0537 check here from ...
6922         * cs-parser.jay (class_declaration): ... here.  Move calling of
6923         'AddBasesForPart' to ...
6924         (class_bases): ... here.
6925         (struct_declaration, interface_declaration): Update to changes.
6926
6927 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6928
6929         A fix for bug #81923
6930
6931         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6932         conversion is allowed.
6933
6934 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6935
6936         A fix for bug #81564
6937
6938         * ecore.cs (EventExpr): Add IsBase handling.
6939
6940         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6941         too.    
6942         
6943 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6944
6945         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6946         * cs-parser.jay: Some whitespace cleanups.
6947         (current_delegate): New.
6948         (type_name): New.
6949         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6950         a dummy code block, and use 'type_name' instead of 'member_name'.
6951         (interface_declaration, class_declaration): Likewise.
6952         (delegate_declaration): Likewise.  Rearrange slightly and use
6953         'current_delegate'.
6954         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6955         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6956
6957 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6958
6959         A fix for bug #82039
6960
6961         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6962         available.
6963
6964         * typemanager.cs (CSharpName): Split to string overload.
6965
6966 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6967
6968         * expression.cs,
6969         * report.cs: Updated warning CS0472.
6970
6971 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6972
6973         A fix for bug #82181
6974         * cs-parser.jay,
6975         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6976
6977 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6978
6979         A fix for bug #82277
6980         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6981
6982 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6983
6984         ** C# 3.0 Type Inference (major bits are working)
6985         
6986         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6987         (.ImplicitStandardConversionExists): Uses compatible.
6988         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6989         (.InferReturnType): New method.
6990         (.Compatible): Refactored.
6991         (.ResolveParameters): Uses factory to create resolved parameters.
6992         (.CompatibleMethod): Add probing mode support.
6993         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6994         clearly distinguish between 2 different operations.
6995         (LambdaMethod): Moved to lambda.cs.
6996         (AnonymousMethod): Removed unused fields and methods.
6997         (AnonymousDelegate): Simplified.
6998         
6999         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
7000         
7001         * convert. cs (ImplicitConversionStandard): Compatible works differently.
7002         
7003         * delegate.cs (Delegate): New mehods to reduce code duplication.
7004         (.GetConstructor): New method.
7005         (.GetInvokeMethod): New method.
7006         (DelegateCreation): Updated.
7007         
7008         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
7009         does not exist.
7010         (OverloadResolve): Made probing little bit faster.
7011         
7012         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
7013         when probing is on.
7014         
7015         * generic.cs (TypeInferenceContext): Dummy implementation.
7016         
7017         * iterators.cs: Updated after Resolve/Define rename.
7018         
7019         * lambda.cs (LambdaExpression)
7020         (.ResolveParameters): Handles both type of arguments and type inference too.
7021         
7022         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
7023         (InflateTypes): Updated.
7024         
7025         * support.cs (InflateTypes): Changed signature and updated.
7026         
7027         * typemanager.cs (LookupMemberCache): Better dynamic type check.
7028         (MemberLookup_FindMembers): More MS tricks.
7029         (GetParameterData): Ditto.
7030         (GetDelegateParameters): Uses quick path for dynamic types.
7031         
7032 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7033
7034         * class.cs (MethodData.Define): EmitContext is required for generic stuff
7035         only.
7036
7037 2007-07-31  Marek Safar  <marek.safar@gmail.com>
7038
7039         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
7040         syntax.
7041         
7042 2007-07-26  Jb Evain  <jbevain@novell.com>
7043
7044         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
7045         which takes a boolean 'report_errors', similar to the GetMethod.
7046         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
7047         in .net 2.1, do not report errors here.
7048
7049         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
7050         System.Runtime.CompilerServices.RequiredAttributeAttribute and
7051         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
7052         in .net 2.1.
7053
7054         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
7055         of the type InternalsVisibleToAttribute before the first call
7056         to CoreLookupType which is allowed to fail (third boolean parameter
7057         to true). Because, during the resolution for a type that is not
7058         immediately found, we try to check if the type is not defined in
7059         a friend assembly, and to do so, we need the
7060         InternalVisibleToAttribute.
7061
7062 2007-07-23  Miguel de Icaza  <miguel@novell.com>
7063
7064         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
7065         feature that allows structs to be compared against null and inline
7066         the result as true or false.
7067
7068         Notice that the same code is not permitted inside a generic block
7069         of code that would do:
7070
7071         class Foo<T> where T : struct {
7072             bool Eval (T x)
7073             {
7074                  return x == null;
7075             }
7076         }
7077
7078         It is only allowed if the type of T is not bound (no where
7079         clause).   In my opinion, this CSC 2 behavior is broken but people
7080         seem to be using it (IronRuby does, a few bug reports on bugzilla
7081         have it and some people have complained about it).
7082
7083         All of the users that depend on this behavior have code that is
7084         very likely broken. 
7085         
7086         * report.cs (Warning, Error): make these take object arguments,
7087         not strings, as that allows us to take advantage of Format.
7088
7089 2007-07-20  William Holmes  <billholmes54@gmail.com>
7090
7091         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
7092           Left member variable for the Count.
7093         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
7094           MemberName.CountTypeArguments to avoid a NRE. 
7095
7096         This code is contributed under the MIT X11 license
7097
7098 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7099
7100         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
7101
7102 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7103
7104         * doc.cs : generic method arguments are written as ``x while generic
7105           type arguments are `x. Combined with the previous change, fixed bug
7106           #79706.
7107
7108 2007-07-18  Raja R Harinath  <rharinath@novell.com>
7109
7110         Fix #82120
7111         * expression.cs (Binary.ResolveOperator): When converting
7112         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
7113
7114 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7115
7116         * doc.cs : when T: or whatever x: is specified, it does not really
7117           check the doc comment's syntax correctness. Fixed bug #82006.
7118
7119 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7120
7121         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
7122         LambdaExpression better.
7123         
7124         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
7125         
7126         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
7127         
7128         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
7129         as it can be generated.
7130         
7131         * expression.cs (Invocation.Error_InvalidArguments): Show correct
7132         modifiers.
7133         
7134         * lambda.cs (LambdaExpression): Refactored to share same code with
7135         AnonymousMethodExpression.
7136         
7137 2007-07-17  Marek Safar  <marek.safar@gmail.com>
7138
7139         * anonymous.cs (MakeName): Include host name for easier debugging.
7140         (LambdaMethod): New class for lambda spcecific stuff.
7141         
7142         * attribute.cs: Set EmitContext return type.
7143
7144         * class.cs: Set EmitContext return type.
7145         
7146         * codegen.cs (EmitContext): Return type cannot be null to stop messing
7147         with null/void meaning.
7148         
7149         * iterators.cs (ContainerType): Implemented.
7150         
7151         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
7152         
7153         * statement.cs (Return): Updated to lambda expressions.
7154         (Block.CloneTo): Parent can be null.
7155                 
7156 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7157
7158         A fix for bug #81917
7159         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
7160         
7161         * class.cs (FixedField): Check whether field is in unsafe scope.
7162
7163         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
7164         (FieldExpr.Emit): Fixed buffers cannot be volatile.
7165
7166         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
7167         FieldExpr.
7168         
7169         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
7170                 
7171 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7172
7173         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
7174         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
7175         from Report class.
7176
7177 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7178
7179         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
7180         
7181 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7182
7183         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
7184         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
7185         
7186         * codegen.cs(EmitContext): Add ProbingMode flag.
7187         
7188         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
7189         
7190         * driver.cs: For now set both warning values.
7191         
7192         * ecore.cs (SimpleName): Name is readonly.
7193         (MethodGroup.OverloadResolve): One quick path for probing.
7194         
7195         * expression.cs (Unary): Set Oper r/o.
7196         (Binary): Set Oper r/o.
7197         (ParameterReference): Set few instance variables as r/o.
7198         (ParameterReference.DoResolveBase): Don't capture aruments when 
7199         the probing is on.
7200         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
7201         (Arglist): arguments are private.
7202         (SizeOf): type is private and r/o.
7203         (MemberAccess): arguments are private.
7204
7205         * report.cs: Enhanced reporting on/off capabilities.
7206         
7207         * lambda.cs: Uses ec.IsInProbingMode.
7208         (ContextualReturn): Derives from return.
7209         
7210         * rootcontext.cs: For now set both warning values.
7211         
7212         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
7213         copy if one exists.
7214         (Return.Resolve): Don't die immediately.
7215         (Block.Resolve): Speed-up probing.
7216         (Block.CloneTo): Clone only child blocks.
7217
7218 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
7219
7220         * iterators.cs: reverted Miguel's latest change (r81925) as it
7221         breaks the build in System.
7222
7223 2007-07-13  Miguel de Icaza  <miguel@novell.com>
7224
7225         * iterators.cs (Yield.CheckContext): Check for the iterator type
7226         also here as we can call into Yield even in codepaths that are not
7227         directly checked by
7228         (MethodOrOperator is the only path that was checked).
7229
7230         In addition to the standard check, use a more specific check for
7231         constructors to report a more verbose error. 
7232
7233 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7234
7235         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7236         report the warning and continue 
7237
7238         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7239         values on the stack on the call to Emit.   Use EmitStatement if
7240         possible, or using Emit + Pop if not possible.   Fixes #82064
7241
7242 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7243
7244         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7245         avoid try...finally in some cases.
7246
7247 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7248
7249         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7250         
7251         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7252         instead of method. Re-use standard error handling.
7253         (ConstructorInitializer.Emit): Simplified.
7254         
7255         * delegate.cs: Updated after Invocation.EmitCall change.
7256         
7257         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7258         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7259         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7260         method and don't permanently changing input arguments.
7261         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7262         is resolved it has one of the candidates is the best one which is later
7263         used to emit. Removed a few unused method.
7264         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7265
7266         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7267         (Binary.ResolveOperator): Ditto.
7268         (ConditionalLogicalOperator.DoResolve): Ditto.
7269         (Invocation): Uses method group.
7270         (Invocation.DoResolve): Simplified.
7271         (Invocation.EmitCall): Removed useless is_static.
7272         (Invocation.Emit): Delegate to method group.
7273         (Invocation.EmitStatement): Simplified.
7274         (New): Uses method group.
7275         (MemberAccess.DoResolve): Don't destroy original expression.
7276         
7277         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7278         
7279 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7280
7281         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7282         
7283         * anonymous.cs,
7284         * lambda.cs: Add custom error message type.
7285
7286 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7287
7288         * lambda.cs: Simplified little bit.
7289         
7290         * parameter.cs: Introduced ImplicitLambdaParameter.
7291         (Parameters.CreateFullyResolved): New factory instead of ctor.
7292         
7293         * anonymous.cs,
7294         * class.cs,
7295         * delegate.cs: Updated parameter creation.
7296         
7297 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7298
7299         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7300         arguments.
7301         
7302         * generic.cs: Synchronized with gmcs.
7303         
7304 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7305
7306         * class.cs (Indexer): Check return type as soon as possible.
7307         
7308         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7309         members too.
7310         
7311         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7312         
7313         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7314         
7315         * parameter.cs (Parameter): Use expression type when it is available.
7316         
7317         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7318         method modifier for the first parameter only.
7319
7320 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7321
7322         A fix for bug #81938
7323         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7324         
7325         * constant.cs: Tide up an exception message.
7326
7327 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7328
7329         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7330         an uninitialized variable is used.
7331         
7332         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7333
7334 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7335
7336         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7337         not found error handling.
7338
7339         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7340         simplified.
7341         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7342         (ArrayCreation.DoResolve): Simplified.
7343         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7344         its own resolve process.
7345         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7346
7347 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7348
7349         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7350         more error details.
7351         
7352 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7353
7354         * cs-tokenizer.cs: Removed var related stuff.
7355         
7356         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7357         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7358         a type and a keyword at same time.
7359         
7360         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7361         matches to "var".
7362         
7363         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7364         implicitly typed arrays, more changes will follow.
7365         
7366         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7367         
7368 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7369
7370         * ecore.cs (VarExpr): Removed Handled field.
7371         
7372         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7373         build-in assign functionality.
7374         (ForEach.Resolve): Removed all implicitly typed local variable code and
7375         simplified.
7376         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7377         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7378
7379 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7380
7381         * assign.cs: Removed implicitly typed local variable check.
7382         
7383         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7384         referencing implicitly typed local variable.
7385         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7386         variable here.
7387         
7388         * statement.cs (Fixed): Removed unsupported implicitly typed local
7389         variable code.
7390
7391 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7392
7393         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7394
7395 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7396
7397         A fix for bugs #81855 and #76274
7398         * attribute.cs (AttachTo): Always set owner for global attributes to
7399         prefined owner.
7400         
7401         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7402         usefull too.
7403         
7404         * cs-parser.jay: Assembly and module attributes must precede all other
7405         elements except using clauses and extern alias declarations.
7406
7407 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7408
7409         A fix for bug #81748
7410         * cs-tokenizer.cs,
7411         * expression.cs: More checks for non ISO-1 features.
7412
7413 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7414
7415         A fix for bug #81807
7416         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7417         present inside switch statement and it is required by nullable check.
7418
7419 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7420
7421         A fix for bug #81840
7422         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7423         when type matching fails.
7424         
7425         * namespace.cs: Tiny error message change.
7426
7427 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7428
7429         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7430         reporting. Added automatic property check.
7431         
7432         * class.cs: Updated after CheckAbstractAndExtern relocation.
7433         (AEventPropertyAccessor.GetSignatureForError): Customized.
7434         
7435 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7436
7437         * class.cs (DefineBaseTypes): Base type can be undefined.
7438         
7439         * ecore.cs (TypeLookup): Minor refactoring.
7440         (DoResolveAsTypeStep): Removed redundant check.
7441
7442         * namespace.cs (Lookup): Removed redundant check.
7443                 
7444         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7445         ResolveAsTypeTerminal step.
7446         (BootstrapCorlib_*): Simplified.
7447         (PopulateCoreType): Core types can be now external.
7448
7449 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7450
7451         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7452          verification only.
7453          (InferTypeArguments): Infers anonymous expression type arguments.
7454          (Compatible): Split to Compatible and InferTypeArguments. 
7455         
7456         * lambda.cs: Updated.
7457
7458 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7459
7460         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7461
7462 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7463
7464         Fix #80477, cs0135-2.cs, cs0135-3.cs
7465         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7466         names to the "known" variables list.
7467         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7468         parameter names are also "known".
7469         (Block.CheckError136): Remove.
7470         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7471         null.
7472
7473 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7474
7475         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7476
7477 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7478
7479         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7480         internal error not an user error.
7481          
7482         * expression.cs (IsApplicable): Refactored to make debugging easier.
7483
7484         * support.cs: More tricks for non-mono runtimes.
7485         
7486         * typemanager.cs (CoreLookupType): Made public.
7487         (InitSystemCore): All linq specific stuff moved to linq.cs
7488
7489 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7490
7491         * typemanager.cs (CSharpSignature): One more missing build-in types
7492         replacement.
7493         More tricks for non-mono runtime.
7494
7495 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7496
7497         * statement.cs (Block.CheckError136_InParents): Remove.
7498         (Block.AddVariable): Use GetParameterInfo instead.
7499         (ToplevelBlock.ProcessArguments): Likewise.
7500
7501 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7502
7503         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7504         information too.
7505         (ToplevelBlock.GetParameterInfo): Split out of ...
7506         (ToplevelBlock.GetParameterRefernce): ... this.
7507         (ToplevelBlock.ParameterMap): Remove.
7508         * expression.cs (ParameterReference): Update to use
7509         ToplevelParameterInfo.
7510
7511         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7512         regression.
7513
7514         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7515         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7516
7517         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7518         (ToplevelBlock.ProcessParameters) ... here.
7519         (ToplevelBlock..ctor): Invoke it.
7520
7521         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7522         new parameters.
7523
7524         * statement.cs (IKnownVariable): New interface.
7525         (LocalInfo): Implement it.
7526         (ToplevelParameterInfo): New class.
7527         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7528         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7529         GetKnownVariableInfo.
7530
7531 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7532
7533         Partly speed up CS0136 error checks.
7534         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7535         'recurse' parameter.
7536         (Block.DoCheckError136): Only check errors in parameters.  Move
7537         local variable checks ...
7538         (Block.AddVariable): ... here, and ...
7539         (ToplevelBlock.ResolveMeta): ... here.
7540
7541 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7542
7543         * statement.cs (Block.IsChildOf): Remove.
7544
7545         * statement.cs (Statement.Clone): Move special case code ...
7546         (Block.CloneTo): ... here.
7547
7548 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7549
7550         * statement.cs (ToplevelBlock.container): Remove field.  It's
7551         redundant with 'Parent'.
7552         (ToplevelBlock.ContainerBlock): Remove accessor.
7553         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7554         child with parent here, ...
7555         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7556         current_block.
7557         (start_anonymous): Don't save current_block.
7558         (top_current_block): Remove.
7559
7560         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7561         (Block.Resolve): Update to changes.
7562         (Block..ctor): Move setting of "correct" 'Toplevel'
7563         and 'Explicit' fields to ...
7564         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7565
7566 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7567
7568         Kill Block.Implicit
7569         * statement.cs (Block.Implicit): Remove.
7570         (Block): Update to changes.
7571         * flowanalysis.cs: Likewise.
7572
7573         Mildly speed up CheckInvariantMeaningInBlock
7574         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7575         Recursively call AddKnownVariable to all enclosing blocks.
7576         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7577         Remove recursive calls.
7578         (Block): Update to changes.
7579
7580         New ExplicitBlock invariants
7581         * statement.cs (Block.Explicit): New field.  It points to the
7582         immediately enclosing non-implicit block.
7583         (Block..ctor): Maintain the invariant.
7584         * cs-parser.jay: Take advantage of invariant.
7585
7586         Introduce ExplicitBlock
7587         * statement.cs (ExplicitBlock): New.
7588         (ToplevelBlock): Derive from it.
7589         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7590         sense of flag.
7591         (Block.Implicit): Update to changes.
7592         * cs-parser.jay: Update to changes.
7593
7594         Remove unused field
7595         * codegen.cs (EmitContext.IsLastStatement): Remove.
7596         * statement.cs (Block.DoEmit): Update to changes.
7597
7598 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7599
7600         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7601         modifying current_block directly.
7602
7603 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7604         
7605         * class.cs: Implemented automatic properties (C# 3.0)
7606           Thanks to Marek for the help.
7607
7608 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7609
7610         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7611         variable as assigned, note also that all its components are
7612         assigned too.
7613         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7614
7615 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7616
7617         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7618         member is marked as compiler generated.
7619         
7620         * decl.cs (MemberCore): Refactored ModFlags into property.
7621
7622         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7623         (Check): Check only accessibility modifiers.
7624
7625 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7626
7627         Track all assignable slots in one bit array
7628         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7629         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7630         logic from VariableMap constructor here.  Use the same 'offset'
7631         variable that's later used for computing offsets of local
7632         variables.
7633         * flowanalysis.cs (UsageVector.parameters): Remove.
7634         (UsageVector): Update to changes.
7635         (VariableMap): Remove.
7636
7637         Avoid creating ParameterMap in every block
7638         * statement.cs (Block.ParameterMap): Move ...
7639         (ToplevelBlock.ParameterMap): ... here.
7640         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7641         only once.
7642         * flowanalysis.cs (FlowBranching.param_map): Remove.
7643         (FlowBranching.UsageVector): Update to changes.
7644         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7645
7646         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7647
7648         * expression.cs (ParameterReference): Distinguish between block
7649         where parameter was referenced and declared.
7650
7651 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7652
7653         * flowanalysis.cs, statement.cs: Put back improved error handling.
7654
7655 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7656         
7657         * assign.cs:
7658         * expression.cs:
7659           Imporved object and collection initialization (C# 3.0).
7660
7661 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7662
7663         A fix for bug #81380
7664         * expression.cs (Is.DoResolve): Only value types have constant `is'
7665         behaviour.
7666
7667 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7668
7669         * statement.cs (ToplevelBlock.child): Remove.
7670
7671 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7672
7673         Rationalize ResolveMeta: refactoring
7674         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7675         out constant handling code into ...
7676         (Block.DoResolveConstants): ... this.
7677
7678         Rationalize ResolveMeta: kill local_map
7679         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7680         (Block.AssignableSlots): New.
7681         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7682         for locals -- move code from VariableMap here.  Avoid unnecessary
7683         allocations.
7684         * flowanalysis.cs (FlowBranching.local_map): Remove.
7685         (FlowBranching..ctor): Use Block.AssignableSlots.
7686         (VariableMap): Remove unused constructors.
7687
7688 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7689
7690         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7691
7692 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7693
7694         * typemanager.cs (IsFriendAssembly): Should not be called for building
7695         assembly.
7696
7697 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7698
7699         * literal.cs (NullConstant): Print null in all cases.
7700         
7701         * expression.cs (Binary.ResolveOperator): Implemented delegate
7702          comparison based on C# 2.0 changes.
7703
7704 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7705
7706         This code is contributed under the MIT X11 license
7707         
7708         The following enables support for several C# 3.0 language features:
7709         
7710         * cs-tokenizer.cs: Added support for the "var" keyword.
7711         
7712         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7713           Added VarExpr class to facilitate type inferencing.
7714         
7715         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7716           to support anonymous types.
7717         
7718         * assign.cs: Added support for type inferencing and initialization.
7719         
7720         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7721         
7722         * expression.cs: Added implicit array support to ArrayCreation.
7723           Added 5 types and 1 interface:
7724           
7725           IInitializable                Implementing classes can inject initializing
7726                                         statements after object instantiation.
7727           
7728           Initializer                   Stores data for object initialization.
7729           
7730           AnonymousType                 An expression for anonymous types.
7731           
7732           AnonymousTypeParameter        Stores data about an anonymous type's field.
7733           
7734           NewInitialize                 An expression for object initialization.
7735           
7736           CollectionInitialize          An expression for collection initialization.
7737         
7738         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7739           statements.
7740
7741 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7742
7743         A fix for bug #81500
7744         * cs-tokenizer.cs: Add special handling for coalescing operator.
7745
7746 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7747
7748         A fix for bug #81529
7749         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7750         its value from base class until it is redefined.
7751
7752 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7753
7754         Fix regression in cs0631-3.cs
7755         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7756         fallback.  Make error fallback catch more cases.
7757
7758 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7759
7760         * cs-parser.jay: Allow parameters in operator declarations to have
7761         attributes. 
7762
7763 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7764
7765         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7766         exists. 
7767
7768         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7769         inside the ContextualReturn, it does not have to be an
7770         ExpressionStatement. 
7771
7772 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7773
7774         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7775         set, set it.
7776
7777 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7778
7779         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7780         method in two methods: ResolveNoDefine and Resolve.
7781
7782         ResolveNoDefine will stop just after ResolveTopBlock has been
7783         called.   
7784
7785         Resolve will then continue by creating a method and issuing the
7786         call to method.Define ().
7787
7788         (AnonymousMethod): Split and implement the new Resolve and
7789         ResolveNoDefine as well.
7790
7791         * lambda.cs (LambdaExpression): Split the anonymous method
7792         resolution code into a separate routine (CoreCompatibilityTest)
7793         from DoCompatibleTest.
7794
7795         (LambdaExpression.TryBuild): New method, this method tries to
7796         build the LambdaExpression with the given set of types to be used
7797         as the types for the various parameters of the lambda expression. 
7798
7799         If the compilation succeed with the given types, the infered type
7800         of the Anonymous method is returned, otherwise null is returned.
7801
7802 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7803
7804         A fix for bug #81414
7805         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7806
7807 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7808
7809         * cs-tokenizer.cs: Change various identifiers here from the
7810         camelCasing to the recommended Linux-like style for instance
7811         variables from the Coding Guidelines. 
7812
7813 2007-04-19  Martin Baulig  <martin@ximian.com>
7814
7815         * convert.cs
7816         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7817         System.Enum to System.ValueType.
7818
7819 2007-04-13  Martin Baulig  <martin@ximian.com>
7820
7821         Rewrote implicit reference conversions.  We need to distinguish
7822         between implicit reference conversions (13.1.4) and implicit
7823         boxing conversions (13.1.5).
7824
7825         According to the spec, there's an an implicit conversion
7826         "From a one-dimensional array-type S[] to IList<T> and base
7827         interfaces of this interface, provided there is an implicit
7828         reference conversion from S to T."  Note that this does not
7829         include boxing conversions.
7830
7831         * convert.cs
7832         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7833         (Convert.ImplicitReferenceConversion): Split into
7834         ImplicitReferenceConversionCore() and
7835         ImplicitBoxingConversionExist().
7836         (Convert.ImplicitReferenceConversionExists): Use the new
7837         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7838
7839 2007-04-12  Martin Baulig  <martin@ximian.com>
7840
7841         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7842         `TypeManager.null_type' checks up to the top of the method.
7843
7844 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7845
7846         A fix for bug #81350
7847         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7848         extension methods.
7849
7850 2007-04-11  Martin Baulig  <martin@ximian.com>
7851
7852         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7853         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7854         to make this work for generic classes; fixes #79561.
7855
7856 2007-04-11  Martin Baulig  <martin@ximian.com>
7857
7858         * expression.cs (As): Add support for nullable types; fixes #79371.
7859
7860 2007-04-11  Martin Baulig  <martin@ximian.com>
7861
7862         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7863         `type.FullName' is null; fixes #80243.
7864
7865 2007-04-11  Martin Baulig  <martin@ximian.com>
7866
7867         * expression.cs (Invocation.IsApplicable): Don't modify the method
7868         if type inference succeeded, but the method was not applicable.
7869         Fixes #81250.
7870
7871 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7872
7873         A fix for bug #81324
7874         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7875         internal and external namespaces containers.
7876
7877 2007-04-10  Martin Baulig  <martin@ximian.com>
7878
7879         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7880         TypeManager.DropGenericMethodArguments() so we also call
7881         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7882
7883 2007-04-10  Martin Baulig  <martin@ximian.com>
7884
7885         * iterators.cs (Iterator.CreateIterator): Don't crash if
7886         `method.ReturnType' is null.  This happens if something went wrong
7887         while resolving that typ (we already reported an error in this case).
7888
7889 2007-04-10  Martin Baulig  <martin@ximian.com>
7890
7891         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7892         generic interfaces; report the CS0144 directly.
7893
7894 2007-04-10  Martin Baulig  <martin@ximian.com>
7895
7896         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7897         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7898
7899 2007-04-10  Martin Baulig  <martin@ximian.com>
7900
7901         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7902
7903 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7904
7905         A better fix
7906         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7907         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7908
7909         Fix #81338
7910         * statement.cs (For.Resolve): If resolution fails, use
7911         KillFlowBranching.
7912
7913 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7914
7915         * anonymous.cs (MakeName): Make faster and zero-based.
7916         (VerifyExplicitParameterCompatibility): Back to mode where generic
7917         parameter is ignored.
7918         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7919
7920         * class.cs (EmitType): Method can emit another new method.
7921
7922         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7923
7924         * driver.cs: Updated.
7925
7926         * lambda.cs: Reuse predefined empty parameters.
7927
7928         * parameter.cs: Updated
7929
7930         * support.cs: Implemented InflateTypes.
7931
7932         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7933         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7934
7935 2007-04-03  Martin Baulig  <martin@ximian.com>
7936
7937         Fix #80632.
7938
7939         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7940         version of TypeManager.IsOverride() which also works with generic
7941         types.  
7942
7943 2007-04-03  Martin Baulig  <martin@ximian.com>
7944
7945         Fix #81044.
7946
7947         * convert.cs
7948         (Convert.ExplicitReferenceConversion): We need to cast when
7949         converting from IList<T> to S[].
7950
7951 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7952
7953         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7954         at this level.
7955         
7956         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7957
7958 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7959
7960         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7961         argument and return type inferring.
7962
7963         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7964         (ReturnType): Turned to property.
7965
7966         * statement.cs (Return): Implemented return type inferring.
7967
7968         * support.cs (ReflectionParameters): Use local types if possible.
7969
7970 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7971
7972         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7973         (FlowBranching.UsageVector): Update to changes.
7974
7975         Prepare to kill 'Reachability'
7976         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7977         argument of constructor.
7978
7979 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7980
7981         Prepare to kill 'Reachability'
7982         * flowanalysis.cs (UsageVector.is_unreachable): New.
7983         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7984         'reachability', and verify they're consistent.
7985
7986         Fix #81121
7987         * expression.cs (New.EmitStatement): Handle type parameters here too.
7988
7989 2007-03-29  Martin Baulig  <martin@ximian.com>
7990
7991         Fix #79148.
7992
7993         * anonymous.cs
7994         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7995         CompilerGeneratedClass.
7996         (ScopeInfo.EmitScopeInstance): Make this protected.
7997         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7998         `ec.CurrentAnonymousMethod.Scope == Scope'.
7999
8000         * statement.cs (Block.ScopeInfo): Make this a property.
8001
8002 2007-03-27  Raja R Harinath  <harinath@gmail.com>
8003
8004         Prepare to kill 'Reachability'
8005         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
8006         (FlowBranching.UsageVector.Reachability): Remove property.
8007         (FlowBranching.UsageVector.IsUnreachable): New property.
8008         (FlowBranching.UsageVector.ResetBarrier): New.
8009         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
8010         * codegen.cs, statement.cs: Update to changes.
8011
8012 2007-03-27  Martin Baulig  <martin@ximian.com>
8013
8014         Fix #81209.
8015
8016         * decl.cs
8017         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
8018         generic types.
8019
8020 2007-03-26  Raja R Harinath  <rharinath@novell.com>
8021
8022         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
8023         instead of TriState.  Remove all mention of TriState.
8024
8025         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
8026         replaced by a boolean.  Add boolean 'is_unreachable' field, check
8027         and maintain invariants.
8028
8029 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8030
8031         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
8032
8033 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8034
8035         * expression.cs: Stop using obsolete 2.0 opcodes.
8036
8037 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8038
8039         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
8040         one of the latests Martin's fixes.
8041
8042 2007-03-23  Miguel de Icaza  <miguel@novell.com>
8043
8044         * expression.cs: On BigEndian systems, swap the bytes, temporary
8045         solution until we get a new bitconverter class.
8046
8047 2007-03-23  Martin Baulig  <martin@ximian.com>
8048
8049         Fix #81158.
8050
8051         * decl.cs (MemberCache.AddMembers): Add generic methods both as
8052         "Method" and "Method`1".  Normally, a cache lookup is done on the
8053         "Method" form (ie. without the generic arity), but this one makes
8054         lookups on the full form work as well.
8055
8056 2007-03-22  Raja R Harinath  <rharinath@novell.com>
8057
8058         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
8059         unused properties.
8060
8061 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
8062         * class.cs: 
8063         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
8064         ordered_member_list, to TypeBuilder to store members to be defined
8065         in the order they were parsed in.
8066         - ordered_explicit_member_list contains all properties indexers
8067           and methods that are defined as explicit implementation of an
8068           interface or base class.
8069         - ordered_member_list contains all properties indexers and methods
8070           that are not defined as explicit implementation of an interface
8071           or base class.
8072
8073         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
8074         functionality in these removed classes has been replaced with 
8075         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
8076         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
8077
8078         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
8079         to CheckForDuplications inside GetMethod and SetMethod Define Method
8080         to handle method property and indexer name conflicts.
8081
8082         Fixes #79434
8083
8084         All code is contributed under the MIT/X11 license.
8085
8086 2007-03-20  Martin Baulig  <martin@ximian.com>
8087
8088         * class.cs (TypeContainer.Interfaces): Removed; they're now
8089         included in `TypeContainer.Types'.
8090
8091 2007-03-20  Martin Baulig  <martin@ximian.com>
8092
8093         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
8094
8095         * class.cs (TypeContainer.CreateType): New public method.  This is
8096         now called before DefineType() to create the TypeBuilders.
8097         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
8098         has already been created by CreateType().
8099         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
8100         don't resolve our base classes here; this has been moved into
8101         DefineBaseTypes().  We're now called from CreateType().
8102         (TypeContainer.DefineBaseTypes): New private method; resolve our
8103         base classes here.  We're now called from DefineType().
8104
8105         * rootcontext.cs
8106         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
8107         our types first to create all the TypeBuilders.  After that, call
8108         TypeContainer.DefineType() on all the types which'll resolve their
8109         base classes and setup the resolve order.
8110
8111 2007-03-20  Martin Baulig  <martin@ximian.com>
8112
8113         * class.cs (TypeContainer.Enums): Removed; they're now included in
8114         `TypeContainer.Types'.  
8115
8116 2007-03-20  Martin Baulig  <martin@ximian.com>
8117
8118         * class.cs
8119         (TypeContainer.DefineType): Don't call ResolveMembers() here.
8120         (TypeContainer.DoResolveMembers): Call DefineType() on our
8121         `compiler_generated' classes; moved here from DefineNestedTypes().
8122
8123         * rootcontext.cs
8124         (RootContext.ResolveTree): Call ResolveMembers() on all
8125         TypeContainer's in the `type_container_resolve_order'.
8126
8127 2007-03-19  Marek Safar  <marek.safar@gmail.com>
8128
8129         * class.cs: Use corlib to handle InternalMethodImplAttribute.
8130
8131 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8132
8133         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
8134         implementation flags.
8135
8136 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8137
8138         * class.cs: More optimizations for type parameters.
8139
8140 2007-03-15  Marek Safar  <marek.safar@gmail.com>
8141
8142         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
8143
8144         * ecore.cs, parameter.cs: More common code for both corlibs.
8145
8146         * typemanager.cs (IsGenericMethod): Simplified.
8147
8148 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8149
8150         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8151         'returns'.
8152         * statement.cs, iterators.cs, lambda.cs: Update to changes.
8153
8154         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
8155         unconditionally.  Simplify explanation.
8156         (Try.Resolve, Using.Resolve): Likewise.
8157
8158 2007-03-15  Martin Baulig  <martin@ximian.com>
8159
8160         Fix #80731.
8161
8162         * decl.cs (DeclSpace): If we're a partial class, use our
8163         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
8164
8165 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8166
8167         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8168         'throws'.
8169         (FlowBranching.UsageVector): Update to changes.
8170         (FlowBranching.MergeSiblings): Likewise.
8171         * statement.cs: Likewise.
8172
8173 2007-03-15  Martin Baulig  <martin@ximian.com>
8174
8175         Fix #79302.
8176
8177         * decl.cs
8178         (MemberCache): Added a special .ctor for type parameters.
8179
8180         * typemanager.cs
8181         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
8182         `MemberCache'.  
8183
8184 2007-03-09  Martin Baulig  <martin@ximian.com>
8185
8186         * enum.cs (Enum): Make this a TypeContainer.
8187         (EnumMember): Derive from `Const'.
8188
8189         * const.cs
8190         (Const.DoResolveValue): New protected virtual method; move most of
8191         the functionality of ResolveValue() here so we can override it in
8192         `EnumMember'.
8193         (Const.CreateConstantReference): Make this virtual.
8194
8195         * class.cs (Kind): Add `Kind.Enum'.
8196         (TypeContainer.Emit): Don't emit the enums here; they're already
8197         in the `RootContext.typecontainer_resolve_order'.
8198
8199         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
8200         here; they're already in the `typecontainer_resolve_order'.
8201
8202         * ecore.cs (EnumConstant.ConvertImplicitly): Add
8203         TypeManager.DropGenericTypeArguments().
8204
8205         * typemanager.cs
8206         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
8207         (TypeManager.IsEnumType): Likewise.
8208         (TypeManager.EnumToUnderlying): Likewise.
8209         (TypeManager.IsEqual): Add support for enums.
8210
8211 2007-03-12  Raja R Harinath  <rharinath@novell.com>
8212
8213         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
8214         DefaultParameterValueAttribute to be undefined, say if System.dll
8215         is not referenced.
8216
8217 2007-03-11  Marek Safar  <marek.safar@gmail.com>
8218
8219         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
8220         any mscorlib.
8221
8222 2007-03-10  Marek Safar  <marek.safar@gmail.com>
8223
8224         * class.cs, parameter.cs: Unified parameters verification.
8225
8226 2007-03-08  Martin Baulig  <martin@ximian.com>
8227
8228         * cs-parser.jay (constructor_header): Pass the location to the
8229         newly created TopLevelBlock.
8230
8231 2007-03-07  Martin Baulig  <martin@ximian.com>
8232
8233         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8234
8235 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8236
8237         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8238         with the changes from David, fixes the build.
8239
8240 2007-03-05  David Mitchell  <dmitchell@logos.com>
8241
8242         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8243         and its base interfaces to a one-dimensional array type S[],
8244         provided there is an implicit or explicit reference conversion
8245         from S to T.
8246
8247 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8248
8249         * cs-tokenizer.cs: Implemented basic linq grammar.
8250
8251         * driver.cs: Set linq lang version on demand.
8252
8253 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8254
8255         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8256
8257 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8258
8259         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8260         (Fixes #80455)
8261
8262         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8263         here.
8264         Check property and event extern attributes.
8265
8266         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8267         charset.
8268
8269 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8270
8271         A fix for bug #80407
8272         * ecore.cs: Don't report ambiguity error when methods have same parent.
8273
8274 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8275
8276         A fix for bug #80878
8277         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8278
8279 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8280
8281         * attribute.cs: Enable ExtensionAttribute presence test.
8282
8283 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8284
8285         * class.cs: Warn about missing GetHashCode only when Equals is override.
8286
8287         * decl.cs: Check accessibility of type arguments.
8288
8289         * typemanager.cs: Correctly report nullable array.
8290
8291 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8292
8293         * class.cs, report.cs: Capture more details when things go wrong.
8294
8295 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8296
8297         A fix for bug #80650
8298         * cs-parser.jay: Anonymous container starts at constructor declaration
8299         and not at block beginning because it has to be usable in constructor
8300         initializer.
8301
8302         * statement.cs: Use context location and not block one for error reporting.
8303
8304 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8305
8306         A fix for bug #78712
8307         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8308         too.
8309
8310 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8311
8312         A fix for bug #80493 by Atsushi Enomoto
8313         * cs-parser.jay: Ignore invalid attribute target.
8314
8315 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8316  
8317         * cs-tokenizer.cs: Ignore '\0' as white space character.
8318
8319 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8320
8321         * cs-parser.jay: Add support for lambda expressions to the mcs
8322         compiler as well.
8323
8324         * lambda.cs: Only clone when we are probing, not on the final call
8325         (Compatible is the final call). 
8326
8327         * statement.cs (CloneContext): Introduce class to provide block
8328         remapping during clone.
8329
8330         All statements Clone themselves now.
8331
8332         (Clone): special handling for blocks, when we clone a block, we
8333         register the block inside this routine, as children of the block
8334         might trigger a lookup. 
8335         
8336         * expression.cs: Add support for CloneContext in all expressions. 
8337         
8338 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8339  
8340         A fix for bug #80493
8341         * statement.cs: Report ambiguous warning when interfaces are not related.
8342
8343 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8344
8345         C# 3.0 extension methods.
8346
8347         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8348         cannot be used directly.
8349
8350         * class.cs (Class.Emit): Emit extension attribute if any class method
8351         is extension method.
8352         (Method.Define): Add basic extension method validation conditions.
8353         (Method.Emit): Emit extension attribute for method.
8354
8355         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8356         extension method exists. Currently we follow same approach as Microsoft
8357         does, emit even if a method or a class are private but this can change
8358         later.
8359
8360         * cs-parser.jay: Add handling of `this' keyword in method parameters
8361         context.
8362
8363         * decl.cs (DeclSpace.IsStaticClass): New property.
8364         (MemberCache.FindExtensionMethods): Looks for extension methods with
8365         defined name and extension type.
8366
8367         * doc.cs: Updated after OverloadResolve changes.
8368
8369         * driver.cs: Add new soft reference to System.Core.dll.
8370
8371         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8372         (ExtensionMethodGroupExpr): Represents group of extension methods.
8373
8374         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8375         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8376         to MethodGroupExpr and made non-static for easier customization.
8377         (Invocation.DoResolve): Add extension method lookup when no standard
8378         method was found.
8379         (MemberAccess.DoResolve): Try extension methods if no member exists.
8380
8381         * modifiers.cs: Add METHOD_EXTENSION modifier.
8382
8383         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8384         as well as candidate extension type.
8385         (ComputeNamespaces): When assembly constains extension methods registers
8386         them.
8387         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8388         extension method lookup.
8389         (Namespace.LookupExtensionMethod): Looks for extension method in this
8390         namespace.
8391         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8392         find a method which matches name and extensionType.
8393
8394         * parameter.cs (Parameter): Add This modifer.
8395         (HasExtensionMethodModifier): New property.
8396         (Resolve): Add extension parameter check.
8397         (ModFlags): turned to property to exclude this modifier as it is not real
8398         parameter modifier.
8399         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8400
8401         * support.cs (ParameterData): Add ExtensionMethodType.
8402         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8403
8404         * typemanager.cs: Add type and ctor extension attribute type.
8405
8406 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8407
8408         * report.cs (DisableErrors, EnableErrors): used to prevent error
8409         output when we are "trying" to compile various methods with
8410         different types. 
8411
8412         * ecore.cs (Expression): Add Clone method that calls the virtual
8413         CloneTo method.  The current CloneTo method in Expression throws
8414         an exception so we can track down all the places where this must
8415         be implemented (not using abstract, because that would be a lot of
8416         up-front-work before we can start testing the implementation
8417         idea). 
8418
8419         Important: we only need Clone capabilities for expressions created
8420         by the parser, as the expressions we will be cloning are
8421         expressions in the pre-resolved state.   This vastly simplifies
8422         the work required. 
8423         
8424         (SimpleName): Add CloneTo that does nothing.
8425         (EmptyCast): Add CloneTo.
8426         
8427         * expression.cs (Binary): Implement CloneTo.
8428         (Invocation.IsApplicable): Store the current ec in
8429         EmitContext.TempEc and restore it on return.  This is used so we
8430         do not have to sprinkle hundres of methods with an extra
8431         EmitContext, we know that the only user is the lambda expression
8432         ImplicitConversionExists code. 
8433         
8434         (Argument): Add Cloning capabilities.
8435         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8436         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8437         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8438         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8439         IndexerAccess): Add Clone capability.
8440
8441         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8442
8443         (Argument): Add cloning capability.
8444
8445         * assign.cs (Assign): Implement CloneTo.
8446
8447         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8448         
8449         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8450         version by calling Convert with the EmitContext (that we are
8451         currently storing in ec, this is not great, but will do for now,
8452         to avoid passing EmitContext parameters to hundreds of functions
8453         that do not need them now).
8454
8455         (SetExpression): Remove, it is not needed.
8456         
8457         (ContextualReturn): Implement CloneTo.
8458
8459         * statement.cs (Statement): Implement cloning infrastructure,
8460         similar to expressions.
8461
8462         (Block): Partial implementation of Clone for statements.
8463
8464         (Return): Implement clone.
8465         
8466         * constant.cs (Constant.CloneTo): New method, does nothing.
8467
8468         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8469         solution, until we decide how to exactly do this.  
8470         
8471 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8472  
8473         A fix for bug #80493
8474         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8475         a property is override we need to use second accessor.
8476
8477 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8478  
8479         A fix for bug #80418
8480         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8481         methods.
8482
8483 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8484
8485         Another fix for bug #80749
8486         * pending.cs: Abstract class has priority over interfaces.
8487
8488 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8489
8490         Another fix for bug #80749
8491         * pending.cs: Abstract class has priority over interfaces.
8492
8493 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8494
8495         Another fix for bug #80749
8496         * pending.cs: Abstract class has priority over interfaces.
8497
8498 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8499
8500         Another fix for bug #80749
8501         * pending.cs: Abstract class has priority over interfaces.
8502
8503 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8504
8505         * class.cs Better error message.
8506
8507         * driver.cs: Add shorter versions of -optimize option.
8508
8509 2007-02-13  Martin Baulig  <martin@ximian.com>
8510
8511         * class.cs (Constructor.Emit): Check the return value of
8512         ec.ResolveTopBlock() and return on error.
8513
8514 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8515
8516         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8517         message to fix error message regression.
8518
8519 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8520
8521         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8522
8523 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8524
8525         A fix for bug #80749
8526         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8527         its parent container.
8528
8529         * class.cs (DefineFieldInitializers): Each initializer can has different
8530         resolve context.
8531
8532         * const.cs: Updated.
8533
8534 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8535
8536         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8537         now all the heavy lifting to check that embedded statements or
8538         expressions have the right form is done in the ContextualReturn.
8539
8540         (ContextualReturn): New class.  
8541
8542         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8543         method that can be invoked to report 201, so we do not replicate
8544         this everywhere.
8545
8546         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8547         
8548         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8549         treating tabs as spaces. 
8550
8551 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8552
8553         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8554         * assign.cs: Use full implicit conversion for right side check.
8555
8556 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8557
8558         * statement.cs (Switch): Switch over boolean type is not standardized.
8559
8560 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8561
8562         A fix for bug #80755
8563         * decl.cs (FindBaseEvent): Don't use method cache for events.
8564
8565 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8566
8567         * cs-parser.jay: Better syntax error handling.
8568
8569         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8570         instead of underlying type value.
8571
8572 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8573
8574         * driver.cs: Check define identifier before is registered.
8575
8576         * namespace.cs: Use existing error message.
8577
8578         * report.cs: New warning.
8579
8580 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8581
8582         A fix for bug #80742
8583         * expression.cs: Delegate Invoke method can be called directly.
8584
8585 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8586
8587         A fix for bug #80676
8588         * class.cs (IsEntryPoint): The Main method can have params modifier.
8589
8590 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8591
8592         * parameter.cs (Parameter, Parameters): Add Clone method.
8593
8594         * anonymous.cs (Compatible): Turn method into virtual method, so
8595         LambdaExpression can implement a different behavior.
8596
8597         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8598         out the basic checking here, so it can be used by
8599         LambdaExpressions.
8600         
8601         * lambda.cs: Introduce "Compatible" function that will do the
8602         heavy lifting.
8603
8604 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8605
8606         * attribute.cs: Unified one error message.
8607
8608         * class.cs (Class): Use type attributes and not properties to test static
8609         class.
8610         (IsEntryPoint): Don's pass local variable.
8611
8612         * convert.cs: Removed duplicate check.
8613
8614         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8615
8616         * driver.cs: Don't crash when soft reference does not exist.
8617
8618         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8619         (UsingEntry): Removed redundant allocation.
8620
8621         * parameter.cs: Add fast path for type parameters.
8622
8623         * support.cs: Don't allocate attribute when it's not used.
8624
8625 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8626
8627         * anonymous.cs
8628         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8629         this into a virtual method, so we can override it in LambdaExpression.
8630
8631         * driver.cs: Improve diagnostics in case of failure. 
8632
8633         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8634         write a function that is slightly more complex and that parses:
8635
8636         type identifier [, type identifier]* )
8637
8638         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8639         this expression:
8640
8641                 (canEmpty ? i >= 0 : i > 0)
8642
8643 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8644
8645         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8646         exception on possibly valid code.
8647
8648 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8649
8650         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8651         Push/PopPosition.
8652         (parse_opt_type_arguments): Remove.  It's almost the same as
8653         parse_less_than.
8654         (parse_namespace_or_typename): Use parse_less_than.
8655
8656 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8657
8658         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8659         this bug took a few hours to find, because the state saved and
8660         restored by PushPosition and PopPosition was ignoring the state of
8661         parse_generic_less_than.
8662
8663         I can also now remove the handling of OP_LT and OP_GT, this solves
8664         the big mistery.
8665         
8666         * cs-tokenizer.cs: store the location for the ARROW token, we use
8667         that in the parser.
8668
8669         (PushPosition, PopPosition): save/restore also `current_token',
8670         restore `parse_generic_less_than' (was missing).
8671
8672         (parse_opt_type_arguments): use parse_type, not
8673         parse_namespace_or_typename to parse types.
8674
8675         * lambda.cs: Empty new file, will eventually have the lambda
8676         expression implementation.
8677
8678         * lambda.test: used to test the internal tokenizer. 
8679
8680         * report.cs (FeatureIsNotISO1): Rename from
8681         FeatureIsNotStandardized, because it was about the language level
8682         (1 vs 2) it was not about standarization.
8683
8684         (FeatureRequiresLINQ): New.
8685
8686         * support.cs (SeekableStreamReader): Only require that the reader
8687         is a TextReader, not a StreamReader, so we can plug StringReader. 
8688
8689         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8690         given position in the input stream the following tokens can be
8691         parsed as a type followed by an identifier.
8692
8693         (is_punct): after a '(' if parse_type_and_parameter returns true,
8694         then return a special token OPEN_PARENS_LAMBDA which is used to
8695         avoid reduce/reduce errors in the grammar for the
8696         lambda_expression rules.
8697
8698         (parse_type): implement a type parser inside the
8699         tokenizer, the parser only returns true or false depending on
8700         whether the input at a given position can be parsed as a type.
8701
8702         (peek_token): new method used during type parsing.
8703
8704 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8705
8706         Fix #80531
8707         * anonymous.cs (ScopeInfo.InflateParameters): New.
8708         (AnonymousContainer.Resolve): Use it to redirect types of
8709         delegate parameters.
8710
8711 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8712
8713         Fix #80530
8714         * expression.cs (Error_InvalidArguments): Don't use two different
8715         messages for CS1503.  Use ExtraInformation and
8716         SymbolRelatedToPreviousError instead.
8717
8718         Fix #80358
8719         * decl.cs (DeclSpace.initialize_type_params): Don't access
8720         'type_params' of a partial class directly.
8721
8722 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8723
8724         * constant.cs: Removed a handful of out-of-range checks that were
8725         not necessary. 
8726
8727 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8728
8729         * expression.cs (CheckUselessComparison): Add additional check for char
8730         constants.
8731
8732         * namespace.cs: Fixed typo.
8733
8734 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8735
8736         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8737         gone, instead we inline the test, preventing the needless casts to
8738         longs, ulongs and doubles for the parameters, avoiding calls to
8739         methods that overchecked stuff, and instead inlined things
8740         nicely. 
8741
8742 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8743
8744         * cs-parser.jay: Better parameter error handling.
8745
8746 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8747
8748         A fix for bug #80368, #80522
8749         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8750         whether array initializer contains constants only.
8751         (ArrayCreation.Emit): Use better formula to decide when
8752         are array initializers for static initialization.
8753         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8754         have to emit even constants otherwise they are pre-initialized.
8755
8756 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8757             Raja R Harinath  <rharinath@novell.com>
8758
8759         Fix emit order of 'get' vs. 'set'.
8760         * support.cs (Accessors): New.
8761         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8762         Note the order in which accessors are declared in the source.
8763         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8764         Refactored from Property.Define and Indexer.Define.
8765         (PropertyBase.DefineAccessors): New helper that calls the above in
8766         appropriate order as noted by the parser.
8767         (Property.Define, Indexer.Define): Update to changes.
8768         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8769
8770 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8771
8772         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8773         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8774         there's an implicit conversion from the current type to the target
8775         type before converting the underlying constant.
8776
8777 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8778
8779         * const.cs (ResolveValue): Updated after constant conversion was made more
8780         generic.
8781
8782         * constant.cs (GetAttributableValue): constant to object conversion is
8783         used for attributes only.
8784         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8785         constant conversions.
8786         (LongConstant.ConvertImplicitly): Ditto.
8787
8788         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8789         (ImplicitConversionStandard): Handle constant conversion as extra step.
8790         It solves the issue when constant conversion was called indirectly like
8791         inside array initializer and constant folding was skipped.
8792
8793         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8794         this change.
8795
8796         * statement.cs(ImplicitConversionStandard): Updated after constant
8797         conversion was made more generic.
8798
8799 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8800
8801         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8802         Constraints, solves the problem where the compiler incorrectly
8803         reported that a type parameter was not constrained to a class (Bug
8804         80518)
8805
8806 2007-01-14  Marek Habersack  <grendello@gmail.com>
8807
8808         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8809
8810 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8811
8812         A fix for bug #80368
8813         * assign.cs (FieldInitializer): New class implements field
8814         initializer statement.
8815
8816         * attribute.cs: Update after FieldMember rename.
8817
8818         * class.cs (PropertyBasedMember): New common class for property based
8819         types.
8820         (InterfaceMemberBase): New base class for all members which can be used as
8821         an interface members.
8822         (MethodCore): Moved really common code to InterfaceMemberBase.
8823         (Method.Define): Equal and GetHasCode detection is relevant for methods
8824         only.
8825         (MethodData.Define): Don't assume that public event implements an
8826         interface automatically.
8827         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8828         modifier is used.
8829         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8830         (FieldMember): Merged with FieldBase.
8831         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8832         event extern modifier can be used.
8833         (EventField.EventFieldAccessor): Moved event field specific code here.
8834         (Event.AllowedModifiers): Even event can be extern.
8835         (Event.FindOutBaseMethod): New override specific to events.
8836         (Indexer.parameters): Reintroduce parameters because base class holds
8837         only properties common data.
8838         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8839         need do extra parameters check.
8840
8841         * const.cs: Update after FieldMember rename.
8842
8843         * decl.cs (MemberCache.FindBaseEvent): New method.
8844
8845         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8846         to reflect that indexer is now derived from PropertyBased.
8847
8848         * ecore.cs (GetMemberType): Made public.
8849         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8850         obsolete event.
8851
8852         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8853         
8854         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8855         (RegisterEvent): Removed.
8856         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8857         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8858
8859 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8860
8861         Fix #80249
8862         * statement.cs (CollectionForeach.TryType): Prefer generic
8863         GetEnumerator over non-generic variant.  Fix code to follow comments.
8864
8865 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8866
8867         Fix #80446
8868         * support.cs (ReflectionParameter): Don't use an invalid index on
8869         the generic parameter data.
8870
8871 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8872
8873         * driver.cs: Just add a tiny bit of infrastructure.
8874
8875 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8876
8877         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8878         where field type is struct from current assembly.
8879         
8880         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8881         it is possible.
8882
8883 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8884
8885         A fix for bug #80381
8886         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8887         the core types.
8888
8889         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8890         messages.
8891         (Namespace.LookupType): Always use core types from corlib when speficied.
8892
8893         * report.cs: A new warning.
8894
8895         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8896         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8897         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8898
8899         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8900         (InitCoreTypes): Set expression type of object_type and value_type
8901         immediately after lookup.
8902
8903 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8904
8905         * cs-tokenizer.cs: Accept Pc class characters (Connector
8906         Punctuation) as valid identifiers.  Fixes #78259
8907
8908         * expression.cs (Invocation.DoResolve): Moved the check for the
8909         use of `this' for doing method calls to the Invocation resolution
8910         step, after overload resolution has taken place instead of doing
8911         the check at the low-level `This.DoResolve' level.
8912
8913         The `This.DoResolve'(appens before overload resolution, so it has
8914         no way of knowing if the method that will be called will be
8915         instace or static, triggering an erroneous report for cs0188 (Bug
8916         78113).
8917
8918         We now do the check for instance method invocations after we know
8919         what method will be called.
8920
8921         (This.CheckThisUsage): Move the actual use of this structure
8922         checking into its own method and expose it. 
8923
8924         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8925         EmitContext.
8926
8927         Exceptions: Null.ConvertImplicitly,
8928         Constant.ImplicitConversionRequired as there are too many call
8929         sites for passing the ec. 
8930
8931         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8932         EmitContext, if the value is null, then we do not try to provide
8933         the extra information from the error (If a userdefined conversion
8934         exists, as UserDefinedConversion requires a non null-EmitContext).
8935
8936         Fixes: #80347
8937
8938 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8939
8940         * flowanalysis.cs (MyBitVector): Document some invariants.
8941         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8942         introduced below, and add a couple of others, 
8943
8944 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8945
8946         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8947         GetPropertyFromAccessor and GetEventFromAccessor.
8948         
8949         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8950         overrides non-obsolete one.
8951         (Indexer.Define): Error message has been moved to the parser.
8952
8953         * cs-parser.jay: Better syntax errors handling.
8954
8955         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8956         when an invocation has no arguments.
8957
8958         * ecore.cs: Removed not used caching.
8959
8960         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8961         implementation.
8962
8963         * report.cs: Add a new warning.
8964
8965         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8966
8967         * typemanager.cs (enumeration_type): Removed.
8968         (CSharpSignature): Reuses IsSpecialMethod.
8969         (IsEqual): Hack for MS BCL.
8970         (GetPropertyFromAccessor): New method.
8971         (GetEventFromAccessor): New method.
8972         (IsSpecialMethod): Fixed to handle more cases.
8973
8974 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8975
8976         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8977         Made white spaces array static.
8978
8979         * ecore.cs (RemoveGenericArity): Optimized.
8980
8981         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8982         10 times faster).
8983         (MyBitVector.initialize_vector): Simplified.
8984
8985 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8986
8987         * ecore.cs: Am not entirely happy with this hack, but it seems to
8988         address the issue in 80257 (a small test case for
8989         CreativeDocs.NET). 
8990
8991         I set the MethodGroupExpr.Type to an internal compiler type
8992         (itself in this case) to force the resolution to take place.   Why
8993         it does not take place with a null is beyond me.
8994
8995 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8996
8997         A fix for bug #80288
8998         * expression.cs (ResolveOperator): Consider user defined conversion for
8999         logical and operator too.
9000         (EmitBranchable): Optimization for logical and when full constant folding
9001         could not be applied but one operand is constant.
9002
9003 2006-12-19  Marek Safar  <marek.safar@gmail.com>
9004
9005         * class.cs (GetClassBases): Write 5 times every day, will never use
9006         FullName for error reporting.
9007
9008         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
9009
9010 2006-12-19  Martin Baulig  <martin@ximian.com>
9011
9012         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
9013         the symbol file info here.
9014
9015 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9016
9017         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
9018         of `elseif' is taking then following sections are not taking.
9019         Fixes an issue reported on mono mailing list.
9020
9021 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9022
9023         A fix for bug #80300
9024         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
9025         a caller is not taking.
9026
9027 2006-12-18  Raja R Harinath  <rharinath@novell.com>
9028
9029         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
9030         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
9031         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
9032         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
9033         * class.cs: Update to changes.
9034
9035 2006-12-17  Marek Safar  <marek.safar@gmail.com>
9036
9037         A fix for bug #79934
9038         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
9039         partial container.
9040
9041         * class.cs (ResolveMembers): Register an iterator in current container and
9042         not in shared one.
9043
9044 2006-12-16  Raja R Harinath  <rharinath@novell.com>
9045
9046         Fix test-543.cs
9047         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
9048         satisfy a params annotated parameter.
9049
9050 2006-12-16  Marek Safar  <marek.safar@gmail.com>
9051
9052         A fix for bug #77014
9053         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
9054         paramters correctly and not rely on hacks in Parameters class.
9055         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
9056         at any possition.
9057         (Invocation.VerifyArgumentsCompat): Ditto.
9058         (Invocation.EmitArguments): Changed to correctly emit params arguments at
9059         any possition.
9060
9061         * parameter.cs (HasParams): Don't assume that params is the last one.
9062
9063         * support.cs (ReflectionParameters.ctor): Look for params attribute
9064         correctly.
9065         (ReflectionParameters.ParameterType): Removed hack when we returned last
9066         parameter for out of range parameters.
9067         (ParameterName, ParameterModifier): Ditto.
9068
9069 2006-12-14  Marek Safar  <marek.safar@gmail.com>
9070
9071         A fix for bug #79987
9072         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
9073         when assembly is not CLS compliant but type is. I have no idea why is this
9074         allowed.
9075
9076         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
9077
9078 2006-12-13  Miguel de Icaza  <miguel@novell.com>
9079
9080         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
9081         in struct constructors, they are basically no-ops.
9082
9083 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9084
9085         * cs-tokenizer.cs (Position): Save preprocessor status too.
9086
9087 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9088
9089         A fix for bug #77794
9090         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
9091
9092 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9093
9094         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
9095         Fixes #69299.
9096         (pp_expr): Report error for an invalid expression.
9097         (handle_preprocessing_directive): Simplified; add more error checking.
9098
9099 2006-12-11  Marek Safar  <marek.safar@gmail.com>
9100
9101         A fix for bug #74939
9102         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
9103         directives handling.
9104
9105 2006-12-10  Marek Safar  <marek.safar@gmail.com>
9106
9107         A fix for bugs #80093, and #75984
9108         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
9109         logic, it seems to me as it worked before "by coincidence".
9110         (xtoken): Simplified to use reworked handle_preprocessing_directive.
9111         (cleanup): Enabled endif check.
9112
9113 2006-12-09  Marek Safar  <marek.safar@gmail.com>
9114
9115         A fix for bug #80162
9116         * statement.cs (CollectionForeach.TryType): Generics and non-generics
9117         enumerators are never ambiguous.
9118
9119 2006-12-08  Raja R Harinath  <rharinath@novell.com>
9120
9121         Fix #80060
9122         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
9123
9124 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9125
9126         A fix for bug #80144
9127         * class.cs (EventProperty.Define): Explicit implementation means
9128         that an even is used.
9129
9130 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9131
9132         Fixes the operators implementation (part II)
9133
9134         * cfold.cs (DoConstantNumericPromotions): Renamed to
9135         DoBinaryNumericPromotions and simplified.
9136         (BinaryFold): Couple of conversion fixes; simplified.
9137
9138         * constant.cs, ecore.cs, literal.cs
9139         (ToType): Renamed to ConvertImplicitly.
9140         (Reduce): Renamed to ConvertExplicitly.
9141
9142         * class.cs, convert.cs: Updated.
9143
9144         * expression.cs: TryReduce doesn't throw an exception.
9145
9146 2006-12-01  Marek Safar  <marek.safar@gmail.com>
9147
9148         A fix for bug #80108
9149         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
9150         compatible.
9151
9152 2006-11-30  Marek Safar  <marek.safar@gmail.com>
9153
9154         Fixes unary operators implementation (part I)
9155         Also fixes #80026
9156
9157         * cfold.cs (Error_CompileTimeOverflow): Made internal
9158
9159         * const.cs (IConstant): Changed to use reference to constant and
9160         not constant itself.
9161         Updated IConstant implementations.
9162
9163         * constant.cs (CreateConstant): New factory method.
9164         Updated IConstant implementation.
9165
9166         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
9167
9168         * ecore.cs: Updated to use CreateConstantReference.
9169
9170         * enum.cs: Reflects IConstant changes.
9171
9172         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
9173
9174         * literal.cs (NullConstant): Change to be independently usable.
9175
9176 2006-11-29  Martin Baulig  <martin@ximian.com>
9177
9178         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
9179         we need to emit the scope initializer before calling the base .ctor.
9180
9181         * anonymous.cs: Merged back from the new anonymous methods branch.
9182         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
9183
9184         * expression.cs (ParameterReference.DoResolveBase): Create a
9185         "normal" ScopeInfo when capturing parameters rather than using the
9186         root scope; this makes things work with anonymous methods having
9187         parameters.
9188
9189         * statement.cs
9190         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
9191
9192 2006-11-22  Marek Safar  <marek.safar@gmail.com>
9193
9194         A fix for bug #79987
9195         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
9196         check to a base class.
9197         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
9198         only when assembly has missing attribute.
9199         * report.cs: Update.
9200
9201 2006-11-21  Marek Safar  <marek.safar@gmail.com>
9202
9203         * cs-tokenizer.cs: Merged with gmcs version.
9204
9205 2006-11-20  Marek Safar  <marek.safar@gmail.com>
9206
9207         * cs-tokenizer.cs,
9208         * cs-parser.jay: Better error message when partial keyword is misplaced.
9209
9210 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
9211
9212         A fix for bug #79810
9213         report.cs: CS1058 only applies to 2.0 profile (gmcs).
9214         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
9215         a RuntimeWrappedException by default.
9216
9217 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9218
9219         A fix for bug #79843
9220         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
9221         implementation.
9222         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
9223
9224 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9225
9226         * driver.cs, namespace.cs: Uses faster IndexOf version.
9227
9228 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9229
9230         A fix for bug #79941
9231         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9232         operators.
9233         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9234         even if internal name is different.
9235         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9236         (UserDefinedConversion): Simplified as the operators cannot be internal.
9237         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9238         conversions.
9239         (MethodLookup): Replaced EmitContext with parentType.
9240         * expression.cs: Updated.
9241
9242 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9243
9244         * driver.cs (BadAssembly): Handle all the ugliness of
9245         DefineDynamicAssembly.
9246
9247 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9248
9249         Address parts of #58244 -- most of what's left is in the runtime
9250         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9251         CS1509 error checks, and handle them for all assembly loads, not
9252         just the first invocation.
9253         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9254         * codegen.cs (AssemblyClass.AddModule): ... here.
9255
9256 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9257
9258         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9259         IEnumerable<T> is ambiguous.
9260
9261 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9262
9263         A fix for bug #67689
9264         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9265         GetEnumerator is ambiguous.
9266
9267         * report.cs: Add new warning.
9268
9269 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9270
9271         A fix for bug #78602
9272         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9273         to protected member can be nested type.
9274
9275 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9276
9277         A fix for bug #78965
9278         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9279         to protected member must derive from current type.
9280
9281 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9282
9283         assign.cs: Reuses error method.
9284
9285         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9286         instead of type for constants.
9287         (Expression.Error_ValueAssignment): Common error method.
9288
9289         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9290         for any assignment.
9291
9292 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9293
9294         A fix for bug #79081
9295         * expression.cs (MemberAccess.DoResolve): Check nested type
9296         accessibility.
9297
9298 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9299
9300         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9301
9302 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9303
9304         A fix for bug #76591
9305         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9306
9307 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9308
9309         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9310         type forwarder of the same type multiple times.
9311
9312 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9313
9314         Fix #78820
9315         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9316         instance as an rvalue, even when we later resolve as an lvalue.
9317
9318 2006-10-25  Martin Baulig  <martin@ximian.com>
9319
9320         * anonymous.cs: Fix #79673.
9321
9322 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9323
9324         A fix for bug #79666
9325         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9326         ignored when is optimized (= default value) as its value is already set.
9327
9328 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9329
9330         A fix for bug #79724
9331         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9332         TypeContainer for type lookup.
9333
9334 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9335
9336         A fix for bug #79231
9337         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9338         * expression.cs (OverloadResolve): Always convert type name for
9339         an error message.
9340         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9341         other member.
9342
9343 2006-10-18  Martin Baulig <martin@ximian.com>
9344
9345         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9346
9347 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9348
9349         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9350         an int32, but requesting an int64 from the conversion
9351
9352 2006-10-12  Martin Baulig  <martin@ximian.com>
9353
9354         * anonymous.cs
9355         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9356         
9357 2006-10-12  Martin Baulig  <martin@ximian.com>
9358
9359         * statement.cs
9360         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9361
9362 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9363
9364         * convert.cs: Remove broken code: I was doing the "Existance"
9365         tests for Implicit conversions.
9366
9367 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9368
9369         * convert.cs: Added one missing case in
9370         ImplicitStandardConversionExists uint64 to intptr.
9371
9372         Fixes #59800
9373         
9374         * typemanager.cs (uintptr_type): another core known type.   
9375
9376         * ecore.cs (OperatorCast): routine used to do cast operations that
9377         depend on op_Explicit.  We could change some of the Decimal
9378         conversions to use this.
9379
9380         This one has a probe mechanism that checks both types for an op_
9381         which it coudl be used to eliminate two classes: CastToDecimal
9382         and CastFromDecimal.
9383
9384         * convert.cs: Implement the conversions documented in #59800
9385         
9386 2006-10-10  Martin Baulig  <martin@ximian.com>
9387
9388         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9389         before RootScope.ResolveMembers().
9390
9391         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9392         `CurrentType' if appropriate.
9393
9394 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9395
9396         A fix for bug #78568
9397         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9398         when contains binary operators.
9399         * cs-parser.jay: Updated.
9400
9401 2006-10-09  Martin Baulig  <martin@ximian.com>
9402
9403         * delegate.cs
9404         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9405         moved that into Define() and also do the other type parameter
9406         checks there.  Fixes #79094.  Added gtest-292.cs.
9407
9408         * expression.cs
9409         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9410         since that doesn't include type parameters; don't use `Ldelema'
9411         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9412
9413 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9414
9415         A fix for #77796
9416         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9417         conversion is allowed.
9418
9419 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9420
9421         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9422         error reporting when no error occurs.
9423
9424 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9425
9426         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9427         does not exist.
9428
9429 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9430
9431         Fix #79584
9432         * class.cs (DefineTypeBuilder): Check circular dependencies before
9433         setting the parent of the TypeBuilder.
9434         (CheckRecursiveDefinition): Don't use 'BaseType', since
9435         it may not be valid until after DefineTypeBuilder.  Use
9436         'base_type' instead.
9437
9438 2006-10-04  Martin Baulig  <martin@ximian.com>
9439
9440         Merged the Anonymous Methods patch.
9441
9442         * anonymous.cs, iterators.cs: The new anonymous methods code.
9443
9444         * statement.cs (Variable): New public abstract class.
9445         (LocalInfo.Variable): New public property.
9446         (LocalInfo.ResolveVariable): New public method.
9447         (Block.Flags): Add `IsIterator'.
9448         (Block.AddVariable): Improved the CS0136 check.
9449         (Block.AnonymousChildren): New public property.
9450         (Block.AddAnonymousChild): New public method.
9451         (ToplevelBlock): Update to use the new anonymous method framework.
9452         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9453         `ToplevelBlock'; this is required to correctly implement the
9454         CS0136 check.
9455         (Fixed, Using): Use `TemporaryVariable' instead of directly
9456         creating the `LocalBuilder'.
9457
9458         * parameter.cs (Parameter.ResolveVariable): New public method.
9459         (Parameters.ResolveVariable): Likewise.
9460
9461         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9462
9463         * class.cs (TypeContainer): Replaced the `iterators' list and
9464         corresponding methods with a list of `CompilerGeneratedClass'es.
9465         (TypeContainer.ResolveMembers): New public method.
9466         (Method): `IIteratorContainer' has been replaced by
9467         `IAnonymousHost'.
9468
9469         * expression.cs (VariableReference): New public abstract base
9470         class for `LocalVariableReference', `ParameterReference' and
9471         `This'.
9472
9473         * codegen.cs (EmitContext): Removed `capture_context',
9474         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9475         (EmitContext.EmitThis): Removed.
9476
9477         * cs-parser.jay: Replace `iterator_container' with
9478         `anonymous_host'.       
9479
9480 2006-10-04  Martin Baulig  <martin@ximian.com>
9481
9482         * generic.cs (GenericMethod): Don't make this abstract.
9483         (Constraints.Clone): Added dummy implementation.
9484
9485 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9486
9487         Fix #79577
9488         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9489         'declspaces'.  Avoid allocating arrays willy-nilly.
9490
9491         Fix #79553
9492         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9493         cases out of the switch.
9494
9495 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9496
9497         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9498         message when non-generic type is used with the type arguments.
9499         * expression.cs: Updated.
9500
9501 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9502
9503         Fix #79013
9504         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9505         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9506         Change semantics slightly.  Don't insist on having only one
9507         temporary EmptyExpression -- just throttle the creation of new ones.
9508
9509         Fix #79451
9510         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9511         non-interfaces too.  If no methods are found, don't try to create
9512         a MethodGroupExpr.
9513
9514 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9515
9516         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9517         generic type.
9518
9519         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9520         us produce better error message.
9521
9522 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9523
9524         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9525         of the `|' operator.
9526
9527         * report.cs: A new warning added.
9528
9529 2006-09-27  Martin Baulig  <martin@ximian.com>
9530
9531         * generic.cs (GenericMethod): Don't make this abstract.
9532
9533 2006-09-27  Martin Baulig  <martin@ximian.com>
9534
9535         * report.cs
9536         (InternalErrorException): Added overloaded ctor taking a params array.
9537
9538 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9539
9540         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9541         Fixed the cases when same error was reported twice.
9542
9543         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9544         now report symbol information.
9545
9546 2006-09-25  Martin Baulig  <martin@ximian.com>
9547
9548         * class.cs: Completely unified with the gmcs version.
9549
9550 2006-09-25  Martin Baulig  <martin@ximian.com>
9551
9552         * typemanager.cs (TypeManager.IsNullableType): New public function.
9553         (TypeManager.IsNullableTypeOf): Likewise.
9554         (TypeManager.IsNullableValueType): Likewise.
9555
9556         * class.cs (MethodCore): Added the `GenericMethod' argument from
9557         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9558
9559 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9560
9561         * convert.cs: Unify with gmcs version.
9562
9563 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9564
9565         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9566         verify them as well.
9567
9568         * report.cs: New warning.
9569
9570 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9571
9572         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9573         for anonymous block with out argument.
9574
9575 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9576
9577         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9578         not used private events only.
9579
9580 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9581
9582         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9583
9584         * const.cs (Const.Define): Check for constant type.
9585         (Const.IsConstantTypeValid): Looks for valid constant types.
9586
9587         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9588
9589         * ecore.cs (EmptyConstantCast): New common class for all constant based
9590         EmptyCast(s).
9591
9592         * expression.cs (Is.DoResolve): Handle null constant especially.
9593         (New.DoResolve): Check for new void().
9594         (MemberAccess.DoResolve): Cope with all kind of nulls.
9595
9596         * literal.cs (NullConstant): Uses EmptyConstantCast.
9597         (NullDefault): Based on EmptyConstantCast.
9598         (NullLiteral): Uses EmptyConstantCast.
9599
9600         * statement.cs (Block.ResolveMeta): Check for constant type.
9601
9602 2006-09-22  Martin Baulig  <martin@ximian.com>
9603
9604         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9605
9606 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9607
9608         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9609         not the null type.
9610
9611         Fix part of #79451
9612         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9613         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9614         code slightly.
9615
9616 2006-09-22  Martin Baulig  <martin@ximian.com>
9617
9618         * ecore.cs: Merged with the gmcs version.
9619
9620         * generic.cs (ConstructedType): New dummy class.
9621         (TypeArguments): Don't make this abstract.
9622
9623         * typemanager.cs
9624         (TypeManager.IsGenericTypeDefinition): New method.
9625         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9626
9627 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9628
9629         * expression.cs (ComposedCast): Check for arrays of TypedReference
9630         before creating the type, not after.
9631
9632 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9633
9634         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9635         after ToType change.
9636
9637         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9638         when constant must be implicitly convertible.
9639
9640         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9641
9642         * ecore.cs (NullCast): Derives from NullConstant.
9643
9644         * expression.cs (Is.DoResolve): Removed useless variables.
9645         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9646         (New.Constantify): Add enum support.
9647         (MemberAccess.DoResolve): Add warning when accessing null constant or
9648         variable.
9649
9650         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9651         property.
9652
9653         * literal.cs (NullConstant): New abstract class with common
9654         functionality for all null specializations.
9655         (NullDefault): Represents default(X) when result can be
9656         reduced to null.
9657         (NullLiteral): Updated.
9658
9659         * report.cs: Add new warning.
9660
9661 2006-09-21  Martin Baulig  <martin@ximian.com>
9662
9663         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9664
9665 2006-09-21  Martin Baulig  <martin@ximian.com>
9666
9667         * generic.cs (GenericConstraints): New dummy class.
9668         (Constraints): Likewise.
9669         (TypeParameter): Likewise.
9670         (TypeParameterName): Likewise.
9671         (GenericMethod): Likewise.
9672
9673         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9674
9675         * decl.cs: Merged with the gmcs version.
9676
9677 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9678
9679         * generic.cs (TypeParameter): Implement IMemberContainer.
9680         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9681
9682         * rootcontext.cs: Unify with gmcs version.
9683
9684         * report.cs: Unify with gmcs version.
9685         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9686         from gmcs/generics.cs.
9687         * generics.cs (TypeParameter): New dummy class.
9688
9689         * support.cs: Unify with gmcs version.
9690
9691 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9692
9693         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9694         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9695
9696         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9697         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9698         * mcs.exe.sources: Add generic.cs.
9699
9700         * codegen.cs: Unify with gmcs version.
9701
9702         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9703         (EmitContext): Add GenericDeclContainer implementation.
9704         * decl.cs (MemberCore, DeclSpace): Likewise.
9705         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9706
9707         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9708         MCS TypeManager has a corresponding dummy method.
9709
9710 2006-09-19  Martin Baulig  <martin@ximian.com>
9711
9712         * expression.cs: Completely merged with the gmcs version.
9713
9714 2006-09-19  Martin Baulig  <martin@ximian.com>
9715
9716         * expression.cs (Invocation): Merged with the gmcs version.
9717         (ArrayAccess.GetStoreOpcode): Likewise.
9718
9719 2006-09-19  Martin Baulig  <martin@ximian.com>
9720
9721         * typemanager.cs
9722         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9723         (TypeManager.IsGenericMethodDefinition): Likewise.
9724
9725 2006-09-19  Martin Baulig  <martin@ximian.com>
9726
9727         * typemanager.cs
9728         (TypeManager.IsEqual): Moved the gmcs implementation here.
9729         (TypeManager.DropGenericTypeArguments): Likewise.
9730         (TypeManager.DropGenericMethodArguments): Likewise.
9731         (TypeManager.GetTypeArguments): Moved here from gmcs.
9732         (TypeManager.HasGenericArguments): Likewise.
9733
9734 2006-09-19  Martin Baulig  <martin@ximian.com>
9735
9736         * expression.cs (Binary): Merged with the gmcs version.
9737
9738 2006-09-19  Martin Baulig  <martin@ximian.com>
9739
9740         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9741
9742 2006-09-19  Martin Baulig  <martin@ximian.com>
9743
9744         * typemanager.cs: Merged with the gmcs version.
9745
9746 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9747
9748         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9749         * driver.cs: Likewise.
9750
9751 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9752
9753         A fix for #79401
9754         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9755         only if parent type is class.
9756         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9757         update.
9758
9759 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9760
9761         * cs-parser.jay,
9762         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9763         keywords are used.
9764         * typemanager.cs(CSharpName): Converts NullType to null.
9765
9766 2006-09-15  Martin Baulig  <martin@ximian.com>
9767
9768         * typemanager.cs
9769         (TypeManager.GetMethodName): Added mcs implementation.
9770         (TypeManager.IsEqual): Likewise.
9771
9772         * ecore.cs
9773         (SimpleName.RemoveGenericArity): Added dummy implementation.
9774
9775         * pending.cs: Merged with the gmcs version.     
9776
9777 2006-09-15  Martin Baulig  <martin@ximian.com>
9778
9779         * statement.cs: Merge with the gmcs version.
9780
9781 2006-09-15  Martin Baulig  <martin@ximian.com>
9782
9783         * statement.cs (Switch): Merge with the gmcs implementation
9784         (without nullables), which is newer.
9785
9786 2006-09-15  Martin Baulig  <martin@ximian.com>
9787
9788         * statement.cs (Block.Variables): Make this public.
9789         (ToplevelBlock.Parameters): Make this a property.
9790         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9791
9792 2006-09-15  Martin Baulig  <martin@ximian.com>
9793
9794         * namespace.cs: Merge with the gmcs version.
9795
9796 2006-09-15  Martin Baulig  <martin@ximian.com>
9797
9798         * decl.cs (MemberName): Minor code cleanups.
9799
9800 2006-09-15  Martin Baulig  <martin@ximian.com>
9801
9802         * parameter.cs: Merge with the gmcs version.
9803
9804 2006-09-15  Martin Baulig  <martin@ximian.com>
9805
9806         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9807         and an error in mcs.
9808
9809 2006-09-15  Martin Baulig  <martin@ximian.com>
9810
9811         * flowanalysis.cs: Merged from GMCS; added the generics code into
9812         a `GMCS_SOURCE' conditional so we can share this file.
9813
9814 2006-09-08  Martin Baulig  <martin@ximian.com>
9815
9816         * typemanager.cs (TypeManager.interlocked_type): New public field.
9817         (TypeManager.int_interlocked_compare-exchange): New public field.
9818         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9819         enumerator types here and call InitGenericCoreTypes().
9820         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9821         after calling InitEnumUnderlyingTypes().
9822
9823         * rootcontext.cs
9824         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9825         `classes_second_stage'. 
9826
9827 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9828
9829         * assign.cs, ecore.cs, expression.cs: Share error message text.
9830         * class.cs (FieldMember.Define): Check for varible of static type.
9831         * driver.cs (LoadAssembly): Uses error output for errors.
9832         * statement.cs: Updated.
9833
9834 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9835
9836         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9837         type instance.
9838
9839 2006-09-07  Martin Baulig  <martin@ximian.com>
9840
9841         * driver.cs
9842         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9843
9844 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9845
9846         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9847         
9848 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9849
9850         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9851         #52019 and #79064, the use of the \uXXXX sequence in source code
9852         to represent unicode characters.
9853
9854 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9855
9856         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9857         support.
9858         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9859
9860 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9861
9862         * assign.cs: Catch attempts to assign to a method groups in += and
9863         report as 1656
9864
9865 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9866
9867         A fix for #79056
9868         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9869
9870 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9871
9872         * class.cs (Method.Define): Issue a warning when generic method looks like
9873         an entry point.
9874         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9875         as well.
9876
9877 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9878  
9879         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9880         looking for ctor.
9881         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9882         search all base interfaces as a member can be ambiguous.
9883         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9884         Constructor member type filter. 
9885         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9886         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9887         reporting for returned memberinfos.
9888         * report.cs: Updated.
9889         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9890         version to work on all runtimes.
9891         (TypeManager.RealMemberLookup): Removed members filtering.
9892
9893 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9894
9895         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9896         (PropertyExpr.EmitAssign): Likewise.
9897         * expression.cs (Indirection.EmitAssign): Likewise.
9898         (LocalVariableReference.EmitAssign): Likewise.
9899         (ParameterReference.EmitAssign): Likewise.
9900         (Invocation.EmitArguments): Likewise.
9901         (ArrayAccess.EmitAssign): Likewise.
9902         (IndexerAccess.EmitAssign): Likewise.
9903         (This.EmitAssign): Likewise.
9904         (ConditionalLogicalOperator.Emit): Likewise.
9905
9906         Fix #79026
9907         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9908         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9909         leave it in after returning it.
9910         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9911
9912 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9913
9914         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9915         message.
9916
9917 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9918
9919         Fix cs0146-3.cs and cs0146-4.cs.
9920         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9921         enclosing types don't depend on the current type.
9922
9923 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9924
9925         Fix #77963
9926         * class.cs (TypeContainer.DoDefineMembers): Use
9927         FindBaseMemberWithSameName on Parent, since we're interested in
9928         whether we hide inherited members or not.
9929         (FindBaseMemberWithSameName): Make slightly more robust.
9930
9931         Fix the non-generic testcase from #77396
9932         * decl.cs (DeclSpace.DeclContainer): Remove override.
9933
9934         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9935         declspaces for doppelgangers too.
9936         (UsingEntry): Implement IResolveContext.
9937         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9938         'this' as the resolve context.
9939         (LocalAliasEntry): Likewise.
9940
9941         Implement parts of #77403
9942         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9943         toplevel declaration space.  Each namespace declaration introduces
9944         a "partial" root declaretion space.
9945         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9946         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9947         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9948         from 'current_namespace.SlaveDeclSpace'.
9949         (namespace_declaration): Likewise.
9950         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9951         check.  It can't happen now.
9952         * decl.cs (DeclSpace.LookupType): Likewise.
9953         * driver.cs (MainDriver): Sanity check.
9954
9955 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9956
9957         * decl.cs (DeclSpace.FindNestedType): Remove.
9958         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9959         LookupTypeContainer to get the container of the nested type.
9960         * class.cs (TypeContainer.FindNestedType): Make non-override.
9961
9962 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9963
9964         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9965         * class.cs (TypeContainer.PartialContainer): ... here.
9966         (TypeContainer.AddBasesForPart): New helper.
9967         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9968         instead.
9969         * cs-parser.jay (current_class): Convert to DeclSpace.
9970         (struct_declaration, interface_declaration, class_declaration):
9971         Use AddBasesForPart instead of .Bases directly.
9972         * const.cs, iterators.cs: Update to changes.
9973
9974 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9975
9976         * class.cs (TypeContainer.AddMemberType): Rename from
9977         AddToTypeContainer.
9978         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9979         (AddTypeContainer): New.  Combine AddClassOrStruct and
9980         AddInterface.
9981         (AddPartial): Update.  Add 'is_partial' argument.
9982         * roottypes.cs: Update to changes.
9983         * cs-parser.jay (push_current_class): New helper for handling
9984         current_container and current_class.
9985         (struct_declaration, interface_declaration, class_declaration):
9986         Use it.
9987
9988 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9989
9990         * roottypes.cs: Rename from tree.cs.
9991
9992         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9993         * tree.cs (Tree, ITreeDump): Remove types.
9994         * rootcontext.cs (tree, Tree): Remove fields.
9995         (root, ToplevelTypes): New.
9996         * *.cs: Update to rename.
9997
9998         * tree.cs (Tree.RecordDecl): Remove.
9999         (RootTypes.AddToTypeContainer): Record the toplevel type in its
10000         namespace here.
10001         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
10002
10003 2006-07-23  Raja R Harinath  <harinath@gmail.com>
10004
10005         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
10006         DoFlowAnalysis and OmitStructFlowAnalysis here.
10007         (ec.With): Rename from WithUnsafe and generalize.
10008         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
10009         (ec.WithFlowAnalyis): New.
10010         * ecore.cs, expression.cs, statement.cs: Update.
10011
10012 2006-07-22  Raja R Harinath  <harinath@gmail.com>
10013
10014         * statement.cs (Block.ResolveMeta): Simplify slightly.
10015
10016         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
10017         multiple boolean fields.  Convert InUnsafe, constant_check_state,
10018         check_state to flags.
10019         (CheckState, ConstantCheckState): Update.
10020         (InUnsafe): New read-only property.
10021         (FlagsHandle): Rename from CheckStateHandle and convert to handle
10022         arbitrary flags.
10023         (WithUnsafe): New helper similar to WithCheckState.
10024         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
10025         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
10026
10027 2006-07-21  Raja R Harinath  <rharinath@novell.com>
10028
10029         Make comparisons use the same IL irrespective of whether they're
10030         in a 'checked' or 'unchecked' context: one of the issues in #78899
10031         * codegen.cs (EmitContext.CheckState): Make read-only property.
10032         (EmitContext.ConstantCheckState): Likewise.
10033         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
10034         helper that implement a save/restore stack for CheckState
10035         values.  This is the only way to change check-state.
10036         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
10037         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
10038         (CheckedExpr.EmitBranchable): New forwarding method.
10039         (UnCheckedExpr): Likewise.
10040         * statement.cs (Block.ResolveMeta): Use WithCheckState.
10041         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
10042         (Checked.Resolve, checked.DoEmit): Likewise.
10043
10044 2006-07-20  Miguel de Icaza  <miguel@novell.com>
10045
10046         * anonymous.cs: Cache the resolved anonymous delegate, and return
10047         this so that the ResolveTopBlock is only triggered once, not
10048         twice.
10049
10050         Currently we trigger ResolvetopBlock twice due to a first pass of
10051         argument check compatibility, and a second pass that does the
10052         actual resolution.   
10053         
10054 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10055
10056         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
10057         modifiers.
10058         * rootcontext.cs (Reset): Add helper_classes.
10059
10060 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10061
10062         A fix for #78860
10063         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
10064         correctly.
10065
10066 2006-07-13  Miguel de Icaza  <miguel@novell.com>
10067
10068         * statement.cs (Lock): Handle expressions of type
10069         TypeManager.null_type specially.  Fixes #78770
10070
10071 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10072
10073         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
10074         to an event.
10075
10076 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10077
10078         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
10079         for accessors as well.
10080         * ecore.cs (EventExpr): Add AccessorTable.
10081
10082 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
10083
10084         A fix for #78738
10085         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
10086         for CS0122 where appropriate.
10087         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
10088         level attributes.
10089         (Filter): Assembly can be null in the case of top level attributes.
10090
10091 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
10092
10093         A fix for #78690
10094
10095         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
10096         is done at global level.
10097
10098 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10099
10100         A fix for #77002, Implemented TypeForwarder support.
10101
10102         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
10103         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
10104         * typemanager.cs (): Add type_forwarder_attr_type.
10105
10106 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10107
10108         * report.cs: Add CS0469 warning.
10109
10110 2006-06-21  Martin Baulig  <martin@ximian.com>
10111
10112         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
10113         the `try'-block, so we also report CS0016 etc. there.
10114
10115 2006-06-21  Martin Baulig  <martin@ximian.com>
10116
10117         * delegate.cs
10118         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
10119
10120 2006-06-21  Martin Baulig  <martin@ximian.com>
10121
10122         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
10123         also report CS1686 for parameters.
10124
10125 2006-06-21  Martin Baulig  <martin@ximian.com>
10126
10127         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
10128         instead of an error if the value is not implicitly convertible to
10129         the switch types; fixes #77964.
10130
10131 2006-06-21  Raja R Harinath  <rharinath@novell.com>
10132
10133         Fix #78673
10134         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
10135         FieldBuilder is null.
10136
10137         Fix #78662
10138         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
10139         'left' and 'right' before error-checking.
10140
10141 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
10142
10143         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
10144         Fixed bug #78601.
10145         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
10146         (FieldExpr.DoResolve): likewise.
10147         (PropertyExpr.InstanceResolve): likewise.
10148         (EventExpr.InstanceResolve): likewise. 
10149
10150 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
10151
10152         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
10153         attribute applicable tests for attribute argument.
10154
10155 2006-06-02  Raja R Harinath  <rharinath@novell.com>
10156
10157         Fix #78079
10158         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
10159         (Binary.OverloadResolve_PredefinedIntegral): New.
10160         (Binary.OverloadResolve_PredefinedFloating): New.
10161         (Binary.OverloadResolve_PredefinedString): New.
10162         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
10163         Follow the standard more closely, and treat numeric promotions in
10164         terms of overload resolution.
10165         (Binary.CheckShiftArguments): Simplify.
10166
10167 2006-06-01  Raja R Harinath  <rharinath@novell.com>
10168
10169         * flowanalysis.cs (MyBitVector): Simplify representation.
10170         (MyBitVector.Clone): Avoid allocating BitArray.
10171         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
10172         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
10173         (*): Update.  Change all references to MyBitVector.And and
10174         MyBitVector.Or to &= and |=.
10175
10176 2006-05-29  Raja R Harinath  <rharinath@novell.com>
10177
10178         Fix cs0231-[34].cs.
10179         * cs-parser.jay (formal_parameter_list): Extend the pattern below
10180         to param arguments too.
10181
10182 2006-05-26  Miguel de Icaza  <miguel@novell.com>
10183
10184         * cs-parser.jay: Catch another parsing form for arglist being
10185         followed by other arguments.  Fixes #78313.
10186
10187 2006-05-24  Raja R Harinath  <rharinath@novell.com>
10188
10189         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
10190         checking of out parameters to ...
10191         (FlowBranchingToplevel.Merge): ... here.
10192         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
10193         set, propagate the origin upward, and only complain if there was
10194         no other error.
10195         (FlowBranchingException.AddContinueOrigin): Likewise.
10196         (FlowBranchingException.AddReturnOrigin): Likewise.
10197         (FlowBranchingException.AddGotoOrigin): Likewise.       
10198
10199 2006-05-23  Raja R Harinath  <rharinath@novell.com>
10200
10201         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
10202         unreachable, skip it.
10203         (FlowBranchingException.Merge): Always propagate jumps, even if
10204         the finally block renders subsequent code unreachable.
10205
10206 2006-05-18  Raja R Harinath  <rharinath@novell.com>
10207
10208         Fix #77601
10209         * statement.cs (Goto.Resolve): Move responsibility for resolving
10210         'goto' to FlowBranching.AddGotoOrigin.
10211         (Goto.SetResolvedTarget): New.  Callback to set the
10212         LabeledStatement that's the target of the goto.
10213         (Goto.DoEmit): Use Leave instead of Br when crossing an
10214         unwind-protect boundary.
10215         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
10216         LookupLabel and adjust to new semantics.
10217         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
10218         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
10219         Goto.SetResolvedTarget to update target.
10220         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
10221         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
10222         AddBreakOrigin & co.  Delay propagation until ...
10223         (FlowBranchingException.Merge): ... this.
10224
10225         * statement.cs (Block.Resolve): Always depend on flow-branching to
10226         determine unreachability.  Kill workaround that originally emitted
10227         only one statement after an "unreachable" label (see infloop in
10228         test-515.cs).
10229
10230         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10231         This is still "wrong", but anything better would probably need a
10232         multi-pass algorithm.
10233         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10234         usage vector.  Force current usage vector to be reachable, to
10235         optimistically signify backward jumps.
10236         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10237         detected.
10238         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10239         detected, return the original salted-away usage vector instead,
10240         updated with appropriate changes.  Print unreachable warning if
10241         necessary.
10242         * statement.cs (Block.Resolve): Don't print unreachable warning on
10243         a labeled statement.
10244
10245 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10246
10247         * driver.cs: Pass filename without path to AssemblyBuilder's 
10248         AddResourceFile. Fixes bug #78407.
10249
10250 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10251
10252         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10253         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10254         (FlowBranching.MergeChild): Overwrite
10255         reachability information from Labeled branchings too.
10256
10257 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10258
10259         * statement.cs (Goto.Resolve): Merge jump origins here ...
10260         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10261
10262         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10263         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10264         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10265         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10266         here, ...
10267         * statement.cs (Goto.Resolve): ... not here.
10268         (Goto.Emit): Remove CS1632 check.
10269
10270 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10271
10272         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10273         error message.
10274
10275 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10276
10277         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10278         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10279         (FlowBranchingException.Label): Likewise.
10280
10281         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10282         given value.
10283         (MyBitVector.Or): Use it to avoid losing information (Count).
10284         (FlowBranching.MergeOrigins): Likewise.
10285
10286         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10287         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10288         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10289         (UsageVector.ToString): Simplify.
10290         (UsageVector.MergeSiblings): Move here from ...
10291         (FlowBranching.Merge): ... here.
10292         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10293         not a MyBitVector.
10294
10295 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10296
10297         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10298         null bitvector is treated as all-true.
10299
10300         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10301         (MyBitVector): Rationalize invariants.  'vector != null' implies
10302         that we have our own copy of the bitvector.  Otherwise,
10303         'InheritsFrom == null' implies all inherited bits are true.
10304
10305 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10306
10307         * statement.cs (LocalInfo): Add IsConstant.
10308         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10309         local variable for constants.
10310
10311 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10312
10313         * flowanalysis.cs (MyBitVector.Empty): New.
10314         (MyBitVector): Don't allow InheritedFrom to be null.
10315         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10316         (UsageVector, FlowBranching): Update to changes.
10317
10318         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10319         recursion.  The 'Parent == null' condition isn't sufficient for
10320         anonymous methods.
10321         (FlowBranching.AddBreakOrigin): Likewise.
10322         (FlowBranching.AddContinueOrigin): Likewise.
10323         (FlowBranching.AddReturnOrigin): Likewise.
10324         (FlowBranching.StealFinallyClauses): Likewise.
10325         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10326         (FlowBranching.CheckOutParameters): Likewise.
10327         (FlowBranchingToplevel): Terminate all the above recursions here.
10328         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10329         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10330
10331         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10332         toplevel block.
10333         (FlowBranchingToplevel): New.  Empty for now.
10334         (FlowBranching.MergeTopBlock): Update.
10335         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10336         branching for the anonymous delegate.
10337         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10338
10339         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10340         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10341         information at the start of the merge.  Reorganize.
10342
10343 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10344
10345         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10346
10347 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10348
10349         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10350         to newly introduced ctor.
10351
10352         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10353         message to one place.
10354         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10355         global namespace.
10356
10357 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10358
10359         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10360
10361         * ecore.cs (Expression.ResolveAsConstant): Updated.
10362
10363         * statement.cs (ResolveMeta): Updated.
10364
10365 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10366
10367         * cs-parser.jay: __arglist cannot be used in initializer.
10368
10369 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10370
10371         A fix for #77879
10372         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10373         private types.
10374
10375 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10376
10377         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10378         (LabeledStatement): Add 'name' parameter.
10379         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10380         (Block.AddLabel): Update to changes.
10381         * cs-parser.jay (labeled_statement): Likewise.
10382
10383         * flowanalysis.cs (BranchingType.Labeled): New.
10384         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10385         (FlowBranchingLabeled): New.  Does nothing for now, but will
10386         eventually handle 'goto' flows.
10387         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10388         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10389         that's terminated ...
10390         (Block.Resolve): ... here.
10391
10392         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10393         (UsageVector.MergeFinallyOrigins): Likewise.
10394         (FlowBranching.InTryOrCatch): Likewise.
10395         (FlowBranching.AddFinallyVector): Likewise.
10396         (FlowBranchingException): Update to changes.
10397
10398         Fix #78290
10399         * statement.cs (Return.Resolve): Move error checking to ...
10400         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10401         (FlowBranchingException): Handle return origins like break and
10402         continue origins.
10403         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10404
10405 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10406
10407         A fix for #76122
10408         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10409         filter.
10410
10411 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10412
10413         A fix for #77543
10414         * class.cs (MethodData.Define): Do public accessor check only when method
10415         implements an interface.
10416
10417 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10418
10419         Remove special handling of 'break'
10420         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10421         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10422         (UsageVector.Break): Remove.
10423         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10424         reachability.
10425         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10426
10427         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10428         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10429
10430 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10431
10432         A fix for #75726
10433         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10434         be the interface member.
10435
10436 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10437
10438         A fix for #60069
10439         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10440         for emitting small (int) values.
10441
10442 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10443
10444         Fix #59427
10445         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10446         control-flow passes through the 'finally' after merging-in all the
10447         control-flows from 'try' and the 'catch' clauses.
10448
10449         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10450         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10451         always true at the only non-recursive entry point.
10452         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10453         FlowBranchingBreakable.
10454         (FlowBranchingLoop): Remove.
10455         * statement.cs (Return.DoResolve): Update to changes.
10456
10457         Fix #76471, #76665
10458         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10459         (FlowBranching.CreateBranching): Handle it: create a
10460         FlowBranchingContinuable.
10461         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10462         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10463         except that it handles the 'continue' command.
10464         (FlowBranching.UsageVector.MergeOrigins): Rename from
10465         MergeBreakOrigins.
10466         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10467         except that it overrides AddContinueOrigin.
10468         (FlowBranchingException): Override AddContinueOrigin, similar to
10469         AddBreakOrigin.
10470         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10471         Create a new branching around the embedded statement.
10472         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10473         control flow after the embedded statement.
10474         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10475
10476         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10477         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10478         FlowBranchingBreakable.
10479         (FlowBranchingSwitch): Remove.
10480
10481         Fix test-503.cs
10482         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10483         error reporting to ...
10484         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10485         Rename from 'AddBreakVector'.  Add new location argument.  Return
10486         a bool indicating whether the 'break' crosses an unwind-protect.
10487         (FlowBranchingException.AddBreakOrigin): Add.
10488         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10489         flowbranching after updating with the effects of the 'finally'
10490         clause.
10491         (FlowBranchingBreakable): New common base class for
10492         FlowBranchingLoop and FlowBranchingSwitch.
10493
10494         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10495         embedded statement.
10496         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10497
10498 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10499
10500         * statement.cs (Do.Resolve): If the loop is infinite, set the
10501         barrier.
10502         (While.Resolve, For.Resolve): Set a barrier after the embedded
10503         statement.  There's no direct control flow that goes from the end
10504         of the embedded statement to the end of the loop.
10505         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10506         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10507         above ensure that the reachability is correctly computed.
10508
10509         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10510         (UsageVector.MergeBreakOrigins): If the current path is
10511         unreachable, treat it as if all parameters/locals are initialized.
10512         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10513         infinite loops before merging-in break origins.
10514
10515         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10516         (Reachability.Reachable): Split part into ...
10517         (Reachability.Unreachable): ... this.  Simplify.
10518         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10519
10520         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10521         (Reachability.SetThrowsSometimes): Likewise.
10522         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10523         TriState.Always, use corresponding property.
10524         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10525         (Block.Resolve): Likewise.  Remove some redundant checks.
10526
10527 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10528
10529         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10530         (Reachability.Meet): Don't bother checking AlwaysThrows --
10531         barrier is always set.
10532         (FlowBranchingBlock.Merge): Likewise.
10533
10534 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10535
10536         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10537         checks for unreachable.
10538
10539 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10540
10541         A fix for #77980
10542         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10543
10544         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10545         whether field is really assigned.
10546
10547 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10548
10549         * flowanalysis.cs (Reachability): Make 4-argument constructor
10550         private.
10551         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10552         (Reachability.Always): Rename from the highly misleading
10553         'Reachability.Never'.
10554         (FlowBranching.Merge): Update to changes.  Mark an impossible
10555         situation with a 'throw'.
10556         (*): Update to changes.
10557
10558 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10559
10560         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10561         Remove 'Undefined'.
10562         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10563         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10564         (*): Update to changes.
10565         * statement.cs: Update to changes.
10566
10567 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10568
10569         A fix for #78049
10570         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10571
10572 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10573
10574         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10575         dummy UsageVector.
10576
10577         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10578         argument to two arguments: an usage-vector and a bool.  Move call
10579         to FlowBranching.Merge () ...
10580         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10581
10582         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10583         handling of loop and switch reachability to ...
10584         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10585
10586 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10587
10588         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10589         handling to FlowBranchingLoop.InLoop.
10590         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10591
10592 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10593
10594         A fix for #78115
10595         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10596         anonymous method is allowed from AnonymousContainer here.
10597
10598         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10599
10600 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10601
10602         Fix #78156
10603         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10604
10605 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10606
10607         A fix for #49011.
10608         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10609         (DoubleConstant.Reduce): Ditto.
10610
10611 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10612
10613         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10614         Remove 'lvalue_right_side' argument.  Move parts to ...
10615         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10616         (LocalVariable.DoResolveLValue): ... these.
10617
10618 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10619
10620         Fix cs1655.cs
10621         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10622         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10623         (LocalVariableReference.DoResolveBase): Use it to implement new
10624         CS1655 check.
10625         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10626         (Argument.Resolve): Simplify.  Move CS1510 check ...
10627         * ecore.cs (Expression.ResolveLValue): ... here.
10628         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10629         (PropertyExpr.DoResolveLValue): Likewise.
10630         (FieldExpr.Report_AssignToReadonly): Likewise.
10631         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10632         LValueMemberAccess or LValueMemberOutAccess on instance depending
10633         on it.
10634         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10635         DoResolve as appropriate.
10636
10637 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10638
10639         Fix #75800
10640         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10641         implicit conversions on 'out' and 'ref' arguments.
10642
10643         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10644         improve clarity.  Remove dead code.
10645
10646         Fix #66031
10647         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10648         (Catch.Resolve): Resolve VarBlock if it exists.
10649
10650 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10651
10652         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10653         twice, this was some residual code, the enumerator was emitted
10654         properly in the two branche of if later.
10655
10656 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10657
10658         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10659         cast is never an lvalue.
10660         (Cast.DoResolve, Cast.ResolveRest): Combine.
10661         (Argument.Emit): Simplify slightly.  Move 'Expr is
10662         IMemoryLocation' check ...
10663         (Argument.Resolve): ... here.
10664         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10665
10666         Simplifications.  Fix cs0191-2.cs
10667         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10668         CS1649 and CS1651 to ...
10669         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10670         the actual selection of the error code and message to a lookup
10671         table.  Add a dummy return value to simplify callsites.
10672         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10673         readonly fields of other instances of the same type.  Move CS0197
10674         warning from ...
10675         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10676         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10677         resolution of an out or ref argument.  The code simplification
10678         above uses this invariant.
10679
10680 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10681
10682         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10683         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10684         CheckMarshallByRefAccess.  Drop parameter.
10685         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10686         warning.
10687         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10688         InstanceExpression.
10689         * report.cs (AllWarnings): Add CS1690.
10690         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10691         for ref access too.
10692         (LocalVariableReference.DoResolveBase): Update.
10693
10694 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10695
10696         * class.cs (MethodOrOperator): Moved common parts from method class.
10697         detect obsolete attributes.
10698         (Method.Define): Simplified as it reuses code from base.
10699         (Constructor.ValidAttributeTargets): Fixed issue found during
10700         refactoring.
10701         (Destructor.ValidAttributeTargets): Fixed issue found during
10702         refactoring.
10703         (Operator): Finished refactoring set off by #78020. Operator class is now
10704         ordinary method class.
10705
10706         * anonymous.cs: Updated.
10707
10708         * decl.cs (DeclSpace): Add IsGeneric
10709
10710 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10711
10712         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10713
10714 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10715
10716         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10717         detect obsolete attributes.
10718         (Method.CreateEmitContext): Moved to MethodOrOperator.
10719
10720 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10721
10722         A fix for #78048.
10723         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10724         customized exception to make crash detection easier.
10725         (MethodOrOperator): Started to work on new base class for methods and
10726         operators.
10727         (Method): Derives from MethodOrOperator.
10728         (Constructor.Emit): Emits its own attributes.
10729         (AbstractPropertyEventMethod.Emit): Ditto.
10730         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10731         patch.
10732         (Operator.Emit): It's temporary more tricky than should be.
10733         
10734         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10735
10736         * report.cs (InternalErrorException): Add ctor with inner exception.
10737
10738 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10739
10740         A fix for #76744.
10741         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10742         only not visible.
10743
10744 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10745
10746         A fix for #77916.
10747         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10748         array.
10749
10750 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10751
10752         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10753         attribute is present and Guid not.
10754         (Interface.ApplyAttributeBuilder): Ditto.
10755
10756         * attribute.cs: Add error message.
10757
10758 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10759
10760         A fix for #78020.
10761
10762         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10763         sources (it's composite) so hold them in extra array as they are used in
10764         Emit phase only. It worked in the previous versions by mistake.
10765         (Attribute.Emit): Emit attribute for more owners when exist.
10766
10767         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10768         it has now different behaviour.
10769
10770 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10771
10772         * constant.cs (Constant.IsDefaultInitializer): New method.
10773
10774         * class.cs: Updated.
10775
10776         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10777         re-initialize default values. It saves KBs almost for every assembly.
10778         Thanks Zoltan for the idea.
10779         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10780         (ArrayCreation.DoResolve): Resolve only once.
10781         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10782         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10783
10784 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10785
10786         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10787         From #77961.
10788
10789 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10790
10791         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10792         in an embedded statement too.
10793
10794 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10795
10796         Fix #77958
10797         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10798
10799 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10800
10801         A fix for #77966.
10802
10803         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10804         was not specified.
10805
10806         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10807
10808 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10809
10810         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10811         phase.
10812
10813         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10814         LocalTemporary change.
10815
10816         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10817         TypeContainer.
10818         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10819         initializers optimization.
10820         (ClassOrStruct.TypeAttr): Moved from modifiers.
10821         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10822         (FieldBase.ResolveInitializer): Resolves initializer.
10823         (FieldBase.HasDefaultInitializer): New property.
10824
10825         * cs-parser.jay: Removed message.
10826
10827         * expression.cs (CompilerGeneratedThis): New specialization.
10828
10829         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10830
10831 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10832
10833         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10834
10835 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10836
10837         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10838         be now EnumConstants only.
10839
10840 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10841
10842         * attribute.cs, driver.cs: Reset more caches.
10843
10844 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10845
10846         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10847
10848 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10849
10850         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10851         for easier reuse. Updated all overrides.
10852         (IntegralConstant): New base class for all integral constants.
10853         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10854         of the constant range, report custom error.
10855         (UIntConstant.Reduce): Fixed uint conversion.
10856
10857         * ecore.cs, literal.cs: Reduce updates.
10858
10859 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10860
10861         A fix for #75813.
10862
10863         * class.cs (Constructor.Define): Removed extra if for default ctors.
10864         A patch from Atsushi Enomoto.
10865
10866 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10867
10868         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10869         GetAttributableValue.
10870
10871         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10872         when required.
10873
10874         * convert.cs (ImplicitConversionRequired): Error message moved to
10875         DoubleLiteral.
10876
10877         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10878         automatic implicit conversion of an output value.
10879         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10880
10881         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10882         conversion.
10883         (TypeOf.GetAttributableValue): Add extra handling for object type.
10884
10885         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10886         special error message.
10887
10888 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10889
10890         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10891         InternalCall.
10892         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10893         compatible with MS runtime.
10894
10895 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10896
10897         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10898         attribute arguments here.
10899
10900         * class.cs (Indexer.Define): The check was moved to attribute class.
10901
10902 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10903
10904         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10905         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10906         easier.
10907
10908 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10909
10910         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10911         mcs to keep code differences small.
10912         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10913         * typemanager.cs (parameter_default_value_attribute_type): New.
10914         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10915         CS1908 check.
10916
10917 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10918
10919         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10920
10921 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10922
10923         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10924
10925         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10926         the blocks too.
10927
10928 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10929
10930         * doc-bootstrap.cs : fix build.
10931
10932 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10933
10934         * expression.cs (StringConcat.Append): Issue a warning when empty string
10935         is going to append.
10936
10937 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10938
10939         * assign.cs (CompoundAssign.ResolveSource): Removed.
10940
10941         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10942         clean up.
10943
10944         * class.cs (TypeContainer.FindMethods): Removed.
10945         (TypeContainer.CheckMemberUsage): Made static.
10946
10947         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10948
10949         * constant.cs (CheckRange): Removed unused type argument.
10950         (CheckUnsigned): Removed unused type argument.
10951
10952         * cs-parser.jay: Updated after MemberAccess clean up.
10953         Uses Length for empty string test.
10954
10955         * cs-tokenizer.cs: Uses Length for empty string test.
10956         (IsCastToken): Made static.
10957         (is_hex): Made static.
10958         (real_type_suffix): Made static.
10959
10960         * decl.cs (SetupCache): Made static.
10961         (OnGenerateDocComment): Removed unused ds argument.
10962
10963         * delegate.cs (VerifyDelegate): Removed unused argument.
10964
10965         * doc.cs: Uses Length for empty string test.
10966
10967         * driver.cs: Uses Length for empty string test.
10968
10969         * enum.cs (IsValidEnumType): Made static
10970
10971         * expression.cs (EnumLiftUp): Removed unused argument.
10972         (ResolveMethodGroup): Ditto.
10973         (BetterConversion): Ditto.
10974         (GetVarargsTypes): Ditto.
10975         (UpdateIndices): Ditto.
10976         (ValidateInitializers): Ditto.
10977         (MemberAccess.ctor): Ditto.
10978         (GetIndexersForType): Ditto.
10979
10980         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10981
10982         * iterators.cs: Updated after MemberAccess clean up.
10983
10984         * location.cs: Uses Length for empty string test.
10985
10986         * namespace.cs: Uses Length for empty string test.
10987
10988          * report.cs (CheckWarningCode): Made static.
10989
10990         * statement.cs (LabeledStatement): Removed unused argument.
10991
10992         * typemanager.cs (FilterNone): Removed.
10993
10994 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10995
10996         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10997         obsolete.
10998
10999         * class.cs: Updated.
11000
11001 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11002
11003         * cs-parser.jay.cs: __arglist is not allowed for delegates.
11004
11005 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11006
11007         A fix for #77822.
11008
11009         * expression.cs (VerifyArgumentsCompat): Reverted to double error
11010         reporting, it's more tricky than I thought.
11011
11012 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11013
11014         A fix for #77816.
11015
11016         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
11017         host container.
11018         (AnonymousMethod.ImplicitStandardConversionExists): New method.
11019         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
11020         Add more error reporting; Fixed issue with params.
11021
11022         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
11023
11024         * cs-parser.jay: AnonymousMethod requires host container.
11025
11026         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
11027
11028 2006-03-18  Raja R Harinath  <harinath@gmail.com>
11029
11030         * class.cs: Change 'TypeContainer ds' constructor argument to
11031         'DeclSpace parent'.  Some classes were missed below due to
11032         different naming convention.
11033
11034         * class.cs (MemberCore.Parent): Delete.  This makes the
11035         ParentContainer changes below enforceable by the compiler.
11036
11037         Treat pointers to enclosing declaration space as 'DeclSpace', not
11038         'TypeContainer'.
11039         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
11040         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
11041
11042         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
11043         of TypeContainer.
11044         (Block.AddThisVariable): Likewise.
11045         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
11046         (AbstractPropertyEventMethod.Emit): Likewise.
11047         (AbstractPropertyEventMethod.EmitMethod): Likewise.
11048         (GetMethod.Define, SetMethod.Define): Likewise.
11049         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
11050         (DelegateMethod.EmitMethod): Likewise.
11051
11052         Fix regression test-partial-13.cs.
11053         Rationalize use of PartialContainer.  Ensure that the partial
11054         class semantics can be tied to type-correctness, i.e., any
11055         violation will cause a compile error.
11056         * class.cs, const.cs: Access all fields that belong to class
11057         TypeContainer via ParentContainer.  Arguments of EmitContexts and
11058         Resolve()-like functions still use 'Parent'.
11059
11060         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
11061         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
11062         (PropertyMethod.CheckModifiers): Remove unused argument.
11063         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
11064         DeclSpace.
11065
11066 2006-03-17  Raja R Harinath  <harinath@gmail.com>
11067
11068         Make semantics of PartialContainer simpler.
11069         * decl.cs (DeclSpace.IsPartial): Remove.
11070         * class.cs (TypeContainer.IsPartial): Likewise.
11071         (TypeContainer..ctor): Set PartialContainer to point to self.
11072         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
11073         (TypeContainer.FindNestedType): Likewise.
11074         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
11075
11076 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
11077
11078         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
11079
11080 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11081
11082         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
11083         classes.
11084
11085 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11086
11087         * class.cs (Operator.Define): An error for base conversion was not
11088         reported correctly.
11089
11090 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
11091
11092         * iterator.cs : yield break is allowed in try statement which has
11093           catch clauses. Fixed bug #77767.
11094
11095 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
11096
11097         A fix for #77593, #77574.
11098
11099         * class.cs (MethodCore.CheckBase): Another if for operator.
11100
11101 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
11102
11103         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
11104         were not resolved
11105
11106         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
11107         (DelegateCreation.ImplicitStandardConversionExists): New method for just
11108         conversion test.
11109         
11110         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
11111         not needed.
11112
11113         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
11114         Updated after another emitcontext usage was clean up. It should help us to
11115         synchronize with gmcs easier.
11116
11117 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
11118
11119         A fix for #77353.
11120
11121         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
11122         (Event.Define): ditto
11123         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
11124
11125         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
11126         Removed redundant code and set NewSlot for Invoke method too.
11127
11128         * parameter.cs (Parameters.ctor): Add custom, type ctor.
11129         (Parameters.MergeGenerated): New method. Use this method when you merge
11130         compiler generated argument with user arguments.
11131
11132 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
11133
11134         * attribute.cs (ResolveAsTypeTerminal): Removed.
11135
11136         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
11137         specialization for predefined types; 30% speed up.
11138         Finally placed obsolete check to right place.
11139         (Expression.ResolveType): Removed.
11140
11141         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
11142         Updated after ResolveType was removed.
11143
11144         * expression.cs (Cast.ctor): Check void cast.
11145         (Binary.ResolveAsTypeTerminal): Is never type.
11146         (Conditional.ResolveAsTypeTerminal): Is never type.
11147
11148         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
11149
11150 2006-03-01  Raja R Harinath  <rharinath@novell.com>
11151
11152         Fix #77679.
11153         * expression.cs (ParameterReference.DoResolveBase): Change return
11154         type to bool.
11155         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
11156         Update.
11157
11158         Fix #77628.
11159         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
11160
11161         Fix #77642.
11162         * typemanager.cs (GetFullNameSignature): Don't nullref on
11163         protected accessors.
11164
11165 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
11166
11167         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
11168         these two separated members to simplify the code.
11169         (Attribute.Resolve): Refactored to use new fields and methods.
11170         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
11171         implemented obsolete attribute checking.
11172         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
11173         implemented obsolete checking again. It look line never ending quest ;-)
11174         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
11175
11176         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
11177
11178         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
11179
11180         *class.cs (Property.Define): Add RegisterProperty call.
11181
11182         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
11183         argument groups (only 2).
11184
11185         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
11186         encoding expression to arguments.
11187         (Expression.ExprClassToResolveFlags): Just turned to property.
11188
11189         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
11190         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
11191         optimized as well as implemented support for zero-length attributes.
11192
11193         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
11194         Add caching of PropertyInfo's.
11195
11196 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11197
11198         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
11199         error multiple times.
11200
11201 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11202
11203         New partial class implementation.
11204         A fix for #77027, #77029, #77403
11205
11206         * attribute.cs (Attributable): Made attributes protected.
11207
11208         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
11209         the replacements of ClassPart and PartialContainer.
11210         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
11211         (TypeContainer.AddInterface): Ditto.
11212         (TypeContainer.AddPartial): The main method for partial classes. It checks
11213         for errors and merges ModFlags and attributes. At the end class is added to
11214         partial_parts list.
11215         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
11216         required here.
11217         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
11218         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
11219         from the rest of partial classes.
11220         (TypeContainer.GetClassBases): Simplified.
11221         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
11222         DefineType.
11223         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
11224         (TypeContainer.HasExplicitLayout): Uses Flags now.
11225         (PartialContainer): Removed.
11226         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
11227         (StaticClass): Was merged with Class.
11228         (Class.GetClassBases): class and static class bases are verified here.
11229         (Class.TypeAttr): Added static attributes when class is static.
11230         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11231         (MemberBase): In some cases we need to call parent container for partial
11232         class. It should be eliminated but it's not easy now.
11233
11234         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11235
11236         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11237         partial classed to accumulate class comments.
11238         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11239
11240         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11241
11242         * driver.cs (MainDriver): Tree.GetDecl was removed.
11243
11244         * modifiers.cs (Modifiers): Add partial modifier.
11245
11246         * tree.cs (Tree.decl): Removed.
11247         (RootTypes): Started to use this class more often for root types
11248         specializations.
11249
11250 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11251
11252         A fix for #77615
11253
11254         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11255         external interface does not have an attribute.
11256
11257 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11258
11259         Another prerequisites for new partial classs implementation.
11260         
11261         * attribute.cs (Attribute.Equal): Implemented.
11262         (Attribute.Emit): Changed as attributes can be applied more than twice.
11263         (Attributes.Emit): Check for duplicate attributes here.
11264
11265         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11266         as a parameter, clean-up.
11267
11268 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11269
11270         A fix for #77485
11271
11272         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11273         contains obsolete attribute check which can in some cases look for base
11274         type of current class which is not initialized yet.
11275         (TypeContainer.BaseType): Replacement of ptype.
11276
11277         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11278
11279 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11280
11281         First of prerequisites for new partial classs implemention.
11282         
11283         * attribute.cs (Attributable): Extended by ResolveContext;
11284         Attributes finally have correct context for resolving in all cases.
11285         (AttachTo): Attribute owner is assigned here.
11286
11287         * codegen.cs (IResolveContext): Introduce new interface to hold
11288         all information needed in resolving phase.
11289         (EmitContext): Implements IResolveContext; more clean-up needed here.
11290         
11291         * decl.cs (MemberCore): Implemented IResolveContext.
11292
11293         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11294         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11295         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11296         Refactored to use new IResolveContext instead of EmitContext; cleanup
11297
11298 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11299
11300         * codegen.cs (EmitScopeInitFromBlock): check here the
11301         capture_context, there is no need to make two calls to the
11302         EmitContext. 
11303
11304         * anonymous.cs: Add some debugging messages that might help me
11305         track other instances of this problem in the future (the
11306         regression of test 467).
11307
11308         * cs-parser.jay: track the variable block, as we need to initalize
11309         any captured variables declared in this block for the "catch"
11310         portion of the "Try" statement.
11311
11312         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11313         scope initialization for captured variables. 
11314
11315         Also, move the emit for the variables after the block location has
11316         been marked.
11317
11318 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11319
11320         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11321
11322 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11323
11324         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11325         commit yesterday, the initialization for the roots is necessary.
11326         What is not necessary is the scope activation.
11327
11328 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11329
11330         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11331         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11332         CS0206 checks.
11333         (Argument.Resolve): Remove CS0206 checks.
11334
11335 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11336
11337         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11338         scopes for all the roots, the scopes will now be emitted when the
11339         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11340
11341         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11342         code.  This reduces a lot of existing cruft.
11343         
11344         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11345         that the ScopeInfo is generated as we enter the scope, not at the
11346         time of use, which is what we used to do before.
11347
11348         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11349         every time a Block is about to be emitted if we have a
11350         CaptureContext. 
11351
11352 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11353
11354         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11355         (Reset): Update.
11356         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11357
11358         * typemanager.cs (cons_param_array_attribute): Make private.
11359         (Reset): Set it to null.
11360         (InitCoreHelpers): Don't initialize it.
11361         (ConsParamArrayAttribute): New.  Initialize it as needed.
11362         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11363
11364 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11365
11366         * expression.cs: There might be errors reported during the
11367         selection of applicable methods.  If there are errors, do not
11368         continue execution as it will lead the compiler to crash.
11369
11370 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11371
11372         * expression.cs: Member access is not allowed on anonymous
11373         methods.  Fixes #77402.
11374
11375 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11376
11377         Fix #77401
11378         * cs-parser.jay (VariableDeclaration): Don't set
11379         current_array_type to null.
11380         (field_declaration, event_declaration, declaration_statement):
11381         Set it to null here.
11382
11383 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11384
11385         * typemanager.cs (GenericParameterPosition): New.
11386         * doc.cs: Use it.
11387
11388 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11389
11390         * doc.cs : To process "include" elements, first we should create
11391           another list than XmlNodeList, because it could result in node
11392           removal, which could result in that the XmlNodeList gives up
11393           yielding next node.
11394
11395           (Also made code identical to gmcs again.)
11396
11397 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11398
11399         * ecore.cs: Introduce an error report that we were not catching
11400         before, if not silent, we must report the error.  Gonzalo ran into
11401         it.
11402
11403 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11404
11405         A fix for bug: #76957
11406         
11407         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11408         ComputeMethodHost before creating the method, this is a new
11409         requirement. 
11410
11411         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11412         that this method references (RegisterScope).  The actual scope
11413         where the method is hosted is computed with the ComputeMethodHost
11414         before we create the method.
11415
11416         Moved the Deepest routine here.
11417
11418         (AnonymousContainer.ComputeMethodHost): New routine used to
11419         compute the proper ScopeInfo that will host the anonymous method.
11420
11421         (ScopeInfo): Deal with multiple roots.  The problem was that we
11422         did not have a unique root where all ScopeInfos could be hanged
11423         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11424         of roots.  
11425
11426         Remove AdjustMethodScope which is now computed at the end.  Remove
11427         LinkScope which did a partial link, instead link all ScopeInfos
11428         before code generation from the new "LinkScopes" routine. 
11429
11430         Simplify all the Add* routines as they no longer need to maintain
11431         the tree, they just need to record that they are using variables
11432         from a ScopeInfo.
11433
11434         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11435         routines to produce the forest of ScopeInfo trees.
11436
11437         * class.cs (TypeContainer.AppendMethod): This is just like
11438         AddMethod, but ensures that an interface implementation method
11439         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11440         methods, but at the end.
11441
11442         We use this functionality to ensure that the generated MoveNext
11443         method in the iterator class is resolved/emitted before the
11444         enumerator methods created.   
11445
11446         This is required because the MoveNext method computes the right
11447         ScopeInfo for the method.  And the other methods will eventually
11448         need to resolve and fetch information computed from the anonymous
11449         method. 
11450
11451 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11452             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11453
11454         Fix rest of #76995.
11455         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11456         the 'aliases' hash.
11457         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11458         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11459
11460 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11461
11462         Fix #76656, cs0231-2.cs.
11463         * cs-parser.jay (formal_parameter_list): Make error case catch
11464         more issues.
11465         (parenthesized_expression_0): Add CS1026 check.
11466         (invocation_expression): Remove unused { $$ = lexer.Location }.
11467
11468 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11469
11470         Fix #76824.
11471         * cs-parser.jay (statement_expression): Don't list out the
11472         individual statement-expressions.  Convert syntax error into
11473         CS0201 check.
11474
11475 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11476
11477         Fix #76874.
11478         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11479         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11480         CheckIntermediateModification.
11481         (FieldExpr.DoResolve): Add new two-argument version that
11482         allows us to resolve the InstanceExpression as an lvalue.
11483         The one-argument variant is now just a wrapper.
11484         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11485         Resolve the lhs as an lvalue if the it has a value type.
11486         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11487         from Assign.DoResolve.
11488         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11489         resolved as an lvalue.
11490         (PropertyExpr.DoResolve): Update.
11491         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11492         has a value type.  Move CS1612 check here from
11493         CheckIntermediateModification.
11494         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11495         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11496         'right_side' of a ResolveLValue on an 'out' argument.
11497         (EmptyExpression.LValueMemberAccess): New.  Used as the
11498         'right_side' of a propagated ResolveLValue on a value type.
11499         (LocalVariableReference.DoResolveBase): Recognize
11500         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11501         Add CS1654 check.
11502         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11503         EmptyExpression.Null.
11504
11505 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11506
11507         * typemanager.cs : added IsGenericParameter(). In mcs it always
11508           return false.
11509         * doc.cs : for generic parameters, use GenericParameterPosition,
11510           not FullName.
11511
11512 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11513
11514         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11515
11516 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11517
11518         This fixes the problem where we used ldfld instead of ldflda to
11519         load the "THIS" pointer on captured parameters, when THIS is a
11520         value type.  See bug #77205.
11521         
11522         * iterators.cs (CapturedThisReference.Emit): Pass false to
11523         EmitThis (we do not need the address).
11524
11525         * codegen.cs (EmitThis): it needs to know whether we need the
11526         address of `this' or not.  This is used by value types.  
11527
11528         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11529         every other call passes false.
11530
11531 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11532
11533         Fix #77221.
11534         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11535         GetOverride.
11536         * expression.cs (Invocation.OverloadResolve): Update.
11537         (Invocation.DoResolve): Avoid double resolution of invocation.
11538
11539 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11540
11541         Fix #77180.
11542         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11543         unary negation of floating point types as 0-expr; negation cannot
11544         overflow in floating point types.
11545
11546         Fix #77204.
11547         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11548         on operands of 'void' type.
11549
11550         Fix #77200.
11551         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11552         and ExclusiveOr for boolean constants too.
11553
11554 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11555
11556         Fix #75636.
11557         * expression.cs (Invocation.OverloadResolve): Replace reflected
11558         override methods with their base virtual methods, rather than
11559         skipping over them.
11560         * typemanager.cs (TypeManager.GetOverride): New.
11561
11562 2006-01-05  Jb Evain  <jbevain@gmail.com>
11563
11564         * class.cs (Property.Define, Indexer.Define): do not tag the
11565         properties as SpecialName | RTSpecialName.
11566
11567 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11568
11569         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11570         doing a low-level comparission of parameter types.  It was lacking
11571         a check for __argslist. 
11572
11573 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11574
11575         * expression.cs (ParameterReference.DoResolveBase): Allow
11576         reference parameters if they are local to this block. 
11577
11578         This allows the ref and out parameters of a delegate to be used in
11579         an anonymous method, for example:
11580
11581         delegate void set (out int x);
11582
11583         set s = delegate (out int x){
11584                 x = 0;
11585         };
11586
11587         This is used by functionality introduced late in the C# language.
11588         
11589         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11590         method that take ref and out parameters. 
11591
11592         Fixes #77119 which was a late change in the spec.
11593
11594 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11595
11596         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11597         parent if its the same scope.  Fixes #77060.
11598
11599 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11600
11601         * driver.cs: Report the case of no source files and no -out:
11602         argument provided.
11603
11604 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11605
11606         Fix #77035.
11607         * expression.cs (ComposedCast.GetSignatureForError): Define.
11608
11609 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11610
11611         Fix #76995
11612
11613         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11614         ListDictionary, to contain the ExternAliasEntry entries (in
11615         addition to the NamespaceEntry.aliases hashtable). This field is
11616         shared between the original entry and its doppelganger (bodyless 
11617         copy of it).
11618         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11619         extern_aliases field.
11620         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11621         lookup in extern_aliases.
11622
11623 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11624
11625         Fix #77006.
11626         * class.cs (TypeContainer.Mark_HasEquals): New.
11627         (TypeContainer.Mark_HasGetHashCode): New.
11628         (ClassPart): Override them.
11629         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11630
11631         Fix #77008.
11632         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11633         'parent' argument to the base constructor.
11634
11635         Remove all mention of TypeContainer from decl.cs.
11636         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11637         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11638         (DeclSpace.DeclSpace): Likewise.
11639         (DeclSpace.DefineMembers): Remove unused argument.
11640         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11641         debugging check -- we don't care if the debug code throws an
11642         InvalidCastException instead of an InternalErrorException.
11643         * class.cs (TypeContainer.DefineMembers): Update to changes.
11644         (TypeContainer.DoDefineMembers): Likewise.
11645         (TypeContainer.GetMethods): Likewise.
11646         (PropertyMember.Define): Likewise.
11647         (MemberBase.Parent): New property that forwards to
11648         MemberCore.Parent, but ensures that we get a TypeContainer.
11649         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11650         (RootContext.PopulateTypes): Likewise.  Remove special case code
11651         for !RootContext.StdLib: DefineMembers is idempotent.
11652
11653 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11654
11655         * convert.cs (ExplicitConversionCore): Check the return value from
11656         ExplicitConversionCore which can return null on failure.  Fixes #76914
11657
11658 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11659
11660         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11661
11662 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11663
11664         * doc.cs : The search for referenced namespace was insufficient to
11665           get global one as it used to do. Fixed bug #76965.
11666
11667 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11668
11669         * doc.cs : check name in cref in the last phase that whether it is
11670           namespace or not.
11671
11672 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11673
11674         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11675           Mono.C5.
11676
11677 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11678
11679         * doc.cs : so it turned out that we cannot skip override check for 
11680           interface members. Fixed bug #76954.
11681
11682 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11683
11684         * cs-tokenizer.cs : fixed bug #75984:
11685           - #warning and #error should not be handled when the source line
11686             is disabled.
11687           - #line is not checked strictly when the source line is disabled.
11688           - #define and #undef is on the other hand checked strictly at any
11689             state.
11690
11691 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11692
11693         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11694           CS1027 report.
11695
11696 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11697
11698         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11699
11700         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11701         event initializers.
11702         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11703         (FieldBase.Initializer): Initializer is now optional.
11704         (EventField.Define): Only event field can have initializer.
11705
11706         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11707
11708         * const.cs (Const): Reuse initializer.
11709
11710         * cs-parser.jay: Updated after FieldBase changes.
11711         Added current_array_type to simplify array initializers.
11712
11713         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11714
11715         * expression.cs, iterators.cs: Updated.
11716
11717         * namespace.cs (NamespaceEntry): Made UsingFound private.
11718
11719 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11720
11721         * parameterCollection.cs: Obsolete, removed.
11722         * parser.cs: Obsolete, removed.
11723
11724 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11725
11726         Fix #76849.
11727         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11728
11729         * enum.cs (Enum.Define): Set obsolete context here.
11730
11731 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11732
11733         * doc.cs :
11734           - FindDocumentedMember() now expects 1) paramList as null
11735             when "we don't have to check the number of parameters" and
11736             2) Type.EmptyTypes when "there is no arguments".
11737           - Introduced FoundMember struct to hold the exact type which was
11738             used to find the documented member (the above change broke
11739             test-xml-044; it might be better just to use DeclaringType than
11740             what MS does, like this change does, but it depends on usage.)
11741
11742 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11743
11744         * doc.cs : documented member might be from DeclaringType for nested
11745           types. Fixed bug #76782.
11746
11747 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11748
11749         * anonymous.cs: Have the param code handle leaving copies on the
11750         stack etc. Allows anonymous params to take part in the assignment
11751         code (++, +=, etc). Fixes bug #76550
11752
11753         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11754         it down to the anon code.
11755
11756         * iterators.cs: Use dummy var here
11757
11758         * codegen.cs: Handle new vars
11759
11760 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11761
11762         Fix #76849.
11763         * class.cs (MethodData.Define): Set proper Obsolete context.
11764
11765         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11766         obsolete context.
11767         (FieldExpr.DoResolve): Ditto.
11768
11769 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11770
11771         Fix #76849.
11772         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11773         parent is not obsolete.
11774
11775 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11776
11777         * doc.cs : (FindDocumentedMember) find parameterless members first
11778           and get CS0419 in the early stage. Fixed first case of bug #76727.
11779
11780 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11781
11782         Fix #76859.
11783         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11784         no error was reported.
11785
11786         *expression.cs (Binary.DoResolve): left can be null.
11787
11788 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11789
11790         Fix #76783.
11791         * class.cs (MethodData.Emit): Parameters should be labeled first.
11792
11793 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11794
11795         Fix #76761.
11796         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11797
11798 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11799
11800         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11801
11802         * class.cs (MethodCore): Parameter clean up.
11803         (IMethodData): Added ParameterInfo.
11804         (MethodData): Parameter clean up.
11805         (Indexer.Define): Parameter clean up.
11806
11807         * anonymous.cs,
11808         * codegen.cs,
11809         * cs-parser.jay,
11810         * decl.cs,
11811         * doc.cs,
11812         * ecore.cs,
11813         * flowanalysis.cs,
11814         * iterators.cs,
11815         * pending.cs,
11816         * statement.cs,
11817         * typemanager.cs: Parameter clean up.
11818
11819         * delegate.cs (Define): Get rid of duplicated code.
11820
11821         * expression.cs (ParameterReference): Removed useless parameters
11822         and simplified.
11823         (Invocation): Ditto.
11824
11825         * parameter.cs (ParamsParameter): New class, params specialization.
11826         (ArglistParameter): Attemp to separate arglist.
11827         (Parameter): Refactored to be reusable and faster.
11828         (Parameter.Modifier): Made understandable.
11829         (Parameters): Changed to be used as a class for `this' assembly
11830         parameters. Refactored to use new specialized classes.
11831
11832         * support.cs (ParameterData): Added Types property.
11833         (InternalParameters): Deleted.
11834
11835 2005-08-20  Martin Baulig  <martin@ximian.com>
11836
11837         Merging this patch from GMCS to fix #75867.
11838
11839         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11840         scope if we don't already have it.
11841
11842 2005-11-17  Martin Baulig  <martin@ximian.com>
11843
11844         * anonymous.cs
11845         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11846         inherit the scope from our parent.  Fixes #76653.
11847
11848 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11849
11850         * doc.cs : the previous patch does not actually fix the bug.
11851           PropertyInfo override check is now implemented and really fixed it.
11852         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11853
11854 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11855
11856         * doc.cs : apply "override filter" also to properties.
11857           Fixed bug #76730.
11858
11859 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11860
11861         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11862           no need to check overrides. For classes, omit those results from 
11863           interfaces since they must exist in the class. Fixed bug #76726.
11864
11865 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11866
11867         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11868           with different parameters. Fixed the second problem in #76685.
11869
11870 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11871
11872         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11873           get expected 'protected' access in CheckValidFamilyAccess()).
11874           Fixed bug #76692.
11875
11876 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11877
11878         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11879           Fixed bug #76705.  CS1569 was incorrectly commented out.
11880
11881 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11882
11883         * doc.cs : use Invocation.IsOverride() to do real override check.
11884         * expression.cs : made Invocation.IsOverride() internal.
11885
11886 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11887
11888         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11889           TypeBuilder.FindMembers() and filter overriden base members out.
11890           Fixed bug #76990.
11891
11892 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11893
11894         * doc.cs : ref/out parameters are represented as '@' (instead of
11895           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11896
11897 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11898
11899         * doc.cs : when there was no '.' in cref to methods in doc comment,
11900           then parameters were missing in the output. Fixed bug #76691.
11901
11902 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11903
11904         * driver.cs : don't output docs when there is an error.
11905           Fixed bug #76693.
11906
11907 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11908
11909         * doc.cs :
11910           Now it should detect indexers. Fixed primary concern in bug #76685.
11911           Fixed CS0419 message to not show the identical member signature in
11912           the message.
11913
11914 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11915
11916         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11917           instead of Type.FindMembers() since it does not handle events.
11918           Fixed bug #71604.
11919
11920 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11921
11922         * codegen.cs: Fixed typo (speficied -> specified).
11923
11924 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11925
11926         Fix #76369.
11927         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11928
11929 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11930
11931         * attribute.cs: Changed error message.
11932
11933         * cs-tokenizer.cs: One more check.
11934
11935 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11936
11937         * statement.cs (Block.Resolve): Ignore empty statement.
11938
11939 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11940
11941         * report.cs: Made error/warning methods more strict to avoid
11942         their misuse.
11943
11944         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11945         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11946         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11947         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11948
11949 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11950
11951         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11952         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11953
11954         * class.cs (TypeContainer.IsComImport): New property.
11955         (Constructor.Define): Create proper ctor for ComImport types.
11956
11957         * expression.cs (New.CheckComImport): Fixed.
11958
11959 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11960
11961         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11962         that a parameter has been captured does not mean that we do not
11963         have to do the rest of the processing.  This fixes the second part
11964         of #76592.  If there was another anonymous method capturing
11965         values in the past, the Scope would never be set for the second
11966         method that captured the same parameter.
11967
11968         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11969         properly manipulate the stack.   Second part of fix for #76592.
11970
11971         * expression.cs (New): Add support for invoking "new" on
11972         interfaces that have been flagged with the ComImport attribute and
11973         the CoClass.  Fixes #76637 
11974
11975         * statement.cs (Try.DoEmit): When a variable is captured, do not
11976         try to emit the vi.LocalBuilder variable as it has been captured.
11977         Create a temporary variable and store the results on the
11978         FieldBuilder.  Fixes #76642
11979
11980 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11981
11982         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11983
11984         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11985
11986         * expression.cs (Binary.DoResolve): Added && optimalization.
11987     
11988         * typemanager.cs (AddUserType): Removed useless argument.
11989
11990 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11991
11992         * statement.cs (Block.variables): Uses ListDictionary.
11993
11994 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11995
11996         Fix #75969.
11997         * class.cs (PartialContainer.EmitType): Customized to emit
11998         security attributes.
11999         (ClassPart.ApplyAttributeBuilder): Transform security attribute
12000         for partial classes.
12001
12002 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12003
12004         Fix #76599.
12005         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
12006         access has to be fixed.
12007         
12008         * typemanager.cs (IsUnmanagedType): Wrong common field type.
12009
12010 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
12011
12012         Fix #76590.
12013         * ecore.cs (NullCast.Reduce): Implemented.
12014
12015         * expression.cs (ArrayCreation.CheckIndices): Correcly check
12016         constant type.
12017         
12018         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
12019         properly.
12020         (Foreach.Resolve): Catch null properly.
12021
12022 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12023  
12024         * cs-tokenizer.cs: Warning text fix.
12025
12026         * driver.cs: AllWarningNumbers exposed on public interface.
12027
12028         * report.cs (): Reviewed warning numbers.
12029         (IsValidWarning): Use binary search.
12030
12031 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12032  
12033         * driver.cs: Implemeted resource visibility.
12034         (Resources): New class for code sharing between /res: and
12035         /linkres:
12036  
12037 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
12038
12039         Fix #76568.
12040         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
12041         folding.
12042         
12043         * convert (Convert.ImplicitReferenceConversion): NullCast holds
12044         contants only.
12045         
12046         * ecore.cs (NullCast): Child is contant only.
12047         
12048         * literal.cs (NullLiteral.Reduce): null can be converted to any
12049         reference type.
12050
12051 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
12052
12053         * driver.cs: Use Encoding.Default as default code page instead
12054           of ISO-28591.
12055
12056 2005-10-27  Raja R Harinath  <rharinath@novell.com>
12057
12058         Fix #76085.
12059         * expression.cs (Invocation.Error_InvalidArguments): Handle
12060         __arglist parameters.
12061         (Invocation.VerifyArgumentsCompat): Likewise.
12062         * support.cs (ReflectionParameters.GetSignatureForError): Print
12063         __arglist parameters.
12064         (InternalParamters.GetSignatureForError): Likewise.
12065         * parameter.cs (Parameters.GetSignatureForError): Likewise.
12066
12067 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
12068
12069         * attribute.cs (GetPropertyValue): Made public.
12070
12071         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
12072         Resolve.
12073         Add new property WrapNonExceptionThrows to handle 2.0 assembly
12074         attribute.
12075         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
12076         is not defined.
12077         
12078         * driver.cs: Reflect method name change.
12079         
12080         * statement.cs (Try.Resolve): Warn when try has both general
12081         exception handlers.
12082         
12083         * typemanager.cs: runtime_compatibility_attr_type new predefined
12084         type.
12085
12086 2005-10-26  Raja R Harinath  <harinath@gmail.com>
12087
12088         Fix #76419.
12089         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
12090         treat it as an empty parameter list.
12091
12092 2005-10-26  Raja R Harinath  <rharinath@novell.com>
12093
12094         Fix #76271.     
12095         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
12096         ResolveAsTypeStep silent.
12097         * statement.cs (Block.AddConstant): Mark block as used.
12098         (Block.ResolveMeta): Avoid piling on error messages
12099         if a constant initializer resolution fails.
12100
12101 2005-10-25  Raja R Harinath  <rharinath@novell.com>
12102
12103         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
12104         Remove.
12105         (NamespaceEntry.VerifyAllUsing): New.
12106         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
12107         behaviour.  Delegates actual resolution of alias to ...
12108         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
12109         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
12110         Update.
12111         * driver.cs (Driver.MainDriver): Update.
12112         
12113         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
12114         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
12115         property.
12116         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
12117         Remove.
12118         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
12119         RootNamespace.DefineNamespacesForAll.
12120
12121 2005-10-24  Raja R Harinath  <harinath@gmail.com>
12122
12123         * typemanager.cs (assemblies, external_aliases, modules)
12124         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
12125         (ComputeNamespaces, GetRootNamespace): Remove extra staging
12126         overhead.  Move resposibility ...
12127         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
12128         * driver.cs, attribute.cs, codegen.cs: Update to changes.
12129
12130 2005-10-23  Raja R Harinath  <harinath@gmail.com>
12131
12132         * namespace.cs (RootNamespace.all_namespaces): Renamed from
12133         cached_namespaces.  Improve usage.
12134         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
12135         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
12136         Move from GlobalRootNamespace and simplify.
12137         (RootNamespace.Global): Make instance variable.
12138         (RootNamespace.RootNamespace): Add "alias name" parameter.
12139         (GlobalRootNamespace): Simplify drastically.
12140         (Namespace.Lookup): Don't use GetNamespace.
12141         * typemanager.cs (GetRootNamespace): Rename from
12142         ComputeNamespaceForAlias.
12143         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
12144
12145 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12146
12147         * anonymous.cs (AnonymousContainer): Don't crash when container
12148         doesn't exist.
12149
12150 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12151
12152         * expression.cs (Binary.DoResolve): Warn when comparing same
12153         values.
12154
12155 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12156
12157         Fix #76486.
12158         * expression.cs (Binary.DoResolve): It looks like there are no
12159         convetsion rules in enum context.
12160
12161 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
12162
12163         Add support for extern alias qualifiers.
12164         * typemanager.cs: Move some LookupTypeReflection code
12165         to namespace.cs, to have cleaner code. Added some methods
12166         to help us keep track of the extern aliased references.
12167         * driver.cs: Add suport for extern alias assemblies on command
12168         line and check for their warnings/errors. Also keep track of the
12169         extern aliased assemblies.
12170         * namespace.cs: Move the global functionality of Namespace
12171         to GlobalRootNamespace/RootNamespace. Now the global namespace
12172         is GlobalRootNamespace.Globa. Also the code moved from 
12173         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
12174         Finally added LocalAliasEntry (AliasEntry before) and
12175         ExternAliasEntry, to handle alias statements.
12176         * cs-parser.jay: Add support in the grammar for extern alias
12177         statement.
12178         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
12179         Update callings to Namespace (now in GlobalRootNamespace).
12180
12181 2005-10-18  Raja R Harinath  <rharinath@novell.com>
12182
12183         Fix #76371.
12184         * class.cs (TypeContainer.DefineType): Move updating of
12185         topological sort earlier in the code.
12186         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
12187
12188 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
12189
12190         Fix #76273.
12191         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
12192         
12193         * constant.cs (Constant.TryReduce): Moved from Cast class.
12194         (Reduce): Made little bit more OO and fixed missing conversions.
12195         
12196         * ecore.cs (Reduce): Implemented.
12197         (Binary.EnumLiftUp): New method to upgrade values to enum values.
12198         
12199         * literal.cs (Reduce): Implemented.
12200         
12201         * class.cs: Reverted Miguel's wrong commit.
12202
12203 2005-10-14  Miguel de Icaza  <miguel@novell.com>
12204
12205         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
12206
12207 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
12208
12209         * cs-parser.jay, expression.cs : CS0214 was missing error location
12210           for constants. Fixed bug #76404.
12211
12212 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
12213
12214         Fix #76370.
12215         * convert.cs (ExplicitConversionCore): Fixed object->enum
12216         conversion.
12217
12218 2005-10-10  Raja R Harinath  <rharinath@novell.com>
12219
12220         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
12221         InstanceExpression.
12222         (PropertyExpr.EmitCall): Likewise.
12223         * expression.cs (Invocation.EmitArguments): Handle case where
12224         arguments == null.
12225         (Invocation.EmitCall): Avoid allocating temporary variable if
12226         there are no arguments.
12227
12228 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12229
12230         Fix #76323.
12231         * convert.cs (ImplicitConversionStandard): Move conversion of
12232         void* to arbitrary pointer types ...
12233         (ExplicitConversionStandard): .. here.
12234         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12235         error to always print typenames.
12236
12237 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12238
12239         * convert.cs (GetConversionOperator): Rename from
12240         GetConversionOperators.  Move operator selection code from ...
12241         (UserDefinedConversion): ... here.
12242
12243 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12244
12245         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12246         conversion.
12247
12248 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12249
12250         * assign.cs (Assign.DoResolve): Error method changed.
12251
12252         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12253         
12254         * const.cs (ResolveValue): Reset in_transit immediately.
12255         
12256         * constant.cs: Error method changed.
12257         
12258         * convert.cs: Removed useless location parameter.
12259         (ExplicitNumericConversion): Don't do double enum check.
12260         (ExplicitConversionCore): Renamed from ExplicitConversion.
12261         (ExplicitUnsafe): Extracted from ExplicitConversion.
12262         (ExplicitConversion): Uses for error reporting.
12263         
12264         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12265         error messages.
12266         (ResolveBoolean): Uses common error method.
12267         (CastToDecimal): Get rid of ec.
12268         (CastFromDecimal): Optimized.
12269         (ConvCast): Get rid of ec.
12270         
12271         * enum.cs (ResolveValue): Reset in_transit immediately.
12272         (Emit): Return after first error.
12273         
12274         * expression.cs: Convert changes.
12275         
12276         * literal.cs: Error method changed.
12277         
12278         * statement.cs: Error method changed.
12279
12280 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12281
12282         * support.cs (SeekableStreamReader.Position): Don't error out when
12283         the requested position is just beyond the end of the current
12284         buffered data.
12285
12286 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12287
12288         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12289         try to keep in sync with the byte count of the underlying Stream.
12290         However, this limits us to a window size of 2048 characters: i.e.,
12291         the maximum lookahead of our lexer/parser can be 2048 characters.
12292
12293 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12294
12295         Fix #76255.
12296         * driver.cs: Fix compilation files with full root path.
12297
12298 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12299
12300         * report.cs (SymbolRelatedToPreviousError): Format the output so
12301         it does not use an open parenthesis that is never closed. 
12302
12303         * driver.cs: Follow coding guidelines
12304
12305 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12306
12307         Fix #72930.
12308         * const.cs (Const.ResolveValue): Check for assigning non-null
12309         value to reference type.
12310
12311 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12312
12313         * anonymous.cs: Implemented ExprClassName.
12314         
12315         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12316         delegate.
12317         
12318         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12319         check.
12320         
12321         * class.cs (StaticClass.DefineContainerMembers): Report protected
12322         members as error.
12323         
12324         * codegen.cs: if(ed) PRODUCTION.
12325         
12326         * convert.cs (Error_CannotImplicitConversion): Better error
12327         distinction.
12328         
12329         * cs-parser.jay: More error checks.
12330         
12331         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12332         
12333         * driver.cs (CSCParseOption): Enabled wrong option check.
12334         
12335         * ecore.cs (Expression.ExprClassName): Turned to property.
12336         (MemberExpr.CheckIntermediateModification): For checking boxed
12337         value types     modification.
12338         
12339         * statement.cs (Fixed.Resolve): Expression type must be
12340         convertible to fixed type.
12341         (CollectionForeach.GetEnumeratorFilter,TryType):
12342         Small refactoring for easier error checking.
12343
12344 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12345
12346         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12347         attributes.
12348         
12349         * class.cs (GeneratedBaseInitializer): New class for customization
12350         compiler generated initializers.
12351         (MemberBase.DoDefine): Check Obsolete attribute here.
12352         (FieldMember.DoDefine): Ditto.
12353         
12354         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12355         constants.
12356         
12357         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12358         (MemberCore.GetObsoleteAttribute): Removed argument.
12359         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12360         (MemberCore.CheckObsoleteType): New helper.
12361         
12362         * delegate.cs,
12363         * enum.cs,
12364         * statement.cs: Updates after MemberCore changes.
12365         
12366         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12367         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12368         
12369         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12370         obsolete attribute for compiler construct.
12371         (As.DoResolve): Cache result.
12372         
12373         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12374
12375 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12376
12377         Fix #76133.
12378         * expression.cs (This.VerifyFixed): In a value type T, the type of
12379         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12380         value type R, 'this' is treated as a value parameter.
12381
12382 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12383
12384         * statement.cs (Lock): Use the TemporaryVariable class instead of
12385         manually using local variables as those do not work when variables
12386         are captured.
12387
12388         * ecore.cs: Moved the TemporaryVariable class from being a nested
12389         class inside Foreach to be a public class that can be employed in
12390         other places. 
12391
12392 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12393
12394         * cs-parser.jay: interface_accessors replaced by
12395         accessor_declarations.
12396
12397         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12398         location.
12399         
12400         * statement.cs (GotoCase.Resolve): Convert null constant to
12401         null case.
12402         (SwitchLabel.ResolveAndReduce): Ditto.
12403         (SwitchLabel.NullStringCase): Custom null stamp.
12404         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12405         
12406         typemanager.cs (CSharpSignature): Don't skip first argument
12407         for full names.
12408
12409 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12410
12411         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12412
12413         * location.cs (InEmacs): in this mode, do not report column
12414         location as it confuses Emacs.
12415
12416 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12417
12418         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12419         expression.cs, iterators.cs, literal.cs: Store constants and
12420         literals location.
12421         
12422         * class.cs (MemberBase.ShortName): Pass location.
12423         
12424         * cs-parser.jay: Some location fixes.
12425         
12426         * ecore.cs (Expression.Location): Made virtual.
12427
12428 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12429
12430         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12431         if the underlying types are the same, otherwise we need to produce
12432         code that will do the proper cast.
12433
12434         This was exposed by Marek's constant rewrite which produced
12435         invalid code for the call site:
12436
12437         enum X : long { a }
12438         void Method (X v) {}
12439
12440         Method ((X) 5)
12441
12442         This fixes test-49.cs
12443
12444 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12445
12446         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12447           Type/Object should be allowed as well. Fixed bug #75968.
12448
12449 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12450
12451         * expression.cs : (Binary.DoResolve): when one is enum constant and
12452           another is constant 0, then return enum one *as enum type*.
12453           Fixed bug 74846.
12454
12455 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12456
12457         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12458         internal.
12459
12460         Fix #75941.
12461         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12462         flow-branching for LocalVariableReferences in case we were invoked
12463         from a MemberAccess.
12464         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12465         Carved out of ...
12466         (LocalVariableReference.DoResolveBase): ... this.
12467         (MemberAccess.Resolve): Do the check that was disabled during
12468         SimpleNameResolve.
12469
12470 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12471
12472         * class.cs :
12473           (PartialContainer.Create): check abstract/sealed/static strictly
12474           but abstract/sealed can exist only at one side. Fixed bug #75883.
12475
12476 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12477
12478         Fix #75945.
12479         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12480         specified, don't default to UnmanagedType.I4.
12481
12482 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12483
12484         * expression.cs : conditional operator should check possibly
12485           incorrect assign expression. Fixed bug #75946.
12486
12487 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12488
12489         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12490           Reverting the change. gmcs is much complex than mcs on this matter.
12491
12492 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12493
12494         * cs-tokenizer.cs : To read another token ahead of the actual 
12495           consumption, use new SavedToken and cache token instead of moving
12496           back the stream with SeekableStreamReader (it seemed problematic).
12497         * cs-parser.jay,
12498           driver.cs : Thus use StreamReader directly.
12499         * support.cs : Thus removed SeekableStreamReader.
12500
12501 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12502
12503         Fix #75934.
12504         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12505         (ScopeInfo.EmitScopeType): Use it to construct field names from
12506         names of captured locals.
12507
12508         Fix #75929.
12509         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12510         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12511         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12512         (ExplicitConversion): Remove enum cases already handled by
12513         implicit conversion.  Move implicit conversion check to the beginning.
12514         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12515         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12516         Don't treat System.Enum as a struct.
12517
12518 2005-08-30  Jb Evain  <jbevain@gmail.com>
12519
12520         * attribute.cs: handles as expression in parameters.
12521
12522 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12523
12524         Fix #75802.
12525         * class.cs (TypeContainer.VerifyClsName): Don't use a
12526         PartialContainer when verifying CLS compliance.
12527         (AbstractPropertyEventMethod): Set Parent here, ...
12528         (PropertyMethod): ... not here.
12529
12530 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12531
12532         * attribute.cs : escaped attribute name should not be allowed to be
12533           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12534
12535 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12536
12537         Fix #75927.
12538         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12539         when converting a long constant to unsigned long.
12540         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12541         detect where IsApplicable and VerifyArgumentsCompat disagree.
12542
12543 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12544         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12545
12546         Fix #75848.
12547         * class.cs (TypeContainer.CanElideInitializer): New helper.
12548         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12549         can safely emitting the initializer of a field.
12550
12551 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12552
12553         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12554           allowed inside a switch (without loop). Fixed bug #75433.
12555
12556 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12557
12558         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12559         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12560
12561 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12562
12563         * driver.cs : kinda reverting the default encoding changes (not exact 
12564           revert since I noticed that "codepage:reset" might not work fine).
12565
12566 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12567
12568         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12569           Location. Now getter and setter store location correctly.
12570           (errors/cs0111-12.cs now reports the expected location.)
12571
12572 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12573
12574         * driver.cs : Use default encoding on the environment.
12575           Removed (now that) extra parameter for SeekableStreamReader.
12576         * support.cs : (SeekableStreamReader) third .ctor() argument for
12577           StreamReader is not required (always true). preamble size could
12578           be acquired in simpler and safe way.
12579
12580 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12581
12582         * cs-parser.jay: report CS0642 at warning level 3
12583           and report CS0642 for an if else statement also
12584           fixes bug #74745. Patch by John Luke (and a bit
12585           modified by me).
12586           Removed extra CS0642 warning check for "while",
12587           "for" and "fixed".
12588         * statement.cs: In Block.Resolve(), CS0642 check
12589           is reimplemented to check a sequence of an empty
12590           statement and a block.
12591
12592           Both fix bug #66777.
12593
12594 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12595
12596         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12597         detection until I fix it.
12598         
12599         * cs-tokenizer.cs: Changed error message.
12600         
12601         * cs-parser.jay: Fixed 2 error locations.
12602         
12603         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12604         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12605         properties.
12606         
12607         * enum.cs (GetSignatureForError): Fixed.
12608         
12609         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12610         method detection.
12611         
12612         * class.cs,
12613         * typemanager.cs (RegisterProperty): Removed.
12614         
12615         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12616
12617 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12618
12619         Fix #75874.
12620         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12621         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12622
12623 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12624
12625         * expression.cs : tiny fix is required for not warning positive ulong.
12626           See test-441.cs.
12627
12628 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12629
12630         * expression.cs : add CS0652 check for constant and integral
12631           expression. Fixed bug #53974.
12632
12633 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12634
12635         * expression.cs : in DoNumericPromotions(), check if there is implicit
12636           conversion overload for string (to check CS0034). Fixed bug #52492.
12637
12638 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12639
12640         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12641
12642 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12643
12644         * ecore.cs : report location when it is *not* Null.
12645
12646 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12647
12648         * codegen.cs,
12649           ecore.cs,
12650           flowanalysis.cs,
12651           expression.cs:
12652           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12653           correctly. Fixed bug #75721.
12654
12655 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12656
12657         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12658         loop that performs 'min (pos, char_count)'.
12659
12660         Fix #75862.
12661         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12662         converted value in Operator.OnesComplement.
12663
12664 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12665
12666         * anonymous.cs: If the anon method is pulled into a helper class,
12667         it needs to be `internal' not `private'. Fixes runtime behavior on
12668         msft. bug #75704
12669
12670 2005-08-20  Martin Baulig  <martin@ximian.com>
12671
12672         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12673         scope if we don't already have it.
12674
12675         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12676         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12677         fixes #75867.
12678
12679 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12680
12681         Fix #75803
12682         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12683         is a partial class.
12684
12685 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12686
12687         The big constants rewrite
12688         Fix #75746, #75685 and more
12689         As a side effect saved 1MB for MWF ;-)
12690         
12691         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12692         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12693         enum based for corlib compilation.
12694         
12695         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12696         subtractions.
12697         
12698         * class.cs (FixedField.Define): Use ResolveAsConstant.
12699         
12700         * const.cs (IConstant): Interface constants and enums.
12701         (Const.ResolveValue): New method for constant resolvning.
12702         (ExternalConstant): Constants from imported assemblies.
12703         
12704         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12705         conversion; like enums.
12706         (Constant.ToType): Converts this constant to different type.
12707         (Constant.Increment): Adds 1.
12708         
12709         * convert.cs (ImplicitConversionRequired): Simplified.
12710         
12711         * cs-parser.jay: Create EnumMember directly.
12712         
12713         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12714         
12715         * doc.cs (GenerateEnumDocComment): Removed.
12716         
12717         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12718         (ConvertIntLiteral): Removed.
12719         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12720         
12721         * enum.cs (EnumMember): Implement IConstant.
12722         (Enum.IsValidEnumConstant): Removed.
12723         (Enum.GetNextDefaultValue): Removed.
12724         (Enum.FindMembers): Updated.
12725         (Enum.GenerateDocComment): Iterate enum members.
12726         
12727         * expression.cs (Cast.TryReduce): Handle enums correctly.
12728         (New.Constantify): Made public.
12729         (MemberAccess.DoResolve): Removed contant specific if(s).
12730         
12731         * literal.cs (NullLiteral): Implement new abstract methods.
12732         
12733         * statement.cs (GotoCase.Resolve): Use new constant methods.
12734         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12735         
12736         * typemanager.cs (LookupEnum): Removed.
12737         (IsEnumType): Fixed to work with corlib.
12738         (RegisterConstant): Removed.
12739         (LookupConstant): Removed.
12740         (GetConstant): Changed to work with IConstant.
12741
12742 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12743
12744         * location.cs : Fixed overflown (>255) column number.
12745
12746 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12747
12748         First cut of the qualified-alias-member feature.
12749         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12750         token.
12751         * cs-parser.jay (DOUBLE_COLON): New token.
12752         (namespace_or_type_name): Add rule for recognizing
12753         qualified-alias-members.
12754         (primary_expression): Likewise.
12755         (element_access): Allow QualifiedAliasMember as a possible
12756         type-bearing expression.
12757         (local_variable_type, local_variable_pointer_type): Likewise.
12758         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12759         aliases in the current and enclosing namespace declarations.
12760         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12761         * decl.cs (MemberName.is_double_colon): New.
12762         (MemberName.MemberName): Add new constructor for alias-member.
12763         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12764         * expression.cs (QualifiedAliasMember): New expression type.
12765
12766 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12767
12768         * location.cs : it borked when no argument was specified.
12769
12770 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12771
12772         * location.cs : tiny ToString() format fix.
12773
12774 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12775
12776         * statement.cs : oops, it was missing.
12777
12778 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12779
12780         A set of fixes for precise line/column location.
12781
12782         * location.cs :
12783           "token" field now holds a file/line "delta", a line number offset 
12784           from the segment, and a column number. See also:
12785           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12786           December/009508.html
12787           Removed static IsNull. Use instance IsNull property instead.
12788         * cs-tokenizer.cs :
12789           For some tokens it stores Location. For Identifier it stores
12790           LocatedToken which is a pair of string name and location.
12791           Column numbers are adjusted only at getChar().
12792         * report.cs :
12793           Use Location.ToString() for reporting (it now contains column).
12794         * cs-parser.jay :
12795           Largely modified to use LocatedToken instead of
12796           string (IDENTIFIER), and to acquire Location from some tokens.
12797         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12798           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12799           codegen.cs :
12800           Now MemberName holds Location. DeclSpace.ctor() receives Location
12801           as a parameter. Removed extra parameters to all derived classes.
12802           Replaced Location.IsNull() with instance property.
12803         * assign.cs, expression.cs :
12804           Added .ctor() overload that omits Location.
12805         * attribute.cs :
12806           Added "nameEscaped" flag that indicates the identifier was escaped
12807           in the source file. This fixes bug #57047.
12808
12809 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12810
12811         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12812         New method, looking for lo-case imported cls type.
12813
12814         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12815         here.
12816
12817         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12818
12819         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12820
12821         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12822         all_imported_types.
12823         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12824
12825         Optimized to save 3.5 MB for SWF compilation.
12826
12827 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12828
12829         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12830         (PartialContainer.Create): Moved logic AddToContainer.
12831         (PartialContainer.MarkForDuplicationCheck): Shares name.
12832         
12833         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12834         place.
12835         
12836         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12837         initialization.
12838         (Namespace.GetSignatureForError): New method.
12839         
12840         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12841         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12842
12843 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12844
12845         Fix #75669.
12846         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12847         member lookup rather than qualifier_type, since qualifier_type can
12848         be null.
12849
12850 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12851
12852         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12853         enum member.
12854
12855 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12856
12857         * statement.cs: Copy the local exception into the exception
12858         captured local.  Fixes 75674
12859
12860 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12861
12862         Fix #75658.
12863         * expression.cs (Invocation.OverloadResolve): Don't report error
12864         CS1501 if error CS1502 has been reported.
12865         (New.DoResolve): Delegate CS1501 reporting to
12866         Invocation.OverloadResolve.
12867
12868         Fix #75656.
12869         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12870         invariant-meaning-in-block property in an enclosing block if
12871         necessary.
12872
12873 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12874
12875         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12876         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12877         (Switch.CheckSwitch): Just save 50kb for SWF.
12878
12879 2005-07-27  Martin Baulig  <martin@ximian.com>
12880
12881         * anonymous.cs (CaptureContext.AddField): Added
12882         `AnonymousContainer am' argument; compute its toplevel scope if
12883         it's not already computed.  Fixes #75649.
12884
12885 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12886
12887         Fix #75628.
12888         * class.cs (Constructor.Emit): Reset block to null if the block
12889         resolve fails.
12890
12891 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12892
12893         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12894
12895 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12896
12897         * class.cs (MethodData.Define): Check whether accessor implementing
12898         interface is public.
12899
12900         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12901
12902 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12903
12904         Fix #57245
12905         * namespace.cs (LookupType): Moved same type check to...
12906         
12907         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12908         with the same name.
12909
12910 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12911
12912         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12913         already found a typebuilder.
12914         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12915         MemberNames, not strings.
12916
12917         * const.cs (Error_ExpressionMustBeConst): 
12918         Rename from Error_EpressionMustBeConst.
12919         * const.cs, class.cs, statement.cd: Update.
12920
12921 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12922
12923         Fix #65573
12924
12925         * const.cs (Const.LookupConstantValue): Report missing contant expression
12926         everytime.
12927         (Error_EpressionMustBeConstant): Only one error method.
12928
12929         * class.cs, statement.c: Updated.
12930
12931 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12932
12933         * statement.cs (Block.Flags): Add back HasVarargs.
12934         (Block.flags): Make protected.
12935         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12936
12937         * typemanager.cs (types, typecontainers, user_types): Remove.
12938         (UserTypes, TypeContainers): Likewise.
12939         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12940         (CleanUp, Reset): Update.
12941         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12942         (GetNestedType): Use Type.GetNestedType.
12943         (CoreLookupType): Take two arguments, the namespace and the
12944         basename of the type.  Update to use the Namespace.Lookup
12945         mechanism.
12946         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12947         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12948         string concatenation and substring matches.
12949         * class.cs, enum.cs, delegate.cs: Update to changes.
12950
12951 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12952
12953         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12954         Expression and made virtual.
12955
12956         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12957         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12958
12959         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12960
12961         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12962         error message.
12963
12964         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12965         change.
12966
12967 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12968
12969         Fix #57707
12970         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12971         AssemblyCultureAttribute is not used on executable.
12972
12973         * rootcontext.cs,
12974         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12975
12976 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12977
12978         Fix #60638.
12979         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12980         New.  Reports CS0252/CS0253.
12981         Mostly taken from preliminary patch by Duncak Mak.
12982         (Binary.DoResolveOperator): Store results of operator lookup.
12983         Use them to detect if we need to warn about unintended reference
12984         comparisons.
12985
12986 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12987
12988         Fix #72969.
12989         * namespace.cs (Namespace.Lookup): Add back location parameter.
12990         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12991         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12992
12993         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12994         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12995         (Namespace.LookupType): ... this.
12996         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12997         of namespaces.
12998         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12999         purported to handle pointers.
13000         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
13001         CoreLookupType.
13002
13003 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
13004
13005         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
13006         type as namespace.
13007
13008 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13009
13010         * namespace.cs (Namespace.Lookup): Drop location parameter.
13011         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
13012         (NamespaceEntry.Lookup): ... this.
13013         (NamespaceEntry.Error_AmbiguousTypeReference):
13014         Move here from DeclSpace.
13015         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
13016         names ...
13017         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
13018         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
13019         Move to NamespaceEntry.
13020         * delegate.cs, expression.cs: Update to changes.
13021
13022 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
13023
13024         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
13025         CheckAttributeType and refactored.
13026         (Attribute.ResolvePossibleAttributeType): Changed to reuse
13027         ResolveAsTypeTerminal error handling.
13028         (ResolveAsTypeTerminal): Introduced because of global attributes extra
13029         handling.
13030         (GetSignatureForError): Print errors in same way.
13031
13032         * class.cs,
13033         * codegen.cs: Reflect attribute GetSignatureForError change.
13034
13035         * ecore.cs,
13036         * expression.cs: Add silent parameter to ResolveAsTypeStep.
13037
13038         * namespace.cs (UsingEntry): Refactored to make fields private.
13039
13040         * assign.cs,
13041         statement.cs: Error_UnexpectedKind has extra parameter.
13042
13043 2005-07-14  Raja R Harinath  <rharinath@novell.com>
13044
13045         * ecore.cs (IAlias): Remove.
13046         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
13047         that implement the interface.
13048         * namespace.cs (Namespace): Likewise.
13049         (Namespace.declspaces): Renamed from 'defined_names'.
13050         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
13051         DeclSpace instead of an IAlias.
13052         * tree.cs (Tree.AddDecl): Update.
13053
13054 2005-07-12  Raja R Harinath  <rharinath@novell.com>
13055
13056         * statement.cs (Block.Flags); Remove HasVarargs.
13057         (Block.HasVarargs): Move to ToplevelBlock.
13058         (Block.ThisVariable, Block.AddThisVariable): Likewise.
13059         (Block.Variables): Make protected.  Initialize variable hashtable
13060         if necessary.
13061         (Block.AddVariable): Update.
13062         (Block.Resolve): Update to changes.
13063         (ToplevelBlock.HasVarargs): New boolean.
13064         (ToplevelBlock.ThisVariable): Move here from Block.
13065         (ToplevelBlock.AddThisVariable): Likewise.
13066         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
13067         * expression.cs (This.ResolveBase): Update to changes.
13068         (ArglistAccess.DoResolve): Likewise.
13069
13070 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13071
13072         Fix #75321
13073         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
13074
13075         * class.cs (TypeContainer.VerifyMembers): Distinguish between
13076         not used and not used & assigned.
13077         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
13078
13079 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13080
13081         Fix #75053
13082         * expression.cs (Is.DoResolve): null is never provided type.
13083
13084 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
13085
13086         Fix #52496
13087         * cs-parser.jay: Less strict event error rule to catch more errors.
13088
13089 2005-07-08  Martin Baulig  <martin@ximian.com>
13090
13091         Fix test-iter-10.cs - distinguish whether we `yield' in a property
13092         gettter (allowed) or setter (not allowed).
13093
13094         * class.cs (Accessor): Implement IIteratorContainer.
13095         (Accessor.Yields): New public field.
13096         (PropertyBase.PropertyMethod.Define): Handle iterators on a
13097         per-accessor basis.
13098
13099         * cs-parser.jay
13100         (get_accessor_declaration, set_accessor_declaration): Set the
13101         `yields' flag on the accessor, not the property.
13102         (property_declaration): Do the iterators check on a per-accessor
13103         basis and not for the whole property.
13104
13105 2005-07-08  Martin Baulig  <martin@ximian.com>
13106
13107         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
13108         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
13109
13110 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
13111
13112         Fix #74975
13113         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
13114         (ExtractSecurityPermissionSet): Cope with self referencing security
13115         attributes properly.
13116
13117         * driver.cs (SetOutputFile): Made public property OutputFile.
13118
13119 2005-07-07  Raja R Harinath  <rharinath@novell.com>
13120
13121         Fix #75486.
13122         * class.cs (TypeContainer.first_nonstatic_field): Rename from
13123         has_nonstatic_fields.  Make into a FieldBase pointer.
13124         (TypeContainer.AddField): Add CS0282 check.
13125         (TypeContainer.EmitType): Update.
13126
13127 2005-07-06  Miguel de Icaza  <miguel@novell.com>
13128
13129         * cs-tokenizer.cs (consume_identifier): Do not create strings to
13130         compare if they start with __.
13131
13132 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13133
13134         * statement.cs (Switch.SwitchGoverningType): Only look at
13135         UserCasts that don't need implicit standard conversions to one of
13136         the allowed switch types (Fixes test-322.cs).
13137         (LocalInfo.Resolve): Re-enable sanity-test.
13138
13139 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
13140
13141         * cs-tokenizer.cs (consume_identifier): Detect double undescores
13142         
13143         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
13144         
13145         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
13146
13147 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13148
13149         Fix #75472.
13150         * ecore.cs (SimpleName.GetSignatureForError): Add.
13151         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
13152         (MemberAccess.GetSignatureForError): Add.
13153
13154 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
13155  
13156         The big error and warning messages review.
13157         
13158         * anonymous.cs,
13159         * assign.cs,
13160         * attribute.cs,
13161         * class.cs,
13162         * codegen.cs,
13163         * convert.cs,
13164         * cs-parser.jay,
13165         * cs-tokenizer.cs,
13166         * decl.cs,
13167         * delegate.cs,
13168         * doc.cs,
13169         * driver.cs,
13170         * ecore.cs,
13171         * enum.cs,
13172         * expression.cs,
13173         * flowanalysis.cs,
13174         * iterators.cs,
13175         * literal.cs,
13176         * location.cs,
13177         * modifiers.cs,
13178         * namespace.cs,
13179         * parameter.cs,
13180         * pending.cs,
13181         * report.cs,
13182         * rootcontext.cs,
13183         * statement.cs,
13184         * support.cs,
13185         * tree.cs,
13186         * typemanager.cs: Updated.
13187         
13188         * class.cs: (MethodCore.SetYields): Moved here to share.
13189         (PropertyMethod.Define): Moved iterator setup here.
13190         
13191         * iterators.cs: Add orig_method to have full access to parent
13192         container.
13193
13194 2005-07-05  Raja R Harinath  <rharinath@novell.com>
13195
13196         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
13197         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
13198         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
13199         variable of struct type.
13200         * expression.cs (Unary.ResolveOperator): Update to change.
13201         (Indirection.VerifyFixed): Likewise.
13202         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
13203         (ParameterReference.VerifyFixed): Value parameters are fixed.
13204         (This.VerifyFixed): Treat 'this' as a value parameter.
13205         * statement.cs (LocalInfo.IsFixed): Remove.
13206
13207 2005-07-01  Martin Baulig  <martin@ximian.com>
13208
13209         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
13210         `ec.EmitThis ()' to get the correct scope.
13211
13212 2005-07-01  Martin Baulig  <martin@ximian.com>
13213
13214         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
13215         instance is a ParameterReference; fixes #75299.
13216
13217 2005-07-01  Martin Baulig  <martin@ximian.com>
13218
13219         Reverted Marek's latest patch (r46725):
13220         - it contains structural changes which are neither mentioned in
13221           the ChangeLog nor explained anywhere; for example the additional
13222           argument of EmitContext's and Iterator's .ctor's and the
13223           TypeContainer.DefineMembers() change.
13224         - structural changes like this should go in in seperate patches
13225           and not be hidden in a huge patch which just seems to affect
13226           warnings and errors.
13227           a big and hard to understand patch.
13228         - it breaks iterators and causes regressions, for instance in
13229           test-iter-03.cs.      
13230
13231 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13232
13233         Fix #75412.
13234         * expression.cs (Indexers.map): Remove.
13235         (Indexers.Append): Filter out inaccessible setters and getters.
13236         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13237
13238         Fix #75283.
13239         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13240         Refactored from ...
13241         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13242         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13243         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13244         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13245
13246 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13247
13248         Fix #75322
13249         * class.cs (FieldBase.GetInitializerExpression): One more field
13250         for backup.
13251
13252 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13253
13254         * pending.cs: Do not define a proxy if the base method is virtual,
13255         it will be picked up by the runtime (bug 75270).
13256
13257 2005-06-08  Martin Baulig  <martin@ximian.com>
13258
13259         The big Iterators rewrite :-)
13260
13261         * iterators.cs: Rewrite this to use the anonymous methods framework.
13262
13263         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13264         before the TypeContainers; see 2test-21.cs.
13265
13266         * class.cs
13267         (TypeContainer.DefineType): Don't create a new EmitContext if we
13268         already have one (this only happens if we're an Iterator).
13269         (TypeContainer.Define): Also call Define() on all our iterators.
13270         (Method.CreateEmitContext): Added support for iterators.
13271
13272         * anonymous.cs
13273         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13274         (AnonymousContainer.CreateMethodHost): Moved here from
13275         AnonymousMethod and made abstract.
13276         (AnonymousContainer.CreateScopeType): New abstract method.
13277         (AnonymousContainer.IsIterator): New public property.
13278         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13279         get the ScopeTypeBuilder rather than manually defining it here. 
13280         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13281         iterators here.
13282
13283         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13284         before RootContext.DefineTypes().
13285
13286         * codegen.cs (EmitContext.RemapToProxy): Removed.
13287         (EmitContext.CurrentAnonymousMethod): Changed type from
13288         AnonymousMethod -> AnonymousContainer.
13289         (EmitContext.ResolveTopBlock): Protect from being called twice.
13290         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13291         (EmitContext.EmitThis): Removed the iterators hacks; use the
13292         anonymous methods framework for that.
13293
13294         * statement.cs
13295         (ToplevelBlock.Container): Make this a property, not a field.
13296         (ToplevelBlock.ReParent): New public method; move the
13297         ToplevelBlock into a new container.
13298         (Foreach.TemporaryVariable): Simplify.
13299
13300 2005-06-05  Martin Baulig  <martin@ximian.com>
13301
13302         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13303         (Block.AddTemporaryVariable): New public method; creates a new
13304         `LocalInfo' for a temporary variable.
13305         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13306         variables here.
13307         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13308         non-iterator variables.
13309
13310 2005-06-05  Martin Baulig  <martin@ximian.com>
13311
13312         * statement.cs (Foreach.TemporaryVariable): Create the
13313         LocalBuilder in the Emit phase and not in Resolve since in some
13314         situations, we don't have an ILGenerator during Resolve; see
13315         2test-19.cs for an example.
13316
13317 2005-06-04  Martin Baulig  <martin@ximian.com>
13318
13319         **** Merged r45395 from GCS ****
13320
13321         The big Foreach rewrite - Part II.
13322
13323         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13324         with `PropertyInfo ienumerator_getcurrent'.
13325
13326         * codegen.cs (VariableStorage): Removed.
13327
13328         * statement.cs
13329         (Foreach): Derive from Statement, not ExceptionStatement.
13330         (Foreach.CollectionForeach): New nested class.  Moved all the code
13331         dealing with collection foreach here.
13332         (Foreach.ForeachHelperMethods): Removed.
13333         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13334
13335 2005-05-23  Martin Baulig  <martin@ximian.com>
13336
13337         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13338         don't need to.  Fix #75014.
13339
13340 2005-05-20  Martin Baulig  <martin@ximian.com>
13341
13342         Merged r44808 from GMCS.
13343
13344         * class.cs (TypeContainer.CircularDepException): Removed.
13345         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13346         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13347         (CS0146) and interface (CS0529) dependencies here.
13348
13349 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13350
13351         * expression.cs (Invocation.EmitCall): Fix initialization
13352         'this_call' to reflect current behaviour.  Fix indentation.
13353
13354         * convert.cs (FindMostEncompassedType): Add two trivial special
13355         cases (number_of_types == 0 || number_of_types == 1).
13356         (FindMostEncompasingType): Likewise.
13357
13358 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13359
13360         Some cleanups preparing for the fix of #75283.
13361         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13362         error testing.
13363         (EventExpr.InstanceResolve): Likewise.
13364         (EventExpr.DoResolve): Remove redundant checks.
13365
13366 2005-06-10  Duncan Mak  <duncan@novell.com>
13367
13368         * cs-tokenizer.cs (process_directives): New flag for controlling
13369         the processing of preprocessor directives.
13370         (x_token): After seeing a '#', return Token.NONE instead of going
13371         to handle_preprocessing_directive() when not processing
13372         directives. This avoids unnecessary processing during the token peek in
13373         is_punct().
13374
13375         This fixes #74939.
13376
13377         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13378         the existing error reporting methods instead of Report.Error.
13379
13380         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13381         after Raja's rewrite.
13382
13383 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13384
13385         * class.cs: Small fix.
13386
13387 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13388
13389         Fix #75160.
13390         * class.cs (GetPartialBases): Fix return value check of
13391         part.GetClassBases.
13392
13393 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13394
13395         Ensure that partial classes are registered in their enclosing
13396         namespace.  Initial part of fix of #75160.
13397         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13398         Register declspace with namespace here, not in
13399         DeclSpace.RecordDecl.
13400         * cs-parser.jay: Pass namespace to RecordDecl.
13401         * class.cs (PartialContainer.Create): Likewise.
13402         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13403         called.
13404         * decl.cs (Declspace.RecordDecl): Remove.
13405         * namespace.cs (NamespaceEntry.DefineName): Remove.
13406
13407 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13408
13409         * rootcontext.cs: Reset TargetExt as well.
13410
13411 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13412
13413         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13414         -langversion:ISO-1.
13415
13416 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13417
13418         Fix #75080, cs0119.cs.
13419         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13420         of ...
13421         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13422         allowing ExprClass.Type and ExprClass.Namespace for
13423         ResolveFlags.VariableOrValue.
13424         (Expression.Resolve) [1-argument variant]: Change default resolve
13425         flags based on language version.
13426         (Expression.Error_UnexpectedKind): Use a simple string array
13427         rather than an ArrayList.
13428         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13429         not ExprClass.Type.
13430         (TypeOfVoid.DoResolve): Likewise.
13431         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13432         flags argument -- it always has the same value.
13433
13434 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13435
13436         Fix #75081.
13437         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13438         Use it in the error message.
13439         * assign.cs, expression.cs, statement.cs: Update.
13440
13441 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13442
13443         Fix #75088.
13444         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13445         the "almostMatchedMember" case too.
13446         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13447         that failed the accessibility checks to 'almost_match'.
13448
13449 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13450
13451         * attribute.cs: Use internal MethodBuilder methods to set
13452         ExactSpelling and SetLastError on PInvoke methods, instead
13453         of passing them via charset.  Fixes #75060.
13454
13455 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13456
13457         * parameter.cs (Parameter): Remove TODO comment.
13458         (Parameter.DefineParameter): Remove Location parameter.
13459         (Parameters.LabelParameters): Likewise.
13460         * class.cs (Constructor.Emit): Update to change.
13461         (MethodData.Emit): Likewise.
13462         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13463         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13464
13465 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13466
13467         * parameter.cs,
13468           Removed Parameters.Location and added Parameter.Location instead.
13469           Removed Location parameter from Emit() and GetSignature().
13470         * anonymous.cs,
13471           class.cs,
13472           cs-parser.jay,
13473           delegate.cs,
13474           iterators.cs,
13475           statement.cs :
13476           Modified all related calls.
13477
13478 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13479
13480         Improve user-defined conversion handling.
13481         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13482         applicable operators.
13483         (AddConversionOperators): New.  Helper for GetConversionOperators.
13484         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13485         there is only one most encompassed/encompassing type.
13486         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13487         "applicable operator" handling.
13488         (UserConversion): Move cache here from GetConversionOperators.
13489         Directly cache the chosen operator, rather than the whole
13490         MethodGroup.
13491         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13492         case.  Allow conversion of decimal to sbyte and byte too.
13493         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13494         New static methods.  Used to avoid allocating EmptyExpressions in
13495         convert.cs.
13496
13497 2005-05-24  Duncan Mak  <duncan@novell.com>
13498
13499         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13500         another class, used in Convert.ExplicitNumericConversion.
13501         (CastToDecimal): New class, similar to above, but casts to
13502         System.Decimal, used in Convert.ImplicitNumericConversion and also
13503         in explicit convesion from double/float to decimal.
13504
13505         * convert.cs (ImplicitNumericConversion): Handle implicit
13506         conversions to System.Decimal.
13507         (ExplicitNumericConversion): handle explicit conversions to
13508         System.Decimal.
13509
13510         This fixes #68711.
13511         
13512 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13513
13514         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13515         know the type at this stage, just break through.   Fixes #75008 
13516
13517 2005-05-19  Martin Baulig  <martin@ximian.com>
13518
13519         * delegate.cs
13520         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13521         to disable error reporting.
13522
13523         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13524         here since we don't want to report an error; see the new test-336.cs.
13525
13526 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13527
13528         * statement.cs (ToplevelBlock.GetParameterReference)
13529         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13530         Move here from class Block.
13531         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13532         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13533
13534 2005-05-18  Martin Baulig  <martin@ximian.com>
13535
13536         Fix #74978.
13537
13538         * flowanalysis.cs
13539         (FlowBranching.Reachability): Add non-static public And() and Or()
13540         methods.
13541         (FlowBranchingSwitch): New class; do the `break_origins' thing
13542         like in FlowBranchingLoop.
13543         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13544         reachability, not just locals and parameters.
13545         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13546         switch; MergeBreakOrigins() now takes care of that.
13547
13548 2005-05-18  Martin Baulig  <martin@ximian.com>
13549
13550         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13551         a loop and may leave it, reset the barrier; fixes #74974.
13552
13553 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13554         
13555         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13556         is back.
13557         
13558         * cs-parser.jay: Catch more lexical errors.
13559         
13560         * report.cs: Add one more Error method.
13561         
13562         * rootcontext.cs,
13563         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13564
13565 2005-05-17  Martin Baulig  <martin@ximian.com>
13566
13567         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13568         #70970. 
13569
13570 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13571
13572         Fix test-382.cs.  Emit values of decimal constants.
13573         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13574         Carved out of ...
13575         (TypeContainer.AddField): ... this.
13576         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13577         with initializers to include 'Const's.
13578         (ClassPart.RegisterFieldForInitialization): Forward to
13579         PartialContainer.
13580         * const.cs (Const.Const): Pass initializer to base class.
13581         (Const.Define): In case of decimal constants, register them for
13582         initialization in a static constructor.
13583
13584 2005-05-14  Martin Baulig  <martin@ximian.com>
13585
13586         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13587         do not call ResolveUnreachable() on unreachable statements in
13588         here, see the comment in the source code.
13589
13590 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13591
13592         Fix #74934.
13593         * expression.cs (BinaryResolveOperator): If one of the operands of
13594         an equality comparison is 'null' and the other is a pointer type,
13595         convert the null to a NullPointer.
13596         * convert.cs (ImplicitReferenceConversion): If the expression is a
13597         NullLiteral and the target type is a pointer type, return a
13598         NullPointer instead.
13599         (ImplicitConversionStandard): Likewise.
13600
13601 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13602         
13603         * cs-parser.jay: Set readonly context based on special constructs.
13604         
13605         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13606         readonly variable error handling.
13607         
13608         * rootcontext.cs (EmitCode): Don't verify members when error
13609         occurred.
13610         
13611         * statement.cs (LocalInfo): Add reaodnly context information.
13612         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13613
13614 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13615
13616         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13617         for #74041 to initialize 'resolved' to false only for explicit
13618         blocks.  Fixes #74873.
13619
13620 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13621
13622         Fix #74920.
13623         * typemanager.cs (unmanaged_enclosing_types): New.
13624         (IsUnmanagedType): Avoid infloops by using
13625         'unmanaged_enclosing_types' to talk with recursive invocations.
13626
13627 2005-05-13  Martin Baulig  <martin@ximian.com>
13628
13629         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13630         instance variable, not a local.  Fix #74873.
13631         (Block.ResolveUnreachable): Set it to true here.
13632
13633 2005-05-11  Duncan Mak  <duncan@novell.com>
13634
13635         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13636         continuing to process for 'arg'.
13637         (handle_preprocessing_directive): Check the argument of the #endif
13638         directive and report error CS1025 if there are any trailing
13639         characters.
13640
13641         According to the C# spec, having even whitespace after the #endif
13642         directive is illegal; however, because we call arg.TrimEnd ()
13643         beforehand, we have the same behavior as csc, allowing whitespace
13644         after the directive.
13645
13646         Fixes #74892.
13647
13648 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13649
13650         Fix #74863.
13651         
13652         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13653         (Constructor.GetObsoleteAttribute): Implemented correctly.
13654
13655 2005-05-10  Martin Baulig  <martin@ximian.com>
13656
13657         * support.cs (ReflectionParameters.ParameterModifier): Use
13658         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13659         and `ParameterAttributes.In'.  Fixes #74884.
13660
13661 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13662
13663         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13664         
13665         * expression.cs (Argument.GetParameterModifier): Turned to property.
13666         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13667         
13668         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13669         its C# equivalent.
13670         
13671 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13672
13673         Fix #74852.
13674         * decl.cs (MemberCache.AddMethods): Register override methods,
13675         rather than non-override methods.
13676         * typemanager.cs (RegisterOverride): New.
13677         (IsOverride): Update.
13678
13679 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13680
13681         Fix #73105.
13682         
13683         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13684         recursive declaration.
13685         
13686         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13687         
13688 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13689
13690         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13691         
13692         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13693
13694 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13695
13696         Fix #74797.
13697         * decl.cs (DeclSpace.FamilyAccessible): 
13698         Use TypeManager.IsNestedFamilyAccessible.
13699
13700         Fix reopened #64812.
13701         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13702         internal'.
13703
13704 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13705             Abin Thomas  <projectmonokochi@rediffmail.com>
13706             Anoob V E  <projectmonokochi@rediffmail.com>
13707             Harilal P R  <projectmonokochi@rediffmail.com>
13708
13709         Fix #64812.
13710         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13711         allow access to all static members.
13712
13713 2005-05-04  Martin Baulig  <martin@ximian.com>
13714
13715         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13716
13717 2005-05-04  Martin Baulig  <martin@ximian.com>
13718
13719         Fix #74655.
13720
13721         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13722         section at the end; make things work if `default' is not the last
13723         section.        
13724
13725 2005-05-04  Martin Baulig  <martin@ximian.com>
13726
13727         Fix #70400.
13728
13729         * statement.cs (Switch): Replaced the `got_default' field with a
13730         `default_section' one.
13731         (Switch.CheckSwitch): Set `default_section' here.
13732         (Switch.Resolve): If we're a constant switch and the constant is
13733         not found, use the default section.
13734
13735 2005-05-03  Martin Baulig  <martin@ximian.com>
13736
13737         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13738
13739         * statement.cs (Foreach.ArrayForeach): New nested class.
13740         (Foreach.TemporaryVariable): New nested class.
13741         (Foreach.EmitArrayForeach): Removed; this is now in the new
13742         ArrayForeach class.
13743
13744 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13745
13746         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13747         more conservative.
13748         (VerifyPendingMethods): Revert change below.
13749
13750         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13751         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13752         that used to trigger warning -28.  Remove warning -28.
13753         * expression.cs (Invocation.OverloadResolve): Use
13754         TypeManager.IsOverride to distinguish override methods.
13755
13756         Fix #74773.
13757         * pending.cs (VerifyPendingMethods): If a base type implements the
13758         requested interface, don't bother checking individual methods of
13759         the base type.  As a side-effect, this prevents the creation of
13760         unnecessary proxies.
13761
13762 2005-05-02  Martin Baulig  <martin@ximian.com>
13763
13764         Fix #70182.
13765
13766         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13767         Also `And' the locals if the old vector is null.
13768         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13769         null; in this case we basically reset all the variables.        
13770
13771 2005-05-02  Martin Baulig  <martin@ximian.com>
13772
13773         Fix #74529.
13774
13775         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13776         Added `FlowBranching branching' argument; always `and' the
13777         variables instead of `or'ing them unless we're an infinite loop.
13778
13779         * statement.cs (While.Resolve): Create a new sibling unless we're
13780         infinite.       
13781
13782 2005-05-02  Martin Baulig  <martin@ximian.com>
13783
13784         Fix #70140.
13785
13786         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13787         arguments; use it instead of creating a new TopLevelBlock.
13788         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13789         our ConstructorInitializer.
13790
13791         * statement.cs
13792         (TopLevelBlock.TopLevelBranching): New public property.
13793         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13794         and create our `TopLevelBranching'.
13795
13796         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13797         anonymous method host, use `block.TopLevelBranching' rather than
13798         creating a new branching.
13799
13800 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13801
13802         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13803         a ScopeInfo, if any of the current children is a child of the new
13804         entry, move those children there.
13805
13806 2005-04-30  Martin Baulig  <martin@ximian.com>
13807
13808         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13809         at the beginning of a SwitchSection.  Fix #73335.
13810
13811 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13812
13813         Fix #74378
13814         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13815         
13816         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13817         (FieldExpr.DoResolve): Obsolete members are ignored for field
13818         initializers.
13819         
13820 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13821
13822         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13823         of arrays detection.
13824
13825         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13826         verification.
13827         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13828
13829         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13830         arrays report.
13831
13832 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13833
13834         * cs-parser.jay: Use the prefered version of -unsafe in error
13835         message.
13836
13837 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13838
13839         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13840         circumstances.
13841
13842 2005-04-20  John Luke  <john.luke@gmail.com>
13843
13844         * driver.cs: fix typo in error message, --outout to --output
13845
13846 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13847
13848         * codegen.cs (InRefOutArgumentResolving): New field.
13849         
13850         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13851         fields outside contructor.
13852         
13853         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13854         
13855 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13856
13857         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13858         parameter code was not completed ever, so it was not as up-to-date
13859         as local variables.  Must finish it.
13860
13861         The bug fix was to compare the Toplevel of the block, not the
13862         current block.  Thanks for Ben for pointing this out. 
13863
13864 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13865
13866         * decl.cs (AddMethods): Use the declaring type of the problem
13867         method to determine if we want to squash a warning.
13868
13869 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13870
13871         * attribute.cs: Removed debug output.
13872
13873         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13874         
13875         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13876         Report.Stderr.
13877         
13878 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13879
13880         Fix #74481.
13881         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13882         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13883         all null comparisons against reference types.
13884
13885 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13886
13887         Fix# 74565
13888         * class.cs (TypeContainer.CircularDepException) New nested
13889         exception class.
13890         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13891         (TypeContainer.DefineType): Removed error, reset InTransit before
13892         exit.
13893         (Class.DefineType): Throw exception when is in Transit.
13894         Catch exception and report error.
13895         (Struct.DefineType): Throw exception when is in Transit.
13896         Catch exception and report error.
13897         (Interface.DefineType): Throw exception when is in Transit.
13898         Catch exception and report error.
13899
13900         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13901         handle nested exception handlers.
13902
13903         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13904         a catch.
13905
13906         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13907         InFinally and InCatch storage.
13908
13909         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13910         (Catch.Resolve): Set and Restore ec.InCatch.
13911         (Try.Resolve): Set and Restore ec.InFinally.
13912         (Try.HasCatch): True when try has catch.
13913
13914 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13915
13916         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13917           for the same event member, so exclude such cases from warning 419.
13918           Fixed bug #74633.
13919
13920 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13921
13922         * expression.cs (Binary.ResolveOperator): Apply patch from John
13923         Luke to fix bug 59864: operators &, | and ^ on enumerations
13924         require that the same enum type on both sides.
13925
13926         * driver.cs: Add warnings to old flag usage, this is to assist
13927         people who produce Makefiles and hope that the Makefiles will be
13928         used on Windows.
13929
13930         * class.cs (TypeContainer.EmitType): Moved the definition of the
13931         special $PRIVATE$ field from the resolve phase to the Emit phase.
13932         During resolve we do not know if we are a struct with
13933         HasExplicitLayout, we know this only after the attributes for the
13934         type are emitted.
13935
13936         Set the FieldOffset to zero on the dummy field that we create for
13937         the class.   Fixes 74590.
13938
13939 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13940
13941         Fix #73834.
13942         * ecore.cs (PropertyExpr.resolved): New.
13943         (DoResolve): Use it to handle a case of double resolution here.
13944         Handle a case of identical-name-and-type-name.
13945         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13946         resolution by storing the results of expression resolution back
13947         into the "probes" array.
13948
13949 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13950
13951         Fix cs0208-7.cs and cs0208-8.cs.
13952         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13953         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13954         error reporting to point out the reason a struct is not unmanaged.
13955
13956 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13957
13958         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13959           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13960
13961 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13962
13963         Fix #74528.
13964         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13965         IdenticalNameAndTypeName here.
13966         (EventExpr.InstanceResolve): Likewise.
13967
13968 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13969
13970         C# 2.0 DefaultCharSetAttribute implementation
13971         
13972         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13973         which allows us to set GlobalNamespace for every resolve.
13974         (Attribute.ResolveArguments): Cut from Resolve.
13975         (Attribute.GetCharSetValue): Returns CharSet named argument.
13976         (Attribute.DefinePInvokeMethod): Gets default charset from
13977         module settings.
13978         (GlobalAttribute.ResolveAsTypeStep): Override.
13979         (GlobalAttribute.ResolveArguments): Override.
13980         
13981         * class.cs (TypeAttr): Is protected.
13982         
13983         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13984         (ModuleClass.DefaultCharSetType): New memeber.
13985         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13986         
13987         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13988         charset from module.
13989         
13990         * delegate.cs (TypeAttr): Override.
13991         (Delegate.DefineType): Use this TypeAttr.
13992         
13993         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13994         at very early stage (before types are defined) to resolve model
13995         module attributes. It will probably not work with corlib but it
13996         should be ok.
13997         
13998         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13999         charset from module.
14000         
14001         * typemanager.cs (default_charset_type): New type.
14002
14003 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14004
14005         * decl.cs (MemberCache.AddMethods): Don't warn if
14006         System.Object.Finalize has buggy MethodAttributes.
14007
14008         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
14009         removed below.
14010
14011 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14012
14013         * doc.cs : detect ambiguous reference to overloaded members.
14014           Fixed bug #71603. MS 1.1 csc does not detect it.
14015
14016 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14017
14018         * doc.cs : delegates must not be referenced with parameters.
14019           Fixed bug #71605.
14020
14021 2005-04-12  Miguel de Icaza  <miguel@novell.com>
14022
14023         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
14024
14025 2005-04-10  Miguel de Icaza  <miguel@novell.com>
14026
14027         * driver.cs (MainDriver): Stop processing if the CLS stage found
14028         errors. 
14029
14030         (CompilerCallableEntryPoint.InvokeCompiler): Always
14031         reset after execution;   Take a TextWriter argument for the
14032         output.
14033
14034         * report.cs: Use the error stream instead of hardcoding stderr. 
14035
14036 2005-04-09  Miguel de Icaza  <miguel@novell.com>
14037
14038         * class.cs: Reduce code paths to test, too small of an
14039         optimization to make it worth the extra testing.  Always perform
14040         it. 
14041
14042 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14043
14044         Fix #74510.
14045         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
14046         operators that had errors reported on them.
14047
14048 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
14049
14050         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
14051         argument types.
14052         (Attribute.Resolve): Add named argument type checking.
14053         
14054         * class.cs (FixedField.Define): Use IsPrimitiveType
14055         
14056         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
14057         
14058         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
14059         unsafe parameter types.
14060         
14061         * statement.cs (Using.ResolveExpression): Add better error description.
14062         
14063         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
14064         
14065 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14066
14067         Fix #74484.
14068         * attribute.cs (Attribute.GetAttributeUsage): Resolve
14069         AttributeUsageAttribute in the emitcontext of the attribute class,
14070         not in the emitcontext of the attributable entity it was attached to.
14071         * cs-parser.jay: Use 'current_class', not 'current_container',
14072         when creating a GlobalAttribute.
14073
14074 2005-04-08  Alp Toker  <alp@atoker.com>
14075
14076         * pending.cs: The fix to #58413 failed to compile methods implementing
14077         interfaces with/without params modifiers and vice versa, even though
14078         params modifiers aren't part of the signature. Make the modifier check
14079         less strict as in csc.
14080
14081 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
14082             Anoob V E  <projectmonokochi@rediffmail.com>
14083             Harilal P R  <projectmonokochi@rediffmail.com>
14084
14085         Fix #58413.
14086         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
14087         modifiers of pending methods.
14088         (PendingImplementation.PendingImplementation): Initialize it.
14089         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
14090         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
14091         with ParameterData.  Add check for modifiers.
14092         * class.cs (MethodData.Define): Update to changes.
14093
14094 2005-04-07  Raja R Harinath  <rharinath@novell.com>
14095
14096         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
14097
14098 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
14099
14100         * class.cs (PropertyMethod.Define): Check private accessor in abstract
14101         property.
14102         
14103         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
14104         
14105         * rootcontext.cs,
14106         * typemanager.cs: Registered RequiredAttributeAttribute.
14107         
14108 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
14109
14110         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
14111         Warning CS0169 is back at level 3.
14112         (IMethodData.SetMemberIsUsed): New method.
14113         
14114         * decl.cs (IsUsed): New value; moved from FieldBase.Status
14115         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
14116         
14117         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
14118
14119         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
14120         contants.
14121         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
14122         is used.
14123         
14124         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
14125         is used.
14126         
14127         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
14128         to avoid the problems with nested types.
14129
14130 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
14131             Anoob V.E  <projectmonokochi@rediffmail.com>
14132             Harilal P.R  <projectmonokochi@rediffmail.com>
14133             Raja R Harinath  <rharinath@novell.com>
14134
14135         Fix #73820.
14136         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
14137         attribute.
14138         * typemanager (GetConstructor): Make public.
14139
14140 2005-04-05  John Luke  <john.luke@gmail.com>
14141             Raja R Harinath  <rharinath@novell.com>
14142
14143         Fix #62232.
14144         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
14145         struct too.  Return false quicker in a few cases.
14146         (VerifyUnManaged): Use it.
14147
14148 2005-04-05  Raja R Harinath  <rharinath@novell.com>
14149
14150         Fix #74041.
14151         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
14152         not 'unreachable_seen'.
14153
14154 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
14155
14156         * attribute.cs (Attribute.GetValue): Removed unused.
14157         
14158         * codegen.cs (CodeGen.TrimExt): Removed unused.
14159         
14160         * cs-parser.jay (output): Removed unused.
14161         
14162         * cs-tokenizer.cs (hex_digits): Removed unused.
14163         
14164         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
14165         
14166         * expression.cs (Indirection.LoadExprValue): Removed unused.
14167         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
14168         
14169         * iterators.cs (Iterator.param_types): Removed unused.
14170         
14171         * statement.cs (Goto.block): Removed unused.
14172         (ToplevelBlock.did): Removed unused.
14173         (Switch.ResolveConstantSwitch): Removed unused.
14174
14175 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
14176
14177         * rootcontext.cs: Allow mcs to bootstrap with the compilation
14178         resetting thingy.
14179
14180 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14181
14182         Fix #74232 and cs0208-3.cs.
14183         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
14184         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
14185         unmanaged type.  Don't use FieldBuilders when 't' is a
14186         TypeBuilder.  Use ModFlags and MemberType fields.
14187         * class.cs (MemberBase.member_type): Rename from MemberType.
14188         (MemberBase.MemberType): New property.  Determines member_type on
14189         demand.
14190         (MemberBase.DoDefine): Don't initialize MemberType here.
14191         (FieldMember.Define): Likewise.
14192
14193 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
14194
14195         Fix #74241
14196         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
14197         Attributes are emitted there.
14198         
14199 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14200
14201         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
14202         keyword in 'partial enum' too.
14203         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
14204         is not allowed).
14205         Report from Kamil Skalski <nazgul@omega.pl>.
14206
14207         Fix #74309.
14208         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
14209         have partial containers too.
14210
14211         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
14212         in block' checks to Block.CheckInvariantMeaningInBlock.
14213         * statement.cs (Block.GetKnownVariableInfo): Make private.
14214         (Block.IsVariableUsedInChildBlock): Remove.
14215         (Block.IsVariableUsedInBlock): Likewise.
14216         (Block.CheckInvariantMeaningInBlock): New.  Show location of
14217         conflicting declaration.
14218         (Block.AddVariable): Make error messages less long-winded and more
14219         specific.  Show location of conflicting declaration.
14220         * parameter.cs (Parameters.Location): New readonly property.
14221
14222 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14223
14224         Clean up semantics of invoking ResolveMemberAccess.
14225         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
14226         can have an instance, ensure that we pass in a non-TypeExpression
14227         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14228         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14229         argument.  Update to changes and simplify.
14230         (FieldExpr.Emitinstance): Remove CS0120 check.
14231         (PropertyExpr.EmitInstance): Likewise.
14232         * expression.cs (Argument.Resolve): Likewise.
14233         (Invocation.DoResolve): Update to changes in semantics of
14234         InstanceExpression.
14235
14236 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14237
14238         Fix #74241
14239         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14240         customization.
14241         
14242         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14243
14244 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14245
14246         Fix difference in behaviour with commandline invocation.
14247         * driver.cs (Driver.Reset): New.
14248         (CompilerCallableEntryPoint): Call it.
14249
14250         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14251         variable" warnings if the boolean expression failed to resolve.
14252
14253 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14254
14255         * attribute.cs: Fix the union of several permissions when some of them
14256         are unrestricted (so the result isn't an unrestricted permission set).
14257         Fix #74036.
14258
14259 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14260
14261         * ecore.cs (MemberExpr): New class.  Convert from interface
14262         IMemberExpr.
14263         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14264         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14265         error checks.
14266         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14267         (MethodGroupExpr.IsExplicitImpl): Remove.
14268         (Expression.GetFieldFromEvent): Remove.
14269         (SimpleName.MemberStaticCheck): Remove.
14270         (SimpleName.DoSimpleNameResolve): Update to changes.
14271         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14272         (MemberAccess.IdenticalNameAndTypeName): Remove.
14273         (MemberAccess.error176): Move to MemberExpr.
14274         (MemberAccess.DoResolve): Update to changes.
14275         (BaseAccess.DoResolve): Likewise.
14276
14277 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14278
14279         C# 2.0 Conditional attribute class implementation
14280         
14281         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14282         Analyzes class whether it has attribute which has ConditionalAttribute
14283         and its condition is not defined.
14284         
14285         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14286         (Class.IsExcluded): New method. Search for at least one defined
14287         condition in ConditionalAttribute of attribute class.
14288
14289 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14290
14291         * ecore.cs (PropertyExpr): Derive from Expression, not
14292         ExpressionStatement.
14293         (PropertyExpr.EmitStatement): Remove.
14294
14295 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14296
14297         Fix #74060.
14298         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14299         internal field "value__" of an enum be private.  The examples for
14300         "value__" that I found on MSDN all used FieldAttributes.Private.
14301
14302         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14303         Don't mention IL method attribute names.
14304
14305         Fix #47991.  Remove a TODO.
14306         * statement.cs (Block.Toplevel): Make into a field.
14307         (Block.Parameters): Move into ToplevelBlock.
14308         (Block.known_variables): Rename from child_variable_names.
14309         (Block.Block): Remove variants that take Parameters.  Initialize
14310         'Toplevel' with the immediately surrounding toplevel block.
14311         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14312         LocalInfo parameter.
14313         (Block.GetKnownVariableInfo): New.
14314         (Block.IsVariableNameUsedInChildBlock): Update.
14315         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14316         the block, even though it may not be in scope.
14317         (Block.AddVariable): Remove Parameters parameter.  Use
14318         Toplevel.Parameters instead.
14319         (Block.AddConstant): Remove Parameters parameter.
14320         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14321         (Block.IsParamaterReference): Likewise.
14322         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14323         (ToplevelBlock.Parameters): New.  Moved from Block.
14324         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14325         initialize Parameters to a non-null value.
14326         * cs-parser.jay: Update to changes.
14327         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14328         simple names that mean different things in the same block.  Use
14329         Block.IsVariableNameUsedInBlock.
14330
14331 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14332
14333         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14334         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14335         GetTypeHandle.  It is possible for a reflected type to derive from
14336         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14337         System.Array during mscorlib compilation).
14338         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14339         contain a method_hash, don't create one either.  Don't create a
14340         deep copy of the base cache's method_hash.
14341         (MemberCache.SetupCache): Rename back from DeepCopy.
14342         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14343         already initialized.  If we see an override function, add its
14344         underlying base virtual function to the member_hash too.
14345
14346         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14347
14348 2005-03-26  Raja R Harinath  <harinath@acm.org>
14349
14350         Fix #73038.
14351         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14352         fails to resolve, ensure that the LHS is still resolved as an
14353         lvalue.
14354
14355 2005-03-25  Raja R Harinath  <harinath@acm.org>
14356
14357         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14358         ec.ContainerType.
14359         (Enum.current_ec): Remove.
14360         (Enum.LookupEnumValue): Remove EmitContext argument.
14361         Just uses the one created during DefineType.
14362         (Enum.FindMembers): Update.
14363         * expression.cs (MemberAccess.DoResolve): Update.
14364
14365 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14366
14367         * assign.cs (Assign.DoResolve): Check for CS1717 when
14368         source and target are same (uses Equals).
14369
14370         * expression.cs (LocalVariableReference, ParameterReference,
14371         This): Implemented Equals, GetHashCode.
14372
14373         * statement.cs (Block.GetParameterReference): Removed useless
14374         local variable.
14375
14376 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14377
14378         Fix cs0128.cs
14379         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14380         blocks before deciding whether the error is cs0136 or cs0128.
14381
14382         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14383         (using_alias_directive, using_namespace_directive): Pass
14384         MemberName, not an expression to Namespace.UsingAlias and
14385         Namespace.Using.
14386         (MakeName): Use the MemberName of the namespace.
14387         * namespace.cs (Namespace.MemberName): New.
14388         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14389         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14390         Likewise.
14391         * decl.cs (MemberName.Name): Make readonly.
14392         (MemberName.FromDotted): New "constructor".
14393         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14394         (MemberCore.Name): Compute from MemberName on demand.
14395         (MemberCore.SetMemberName): Provide a way to change the
14396         MemberName.
14397         (MemberCore.AddToContainer): Don't take a fullname parameter.
14398         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14399         fully qualified name of the container to the member name.
14400         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14401         only if the type is a member of the root container.
14402         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14403         MemberName.Left rather than searching for an embedded ".".
14404         (PartialContainer.CreatePart): Update to changes in RootContext.
14405         (MemberBase.ShortName): Turn into a property.  Use
14406         MemberCore.SetMemberName.
14407         (MemberBase.ExplicitInterfaceName): Remove.
14408         (MemberBase.UpdateMemberName): Remove.
14409         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14410         (PropertyBase.SetMemberName): New override.
14411         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14412         (Tree.GetDecl): New.
14413         (Tree.AllDecls): Rename from Decls.
14414         * attribute.cs, enum.cs, report.cs: Update to changes.
14415         * driver.cs (MainDriver): Use MemberName.FromDotted on
14416         RootContext.MainClass.
14417
14418 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14419
14420         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14421         checks.
14422
14423         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14424
14425 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14426
14427         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14428         property accessor modifiers.
14429
14430         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14431         fixed buffer attribute (CS1716).
14432         (PropertyMethod.HasCustomAccessModifier): When property accessor
14433         has custom modifier.
14434
14435         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14436         modifiers.
14437         (PropertyExpr.DoResolveLValue): Add CS0272.
14438
14439 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14440
14441         * convert.cs: When converting to a pointer, use the proper Conv.U
14442         or Conv.I depending on the source data type.
14443
14444         * cs-tokenizer.cs: Make the size for large decimal constants,
14445         fixes #72957.
14446
14447 2005-03-17  Martin Baulig  <martin@ximian.com>
14448
14449         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14450         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14451
14452 2005-03-17  Martin Baulig  <martin@ximian.com>
14453
14454         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14455         to bool so we can return an error condition.
14456         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14457         returned an error.
14458
14459 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14460
14461         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14462         attributes.
14463
14464 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14465
14466         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14467         Refactor to avoid traversing the list of assemblies, and to avoid
14468         string concatenation.
14469         * typemanager.cs (guid_attr_type): Remove.
14470         (negative_hits, pointers, references): Remove hashes.
14471         (type_hash): New.
14472         (GetConstructedType): New.  Uses type_hash to handle constructed
14473         types (arrays, references, pointers).
14474         (GetReferenceType, GetPointerType): Use it.
14475         (GetNestedType): New.  Uses type_hash to handle nested types of
14476         reflected types.
14477         (LookupType, LookupTypeDirect): Remove.
14478         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14479         'types' hash and LookupTypeReflection directly.
14480         (params_string, params_object): Use GetConstructedType.
14481         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14482         top-level types.
14483         (Namespace.Lookup): Use cached_types.
14484         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14485         provided by old TypeManager.LookupType.
14486         * rootcontext.cs (MakeFQN): Remove.
14487         * decl.cs (DeclSpace.MakeFQN): Likewise.
14488         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14489         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14490         TypeManager.GetConstructedType.
14491         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14492
14493 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14494
14495         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14496         indexers.
14497
14498         * cs-parser.jay: Reports CS1527 for any namespace element.
14499
14500         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14501         Added CS0407.
14502
14503         * expression.cs (ParameterReference.IsAssigned): Changed error to
14504         CS0269.
14505         (Error_WrongNumArguments): Moved CS0245 detection here.
14506
14507         * statement.cs (Return.Resolve): Add CS1622 report.
14508
14509 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14510
14511         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14512
14513 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14514
14515         * attribute.cs expression.cs: Get rid of some allocations.
14516
14517 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14518
14519         * doc.cs : just eliminate the latest change.
14520
14521 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14522
14523         * doc.cs : commented out the latest change. It breaks xml-030.cs
14524
14525 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14526
14527         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14528           fail. So invoke CreateType() in FindDocumentedType().
14529
14530 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14531
14532         * cs-tokenizer.cs : added IsKeyword().
14533         * doc.cs : Detect keyword incorrectly used as identifier.
14534           Allow identifiers prefixed by @.
14535
14536 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14537
14538         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14539         It caused exception in namespace resolving (again!).
14540         
14541         * class.cs (Class.ctor): Removed exit.
14542         (PropertyMethod.ctor): ditto.
14543         
14544         * codegen.cs (Codegen.Reset): Reset static data.
14545         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14546         
14547         * cs-tokenizer.cs (Cleanup): Removed.
14548         
14549         * driver.cs (GetSystemDir): Rewrote to one line command.
14550         It caused problem with unloaded dynamic modules.
14551         (UnixParseOption): Removed Exit.
14552         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14553         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14554         Now can be mcs used as library.
14555         
14556         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14557         empty location.
14558         
14559         * location.cs (Reset): Reset static data.
14560         
14561         * namespace.cs (Reset): Reset static data.
14562         
14563         * report.cs (Report.Reset): Reset static data.
14564         
14565         * rootcontext.cs (RootContext.Reset): Reset static data.
14566         
14567         * tree.cs (RootTypes.ctor): Use Location.Null
14568         
14569         * typemanager.cs (TypeManager.Reset): Reset static data.
14570         (CoreLookupType): Removed Exit.
14571         (TypeHandle.Reset): Reset static data.
14572         
14573 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14574
14575         Fix #73516.
14576         * typemanager.cs (ComputeNamespaces): Import namespaces from
14577         referenced modules too.
14578
14579 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14580
14581         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14582         than '.'.
14583
14584 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14585
14586         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14587         enclosing DeclSpace.  This ensures that a name-lookup populates
14588         more caches and there are fewer 'TypeExpression's.  Carve out
14589         nested type lookup into ...
14590         (LookupNestedTypeInHierarchy): ... this.
14591
14592 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14593
14594         Clean up a few partial-class semantics.  
14595         Fixes test-357.cs and cs1618-2.cs.
14596         * cs-parser.jay (struct_declaration): Use 'current_class' as
14597         parent of newly-created struct.  Remove call to Register ().
14598         Use 'pop_current_class' to complete handing the current struct.
14599         (interface_declaration): Likewise.
14600         (class_declaration): Likewise.
14601         (enum_declaration): Use 'current_class' as parent of newly created
14602         enum.
14603         (delegate_declaration): Likewise.
14604         (pop_current_class): New function.  This is used to handle closing
14605         up the 'current_class' and 'current_container', and pointing them
14606         to the enclosing class/container.
14607         (CSharpParser): Initialize 'current_class' too.
14608         * decl.cs (MemberCore): Add check for invariant: a partial
14609         container is not a parsed entity, and thus does not enclose any
14610         parsed members.
14611         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14612         (DeclSpace.BaseTypeExpr): Use it.
14613         (DeclSpace.LookupType): Add check for invariant.
14614         * class.cs (TypeContainer): Add check for invariant: a nested
14615         class should have the same NamespaceEntry as its enclosing class.
14616         (TypeContainer.EmitFieldInitializers): Make virtual.
14617         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14618         MemberCore.
14619         (TypeContainer.Register): Remove.
14620         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14621         null.  Use TypeResolveEmitContext for resolving base types and
14622         interfaces.  Move initialization of Parts.TypeBuilder here from
14623         ...
14624         (TypeContainer.DefineNestedTypes): ... here.
14625         (PartialContainer): Take a Namespace not a NamespaceEntry.
14626         (PartialContainer.Create): Don't use Register.  Call the
14627         appropriate Add... function directly.
14628         (ClassPart): Take both the PartialContainer and the enclosing
14629         class as constructor arguments.
14630         (ClassPart.EmitFieldInitializers): Override.
14631         (ClassPart.PartFindNestedTypes): Remove.
14632         (FieldBase.GetInitializerExpression): Resolve the initializer
14633         expression in the emit context of the enclosing class.
14634         * tree.cs (RootTypes): Remove Register ().
14635         
14636 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14637
14638         * cs-parser.jay: Removed CS0134.
14639         
14640         * driver.cs: Removed CS1901.
14641         
14642         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14643         for predefined types.
14644
14645 2005-03-07  Duncan Mak  <duncan@novell.com>
14646
14647         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14648         well. Fixes bug #73454.
14649
14650 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14651
14652         * cs-tokenizer.cs (xtoken): Add CS1035.
14653         
14654         * class.cs (MethodData.Define): Add CS0683.
14655         (FieldMember.ctor): Add CS0681.
14656
14657 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14658
14659         * ecore.cs (SimpleName.DoResolve): Rename from
14660         SimpleName.DoResolveAllowStatic.
14661         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14662         Pass 'intermediate' flag to MemberStaticCheck.
14663         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14664         of "intermediate" lookups via MemberAccess.
14665         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14666         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14667
14668 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14669
14670         Fix #73394.
14671         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14672         slipped in because of variable names that are identical to a
14673         builtin type's BCL equivalent ('string String;', 'int Int32;').
14674         (PropertyExpr.EmitInstance): Likewise.
14675
14676 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14677
14678         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14679         
14680         * report.cs (warning_ignore_table): Made public.
14681
14682 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14683
14684         Fix #73282.
14685         * class.cs (MethodData.Emit): Pass 'container' to
14686         container.GetObsoleteAttribute instead of 'container.Parent'.
14687
14688 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14689
14690         * cs-parser.jay: Add 1534 error test.
14691
14692         * iterators.cs (Yield.CheckContext): Add error 1629.
14693         (Iterator.ctor): Save unsafe modifier.
14694         (MoveNextMethod.DoEmit): Restore unsafe context.
14695
14696         * namespace.cs (UsingAlias): Better error message.
14697
14698 2005-03-03  Dan Winship  <danw@novell.com>
14699
14700         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14701         the warning message [#73219]
14702
14703 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14704
14705         Fix compile with MCS 1.0.0.0.
14706         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14707         w_restore to not depend on string constant folding.
14708
14709 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14710
14711         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14712         CS0246 check to users who passed 'silent = false'.
14713         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14714         check.
14715         (SimpleName.SimpleNameResolve): Update.
14716         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14717         (MemberAccess.IdenticalNameAndTypeName): Update.
14718         * doc.cs (FindDocumentedTypeNonArray): Update.
14719
14720 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14721
14722         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14723         * parameters.cs (ComputeAndDefineParameters): Remove.
14724         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14725         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14726         Use GetParameterInfo.
14727
14728 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14729
14730         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14731
14732 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14733
14734         Unify DeclSpace.LookupType and DeclSpace.FindType.
14735         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14736         is in charge of defining nested types on demand.
14737         (DeclSpace.LookupType): Use it when the current_type is a
14738         TypeBuilder.  Use LookupTypeDirect for reflected types.
14739         (DeclSpace.FindType): Remove.
14740         (DeclSpace.LookupInterfaceOrClass): Likewise.
14741         (DeclSpace.DefineTypeAndParents): Likewise.
14742         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14743         DeclSpace.LookupType.
14744         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14745         * typemanager.cs (LookupType): Simplify.
14746         (AddUserType): Remove type from negative_hits.
14747         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14748         * class.cs (TypeContainer.FindMembers): Move handling of nested
14749         types ...
14750         (TypeContainer.FindMembers_NestedTypes): ... here.
14751         (TypeContainer.FindNestedType): Implement override.
14752         (ClassPart.FindNestedType): Delegate to PartialContainer.
14753         (ClassPart.PartFindNestedType): Looks up the nested types of the
14754         part alone.
14755
14756 2005-03-02  Martin Baulig  <martin@ximian.com>
14757
14758         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14759         static constructor in static classes.
14760
14761 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14762
14763         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14764         sizeParamIndex is not specified.
14765
14766 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14767
14768         Fix #73117
14769         * report.cs (WarningMessage.IsEnabled): Missing null check.
14770
14771 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14772
14773         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14774         in the fields and not in the properties.
14775
14776 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14777
14778         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14779         fields as well.
14780
14781 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14782
14783         * attribute.cs: Small refactoring (improved robustness).
14784         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14785         (ValidateGuid): Removed.
14786         (Resolve): Removed referenced to above mentioned.
14787         (GetAttributeUsage): Made private and changed to work without
14788         class assistance.
14789         (GetIndexerAttributeValue): Don't crash.
14790         (GetConditionalAttributeValue): Ditto.
14791         (GetClsCompliantAttributeValue): Ditto.
14792         (ExtractSecurityPermissionSet): All attributes exceptions are
14793         error 648.
14794         (GetPropertyValue): New helper.
14795         (GetMethodImplOptions): New method.
14796         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14797         some missing properties.
14798         
14799         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14800         (Method.ApplyAttributeBuilder): Updated.
14801         
14802         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14803         exception.
14804
14805 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14806
14807         Fix #73052.
14808         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14809         non-simple types (array, pointer, reference).
14810
14811 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14812
14813         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14814
14815         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14816         for operators.
14817         (Method.CheckBase): Catch wrong destructor here.
14818         (MethodData.Define): Add errors 550, 668.
14819
14820         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14821
14822         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14823
14824         * pending.cs (VerifyPendingMethods): Add error 551.
14825
14826         * typemanager.cs (CSharpName): Next error report helper.
14827
14828 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14829
14830         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14831         attributes. Removed useless attribute double check.
14832         It saves almost 2MBs for corlib.
14833
14834 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14835
14836         Fix #72924.
14837         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14838         called twice in case of error.
14839
14840 2005-02-23  Chris Toshok  <toshok@ximian.com>
14841
14842         Fix compiler portions of #72827.
14843         * statement.cs (Block.Emit): call Begin/EndScope on the
14844         EmitContext instead of the ILGenerator.
14845
14846         * codegen.cs (EmitContext.BeginScope): new method, call
14847         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14848         we have one.)
14849         (EmitContext.BeginScope): same, but EndScope and CloseScope
14850
14851         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14852         offset and call the superclass's OpenScope(int) with it.
14853         (SymbolWriter.CloseScope): get the current il
14854         offset and call superclass's CloseScope(int) with it.
14855
14856 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14857
14858         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14859         CS1677 for out and ref as well.
14860
14861         * class.cs (Method.Define): Add error CS1599 detection.
14862         
14863         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14864         
14865         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14866         
14867         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14868         
14869         * support.cs.cs (ModifierDesc): New helper method.
14870
14871 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14872             Abin Thomas  <projectmonokochi@rediffmail.com>
14873             Anoob V E  <projectmonokochi@rediffmail.com>
14874             Harilal P R  <projectmonokochi@rediffmail.com>
14875
14876         Fix #57851, #72718.
14877         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14878         MemberLookup (used for error reporting) actually returns a result.
14879         Fix error report number (122, not 112).
14880
14881 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14882             Anoob V E  <projectmonokochi@rediffmail.com>
14883             Harilal P R  <projectmonokochi@rediffmail.com>
14884
14885         Fix #71134.
14886         * pending.cs (PendingImplementation.GetAbstractMethods):
14887         Find NonPublic members too.
14888
14889 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14890
14891         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14892         Fixed error 217.
14893         
14894         * class.cs (MethodCore.CheckMethodAgainstBase):
14895         Add error 239 report.
14896
14897 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14898
14899         Fix #68955.
14900         * expression.cs (Invocation.IsApplicable): Make public.
14901         (Invocation.IsParamsMethodApplicable): Likewise.
14902         * delegate.cs (Delegate.VerifyApplicability): Don't use
14903         Invocation.VerifyArgumentCompat for parameter applicability
14904         testing.  Use Invocation.IsApplicable and
14905         Invocation.IsParamsMethodApplicable.
14906
14907 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14908
14909         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14910         
14911         * class.cs (Operator.Define): Add error 217 report.
14912         
14913 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14914
14915         * namespace.cs (UsingEntry.Resolve): Undo change below.
14916
14917 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14918
14919         Fix #72756.
14920         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14921         disable the error message when the extended MemberLookup also
14922         fails.
14923         (Expression.MemberLookupFinal): Update.
14924         (SimpleName.DoSimpleNameResolve): Update.
14925         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14926         Don't use MemberLookupFinal.
14927         (New.DoResolve): Update.
14928         (BaseAccess.CommonResolve): Update.
14929
14930 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14931
14932         Fix #72732.
14933         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14934         occured previously, don't resolve again.
14935
14936 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14937
14938         Fix #69949
14939         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14940         argument. Call ResolveAttributeUsage for unresolved.
14941         when types doesn't match ctor arguments.
14942         
14943         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14944         for nested attribute classes.
14945         (Class.attribute_usage): Removed.
14946         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14947         for attribute class.
14948         
14949         * ecore.cs (IsAttribute): Removed.
14950         
14951         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14952         
14953         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14954         now normal types.
14955         (attribute_types): Removed.
14956         (EmitCode): Global attributes are emited as the latest.
14957
14958 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14959
14960         * class.cs (EmitFieldInitializers): Don't emit field initializer
14961         for default values when optimilization is on.
14962         
14963         * constant.cs (Constant.IsDefaultValue): New property.
14964         
14965         * driver.cs: Add /optimize handling.
14966         
14967         * constant.cs,
14968         * ecore.cs,
14969         * literal.cs: Implement new IsDefaultValue property.
14970         
14971         * rootcontext.cs (Optimize): New field, holds /optimize option.
14972
14973 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14974
14975         Fix crasher in re-opened #72347.
14976         * namespace.cs (Namespace.Lookup): Return null if
14977         DeclSpace.DefineType returns null.
14978
14979         Fix #72678.
14980         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14981
14982 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14983
14984         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14985         now returns null if it cannot resolve to an lvalue.
14986         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14987         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14988         returned null.  Remove check for SimpleName.
14989         (EventExpr.DoResolveLValue): New.
14990         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14991         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14992         error from ...
14993         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14994         avoid CS0131 error.
14995         (Unary.ResolveOperator): Move CS0211 check ...
14996         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14997         CS0131 error.
14998         (Unary.DoResolveLValue): Simplify.
14999         (AddressOf.DoResolveLValue): New.
15000         (ArrayAccess.DoResolveLValue): New.
15001
15002 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
15003
15004         * attribute.cs (Attribute.Resolve): Add arguments casting for
15005         when types doesn't match ctor arguments.
15006
15007 2005-02-16  Raja R Harinath  <rharinath@novell.com>
15008
15009         Fix parts of #63202.
15010         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
15011         lookup of operator in base type.  Ensure that all checks happen
15012         when the operator resolves to an "op_..." method.
15013
15014 2005-02-15  Raja R Harinath  <rharinath@novell.com>
15015
15016         Fix #71992.
15017         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
15018         'ignore_cs0104' parameter.  Pass it to ...
15019         (NamespaceEntry.Lookup): ... this.
15020         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
15021         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
15022         (TypeLookupExpression.DoResolveAsTypeStep): Update.
15023         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
15024         Update.  Request that cs0104 errors be ignored.
15025         (ComposedCast.ResolveAsTypeStep): Update.
15026
15027 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15028
15029         Fix #59209.
15030         * expression.cs (Invocation.BetterFunction): Remove support for
15031         comparing virtual functions and their overrides.
15032         (Invocation.IsOverride): New.
15033         (Invocation.OverloadResolve): Don't consider 'override' functions
15034         during candidate selection.  Store them in a lookaside list.
15035         If the selected method is a 'virtual' function, use the list to
15036         find any overrides that are closer to the LHS type.
15037
15038 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
15039
15040         * expression.cs (New.DoResolve): Add complex core type reduction.
15041         (New.Constantify): Converts complex core type syntax like 'new int ()'
15042         to simple constant.
15043         
15044 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15045
15046         * decl.cs (EntryType.EntryType): New constructor to create an
15047         updated copy of a cache entry.
15048         (MemberCache.AddMethods): Use it.
15049         (MemberCache.ClearDeclaredOnly): Remove.
15050         (MemberCache.MemberCache): Update.
15051
15052 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15053
15054         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
15055         variable.  This one is represents the actual low-level declaration
15056         of the method, as opposed to the semantic level `IsStatic'.   
15057
15058         An anonymous method which is hosted into a static method might be
15059         actually an instance method.  IsStatic would reflect the
15060         container, while MethodIsStatic represents the actual code
15061         generated.
15062
15063         * expression.cs (ParameterReference): Use the new MethodIsStatic
15064         instead of IsStatic.
15065
15066         * anonymous.cs (AnonymousMethod.Compatible): Pass the
15067         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
15068         set on the current EmitContext. 
15069
15070         * expression.cs (Cast): Overload DoResolveLValue so we can pass
15071         resolve our casted expression as an LValue.  This triggers the
15072         proper LValue processing that is later required by Assign.
15073
15074         This fixes 72347.
15075
15076         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
15077
15078 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
15079
15080         C# 2.0 Fixed buffer implementation
15081
15082         * anonymous.cs: Update after RegisterHelperClass renaming.
15083
15084         * attribute.cs (AttributeTester.fixed_buffer_cache):
15085         Cache of external fixed buffers.
15086         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
15087         implementation if field is fixed buffer else null.
15088
15089         * class.cs
15090         (TypeContainer.AddField): Accept FieldMember instead of Field.
15091         (FieldBase.IsFieldClsCompliant): Extracted code from
15092         VerifyClsCompliance descendant customization.
15093         (FixedField): New class handles fixed buffer fields.
15094         (FixedFieldExternal): Keeps information about imported fixed
15095         buffer.
15096         (IFixedField): Make access to internal or external fixed buffer
15097         same.
15098
15099         * cs-parser.jay: Add fixed buffer parsing.
15100
15101         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
15102         buffer.
15103
15104         * expression.cs (Indirection): Extended implementation to accept
15105         fixed buffer field.
15106         (PointerArithmetic.Emit): Get element from fixed buffer as well.
15107         (ElementAccess.MakePointerAccess): Get type as parameter.
15108         (DoResolve): Add fixed buffer field expression conversion.
15109         (DoResolveLValue): Ditto.
15110         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
15111         (ArrayPtr): Derives from FixedBufferPtr.
15112         (ArrayPtr.Emit): Add extra emit for array elements.
15113
15114         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
15115
15116         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
15117         for compiler generated types.
15118         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
15119
15120         * statement.cs (Fixed): Refactored to be easier add fixed buffer
15121         and consume less memory.
15122         (Fixed.Resolve): Add fixed buffer case.
15123
15124         * typemanager.cs (compiler_generated_attr_ctor,
15125         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
15126         (HasElementType): Add our own implementation to work on every
15127         runtime.
15128
15129 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15130
15131         * anonymous.cs (CaptureContext): Track whether `this' has been
15132         referenced.   
15133
15134         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
15135         only captured `this' if it was implicitly done (instance
15136         methods/variables were used). 
15137
15138         * codegen.cs (EmitContext.CaptureThis): New method to flag that
15139         `this' must be captured.
15140
15141 2005-01-30  Miguel de Icaza  <miguel@novell.com>
15142  
15143         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
15144         is null it means that there has been no need to capture anything,
15145         so we just create a sibling.
15146
15147         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
15148
15149         Just a partial fix.  The other half is fairly elusive.
15150         
15151 2005-02-10  Raja R Harinath  <rharinath@novell.com>
15152
15153         Fix #52586, cs0121-4.cs.
15154         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
15155         and return a hashtable.
15156         (MemberCache.ClearDeclaredOnly): New.
15157         (MemberCache.MemberCache): Update to change.  Make a deep copy of
15158         the method_hash of a base type too.
15159         (MemberCache.AddMethods): Adapt to having a deep copy of the base
15160         type methods.  Overwrite entries with the same MethodHandle so
15161         that the ReflectedType is correct.  The process leaves in base
15162         virtual functions and their overrides as distinct entries.
15163         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
15164         matters since it was boxed in a ArrayList before.
15165         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
15166         modifier.
15167         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
15168         case of a virtual function and its override (choose the overload
15169         as better).
15170         (Invocation.OverloadResolve): Avoid 'override' members during
15171         'applicable_type' calculation.
15172
15173 2005-02-09  Raja R Harinath  <rharinath@novell.com>
15174
15175         Combine two near-redundant caches.
15176         * typemanager.cs (method_params): Rename from method_internal_params.
15177         (TypeManager.GetParameterData): New.  Replace
15178         Invocation.GetParameterData.
15179         (TypeManager.LookupParametersByBuilder): Remove.
15180         * expression.cs (Invocation.method_parameter_cache): Remove.
15181         (Invocation.GetParameterData): Remove.
15182         Update to changes.
15183         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
15184         Update to changes.
15185
15186 2005-02-08  Raja R Harinath  <rharinath@novell.com>
15187
15188         Fix #72015.
15189         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
15190         TypeManager.multicast_delegate_type is null, resolve it by looking
15191         up "System.MulticastDelegate".
15192         * rootcontext.cs (RootContext.ResolveCore): Simplify.
15193
15194 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
15195             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
15196             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
15197
15198         Fix cs0164.cs.
15199         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
15200         (LabeledStatement.AddReference): New.  Set 'referenced'.
15201         (Goto.Resolve): Use it.
15202
15203 2005-02-05  John Luke  <john.luke@gmail.com>
15204
15205         * driver.cs: remove duplicate -doc line in Usage ()
15206
15207 2005-02-04  Raja R Harinath  <rharinath@novell.com>
15208
15209         * location.cs (Location.AddFile): Fix CS2002 error report.
15210
15211 2005-02-02  Martin Baulig  <martin@ximian.com>
15212
15213         * delegate.cs (Delegate.DefineType): Report an internal error if
15214         TypeManager.multicast_delegate_type is null.  See bug #72015 for
15215         details.        
15216
15217 2005-02-02  Raja R Harinath  <rharinath@novell.com>
15218
15219         Fix a crasher in a variant of #31984.
15220         * const.cs (Constant.CheckBase): New override that defers the
15221         new-or-override check in case the base type hasn't been populated
15222         yet.
15223         (Constant.Define): Ensure the new-or-override check is performed.
15224
15225 2005-02-01  Duncan Mak  <duncan@ximian.com>
15226
15227         * const.cs (LookupConstantValue): Check that `ce' is not null
15228         before calling GetValue ().
15229
15230 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15231
15232         Fix test-334.cs (#69519).
15233         * cs-parser.jay (using_alias_directive): Pass in an expression to
15234         NamespaceEntry.UsingAlias.
15235         (using_namespace_directive): Pass in an expression to
15236         NamespaceEntry.Using.
15237         (namespace_name): Don't flatten to a string.
15238         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15239         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15240         ResolveAsTypeStep.
15241         (NamespaceEntry.UsingEntry): Likewise.
15242         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15243         changes.
15244         (NamespaceEntry.LookupForUsing): Remove.
15245         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15246         names.
15247         (NamespaceEntry.Lookup): Remove support for dotted names.
15248
15249 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15250
15251         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15252         split into two.
15253         (NamespaceEntry.ImplicitParent): Compute on demand.
15254         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15255         parallels the current.
15256         (NamespaceEntry.LookupForUsing): Use it.
15257         (NamespaceEntry.Lookup): If the current namespace-entry is
15258         implicit, don't search aliases and using tables.
15259
15260 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15261
15262         Fix #31984.
15263         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15264         BaseCache here.
15265         (TypeContainer.BaseCache): Compute on demand.
15266         (TypeContainer.FindMembers): Define constants and types if they're
15267         not already created.
15268         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15269         check.
15270         * const.cs (Constant.Define): Make idempotent.
15271
15272 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15273
15274         * pending.cs: Produce better code (no nops produced by using Ldarg
15275         + value).
15276         
15277         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15278         i - 1' it should be arg + 1.
15279
15280         Fixes bug #71819.
15281
15282 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15283
15284         * attribute.cs (Attribute.CheckAttributeType): Make private
15285         non-virtual.
15286         (Attribute.ResolveType): Make virtual.
15287         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15288         handling of RootContext.Tree.Types.
15289
15290 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15291
15292         Update attribute-handling to use the SimpleName/MemberAccess
15293         mechanisms.
15294         * cs-parser.jay (attribute): Pass in an expression to the
15295         constructors of Attribute and GlobalAttribute.
15296         * attribute.cs (Attribute): Take an expression for the name.
15297         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15298         passed in attribute name expression.
15299         (Attribute.CheckAttributeType): Use it.
15300         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15301         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15302         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15303         argument to prevent error messages if the lookup fails.
15304
15305 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15306
15307         * expression.cs (Indirection): Implemented IVariable interface
15308         to support indirection in AddressOf operator.
15309         (PointerArithmetic.Emit): Add optimalization for case where
15310         result can be precomputed.
15311
15312 2005-01-26  Martin Baulig  <martin@ximian.com>
15313
15314         * class.cs (TypeContainer.AttributeTargets): Return the correct
15315         AttributeTargets depending on our `Kind' instead of throwing an
15316         exception; fixes #71632.
15317
15318 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15319
15320         Fix #71257
15321         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15322         constant members.
15323
15324 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15325
15326         Fix #71602.
15327         * expression.cs (MemberAccess.DoResolve): Don't complain with
15328         cs0572 when the LHS of a member access has identical name and type
15329         name.
15330
15331 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15332
15333         Fix #71651, #71675
15334         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15335         CreatePermission.
15336         Create custom PermissionSet only for PermissionSetAttribute.
15337
15338 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15339
15340         Fix #71649
15341         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15342         delegates in static class.
15343
15344 2005-01-24  Martin Baulig  <martin@ximian.com>
15345
15346         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15347         merging an implicit block, just use its reachability.
15348
15349         * statement.cs (Block.Resolve): Make the unreachable code check
15350         work wrt. implicit blocks; see test-337 from #63842.
15351
15352 2005-01-21  Alp Toker  <alp@atoker.com>
15353  
15354         * cs-parser.jay: destructor_declaration's container is PartialContainer
15355         not Class when partial types are used, so use Kind prop instead of
15356         'is'.
15357         
15358 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15359
15360         * cs-parser.jay: Improve error reporting when an interface
15361         declares new types.
15362
15363 2005-01-20  Dick Porter  <dick@ximian.com>
15364
15365         * support.cs: SeekableStreamReader fix from Sandor Dobos
15366         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15367         chars are read.  Fixes bug 70369.
15368
15369 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15370
15371         * cs-parser.jay (catch_clause): Simplify current_block handling
15372         somewhat.
15373
15374 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15375
15376         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15377         code with ImplicitStandardConversion to handle the implicit
15378         conversion of method groups into valid delegate invocations. 
15379
15380         The problem is that in parameter handling we were using this code
15381         path.  Fixes bug #64698
15382
15383 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15384
15385         * cs-parser.jay: Fix several infelicities.
15386         - Avoid assigning to the parser value stack.  Code like 
15387           '$3 = null' is unclean.  Synthesize a value for the code block
15388           instead. 
15389         - Avoid using oob_stack for storing location information.  Use ...
15390         (_mark_): ... this.  New (empty) rule.  Saves the current location
15391         in $$.
15392         (foreach_statement): Avoid using oob_stack for current_block
15393         handling.  Use technique used in for_statement and
15394         using_statement.  Synthesize a value for the code block to store
15395         additional intermediate information.
15396
15397 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15398
15399         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15400         of a different type is only allowed to private fields of a
15401         containing type, not on fields of a base class.
15402
15403         See test-174.cs and error cs0122-9.cs
15404
15405 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15406
15407         Fix test-335.cs (bug #58126).
15408         * cs-parser.jay (argument): Split out non-expression parts of the
15409         rule into 'non_simple_argument'.
15410         (invocation_expression): Support parenthesized invocations with
15411         multiple arguments, and with single non-simple arguments.
15412
15413 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15414
15415         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15416         places.
15417
15418 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15419
15420         Fix cs0038-1.cs, cs1640-6.cs.
15421         * ecore.cs (Expression.Resolve): Remove special-case for
15422         SimpleName in error-handling.
15423         (Expression.almostMatchedMembers): Relax access permission to
15424         protected.
15425         (Expression.MemberLookupFailed): Handle duplicates in
15426         almostMatchedMembers list.
15427         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15428         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15429         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15430         overload if the passed in MemberInfo is a MethodBase.
15431
15432 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15433
15434         Fix #70749
15435         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15436         for non-CAS & merge permission sets properly.
15437
15438 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15439
15440         Improve standard-compliance of simple name and member access 
15441         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15442         * ecore.cs (FullNamedExpression): New abstract base class 
15443         for Namespaces and TypeExpressions.
15444         (ResolveFlags.SimpleName): Remove.
15445         (SimpleName): Remove support for dotted names.
15446         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15447         DeclSpace.FindType and DeclSpace.LookupType.
15448         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15449         (Expression.ExprClassName): Make member function.
15450         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15451         a namespace.  Remove creation of dotted "SimpleName"s.
15452         (MemberAccess.DoResolve): Likewise.
15453         * decl.cs (DeclSpace.Cache): Make private.
15454         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15455         (DeclSpace.FindType): Update.
15456         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15457         FullNamedExpression.
15458         * namespace.cs (Namespace): Derive from FullNamedExpression
15459         so that it can be part of expression resolution.
15460         (Namespace.Lookup): Return an FullNamedExpression.
15461         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15462         namespace.
15463         * rootcontext.cs (NamespaceLookup): Remove.
15464         (LookupType): Move to DeclSpace.
15465         * attribute.cs (CheckAttributeType): Update.
15466         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15467         (FindDocumentedTypeNonArray): Likewise.
15468
15469 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15470
15471         Fix cs0509.cs, cs1632.cs.
15472         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15473         is the same as IsInterface.
15474         (TypeContainer.GetClassBases): Likewise.
15475         * statement.cs (LabeledStatement.ig): New field.
15476         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15477         label.
15478         (LabeledStatement.DoEmit): Check that the label was created with
15479         the same ILGenerator.
15480
15481 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15482
15483         Fix #71058
15484         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15485         accessors to its properties.
15486
15487         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15488         from accessors to property.
15489         
15490 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15491
15492         Fix #70722
15493         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15494         only for overrides.
15495         
15496 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15497
15498         * attribute.cs: Check for null and empty strings.  
15499
15500         I have lost another battle to Paolo.
15501
15502 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15503
15504         Fix #70942
15505         * class.cs (PropertyMethod): Set Parent field in ctors.
15506         (SetMethod.InternalParameters): Add unsafe switch hack.
15507         Override MarkForDuplicationCheck where it is appropriate.
15508
15509         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15510         It says whether container allows members with the same name.
15511         Base default is no.
15512         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15513         Removed is_method parameter.
15514
15515 2005-01-06  Duncan Mak  <duncan@ximian.com>
15516
15517         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15518         because the previous change led to incorrect reporting of CS1032
15519         ("Cannot define/undefine preprocessor symbols after first token in
15520         file"). Instead of using `tokens_seen' as the only flag that
15521         triggers CS1040, introduce `comments_seen'. This new flag is used
15522         to signify having seen comments on the current line, so it is
15523         unset after a newline.
15524
15525 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15526
15527         * doc.cs : When searching for a type, find nested type too.
15528           This fixes bug #71040.
15529
15530 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15531
15532         * doc.cs :
15533           - Warn missing member comment on those classes which also does not
15534             have doc comments. Fixed bug #71041.
15535           - Don't warn missing doc comment on default constructor.
15536             Fixed bug #71042.
15537
15538 2005-01-06  Duncan Mak  <duncan@ximian.com>
15539
15540         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15541         comments, set `tokens_seen' to true. This allows us to detect
15542         misplaced preprocessor directives (i.e. not at the beginning of
15543         the a line, nor after whitespaces). In that case, report error
15544         CS1040. This fixes bug #56460.
15545
15546         * cs-parser.jay (interface_member_declaration): Add checks for
15547         IsExplicitImpl, and report CS0541 error if an interface member is
15548         defined as an explicit interface declaration.
15549
15550 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15551
15552         Fix #70817
15553         * class.cs (PropertyMethod): Set Parent field in ctors.
15554         (SetMethod.InternalParameters): Add unsafe switch hack.
15555         
15556         * decl.cs (MemberCore.Parent): Cannot be readonly.
15557
15558 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15559
15560         * decl.cs (DeclSpace.ResolveType): Remove.
15561         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15562         Merge in code from ...
15563         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15564         * class.cs, enum.cs: Update to changes.
15565
15566 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15567
15568         * anonymous.cs: Ensure that we init the scope of our parent if it
15569         has not been initialized yet.
15570
15571 2004-12-30  Duncan Mak  <duncan@ximian.com>
15572
15573         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15574         if field.FieldBuilder is null. Fixes #70758.
15575
15576         * convert.cs: Fixed some typos and updated some of the comments.
15577         (ImplicitStandardConversionExists):
15578         (TryImplicitIntConversion): If `target_type' is an interface and
15579         the type of `ic' implements this interface, return true or a new
15580         BoxedCast instead of null. This fixes #70468.
15581
15582 2004-12-29  Duncan Mak  <duncan@ximian.com>
15583
15584         * expression.cs (Argument.Emit): Check that Expr is
15585         IMemoryLocation before casting to it, and report CS1510 otherwise.
15586
15587         This fixes #70402.
15588
15589 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15590
15591         * statement.cs (Block.ThisVariable): remove the recursion here, to
15592         make the --profile more sane.
15593
15594 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15595
15596         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15597         assembly, by JB Evain.
15598
15599 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15600
15601         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15602           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15603         "parent" refers to enclosing type/class.  "base" refers to superclass.
15604
15605 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15606
15607         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15608         Ensure that we only have GlobalAttributes.
15609         * attribute.cs (Attribute.Emit): Make non-virtual.
15610         (GlobalAttribute.Emit): Remove.
15611         (Attribute.Resolve): Make virtual.
15612         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15613         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15614         the argument. Don't create one.
15615         (Attribute.GetObsoleteAttribute): Likewise.
15616         (Attribute.GetClsCompliantAttributeValue): Likewise.
15617         * class.cs, decl.cs: Update to changes.
15618
15619 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15620
15621         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15622         
15623         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15624         
15625         * statement.cs (Foreach.Resolve): Add error 186 report.
15626
15627 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15628
15629         * expression.cs (Conditional.DoResolve): Add warning 429.
15630         
15631         * statement.cs (If.Resolve): Add warning 665.
15632
15633 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15634
15635         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15636         except when in the parser, and in GlobalAttribute.
15637         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15638         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15639         RootContext.Tree.Types.NamespaceEntry once work is done.
15640         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15641         and resets RootContext.Tree.Types.NamespaceEntry.
15642
15643 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15644
15645         * cs-parser.jay: Don't create a block for every variable.
15646
15647 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15648
15649         * location.cs: Provide extra information.
15650
15651         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15652         variables from the captured environment, it is the ldarg_0.
15653
15654 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15655
15656         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15657         find a conclusion.
15658         
15659         * class.cs: Changed warning level for 169 to avoid developer
15660         displeasure from warning flooding. It will be changed back when they
15661         fix most of current BCL warnings.
15662         
15663         * RootContext.cs: Pushed default WarningLevel to 3.
15664         
15665         * statement.cs: Removed unused variable.
15666
15667 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15668
15669         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15670         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15671         Add error 502 report.
15672         (StaticClass.DefineType): Add error 441 report.
15673         (Class.AllowedModifiersProp): New virtual property as temporary
15674         extension to AllowedModifiers.
15675         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15676         to share implementation with StaticClass and don't call virtual
15677         methods from ctor.
15678         
15679         * driver.cs (MainDriver): Add error 1558 test.
15680
15681         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15682         report. Moved error 36 test here.
15683
15684         * statement.cs (Throw.Resolve): Add error 724 report.
15685
15686         * typemanager.cs: Add out_attribute_type core type.
15687         
15688 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15689
15690         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15691         3018 report.
15692         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15693
15694         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15695         3017 report.
15696         
15697         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15698
15699         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15700         Add error 3023 report.
15701         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15702
15703         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15704         implementation.
15705
15706 2004-12-12  John Luke  <john.luke@gmail.com>
15707
15708         * driver.cs (AddArgs): take -- into account when
15709         adding arguments, fixes bug 65710 
15710
15711 2004-12-12  Martin Baulig  <martin@ximian.com>
15712
15713         * expression.cs (Unary.TryReduceNegative): Added support for
15714         SByteConstant and ByteConstant.
15715         (Unary.Reduce): Check error values from TryReduceNegative().
15716
15717 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15718
15719         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15720         and report exception as error 182.
15721
15722 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15723
15724         * driver.cs (Main): Fix message when there are warnings.
15725
15726 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15727
15728         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15729
15730 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15731
15732         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15733         Reduced number of warnings.
15734         
15735         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15736
15737 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15738
15739         * driver.cs: Removed message.
15740
15741         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15742
15743 2004-12-08    <vargaz@freemail.hu>
15744
15745         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15746
15747 2004-12-08  Martin Baulig  <martin@ximian.com>
15748
15749         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15750         instead of a CS3002 for properties and indexer.
15751
15752 2004-12-08  Martin Baulig  <martin@ximian.com>
15753
15754         * decl.cs (MemberName.ToString): Make this work again.
15755
15756 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15757
15758         * attribute.cs (Resolve): Add error 591 detection.
15759
15760         * class.cs (FieldMember.Define): Add error 1547 detection.
15761         (Indexer.Define): Add error 620 detection.
15762         (Operator.Define): Add error 590 detection.
15763
15764         * ecore.cs: Missing argument for error 79.
15765
15766         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15767         detection.
15768
15769 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15770
15771         Fix #70106
15772         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15773         only.
15774
15775 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15776
15777         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15778           Some operator comments were suppressed.
15779         * doc.cs : Implicit/explicit operator name in doc comments are like
15780           "op_Explicit(type)~returnType", so added suffix handling.
15781
15782 2004-12-07  Martin Baulig  <martin@ximian.com>
15783
15784         * decl.cs
15785         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15786         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15787         (DeclSpace.ec): New protected field; store the EmitContext here.
15788         (DeclSpace.EmitContext): New public property; moved here from
15789         `TypeContainer'.
15790         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15791         EmitContext.
15792
15793         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15794         (Enum.Emit): Don't create a new EmitContext.
15795
15796         * delegate.cs (Delegate.DefineType): Always create the
15797         EmitContext.
15798
15799         * iterators.cs (Iterators.DefineIterator): Create a new
15800         EmitContext and store it in `ec'.
15801
15802 2004-08-24  Martin Baulig  <martin@ximian.com>
15803
15804         * typemanager.cs
15805         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15806         this for accessibility checks.
15807         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15808         IsNestedFamilyAccessible.
15809         (TypeManager.IsSubclassOf): New method, do what the name actually
15810         says.   
15811
15812 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15813
15814         Fix crash on cs0657-17.cs.
15815         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15816         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15817         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15818         the case where the NamespaceEntry gets overwritten.
15819
15820 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15821
15822         Fixed #69195, #56821
15823         * ecore.cs (ResolveBoolean): Tiny refactoring.
15824
15825         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15826         of right expression resolving when left is false constant and
15827         operator is LogicalAnd OR true constant and operator is LogicalOr.
15828
15829         * statement.cs (ResolveUnreachable): Always reports warning.
15830
15831 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15832
15833         * class.cs: Distinguish between 1721 and 1722 (just a little help
15834         for the programmer).
15835
15836 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15837
15838         * delegate.cs: Only allow this on new versions of the language. 
15839
15840 2004-12-02  Duncan Mak  <duncan@ximian.com>
15841
15842         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15843         Expression class.
15844         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15845         here as a static method. Take an additional bool out parameter
15846         `must_do_cs1540_check' for signaling to InstanceResolve.
15847         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15848         member field from PropertyExpr class and made it an argument of
15849         the method instead.
15850         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15851         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15852         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15853         and `remove_accessor' as well as InstanceResolve: report CS0122
15854         where applicable.
15855
15856         Fixes #70129.
15857
15858 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15859
15860         Fix test-327.cs, test-328.cs, and put in early infrastructure
15861         for eventually fixing #52697.
15862         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15863         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15864         from other methods.
15865         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15866         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15867         (VerifyUsing, error246): Update.
15868         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15869         'NamespaceEntry.LookupNamespaceOrType'.
15870
15871 2004-12-03  Martin Baulig  <martin@ximian.com>
15872
15873         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15874         method as our child, call AnonymousMethod.Compatible() on it.
15875
15876 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15877
15878         Disable XML documentation support in 'basic' profile.
15879         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15880         Redirect XmlElement to System.Object.
15881         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15882         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15883         * mcs.exe.sources: Add doc-bootstrap.cs.
15884         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15885         of doc.cs.
15886
15887 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15888
15889         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15890           comments are allowed.
15891
15892 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15893
15894         * delegate.cs: Add checks for subtypes in paramaters and return values
15895         in VerifyMethod () to add support for Covariance/Contravariance
15896         in delegates.
15897         
15898 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15899
15900         * report.cs: Remove extra closing parenthesis.
15901
15902         * convert.cs (Error_CannotImplicitConversion): If the name of the
15903         types are the same, provide some extra information.
15904
15905         * class.cs (FieldBase): Use an unused bit field from the field to
15906         encode the `has_offset' property from the FieldMember.  This saves
15907         a couple of Ks on bootstrap compilation.
15908
15909         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15910         method as our child, return the AnonymousMethod resolved
15911         expression.
15912
15913         * expression.cs (New.DoResolve): Allow return values from
15914         NewDelegate to also include AnonymousMethods.
15915
15916         Fixes #70150.
15917
15918 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15919
15920         Fix bug #70102
15921         * attribute.cs (Resolve): Improved implementation of params
15922         attribute arguments.
15923
15924         * support.cs (ParameterData): Add HasParams to be faster.
15925
15926 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15927
15928         all things are for /doc support:
15929
15930         * doc.cs: new file that supports XML documentation generation.
15931         * mcs.exe.sources: added doc.cs.
15932         * driver.cs:
15933           Handle /doc command line option.
15934           Report error 2006 instead of 5 for missing file name for /doc.
15935           Generate XML documentation when required, after type resolution.
15936         * cs-tokenizer.cs:
15937           Added support for picking up documentation (/// and /** ... */),
15938           including a new XmlCommentState enumeration.
15939         * cs-parser.jay:
15940           Added lines to fill Documentation element for field, constant,
15941           property, indexer, method, constructor, destructor, operator, event
15942           and class, struct, interface, delegate, enum.
15943           Added lines to warn incorrect comment.
15944         * rootcontext.cs :
15945           Added Documentation field (passed only when /doc was specified).
15946         * decl.cs:
15947           Added DocComment, DocCommentHeader, GenerateDocComment() and
15948           OnGenerateDocComment() and some supporting private members for
15949           /doc feature to MemberCore.
15950         * class.cs:
15951           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15952         * delegate.cs:
15953           Added overriden DocCommentHeader.
15954         * enum.cs:
15955           Added overriden DocCommentHeader and GenerateDocComment().
15956
15957 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15958
15959         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15960         unwrapping the enumeration values, chain to
15961         DoConstantNumericPromotions again, so we can promote things to the
15962         fundamental types (takes care of enums that are bytes, sbytes).
15963
15964         Fixes bug #62054.
15965
15966 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15967
15968         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15969         Fix long-standing bug in type-lookup.  Use FindType instead of
15970         LookupType when ec.ResolvingTypeTree.
15971         (Attribute.ResolveType, Attribute.Resolve)
15972         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15973         Update to changes.
15974         (Attributes.Search): Remove internal version.  Update.
15975         (Attributes.SearchMulti): Update.
15976         (Attributes.GetClsCompliantAttribute): Remove.
15977         (Attributes.GetIndexerNameAttribute): Remove.
15978         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15979         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15980         * class.cs (Indexer.Define): Likewise.
15981
15982 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15983
15984         Fix bug #68790
15985         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15986         MarshallByReference members access.
15987
15988         * expression.cs: Use CheckMarshallByRefAccess;
15989         Better error CS0197 message.
15990
15991         * report.cs: Print whole related error message.
15992
15993 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15994
15995         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15996         the current directory to help debugging.
15997
15998 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15999
16000         * class (GetClassBases): Better error 60 report.
16001         (EventProperty): Disabled warning 67 detection.
16002
16003 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16004
16005         Fix bug #60324
16006         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
16007
16008         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
16009         precise values.
16010
16011 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16012
16013         Fix bug #49488
16014         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
16015
16016         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
16017
16018 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
16019
16020         * attribute.cs (Attribute.Resolve): Refine error reporting and
16021         report a cs0117 if the identifier does not exist, to distinguish
16022         from 0617 which is a miss-use of the actual identifier.
16023
16024         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
16025         between cs0070 and cs0079.
16026
16027         * class.cs (MemberBase.DoDefine): When reporting a wrong
16028         accessibility level, we use MethodCore to compare instead of
16029         Method (this was a regression in some refactoring effort).
16030
16031         So now we correctly report cs0056 again.
16032
16033         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
16034         testing the target_type (which was known to be object_type) and
16035         not the source type (which is anonymous_method).
16036
16037         Fixed reporting of error cs1660.
16038
16039         * expression.cs (UserCast.Source): Expose the underlying cast.
16040
16041         * statement.cs (Switch.SwitchGoverningType): Sort the list of
16042         allowed types to find a match to int32 first (most common).
16043
16044         In addition, it ignores any ImplicitUserConversions that did an
16045         internal implicit conversion (as the switch statement allows only
16046         one integral conversion to exist).
16047
16048         * class.cs (PartialContainer.Create): rename `name' to
16049         `member_name' for clarity.  Then replace the string calls with a
16050         call to MemberName.GetPartialName, as now using
16051         MemberName.ToString is an error (this is due to the side effects
16052         it had, that were fixed in the past).
16053
16054         This will restore the error reporting on a number of partial class
16055         errors that were missusing this (and getting an exception as a
16056         results, which is now just a plain textual warning, because
16057         yyparse debug output would crash otherwise).
16058
16059 2004-11-26  Raja R Harinath  <rharinath@novell.com>
16060
16061         * Makefile (PROGRAM_INSTALL_DIR): Remove.
16062
16063 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16064
16065         * rootcontext.cs (LookupType): Make sure to cache lookups that
16066         don't give us a negative result. This saves about 5% of corlib
16067         compilation time.
16068
16069 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16070
16071         * report.cs (AbstractMessage.Print): messages are sent to stderr
16072
16073         * class.cs (TypeContainer.GetClassBases): It is an error to have a
16074         non-interface in the list of interfaces (at this point, either
16075         parent was properly set, or a base class is being listed in the
16076         interfaces section).
16077
16078         This flags error 1722, and resolves the crash from bug 69259.
16079
16080 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16081
16082         * statement.cs (Using.EmitExpressionFinally): make this work right
16083         for valuetypes. Fixes 69926.
16084
16085 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16086
16087         * const.cs (Const.ChangeType): Cope with the "0 literal can be
16088         converted to an enum" here, before we try to change the underlying
16089         type.  This code exists, but it is a different code path than the
16090         one used while encoding constants.
16091
16092         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
16093         old bug: when converting from the null literal to a pointer,
16094         return an EmptyCast, not the NullLiteral.
16095
16096         This fixes #69921, the recent null_type changes probably made this
16097         bug more prominent.
16098
16099         (ImplicitReferenceConversionExists): In addition, resynchronized
16100         the code here, so it matches the same code in
16101         ImplicitReferenceConversionExists for the `from any class-type S
16102         to any interface-type T'.
16103         
16104
16105 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
16106
16107         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
16108
16109 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
16110
16111         * cs-parser.jay: Use verbosity accordingly. 
16112
16113 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16114
16115         * expression.cs (Unary.ResolveOperator): Do not report warning;
16116         AddressOf reads from variable.
16117         
16118         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
16119
16120 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16121
16122         Fix bug #69462
16123
16124         * attribute.cs (Attributable): Removed CheckTargets.
16125         (Attributes.Emit): Explicit attribute targets are tested here.
16126
16127         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
16128         not enabled for interfaces.
16129
16130         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
16131         (GetAssemblyName): Ouch next bug there.
16132
16133 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16134
16135         * expression.cs: Error 275 added.
16136         
16137 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
16138
16139         Fix bug #69177 (Implemented decimal constant support)
16140
16141         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
16142         (BinaryFold): Add DecimalConstant.
16143
16144         * const.cs (Define): Decimal constant 
16145         (is not constant.
16146         (ChangeType): Add decimal type handling.
16147         (LookupConstantValue): Don't set value for decimal type but
16148         emit DecimalConstantAttribute. Needed for constant optimization.
16149
16150         * constant.cs (ToDecimal): New method.
16151         (ConvertToDecimal): New method.
16152         (IntConstant): Implemented ConvertToDecimal.
16153         (DecimalConstant.Emit): Emit optimized version for decimals in
16154         int range.
16155
16156         * expression.cs (ResolveOperator): Changed order of constant
16157         reduction to work correctly with native types which have
16158         overloaded operators.
16159         (ResolveMemberAccess): Extract constant value from attribute
16160         for decimal type.
16161
16162         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
16163
16164         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
16165         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
16166         (ChangeType): Decimal is special.
16167         (TypeToCoreType): Add decimal type.
16168
16169 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16170
16171         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
16172         decimal types.
16173
16174 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16175
16176         * class.cs (EventField.ApplyAttributeBuilder): Fix error
16177         test cs1667-5.cs.
16178
16179 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16180
16181         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
16182
16183         * pending.cs (PendingImplementation): Grab only interfaces.
16184
16185 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16186
16187         * statement.cs (ForeachHelperMethods): Add location member and
16188         error 202 detection.
16189
16190 2004-11-19  Raja R Harinath  <rharinath@novell.com>
16191
16192         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
16193         automatically handled by executable.make.
16194         (PROGRAM): Make profile-specific.
16195
16196 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
16197
16198         * expression.cs (DoResolveBase): Fixed wrong warning for out
16199         variables.
16200
16201 2004-11-18  Martin Baulig  <martin@ximian.com>
16202
16203         Merged latest changes into gmcs.  Please keep this comment in
16204         here, it makes it easier for me to see what changed in MCS since
16205         the last time I merged.
16206
16207 2004-11-17  Raja R Harinath  <rharinath@novell.com>
16208
16209         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
16210         (TypeHandle.GetMemberCache): New.
16211         (TypeHandle.TypeHandle): Update.
16212         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
16213         (TypeManager.LookupParentInterfacesCache):
16214         Rename from LookupInterfaceCache.  Optimize slightly.
16215         (TypeManager.MemberLookup_FindMembers): Update.
16216         * decl.cs (MemberCache.MemberCache): Set Container to null in the
16217         multi-type variant.
16218         (AddCacheContents): Rename from AddHashtable.
16219         * class.cs (TypeContainer.parent_container): Remove.
16220         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
16221         (TypeContainer.DoDefineMembers): Don't initialize it.
16222         Update to name changes.
16223         
16224 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
16225
16226         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
16227         that factors the code to check access modifiers on override.  
16228
16229         (PropertyBase): Use the code here.
16230
16231         Patch from Lluis S'anchez, fixes bug #69361.
16232
16233 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16234
16235         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16236         routine that is used to report the use of a captured variable
16237         whose address has been taken.
16238
16239         There are two checks: one when variables are being captured and
16240         the other check is when the address of a variable is taken. 
16241         
16242         (because an anonymous methods might be resolved before *or* after
16243         the address has been taken) and 
16244
16245         * expression.cs (Conditional.DoResolve): Remove the special
16246         casing that Martin added to trueExpr and falseExpr being both
16247         NullLiteral.  We get the right behavior now just by introducing
16248         the null_type into the compiler. 
16249
16250         * convert.cs (ExplicitConversion): Change the code to use
16251         null_type instead of testing `expr is NullLiteral'.
16252         (ImplicitConversionStandard): use null_type too.
16253         (ImplicitReferenceConversionExists): use null_type too.
16254         (ImplicitReferenceConversion): use null_type too.
16255
16256         * literal.cs: The type of `NullLiteral' is now null_type instead
16257         of object_type. 
16258         (Resolve): Set the type here.
16259
16260         * typemanager.cs: Introduce null_type.
16261
16262 2004-11-17  Martin Baulig  <martin@ximian.com>
16263
16264         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16265         direction, like FindMembers() does.  Fixes #69546, testcase is in
16266         test-315.cs.    
16267
16268 2004-11-16  Martin Baulig  <martin@ximian.com>
16269
16270         This is based on a patch from Marek Safar, see bug #69082.
16271         Fixes bugs #63705 and #67130.
16272
16273         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16274         method; create a MemberCache for an interface type and cache the
16275         result.
16276
16277         * decl.cs (IMemberContainer.ParentContainer): Removed.
16278         (IMemberContainer.ParentCache): New property.
16279         (MemberCache.SetupCacheForInterface): Removed.
16280         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16281         to create a cache for an interface's "parent".
16282
16283         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16284         interfaces too.
16285
16286 2004-11-16  Martin Baulig  <martin@ximian.com>
16287
16288         Merged back from gmcs; these changes already went into gmcs a
16289         couple of weeks ago.
16290
16291         * typemanager.cs
16292         (TypeManager.AddUserType): Removed the `ifaces' argument.
16293         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16294         `TypeExpr []'.
16295         (TypeManager.AddUserInterface): Removed.
16296         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16297         `TypeExpr []'.
16298         (TypeManager.GetInterfaces): Likewise.
16299         (TypeManager.GetExplicitInterfaces): Likewise.
16300
16301         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16302
16303         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16304         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16305
16306 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16307
16308         * statement.cs: Avoid adding bools to a hashtable.
16309
16310 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16311
16312         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16313         calling an unsafe method from a safe location.
16314
16315 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16316
16317         Fix #69167
16318         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16319
16320 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16321
16322         * namespace.cs (VerifyUsing): use GetPartialName instead of
16323         ToString. 
16324
16325 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16326
16327         * statement.cs (Return.Resolve): Fix regression in typo: if
16328         `in_exc', we have to request a NeedReturnLabel, this was a typo
16329         introduced in the anonymous method check-in.  Fixes #69131.
16330
16331         * Indexers were using the ShortName when defining themselves,
16332         causing a regression in the compiler bootstrap when applying the
16333         patch from 2004-11-02 (first part), now they use their full name
16334         and the bug is gone.
16335
16336 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16337
16338         * driver.cs: Strip the path from the names of embedded resources. Fixes
16339         #68519.
16340
16341 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16342
16343         Fix error message regression: cs0104-2.cs.
16344         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16345         (AliasEntry.Resolve): Update.
16346         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16347         'silent' flag.
16348         (RootContext.LookupType): Update.
16349
16350 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16351
16352         * cs-parser.jay: Add support for handling accessor modifiers
16353         * class: Add support port accessor modifiers and error checking,
16354         define PropertyMethod.Define as virtual (not abstract anymore)
16355         * ecore.cs: Add checking for proeprties access with access modifiers
16356         * iterators.cs: Modify Accessor constructor call based in the modified
16357         constructor
16358 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16359
16360         * expression.cs (StringConcat): Handle being called twice,
16361         as when we have a concat in a field init with more than two
16362         ctors in the class
16363
16364 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16365
16366         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16367         special case explicit implementations, we should always produce
16368         the .property or .event declaration.
16369         
16370         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16371         since it will not return correct data if people use this
16372         unresolved in the presence of using statements (see test-313).
16373
16374         * class.cs (MethodData.Define): If we are an explicit interface
16375         implementation, set the method name to the full name of the
16376         interface plus the name of the method.  
16377
16378         Notice that using the method.MethodName.GetFullName() does not
16379         work, as it will only contain the name as declared on the source
16380         file (it can be a shorthand in the presence of using statements)
16381         and not the fully qualifed type name, for example:
16382
16383         using System;
16384
16385         class D : ICloneable {
16386                 object ICloneable.Clone ()  {
16387                 }
16388         }
16389
16390         Would produce a method called `ICloneable.Clone' instead of
16391         `System.ICloneable.Clone'.
16392
16393         * namespace.cs (Alias.Resolve): Use GetPartialName.
16394         
16395 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16396
16397         * cs-parser.jay: Add error 1055 report.
16398
16399 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16400
16401         * assign.cs (Assign.DoResolve): Only do the transform of
16402         assignment into a New if the types are compatible, if not, fall
16403         through and let the implicit code deal with the errors and with
16404         the necessary conversions. 
16405
16406 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16407
16408         * cs-parser.jay: Add error 1031 report.
16409
16410         * cs-tokenizer.cs: Add location for error 1038.
16411
16412 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16413
16414         * cs-parser.jay: Add error 1016 report.
16415
16416 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16417
16418         * cs-parser.jay: Add errors 1575,1611 report.
16419
16420 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16421
16422         * cs-parser.jay: Add error 1001 report.
16423
16424 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16425
16426         Fix #68850
16427         * attribute.cs (GetMarshal): Add method argument for
16428         caller identification.
16429
16430         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16431         agument for GetMarshal and RuntimeMissingSupport.
16432
16433 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16434
16435         * attribute.cs (ExtractSecurityPermissionSet): Removed
16436         TypeManager.code_access_permission_type.
16437
16438         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16439
16440 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16441
16442         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16443         for obsolete use of a variable here.   Fixes regression on errors
16444         cs0619-25 and cs0619-26.
16445
16446 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16447
16448         Fix #62358, implemented security attribute encoding.
16449
16450         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16451         Tests permitted SecurityAction for assembly or other types.
16452         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16453         data from SecurityPermissionAttribute to PermisionSet class.
16454
16455         * class.cs (ApplyAttributeBuilder): Added special handling
16456         for System.Security.Permissions.SecurityAttribute based types.
16457
16458         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16459         special handling for System.Security.Permissions.SecurityAttribute
16460         based types.
16461
16462         * enum.cs (ApplyAttributeBuilder): Added special handling
16463         for System.Security.Permissions.SecurityAttribute based types.
16464
16465         * parameter.cs (ApplyAttributeBuilder): Added special handling
16466         for System.Security.Permissions.SecurityAttribute based types.
16467
16468         * rootcontext.cs: Next 2 core types.
16469
16470         * typemanager.cs (TypeManager.security_permission_attr_type):
16471         Built in type for the SecurityPermission Attribute.
16472         (code_access_permission_type): Build in type.
16473
16474 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16475
16476         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16477         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16478         all of this information into
16479         EmitContext.EmitCapturedVariableInstance.
16480         
16481         * codegen.cs (EmitCapturedVariableInstance): move here the
16482         funcionality of emitting an ldarg.0 in the presence of a
16483         remapping.   This centralizes the instance emit code.
16484
16485         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16486         then emit a load of this: it means that we have reached the
16487         topmost ScopeInfo: the one that contains the pointer to the
16488         instance of the class hosting the anonymous method.
16489
16490         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16491         captures to the topmost CaptureContext.
16492
16493 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16494
16495         * expression.cs (LocalVariableReference): Move the knowledge about
16496         the iterators into codegen's EmitCapturedVariableInstance.
16497
16498 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16499
16500         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16501         all code paths return a value from an anonymous method (it is the
16502         same as the 161 error, but for anonymous methods).
16503
16504 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16505
16506         The introduction of anonymous methods in the compiler changed
16507         various ways of doing things in the compiler.  The most
16508         significant one is the hard split between the resolution phase
16509         and the emission phases of the compiler.
16510
16511         For instance, routines that referenced local variables no
16512         longer can safely create temporary variables during the
16513         resolution phase: they must do so from the emission phase,
16514         since the variable might have been "captured", hence access to
16515         it can not be done with the local-variable operations from the runtime.
16516         
16517         * statement.cs 
16518
16519         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16520         is a toplevel block.
16521
16522         (ToplevelBlock): A new kind of Block, these are the blocks that
16523         are created by the parser for all toplevel method bodies.  These
16524         include methods, accessors and anonymous methods.
16525
16526         These contain some extra information not found in regular blocks:
16527         A pointer to an optional CaptureContext (for tracking captured
16528         local variables and parameters).  A pointer to the parent
16529         ToplevelBlock.
16530         
16531         (Return.Resolve): Catch missmatches when returning a value from an
16532         anonymous method (error 1662).
16533         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16534         phase.
16535
16536         (Break.Resolve): ditto.
16537
16538         (SwitchLabel): instead of defining the labels during the
16539         resolution phase, we now turned the public ILLabel and ILLabelCode
16540         labels into methods called GetILLabelCode() and GetILLabel() that
16541         only define the label during the Emit phase.
16542
16543         (GotoCase): Track the SwitchLabel instead of the computed label
16544         (its contained therein).  Emit the code by using
16545         SwitchLabel.GetILLabelCode ().
16546
16547         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16548         whether the Local has been captured or not.
16549
16550         (LocalInfo.IsCaptured): New property, used to tell whether the
16551         local has been captured.
16552         
16553         * anonymous.cs: Vastly updated to contain the anonymous method
16554         support.
16555
16556         The main classes here are: CaptureContext which tracks any
16557         captured information for a toplevel block and ScopeInfo used to
16558         track the activation frames for various local variables.   
16559
16560         Each toplevel block has an optional capture context associated
16561         with it.  When a method contains an anonymous method both the
16562         toplevel method and the anonymous method will create a capture
16563         context.   When variables or parameters are captured, they are
16564         recorded on the CaptureContext that owns them, for example:
16565
16566         void Demo () {
16567              int a;
16568              MyDelegate d = delegate {
16569                  a = 1;
16570              }
16571         }
16572
16573         Here `a' will be recorded as captured on the toplevel
16574         CapturedContext, the inner captured context will not have anything
16575         (it will only have data if local variables or parameters from it
16576         are captured in a nested anonymous method.
16577
16578         The ScopeInfo is used to track the activation frames for local
16579         variables, for example:
16580
16581         for (int i = 0; i < 10; i++)
16582                 for (int j = 0; j < 10; j++){
16583                    MyDelegate d = delegate {
16584                         call (i, j);
16585                    }
16586                 }
16587
16588         At runtime this captures a single captured variable `i', but it
16589         captures 10 different versions of the variable `j'.  The variable
16590         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16591         recorded on a child.  
16592
16593         The toplevel ScopeInfo will also track information like the `this'
16594         pointer if instance variables were referenced (this is necessary
16595         as the anonymous method lives inside a nested class in the host
16596         type of the method). 
16597
16598         (AnonymousMethod): Expanded to track the Toplevel, implement
16599         `AnonymousMethod.Compatible' to tell whether an anonymous method
16600         can be converted to a target delegate type. 
16601
16602         The routine now also produces the anonymous method content
16603
16604         (AnonymousDelegate): A helper class that derives from
16605         DelegateCreation, this is used to generate the code necessary to
16606         produce the delegate for the anonymous method that was created. 
16607
16608         * assign.cs: API adjustments for new changes in
16609         Convert.ImplicitStandardConversionExists.
16610
16611         * class.cs: Adjustments to cope with the fact that now toplevel
16612         blocks are of type `ToplevelBlock'. 
16613
16614         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16615         insteda of standard blocks.
16616
16617         Flag errors if params arguments are passed to anonymous methods.
16618
16619         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16620         `CurrentAnonymousMethod' which points to the current Anonymous
16621         Method.  The variable points to the AnonymousMethod class that
16622         holds the code being compiled.  It is set in the new EmitContext
16623         created for the anonymous method.
16624
16625         (EmitContext.Phase): Introduce a variable and an enumeration to
16626         assist in enforcing some rules about when and where we are allowed
16627         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16628         only one that enfonces this right now).
16629
16630         (EmitContext.HaveCaptureInfo): new helper method that returns
16631         whether we have a CapturedContext initialized.
16632
16633         (EmitContext.CaptureVariable): New method used to register that a
16634         LocalInfo must be flagged for capturing. 
16635
16636         (EmitContext.CapturedParameter): New method used to register that a
16637         parameters must be flagged for capturing. 
16638         
16639         (EmitContext.CapturedField): New method used to register that a
16640         field must be flagged for capturing. 
16641
16642         (EmitContext.HaveCapturedVariables,
16643         EmitContext.HaveCapturedFields): Return whether there are captured
16644         variables or fields. 
16645
16646         (EmitContext.EmitMethodHostInstance): This is used to emit the
16647         instance for the anonymous method.  The instance might be null
16648         (static methods), this (for anonymous methods that capture nothing
16649         and happen to live side-by-side with the current method body) or a
16650         more complicated expression if the method has a CaptureContext.
16651
16652         (EmitContext.EmitTopBlock): Routine that drives the emission of
16653         code: it will first resolve the top block, then emit any metadata
16654         and then emit the code.  The split is done so that we can extract
16655         any anonymous methods and flag any captured variables/parameters.
16656         
16657         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16658         during this phase, the ILGenerator should not be used as labels
16659         and local variables declared here might not be accessible to any
16660         code that is part of an anonymous method.  
16661
16662         Exceptions to this include the temporary variables that are
16663         created by some statements internally for holding temporary
16664         variables. 
16665         
16666         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16667         metadata for a cb
16668
16669         (EmitContext.TemporaryReturn): This method is typically called
16670         from the Emit phase, and its the only place where we allow the
16671         ReturnLabel to be defined other than the EmitMeta.  The reason is
16672         that otherwise we would have to duplicate a lot of logic in the
16673         Resolve phases of various methods that today is on the Emit
16674         phase. 
16675
16676         (EmitContext.NeedReturnLabel): This no longer creates the label,
16677         as the ILGenerator is not valid during the resolve phase.
16678
16679         (EmitContext.EmitThis): Extended the knowledge in this class to
16680         work in anonymous methods in addition to iterators. 
16681
16682         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16683         code is necessary on the stack to access the instance to a local
16684         variable (the variable will be accessed as a field).
16685
16686         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16687         EmitContext.EmitAddressOfParameter): Routines to support
16688         parameters (not completed at this point). 
16689         
16690         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16691         will also remove the parameters.
16692
16693         * convert.cs (Convert): Define a `ConstantEC' which points to a
16694         null.  This is just to prefity some code that uses
16695         ImplicitStandardConversion code and do not have an EmitContext
16696         handy.
16697
16698         The idea is to flag explicitly that at that point in time, it is
16699         known that the conversion will not trigger the delegate checking
16700         code in implicit conversions (which requires a valid
16701         EmitContext). 
16702
16703         Everywhere: pass new EmitContext parameter since
16704         ImplicitStandardConversionExists now requires it to check for
16705         anonymous method conversions. 
16706
16707         (Convert.ImplicitStandardConversionExists): If the type of an
16708         expression is the anonymous_method_type, and the type is a
16709         delegate, we invoke the AnonymousMethod.Compatible method to check
16710         whether an implicit conversion is possible. 
16711
16712         (Convert.ImplicitConversionStandard): Only do implicit method
16713         group conversions if the language level is not ISO_1.
16714
16715         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16716         MethodInfo for the Invoke method.  used by Delegate and
16717         AnonymousDelegate.
16718
16719         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16720         method conversions if the target type is a delegate.
16721
16722         Removed extra debugging nops.
16723
16724         (LocalVariableReference): Turn the `local_info' into a public
16725         field. 
16726
16727         Add `prepared' field, the same hack used for FieldExprs to cope
16728         with composed assignments, as Local variables do not necessarily
16729         operate purely on the stack as they used to: they can be captured
16730         fields. 
16731
16732         Add `temp' for a temporary result, like fields.
16733
16734         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16735
16736         It now copes with Local variables that are captured and emits the
16737         proper instance variable to load it from a field in the captured
16738         case. 
16739
16740         (ParameterReference.DoResolveBase): During the resolve phase,
16741         capture parameters if we are in an anonymous method.
16742
16743         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16744         anonymous method, use the EmitContext helper routines to emit the
16745         parameter reference.
16746
16747         * iterators.cs: Set RemapToProxy to true/false during the
16748         EmitDispose class.
16749
16750         * parameters.cs (GetParameterByName): New helper method. 
16751
16752         * typemanager.cs (anonymous_method_type) a new type that
16753         represents an anonyous method.  This is always an internal type,
16754         used as a fencepost to test against the anonymous-methodness of an
16755         expression. 
16756         
16757 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16758
16759         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16760         561 report.
16761         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16762
16763 2004-10-18  Martin Baulig  <martin@ximian.com>
16764
16765         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16766         `Type' directly, but call ResolveType() on it.
16767         (Catch.Resolve): Likewise.
16768         (Foreach.Resolve): Likewise.
16769
16770 2004-10-18  Martin Baulig  <martin@ximian.com>
16771
16772         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16773         `Type' directly, but call ResolveType() on it.
16774         (Probe.DoResolve): Likewise.
16775         (ArrayCreation.LookupType): Likewise.
16776         (TypeOf.DoResolve): Likewise.
16777         (SizeOf.DoResolve): Likewise.
16778
16779 2004-10-18  Martin Baulig  <martin@ximian.com>
16780
16781         * expression.cs (Invocation.BetterFunction): Put back
16782         TypeManager.TypeToCoreType().
16783
16784 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16785
16786         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16787         the ResolveType.
16788
16789 2004-10-18  Martin Baulig  <martin@ximian.com>
16790
16791         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16792         `Type' directly, but call ResolveType() on it.
16793
16794 2004-10-18  Martin Baulig  <martin@ximian.com>
16795
16796         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16797         `Type' directly, but call ResolveType() on it.
16798         (MemberBase.DoDefine): Likewise.
16799
16800         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16801         `Type' directly, but call ResolveType() on it.
16802         (ComposedCast.DoResolveAsTypeStep): Likewise.
16803
16804         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16805         `Type' directly, but call ResolveType() on it.
16806
16807 2004-10-17  John Luke  <john.luke@gmail.com>
16808
16809         * class.cs (Operator.GetSignatureForError): use CSharpName
16810
16811         * parameter.cs (Parameter.GetSignatureForError): Returns
16812         correct name even if was not defined.
16813
16814 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16815
16816         Fix #65816.
16817         * class.cs (TypeContainer.EmitContext): New property.
16818         (DefineNestedTypes): Create an emitcontext for each part.
16819         (MethodCore.DoDefineParameters): Use container's emitcontext.
16820         Pass type array to InternalParameters.
16821         (MemberBase.DoDefine): Use container's emitcontext.
16822         (FieldMember.Define): Likewise.
16823         (Event.Define): Likewise.
16824         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16825         Pass type array to InternalParameters.
16826         (SetIndexerMethod.GetParameterInfo): Likewise.
16827         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16828         * delegate.cs (Define): Pass emitcontext to
16829         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16830         array to InternalParameters.
16831         * expression.cs (ParameterReference.DoResolveBase): Pass
16832         emitcontext to GetParameterInfo.
16833         (ComposedCast.DoResolveAsTypeStep): Remove check on
16834         ec.ResolvingTypeTree.
16835         * parameter.cs (Parameter.Resolve): Change argument to
16836         EmitContext.  Use ResolveAsTypeTerminal.
16837         (Parameter.GetSignature): Change argument to EmitContext.
16838         (Parameters.ComputeSignature): Likewise.
16839         (Parameters.ComputeParameterTypes): Likewise.
16840         (Parameters.GetParameterInfo): Likewise.
16841         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16842         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16843         * support.cs (InternalParameters..ctor): Remove variant that takes
16844         a DeclSpace.
16845         * typemanager.cs (system_intptr_expr): New.
16846         (InitExpressionTypes): Initialize it.
16847
16848 2004-10-12  Chris Toshok  <toshok@ximian.com>
16849
16850         * cs-parser.jay: fix location for try_statement and catch_clause.
16851
16852 2004-10-11  Martin Baulig  <martin@ximian.com>
16853
16854         * report.cs: Don't make --fatal abort on warnings, we have
16855         -warnaserror for that.
16856
16857 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16858
16859         More DeclSpace.ResolveType avoidance.
16860         * decl.cs (MemberCore.InUnsafe): New property.
16861         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16862         with newly created EmitContext.
16863         (FieldMember.Define): Likewise.
16864         * delegate.cs (Delegate.Define): Likewise.
16865         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16866         only if normal name-lookup fails.
16867         (TypeExpr.DoResolve): Enable error-checking.
16868         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16869         (SizeOf.DoResolve): Likewise.
16870         (ComposedCast.DoResolveAsTypeStep): Likewise.
16871         (StackAlloc.DoResolve): Likewise.
16872         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16873         (Block.Unsafe): New property.
16874         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16875         (Unsafe): Set 'unsafe' flag of contained block.
16876         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16877         (Fixed.Resolve): Likewise.
16878         (Catch.Resolve): Likewise.
16879         (Using.ResolveLocalVariableDecls): Likewise.
16880         (Foreach.Resolve): Likewise.
16881
16882 2004-10-05  John Luke <john.luke@gmail.com>
16883
16884         * cs-parser.jay: add location to error CS0175
16885
16886 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16887
16888         * ecore.cs (Expression.Constantity): Add support for turning null
16889         into a constant.
16890
16891         * const.cs (Const.Define): Allow constants to be reference types
16892         as long as the value is Null.
16893
16894 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16895
16896         * namespace.cs (NamespaceEntry.Using): No matter which warning
16897         level is set, check if this namespace name has already been added.
16898
16899 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16900
16901         * expression.cs: reftype [!=]= null should always use br[true,false].
16902         # 67410
16903
16904 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16905
16906         Fix #67108
16907         * attribute.cs: Enum conversion moved to 
16908         GetAttributeArgumentExpression to be applied to the all
16909         expressions.
16910
16911 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16912
16913         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16914         * class.c (TypeContainer.DefineType): Flag error if
16915         base types aren't accessible due to access permissions.
16916         * decl.cs (DeclSpace.ResolveType): Move logic to
16917         Expression.ResolveAsTypeTerminal.
16918         (DeclSpace.ResolveTypeExpr): Thin layer over
16919         Expression.ResolveAsTypeTerminal.
16920         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16921         Refactor code into NestedAccess.  Use it.
16922         (DeclSpace.NestedAccess): New.
16923         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16924         argument to silence errors.  Check access permissions.
16925         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16926         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16927         (Cast.DoResolve): Likewise.
16928         (New.DoResolve): Likewise.
16929         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16930         (TypeOf.DoResolve): Likewise.
16931
16932         * expression.cs (Invocation.BetterConversion): Return the Type of
16933         the better conversion.  Implement section 14.4.2.3 more faithfully.
16934         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16935         section 14.4.2.2 explicit.
16936         (Invocation.OverloadResolve): Update.
16937         (Invocation): Remove is_base field.
16938         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16939         (Invocation.Emit): Likewise.
16940
16941 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16942
16943         * README: Update to changes.
16944
16945 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16946
16947         * cs-parser.jay: Reverted 642 warning fix.
16948
16949 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16950
16951         Fix bug #66615
16952         * decl.cs (FindMemberWithSameName): Indexer can have more than
16953         1 argument.
16954
16955 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16956
16957         * expression.cs (LocalVariableReference.DoResolveLValue):
16958         Do not report warning 219 for out values.
16959         (EmptyExpression.Null): New member to avoid extra allocations.
16960
16961 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16962
16963         * cs-parser.jay: Fix wrong warning 642 report.
16964
16965         * cs-tokenizer.cs (CheckNextToken): New helper;
16966         Inspect next character if is same as expected.
16967
16968 2004-09-23  Martin Baulig  <martin@ximian.com>
16969
16970         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16971         (Convert.ImplicitReferenceConversionExists): Likewise.
16972
16973 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16974
16975         * class.cs (Operator.Define): Add error 448 and 559 report.
16976
16977 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16978
16979         * class.cs (MemberBase.IsTypePermitted): New protected
16980         method for checking error CS0610.
16981
16982 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16983
16984         * class.cs (TypeContainer.HasExplicitLayout): New property
16985         Returns whether container has StructLayout attribute set Explicit.
16986         (FieldMember): New abstract class for consts and fields.
16987         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16988         (Field): Reuse FieldMember.
16989
16990         * const.cs (Const): Reuse FieldMember.
16991
16992         * rootcontext.cs: EmitConstants call moved to class.
16993
16994 2004-09-22  Martin Baulig  <martin@ximian.com>
16995
16996         Thanks to Peter Sestoft for this bug report.
16997
16998         * expression.cs (Conditional): If both the `trueExpr' and the
16999         `falseExpr' is a NullLiteral, return a NullLiteral.
17000
17001 2004-09-22  Martin Baulig  <martin@ximian.com>
17002
17003         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
17004         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
17005         for the "get_Current" call.
17006
17007 2004-09-22  Martin Baulig  <martin@ximian.com>
17008
17009         Marek and me just fixed one of our oldest bugs: #28562 :-)
17010
17011         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
17012
17013         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
17014         we're an EnumConstant, just return that.
17015         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
17016         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
17017         to get the value which'll actually be written into the attribute.
17018         However, we have to use GetValue() to access the attribute's value
17019         in the compiler.        
17020
17021 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17022
17023         * constant.cs (Constant.IsNegative): New abstract property
17024         IsNegative.
17025
17026         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
17027         (StackAlloc.DoResolve): Reused IsNegative.
17028
17029 2004-09-21  Martin Baulig  <martin@ximian.com>
17030
17031         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
17032         if we're used in an iterator, we may be called from different
17033         methods.
17034
17035         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
17036         we actually have an exception block.
17037
17038 2004-09-20  John Luke <jluke@cfl.rr.com>
17039
17040         * class.cs, cs-parser.jay: Improve the error report for 1520:
17041         report the actual line where the error happens, not where the
17042         class was declared.
17043
17044         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
17045         Pass location information that was available elsewhere.
17046
17047 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
17048
17049         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
17050         runtime to delay sign assemblies.
17051
17052 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17053
17054         * cs-parser.jay: Do not report the stack trace, this is barely
17055         used nowadays.
17056
17057 2004-08-22  John Luke  <john.luke@gmail.com>
17058  
17059         * driver.cs : check that a resource id is not already used
17060         before adding it, report CS1508 if it is, bug #63637
17061
17062 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17063
17064         * ecore.cs: Removed dead code.
17065
17066 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
17067
17068         * class.cs: Do not report warning CS0067 on the interfaces.
17069
17070 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17071
17072         * cs-parser.jay: Add error 504 report.
17073
17074 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17075
17076         * rootcontext.cs: WarningLevel is 4 by default now.
17077
17078         * statement.cs (Fixed.Resolve): Do not null
17079         VariableInfo.
17080
17081 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17082
17083         Fixed bug #55780
17084         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
17085         deep search when property is not virtual.
17086         (PropertyExpr.ResolveAccessors): Make one call for both
17087         accessors.
17088
17089 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17090
17091         Fixed bug #65766
17092         * statement.cs: Error 152 report constains also location.
17093
17094 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17095
17096         Fixed bug #65766
17097         * const.cs: Explicitly set constant as static.
17098
17099 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17100
17101         Fixed bug #64226
17102         * cs-parser.jay: Add error 1017 report.
17103
17104 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17105
17106         Fixed bug #59980, #64224
17107         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
17108
17109         * typemanager.cs (IsSpecialMethod): Simplified
17110
17111 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17112
17113         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
17114         condition with better params.
17115
17116 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17117
17118         Fixed bug #65238
17119         * attribute.cs (Resolve): Property has to have both
17120         accessors.
17121
17122 2004-09-14  Martin Baulig  <martin@ximian.com>
17123
17124         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
17125
17126 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17127
17128         Fixed bug #61902
17129         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
17130         called and is obsolete then this member suppress message
17131         when call is inside next [Obsolete] method or type.
17132
17133         * expression.cs: Use TestObsoleteMethodUsage member.
17134
17135 2004-09-14  Martin Baulig  <martin@ximian.com>
17136
17137         * cs-parser.jay: Sync a bit with the GMCS version.
17138
17139 2004-09-14  Martin Baulig  <martin@ximian.com>
17140
17141         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
17142         (CSharpParser.yacc_verbose_flag): New public field.
17143
17144         * genericparser.cs: Removed.
17145
17146 2004-09-14  Raja R Harinath  <rharinath@novell.com>
17147
17148         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
17149
17150 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
17151
17152         * class.cs (MethodCore.CheckBase): Fix bug #65757.
17153
17154 2004-09-10  Martin Baulig  <martin@ximian.com>
17155
17156         Backported my MemberName changes from GMCS into MCS.
17157
17158         - we are now using a special `MemberName' class instead of using
17159         strings; in GMCS, the `MemberName' also contains the type
17160         arguments.
17161
17162         - changed the grammar rules a bit:
17163           * the old `member_name' is now a `namespace_or_type_name':
17164             The rule is that we use `namespace_or_type_name' everywhere
17165             where we expect either a "member name" (GetEnumerator) or a
17166             "member name" with an explicit interface name
17167             (IEnumerable.GetEnumerator).
17168             In GMCS, the explicit interface name may include type arguments
17169             (IEnumerable<T>.GetEnumerator).
17170           * we use `member_name' instead of just `IDENTIFIER' for
17171             "member names":
17172             The rule is that we use `member_name' wherever a member may
17173             have type parameters in GMCS.       
17174
17175         * decl.cs (MemberName): New public class.
17176         (MemberCore.MemberName): New public readonly field.
17177         (MemberCore.ctor): Take a `MemberName' argument, not a string.
17178         (DeclSpace): Likewise.
17179
17180         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
17181         * enum.cs (Enum.ctor): Likewise.
17182
17183         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
17184         MemberName.     
17185         (AliasEntry.ctor): Take a MemberName, not an Expression.
17186         (AliasEntry.UsingAlias): Likewise.
17187
17188         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
17189         (IMethodData.MemberName): Changed type from string to MemberName.
17190         (MemberBase.ExplicitInterfaceName): Likewise.
17191         (AbstractPropertyEventMethod.SetupName): Make this private.
17192         (AbstractPropertyEventMethod.ctor): Added `string prefix'
17193         argument; compute the member name here.
17194         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
17195         on the `member.MemberName' and the `prefix'.
17196
17197         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
17198         not `type_name'.
17199         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
17200         thus, we get a `MemberName' instead of a `string'.  These
17201         declarations may have type parameters in GMCS.
17202         (interface_method_declaration, delegate_declaration): Likewise.
17203         (class_declaration, interface_declaration): Likewise.
17204         (method_header): Use `namespace_or_type_name' instead of
17205         `member_name'.  We may be an explicit interface implementation.
17206         (property_declaration, event_declaration): Likewise.
17207         (member_name): This is now just an `IDENTIFIER', not a
17208         `namespace_or_type_name'.
17209         (type_name, interface_type): Removed.
17210         (namespace_or_type_name): Return a MemberName, not an Expression.
17211         (primary_expression): Use `member_name' instead of `IDENTIFIER';
17212         call GetTypeExpression() on the MemberName to get an expression.
17213         (IndexerDeclaration.interface_type): Changed type from string to
17214         MemberName.
17215         (MakeName): Operate on MemberName's instead of string's.
17216
17217 2004-09-13  Raja R Harinath  <rharinath@novell.com>
17218
17219         Fix bug #55770.
17220         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
17221         (NamespaceEntry.Lookup): Add new argument to flag if we want the
17222         lookup to avoid symbols introduced by 'using'.
17223         * rootcontext.cs (NamespaceLookup): Update.
17224
17225 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17226
17227         * class.cs (TypeContainer.DoDefineMembers): Do not call
17228         DefineDefaultConstructor for static classes.
17229
17230 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17231
17232         * attribute.cs (Attribute.Resolve): Add error 653 report.
17233
17234         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17235         report.
17236         (Method.ApplyAttributeBuilder): Add error 685 report.
17237         (Operator.Define): Add error 564 report.
17238
17239         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17240
17241         * expression.cs (Invocation.DoResolve): Add error
17242         245 and 250 report.
17243
17244         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17245         error 674 report.
17246
17247 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17248
17249         * class.cs (ConstructorInitializer.Resolve):
17250         Wrong error number (515->516).
17251
17252 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17253
17254         * class.cs (Indexer.Define): Add error 631 report.
17255
17256 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17257
17258         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17259
17260 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17261
17262         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17263
17264 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17265
17266         * cs-parser.jay: Added error CS0241 report.
17267
17268 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17269
17270         * cs-parser.jay (fixed_statement): Introduce a scope for the
17271         declaration in the 'fixed' statement.
17272
17273 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17274
17275         * cs-parser.jay: Added CS0230 error report.
17276
17277 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17278
17279         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17280
17281 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17282
17283         * expression.cs (Argument.Resolve): Added error CS0192 and
17284         CS0199 report.
17285
17286 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17287
17288         C# 2.0 #pragma warning feature
17289
17290         * cs-tokenizer.cs (PreProcessPragma): New method; 
17291         Handles #pragma directive.
17292
17293         * report.cs (WarningRegions): New class; Support
17294         class for #pragma warning directive. It tests whether
17295         warning is enabled for a given line.
17296
17297 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17298
17299         * const.cs: Add more descriptive error report, tahnks to
17300         Sebastien. 
17301
17302 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17303
17304         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17305
17306 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17307
17308         * expression.cs: Apply patch from Ben: Remove dead code from
17309         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17310         as that code just threw an exception anwyays.
17311
17312         * const.cs: Remove the call to the turnintoconstant, for details
17313         see bug: #63144
17314         
17315         * literal.cs: The type of the null-literal is the null type;  So
17316         we use a placeholder type (literal.cs:System.Null, defined here)
17317         for it.
17318
17319         * expression.cs (Conditional.DoResolve): Remove some old code that
17320         is no longer needed, conversions have been fixed.
17321
17322         (ArrayCreationExpression.DoResolve): Return false if we fail to
17323         resolve the inner expression.
17324
17325 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17326
17327         Fix test-290.cs.
17328         * cs-parser.jay (delegate_declaration): Record a delegate
17329         declaration as a type declaration.
17330         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17331
17332 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17333
17334         * parameter.cs: Do not crash if the type can not be resolved. 
17335
17336         * expression.cs: Report errors with unsafe pointers, fixes #64896
17337
17338 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17339
17340         * expression.cs: Pointer arith always needs to do a conv.i
17341         if the operand is a long. fix 65320
17342
17343 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17344
17345         Fixed cs0619-37.cs, cs0619-38.cs
17346
17347         * enum.cs (GetObsoleteAttribute): Removed.
17348
17349         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17350         on Enum member is double staged. The first is tested member
17351         and then enum.
17352
17353 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17354
17355         Fixed #56986, #63631, #65231
17356
17357         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17358         adds member to name container.
17359         (TypeContainer.AddToTypeContainer): New method, adds type to
17360         name container.
17361         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17362         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17363         AddOperator): Simplified by reusing AddToMemberContainer.
17364         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17365         instead of field.
17366         (Method.CheckForDuplications): Fixed implementation to test all
17367         possibilities.
17368         (MemberBase): Detection whether member is explicit interface
17369         implementation is now in constructor.
17370         (MemberBase.UpdateMemberName): Handles IndexerName.
17371         (Accessor): Changed to keep also location information.
17372         (AbstractPropertyEventMethod): Is derived from MemberCore.
17373         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17374         will be emited or not.
17375         (PropertyBase.AreAccessorsDuplicateImplementation):
17376         Tests whether accessors are not in collision with some method.
17377         (Operator): Is derived from MethodCore to simplify common
17378         operations.
17379
17380         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17381         must be performed.
17382         (DeclSpace.AddToContainer): Adds the member to defined_names
17383         table. It tests for duplications and enclosing name conflicts.
17384
17385         * enum.cs (EnumMember): Clean up to reuse the base structures
17386
17387 2004-09-03  Martin Baulig  <martin@ximian.com>
17388
17389         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17390         into TypeContainer, to make partial classes work again.
17391
17392 2004-09-03  Martin Baulig  <martin@ximian.com>
17393
17394         * rootcontext.cs (RootContext.V2): Removed.
17395
17396 2004-03-23  Martin Baulig  <martin@ximian.com>
17397
17398         * expression.cs (Invocation.OverloadResolve): Added `bool
17399         may_fail' argument and use it instead of the Location.IsNull() hack.
17400
17401 2004-09-03  Martin Baulig  <martin@ximian.com>
17402
17403         Merged latest changes into gmcs.  Please keep this comment in
17404         here, it makes it easier for me to see what changed in MCS since
17405         the last time I merged.
17406
17407 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17408
17409         Fix #61128.
17410         * expression.cs (BetterConversion): Don't allow either conversion 
17411         to be null.  Remove redundant implicit conversion test when 'q ==
17412         null' -- when this function is invoked, we already know that the
17413         implicit conversion exists.
17414         (BetterFunction): Assume that 'best' is non-null.  Remove
17415         redundant reimplementation of IsApplicable when 'best' is null.
17416         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17417         number of arguments.
17418         (IsAncestralType): Extract from OverloadResolve.
17419         (OverloadResolve): Make robust to the MethodGroupExpr being
17420         unsorted.  Implement all the logic of Section 14.5.5.1, and
17421         support overloading of methods from multiple applicable types.
17422         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17423
17424         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17425         (RealError, Warning): Append type of report to related symbol.
17426
17427 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17428
17429         * enum.cs: Fixed CLS-Compliance checks for enum members.
17430         Error tests cs3008-8.cs, cs3014-8.cs
17431
17432 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17433
17434         Fixed bug #62342, #63102
17435         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17436         like ImplementMethod.
17437
17438 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17439
17440         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17441         Fixed bug #65170.
17442
17443 2004-09-02  Martin Baulig  <martin@ximian.com>
17444
17445         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17446         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17447         on the MethodBase.
17448
17449 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17450
17451         C# 2.0 Static classes implemented
17452
17453         * class.cs (TypeContainer): instance_constructors,
17454         initialized_fields, initialized_static_fields,
17455         default_constructor, base_inteface_types are protected to be
17456         accessible from StaticClass.
17457         (TypeContainer.DefineDefaultConstructor): New virtual method
17458         for custom default constructor generating
17459         (StaticClass): New class to handle "Static classes" feature.
17460
17461         * cs-parser.jay: Handle static keyword on class like instance
17462         of StaticClass.
17463
17464         * driver.cs: Added "/langversion" command line switch with two
17465         options (iso-1, default).
17466
17467 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17468
17469         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17470
17471 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17472
17473         * delegate.cs: Style.
17474
17475 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17476
17477         * delegate.cs: Add seperate instance expr field for miguel.
17478
17479 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17480
17481         * PointerArithmetic (Resolve): make sure we are not doing
17482         pointer arith on void*. Also, make sure we are resolved
17483         by not setting eclass until resolve.
17484
17485         All callers: Make sure that PointerArithmetic gets resolved.
17486
17487 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17488
17489         * ArrayCreation (LookupType): If the type does not resolve 
17490         to an array, give an error.
17491
17492 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17493
17494         * statement.cs (Try.Resolve): Fixed bug #64222
17495
17496 2004-08-27  Martin Baulig  <martin@ximian.com>
17497
17498         * class.cs
17499         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17500         crash here.     
17501
17502 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17503
17504         * ecore.cs (Constantify): Get underlying type via
17505         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17506         Windows in special cases.
17507
17508 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17509
17510         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17511         for obtaining also private methods.
17512         (GetRemoveMethod): Used GetRemoveMethod (true)
17513         for obtaining also private methods.
17514
17515 2004-08-24  Martin Baulig  <martin@ximian.com>
17516
17517         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17518         MethodAttributes.HideBySig for operators.
17519
17520 2004-08-23  Martin Baulig  <martin@ximian.com>
17521
17522         Back to the old error reporting system :-)
17523
17524         * report.cs (Message): Removed.
17525         (Report.MessageData, ErrorData, WarningData): Removed.
17526         (Report.Error, Warning): Back to the old system.
17527
17528 2004-08-23  Martin Baulig  <martin@ximian.com>
17529
17530         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17531
17532         * class.cs (TypeContainer.ParentContainer): New public virtual
17533         method; replaces the explicit interface implementation.
17534         (ClassPart.ParentContainer): Override.
17535
17536 2004-08-23  Martin Baulig  <martin@ximian.com>
17537
17538         * statement.cs (Switch): Added support for constant switches; see
17539         #59428 or test-285.cs.
17540
17541 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17542
17543         Fixed bug #62740.
17544         * statement.cs (GetEnumeratorFilter): Removed useless
17545         logic because C# specs is strict. GetEnumerator must be
17546         public.
17547
17548 2004-08-22  Martin Baulig  <martin@ximian.com>
17549
17550         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17551         a switch and may break, reset the barrier.  Fixes #59867.
17552
17553 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17554
17555         CLS-Compliance speed up (~5% for corlib)
17556
17557         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17558         New method. Tests container for CLS-Compliant names
17559
17560         * class.cs (TypeContainer.VerifyClsName): New method.
17561         Checks whether container name is CLS Compliant.
17562         (Constructor): Implements IMethodData.
17563
17564         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17565         low-case table for CLS Compliance test.
17566         (MemberCache.VerifyClsParameterConflict): New method.
17567         Checks method parameters for CS3006 error.
17568
17569         * enum.cs (EnumMember): Is derived from MemberCore.
17570         (Enum.VerifyClsName): Optimized for better performance.
17571
17572 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17573
17574         * report.cs: Renamed Error_T to Error and changed all
17575         references.
17576
17577 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17578
17579         * class.cs (TypeContainer.IndexerArrayList): New inner class
17580         container for indexers.
17581         (TypeContainer.DefaultIndexerName): New constant for default
17582         indexer name. Replaced all "Item" with this constant.
17583         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17584
17585         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17586         DefaultMemberAttribute constructor.
17587
17588 2004-08-05  Martin Baulig  <martin@ximian.com>
17589
17590         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17591         Fix bug #59429.
17592
17593 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17594
17595         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17596         multi platforms problem.
17597
17598         * compiler.csproj: Included shared files.
17599
17600 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17601
17602         Fix bug 60333, 55971 in the more general way
17603         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17604         Added arg_type argument for constant conversion.
17605         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17606
17607 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17608
17609         Fix bug #59760
17610         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17611         OperatorArrayList, MethodCoreArrayList for typecontainer
17612         containers. Changed class member types to these new types.
17613         (MethodArrayList.DefineMembers): Added test for CS0659.
17614
17615 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17616
17617         * cfold.cs: Synchronize the folding with the code in expression.cs
17618         Binary.DoNumericPromotions for uint operands.
17619
17620         * attribute.cs: Revert patch from Raja, it introduced a regression
17621         while building Blam-1.2.1 (hard to isolate a test case).
17622
17623 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17624
17625         Fix for #55382
17626         * class.cs:
17627         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17628         name collision.
17629         (MethodCore.parent_method): New member. The method we're overriding
17630         if this is an override method.
17631         (MethodCore.CheckBase): Moved from Method class and made common.
17632         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17633         private.
17634         (MethodCore.CheckForDuplications): New abstract method. For custom
17635         member duplication search in a container
17636         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17637         method and its return type.
17638         (Event.conflict_symbol): New member. Symbol with same name in the
17639         parent class.
17640
17641         * decl.cs:
17642         (MemberCache.FindMemberWithSameName): New method. The method
17643         is looking for conflict with inherited symbols.
17644
17645 2004-08-04  Martin Baulig  <martin@ximian.com>
17646
17647         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17648
17649         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17650
17651 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17652
17653         * report.cs (Message): New enum for better error, warning reference in
17654         the code.
17655         (MessageData): New inner abstract class. It generally handles printing of
17656         error and warning messages.
17657         Removed unused Error, Warning, Message methods.
17658
17659 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17660
17661         Fix for cs0592-8.cs test
17662         * attribute.cs
17663         (Attributable.ValidAttributeTargets): Made public.
17664         (Attribute.ExplicitTarget): New member for explicit target value.
17665         (Attribute.CheckTargets): Now we translate explicit attribute
17666         target to Target here.
17667
17668 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17669
17670         * ecore.cs (MethodGroupExpr): new IsBase property.
17671
17672         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17673
17674         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17675         rather than an instance expr.
17676
17677         (DelegateCreation.Emit): Use the method group rather than
17678         the instance expression. Also, if you have base.Foo as the
17679         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17680
17681         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17682
17683         (NewDelegate.DoResolve): Only check for the existance of Invoke
17684         if the method is going to be needed. Use MethodGroupExpr.
17685
17686         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17687
17688         * expression.cs: For pointer arith., make sure to use
17689         the size of the type, not the size of the pointer to
17690         the type.
17691
17692 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17693
17694         Fix for #60722
17695         * class.cs (Class): Added error CS0502 test.
17696
17697 2004-08-03  John Luke  <jluke@cfl.rr.com>
17698             Raja R Harinath  <rharinath@novell.com>
17699
17700         Fix for #60997.
17701         * attribute.cs (Attribute.complained_before): New flag.
17702         (Attribute.ResolveType, Attribute.Resolve),
17703         (Attribute.DefinePInvokeMethod): Set it.
17704         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17705         
17706 2004-08-03  Martin Baulig  <martin@ximian.com>
17707
17708         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17709         use a user-defined operator; we still need to do numeric
17710         promotions in case one argument is a builtin type and the other
17711         one has an implicit conversion to that type.  Fixes #62322.
17712
17713 2004-08-02  Martin Baulig  <martin@ximian.com>
17714
17715         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17716         (LocalInfo.IsThis): New public property.
17717         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17718
17719 2004-08-01  Martin Baulig  <martin@ximian.com>
17720
17721         * class.cs (TypeContainer.GetClassBases): Don't set the default
17722         here since we may get called from GetPartialBases().
17723         (TypeContainer.DefineType): If GetClassBases() didn't return a
17724         parent, use the default one.
17725
17726 2004-07-30  Duncan Mak  <duncan@ximian.com>
17727
17728         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17729
17730 2004-07-30  Martin Baulig  <martin@ximian.com>
17731
17732         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17733
17734         * class.cs (SourceMethod): New public class, derive from the
17735         symbol writer's ISourceMethod.
17736         (Method): Use the new symbol writer API.
17737
17738         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17739         as argument and use the new symbol writer.
17740
17741         * location.cs
17742         (SourceFile): Implement the symbol writer's ISourceFile.
17743         (Location.SymbolDocument): Removed.
17744         (Location.SourceFile): New public property.
17745
17746         * symbolwriter.cs: Use the new symbol writer API.
17747
17748 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17749
17750         * Makefile (install-local): Remove.  Functionality moved to
17751         executable.make.
17752
17753 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17754
17755         * Makefile: Install mcs.exe.config file together with mcs.exe.
17756         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17757         correct runtime version.
17758         
17759 2004-07-25  Martin Baulig  <martin@ximian.com>
17760
17761         * class.cs
17762         (TypeContainer.RegisterOrder): Removed, this was unused.
17763         (TypeContainer, interface_order): Removed.
17764         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17765         TypeContainer as argument since we can also be called with a
17766         `PartialContainer' for a partial class/struct/interface.
17767         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17768         of checking whether we're an `Interface' - we could be a
17769         `PartialContainer'.
17770         (PartialContainer.Register): Override; call
17771         AddClass()/AddStruct()/AddInterface() on our parent.
17772
17773         * cs-parser.jay (interface_member_declaration): Add things to the
17774         `current_container', not the `current_class'.
17775
17776         * rootcontext.cs (RegisterOrder): The overloaded version which
17777         takes an `Interface' was unused, removed.
17778
17779         * typemanager.cs (TypeManager.LookupInterface): Return a
17780         `TypeContainer', not an `Interface'.
17781         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17782         contain a `PartialContainer' for an interface, so check it's
17783         `Kind' to figure out what it is.
17784
17785 2004-07-25  Martin Baulig  <martin@ximian.com>
17786
17787         * class.cs (Class.DefaultTypeAttributes): New public constant.
17788         (Struct.DefaultTypeAttributes): Likewise.
17789         (Interface.DefaultTypeAttributes): Likewise.
17790         (PartialContainer.TypeAttr): Override this and add the
17791         DefaultTypeAttributes.
17792
17793 2004-07-25  Martin Baulig  <martin@ximian.com>
17794
17795         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17796         we can just use the `Parent' field instead.
17797
17798 2004-07-25  Martin Baulig  <martin@ximian.com>
17799
17800         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17801
17802 2004-07-25  Martin Baulig  <martin@ximian.com>
17803
17804         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17805         our parts before defining any methods.
17806         (TypeContainer.VerifyImplements): Make this virtual.
17807         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17808         on our PartialContainer.
17809
17810 2004-07-25  Martin Baulig  <martin@ximian.com>
17811
17812         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17813
17814         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17815         argument, we can just use the `Parent' field instead.
17816
17817         * class.cs
17818         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17819         (MemberBase.DoDefine): Likewise.
17820
17821 2004-07-24  Martin Baulig  <martin@ximian.com>
17822
17823         * decl.cs (MemberCore.Parent): New public field.
17824         (DeclSpace.Parent): Moved to MemberCore.
17825
17826         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17827         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17828         parent's .ctor.
17829         (FieldBase, Field, Operator): Likewise.
17830         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17831         (EventField, Event): Likewise.
17832
17833 2004-07-23  Martin Baulig  <martin@ximian.com>
17834
17835         * class.cs (PartialContainer): New public class.
17836         (ClassPart): New public class.
17837         (TypeContainer): Added support for partial classes.
17838         (TypeContainer.GetClassBases): Splitted some of the functionality
17839         out into GetNormalBases() and GetPartialBases().
17840
17841         * cs-tokenizer.cs (Token.PARTIAL): New token.
17842         (Tokenizer.consume_identifier): Added some hacks to recognize
17843         `partial', but only if it's immediately followed by `class',
17844         `struct' or `interface'.
17845
17846         * cs-parser.jay: Added support for partial clases.
17847
17848 2004-07-23  Martin Baulig  <martin@ximian.com>
17849
17850         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17851         a `DeclSpace' and also made it readonly.
17852         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17853         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17854         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17855
17856         * cs-parser.jay: Pass the `current_class', not the
17857         `current_container' (at the moment, this is still the same thing)
17858         to a new Method, Property, Event, Indexer or Constructor.
17859
17860 2004-07-23  Martin Baulig  <martin@ximian.com>
17861
17862         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17863         and removed the `current_interface' one.
17864         (struct_declaration, class_declaration, interface_declaration):
17865         Set `current_class' to the newly created class/struct/interface;
17866         set their `Bases' and call Register() before parsing their body.
17867
17868 2004-07-23  Martin Baulig  <martin@ximian.com>
17869
17870         * class.cs (Kind): New public enum.
17871         (TypeContainer): Made this class abstract.
17872         (TypeContainer.Kind): New public readonly field.
17873         (TypeContainer.CheckDef): New public method; moved here from
17874         cs-parser.jay.
17875         (TypeContainer.Register): New public abstract method.
17876         (TypeContainer.GetPendingImplementations): New public abstract
17877         method.
17878         (TypeContainer.GetClassBases): Removed the `is_class' and
17879         `is_iface' parameters.
17880         (TypeContainer.DefineNestedTypes): Formerly known as
17881         DoDefineType().
17882         (ClassOrStruct): Made this class abstract.
17883
17884         * tree.cs (RootTypes): New public type. 
17885
17886 2004-07-20  Martin Baulig  <martin@ximian.com>
17887
17888         * tree.cs (Tree.RecordNamespace): Removed.
17889         (Tree.Namespaces): Removed.
17890
17891         * rootcontext.cs (RootContext.IsNamespace): Removed.
17892
17893         * cs-parser.jay (namespace_declaration): Just create a new
17894         NamespaceEntry here.
17895
17896 2004-07-20  Martin Baulig  <martin@ximian.com>
17897
17898         * statement.cs (ExceptionStatement): New abstract class.  This is
17899         now used as a base class for everyone who's using `finally'.
17900         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17901         our local variables before using them.
17902
17903         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17904         virtual method.  This is used by Yield.Resolve() to "steal" an
17905         outer block's `finally' clauses.
17906         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17907         argument.
17908
17909         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17910         version which takes an ExceptionStatement.  This version must be
17911         used to create exception branchings.
17912
17913         * iterator.cs
17914         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17915         (Iterator.EmitMoveNext): Added exception support; protect the
17916         block with a `fault' clause, properly handle 'finally' clauses.
17917         (Iterator.EmitDispose): Run all the `finally' clauses here.
17918
17919 2004-07-20  Martin Baulig  <martin@ximian.com>
17920
17921         * iterator.cs: This is the first of a set of changes in the
17922         iterator code.  Match the spec more closely: if we're an
17923         IEnumerable, then GetEnumerator() must be called.  The first time
17924         GetEnumerator() is called, it returns the current instance; all
17925         subsequent invocations (if any) must create a copy.
17926
17927 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17928
17929         * expression.cs: Resolve the constant expression before returning
17930         it. 
17931
17932 2004-07-19  Martin Baulig  <martin@ximian.com>
17933
17934         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17935         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17936         the return type of the new EmitContext.
17937
17938 2004-07-18  Martin Baulig  <martin@ximian.com>
17939
17940         * class.cs (Property.Define): Fix iterators.
17941
17942         * iterators.cs (Iterator.Define): Moved the
17943         `container.AddInterator (this)' call here from the .ctor; only do
17944         it if we resolved successfully.
17945
17946 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17947
17948         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17949         `true' for preprocessing directives that we parse.  The return
17950         value indicates whether we should return to regular tokenizing or
17951         not, not whether it was parsed successfully.
17952
17953         In the past if we were in: #if false ... #line #endif, we would
17954         resume parsing after `#line'.  See bug 61604.
17955
17956         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17957         building: IsEnumType should return true only for enums, not for
17958         enums or System.Enum itself.  This fixes #61593.
17959
17960         Likely what happened is that corlib was wrong: mcs depended on
17961         this bug in some places.  The bug got fixed, we had to add the
17962         hack, which caused bug 61593.
17963
17964         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17965         that was a workaround for the older conditions.
17966
17967 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17968
17969         * assign.cs: IAssignMethod has a new interface, as documented
17970         inline. All assignment code now uses this new api.
17971
17972         * ecore.cs, expression.cs: All classes which implement
17973         IAssignMethod now use the new interface.
17974
17975         * expression.cs (Invocation): add a hack to EmitCall so that
17976         IndexerAccess can be the target of a compound assignment without
17977         evaluating its arguments twice.
17978
17979         * statement.cs: Handle changes in Invocation api.
17980
17981 2004-07-16  Martin Baulig  <martin@ximian.com>
17982
17983         * iterators.cs: Rewrote this.  We're now using one single Proxy
17984         class for both the IEnumerable and the IEnumerator interface and
17985         `Iterator' derives from Class so we can use the high-level API.
17986
17987         * class.cs (TypeContainer.AddIterator): New method.
17988         (TypeContainer.DoDefineType): New protected virtual method, which
17989         is called from DefineType().
17990         (TypeContainer.DoDefineMembers): Call DefineType() and
17991         DefineMembers() on all our iterators.
17992         (TypeContainer.Emit): Call Emit() on all our iterators.
17993         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17994
17995         * codegen.cs (EmitContext.CurrentIterator): New public field.
17996
17997 2004-07-15  Martin Baulig  <martin@ximian.com>
17998
17999         * typemanager.cs
18000         (TypeManager.not_supported_exception_type): New type.   
18001
18002 2004-07-14  Martin Baulig  <martin@ximian.com>
18003
18004         * iterators.cs: Use real error numbers.
18005
18006 2004-07-14  Martin Baulig  <martin@ximian.com>
18007
18008         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
18009         requires this to be a System.Collection.IEnumerable and not a
18010         class implementing that interface.
18011         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
18012
18013 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
18014
18015         * class.cs: Fixed previous fix, it broke some error tests.
18016
18017 2004-07-12  Martin Baulig  <martin@ximian.com>
18018
18019         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
18020         Fixes #61293.
18021
18022 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
18023
18024         * assign.cs (LocalTemporary): Add new argument: is_address,If
18025         `is_address' is true, then the value that we store is the address
18026         to the real value, and not the value itself.
18027         
18028         * ecore.cs (PropertyExpr): use the new local temporary
18029         stuff to allow us to handle X.Y += z (where X is a struct)
18030
18031 2004-07-08  Martin Baulig  <martin@ximian.com>
18032
18033         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
18034         not always return, just like we're doing in Using.Resolve().
18035
18036 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
18037
18038         * cs-parser.jay (fixed_statement): flag this as Pinned.
18039
18040 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
18041
18042         * typemanager.cs (TypeManager): Removed MakePinned method, this
18043         mechanism is replaced with the .NET 2.x compatible mechanism of
18044         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
18045
18046         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
18047         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
18048         `IsFixed' property which has a different meaning.
18049
18050 2004-07-02  Raja R Harinath  <rharinath@novell.com>
18051
18052         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
18053         visible from inside a nested class, not just the names of the
18054         immediately enclosing class.
18055         Fix for bug #60730.
18056
18057 2004-06-24  Raja R Harinath  <rharinath@novell.com>
18058
18059         * expression.cs (BetterConversion): Remove buggy special-case
18060         handling of "implicit constant expression conversions".  At this
18061         point, we already know that the conversion is possible -- we're
18062         only checking to see which is better.
18063
18064 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18065
18066         * cs-parser.jay: Added error CS0210 test.
18067
18068 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18069
18070         * cs-parser.jay: Added error CS0134 test.
18071
18072 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18073
18074         Fix bug #52507
18075         * cs-parser.jay: Added error CS0145 test.
18076
18077 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18078
18079         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
18080
18081 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
18082         
18083         * expression.cs (StackAlloc.Resolve): The argument may not
18084         be a constant; deal with this case.
18085         
18086 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
18087
18088         * attribute.cs (IndexerName_GetIndexerName): Renamed to
18089         GetIndexerAttributeValue.
18090         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
18091
18092         * class.cs (Indexer.Define): Added error tests for CS0415,
18093         CS0609.
18094
18095 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
18096
18097         * attribute.cs (Attribute.Resolve): Keep field code in sync with
18098         property code.
18099
18100 2004-06-23  Martin Baulig  <martin@ximian.com>
18101
18102         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
18103         neither return nor throw, reset the barrier as well.  Fixes #60457.
18104
18105 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
18106
18107         * class.cs : EventAttributes is now set to None by default.
18108           This fixes bug #60459.
18109
18110 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18111
18112         Fix bug #60219
18113         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18114         Don't throw exception but return null (it's sufficient now).
18115
18116 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18117
18118         * typemanager.cs (GetArgumentTypes): Faster implementation.
18119
18120 2004-06-18  Martin Baulig  <martin@ximian.com>
18121
18122         * attribute.cs (Attribute.Resolve): Check whether we're an
18123         EmptyCast which a Constant child.  Fixes #60333.
18124
18125 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
18126
18127         * statement.cs (EmitCollectionForeach): Account for the fact that
18128         not all valuetypes are in areas which we can take the address of.
18129         For these variables, we store to a temporary variable. Also, make
18130         sure that we dont emit a `callvirt' on a valuetype method.
18131
18132 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18133
18134         * expression.cs (StackAlloc.DoReSolve): Added test for
18135         negative parameter (CS0247).
18136
18137 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18138
18139         Fix bug #59792
18140         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
18141
18142 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18143
18144         Fix bug #59781
18145         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
18146         ulong.
18147
18148 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18149
18150         Fix bug #58254 & cs1555.cs, cs1556.cs
18151         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
18152
18153 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18154
18155         * cs-parser.jay: Added error CS1669 test for indexers.
18156
18157 2004-06-11  Martin Baulig  <martin@ximian.com>
18158
18159         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
18160         call this twice: for params and varargs methods.
18161
18162 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18163
18164         * class.cs:
18165         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
18166
18167 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18168
18169         * attribute.cs (Attribute.GetValidTargets): Made public.
18170
18171         * class.cs: 
18172         (AbstractPropertyEventMethod): New class for better code sharing.
18173         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
18174         CS1667 report.
18175         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
18176
18177 2004-06-11  Raja R Harinath  <rharinath@novell.com>
18178
18179         Fix bug #59477.
18180         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
18181         that the call to Resolve is part of a MemberAccess.
18182         (Expression.Resolve): Use it for SimpleName resolution.
18183         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
18184         Add 'intermediate' boolean argument.
18185         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
18186         error message when the SimpleName can be resolved ambiguously
18187         between an expression and a type.
18188         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
18189         public.
18190         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
18191         call on the left-side.
18192
18193 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18194
18195         * class.cs:
18196         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
18197
18198 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18199
18200         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
18201
18202 2004-06-11  Martin Baulig  <martin@ximian.com>
18203
18204         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
18205         varargs methods if applicable.
18206
18207 2004-06-11  Martin Baulig  <martin@ximian.com>
18208
18209         * expression.cs (Invocation.EmitCall): Don't use
18210         `method.CallingConvention == CallingConventions.VarArgs' since the
18211         method could also have `CallingConventions.HasThis'.
18212
18213 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18214
18215         * class.cs (Event.GetSignatureForError): Implemented.
18216         Fixed crash in error test cs3010.cs
18217
18218 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
18219
18220         * cs-tokenizer.cs: Change the way we track __arglist to be
18221         consistent with the other keywords.
18222
18223 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
18224
18225         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
18226         tomorrow.
18227
18228 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18229
18230         * codegen.cs: Check that all referenced assemblies have a strongname
18231         before strongnaming the compiled assembly. If not report error CS1577.
18232         Fix bug #56563. Patch by Jackson Harper.
18233         * typemanager.cs: Added a method to return all referenced assemblies.
18234         Fix bug #56563. Patch by Jackson Harper.
18235
18236 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18237
18238         * class.cs:
18239         (Method.ApplyAttributeBuilder): Moved and added conditional
18240         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18241
18242         * delegate.cs:
18243         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18244
18245 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18246
18247         Fixed #59640
18248         * class.cs: (EventField.attribute_targets): Changed default target.
18249
18250 2004-06-08  Martin Baulig  <martin@ximian.com>
18251
18252         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18253
18254 2004-06-08  Martin Baulig  <martin@ximian.com>
18255
18256         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18257
18258 2004-06-07  Martin Baulig  <martin@ximian.com>
18259
18260         Added support for varargs methods.
18261
18262         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18263         keyword.
18264
18265         * cs-parser.jay: Added support for `__arglist'.
18266
18267         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18268
18269         * expression.cs (Argument.AType): Added `ArgList'.
18270         (Invocation): Added support for varargs methods.
18271         (ArglistAccess): New public class.
18272         (Arglist): New public class.
18273
18274         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18275
18276         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18277         a method's top-level block if the method has varargs.
18278
18279         * support.cs (ReflectionParameters, InternalParameters): Added
18280         support for varargs methods.    
18281
18282 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18283
18284         * class.cs: Provide location in indexer error report.
18285
18286         * driver.cs: Use standard names.
18287
18288         * namespace.cs: Catch the use of using after a namespace has been
18289         declared also on using aliases.
18290
18291 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18292
18293         Bug #50820.
18294         * typemanager.cs (closure_private_ok, closure_invocation_type)
18295         (closure_qualifier_type, closure_invocation_assembly)
18296         (FilterWithClosure): Move to ...
18297         (Closure): New internal nested class.
18298         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18299         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18300         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18301         (MemberLookup, MemberLookupFailed): Use it.
18302         * expression.cs (New.DoResolve): Treat the lookup for the
18303         constructor as being qualified by the 'new'ed type.
18304         (Indexers.GetIndexersForTypeOrInterface): Update.
18305
18306 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18307
18308         * attribute.cs
18309         (GetConditionalAttributeValue): New method. Returns
18310         condition of ConditionalAttribute.
18311         (SearchMulti): New method.  Returns all attributes of type 't'.
18312         Use it when attribute is AllowMultiple = true.
18313         (IsConditionalMethodExcluded): New method.
18314
18315         * class.cs
18316         (Method.IsExcluded): Implemented. Returns true if method has conditional
18317         attribute and the conditions is not defined (method is excluded).
18318         (IMethodData): Extended interface for ConditionalAttribute support.
18319         (PropertyMethod.IsExcluded): Implemented.
18320
18321         * decl.cs
18322         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18323
18324         * expression.cs
18325         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18326         on the method.
18327
18328 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18329
18330         * expression.cs (ArrayCreationExpression): Make this just an
18331         `expression'. It can't be a statement, so the code here was
18332         dead.
18333
18334 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18335
18336         Fixed #59072
18337         * typemanager.cs (GetFullNameSignature): New method for
18338         MethodBase types.
18339
18340 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18341
18342         Fixed #56452
18343         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18344         Use this method when MethodBuilder is null.
18345         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18346         Added test for error CS0626 (MONO reports error for this situation).
18347         (IMethodData.GetSignatureForError): Extended interface.
18348
18349 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18350
18351         * attribute.cs
18352         (AttributeTester.GetObsoleteAttribute): Returns instance of
18353         ObsoleteAttribute when type is obsolete.
18354
18355         * class.cs
18356         (TypeContainer.VerifyObsoleteAttribute): Override.
18357         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18358         (MethodCode.VerifyObsoleteAttribute): Override.
18359         (MemberBase.VerifyObsoleteAttribute): Override.
18360
18361         * decl.cs
18362         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18363         and report proper error.
18364
18365         *delegate.cs
18366         Delegate.VerifyObsoleteAttribute): Override.
18367
18368         * ecore.cs
18369         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18370         and report proper error.
18371         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18372
18373         * enum.cs
18374         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18375         and enum member.
18376
18377         * expression.cs
18378         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18379         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18380         Added test for ObsoleteAttribute.
18381
18382         * statement.cs
18383         (Catch): Derived from Statement.
18384
18385 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18386  
18387         Fixed bug #59071 & cs0160.cs
18388  
18389         * statement.cs (Try.Resolve): Check here whether order of catch
18390         clauses matches their dependencies.
18391
18392 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18393
18394         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18395         caused a regression: #59343.  Referencing nested classes from an
18396         assembly stopped working.
18397
18398 2004-05-31  Martin Baulig  <martin@ximian.com>
18399
18400         MCS is now frozen for beta 2.
18401
18402 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18403
18404         * convert.cs: add a trivial cache for overload operator resolution.
18405
18406 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18407
18408         * decl.cs: If possible, use lookuptypedirect here. We can only do
18409         this if there is no `.' after the namespace. Avoids using
18410         LookupType, which does lots of slow processing.
18411         (FindNestedType) New method, does what it says :-).
18412         * namespace.cs: use LookupTypeDirect.
18413         * rootcontext.cs: use membercache, if possible.
18414         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18415
18416 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18417
18418         * expression.cs:
18419         According to the spec, 
18420
18421         In a member access of the form E.I, if E is a single identifier,
18422         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18423         field, property, localvariable, or parameter with the same type as
18424         the meaning of E as a type-name (§3.8), then both possible
18425         meanings of E are permitted.
18426
18427         We did not check that E as a simple-name had the same type as E as
18428         a type name.
18429
18430         This trivial check gives us 5-7% on bootstrap time.
18431
18432 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18433
18434         * expression.cs (Invocation.OverloadResolve): Avoid the
18435         use of hashtables and boxing here by allocating on demand.
18436
18437 2004-05-30  Martin Baulig  <martin@ximian.com>
18438
18439         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18440         we're doing a silent lookup.  Don't try to lookup nested types in
18441         TypeManager.object_type (thanks to Ben Maurer).
18442
18443 2004-05-30  Martin Baulig  <martin@ximian.com>
18444
18445         Committing a patch from Ben Maurer.
18446
18447         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18448
18449 2004-05-29  Martin Baulig  <martin@ximian.com>
18450
18451         * class.cs (IMethodData.ShouldIgnore): New method.
18452
18453         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18454         `Location' argument, we don't need it anywhere.  Use
18455         `IMethodData.ShouldIgnore ()' instead of
18456         `MethodData.GetMethodFlags ()'.
18457         (TypeManager.AddMethod): Removed.
18458         (TypeManager.AddMethod2): Renamed to AddMethod.
18459
18460 2004-05-29  Martin Baulig  <martin@ximian.com>
18461
18462         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18463
18464         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18465         converting from a class type S to an interface type and we already
18466         have an object on the stack, don't box it again.  Fixes #52578.
18467
18468 2004-05-29  Martin Baulig  <martin@ximian.com>
18469
18470         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18471         Added support for `params' parameters.  Fixes #59267.
18472
18473 2004-05-29  Martin Baulig  <martin@ximian.com>
18474
18475         * literal.cs (NullPointer): Provide a private .ctor which sets
18476         `type' to TypeManager.object_type.  Fixes #59048.
18477
18478 2004-05-29  Martin Baulig  <martin@ximian.com>
18479
18480         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18481         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18482
18483         * ecore.cs (EventExpr.instance_expr): Make the field private.
18484
18485 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18486
18487         Fixed bug #50080 & cs0214-2.cs
18488         * expression.cs (Cast.DoResolve): Check unsafe context here.
18489         
18490         * statement.cs (Resolve.DoResolve): Likewise.
18491
18492 2004-05-26  Martin Baulig  <martin@ximian.com>
18493
18494         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18495
18496         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18497         (RootContext.LookupType): Pass down the `silent' flag.
18498
18499 2004-05-25  Martin Baulig  <martin@ximian.com>
18500
18501         * expression.cs
18502         (MethodGroupExpr.IdenticalTypeName): New public property.
18503         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18504         expression actually refers to a type.
18505
18506 2004-05-25  Martin Baulig  <martin@ximian.com>
18507
18508         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18509         for #56176 and made it actually work.
18510
18511 2004-05-25  Martin Baulig  <martin@ximian.com>
18512
18513         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18514         (FieldExpr, PropertyExpr): Override and implement
18515         CacheTemporaries.  Fixes #52279.
18516
18517 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18518
18519         * location.cs: In the new compiler listing a file twice is a
18520         warning, not an error.
18521
18522 2004-05-24  Martin Baulig  <martin@ximian.com>
18523
18524         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18525         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18526
18527 2004-05-24  Martin Baulig  <martin@ximian.com>
18528
18529         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18530         walking the `using' list.  Fixes #53921.
18531
18532 2004-05-24  Martin Baulig  <martin@ximian.com>
18533
18534         * const.cs (Const.LookupConstantValue): Added support for
18535         EmptyCast's; fixes #55251.
18536
18537 2004-05-24  Martin Baulig  <martin@ximian.com>
18538
18539         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18540         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18541         which does the CS0135 check.  The reason is that we first need to
18542         check whether the variable actually exists.
18543
18544 2004-05-24  Martin Baulig  <martin@ximian.com>
18545
18546         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18547         than RootContext.LookupType() to find the explicit interface
18548         type.  Fixes #58584.
18549
18550 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18551
18552         * Makefile: Simplify.  Use executable.make.
18553         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18554
18555 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18556
18557         * decl.cs:
18558         * enum.cs:
18559         Use the invariant culture when doing String.Compare for CLS case
18560         sensitivity.
18561         
18562 2004-05-23  Martin Baulig  <martin@ximian.com>
18563
18564         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18565         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18566
18567         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18568         
18569 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18570
18571         * class.cs (MemberBase.Define): Reuse MemberType member for 
18572         resolved type. Other methods can use it too.
18573
18574 2004-05-23  Martin Baulig  <martin@ximian.com>
18575
18576         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18577         the variable also exists in the current block (otherwise, we need
18578         to report a CS0103).  Fixes #58670.
18579
18580 2004-05-23  Martin Baulig  <martin@ximian.com>
18581
18582         * flowanalysis.cs (Reachability.Reachable): Compute this
18583         on-the-fly rather than storing it as a field.
18584
18585 2004-05-23  Martin Baulig  <martin@ximian.com>
18586
18587         * flowanalysis.cs (Reachability.And): Manually compute the
18588         resulting `barrier' from the reachability.      
18589        
18590 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18591
18592         Fix bug #57835
18593         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18594         instance of ObsoleteAttribute when symbol is obsolete.
18595
18596         * class.cs
18597         (IMethodData): Extended interface for ObsoleteAttribute support.
18598
18599 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18600
18601         * attribute.cs: Fix bug #55970
18602
18603 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18604
18605         Fix bug #52705
18606         * attribute.cs
18607         (GetObsoleteAttribute): New method. Creates the instance of
18608         ObsoleteAttribute.
18609         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18610         ObsoleteAttribute when member is obsolete.
18611         (AttributeTester.Report_ObsoleteMessage): Common method for
18612         Obsolete error/warning reporting.
18613
18614         * class.cs
18615         (TypeContainer.base_classs_type): New member for storing parent type.
18616
18617         * decl.cs
18618         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18619         for this MemberCore.
18620
18621 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18622
18623         * attribute.cs, const.cs: Fix bug #58590
18624
18625 2004-05-21  Martin Baulig  <martin@ximian.com>
18626
18627         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18628         out parameters if the end of the method is unreachable.  Fixes
18629         #58098. 
18630
18631 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18632
18633         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18634         Hari was right, why extra method.
18635
18636 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18637
18638         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18639
18640 2004-05-20  Martin Baulig  <martin@ximian.com>
18641
18642         Merged this back from gmcs to keep the differences to a minumum.
18643
18644         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18645         instead of a Declspace.
18646         (Attribute.ResolveType): Likewise.
18647         (Attributes.Search): Likewise.
18648         (Attributes.Contains): Likewise.
18649         (Attributes.GetClsCompliantAttribute): Likewise.
18650
18651         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18652         argument.
18653         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18654         DeclSpace.
18655
18656 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18657
18658         Fix bug #58688 (MCS does not report error when the same attribute
18659         is assigned twice)
18660
18661         * attribute.cs (Attribute.Emit): Distinction between null and default.
18662
18663 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18664
18665         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18666         of a top-level attribute without an attribute target.
18667         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18668         Make non-static.
18669         (Attribute.Conditional_GetConditionName), 
18670         (Attribute.Obsolete_GetObsoleteMessage): Update.
18671         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18672         part of ScanForIndexerName.
18673         (Attribute.CanIgnoreInvalidAttribute): New function.
18674         (Attribute.ScanForIndexerName): Move to ...
18675         (Attributes.ScanForIndexerName): ... here.
18676         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18677         (Attributes.Search): New internal variant that can choose not to
18678         complain if types aren't resolved.  The original signature now
18679         complains.
18680         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18681         complaints suppressed.
18682         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18683         only if it not useful.
18684         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18685         top-level for attributes that are shared between the assembly
18686         and a top-level class.
18687         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18688         * class.cs: Update to reflect changes.
18689         (DefineIndexers): Fuse loops.
18690         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18691         a couple more variants of attribute names.
18692
18693 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18694
18695         Fix bug #52585 (Implemented explicit attribute declaration)
18696
18697         * attribute.cs:
18698         (Attributable.ValidAttributeTargets): New abstract method. It gets
18699         list of valid attribute targets for explicit target declaration.
18700         (Attribute.Target): It holds target itself.
18701         (AttributeSection): Removed.
18702         (Attribute.CheckTargets): New method. It checks whether attribute
18703         target is valid for the current element.
18704
18705         * class.cs:
18706         (EventProperty): New class. For events that are declared like
18707         property (with add and remove accessors).
18708         (EventField): New class. For events that are declared like field.
18709         class.cs
18710
18711         * cs-parser.jay: Implemented explicit attribute target declaration.
18712
18713         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18714         Override ValidAttributeTargets.
18715
18716         * parameter.cs:
18717         (ReturnParameter): Class for applying custom attributes on 
18718         the return type.
18719         (ParameterAtribute): New class. Class for applying custom
18720         attributes on the parameter type.
18721
18722 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18723
18724         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18725         definitions. 
18726
18727         (Method): Allow UNSAFE here.
18728
18729         * modifiers.cs: Support unsafe reporting.
18730
18731 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18732
18733         * decl.cs: Fix bug #58478.
18734
18735 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18736
18737         * statement.cs: When checking for unreachable code on an EmptyStatement,
18738         set the location. Fixes bug #58488.
18739
18740 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18741
18742         * driver.cs: Add -pkg handling.
18743
18744         From Gonzalo: UseShelLExecute=false
18745
18746 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18747
18748         * attribute.cs:
18749         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18750         for attribute.
18751         (Attribute.IsClsCompliaceRequired): Moved to base for better
18752         accesibility.
18753         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18754         when attribute is AttributeUsageAttribute.
18755         (Attribute.GetValidTargets): Simplified.
18756         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18757         attribute for this type.
18758         (Attribute.ApplyAttributes): Method renamed to Emit and make
18759         non-static.
18760         (GlobalAttributeSection): New class for special handling of global
18761         attributes (assembly, module).
18762         (AttributeSection.Emit): New method.
18763
18764         * class.cs: Implemented Attributable abstract methods.
18765         (MethodCore.LabelParameters): Moved to Parameter class.
18766         (Accessor): Is back simple class.
18767         (PropertyMethod): Implemented Attributable abstract class.
18768         (DelegateMethod): Implemented Attributable abstract class.
18769         (Event): New constructor for disctintion between normal Event
18770         and Event with accessors.
18771
18772         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18773
18774         * codegen.cs, const.cs, decl.cs, delegate.cs:
18775         (CommonAssemblyModulClass): Implemented Attributable abstract class
18776         and simplified.
18777
18778         * enum.cs: Implement IAttributeSupport interface.
18779         (EnumMember): New class for emum members. Implemented Attributable
18780         abstract class
18781
18782         * parameter.cs:
18783         (ParameterBase): Is abstract.
18784         (ReturnParameter): New class for easier [return:] attribute handling.
18785
18786         * typemanager.cs: Removed builder_to_attr.
18787
18788 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18789
18790         Fix bug #57151.
18791         * attribute.cs (Attribute.GetPositionalValue): New function.
18792         * class.cs (TypeContainer.VerifyMembers): New function.
18793         (TypeContainer.Emit): Use it.
18794         (ClassOrStruct): New base class for Class and Struct.
18795         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18796         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18797         class.
18798         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18799         then each non-static field should have a FieldOffset attribute.
18800         Otherwise, none of the fields should have a FieldOffset attribute.
18801         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18802         and FieldOffset attributes.
18803         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18804         (TypeManager.field_offset_attribute_type): New core types.
18805         (TypeManager.InitCoreTypes): Initialize them.
18806
18807 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18808
18809         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18810         Return correct type.
18811         From bug #58270.
18812
18813 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18814
18815         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18816         be implicitly converted to ulong.
18817         
18818         * expression.cs: The logic for allowing operator &, | and ^ worked
18819         was wrong, it worked before because we did not report an error in
18820         an else branch.  Fixes 57895.
18821
18822         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18823         allow volatile fields to be reference types.
18824
18825 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18826
18827         * driver.cs: Add support for /debug-
18828
18829 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18830
18831         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18832         Add a 'complain' parameter to silence errors.
18833         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18834         silently overlooked type-resolutions.
18835         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18836         to reflect changes.
18837         (Attributes.Search): New function.
18838         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18839         (Attributes.GetAttributeFullName): Remove hack.
18840         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18841         Update to reflect changes.
18842         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18843         Use Attributes.Search instead of nested loops.
18844
18845 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18846
18847         * decl.cs:
18848         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18849         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18850         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18851
18852         * report.cs: (Report.Warning): Renamed to Warning_T because of
18853         parameter collision.
18854
18855 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18856
18857         * expression.cs (MemberAccess.ResolveMemberAccess):
18858         Exit with non-zero status after Report.Error.
18859         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18860         Likewise.
18861         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18862
18863 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18864
18865         * support.cs: Don't hang when the file is empty.
18866
18867 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18868
18869         * support.cs: In SeekableStreamReader, compute the preamble size of the
18870           underlying stream. Position changes should take into account that initial
18871           count of bytes.
18872
18873 2004-05-03  Todd Berman  <tberman@sevenl.net>
18874
18875         * driver.cs: remove unused GetSysVersion function.
18876
18877 2004-05-03  Todd Berman  <tberman@sevenl.net>
18878
18879         * driver.cs: Remove the hack from saturday, as well as the hack
18880         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18881         link_paths to get that bit proper.
18882
18883 2004-05-01  Todd Berman  <tberman@sevenl.net>
18884
18885         * driver.cs: Try a LoadFrom before a Load, this checks the current
18886         path. This is currently a bug in mono that is be fixed, however, this
18887         provides a workaround for now. This will be removed when the bug
18888         is fixed.
18889
18890 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18891
18892         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18893         incomplete key pairs (#57941).
18894
18895 2004-05-01  Todd Berman  <tberman@sevenl.net>
18896
18897         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18898         from the GAC
18899
18900 2004-04-30  Jackson Harper  <jackson@ximian.com>
18901
18902         * codegen.cs: Open keys readonly.
18903         
18904 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18905
18906         * typemanager.cs: don't report cyclic struct layout when a struct
18907         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18908         which has 2 Pango.Rectangle fields.
18909
18910 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18911
18912         * expression.cs: Handle IntPtr comparisons with IL code
18913         rather than a method call.
18914
18915 2004-04-29  Martin Baulig  <martin@ximian.com>
18916
18917         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18918         the list of PropertyInfo's in class hierarchy and find the
18919         accessor.  Fixes #56013.
18920
18921 2004-04-29  Martin Baulig  <martin@ximian.com>
18922
18923         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18924
18925 2004-04-29  Martin Baulig  <martin@ximian.com>
18926
18927         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18928
18929         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18930
18931 2004-04-29  Martin Baulig  <martin@ximian.com>
18932
18933         * class.cs (ConstructorInitializer.Resolve): Check whether the
18934         parent .ctor is accessible.  Fixes #52146.
18935
18936 2004-04-29  Martin Baulig  <martin@ximian.com>
18937
18938         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18939
18940         * statement.cs (Using.EmitLocalVariableDecls): Use
18941         TypeManager.idisposable_type, not typeof (IDisposable).
18942         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18943
18944 2004-04-29  Martin Baulig  <martin@ximian.com>
18945
18946         * class.cs (Event.Define): Don't emit the field and don't set
18947         RTSpecialName and SpecialName for events on interfaces.  Fixes
18948         #57703. 
18949
18950 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18951
18952         Refactor Attribute.ApplyAttributes.
18953         * attribute.cs (Attributable): New base class for objects that can
18954         have Attributes applied on them.
18955         (Attribute): Make AttributeUsage fields public.
18956         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18957         (Attribute.IsInternalCall): New property.
18958         (Attribute.UsageAttr): Convert to a public read-only property.
18959         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18960         (Attribute.ResolveType, Attribute.Resolve)
18961         (Attribute.ScanForIndexerName): Update to reflect changes.
18962         (Attribute.CheckAttributeTarget): Re-format.
18963         (Attribute.ApplyAttributes): Refactor, to various
18964         Attributable.ApplyAttributeBuilder methods.
18965         * decl.cs (MemberCore): Make Attributable.
18966         * class.cs (Accessor): Make Attributable.
18967         (MethodData.ApplyAttributes): Use proper attribute types, not
18968         attribute names.
18969         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18970         (TypeContainer.ApplyAttributeBuilder)
18971         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18972         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18973         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18974         (Operator.ApplyAttributeBuilder): New factored-out methods.
18975         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18976         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18977         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18978         * parameter.cs (ParameterBase): New Attributable base class
18979         that can also represent Return types.
18980         (Parameter): Update to the changes.
18981
18982 2004-04-29  Jackson Harper  <jackson@ximian.com>
18983
18984         * driver.cs: Prefer the corlib system version when looking for
18985         assemblies in the GAC. This is still a hack, but its a better hack
18986         now.
18987         
18988 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18989
18990         * decl.cs, enum.cs: Improved error 3005 reporting.
18991   
18992         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18993         (related_symbols): New private member for list of symbols
18994         related to reported error/warning.
18995         
18996         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18997
18998 2004-04-29  Martin Baulig  <martin@ximian.com>
18999
19000         * ecore.cs (Expression.Constantify): If we're an enum and
19001         TypeManager.TypeToCoreType() doesn't give us another type, use
19002         t.UnderlyingSystemType.  Fixes #56178.  
19003
19004 2004-04-29  Martin Baulig  <martin@ximian.com>
19005
19006         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
19007         interfaces and for each interface, only add members directly
19008         declared in that interface.  Fixes #53255.
19009
19010 2004-04-28  Martin Baulig  <martin@ximian.com>
19011
19012         * expression.cs (ConditionalLogicalOperator): Use a temporary
19013         variable for `left' to avoid that we evaluate it more than once;
19014         bug #52588.
19015
19016 2004-04-28  Martin Baulig  <martin@ximian.com>
19017
19018         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
19019         `void[]' (CS1547).
19020
19021 2004-04-28  Martin Baulig  <martin@ximian.com>
19022
19023         * statement.cs (LocalInfo.Resolve): Check whether the type is not
19024         void (CS1547).
19025
19026         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
19027         whether the type is not void (CS1547).
19028
19029 2004-04-28  Martin Baulig  <martin@ximian.com>
19030
19031         * expression.cs (Unary.DoResolveLValue): Override this and report
19032         CS0131 for anything but Operator.Indirection.
19033
19034 2004-04-28  Martin Baulig  <martin@ximian.com>
19035
19036         Committing a patch from Ben Maurer; see bug #50820.
19037
19038         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19039         check for classes.
19040
19041         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19042         classes.        
19043
19044 2004-04-28  Martin Baulig  <martin@ximian.com>
19045
19046         Committing a patch from Ben Maurer; see bug #50820.
19047
19048         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19049         check for classes.
19050
19051         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19052         classes.        
19053
19054 2004-04-28  Martin Baulig  <martin@ximian.com>
19055
19056         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
19057         (Block.AddLabel): Call DoLookupLabel() to only search in the
19058         current block.
19059
19060 2004-04-28  Martin Baulig  <martin@ximian.com>
19061
19062         * cfold.cs (ConstantFold.BinaryFold): Added special support for
19063         comparing StringConstants and NullLiterals in Equality and Inequality.
19064
19065 2004-04-28  Jackson Harper  <jackson@ximian.com>
19066
19067         * driver.cs: Attempt to load referenced assemblies from the
19068         GAC. This is the quick and dirty version of this method that
19069         doesnt take into account versions and just takes the first
19070         canidate found. Will be good enough for now as we will not have more
19071         then one version installed into the GAC until I update this method.
19072
19073 2004-04-28  Martin Baulig  <martin@ximian.com>
19074
19075         * typemanager.cs (TypeManager.CheckStructCycles): New public
19076         static method to check for cycles in the struct layout.
19077
19078         * rootcontext.cs (RootContext.PopulateTypes): Call
19079         TypeManager.CheckStructCycles() for each TypeContainer.
19080         [Note: We only need to visit each type once.]
19081
19082 2004-04-28  Martin Baulig  <martin@ximian.com>
19083
19084         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
19085
19086         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
19087         success and added `out object value'.  Use a `bool resolved' field
19088         to check whether we've already been called rather than
19089         `ConstantValue != null' since this breaks for NullLiterals.
19090
19091 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19092
19093         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
19094         setting of this flag, since the 'set' method may be non-public.
19095
19096 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19097
19098         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
19099         check on current_vector.Block.
19100
19101 2004-04-27  Martin Baulig  <martin@ximian.com>
19102
19103         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
19104         a field initializer.  Fixes #56459.
19105
19106 2004-04-27  Martin Baulig  <martin@ximian.com>
19107
19108         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
19109         we're not attempting to use an indexer.  Fixes #52154.
19110
19111 2004-04-27  Martin Baulig  <martin@ximian.com>
19112
19113         * statement.cs (Return): Don't create a return label if we don't
19114         need it; reverts my change from January 20th.  Thanks to Ben
19115         Maurer for this.
19116
19117 2004-04-27  Martin Baulig  <martin@ximian.com>
19118
19119         According to the spec, `goto' can only leave a nested scope, but
19120         never enter it.
19121
19122         * statement.cs (Block.LookupLabel): Only lookup in the current
19123         block, don't recurse into parent or child blocks.
19124         (Block.AddLabel): Check in parent and child blocks, report
19125         CS0140/CS0158 if we find a duplicate.
19126         (Block): Removed this indexer for label lookups.
19127         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
19128         this already does the error reporting for us.
19129
19130         * flowanalysis.cs
19131         (FlowBranching.UsageVector.Block): New public variable; may be null.
19132         (FlowBranching.CreateSibling): Added `Block' argument.
19133         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
19134         label for the target of a `goto' and check whether we're not
19135         leaving a `finally'.
19136
19137 2004-04-27  Martin Baulig  <martin@ximian.com>
19138
19139         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
19140         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
19141         just for returns).
19142
19143 2004-04-27  Martin Baulig  <martin@ximian.com>
19144
19145         * statement.cs (Block.AddLabel): Also check for implicit blocks
19146         and added a CS0158 check.
19147
19148 2004-04-27  Martin Baulig  <martin@ximian.com>
19149
19150         * flowanalysis.cs (FlowBranchingLoop): New class.
19151         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
19152         UsageVector's instead of an ArrayList.
19153         (FlowBranching.Label): Likewise.
19154         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
19155         (FlowBranching.AddBreakVector): New method.
19156
19157 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
19158
19159         * attribute.cs: Small regression fix: only convert the type if we
19160         the type is different, fixes System.Drawing build.
19161
19162 2004-04-27  Martin Baulig  <martin@ximian.com>
19163
19164         * attribute.cs (Attribute.Resolve): If we have a constant value
19165         for a named field or property, implicity convert it to the correct
19166         type.
19167
19168 2004-04-27  Raja R Harinath  <rharinath@novell.com>
19169
19170         * statement.cs (Block.Block): Implicit blocks share
19171         'child_variable_names' fields with parent blocks.
19172         (Block.AddChildVariableNames): Remove.
19173         (Block.AddVariable): Mark variable as "used by a child block" in
19174         every surrounding block.
19175         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
19176         been used in a child block, complain about violation of "Invariant
19177         meaning in blocks" rule.
19178         * cs-parser.jay (declare_local_variables): Don't use
19179         AddChildVariableNames.
19180         (foreach_statement): Don't create an implicit block: 'foreach'
19181         introduces a scope.
19182
19183 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
19184
19185         * convert.cs (ImplicitNumericConversion): 0 is also positive when
19186         converting from 0L to ulong.  Fixes 57522.
19187
19188 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19189
19190         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
19191         derived class hides via 'new' keyword field from base class (test-242.cs).
19192         TODO: Handle this in the more general way.
19193         
19194         * class.cs (CheckBase): Ditto.
19195
19196 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19197
19198         * decl.cs (caching_flags): New member for storing cached values
19199         as bit flags.
19200         (MemberCore.Flags): New enum where bit flags for caching_flags
19201         are defined.
19202         (MemberCore.cls_compliance): Moved to caching_flags.
19203         (DeclSpace.Created): Moved to caching_flags.
19204
19205         * class.cs: Use caching_flags instead of DeclSpace.Created
19206         
19207 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
19208
19209         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
19210         if we are only a derived class, not a nested class.
19211
19212         * typemanager.cs: Same as above, but do this at the MemberLookup
19213         level (used by field and methods, properties are handled in
19214         PropertyExpr).   Allow for the qualified access if we are a nested
19215         method. 
19216
19217 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
19218
19219         * class.cs: Refactoring.
19220         (IMethodData): New inteface; Holds links to parent members
19221         to avoid member duplication (reduced memory allocation).
19222         (Method): Implemented IMethodData interface.
19223         (PropertyBase): New inner classes for get/set methods.
19224         (PropertyBase.PropertyMethod): Implemented IMethodData interface
19225         (Event): New inner classes for add/remove methods.
19226         (Event.DelegateMethod): Implemented IMethodData interface.
19227
19228         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19229         EmitContext (related to class.cs refactoring).
19230
19231 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19232
19233         * delegate.cs (Delegate.VerifyApplicability): If the number of
19234         arguments are the same as the number of parameters, first try to
19235         verify applicability ignoring  any 'params' modifier on the last
19236         parameter.
19237         Fixes #56442.
19238
19239 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19240
19241         * class.cs (TypeContainer.AddIndexer): Use
19242         'ExplicitInterfaceName' to determine if interface name was
19243         explicitly specified.  'InterfaceType' is not initialized at this time.
19244         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19245         Indexers array is already in the required order.  Initialize
19246         'IndexerName' only if there are normal indexers.
19247         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19248         (TypeContainer.Emit): Emit DefaultMember attribute only if
19249         IndexerName is initialized.
19250         Fixes #56300.
19251
19252 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19253
19254         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19255         Fixes #57007
19256
19257 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19258
19259         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19260         attributes.
19261         Fix for #56456.
19262
19263         * attribute.cs (Attribute.Resolve): Check for duplicate named
19264         attributes.
19265         Fix for #56463.
19266
19267 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19268
19269         * iterators.cs (MarkYield): track whether we are in an exception,
19270         and generate code accordingly.  Use a temporary value to store the
19271         result for our state.
19272
19273         I had ignored a bit the interaction of try/catch with iterators
19274         since their behavior was not entirely obvious, but now it is
19275         possible to verify that our behavior is the same as MS .NET 2.0
19276
19277         Fixes 54814
19278
19279 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19280
19281         * iterators.cs: Avoid creating temporaries if there is no work to
19282         do. 
19283
19284         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19285         Enumerations, use TypeManager.EnumToUnderlying and call
19286         recursively. 
19287
19288         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19289         bug #57013
19290
19291         (This.Emit): Use EmitContext.EmitThis to emit our
19292         instance variable.
19293
19294         (This.EmitAssign): Ditto.
19295
19296         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19297         codepaths, we will move all the functionality into
19298         Mono.CSharp.This 
19299
19300         (FieldExpr.EmitAssign): Ditto.
19301
19302         This fixes several hidden bugs that I uncovered while doing a code
19303         review of this today.
19304
19305         * codegen.cs (EmitThis): reworked so the semantics are more clear
19306         and also support value types "this" instances.
19307
19308         * iterators.cs: Changed so that for iterators in value types, we
19309         do not pass the value type as a parameter.  
19310
19311         Initialization of the enumerator helpers is now done in the caller
19312         instead of passing the parameters to the constructors and having
19313         the constructor set the fields.
19314
19315         The fields have now `assembly' visibility instead of private.
19316
19317 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19318
19319         * expression.cs (Argument.Resolve): Check if fields passed as ref
19320         or out are contained in a MarshalByRefObject.
19321
19322         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19323         another compiler type.
19324
19325 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19326
19327         * class.cs (Indexer.Define): use the new name checking method.
19328         Also, return false on an error.
19329         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19330         (is_identifier_[start/part]_character): make static.
19331
19332 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19333
19334         * expression.cs (Binary.ResolveOperator): Do no append strings
19335         twice: since we can be invoked more than once (array evaluation)
19336         on the same concatenation, take care of this here.  Based on a fix
19337         from Ben (bug #56454)
19338
19339 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19340
19341         * codegen.cs: Fix another case where CS1548 must be reported (when 
19342         delay-sign isn't specified and no private is available #56564). Fix
19343         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19344         error when MCS is used on the MS runtime and we need to delay-sign 
19345         (which seems unsupported by AssemblyBuilder - see #56621).
19346
19347 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19348
19349         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19350         (TypeManager.ComputeNamespaces): Faster implementation for
19351         Microsoft runtime.
19352
19353         * compiler.csproj: Updated AssemblyName to mcs.
19354
19355 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19356
19357         * rootcontext.cs: Add new types to the boot resolution.
19358
19359         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19360         MulticastDelegate is not allowed.
19361
19362         * typemanager.cs: Add new types to lookup: System.TypedReference
19363         and ArgIterator.
19364
19365         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19366         check for TypedReference or ArgIterator, they are not allowed. 
19367
19368         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19369         makes us properly catch 1510 in some conditions (see bug 56016 for
19370         details). 
19371
19372 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19373
19374         * CryptoConvert.cs: update from corlib version
19375         with endian fixes.
19376
19377 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19378
19379         * class.cs (Indexer.Define): Check indexername declaration
19380
19381 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19382
19383         * attribute.cs (IsClsCompliant): Fixed problem with handling
19384         all three states (compliant, not-compliant, undetected).
19385
19386 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19387
19388         * attribute.cs (Attribute): Location is now public.
19389         (Resolve): Store resolved arguments (pos_values) in attribute class.
19390         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19391         (GetClsCompliantAttributeValue): New method that gets
19392         CLSCompliantAttribute value.
19393         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19394         if exists else null.
19395         (AttributeTester): New class for CLS-Compliant verification routines.
19396
19397         * class.cs (Emit): Add CLS-Compliant verification.
19398         (Method.GetSignatureForError): Implemented.
19399         (Constructor.GetSignatureForError): Implemented
19400         (Constructor.HasCompliantArgs): Returns if constructor has
19401         CLS-Compliant arguments.
19402         (Constructor.Emit): Override.
19403         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19404         is needed to test only parameters.
19405         (FieldBase.GetSignatureForError): Implemented.
19406         (TypeContainer): New member for storing base interfaces.
19407         (TypeContainer.FindMembers): Search in base interfaces too.
19408
19409         * codegen.cs (GetClsComplianceAttribute): New method that gets
19410         assembly or module CLSCompliantAttribute value.
19411         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19412         for assembly.
19413         (ModuleClass.Emit): Add error 3012 test.
19414
19415         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19416
19417         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19418         state for all decl types.
19419         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19420         if CLS-Compliant tests are required.
19421         (IsClsCompliaceRequired): New method. Analyze whether code
19422         must be CLS-Compliant.
19423         (IsExposedFromAssembly): New method. Returns true when MemberCore
19424         is exposed from assembly.
19425         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19426         value or gets cached value.
19427         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19428         is explicitly marked with CLSCompliantAttribute.
19429         (IsIdentifierClsCompliant): New abstract method. This method is
19430         used to testing error 3005.
19431         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19432         for identifier and parameters CLS-Compliant testing.
19433         (VerifyClsCompliance): New method. The main virtual method for
19434         CLS-Compliant verifications.
19435         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19436         null. I don't know why is null (too many public members !).
19437         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19438         and get value of first CLSCompliantAttribute that found.
19439
19440         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19441         (VerifyClsCompliance): Override and add extra tests.
19442
19443         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19444         clscheck- disable CLS-Compliant verification event if assembly is has
19445         CLSCompliantAttribute(true).
19446
19447         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19448         ApllyAttribute is now called in emit section as in the other cases.
19449         Possible future Emit integration.
19450         (IsIdentifierClsCompliant): New override.
19451         (VerifyClsCompliance): New override.
19452         (GetEnumeratorName): Returns full enum name.
19453
19454         * parameter.cs (GetSignatureForError): Implemented.
19455
19456         * report.cs (WarningData): New struct for Warning message information.
19457         (LocationOfPreviousError): New method.
19458         (Warning): New method. Reports warning based on the warning table.
19459         (Error_T): New method. Reports error based on the error table.
19460
19461         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19462         verifications are done here.
19463
19464         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19465
19466         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19467         CLSCompliantAttribute.
19468         (all_imported_types): New member holds all imported types from other
19469         assemblies.
19470         (LoadAllImportedTypes): New method fills static table with exported types
19471         from all referenced assemblies.
19472         (Modules): New property returns all assembly modules.
19473
19474 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19475
19476         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19477         throwing a parser error.
19478
19479         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19480         which removes the hardcoded get_/set_ prefixes for properties, as
19481         IL allows for the properties to be named something else.  
19482
19483         Bug #56013
19484
19485         * expression.cs: Do not override operand before we know if it is
19486         non-null.  Fix 56207
19487
19488 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19489
19490         * typemanager.cs: support for pinned variables.
19491
19492 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19493
19494         * decl.cs, typemanager.cs: Avoid using an arraylist
19495         as a buffer if there is only one result set.
19496
19497 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19498
19499         * expression.cs: Make sure you cant call a static method
19500         with an instance expression, bug #56174.
19501
19502 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19503
19504         * class.cs (IsDuplicateImplementation): Improve error reporting to
19505         flag 663 (method only differs in parameter modifier).
19506
19507         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19508         in preprocessor directives.
19509
19510         * location.cs (LookupFile): Allow for the empty path.
19511
19512         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19513         better approach for some of that patch, but its failing with the
19514         CharSet enumeration.  For now try/catch will do.
19515
19516         * typemanager.cs: Do not crash if a struct does not have fields.
19517         Fixes 56150.
19518
19519 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19520
19521         * expression.cs: cs0213, cant fix a fixed expression.
19522         fixes 50231.
19523
19524 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19525
19526         * cs-parser.jay: detect invalid embeded statements gracefully.
19527         bug #51113.
19528
19529 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19530
19531         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19532         As a regex:
19533         s/
19534         the invocation type may not be a subclass of the tye of the item/
19535         The type of the item must be a subclass of the invocation item.
19536         /g
19537
19538         Fixes bug #50820.
19539
19540 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19541
19542         * attribute.cs: Added methods to get a string and a bool from an
19543         attribute. Required to information from AssemblyKeyFileAttribute,
19544         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19545         * codegen.cs: Modified AssemblyName creation to include support for
19546         strongnames. Catch additional exceptions to report them as CS1548.
19547         * compiler.csproj: Updated include CryptoConvert.cs.
19548         * compiler.csproj.user: Removed file - user specific configuration.
19549         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19550         Mono.Security assembly. The original class is maintained and tested in
19551         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19552         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19553         like CSC 8.0 (C# v2) supports.
19554         * Makefile: Added CryptoConvert.cs to mcs sources.
19555         * rootcontext.cs: Added new options for strongnames.
19556
19557 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19558
19559         * driver.cs: For --expect-error, report error code `2'
19560         if the program compiled with no errors, error code `1' if
19561         it compiled with an error other than the one expected.
19562
19563 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19564
19565         * compiler.csproj: Updated for Visual Studio .NET 2003.
19566         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19567         * compiler.sln: Updated for Visual Studio .NET 2003.
19568
19569 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19570
19571         * expression.cs: Fix bug #47234. We basically need to apply the
19572         rule that we prefer the conversion of null to a reference type
19573         when faced with a conversion to 'object' (csc behaviour).
19574
19575 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19576
19577         * statement.cs: Shorter form for foreach, eliminates
19578         a local variable. r=Martin.
19579
19580 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19581
19582         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19583         checks if we can use brtrue/brfalse to test for 0.
19584         * expression.cs: use the above in the test for using brtrue/brfalse.
19585         cleanup code a bit.
19586
19587 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19588
19589         * expression.cs: Rewrite string concat stuff. Benefits:
19590
19591         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19592         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19593         rather than a concat chain.
19594
19595         * typemanager.cs: Add lookups for more concat overloads.
19596
19597 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19598
19599         * expression.cs: Emit shorter il code for array init.
19600
19601         newarr
19602         dup
19603         // set 1
19604
19605         // set 2
19606
19607         newarr
19608         stloc.x
19609
19610         ldloc.x
19611         // set 1
19612
19613         ldloc.x
19614         // set 2
19615
19616 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19617
19618         * statement.cs: Before, two switch blocks would be merged if the
19619         total size of the blocks (end_item - begin_item + 1) was less than
19620         two times the combined sizes of the blocks.
19621
19622         Now, it will only merge if after the merge at least half of the
19623         slots are filled.
19624
19625         fixes 55885.
19626
19627 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19628
19629         * class.cs : csc build fix for GetMethods(). See bug #52503.
19630
19631 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19632
19633         * expression.cs: Make sure fp comparisons work with NaN.
19634         This fixes bug #54303. Mig approved this patch a long
19635         time ago, but we were not able to test b/c the runtime
19636         had a related bug.
19637
19638 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19639
19640         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19641
19642 2004-03-19  Martin Baulig  <martin@ximian.com>
19643
19644         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19645         error here and not in our caller.
19646
19647 2004-03-19  Martin Baulig  <martin@ximian.com>
19648
19649         * interface.cs: Completely killed this file.
19650         (Interface): We're now a TypeContainer and live in class.cs.
19651
19652         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19653         argument; we're now also called for interfaces.
19654         (TypeContainer.DefineMembers): Allow this method being called
19655         multiple times.
19656         (TypeContainer.GetMethods): New public method; formerly known as
19657         Interface.GetMethod().  This is used by PendingImplementation.
19658         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19659         it's now private and non-static.
19660         (Interface): Moved this here; it's now implemented similar to
19661         Class and Struct.
19662         (Method, Property, Event, Indexer): Added `bool is_interface'
19663         argument to their .ctor's.
19664         (MemberBase.IsInterface): New public field.
19665
19666         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19667         instances instead of InterfaceMethod, InterfaceProperty, etc.
19668         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19669         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19670
19671 2004-03-19  Martin Baulig  <martin@ximian.com>
19672
19673         * class.cs (MethodCore.IsDuplicateImplementation): New private
19674         method which does the CS0111 checking.
19675         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19676         Use IsDuplicateImplementation().
19677
19678 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19679
19680         * decl.cs (FindMemberToOverride): New method to find the correct
19681         method or property to override in the base class.
19682         * class.cs
19683             - Make Method/Property use the above method to find the
19684               version in the base class.
19685             - Remove the InheritableMemberSignatureCompare as it is now
19686               dead code.
19687
19688         This patch makes large code bases much faster to compile, as it is
19689         O(n) rather than O(n^2) to do this validation.
19690
19691         Also, it fixes bug 52458 which is that nested classes are not
19692         taken into account when finding the base class member.
19693
19694         Reviewed/Approved by Martin.
19695
19696 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19697
19698         * interface.cs: In all interface classes removed redundant
19699         member initialization.
19700
19701 2004-03-16  Martin Baulig  <martin@ximian.com>
19702
19703         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19704
19705 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19706
19707         * decl.cs (DefineTypeAndParents): New helper method to define a
19708         type's containers before the type itself is defined;  This is a
19709         bug exposed by the recent changes to Windows.Forms when an
19710         implemented interface was defined inside a class that had not been
19711         built yet.   
19712
19713         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19714
19715         (Check): Loop correctly to report errors modifiers
19716         (UNSAFE was not in the loop, since it was the same as TOP).
19717
19718         * interface.cs: Every interface member now takes a ModFlags,
19719         instead of a "is_new" bool, which we set on the base MemberCore. 
19720
19721         Every place where we called "UnsafeOk" in the interface, now we
19722         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19723         the unsafe settings from the member declaration instead of the
19724         container interface. 
19725
19726         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19727
19728         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19729         `set_indexer_name' to the pending bits (one per type).
19730
19731         We fixed a bug today that was picking the wrong method to
19732         override, since for properties the existing InterfaceMethod code
19733         basically ignored the method name.  Now we make sure that the
19734         method name is one of the valid indexer names.
19735
19736 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19737  
19738         * support.cs (SeekableStreamReader): Keep track of stream byte
19739         positions and don't mix them with character offsets to the buffer.
19740
19741         Patch from Gustavo Giráldez
19742
19743 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19744
19745         * interface.cs (InterfaceSetGetBase): Removed double member
19746         initialization, base class does it as well.
19747
19748 2004-03-13  Martin Baulig  <martin@ximian.com>
19749
19750         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19751         when compiling corlib.
19752
19753 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19754
19755         * convert.cs (ExplicitConversion): We were reporting an error on
19756         certain conversions (object_type source to a value type, when the
19757         expression was `null') before we had a chance to pass it through
19758         the user defined conversions.
19759
19760         * driver.cs: Replace / and \ in resource specifications to dots.
19761         Fixes 50752
19762
19763         * class.cs: Add check for duplicate operators.  Fixes 52477
19764
19765 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19766
19767         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19768         that are in the middle of the statements, not only at the end.
19769         Fixes #54987
19770
19771         * class.cs (TypeContainer.AddField): No longer set the
19772         `HaveStaticConstructor' flag, now we call it
19773         `UserDefineStaticConstructor' to diferentiate the slightly
19774         semantic difference.
19775
19776         The situation is that we were not adding BeforeFieldInit (from
19777         Modifiers.TypeAttr) to classes that could have it.
19778         BeforeFieldInit should be set to classes that have no static
19779         constructor. 
19780
19781         See:
19782
19783         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19784
19785         And most importantly Zoltan's comment:
19786
19787         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19788
19789         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19790          before its static fields are used', i.e. initialization does not need
19791          to be triggered by the first access to the type. Setting this flag
19792          helps the JIT to compile better code, since it can run the static
19793          constructor at JIT time, and does not need to generate code to call it
19794          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19795          this flag for lots of classes like String. 
19796          
19797          csc sets this flag if the type does not have an explicit static 
19798          constructor. The reasoning seems to be that if there are only static
19799          initalizers for a type, and no static constructor, then the programmer
19800          does not care when this initialization happens, so beforefieldinit
19801          can be used.
19802          
19803          This bug prevents the AOT compiler from being usable, since it 
19804          generates so many calls to mono_runtime_class_init that the AOT code
19805          is much slower than the JITted code. The JITted code is faster, 
19806          because it does not generate these calls if the vtable is type is
19807          already initialized, which is true in the majority of cases. But the
19808          AOT compiler can't do this."
19809
19810 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19811
19812         * class.cs (MethodData.Emit): Refactor the code so symbolic
19813         information is generated for destructors;  For some reasons we
19814         were taking a code path that did not generate symbolic information
19815         before. 
19816
19817 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19818
19819         * class.cs: Create a Constructor.CheckBase method that
19820         takes care of all validation type code. The method
19821         contains some code that was moved from Define.
19822
19823         It also includes new code that checks for duplicate ctors.
19824         This fixes bug #55148.
19825
19826 2004-03-09  Joshua Tauberer <tauberer@for.net>
19827
19828         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19829         a { ... }-style array creation invokes EmitStaticInitializers
19830         which is not good for reference-type arrays.  String, decimal
19831         and now null constants (NullCast) are not counted toward
19832         static initializers.
19833
19834 2004-03-05  Martin Baulig  <martin@ximian.com>
19835
19836         * location.cs (SourceFile.HasLineDirective): New public field;
19837         specifies whether the file contains or is referenced by a "#line"
19838         directive.
19839         (Location.DefineSymbolDocuments): Ignore source files which
19840         either contain or are referenced by a "#line" directive.        
19841
19842 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19843
19844         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19845         direct access to our parent, so check the method inline there.
19846
19847 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19848
19849         * expression.cs (Invocation.EmitCall): Miguel's last commit
19850         caused a regression. If you had:
19851
19852             T t = null;
19853             t.Foo ();
19854
19855         In Foo the implict this would be null.
19856
19857 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19858
19859         * expression.cs (Invocation.EmitCall): If the method is not
19860         virtual, do not emit a CallVirt to it, use Call.
19861
19862         * typemanager.cs (GetFullNameSignature): Improve the method to
19863         cope with ".ctor" and replace it with the type name.
19864
19865         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19866         as an argument the ConstructorBuilder where it is being defined,
19867         to catch the recursive constructor invocations.
19868
19869 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19870
19871         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19872         routines to check if a type is an enumerable/enumerator allow
19873         classes that implement the IEnumerable or IEnumerator interfaces.
19874
19875         * class.cs (Property, Operator): Implement IIteratorContainer, and
19876         implement SetYields.
19877
19878         (Property.Define): Do the block swapping for get_methods in the
19879         context of iterators.   We need to check if Properties also
19880         include indexers or not.
19881
19882         (Operator): Assign the Block before invoking the
19883         OperatorMethod.Define, so we can trigger the Iterator code
19884         replacement. 
19885
19886         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19887         Property and Operator classes are not created when we parse the
19888         declarator but until we have the block completed, so we use a
19889         singleton SimpleIteratorContainer.Simple to flag whether the
19890         SetYields has been invoked.
19891
19892         We propagate this setting then to the Property or the Operator to
19893         allow the `yield' to function.
19894
19895 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19896
19897         * codegen.cs: Implemented attribute support for modules.
19898         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19899         Assembly/Module functionality.
19900
19901         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19902         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19903         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19904
19905 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19906
19907         * interface.cs (FindMembers): The operation is performed on all base
19908         interfaces and not only on the first. It is required for future CLS Compliance patch.
19909
19910 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19911
19912         * statement.cs, codegen.cs:
19913         This patch deals with patterns such as:
19914
19915         public class List : IEnumerable {
19916
19917                 public MyEnumerator GetEnumerator () {
19918                         return new MyEnumerator(this);
19919                 }
19920
19921                 IEnumerator IEnumerable.GetEnumerator () {
19922                         ...
19923                 }
19924                 
19925                 public struct MyEnumerator : IEnumerator {
19926                         ...
19927                 }
19928         }
19929
19930         Before, there were a few things we did wrong:
19931         1) we would emit callvirt on a struct, which is illegal
19932         2) we emited ldarg when we needed to emit ldarga
19933         3) we would mistakenly call the interface methods on an enumerator
19934         type that derived from IEnumerator and was in another assembly. For example:
19935
19936         public class MyEnumerator : IEnumerator
19937
19938         Would have the interface methods called, even if there were public impls of the
19939         method. In a struct, this lead to invalid IL code.
19940
19941 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19942
19943         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19944           renamed to Emit.
19945
19946         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19947
19948 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19949
19950         * cs-parser.jay: Fix small regression: we were not testing V2
19951         compiler features correctly.
19952
19953         * interface.cs: If the emit context is null, then create one
19954
19955 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19956
19957         * decl.cs (GetSignatureForError): New virtual method to get full name
19958           for error messages.
19959
19960         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19961           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19962
19963         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19964           Duplicated members and code in these classes has been removed.
19965           Better encapsulation in these classes.
19966
19967 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19968
19969         * assign.cs (Assign.DoResolve): When dealing with compound
19970         assignments, there is a new rule in ECMA C# 2.4 (might have been
19971         there before, but it is documented here) that states that in:
19972
19973         a op= b;
19974
19975         If b is of type int, and the `op' is a shift-operator, then the
19976         above is evaluated as:
19977
19978         a = (int) a op b 
19979
19980         * expression.cs (Binary.ResolveOperator): Instead of testing for
19981         int/uint/long/ulong, try to implicitly convert to any of those
19982         types and use that in pointer arithmetic.
19983
19984         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19985         method to print information for from the type, not from the
19986         null-method we were given.
19987
19988 2004-02-01  Duncan Mak  <duncan@ximian.com>
19989
19990         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19991         parsing for cmd, fixes bug #53694.
19992
19993 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19994
19995         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19996         in the member name duplication tests. Property and operator name duplication
19997         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19998
19999 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
20000
20001         * interface.cs (PopulateMethod): Fixed crash when interface method
20002         returns not existing type (error test cs0246-3.cs).
20003
20004 2004-02-02  Ravi Pratap M <ravi@ximian.com>
20005
20006         * cs-parser.jay (interface_accessors): Re-write actions to also
20007         store attributes attached to get and set methods. Fix spelling
20008         while at it.
20009
20010         (inteface_property_declaration): Modify accordingly.
20011
20012         (InterfaceAccessorInfo): New helper class to store information to pass
20013         around between rules that use interface_accessors.
20014
20015         * interface.cs (Emit): Apply attributes on the get and set
20016         accessors of properties and indexers too.
20017
20018         * attribute.cs (ApplyAttributes): Modify accordingly to use the
20019         right MethodBuilder when applying attributes to the get and set accessors.
20020
20021 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
20022
20023         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
20024
20025 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
20026
20027         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
20028
20029 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
20030
20031         * cs-parser.jay: Remove YIELD token, instead use the new grammar
20032         changes that treat `yield' specially when present before `break'
20033         or `return' tokens.
20034
20035         * cs-tokenizer.cs: yield is no longer a keyword.
20036
20037 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
20038
20039         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
20040         setting for default constructors.
20041         For default constructors are almost every time set wrong Modifier. The
20042         generated IL code has been alright. But inside mcs this values was
20043         wrong and this was reason why several of my CLS Compliance tests
20044         failed.
20045
20046 2004-01-22  Martin Baulig  <martin@ximian.com>
20047
20048         * cs-parser.jay (namespace_or_type_name): Return an Expression,
20049         not a QualifiedIdentifier.  This is what `type_name_expression'
20050         was previously doing.
20051         (type_name_expression): Removed; the code is now in
20052         `namespace_or_type_name'.
20053         (qualified_identifier): Removed, use `namespace_or_type_name'
20054         instead.
20055         (QualifiedIdentifier): Removed this class.      
20056
20057 2004-01-22  Martin Baulig  <martin@ximian.com>
20058
20059         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
20060         not a string as alias name.
20061
20062 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
20063
20064         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
20065         #52730 bug, and instead compute correctly the need to use a
20066         temporary variable when requesting an address based on the
20067         static/instace modified of the field and the constructor.
20068  
20069 2004-01-21  Martin Baulig  <martin@ximian.com>
20070
20071         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
20072         class and namespace before looking up aliases.  Fixes #52517.
20073
20074 2004-01-21  Martin Baulig  <martin@ximian.com>
20075
20076         * flowanalysis.cs (UsageVector.Merge): Allow variables being
20077         assinged in a 'try'; fixes exception4.cs.
20078
20079 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20080         * class.cs : Implemented parameter-less constructor for TypeContainer
20081
20082         * decl.cs: Attributes are now stored here. New property OptAttributes
20083
20084         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
20085
20086         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
20087
20088 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20089
20090         * typemanager.cs (CSharpSignature): Now reports also inner class name.
20091           (CSharpSignature): New method for indexer and property signature.
20092
20093 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20094
20095         * pending.cs (IsVirtualFilter): Faster implementation.
20096
20097 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20098
20099         * typemanager.cs: Avoid inclusion of same assembly more than once.
20100
20101 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20102
20103         * cs-parser.jay: Fixed problem where the last assembly attribute
20104           has been applied also to following declaration (class, struct, etc.)
20105           
20106 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20107
20108         * class.cs: Added error CS0538, CS0539 reporting.
20109         Fixed crash on Microsoft runtime when field type is void.
20110
20111         * cs-parser.jay: Added error CS0537 reporting.
20112
20113         * pending.cs: Added error CS0535 reporting.
20114         Improved error report for errors CS0536, CS0534.
20115
20116 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
20117
20118         Merge a few bits from the Anonymous Method MCS tree.
20119
20120         * statement.cs (ToplevelBlock): New class for toplevel methods,
20121         will hold anonymous methods, lifted variables.
20122
20123         * cs-parser.jay: Create toplevel blocks for delegates and for
20124         regular blocks of code. 
20125
20126 2004-01-20  Martin Baulig  <martin@ximian.com>
20127
20128         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
20129         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
20130         and `NeedExplicitReturn'; added `IsLastStatement'.
20131         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
20132         have a `ReturnLabel' or we're not unreachable.
20133
20134         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
20135         child's reachability; don't just override ours with it.  Fixes
20136         #58058 (lluis's example).
20137         (FlowBranching): Added public InTryOrCatch(), InCatch(),
20138         InFinally(), InLoop(), InSwitch() and
20139         BreakCrossesTryCatchBoundary() methods.
20140
20141         * statement.cs (Return): Do all error checking in Resolve().
20142         Unless we are the last statement in a top-level block, always
20143         create a return label and jump to it.
20144         (Break, Continue): Do all error checking in Resolve(); also make
20145         sure we aren't leaving a `finally'.
20146         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
20147         statement in a top-level block.
20148         (Block.Flags): Added `IsDestructor'.
20149         (Block.IsDestructor): New public property.
20150
20151 2004-01-20  Martin Baulig  <martin@ximian.com>
20152
20153         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
20154
20155 2004-01-20  Martin Baulig  <martin@ximian.com>
20156
20157         * statement.cs (Statement.ResolveUnreachable): New public method.
20158         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
20159         (Block.Resolve): Resolve unreachable statements.
20160
20161 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20162
20163         * expression.cs: We need to fix the case where we do
20164         not have a temp variable here.
20165
20166         * assign.cs: Only expression compound assignments need
20167         temporary variables.
20168
20169 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20170
20171         * flowanalysis.cs: Reduce memory allocation in a few ways:
20172           - A block with no variables should not allocate a bit
20173             vector for itself.
20174           - A method with no out parameters does not need any tracking
20175             for assignment of the parameters, so we need not allocate
20176             any data for it.
20177           - The arrays:
20178                 public readonly Type[] VariableTypes;
20179                 public readonly string[] VariableNames;
20180             Are redundant. The data is already stored in the variable
20181             map, so we need not allocate another array for it.
20182           - We need to add alot of checks for if (params | locals) == null
20183             due to the first two changes.
20184
20185 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
20186
20187         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
20188         implement IMemoryLocation, we store a copy on a local variable and
20189         take the address of it.  Patch from Benjamin Jemlich
20190
20191         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
20192         to use a special "type_name_expression" rule which reduces the
20193         number of "QualifiedIdentifier" classes created, and instead
20194         directly creates MemberAccess expressions.
20195
20196 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
20197
20198         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
20199         that fixes #52853.  Null literal assignment to ValueType
20200
20201         * class.cs (MethodData.Emit): Instead of checking the name of the
20202         method to determine if its a destructor, create a new derived
20203         class from Method called Destructor, and test for that.  
20204
20205         * cs-parser.jay: Create a Destructor object instead of a Method.  
20206
20207         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
20208
20209         Fixes: 52933
20210
20211 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
20212
20213         * expression.cs (Binary.ResolveOperator): Perform an implicit
20214         conversion from MethodGroups to their delegate types on the
20215         Addition operation.
20216
20217         * delegate.cs: Introduce a new class DelegateCreation that is the
20218         base class for `NewDelegate' and `ImplicitDelegateCreation',
20219         factor some code in here.
20220
20221         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
20222         conversion from MethodGroups to compatible delegate types. 
20223
20224         * ecore.cs (Expression.Resolve): Do not flag error 654
20225         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
20226         we allow conversions from MethodGroups to delegate types now.
20227
20228         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20229         assignments in v2 either.
20230
20231 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20232
20233         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20234         static read-only fields in ctors.
20235
20236         Applied patch from Benjamin Jemlich 
20237
20238         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20239
20240 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20241
20242         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20243         here to return true, as they can be used like this:
20244
20245                 (XXX) int.MEMBER ()
20246
20247         Fixed 49836 and all the other dups
20248
20249 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20250
20251         * driver.cs: Implement /win32res and /win32icon.
20252
20253 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20254
20255         * cs-parser.jay: Add a rule to improve error handling for the
20256         common mistake of placing modifiers after the type.
20257
20258 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20259
20260         * cs-parser.jay (interface_event_declaration): Catch
20261         initialization of events on interfaces, and report cs0068
20262
20263         * cs-parser.jay (interface_event_declaration): Catch
20264         initialization of events. 
20265
20266         * ecore.cs: Better report missing constructors.
20267
20268         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20269         the error reporting done in the wrong place.  Fix.
20270
20271         * expression.cs (Binary.ResolveOperator): Catch the 
20272         operator + (E x, E y) error earlier, and later allow for implicit
20273         conversions in operator +/- (E e, U x) from U to the underlying
20274         type of E.
20275
20276         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20277         52596, if the container class is abstract, the default constructor
20278         is protected otherwise its public (before, we were always public).
20279
20280         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20281         fixed statement.
20282
20283         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20284         Jemlich that fixes bug #52597, MCS was generating invalid code for
20285         idisposable structs.   Thanks to Ben for following up with this
20286         bug as well.
20287
20288 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20289
20290         * driver.cs: Allow assemblies without code to be generated, fixes
20291         52230.
20292
20293 2004-01-07  Nick Drochak <ndrochak@gol.com>
20294
20295         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20296
20297 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20298
20299         * cs-parser.jay: Add rules to improve error reporting if fields or
20300         methods are declared at the namespace level (error 116)
20301
20302         * Add rules to catch event add/remove
20303
20304 2004-01-04  David Sheldon <dave-mono@earth.li>
20305
20306   * expression.cs: Added matching ")" to error message for 
20307   CS0077
20308
20309 2004-01-03 Todd Berman <tberman@gentoo.org>
20310
20311         * ecore.cs, attribute.cs:
20312         Applying fix from #52429.
20313
20314 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20315
20316         * ecore.cs, expression.cs, statement.cs:
20317         Total rewrite of how we handle branching. We
20318         now handle complex boolean expressions with fewer
20319         jumps. As well if (x == 0) no longer emits a ceq.
20320
20321         if (x is Foo) is much faster now, because we generate
20322         better code.
20323
20324         Overall, we get a pretty big improvement on our benchmark
20325         tests. The code we generate is smaller and more readable.
20326
20327         I did a full two-stage bootstrap. The patch was reviewed
20328         by Martin and Miguel.
20329
20330 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20331
20332         * cs-parser.jay: Make primary_expression not take a QI.
20333         we dont need this because the member_access rule covers
20334         us here. So we replace the rule with just IDENTIFIER.
20335
20336         This has two good effects. First, we remove a s/r conflict.
20337         Second, we allocate many fewer QualifiedIdentifier objects.
20338
20339 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20340
20341         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20342         set the correct information via SRE. This prevents
20343         hanging on the MS runtime. Fixes #29374.
20344
20345 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20346
20347         * convert.cs: correctly handle conversions to value types
20348         from Enum and ValueType as unboxing conversions.
20349
20350         Fixes bug #52569. Patch by Benjamin Jemlich.
20351
20352 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20353
20354         * expression.cs (BetterConversion): Prefer int -> uint
20355         over int -> ulong (csc's behaviour). This fixed bug #52046.
20356
20357 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20358
20359         * decl.cs (MemberCache.FindMembers): now returns a
20360         MemberInfo [].
20361
20362         * typemanager.cs: In general, go with with ^^.
20363         (CopyNewMethods): take an IList.
20364         (RealMemberLookup): Only allocate an arraylist
20365         if we copy from two sets of methods.
20366
20367         This change basically does two things:
20368         1) Fewer array lists allocated due to CopyNewMethods.
20369         2) the explicit cast in MemberList costed ALOT.
20370
20371 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20372
20373         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20374         a hashtable to avoid needless string allocations when an identifier is
20375         used more than once (the common case).
20376
20377 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20378
20379         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20380         is broken, it will not return anything. So, we
20381         have to use the information we have in mcs to
20382         do the task.
20383
20384         * typemanager.cs: Add a cache for GetInterfaces,
20385         since this will now be used more often (due to ^^)
20386
20387         (GetExplicitInterfaces) New method that gets the
20388         declared, not effective, interfaces on a type
20389         builder (eg, if you have interface IFoo, interface
20390         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20391         { IBar }.
20392
20393         This patch makes MCS able to bootstrap itself on
20394         Windows again.
20395
20396 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20397
20398         * expression.cs: Remove the Nop's that Miguel put
20399         in by mistake.
20400
20401 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20402
20403         * report.cs, codegen.cs: Give the real stack trace to
20404         the error when an exception is thrown.
20405
20406 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20407
20408         * decl.cs: only allocate hashtables for ifaces if 
20409         it is an iface!
20410
20411 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20412
20413         * expression.cs: fix the error from cs0121-2.cs
20414         (a parent interface has two child interfaces that
20415         have a function with the same name and 0 params
20416         and the function is called through the parent).
20417
20418 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20419
20420         * class.cs, rootcontext.cs, typmanager.cs: do not
20421         leak pointers.
20422
20423 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20424
20425         * codegen.cs: remove stack for the ec flow branching.
20426         It is already a linked list, so no need.
20427
20428 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20429
20430         * Makefile: Allow custom profiler here.
20431
20432 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20433
20434         * typemanager.cs (LookupType):
20435           - Use a static char [], because split takes
20436             a param array for args, so it was allocating
20437             every time.
20438           - Do not store true in a hashtable, it boxes.
20439
20440 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20441
20442         * flowanalysis.cs: bytify common enums.
20443
20444 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20445
20446         * modifiers.cs: Add a new set of flags for the
20447         flags allowed on explicit interface impls.
20448         * cs-parser.jay: catch the use of modifiers in
20449         interfaces correctly.
20450         * class.cs: catch private void IFoo.Blah ().
20451
20452         All related to bug #50572.
20453
20454 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20455
20456         * decl.cs: Rewrite the consistant accessability checking.
20457         Accessability is not linear, it must be implemented in
20458         a tableish way. Fixes #49704.
20459
20460 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20461
20462         * expression.cs: Handle negation in a checked context.
20463         We must use subtraction from zero. Fixes #38674.
20464
20465 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20466
20467         * class.cs: Ignore static void main in DLLs.
20468         * rootcontext.cs: Handle the target type here,
20469         since we are have to access it from class.cs
20470         * driver.cs: account for the above.
20471
20472 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20473
20474         * report.cs: Give line numbers and files if available.
20475
20476 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20477
20478         * driver.cs: Implement /addmodule.
20479
20480         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20481         ModuleBuilders.
20482
20483 2003-12-20  Martin Baulig  <martin@ximian.com>
20484
20485         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20486         (FieldBase.IsAssigned): Removed this field.
20487         (FieldBase.SetAssigned): New public method.
20488         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20489
20490 2003-12-20  Martin Baulig  <martin@ximian.com>
20491
20492         * expression.cs (LocalVariableReference.DoResolve): Don't set
20493         `vi.Used' if we're called from DoResolveLValue().
20494
20495         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20496         returns the usage vector it just merged into the current one -
20497         pass this one to UsageWarning().
20498         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20499         of the `EmitContext', don't call this recursively on our children.
20500
20501 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20502
20503         * driver.cs: Implement /target:module.
20504
20505 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20506
20507         * support.cs (CharArrayHashtable): New helper class.
20508
20509         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20510         char arrays, not strings, so we can avoid creating a string in
20511         consume_identifier if the identifier is a keyword.
20512
20513 2003-12-16  Martin Baulig  <martin@ximian.com>
20514
20515         * statement.cs (LocalInfo.Assigned): Removed this property.
20516         (LocalInfo.Flags): Removed `Assigned'.
20517         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20518         and uses flow analysis.
20519         (Block.UsageWarning): Made this method private.
20520         (Block.Resolve): Call UsageWarning() if appropriate.
20521
20522         * expression.cs (LocalVariableReference.DoResolve): Always set
20523         LocalInfo.Used here.
20524
20525 2003-12-13  Martin Baulig  <martin@ximian.com>
20526
20527         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20528         any value here; we're now using flow analysis to figure out
20529         whether a statement/block returns a value.
20530
20531 2003-12-13  Martin Baulig  <martin@ximian.com>
20532
20533         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20534         working again.
20535         (FlowBranching.MergeFinally): Don't call
20536         `branching.CheckOutParameters()' here, this is called in
20537         MergeTopBlock().
20538         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20539         when adding the `finally' vector.       
20540
20541 2003-12-13  Martin Baulig  <martin@ximian.com>
20542
20543         * flowanalysis.cs
20544         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20545         actually work and also fix #48962.
20546
20547 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20548
20549         * decl.cs: Do not check System.Object for nested types,
20550         since we know it does not have any. Big bang for buck:
20551
20552         BEFORE:
20553            Run 1:   8.35 seconds
20554            Run 2:   8.32 seconds
20555            corlib:  17.99 seconds
20556         AFTER:
20557            Run 1:   8.17 seconds
20558            Run 2:   8.17 seconds
20559            corlib:  17.39 seconds
20560
20561 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20562
20563         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20564         time we are returning 0 members, so we save alot here.
20565
20566 2003-12-11  Martin Baulig  <martin@ximian.com>
20567
20568         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20569         `MergeChild()', also just take the `FlowBranching' as argument;
20570         call Merge() on it and return the result.
20571         (FlowBranching.Merge): We don't need to do anything if we just
20572         have one sibling.
20573
20574 2003-12-11  Martin Baulig  <martin@ximian.com>
20575
20576         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20577         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20578         Maurer for this idea.
20579
20580 2003-12-11  Martin Baulig  <martin@ximian.com>
20581
20582         * flowanalysis.cs (MergeResult): This class is now gone; we now
20583         use the `UsageVector' for this.  The reason for this is that if a
20584         branching just has one sibling, we don't need to "merge" them at
20585         all - that's the next step to do.
20586         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20587         `MergeResult'.
20588
20589 2003-12-11  Martin Baulig  <martin@ximian.com>
20590
20591         Reworked flow analyis and made it more precise and bug-free.  The
20592         most important change is that we're now using a special `Reachability'
20593         class instead of having "magic" meanings of `FlowReturns'.  I'll
20594         do some more cleanups and optimizations and also add some more
20595         documentation this week.
20596
20597         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20598         largely reworked this class.
20599         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20600         the new `Reachability' class instead of having "magic" values here.
20601         (FlowBranching): We're now using an instance of `Reachability'
20602         instead of having separate `Returns', `Breaks' etc. fields.
20603
20604         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20605         based on flow analysis; ignore the return value of block.Emit ().
20606
20607 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20608
20609         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20610         if they are private.
20611
20612 2003-12-09  Martin Baulig  <martin@ximian.com>
20613
20614         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20615         call them directly on the UsageVector.
20616
20617 2003-12-09  Martin Baulig  <martin@ximian.com>
20618
20619         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20620         Changed return type from `FlowReturns' to `Reachability'.
20621
20622 2003-12-09  Martin Baulig  <martin@ximian.com>
20623
20624         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20625         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20626         `Reachable' fields with a single `Reachability' one.
20627
20628 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20629
20630         * class.cs (FindMembers): Remove foreach's.
20631
20632         Bootstrap times:
20633
20634         BEFORE
20635                 Run 1:   8.74 seconds
20636                 Run 2:   8.71 seconds
20637
20638         AFTER
20639                 Run 1:   8.64 seconds
20640                 Run 2:   8.58 seconds
20641
20642
20643 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20644
20645         * cs-parser.jay:
20646         * gen-treedump.cs:
20647         * statement.cs:
20648         This patch does a few things:
20649                 1. EmptyStatement is now a singleton, so it is never reallocated.
20650                 2. All blah is EmptyStatement constructs have been changed to
20651                    blah == EmptyStatement.Value, which is much faster and valid
20652                    now that EmptyStatement is a singleton.
20653                 3. When resolving a block, rather than allocating a new array for
20654                    the non-empty statements, empty statements are replaced with
20655                    EmptyStatement.Value
20656                 4. Some recursive functions have been made non-recursive.
20657         Mainly the performance impact is from (3), however (1) and (2) are needed for
20658         this to work. (4) does not make a big difference in normal situations, however
20659         it makes the profile look saner.
20660
20661         Bootstrap times:
20662
20663         BEFORE
20664         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20665         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20666         Total memory allocated: 56397 KB
20667
20668         AFTER
20669         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20670         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20671         Total memory allocated: 55666 KB
20672
20673 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20674
20675         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20676         than the hashtable in a hashtable version
20677
20678         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20679         we always end up concating a string. This results in a huge perf
20680         loss, because many strings have to be tracked by the GC. In this
20681         patch, we first use a hashtable that works with two keys, so that
20682         the strings do not need to be concat'ed.
20683
20684         Bootstrap times:
20685         BEFORE
20686                 Run 1:   8.74 seconds
20687                 Run 2:   8.71 seconds
20688
20689         AFTER
20690                 Run 1:   8.65 seconds
20691                 Run 2:   8.56 seconds
20692
20693 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20694
20695         * Makefile: Add a new target `do-time' that does a quick and simple
20696         profile, leaving easy to parse output.
20697
20698 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20699
20700         * codegen.cs (Init): Create the dynamic assembly with 
20701         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20702
20703 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20704
20705         * support.cs: Make the PtrHashtable use only one
20706         instance of its comparer.
20707
20708 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20709
20710         * typemanager.cs: Fix lookup of GetNamespaces.
20711
20712 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20713
20714         * expression.cs: Removed redundant line.
20715
20716         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20717         ArrayLists, use for loops with bounds.  
20718
20719         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20720         arraylist.
20721
20722         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20723         arraylists, use for loop with bounds.
20724
20725         The above three changes give us a 0.071 second performance
20726         improvement out of 3.294 seconds down to 3.223.  On my machine
20727         the above changes reduced the memory usage by 1,387 KB during
20728         compiler bootstrap.
20729
20730         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20731         QualifiedIdentifiers.  Before we created a new string through
20732         concatenation, and mostly later on, the result would be
20733         manipulated by DecomposeQI through string manipulation.
20734
20735         This reduced the compiler memory usage for bootstrapping from
20736         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20737         compile times in 0.05 seconds.
20738
20739 2003-11-28  Dick Porter  <dick@ximian.com>
20740
20741         * support.cs: Do string compares with the Invariant culture.
20742
20743         * rootcontext.cs: 
20744         * gen-treedump.cs: 
20745         * expression.cs: 
20746         * driver.cs: 
20747         * decl.cs: 
20748         * codegen.cs: 
20749         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20750         the comparison is done with the Invariant culture.
20751
20752 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20753
20754         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20755         GetEnumerator method.
20756
20757         (ProbeCollectionType): Iterate starting at the most specific type
20758         upwards looking for a GetEnumerator
20759
20760         * expression.cs: Shift count can be up to 31 for int/uint and 63
20761         for long/ulong.
20762
20763 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20764
20765         * statement.cs (Block.LookupLabel): Also look for the label on the
20766         children blocks.  Use a hash table to keep track of visited
20767         nodes. 
20768
20769         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20770         we actually did transform the other operand, otherwise fall back
20771         to the common codepath that casts to long.
20772
20773         * cs-tokenizer.cs: Use the same code pattern as the int case.
20774         Maybe I should do the parsing myself, and avoid depending on the
20775         Parse routines to get this done.
20776
20777 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20778
20779         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20780         which fixes bug 51347.  This time test it.
20781
20782         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20783         attributes for example can not tell the difference between these.
20784         The difference was only a syntax feature of the language. 
20785
20786         * attribute.cs: Apply attributes to delegates.
20787
20788         * delegate.cs: Call the apply attributes method.
20789
20790 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20791
20792         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20793         comparing 0 vs Byte.MinValue, not the value
20794
20795         (ImplicitConversionRequired): When reporting a conversion error,
20796         use error 31 to print out the constant error instead of the
20797         simpler 29.
20798
20799         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20800         which fixes bug 51347.
20801
20802 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20803
20804         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20805         which fixes the -warnaserror command line option.
20806
20807 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20808
20809         * cfold.cs (DoNumericPromotions): During constant folding of
20810         additions on UIntConstant, special case intconstants with
20811         IntConstants like we do on the expression binary operator. 
20812
20813 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20814
20815         * convert.cs (ImplicitReferenceConversion): We were missing a case
20816         (System.Enum are not value types or class types, so we need to
20817         classify them separatedly).
20818
20819         * driver.cs: We do not support error 2007.
20820
20821 2003-11-12 Jackson Harper <jackson@ximian.com>
20822
20823         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20824         system directory. Also use the full file name so users can
20825         libraries names mscorlib-o-tron.dll in a non system dir.
20826
20827 2003-11-10  Martin Baulig  <martin@ximian.com>
20828
20829         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20830         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20831         calling `ResolveType()' on them, directly assign their `Type'.
20832
20833 2003-11-08  Martin Baulig  <martin@ximian.com>
20834
20835         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20836         return value and the `out parent' parameter.
20837         (TypeContainer.DefineType): Moved the CS0644 check into
20838         GetClassBases().  Don't pass the interface types to the
20839         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20840         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20841
20842         * ecore.cs (TypeExpr.IsAttribute): New property.
20843         (TypeExpr.GetInterfaces): New method.
20844
20845         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20846         TypeExpr instead of a Type.
20847         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20848         (Interface.DefineType): Don't pass the interface types to the
20849         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20850         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20851
20852         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20853         instead of a `Type[]'.
20854         (TypeManager.RegisterBuilder): Likewise.
20855         (TypeManager.AddUserInterface): Likewise.
20856         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20857         `Type[]' and also return a `TypeExpr[]'.
20858         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20859
20860 2003-11-08  Martin Baulig  <martin@ximian.com>
20861
20862         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20863         Expression.     
20864
20865 2003-11-08  Martin Baulig  <martin@ximian.com>
20866
20867         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20868         TypeManager.ResolveExpressionTypes().
20869
20870         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20871         instead of an Expression.
20872         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20873         (TypeExpression): New public class; formerly known as `TypeExpr'.
20874
20875         * expression.cs (ComposedCast): Derive from TypeExpr.
20876
20877         * typemanager.cs (TypeManager.system_*_expr): These are now
20878         TypExpr's instead of Expression's.
20879         (TypeManager.ResolveExpressionTypes): New public static function;
20880         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20881         of them.        
20882
20883 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20884
20885         * expression.cs (New.DoResolve): Do not dereference value that
20886         might be a null return.
20887
20888         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20889         sure that the constant value has the right type.  Fixes an
20890         unreported bug, similar to 50425.
20891
20892         * const.cs (Const.LookupConstantValue): Call
20893         ImplicitStandardConversionExists before doing a conversion to
20894         avoid havng the TypeManager.ChangeType do conversions.
20895
20896         Reduced the number of casts used
20897
20898         (Const.ChangeType): New routine to enable reuse of the constant
20899         type changing code from statement.
20900
20901         * typemanager.cs (ChangeType): Move common initialization to
20902         static global variables.
20903
20904         Fixes #50425.
20905
20906         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20907         every value type to go through, even if it was void.  Fix that. 
20908
20909         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20910         character of the define, and the is_identifier_part_character for
20911         the rest of the string.
20912
20913 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20914
20915         * expression.cs (UnaryMutator.EmitCode): When I updated
20916         LocalVariableReference.DoResolve, I overdid it, and dropped an
20917         optimization done on local variable references.
20918
20919 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20920
20921         * ecore.cs: Convert the return from Ldlen into an int.
20922
20923 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20924
20925         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20926         the accessibility, this is a special case for toplevel non-public
20927         classes (internal for instance).
20928
20929 2003-10-20  Nick Drochak <ndrochak@gol.com>
20930
20931         * ecore.cs: Fix typo and build.  Needed another right paren.
20932
20933 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20934
20935         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20936         `internal' case regular and protected, but not allowing protected
20937         to be evaluated later.  Bug 49840
20938
20939 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20940
20941         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20942         to kb.Nlast, and not the kb.nFirst to isolate the switch
20943         statement.
20944
20945         Extract the underlying type, so enumerations of long/ulong are
20946         treated like long/ulong.
20947
20948 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20949
20950         * expression.cs (New): Overload the meaning of RequestedType to
20951         track the possible creation of the NewDelegate type, since
20952         DoResolve is invoked more than once for new constructors on field
20953         initialization.
20954
20955         See bugs: #48800 and #37014
20956
20957         * cs-parser.jay (declare_local_constants): Take an arraylist
20958         instead of a single constant.
20959
20960         (local_constant_declaration): It should take a
20961         constant_declarators, not a constant_declarator.  Fixes 49487
20962
20963         * convert.cs: Fix error report.
20964
20965 2003-10-13 Jackson Harper <jackson@ximian.com>
20966
20967         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20968         bug #49611
20969
20970 2003-10-09  Martin Baulig  <martin@ximian.com>
20971
20972         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20973         to the .ctor.
20974         (MethodCore.DoDefineParameters): Removed the TypeContainer
20975         argument; use the DeclSpace which was passed to the .ctor instead.
20976         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20977         TypeContainer; we only need a DeclSpace here.
20978
20979 2003-10-09  Martin Baulig  <martin@ximian.com>
20980
20981         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20982         to the .ctor.
20983         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20984         EmitContext's .ctor.    
20985
20986 2003-10-09  Martin Baulig  <martin@ximian.com>
20987
20988         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20989         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20990         AsAccessible(), moved them as well.
20991
20992         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20993
20994 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20995
20996         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20997
20998 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20999
21000         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
21001         generation for >=, as spotted by Paolo, bug 48679.  
21002         Patch from David Waite.
21003
21004         * cs-tokenizer.cs: Add handling for #pragma.
21005
21006         * cs-parser.jay: Allow for both yield and yield return in the
21007         syntax.  The anti-cobolization of C# fight will go on!
21008
21009         * class.cs (TypeBuilder.DefineType): Catch error condition here
21010         (Parent.DefineType erroring out and returning null).
21011
21012         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21013         coping with enumerations variables, we were mistakenly processing
21014         them as a regular value type instead of built-in types.  Fixes the
21015         bug #48063
21016
21017         * typemanager.cs (IsBuiltinOrEnum): New method.
21018
21019 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
21020
21021         * cs-parser.jay: Upgrade: yield now needs the return clause.
21022
21023 2003-09-19  Martin Baulig  <martin@ximian.com>
21024
21025         * decl.cs (MemberCache.SetupCacheForInterface): Take a
21026         `MemberCache parent' argument.  Normally, an interface doesn't
21027         have a parent type except System.Object, but we use this in gmcs
21028         for generic type parameters.
21029
21030 2003-09-18  Martin Baulig  <martin@ximian.com>
21031
21032         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
21033         on `type.IsInterface'; don't check whether the type has a parent
21034         to determine whether it's an interface.
21035
21036 2003-09-15  Martin Baulig  <martin@ximian.com>
21037
21038         * class.cs (TypeContainer.DefineType): Added an error flag to
21039         avoid reporting duplicate CS0146's ("class definition is
21040         circular.").
21041
21042         * driver.cs (Driver.MainDriver): Abort if
21043         RootContext.ResolveTree() reported any errors.
21044
21045 2003-09-07  Martin Baulig  <martin@ximian.com>
21046
21047         * report.cs (Error, Warning): Added overloaded versions which take
21048         a `params object[] args' and call String.Format().
21049
21050 2003-09-07  Martin Baulig  <martin@ximian.com>
21051
21052         * decl.cs (DeclSpace..ctor): Don't call
21053         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
21054         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
21055         (DeclSpace.RecordDecl): New method.
21056
21057         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
21058
21059 2003-09-02  Ravi Pratap  <ravi@ximian.com>
21060
21061         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
21062         value attributes to be applied to ParameterBuilders.
21063
21064         * class.cs (MethodCore.LabelParameters): Make static and more
21065         generic so that it can be used from other places - like interface
21066         methods, for instance.
21067
21068         * interface.cs (Interface.Emit): Call LabelParameters before
21069         emitting attributes on the InterfaceMethod.
21070
21071 2003-08-26  Martin Baulig  <martin@ximian.com>
21072
21073         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
21074         resolving aliases; fixes #47927.
21075
21076 2003-08-26  Martin Baulig  <martin@ximian.com>
21077
21078         * statement.cs (Using.DoResolve): This is internally emitting a
21079         try/finally clause, so we need to set ec.NeedExplicitReturn if we
21080         do not always return.  Fixes #47681.
21081
21082 2003-08-26  Martin Baulig  <martin@ximian.com>
21083
21084         * decl.cs (MemberCore): Moved WarningNotHiding(),
21085         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
21086         into MemberBase.
21087         (AdditionResult): Make this nested in DeclSpace.
21088         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
21089         argument; call NamespaceEntry.Define() unless we're nested in a
21090         class or struct.
21091
21092         * namespace.cs (Namespace.DefineName): New public function.  This
21093         is called from DeclSpace's .ctor to add 
21094         (Namespace.Lookup): Include DeclSpaces in the lookup.
21095
21096         * class.cs (Operator): Derive from MemberBase, not MemberCore.
21097
21098         * const.cs (Const): Derive from MemberBase, not MemberCore.     
21099
21100 2003-08-25  Martin Baulig  <martin@ximian.com>
21101
21102         * convert.cs (Convert.ExplicitReferenceConversion): When
21103         converting from an interface type to a class, unbox if the target
21104         type is a struct type.  Fixes #47822.
21105
21106 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21107
21108         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
21109         #47854.
21110
21111 2003-08-22  Martin Baulig  <martin@ximian.com>
21112
21113         * class.cs (TypeManager.DefineType): When defining a nested type,
21114         call DefineType() on our parent; fixes #47801.
21115
21116 2003-08-22  Martin Baulig  <martin@ximian.com>
21117
21118         * class.cs (MethodData.Define): While checking if a method is an
21119         interface implementation, improve the test a bit more to fix #47654.
21120
21121 2003-08-22  Martin Baulig  <martin@ximian.com>
21122
21123         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
21124         correctly; fixes #47722.
21125
21126 2003-08-22  Martin Baulig  <martin@ximian.com>
21127
21128         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
21129         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
21130
21131         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
21132
21133 2003-08-22  Martin Baulig  <martin@ximian.com>
21134
21135         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
21136         can only be assigned in static constructors.  Fixes #47161.
21137
21138 2003-08-22  Martin Baulig  <martin@ximian.com>
21139
21140         Rewrote and improved the flow analysis code.
21141
21142         * flowbranching.cs (FlowBranching): Make this class abstract.
21143         (FlowBranching.CreateBranching): New static function to create a
21144         new flow branching.
21145         (FlowBranchingBlock, FlowBranchingException): New classes.
21146         (FlowBranching.UsageVector.Type): New public readonly field.
21147         (FlowBranching.UsageVector.Breaks): Removed the setter.
21148         (FlowBranching.UsageVector.Returns): Removed the setter.
21149         (FlowBranching.UsageVector): Added Break(), Return(),
21150         NeverReachable() and Throw() methods to modify the reachability.
21151         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
21152         done by FlowBranching.Merge().
21153         (FlowBranching.UsageVector.MergeChild): New method; merges the
21154         merge result into the current vector.
21155         (FlowBranching.Merge): New abstract method to merge a branching.
21156
21157 2003-08-12  Martin Baulig  <martin@ximian.com>
21158
21159         * expression.cs (Indirection.CacheTemporaries): Create the
21160         LocalTemporary with the pointer type, not its element type.
21161
21162 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
21163
21164         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
21165         token was a keyword or not.
21166
21167         Add `error' options where an IDENTIFIER was expected;  Provide
21168         CheckToken and CheckIdentifierToken convenience error reporting
21169         functions. 
21170
21171         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
21172
21173         * decl.cs: Rename `NamespaceEntry Namespace' public field into
21174         NameSpaceEntry NameSpaceEntry.
21175
21176         (LookupInterfaceOrClass): Avoid creating a full qualified name
21177         from namespace and name: avoid doing lookups when we know the
21178         namespace is non-existant.   Use new Tree.LookupByNamespace which
21179         looks up DeclSpaces based on their namespace, name pair.
21180
21181         * driver.cs: Provide a new `parser verbose' to display the
21182         exception thrown during parsing.  This is turned off by default
21183         now, so the output of a failure from mcs is more graceful.
21184
21185         * namespace.cs: Track all the namespaces defined in a hashtable
21186         for quick lookup.
21187
21188         (IsNamespace): New method
21189
21190 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
21191
21192         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
21193         we know that we need to concatenate (full typename can never be
21194         null). 
21195
21196         * class.cs: ditto.
21197
21198         * statement.cs: Use a bitfield;  Do not initialize to null things
21199         which are done by the constructor by default.
21200
21201         * cs-parser.jay: bug fix, parameter was 4, not 3.
21202
21203         * expression.cs: Just use the property;
21204
21205         * statement.cs: No need for GetVariableInfo method.
21206
21207 2003-08-08  Martin Baulig  <martin@ximian.com>
21208
21209         * flowanalysis.cs (FlowReturns): This is now nested in the
21210         `FlowBranching' class.
21211         (MyBitVector): Moved this here from statement.cs.
21212         (FlowBranching.SiblingType): New enum type.
21213         (FlowBranching.CreateSibling): Added `SiblingType' argument.
21214
21215 2003-08-07  Martin Baulig  <martin@ximian.com>
21216
21217         * flowanalysis.cs (FlowBranchingType): This is now nested in the
21218         `FlowBranching' class and called `BranchingType'.
21219
21220 2003-08-07  Martin Baulig  <martin@ximian.com>
21221
21222         * flowanalysis.cs: Moved all the control flow analysis code into
21223         its own file.
21224
21225 2003-08-07  Martin Baulig  <martin@ximian.com>
21226
21227         * assign.cs (Assign.DoResolve): `target' must either be an
21228         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21229         #37319.
21230
21231 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21232
21233         * expression.cs (BinaryMethod): This kind of expression is created by the
21234         Binary class if it determines that the operator has to be handled
21235         by a method.
21236
21237         (BinaryDelegate): This kind of expression is created if we are
21238         dealing with a + or - operator on delegates.
21239
21240         (Binary): remove method, argumetns, and DelegateOperator: when
21241         dealing with methods, 
21242
21243         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21244
21245         * statement.cs (Block): use bitfields for the three extra booleans
21246         we had in use.   Remove unused topblock parameter.
21247
21248         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21249
21250         * assign.cs: Drop extra unneeded tests.
21251
21252 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21253
21254         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21255
21256         * statement.cs (Foreach): Use VariableStorage instead of
21257         LocalBuilders.   
21258
21259         * codegen.cs (VariableStorage): New class used by clients that
21260         require a variable stored: locals or fields for variables that
21261         need to live across yield.
21262
21263         Maybe provide a convenience api for EmitThis+EmitLoad?
21264
21265         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21266         these bad boys.
21267
21268 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21269
21270         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21271         RemapParameterLValue): New methods that are used to turn a
21272         precomputed FieldInfo into an expression like this:
21273
21274                 instance.FieldInfo
21275
21276         The idea is to use this instead of making LocalVariableReference
21277         have more than one meaning.
21278
21279         * cs-parser.jay: Add error production to BASE.
21280
21281         * ecore.cs: Deal with TypeManager.GetField returning null, which
21282         is now a valid return value.
21283
21284         (FieldExprNoAddress): New expression for Fields whose address can
21285         not be taken.
21286
21287         * expression.cs (LocalVariableReference): During the resolve
21288         phases, create new expressions if we are in a remapping context.
21289         Remove code that dealt with remapping here.
21290
21291         (ParameterReference): same.
21292
21293         (ProxyInstance): New expression, like the `This' expression, but
21294         it is born fully resolved.  We know what we are doing, so remove
21295         the errors that are targeted to user-provided uses of `this'.
21296
21297         * statement.cs (Foreach): our variable is now stored as an
21298         Expression;  During resolution, follow the protocol, dont just
21299         assume it will return this.
21300
21301 2003-08-06  Martin Baulig  <martin@ximian.com>
21302
21303         * support.cs (SeekableStreamReader.cs): New public class.
21304
21305         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21306         SeekableStreamReader instead of the normal StreamReader.
21307
21308 2003-08-04  Martin Baulig  <martin@ximian.com>
21309
21310         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21311         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21312         deambiguate casts and delegate invocations.
21313         (parenthesized_expression): Use the new tokens to ensure this is
21314         not a cast of method invocation.
21315
21316         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21317         when reading a `)' and Deambiguate_CloseParens () was previously
21318         called.
21319
21320         * expression.cs (ParenthesizedExpression): New class.  This is
21321         just used for the CS0075 test.
21322         (Binary.DoResolve): Check for CS0075.   
21323
21324 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21325
21326         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21327         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21328         reference comparison.
21329
21330         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21331         examine the ReturnType for equality - this is necessary in the
21332         cases of implicit and explicit operators whose signature also
21333         includes the return type.
21334
21335 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21336
21337         * namespace.cs: Cache the result of the namespace computation,
21338         instead of computing it every time.
21339
21340 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21341
21342         * decl.cs: Use a global arraylist that we reuse over invocations
21343         to avoid excesive memory consumption.  Reduces memory usage on an
21344         mcs compile by one meg (45 average).
21345
21346         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21347         private, work around that.
21348
21349 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21350
21351         * literal.cs (IntLiteral): Define Zero and One static literals. 
21352
21353         * cs-parser.jay (integer_literal): use static literals to reduce
21354         memory usage for the most used literals (0, 1 and -1).  211kb
21355         reduced in memory usage.
21356
21357         Replace all calls to `new ArrayList' with `new
21358         ArrayList(4)' which is a good average number for most allocations,
21359         and also requires only 16 bytes of memory for its buffer by
21360         default. 
21361
21362         This reduced MCS memory usage in seven megabytes for the RSS after
21363         bootstrapping.
21364
21365 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21366
21367         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21368         handle params methods the correct way by forming only one
21369         applicable set with params and normal methods in them. Earlier we
21370         were looking at params methods only if we found no normal methods
21371         which was not the correct thing to do.
21372
21373         (Invocation.BetterFunction): Take separate arguments indicating
21374         when candidate and the best method are params methods in their
21375         expanded form.
21376
21377         This fixes bugs #43367 and #46199.
21378
21379         * attribute.cs: Documentation updates.
21380
21381         (CheckAttribute): Rename to CheckAttributeTarget.
21382         (GetValidPlaces): Rename to GetValidTargets.
21383
21384         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21385         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21386
21387         Fixes bug #44468.
21388
21389 2003-07-28  Martin Baulig  <martin@ximian.com>
21390
21391         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21392         name when looking up the base class of a nested class.  Fixes #46977.
21393
21394 2003-07-26  Martin Baulig  <martin@ximian.com>
21395
21396         * expression.cs (Indexers.Indexer): New nested struct; contains
21397         getter, setter and the indexer's type.
21398         (Indexers.Properties): This is now an ArrayList of
21399         Indexers.Indexer's.
21400         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21401         indexer doesn't have any getters.
21402
21403         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21404         for embedded property and indexer assignments.
21405
21406 2003-07-26  Martin Baulig  <martin@ximian.com>
21407
21408         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21409         preprocessor directive is not the first non-whitespace character
21410         on a line.
21411
21412 2003-07-26  Martin Baulig  <martin@ximian.com>
21413
21414         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21415         namespace parsing, follow the spec more closely.
21416
21417         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21418         NamespaceEntry.Lookup().
21419
21420 2003-07-25  Martin Baulig  <martin@ximian.com>
21421
21422         * MethodCore.cs (OverridesSomething): New public field; it's set
21423         from TypeContainer.DefineMembers if this method overrides
21424         something (which doesn't need to be a method).  Fix #39462.
21425
21426 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21427
21428         * typemanager.cs (GetMembers): Ensure that the list of members is
21429         reversed. This keeps things in sync.
21430
21431         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21432         find an AttributeUsage attribute.
21433
21434         * expression.cs (Invocation.OverloadResolve): Perform the check
21435         which disallows Invoke to be directly called on a Delegate.
21436
21437         (Error_InvokeOnDelegate): Report error cs1533.
21438
21439 2003-07-25  Martin Baulig  <martin@ximian.com>
21440
21441         * expression.cs (Indexers.GetIndexersForType): Only look in the
21442         interface hierarchy if the requested type is already an
21443         interface.  Fixes #46788 while keeping #46502 fixed.
21444
21445 2003-07-25  Martin Baulig  <martin@ximian.com>
21446
21447         * class.cs (TypeContainer.DefineMembers): Check whether all
21448         readonly fields have been assigned and report warning CS0649 if
21449         not.
21450
21451         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21452         a valuetype.
21453
21454 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21455
21456         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21457         returned from GetMethods to make things consistent with the
21458         assumptions MCS makes about ordering of methods.
21459
21460         This should comprehensively fix bug #45127 and it does :-)
21461
21462         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21463         ordering is actually reverse.
21464
21465         * Clean up some debug messages I left lying around.
21466
21467         * interface.cs (Populate*): Get rid of code which emits attributes
21468         since the stage in which we emit attributes is the 'Emit' stage,
21469         not the define stage.
21470
21471         (Emit): Move attribute emission for interface members here.
21472
21473 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21474
21475         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21476         closely: we eliminate methods in base types when we have an
21477         applicable method in a top-level type.
21478
21479         Please see section 14.5.5.1 for an exact description of what goes
21480         on. 
21481
21482         This fixes bug #45127 and a host of other related to corlib compilation.
21483
21484         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21485         array is the method corresponding to the top-level type (this is
21486         because of the changes made to icall.c) so we change this
21487         accordingly.
21488
21489         (MethodGroupExpr.Name): This too.
21490
21491         * typemanager.cs (GetElementType): New method which does the right
21492         thing when compiling corlib. 
21493
21494         * everywhere: Make use of the above in the relevant places.
21495
21496 2003-07-22  Martin Baulig  <martin@ximian.com>
21497
21498         * cs-parser.jay (invocation_expression): Moved
21499         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21500         `cast_expression', but create a InvocationOrCast which later
21501         resolves to either an Invocation or a Cast.
21502
21503         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21504         method; call this before EmitStatement() to make sure that this
21505         expression can be used as a statement.
21506
21507         * expression.cs (InvocationOrCast): New class; resolves to either
21508         an Invocation or a Cast.
21509
21510         * statement.cs (StatementExpression): Call ResolveStatement() on
21511         the ExpressionStatement before emitting it.
21512
21513 2003-07-21  Martin Baulig  <martin@ximian.com>
21514
21515         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21516         `ref' and `out' attributes match; fixes #46220.
21517         (MemberAccess.ResolveMemberAccess): You can't reference a type
21518         through an expression; fixes #33180.
21519         (Indexers.GetIndexersForType): Don't return the indexers from
21520         interfaces the class implements; fixes #46502.
21521
21522 2003-07-21  Martin Baulig  <martin@ximian.com>
21523
21524         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21525         CS0661 checks; fixes bug #30442.
21526
21527 2003-07-21  Martin Baulig  <martin@ximian.com>
21528
21529         * decl.cs (AdditionResult): Added `Error'.
21530
21531         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21532
21533         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21534         makes cs0031.cs actually work.
21535
21536 2003-07-20  Martin Baulig  <martin@ximian.com>
21537
21538         * namespace.cs: Fixed that bug which caused a crash when compiling
21539         the debugger's GUI.
21540
21541 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21542
21543         * typemanager.cs (LookupTypeReflection): Never expose types which
21544         are NotPublic, NestedPrivate, NestedAssembly, or
21545         NestedFamANDAssem.  We used to return these, and later do a check
21546         that would report a meaningful error, but the problem is that we
21547         would not get the real match, if there was a name override.
21548
21549 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21550
21551         * namespace.cs (Namespace, Name): Do not compute the namespace
21552         name dynamically, compute it in the constructor.  This reduced
21553         memory usage by 1697 KB.
21554
21555         * driver.cs: Use --pause to pause at the end.
21556
21557 2003-07-17  Peter Williams  <peter@newton.cx>
21558
21559         * Makefile: Change the name of the test target so that it doesn't
21560         conflict with the recursive test target.
21561
21562 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21563
21564         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21565         AddressOf): Do not use EmitThis, that was wrong, use the actual
21566         this pointer.
21567
21568 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21569
21570         * class.cs (MethodData.Define): While checking if a method is an
21571         interface implementation, improve the test: If we are not public
21572         (use new test here: use the computed MethodAttributes directly,
21573         instead of the parsed modifier flags) check if the `implementing'
21574         method comes from an interface or not.
21575
21576         * pending.cs (VerifyPendingMethods): Slightly better error
21577         message.
21578
21579         * makefile: add test target that does the mcs bootstrap.
21580
21581 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21582
21583         * interface.cs (Define): Do nothing here since there are no
21584         members to populate etc. Move the attribute emission out of here
21585         since this was just totally the wrong place to put it. Attribute
21586         application happens during the 'Emit' phase, not in the 'Define'
21587         phase.
21588
21589         (Emit): Add this method and move the attribute emission here
21590
21591         * rootcontext.cs (EmitCode): Call the Emit method on interface
21592         types too.
21593
21594 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21595
21596         * expression.cs (OverloadResolve): Report error only if Location
21597         is not 'Null' which means that there was a probe going on.
21598
21599 2003-07-14  Martin Baulig  <martin@ximian.com>
21600
21601         * expression.cs (ConditionalLogicalOperator): New public class to
21602         implement user defined conditional logical operators.
21603         This is section 14.11.2 in the spec and bug #40505.
21604
21605 2003-07-14  Martin Baulig  <martin@ximian.com>
21606
21607         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21608
21609 2003-07-14  Martin Baulig  <martin@ximian.com>
21610
21611         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21612
21613         * ecore.cs (IVariable.VerifyFixed): New interface method.
21614
21615         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21616         operator, check whether the variable is actually fixed.  Fixes bug
21617         #36055.  Set a variable definitely assigned when taking its
21618         address as required by the spec.
21619
21620         * statement.cs (LocalInfo.IsFixed): New field.
21621         (LocalInfo.MakePinned): Set `IsFixed' to true.
21622
21623 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21624
21625         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21626         for .ctors, ensure that we only ask for members declared in the
21627         attribute type (BindingFlags.DeclaredOnly).
21628
21629         Fixes bug #43632.
21630
21631         * expression.cs (Error_WrongNumArguments): Report error 1501
21632         correctly the way CSC does.
21633
21634 2003-07-13  Martin Baulig  <martin@ximian.com>
21635
21636         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21637         lookup on the fully qualified name, to make things like "X.X" work
21638         where "X.X" is a fully qualified type name, but we also have a
21639         namespace "X" in the using list.  Fixes #41975.
21640
21641 2003-07-13  Martin Baulig  <martin@ximian.com>
21642
21643         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21644         function. If we're a CompoundAssign, we need to create an embedded
21645         CompoundAssign, not an embedded Assign.
21646         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21647         Fixes #45854.
21648
21649 2003-07-13  Martin Baulig  <martin@ximian.com>
21650
21651         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21652         work to fix bug #46088.
21653
21654 2003-07-13  Ravi Pratap <ravi@ximian.com>
21655
21656         * class.cs (Operator.Emit): Do not emit attributes here - it is
21657         taken care of by the Method class that we delegate too. This takes
21658         care of bug #45876.
21659
21660 2003-07-10  Martin Baulig  <martin@ximian.com>
21661
21662         * expression.cs (TypeOfVoid): New class.
21663         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21664
21665 2003-07-10  Martin Baulig  <martin@ximian.com>
21666
21667         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21668         bug #35957.
21669
21670 2003-07-10  Martin Baulig  <martin@ximian.com>
21671
21672         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21673         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21674
21675         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21676
21677         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21678
21679 2003-07-10  Martin Baulig  <martin@ximian.com>
21680
21681         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21682         of decimal.  Fixes #42850.
21683
21684         NOTE: I also fixed the created byte blob, but this doesn't work on
21685         the MS runtime and csc never produces any byte blobs for decimal
21686         arrays.
21687
21688 2003-07-10  Martin Baulig  <martin@ximian.com>
21689
21690         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21691         structs; fixes #32068.
21692         (Block.AddChildVariableNames): Fixed #44302.
21693
21694 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21695
21696         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21697
21698 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21699
21700         * attribute.cs: And this test is onger needed.
21701
21702 2003-07-08  Martin Baulig  <martin@ximian.com>
21703
21704         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21705         inaccessible types.  Fixes #36313.
21706
21707         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21708
21709         * namespace.cs (NamespaceEntry): Create implicit entries for all
21710         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21711         implicit entries for N1.N2 and N1.
21712
21713 2003-07-08  Martin Baulig  <martin@ximian.com>
21714
21715         Rewrote the handling of namespaces to fix a lot of the issues
21716         wrt. `using' aliases etc.
21717
21718         * namespace.cs (Namespace): Splitted this class into a
21719         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21720
21721         * typemanager.cs (TypeManager.IsNamespace): Removed.
21722         (TypeManager.ComputeNamespaces): Only compute namespaces from
21723         loaded assemblies here, not the namespaces from the assembly we're
21724         currently compiling.
21725
21726 2003-07-08  Martin Baulig  <martin@ximian.com>
21727
21728         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21729
21730 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21731
21732         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21733         already fixed it.  
21734
21735         I thought about the memory savings here, but LookupTypeReflection
21736         is used under already very constrained scenarios.  Compiling
21737         corlib or mcs only exposes one hit, so it would not really reduce
21738         any memory consumption.
21739
21740 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21741
21742         * typemanager.cs: fixes bug #45889 by only adding public types from
21743         other assemblies to the list of known types.
21744
21745 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21746
21747         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21748         on the type we resolved.
21749
21750 2003-07-05  Martin Baulig  <martin@ximian.com>
21751
21752         * pending.cs (PendingImplementation.ParentImplements): Don't
21753         create the proxy if the parent is abstract.
21754
21755         * class.cs (TypeContainer.DefineIndexers): Process explicit
21756         interface implementations first.  Fixes #37714.
21757
21758 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21759
21760         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21761         defined recursively;  but since we modify the input parameters
21762         (left is set to `this' temporarily), we reset this value if the
21763         left_is_explicit is false, which gives the original semantics to
21764         the code.  
21765
21766         * literal.cs (NullPointer): new class used to represent a null
21767         literal in a pointer context.
21768
21769         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21770         type is a pointer, use a NullPointer object instead of a
21771         NullLiteral.   Closes 43687
21772
21773         (ExplicitConversion): Convert pointer values using
21774         the conv opcode to the proper type.
21775
21776         * ecore.cs (New): change ValueTypeVariable property into a method,
21777         that returns whether the valuetype is suitable for being used.
21778
21779         * expression.cs (Binary.DoNumericPromotions): Only return if we
21780         the int constant was a valid uint, and we can return both left and
21781         right as uints.  If not, we continue processing, to trigger the
21782         type conversion.  This fixes 39018.
21783
21784         * statement.cs (Block.EmitMeta): During constant resolution, set
21785         the CurrentBlock property on the emitcontext, so that we resolve
21786         constants propertly.
21787
21788 2003-07-02  Martin Baulig  <martin@ximian.com>
21789
21790         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21791         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21792
21793         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21794         than emitting it here.
21795
21796         * statement.cs: Fixed some more flow analysis bugs.
21797
21798 2003-07-02  Martin Baulig  <martin@ximian.com>
21799
21800         * class.cs (MethodData.Define): When implementing interface
21801         methods, set Final unless we're Virtual.
21802
21803         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21804         check work for interface methods.
21805
21806 2003-07-01  Martin Baulig  <martin@ximian.com>
21807
21808         * ecore.cs (EmitContext.This): Replaced this property with a
21809         GetThis() method which takes a Location argument.  This ensures
21810         that we get the correct error location for a CS0188.
21811
21812 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21813
21814         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21815         ImplicitStandardConversion.
21816
21817         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21818
21819 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21820
21821         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21822         optimization.
21823
21824 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21825
21826         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21827         constructors.
21828
21829         (MethodData.Define): Turn off initlocals for unsafe methods.
21830
21831 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21832
21833         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21834         complete;  Fixes #37521.
21835
21836         * delegate.cs: Use Modifiers.TypeAttr to compute the
21837         TypeAttributes, instead of rolling our own.  This makes the flags
21838         correct for the delegates.
21839
21840 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21841
21842         * class.cs (Constructor.Define): Set the private flag for static
21843         constructors as well.
21844
21845         * cs-parser.jay (statement_expression): Set the return value to
21846         null, to avoid a crash when we catch an error.
21847
21848 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21849
21850         * cs-parser.jay: Applied patch from Jackson that adds support for
21851         extern and unsafe modifiers to destructor declarations.
21852
21853         * expression.cs: Report error 21 if the user is trying to index a
21854         System.Array.
21855
21856         * driver.cs: Add an error message, suggested by the bug report.
21857
21858         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21859         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21860
21861 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21862
21863         * namespace.cs: Add some information to reduce FAQs.
21864
21865 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21866
21867         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21868         underlying enumeration types.  Fixes #43915.
21869
21870         * expression.cs: Treat ushort/short as legal values to be used in
21871         bitwise operations.
21872
21873 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21874
21875         * delegate.cs: transfer custom attributes for paramenters from
21876         the delegate declaration to Invoke and BeginInvoke.
21877
21878 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21879
21880         * attribute.cs: handle custom marshalers and emit marshal info
21881         for fields, too.
21882
21883 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21884
21885         * makefile.gnu: Added anonymous.cs to the compiler sources.
21886
21887 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21888
21889         * iterators.cs: Change the name of the proxy class to include two
21890         underscores.
21891
21892         * cs-parser.jay: Update grammar to include anonymous methods.
21893
21894         * anonymous.cs: new file.
21895
21896 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21897
21898         * class.cs (Field.Define): Add missing test for pointers and
21899         safety. 
21900
21901 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21902
21903         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21904         we use the stobj opcode.
21905
21906         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21907         since it wasn't the correct fix. 
21908
21909         It still is puzzling that we are required to use stobj for IntPtr
21910         which seems to be a ValueType.
21911
21912 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21913
21914         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21915         during regular simple name resolution.   Now, the trick is that
21916         instead of returning for processing the simplename, we do a
21917         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21918         contextual lookup type).   If a match is found, return that, if
21919         not, return for further composition.
21920
21921         This fixes long-standing 30485.
21922
21923         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21924         using the address to initialize an object, do an Stobj instead of
21925         using the regular Stelem.
21926
21927         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21928         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21929         Because if we are a BaseIndexerAccess that value will be true.
21930         Fixes 43643.
21931
21932         * statement.cs (GotoCase.Resolve): Return after reporting an
21933         error, do not attempt to continue. 
21934
21935         * expression.cs (PointerArithmetic.Emit): If our operand is a
21936         long, convert our constants to match the operand before
21937         multiplying.  Convert to I type before adding.   Fixes 43670.
21938
21939 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21940
21941         * enum.cs (ImplicitConversionExists) : Rename to
21942         ImplicitEnumConversionExists to remove ambiguity. 
21943
21944         * ecore.cs (NullCast): New type of cast expression class which
21945         basically is very similar to EmptyCast with the difference being
21946         it still is a constant since it is used only to cast a null to
21947         something else
21948         (eg. (string) null)
21949
21950         * convert.cs (ImplicitReferenceConversion): When casting a null
21951         literal, we return a NullCast.
21952
21953         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21954         should be around anymore.
21955
21956         The renaming (reported was slightly wrong). Corrections:
21957
21958         ConvertImplicitStandard -> ImplicitConversionStandard
21959         ConvertExplicitStandard -> ExplicitConversionStandard
21960
21961         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21962         before passing them in !
21963
21964         * convert.cs (ImplicitConversionStandard): When comparing for
21965         equal expr and target types, ensure that expr is not a
21966         NullLiteral.
21967
21968         In general, we must not be checking (expr_type ==
21969         target_type) in the top level conversion methods
21970         (ImplicitConversion, ExplicitConversion etc). This checking is
21971         done in the methods that they delegate to.
21972
21973 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21974
21975         * convert.cs: Move Error_CannotConvertType,
21976         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21977         ImplicitNumericConversion, ImplicitConversionExists,
21978         ImplicitUserConversionExists, StandardConversionExists,
21979         FindMostEncompassedType, FindMostSpecificSource,
21980         FindMostSpecificTarget, ImplicitUserConversion,
21981         ExplicitUserConversion, GetConversionOperators,
21982         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21983         TryImplicitIntConversion, Error_CannotConvertImplicit,
21984         ConvertImplicitRequired, ConvertNumericExplicit,
21985         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21986         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21987         its own file.
21988
21989         Perform the following renames:
21990
21991         StandardConversionExists -> ImplicitStandardConversionExists
21992         ConvertImplicit -> ImplicitConversion
21993         ConvertImplicitStandard -> ImplicitStandardConversion
21994         TryImplicitIntConversion -> ImplicitIntConversion
21995         ConvertImplicitRequired -> ImplicitConversionRequired
21996         ConvertNumericExplicit -> ExplicitNumericConversion
21997         ConvertReferenceExplicit -> ExplicitReferenceConversion
21998         ConvertExplicit -> ExplicitConversion
21999         ConvertExplicitStandard -> ExplicitStandardConversion
22000
22001 2003-05-19  Martin Baulig  <martin@ximian.com>
22002
22003         * statement.cs (TypeInfo.StructInfo): Made this type protected.
22004         (TypeInfo): Added support for structs having structs as fields.
22005
22006         * ecore.cs (FieldExpr): Implement IVariable.
22007         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
22008         VariableInfo for the field.
22009
22010 2003-05-18  Martin Baulig  <martin@ximian.com>
22011
22012         * expression.cs (This.DoResolve): Report a CS0027 if we're
22013         emitting a field initializer.
22014
22015 2003-05-18  Martin Baulig  <martin@ximian.com>
22016
22017         * expression.cs (This.ResolveBase): New public function.
22018         (This.DoResolve): Check for CS0188.
22019
22020         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
22021         This.Resolve().
22022
22023         * ecore.cs (MethodGroupExpr.DoResolve): Set the
22024         `instance_expression' to null if we don't have any non-static
22025         methods.
22026
22027 2003-05-18  Martin Baulig  <martin@ximian.com>
22028
22029         Reworked the way how local variables and parameters are handled by
22030         the flow analysis code.
22031
22032         * statement.cs (TypeInfo, VariableMap): New public classes.
22033         (VariableInfo): New public class.  This is now responsible for
22034         checking whether a variable has been assigned.  It is used for
22035         parameters and local variables.
22036         (Block.EmitMeta): Take the InternalParameters as argument; compute
22037         the layout of the flow vectors here.
22038         (Block.LocalMap, Block.ParameterMap): New public properties.
22039         (FlowBranching): The .ctor doesn't get the InternalParameters
22040         anymore since Block.EmitMeta() now computes the layout of the flow
22041         vector.
22042         (MyStructInfo): This class is now known as `StructInfo' and nested
22043         in `TypeInfo'; we don't access this directly anymore.
22044
22045         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
22046         property and removed IsAssigned(), IsFieldAssigned(),
22047         SetAssigned() and SetFieldAssigned(); we now call them on the
22048         VariableInfo so we don't need to duplicate this code everywhere.
22049
22050         * expression.cs (ParameterReference): Added `Block block' argument
22051         to the .ctor.
22052         (LocalVariableReference, ParameterReference, This): The new
22053         VariableInfo class is now responsible for all the definite
22054         assignment stuff.
22055
22056         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
22057         IsParameterAssigned, SetParameterAssigned): Removed.
22058
22059 2003-05-18  Martin Baulig  <martin@ximian.com>
22060
22061         * typemanager.cs (InitCoreTypes): Try calling
22062         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
22063         the 3-args-version.  Corlib now also needs our `void_type'.
22064         (GetMethod): Added overloaded version which takes an optional
22065         `bool report_errors' to allow lookups of optional methods.
22066
22067 2003-05-12  Martin Baulig  <martin@ximian.com>
22068
22069         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
22070         only used for locals and not for parameters.
22071
22072 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
22073
22074         * support.cs (InternalParameters.ParameterType): Return the
22075         ExternalType of the parameter.
22076
22077         * parameter.cs (Parameter.ExternalType): drop the two arguments,
22078         they were unused.
22079
22080 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
22081
22082         * class.cs (MethodData.Define): Do not set the `newslot' on
22083         interface members, if they are also flagged as "override".
22084
22085         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
22086         better code for ++i and i++.  This only works for static fields
22087         and local variables.
22088
22089         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
22090         want to pull the DeclSpace out of the builder_to_declspace instead
22091         of the TypeBuilder (like in TypeContainer.FindMembers).
22092
22093         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
22094         instead of LookupTypeContainer.  Fixes the crash on .NET for
22095         looking up interface members.
22096
22097         * const.cs: Create our own emit context during the Definition
22098         stage, so that constants are evaluated in the proper context, when
22099         a recursive definition happens.
22100
22101 2003-05-11  Martin Baulig  <martin@ximian.com>
22102
22103         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
22104         new block for a switch section.
22105         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
22106         the adding/lookup in the switch block.  Fixes #39828.
22107
22108 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
22109
22110         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
22111         functionality: I needed to convert the data after I had performed
22112         the add/sub operation into the operands type size.
22113
22114         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
22115         pass the type for the box operation, otherwise the resulting
22116         object would have been of type object.
22117
22118         (BoxedCast): Add constructor to specify the type to box as.
22119
22120 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
22121
22122         * iterators.cs: I was reusing the `count' variable inadvertently,
22123         take steps to not allow this to happen.
22124
22125 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
22126
22127         * attribute.cs (Attribute.Resolve): Params attributes are encoded
22128         by creating an array at the point where the params starts and
22129         putting all those arguments there, then adjusting the size of the
22130         array.
22131
22132 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
22133
22134         * expression.cs (New.AddressOf): Implement interface
22135         IMemoryLocation.  This is used when the `new' operator is used in
22136         the context of an invocation to a method on a value type.
22137
22138         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
22139         example. 
22140
22141         * namespace.cs: Also check the using aliases here.
22142
22143         * driver.cs: Move the test for using validity after the types have
22144         been entered, so we do a single pass that also includes the using
22145         aliases. 
22146
22147         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
22148         in the regular case.   CreateSiblingForFinally is doing extra
22149         error checking.
22150
22151         * attribute.cs (GetAttributeArgumentExpression): Store the result
22152         on an out value, and use the return value to indicate failure
22153         instead of using null (which is a valid return for Constant.GetValue).
22154
22155         * statement.cs: Perform the analysis flow for the increment
22156         portion after the statement, because this will be the real flow of
22157         execution.  Fixes #42385
22158
22159         * codegen.cs (EmitContext.EmitArgument,
22160         EmitContext.EmitStoreArgument): New helper functions when the
22161         RemapToProxy flag is set.
22162
22163         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
22164         function.
22165
22166         Add support for remapping parameters. 
22167
22168         * iterators.cs: Propagate parameter values;  Store parameter
22169         values in the proxy classes.
22170
22171 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
22172
22173         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
22174         need a proxy reference;  I do not know what I was thinking
22175
22176         * cs-parser.jay (constructor_initializer): catch another error,
22177         and display nice message.
22178
22179         (field_declaration): catch void field declaration
22180         to flag a better error. 
22181
22182         * class.cs (MemberBase.CheckBase): Report an error instead of a
22183         warning if a new protected member is declared in a struct. 
22184         (Field.Define): catch the error of readonly/volatile.
22185
22186         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
22187
22188         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
22189         volatile variable is taken
22190
22191 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
22192
22193         * statement.cs (Fixed.Resolve): Report an error if we are not in
22194         an unsafe context.
22195
22196 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
22197
22198         * typemanager.cs: reuse the code that handles type clashes for
22199         delegates and enumerations.
22200
22201         * class.cs (Report28): Always report.
22202
22203         * expression.cs (EncodeAsAttribute): Allow nulls here.
22204
22205 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
22206
22207         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
22208         the functionality for testing whether an expression is valid for
22209         an attribute here.  Also handle the case of arrays of elements
22210         being stored. 
22211
22212         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
22213         encoding a linear array into an array of objects that are suitable
22214         to be passed to an CustomAttributeBuilder.
22215
22216         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
22217
22218         * ecore.cs: (FieldExpr): Handle field remapping here.
22219
22220         * iteratators.cs: Pass the instance variable (if the method is an
22221         instance method) to the constructors, so we can access the field
22222         variables on the class.
22223
22224         TODO: Test this with structs.  I think the THIS variable on
22225         structs might have to be a pointer, and not a refenrece
22226
22227 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22228
22229         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22230         local variables to fields in a proxy class.
22231
22232         * iterators.cs (PopulateProxy): Rename our internal fields to
22233         <XXX>.  
22234         Create a <THIS> field if we are an instance method, so we can
22235         reference our parent container variables.
22236         (MapVariable): Called back from the EmitContext code to enter a
22237         new variable to field mapping into the proxy class (we just create
22238         a FieldBuilder).
22239
22240         * expression.cs
22241         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22242         for using the remapped locals to fields.
22243
22244         I placed the code here, because that gives the same semantics to
22245         local variables, and only changes the Emit code.
22246
22247         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22248         statements inside iterators.
22249         (VariableInfo): Add a FieldBuilder for the cases when we are
22250         remapping local variables to fields in a proxy class
22251
22252         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22253         current_block != null.
22254
22255         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22256         not cope with strings, as it has been moved to the
22257         TableSwitchEmit.  Fixed bug in switch generation.
22258
22259         * expression.cs (New.DoResolve): Provide more context for the user
22260         when reporting an error.
22261
22262         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22263         pointers. 
22264
22265         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22266         check the permissions for it.  Note than in a type-resolution
22267         context the check was already present in DeclSpace.ResolveType,
22268         but was missing from the MemberAccess.
22269
22270         (ArrayCreation.CheckIndices): warn if the user has
22271         more nested levels of expressions, but there are no more
22272         dimensions specified.  Avoids crash on bug 41906.
22273
22274 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22275
22276         * statement.cs (Block): replace Implicit bool, for a generic
22277         flags.   
22278         New flag: `Unchecked'.  This is used during the EmitMeta phase
22279         (which is out-of-line with the regular Resolve/Emit process for a
22280         statement, as this is done ahead of time, but still gets a chance
22281         to call constant resolve).
22282
22283         (Block.Flags): new enum for adding a new flag.
22284
22285         (Block.EmitMeta): track the state of unchecked.
22286
22287         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22288         to enable constant resolution to work there as well.
22289
22290 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22291
22292         * typemanager.cs (ienumerable_type): Also look up
22293         System.Collections.IEnumerable. 
22294
22295 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22296
22297         TODO: Test more than one conditional per method.
22298
22299         * class.cs (Indexer.Define): Report the location where the user is
22300         referencing the unsupported feature.
22301
22302         (MethodData): Overload the use of `conditionals' to
22303         minimize the creation of needless ArrayLists.   This saves roughly
22304         212kb on my machine.
22305
22306         (Method): Implement the new IIteratorContainer interface.
22307         (Method.SetYields): Implement the method by setting the ModFlags
22308         to contain METHOD_YIELDS.
22309
22310         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22311         which just got set to null.
22312
22313         * iterators.cs: New file.
22314
22315         (Yield, YieldBreak): New statements.
22316
22317         * statement.cs (Return.Resolve): Flag an error if we are used in
22318         an iterator method.
22319
22320         * codegen.cs (InIterator): New flag set if the code is being
22321         compiled in an iterator method.
22322
22323         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22324         internal modifier, and we just use it to avoid adding extra
22325         fields, as this is seldom used.  
22326
22327         * cs-parser.jay: Add yield_statement (yield and yield break).
22328
22329         * driver.cs: New flag -v2 to turn on version 2 features. 
22330
22331         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22332         hashtable when v2 is enabled.
22333
22334 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22335
22336         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22337         there is already a namespace defined with this name.
22338
22339         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22340         people upgraded their corlibs.
22341
22342         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22343         always use fully qualified types, no need to use the compiler
22344         front end.
22345
22346         (TypeManager.IsNamespace): Use binarysearch.
22347
22348         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22349         AddDelegate): I did not quite use the new IsValid API properly: I
22350         have to pass the short-name and the fullname.  I was passing only
22351         the basename instead of the fullname sometimes. 
22352
22353         (TypeContainer.DefineType): call NamespaceClash.
22354
22355         * interface.cs (Interface.DefineType): use NamespaceClash before
22356         defining the type.
22357
22358         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22359         defining the type.
22360
22361         * enum.cs: (Enum.DefineType): use NamespaceClash before
22362         defining the type.
22363
22364         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22365         speed increase.  First, use the negative_hits cache when we get a
22366         negative.  Second, add the type with its full original name
22367         instead of the new . and + encoded name (reflection uses + to
22368         separate type from a nested type).  Use LookupTypeReflection
22369         directly which bypasses the type->name hashtable (that we already
22370         know does not contain the type.
22371
22372         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22373         location/container type. 
22374
22375         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22376
22377 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22378
22379         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22380
22381         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22382         method is being referenced in the method group from a static
22383         context, and report error 120 if so.
22384
22385         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22386         Error118. 
22387
22388         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22389         is created, we create the A namespace).
22390
22391         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22392         Fixes #41591
22393
22394 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22395
22396         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22397         invocation to ModuleBuilder.GetType with the same values will
22398         return a new type instance, so we need to cache its return
22399         values. 
22400
22401         * expression.cs (Binary.ResolveOperator): Only allow the compare
22402         operators on enums if they are of the same type.
22403
22404         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22405         types of ValueType on their own case.  Before we were giving them
22406         the same treatment as objects.
22407
22408         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22409         fullname.  Short name is used to compare against container name.
22410         Fullname is used to check against defined namespace names.
22411
22412         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22413         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22414
22415         (Method.CheckBase): Call parent.
22416         (MemberBase.CheckBase): Check for protected members on sealed
22417         classes.
22418         (PropertyBase.CheckBase): Call parent.
22419         (Field.Define): Call parent.
22420
22421         * report.cs: Negative error codes are now mapped to 8000 - code,
22422         so that the display is render more nicely.
22423
22424         * typemanager.cs: Do not use try/catch, instead report a regular
22425         error. 
22426
22427         (GetPointerType, GetReferenceType): These methods provide
22428         mechanisms to obtain the T* and T& from a T.  We had the code
22429         previously scattered around the code base, and it also used
22430         TypeManager.LookupType that would go through plenty of caches.
22431         This one goes directly to the type source.
22432
22433         In some places we did the Type.GetType followed by
22434         ModuleBuilder.GetType, but not in others, so this unifies the
22435         processing as well.
22436
22437         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22438         statements now that we have namespace information.
22439
22440         * typemanager.cs (IsNamespace): New method, returns whether the
22441         string presented is a namespace or not.
22442
22443         (ComputeNamespaces): New public entry point, computes the list of
22444         available namespaces, using the GetNamespaces API call in Mono, or
22445         the slower version in MS.NET.   
22446
22447         Now before we start the semantic analysis phase, we have a
22448         complete list of namespaces including everything that the user has
22449         provided.
22450
22451         Deleted old code to cache namespaces in .nsc files.
22452
22453 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22454
22455         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22456         class/struct location definition Location for the implicit
22457         constructor location.
22458
22459         (Operator.Define): Use the location of the operator for the
22460         implicit Method definition.
22461
22462         (Constructor.Emit): use the constructor location for the implicit
22463         base initializer constructor.
22464
22465         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22466         and the Expression class now contains two new methods:
22467
22468         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22469         isolate type lookup from the rest of the resolution process.
22470
22471         Since we use Expressions to hold type definitions due to the way
22472         we parse the input we have historically overloaded Resolve to
22473         perform the Type lookups if a special flag is passed.  Now this is
22474         eliminated and two methods take their place. 
22475
22476         The differences in the two methods between xStep and xTerminal is
22477         that xStep is involved in our current lookup system that uses
22478         SimpleNames to compose a name, while xTerminal is used just to
22479         catch the case where the simplename lookup failed.
22480
22481 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22482
22483         * expression.cs (ResolveMemberAccess): Remove redundant code.
22484         TypeExpr expressions are always born fully resolved.
22485
22486         * interface.cs (PopulateMethod): Do not lookup the types twice.
22487         We were doing it once during SemanticAnalysis and once during
22488         PopulateMethod.
22489
22490         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22491         in local variable type definitions, were being returned as a
22492         SimpleName (we decomposed everything into a string), that is
22493         because primary_expression was being used instead of a type in the
22494         grammar (reduce/reduce conflicts).
22495
22496         The part that was wrong is that we converted the expression into a
22497         string (an oversimplification in one hand, compounded with primary
22498         expressions doing string concatenation).
22499
22500         So things like:
22501
22502         A.B.C [] x;
22503
22504         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22505         using clauses from working on this particular context.  And a type
22506         was being matched directly against "A.B.C[]".
22507
22508         We now use the correct approach, and allow for ComposedCast to be
22509         part of the unary expression.  So the "A.B.C []" become a composed
22510         cast of "A.B.C" (as a nested group of MemberAccess with a
22511         SimpleName at the end) plus the rank composition "[]". 
22512
22513         Also fixes 35567
22514
22515 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22516
22517         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22518         for the access level checking.
22519
22520         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22521         `TypeContainer container', because I kept getting confused when I
22522         was debugging this code.
22523
22524         * expression.cs (Indexers): Instead of tracking getters/setters,
22525         we now track them in parallel.  We create one arraylist less, but
22526         most importantly it is possible now for the LValue code to find a
22527         matching get for a set.
22528
22529         (IndexerAccess.DoResolveLValue): Update the code.
22530         GetIndexersForType has been modified already to extract all the
22531         indexers from a type.  The code assumed it did not.
22532
22533         Also make the code set the correct return type for the indexer.
22534         This was fixed a long time ago for properties, but was missing for
22535         indexers.  It used to be void_type.
22536
22537         (Binary.Emit): Test first for doubles instead of
22538         floats, as they are more common.
22539
22540         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22541         when dealing with floats and the <=, >= operators.  This fixes bug
22542         #39314 
22543
22544         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22545         to load the array value by emitting a load on the foreach variable
22546         type.  This was incorrect.  
22547
22548         We now emit the code to load an element using the the array
22549         variable type, and then we emit the conversion operator.
22550
22551         Fixed #40176
22552
22553 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22554
22555         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22556
22557 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22558
22559         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22560         test for protection before we test for signatures. 
22561
22562         (MethodSignature.ToString): implement.
22563
22564         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22565         to the case where we reduced into a LongConstant.
22566
22567         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22568         depend on whether the information is acurrate, because the
22569         Microsoft runtime will always claim that the array type is public,
22570         regardless of the real state.
22571
22572         If the type is a pointer, another problem happens: the type is
22573         reported as non-public in Microsoft.  
22574
22575         In both cases we have to call CheckAccessLevel recursively with
22576         the underlying type as the argument to be tested.
22577
22578 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22579
22580         * assign.cs (Assign.Emit): If we are dealing with a compound
22581         assignment expression, we should use the code path that stores the
22582         intermediate result in a temporary value.  This fixes #40903.
22583
22584         *expression.cs (Indirection.ToString): Provide ToString method for
22585         debugging. 
22586
22587 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22588
22589         * class.cs: Null out fields holding references to Block objects so
22590         they can be garbage collected.
22591
22592         * expression.cs (OverloadResolve): Remove unused local.
22593
22594 2003-04-07  Martin Baulig  <martin@ximian.com>
22595
22596         * codegen.cs (EmitContext.CurrentFile): New public field.
22597         (EmitContext.Mark): Use the CurrentFile to check whether the
22598         location is in the correct file.
22599         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22600
22601 2003-04-07  Martin Baulig  <martin@ximian.com>
22602
22603         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22604
22605         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22606         location.  [FIXME: The location argument which gets passed to this
22607         method is sometimes wrong!]
22608
22609 2003-04-07  Nick Drochak <ndrochak@gol.com>
22610
22611         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22612
22613 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22614
22615         * expression.cs (Indirection.EmitAssign): We were using the
22616         temporary, but returning immediately instead of continuing the
22617         EmitAssing flow.
22618
22619 2003-04-06  Martin Baulig  <martin@ximian.com>
22620
22621         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22622         if it's a nested child, but also deriving from the outer class.
22623         See test 190.cs.
22624
22625         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22626         nested child, but also deriving from the outer class.  See
22627         test-190.cs.
22628         (FilterWithClosure): We may access private members of the outer
22629         class if we're a nested child and deriving from the outer class.
22630         (RealMemberLookup): Only set `closure_private_ok' if the
22631         `original_bf' contained BindingFlags.NonPublic.
22632
22633 2003-04-05  Martin Baulig  <martin@ximian.com>
22634
22635         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22636
22637 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22638
22639         * class.cs (Event.Define): Do not allow abstract events to have
22640         initializers. 
22641
22642 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22643
22644         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22645         block in event declarations.
22646
22647         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22648         value type, get its address.
22649
22650         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22651         leaving a class on the stack instead of a boolean value (int
22652         0/1).  Change the code so we compare against null, and then the
22653         result against zero.
22654
22655         * class.cs (TypeContainer.GetClassBases): We were checking for the
22656         parent class being sealed too late.
22657
22658         * expression.cs (Binary.Emit): For <= and >= when dealing with
22659         floating point values, use cgt.un and clt.un instead of cgt and
22660         clt alone.
22661
22662 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22663
22664         * statement.cs: Apply the same optimization as MS: skip the 
22665         GetEnumerator returning an IEnumerator, and use the one returning a 
22666         CharEnumerator instead. This allows us to avoid the try-finally block 
22667         and the boxing.
22668
22669 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22670
22671         * cs-parser.jay: Attributes cannot be applied to
22672                          namespaces. Fixes #40473
22673
22674 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22675
22676         * class.cs:
22677         (Add*): check if the name is valid using the full name for constants,
22678         fields, properties and events.
22679
22680 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22681
22682         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22683         char constants to be part of the enumeration.
22684
22685         * expression.cs (Conditional.DoResolve): Add support for operator
22686         true. Implements the missing functionality from 14.12
22687
22688         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22689         operator true/false as required by the spec.
22690
22691         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22692         implicit conversion to boolean.
22693
22694         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22695         also one where the type implements `operator true'. 
22696
22697         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22698         get an expression that will invoke operator true based on an
22699         expression.  
22700
22701         (GetConversionOperators): Removed the hack that called op_True
22702         here.  
22703
22704         (Expression.ResolveBoolean): Move this from Statement.
22705
22706 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22707
22708         * ecore.cs (FieldExpr): do not allow initialization of initonly
22709         fields on derived classes
22710
22711 2003-03-13  Martin Baulig  <martin@ximian.com>
22712
22713         * statement.cs (Block.Emit): Call ig.BeginScope() and
22714         ig.EndScope() when compiling with debugging info; call
22715         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22716
22717 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22718
22719         * expression.cs (Indexers): Do not construct immediately, allow
22720         for new members to be appended as we go.  Fixes 38143
22721
22722 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22723
22724         * expression.cs: save/restore context when resolving an unchecked
22725         expression.
22726
22727 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22728
22729         * cfold.cs: Catch division by zero in modulus operator during
22730         constant folding.
22731
22732 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22733
22734         * interface.cs (Interface.DefineMembers): Avoid defining members
22735         twice. 
22736
22737 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22738
22739         * driver.cs: handle the +/- options for -noconfig
22740
22741         * statement.cs (Unckeched.Resolve): Also track the state of
22742         unchecked in the Resolve phase.
22743
22744 2003-02-27  Martin Baulig  <martin@ximian.com>
22745
22746         * ecore.cs (Expression.MemberLookup): Don't create a
22747         MethodGroupExpr for something which is not a method.  Fixes #38291.
22748
22749 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22750
22751         * class.cs (MemberBase.CheckParameters): Also check that the type
22752         is unmanaged if it is a pointer.
22753
22754         * expression.cs (SizeOf.Resolve): Add location information.
22755
22756         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22757         a managed type is declared.
22758
22759         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22760         parameter modifiers as well.  Fixes bug 38606
22761
22762         * class.cs: Very sad.  Am backing out the speed up changes
22763         introduced by the ArrayList -> Array in the TypeContainer, as they
22764         were not actually that much faster, and introduced a bug (no error
22765         reports on duplicated methods).
22766
22767         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22768         source first, this will guarantee that we have a valid expression
22769         before calling in lower levels functions that will require a
22770         resolved object.  Then use this original_source in the
22771         target.ResolveLValue instead of the original source that was
22772         passed to us.
22773
22774         Another change.  Use target.Resolve instead of LValueResolve.
22775         Although we are resolving for LValues, we will let the Assign code
22776         take care of that (it will be called again from Resolve).  This
22777         basically allows code like this:
22778
22779         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22780         class Y { void A (X x) { x [0] += o; }
22781
22782         The problem was that the indexer was trying to resolve for
22783         set_Item (idx, object o) and never finding one.  The real set_Item
22784         was set_Item (idx, X).  By delaying the process we get the right
22785         semantics. 
22786
22787         Fixes bug 36505
22788
22789 2003-02-23  Martin Baulig  <martin@ximian.com>
22790
22791         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22792         while calling DoEmit ().
22793
22794         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22795         source files; if you use the #line directive inside a method, the
22796         compiler stops emitting line numbers for the debugger until it
22797         reaches the end of the method or another #line directive which
22798         restores the original file.
22799
22800 2003-02-23  Martin Baulig  <martin@ximian.com>
22801
22802         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22803
22804 2003-02-23  Martin Baulig  <martin@ximian.com>
22805
22806         * statement.cs (Block.AddChildVariableNames): We need to call this
22807         recursively, not just for our immediate children.
22808
22809 2003-02-23  Martin Baulig  <martin@ximian.com>
22810
22811         * class.cs (Event.Define): Always make the field private, like csc does.
22812
22813         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22814         actually work, fixes bug #37521.
22815
22816 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22817
22818         * delegate.cs: When creating the various temporary "Parameters"
22819         classes, make sure that we call the ComputeAndDefineParameterTypes
22820         on those new parameters (just like we do with the formal ones), to
22821         allow them to be resolved in the context of the DeclSpace.
22822
22823         This fixes the bug that Dick observed in Bugzilla #38530.
22824
22825 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22826
22827         * expression.cs (ResolveMemberAccess): When resolving a constant,
22828         do not attempt to pull a constant if the value was not able to
22829         generate a valid constant.
22830
22831         * const.cs (LookupConstantValue): Do not report more errors than required.
22832
22833 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22834
22835         * expression.cs: fixes bug #38328.
22836
22837 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22838
22839         * class.cs: Changed all the various members that can be part of a
22840         class from being an ArrayList to be an Array of the right type.
22841         During the DefineType type_list, interface_list, delegate_list and
22842         enum_list are turned into types, interfaces, delegates and enums
22843         arrays.  
22844
22845         And during the member population, indexer_list, event_list,
22846         constant_list, field_list, instance_constructor_list, method_list,
22847         operator_list and property_list are turned into their real arrays.
22848
22849         Although we could probably perform this operation earlier, for
22850         good error reporting we need to keep the lists and remove the
22851         lists for longer than required.
22852
22853         This optimization was triggered by Paolo profiling the compiler
22854         speed on the output of `gen-sample-program.pl' perl script. 
22855
22856         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22857         not crash in methods like MemberLookupFailed that use this field.  
22858
22859         This problem arises when the compiler fails to resolve a type
22860         during interface type definition for example.
22861
22862 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22863
22864         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22865         inherit from System.Object, so we have to stop at null, not only
22866         when reaching System.Object.
22867
22868 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22869
22870         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22871         DeclaredOnly because the parent indexer might have had a different
22872         name, but did not loop until the top of the hierarchy was reached.
22873
22874         The problem this one fixes is 35492: when a class implemented an
22875         indexer from an interface, we were getting the interface method
22876         (which was abstract) and we were flagging an error (can not invoke
22877         abstract method).
22878
22879         This also keeps bug 33089 functioning, and test-148 functioning.
22880
22881         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22882         out if a method is special is to see if it is declared in a
22883         property or event, or whether it is one of the predefined operator
22884         names.   This should fix correctly #36804.
22885
22886 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22887
22888         The goal here is to remove the dependency on EmptyCast.Peel ().
22889         Killing it completely.
22890
22891         The problem is that currently in a number of places where
22892         constants are expected, we have to "probe" for an EmptyCast, and
22893         Peel, which is not the correct thing to do, as this will be
22894         repetitive and will likely lead to errors. 
22895
22896         The idea is to remove any EmptyCasts that are used in casts that
22897         can be reduced to constants, so we only have to cope with
22898         constants. 
22899
22900         This bug hunt was triggered by Bug 37363 and the desire to remove
22901         the duplicate pattern where we were "peeling" emptycasts to check
22902         whether they were constants.  Now constants will always be
22903         constants.
22904
22905         * ecore.cs: Use an enumconstant here instead of wrapping with
22906         EmptyCast.  
22907
22908         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22909         throwing me off.  By handling this we can get rid of a few hacks.
22910
22911         * statement.cs (Switch): Removed Peel() code.
22912
22913 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22914
22915         * class.cs: Location information for error 508
22916
22917         * expression.cs (New.DoResolve): Add a guard against double
22918         resolution of an expression.  
22919
22920         The New DoResolve might be called twice when initializing field
22921         expressions (see EmitFieldInitializers, the call to
22922         GetInitializerExpression will perform a resolve on the expression,
22923         and later the assign will trigger another resolution
22924
22925         This leads to bugs (#37014)
22926
22927         * delegate.cs: The signature for EndInvoke should contain any ref
22928         or out parameters as well.  We were not doing this in the past. 
22929
22930         * class.cs (Field.Define): Do not overwrite the type definition
22931         inside the `volatile' group.  Turns out that volatile enumerations
22932         were changing the type here to perform a validity test, which
22933         broke conversions. 
22934
22935 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22936
22937         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22938         and structs, we do not want to load the instance variable
22939
22940         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22941         enum_type has to be handled like an object reference (implicit
22942         conversions exists from this to object), but the regular IsClass
22943         and IsValueType tests will never return true for this one.
22944
22945         Also we use TypeManager.IsValueType instead of type.IsValueType,
22946         just for consistency with the rest of the code (this is only
22947         needed if we ever use the construct exposed by test-180.cs inside
22948         corlib, which we dont today).
22949
22950 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22951
22952         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22953         just InternalCall.
22954
22955 2003-02-09  Martin Baulig  <martin@ximian.com>
22956
22957         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22958         (Namespace.DefineNamespaces): New static public method; this is
22959         called when we're compiling with debugging to add all namespaces
22960         to the symbol file.
22961
22962         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22963         pass it to the Namespace's .ctor.
22964
22965         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22966         and MethodBase arguments; pass the namespace ID to the symwriter;
22967         pass the MethodBase instead of the token to the symwriter.
22968         (SymbolWriter.DefineNamespace): New method to add a namespace to
22969         the symbol file.
22970
22971 2003-02-09  Martin Baulig  <martin@ximian.com>
22972
22973         * symbolwriter.cs: New file.  This is a wrapper around
22974         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22975         methods here in near future.
22976
22977 2003-02-09  Martin Baulig  <martin@ximian.com>
22978
22979         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22980         ILGenerator.MarkSequencePoint() which are actually used by the
22981         symbol writer.
22982
22983 2003-02-09  Martin Baulig  <martin@ximian.com>
22984
22985         * location.cs (SourceFile): New public sealed class.  This
22986         contains the name and an index which is used in the location's token.
22987         (Location): Reserve an appropriate number of bits in the token for
22988         the source file instead of walking over that list, this gives us a
22989         really huge performance improvement when compiling with debugging.
22990
22991         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22992         `SourceFile' argument instead of a string.
22993         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22994         but don't parse/tokenize here, we need to generate the list of all
22995         source files before we do that.
22996         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22997         the files.
22998
22999         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
23000         instead of a string.
23001
23002         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
23003         of a string.
23004
23005 2003-02-09  Martin Baulig  <martin@ximian.com>
23006
23007         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
23008         filename on `#line default'.
23009
23010 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
23011
23012         * statement.cs: don't clear the pinned var when the fixed statement
23013         returns from the method (fixes bug#37752).
23014
23015 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
23016
23017         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
23018         to IsValueType.
23019
23020 2003-02-07  Martin Baulig  <martin@ximian.com>
23021
23022         * driver.cs: Removed the `--debug-args' command line argument.
23023
23024         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
23025         automatically by the AsssemblyBuilder.
23026         (CodeGen.InitializeSymbolWriter): We don't need to call any
23027         initialization function on the symbol writer anymore.  This method
23028         doesn't take any arguments.
23029
23030 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
23031
23032         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
23033         from referenced assemblies as well.
23034
23035 2003-02-02  Martin Baulig  <martin@ximian.com>
23036
23037         * class.cs (MethodData.Emit): Generate debugging info for external methods.
23038
23039 2003-02-02  Martin Baulig  <martin@ximian.com>
23040
23041         * class.cs (Constructor.Emit): Open the symbol writer before
23042         emitting the constructor initializer.
23043         (ConstructorInitializer.Emit): Call ec.Mark() to allow
23044         single-stepping through constructor initializers.
23045
23046 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
23047
23048         * class.cs: Handle error 549: do not allow virtual methods in
23049         sealed classes. 
23050
23051 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
23052
23053         * decl.cs: Check access levels when resolving types
23054
23055 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
23056
23057         * statement.cs: Add parameters and locals set in catch blocks that might 
23058         return to set vector
23059
23060 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
23061
23062         * class.cs (Operator): Set the SpecialName flags for operators.
23063
23064         * expression.cs (Invocation.DoResolve): Only block calls to
23065         accessors and operators on SpecialName methods.
23066
23067         (Cast.TryReduce): Handle conversions from char constants.
23068
23069
23070 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
23071
23072         * statement.cs: small memory and time optimization in FlowBranching.
23073
23074 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
23075
23076         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
23077         problem that the last fix but in the other sid (Set).
23078
23079         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
23080         access when there is no indexer in the hierarchy.
23081
23082 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
23083
23084         * class.cs: Combine some if statements.
23085
23086 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23087
23088         * driver.cs: fixed bug #37187.
23089
23090 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
23091
23092         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
23093         any indexer, it's needed to build a list with all the indexers in the
23094         hierarchy (AllGetters), else we have problems. Fixes #35653.
23095
23096 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
23097
23098         * class.cs (MethodData.Define): It is wrong for an interface
23099         implementation to be static in both cases: explicit and implicit.
23100         We were only handling this in one case.
23101
23102         Improve the if situation there to not have negations.
23103
23104         * class.cs (Field.Define): Turns out that we do not need to check
23105         the unsafe bit on field definition, only on usage.  Remove the test.
23106
23107 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23108
23109         * driver.cs: use assembly.Location instead of Codebase (the latest
23110         patch made mcs fail when using MS assemblies).
23111
23112 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
23113
23114         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
23115         get the path to *corlib.dll.
23116
23117 2003-01-21  Nick Drochak <ndrochak@gol.com>
23118
23119         * cs-tokenizer.cs:
23120         * pending.cs:
23121         * typemanager.cs: Remove compiler warnings
23122
23123 2003-01-20  Duncan Mak  <duncan@ximian.com>
23124
23125         * AssemblyInfo.cs: Bump the version number to 0.19.
23126
23127 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23128
23129         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
23130
23131 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
23132
23133         * class.cs (Constructor::Emit): Emit debugging info for constructors.
23134
23135 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
23136
23137         * cs-parser.jay: Small fix: we were not comparing the constructor
23138         name correctly.   Thanks to Zoltan for the initial pointer.
23139
23140 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
23141
23142         * cs-tokenizer.cs: Set file name when specified with #line
23143
23144 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
23145
23146         * cs-parser.jay: Only perform the constructor checks here if we
23147         are named like the class;  This will help provider a better
23148         error.  The constructor path is taken when a type definition is
23149         not found, but most likely the user forgot to add the type, so
23150         report that rather than the constructor error.
23151
23152 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
23153
23154         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
23155         allocations.
23156
23157 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23158
23159         * cs-parser.jay: Add cleanup call.
23160
23161 2003-01-13  Duncan Mak  <duncan@ximian.com>
23162
23163         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
23164         consistent with other methods.
23165
23166 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23167
23168         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
23169
23170 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
23171
23172         * attribute.cs: only set GuidAttr to true when we have a
23173         GuidAttribute.
23174
23175 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23176
23177         * ecore.cs:
23178         * expression.cs:
23179         * typemanager.cs: fixes to allow mcs compile corlib with the new
23180         Type.IsSubclassOf fix.
23181
23182 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
23183
23184         * expression.cs (LocalVariableReference.DoResolve): Classify a
23185         constant as a value, not as a variable.   Also, set the type for
23186         the variable.
23187
23188         * cs-parser.jay (fixed_statement): take a type instead of a
23189         pointer_type, so we can produce a better error message later.
23190
23191         * statement.cs (Fixed.Resolve): Flag types that are not pointers
23192         as an error.  
23193
23194         (For.DoEmit): Make inifinite loops have a
23195         non-conditional branch back.
23196
23197         (Fixed.DoEmit): First populate the pinned variables, then emit the
23198         statement, then clear the variables.  Before I was emitting the
23199         code once for each fixed piece.
23200
23201
23202 2003-01-08  Martin Baulig  <martin@ximian.com>
23203
23204         * statement.cs (FlowBranching.MergeChild): A break in a
23205         SWITCH_SECTION does not leave a loop.  Fixes #36155.
23206
23207 2003-01-08  Martin Baulig  <martin@ximian.com>
23208
23209         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
23210         lives in the same number space than `param_map'.  Fixes #36154.
23211
23212 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
23213
23214         * cs-parser.jay (constructor_declaration): Set the
23215         Constructor.ModFlags before probing for it.  This makes the
23216         compiler report 514, 515 and 132 (the code was there, but got
23217         broken). 
23218
23219         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
23220         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
23221         (GotoCase.Resolve): Set `Returns' to ALWAYS.
23222
23223 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
23224
23225         * enum.cs: create the enum static fields using the enum type.
23226
23227 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23228
23229         * class.cs: don't try to create the ParamBuilder for the return
23230         type if it's not needed (and handle it breaking for the ms runtime
23231         anyway).
23232
23233 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23234
23235         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23236
23237 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23238
23239         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23240         the command.   This showed up while compiling the JANET source
23241         code, which used \r as its only newline separator.
23242
23243 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23244
23245         * class.cs (Method.Define): If we are an operator (because it
23246         reuses our code), then set the SpecialName and HideBySig.  #36128
23247
23248 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23249
23250         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23251         exception, report error 120 `object reference required'.
23252
23253         * driver.cs: Add --pause option, used during to measure the size
23254         of the process as it goes with --timestamp.
23255
23256         * expression.cs (Invocation.DoResolve): Do not allow methods with
23257         SpecialName to be invoked.
23258
23259 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23260
23261         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23262         number before adding it.
23263
23264 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23265
23266         * ecore.cs (StandardImplicitConversion): When in an unsafe
23267         context, we allow conversion between void * to any other pointer
23268         type. This fixes bug #35973.
23269
23270 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23271
23272         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23273         is not thrown when extensionless outputs are used 
23274
23275 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23276
23277         * rootcontext.cs: fixed compilation of corlib.
23278
23279 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23280
23281         * attribute.cs (Attributes.Contains): Add new method.
23282
23283         * class.cs (MethodCore.LabelParameters): if the parameter is an
23284         `out' parameter, check that no attribute `[In]' has been passed.
23285
23286         * enum.cs: Handle the `value__' name in an enumeration.
23287
23288 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23289
23290         * decl.cs: Added special case to allow overrides on "protected
23291         internal" methods
23292
23293 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23294
23295         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23296         since it makes much more sense.
23297
23298         (Attributes.ctor): Don't require a Location parameter.
23299
23300         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23301
23302         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23303         since we already have that information per attribute.
23304
23305         * everywhere : make appropriate changes.
23306
23307         * class.cs (LabelParameters): Write the code which actually
23308         applies attributes to the return type. We can't do this on the MS
23309         .NET runtime so we flag a warning in the case an exception is
23310         thrown.
23311
23312 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23313
23314         * const.cs: Handle implicit null conversions here too.
23315
23316 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23317
23318         * class.cs (MethodCore.LabelParameters): Remove the extra
23319         Type [] parameter since it is completely unnecessary. Instead
23320         pass in the method's attributes so that we can extract
23321         the "return" attribute.
23322
23323 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23324
23325         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23326         of ignoring it and letting the compile continue.
23327
23328         * typemanager.cs (ChangeType): use an extra argument to return an
23329         error condition instead of throwing an exception.
23330
23331 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23332
23333         * expression.cs (Unary.TryReduce): mimic the code for the regular
23334         code path.  Perform an implicit cast in the cases where we can
23335         implicitly convert to one of the integral types, and then reduce
23336         based on that constant.   This fixes bug #35483.
23337
23338 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23339
23340         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23341
23342 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23343
23344         * namespace.cs: fixed bug #35489.
23345
23346 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23347
23348         * class.cs: Remove some dead code.
23349
23350         * cs-parser.jay: Estimate the number of methods needed
23351         (RootContext.MethodCount);
23352
23353         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23354         numbers instead of StringBuilders.
23355
23356         * support.cs (PtrHashtable): Add constructor with initial size;
23357         We can now reduce reallocations of the method table.
23358
23359 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23360
23361         * attribute.cs (ApplyAttributes): Keep track of the emitted
23362         attributes on a per-target basis. This fixes bug #35413.
23363
23364 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23365
23366         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23367         default to the Windows 1252 encoding.
23368
23369         (UnixParseOption): Support version, thanks to Alp for the missing
23370         pointer. 
23371
23372         * AssemblyInfo.cs: Add nice assembly information.
23373
23374         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23375         (bug 35169).
23376
23377         * cs-parser.jay: Allow a trailing comma before the close bracked
23378         in the attribute_section production.
23379
23380         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23381         address of the instance was being taken, I will take this out,
23382         because we take the address of the object immediately here.
23383
23384 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23385
23386         * typemanager.cs (AreMultipleAllowed): Take care of the most
23387         obvious case where attribute type is not in the current assembly -
23388         stupid me ;-)
23389
23390 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23391
23392         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23393         definitions, instead of doing that afterwards.  
23394
23395         Also we use a nice little hack, depending on the constructor, we
23396         know if we are a "composed" name or a simple name.  Hence, we
23397         avoid the IndexOf test, and we avoid 
23398
23399         * codegen.cs: Add code to assist in a bug reporter to track down
23400         the source of a compiler crash. 
23401
23402 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23403
23404         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23405         types have been emitted for a given element and flag an error
23406         if something which does not have AllowMultiple set is used more
23407         than once.
23408
23409         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23410         attribute types and their corresponding AllowMultiple properties
23411
23412         (AreMultipleAllowed): Check the property for a given type.
23413
23414         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23415         property in the case we have a TypeContainer.
23416
23417         (Attributes.AddAttribute): Detect duplicates and just skip on
23418         adding them. This trivial fix catches a pretty gross error in our
23419         attribute emission - global attributes were being emitted twice!
23420
23421         Bugzilla bug #33187 is now fixed.
23422
23423 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23424
23425         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23426         instead of pp_and).
23427
23428         * expression.cs (Binary.ResolveOperator): I can only use the
23429         Concat (string, string, string) and Concat (string, string,
23430         string, string) if the child is actually a concatenation of
23431         strings. 
23432
23433 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23434
23435         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23436         context where we need a 2-character lookahead.
23437
23438         * pending.cs (PendingImplementation): Rework so we can keep track
23439         of interface types all the time, and flag those which were
23440         implemented by parents as optional.
23441
23442 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23443
23444         * expression.cs (Binary.ResolveOperator): Use
23445         String.Concat(string,string,string) or
23446         String.Concat(string,string,string,string) when possible. 
23447
23448         * typemanager: More helper methods.
23449
23450
23451 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23452
23453         * pending.cs: remove the bogus return from GetMissingInterfaces()
23454         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23455
23456 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23457
23458         * namespace.cs: avoid duplicated 'using xxx' being added to
23459         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23460         when we get more than one 'using' statement for the same namespace.
23461         Report a CS0105 warning for it.
23462
23463 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23464
23465         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23466         of calling getChar/putback, uses internal knowledge of it.    
23467
23468         (xtoken): Reorder tokenizer so most common patterns are checked
23469         first.  This reduces the compilation time in another 5% (from 8.11s
23470         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23471
23472         The parsing time is 22% of the compilation in mcs, and from that
23473         64% is spent on the tokenization process.  
23474
23475         I tried using a binary search for keywords, but this is slower
23476         than the hashtable.  Another option would be to do a couple of
23477         things:
23478
23479                 * Not use a StringBuilder, instead use an array of chars,
23480                   with a set value.  Notice that this way we could catch
23481                   the 645 error without having to do it *afterwards*.
23482
23483                 * We could write a hand-parser to avoid the hashtable
23484                   compares altogether.
23485
23486         The identifier consumption process takes 37% of the tokenization
23487         time.  Another 15% is spent on is_number.  56% of the time spent
23488         on is_number is spent on Int64.Parse:
23489
23490                 * We could probably choose based on the string length to
23491                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23492                   computations. 
23493
23494         Another 3% is spend on wrapping `xtoken' in the `token' function.
23495
23496         Handle 0xa0 as whitespace (#34752)
23497
23498 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23499
23500         * typemanager.cs (IsCLRType): New routine to tell whether a type
23501         is one of the builtin types.  
23502
23503         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23504         typecode in more places instead of doing pointer comparissions.
23505         We could leverage some knowledge about the way the typecodes are
23506         laid out.
23507
23508         New code to cache namespaces in assemblies, it is currently not
23509         invoked, to be used soon.
23510
23511         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23512
23513         * expression.cs (Binary.ResolveOperator): specially handle
23514         strings, and do not perform user-defined operator overloading for
23515         built-in types.
23516
23517 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23518
23519         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23520         internalcall as it is a pretty simple operation;  Avoid whenever
23521         possible to call Char.IsLetter.
23522
23523         (consume_identifier): Cut by half the number of
23524         hashtable calls by merging the is_keyword and GetKeyword behavior.
23525
23526         Do not short-circuit, because if we do, we
23527         report errors (ie, #if false && true would produce an invalid
23528         directive error);
23529
23530
23531 2002-11-24  Martin Baulig  <martin@ximian.com>
23532
23533         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23534         check constant ranges and report a CS0221.  Fixes #33186.
23535
23536 2002-11-24  Martin Baulig  <martin@ximian.com>
23537
23538         * cs-parser.jay: Make this work for uninitialized variable
23539         declarations in the `for' initializer.  Fixes #32416.
23540
23541 2002-11-24  Martin Baulig  <martin@ximian.com>
23542
23543         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23544         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23545
23546 2002-11-24  Martin Baulig  <martin@ximian.com>
23547
23548         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23549         argument; if true, we also check for user-defined conversions.
23550         This is only needed if both arguments are of a user-defined type.
23551         Fixes #30443, added test-175.cs.
23552         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23553
23554         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23555
23556 2002-11-24  Martin Baulig  <martin@ximian.com>
23557
23558         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23559         function to get the store opcode.
23560         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23561         only emit the Ldelema if the store opcode is Stobj.  You must run
23562         both test-34 and test-167 to test this.  Fixes #34529.
23563
23564 2002-11-23  Martin Baulig  <martin@ximian.com>
23565
23566         * ecore.cs (Expression.MemberLookup): Added additional
23567         `qualifier_type' argument which is used when we're being called
23568         from MemberAccess.DoResolve() and null if we're called from a
23569         SimpleName lookup.
23570         (Expression.MemberLookupFailed): New method to report errors; this
23571         does the CS1540 check and reports the correct error message.
23572
23573         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23574         argument for the CS1540 check and redone the way how we're dealing
23575         with private members.  See the comment in the source code for details.
23576         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23577         `closure_start_type' to `closure_qualifier_type' and check whether
23578         it's not null.  It was not this filter being broken, it was just
23579         being called with the wrong arguments.
23580
23581         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23582         and pass it the correct `qualifier_type'; this also does the error
23583         handling for us.
23584
23585 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23586
23587         * expression.cs (Invocation.EmitParams): If the we are dealing
23588         with a non-built-in value type, load its address as well.
23589
23590         (ArrayCreation): Use a a pretty constant instead
23591         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23592         static initializers.  
23593
23594         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23595         because they are not really value types, just glorified integers. 
23596
23597         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23598
23599         * ecore.cs: Remove redundant code for enumerations, make them use
23600         the same code path as everything else, fixes the casting issue
23601         with enumerations in Windows.Forms.
23602
23603         * attribute.cs: Do only cast to string if it is a string, the
23604         validation happens later.
23605
23606         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23607         people upgrade their corlibs.
23608
23609         * ecore.cs: Oops, enumerations were not following the entire code path
23610
23611 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23612
23613         * typemanager.cs (FilterWithClosure): Commented out the test for
23614         1540 in typemanager.cs, as it has problems when accessing
23615         protected methods from a parent class (see test-174.cs). 
23616
23617         * attribute.cs (Attribute.ValidateGuid): new method.
23618         (Attribute.Resolve): Use above.
23619
23620 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23621
23622         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23623
23624         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23625         handling for enumerations, as we only needed the TypeContainer
23626         functionality to begin with (this is required for the fix below to
23627         work for enums that reference constants in a container class for
23628         example). 
23629
23630         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23631
23632         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23633         a valid TypeBuilder to perform lookups on.o
23634
23635         * class.cs (InheritableMemberSignatureCompare): Use true in the
23636         call to GetGetMethod and GetSetMethod, because we are comparing
23637         the signature, and we need to get the methods *even* if they are
23638         private. 
23639
23640         (PropertyBase.CheckBase): ditto.
23641
23642         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23643         GotoCase.Resolve): Use Peel on EmpytCasts.
23644
23645         * ecore.cs (EmptyCast): drop child, add Peel method.
23646
23647 2002-11-17  Martin Baulig  <martin@ximian.com>
23648
23649         * ecore.cs (EmptyCast.Child): New public property.
23650
23651         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23652         label resolved to an EmptyCast.  Fixes #34162.
23653         (GotoCase.Resolve): Likewise.
23654         (Block.EmitMeta): Likewise.
23655
23656 2002-11-17  Martin Baulig  <martin@ximian.com>
23657
23658         * expression.cs (Invocation.BetterConversion): Prefer int over
23659         uint; short over ushort; long over ulong for integer literals.
23660         Use ImplicitConversionExists instead of StandardConversionExists
23661         since we also need to check for user-defined implicit conversions.
23662         Fixes #34165.  Added test-173.cs.
23663
23664 2002-11-16  Martin Baulig  <martin@ximian.com>
23665
23666         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23667         with the `true' and `false' literals.  Fixes #33151.
23668
23669 2002-11-16  Martin Baulig  <martin@ximian.com>
23670
23671         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23672         October 22nd; don't do the cs1540 check for static members.
23673
23674         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23675         now using our own filter here and doing the cs1540 check again.
23676
23677 2002-11-16  Martin Baulig  <martin@ximian.com>
23678
23679         * support.cs (InternalParameters): Don't crash if we don't have
23680         any fixed parameters.  Fixes #33532.
23681
23682 2002-11-16  Martin Baulig  <martin@ximian.com>
23683
23684         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23685         when looking up static methods to make this work on Windows.
23686         Fixes #33773.
23687
23688 2002-11-16  Martin Baulig  <martin@ximian.com>
23689
23690         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23691         a setter rather than using PropertyInfo.CanWrite.
23692
23693 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23694
23695         * class.cs: Allow acces to block member by subclasses. Fixes build
23696         breaker.
23697
23698 2002-11-14  Martin Baulig  <martin@ximian.com>
23699
23700         * class.cs (Constructor.Emit): Added the extern/block check.
23701         Fixes bug #33678.
23702
23703 2002-11-14  Martin Baulig  <martin@ximian.com>
23704
23705         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23706         iteration while looking for indexers, this is needed because the
23707         indexer may have a different name in our base classes.  Fixed the
23708         error reporting (no indexers at all, not get accessor, no
23709         overloaded match).  Fixes bug #33089.
23710         (IndexerAccess.DoResolveLValue): Likewise.
23711
23712 2002-11-14  Martin Baulig  <martin@ximian.com>
23713
23714         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23715         indexers.  Fixes the first part of bug #33089.
23716         (MethodSignature.InheritableMemberSignatureCompare): Added support
23717         for properties.
23718
23719 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23720
23721         * attribute.cs (Attribute.Resolve): Catch the
23722         NullReferenceException and report it since it isn't supposed to
23723         happen. 
23724
23725 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23726
23727         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23728         LogicalOr and LogicalAnd that can benefit from recursively
23729         handling EmitBranchable.  The code now should be nice for Paolo.
23730
23731 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23732
23733         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23734         the Type lookups, as we perform quite a number of lookups on
23735         non-Types.  This can be removed once we can deterministically tell
23736         whether we have a type or a namespace in advance.
23737
23738         But this might require special hacks from our corlib.
23739
23740         * TODO: updated.
23741
23742         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23743         and double which avoids a conversion from an integer to a double.
23744
23745         * expression.cs: tiny optimization, avoid calling IsConstant,
23746         because it effectively performs the lookup twice.
23747
23748 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23749
23750         But a bogus return here to keep the semantics of the old code
23751         until the Mono runtime is fixed.
23752
23753         * pending.cs (GetMissingInterfaces): New method used to remove all
23754         the interfaces that are already implemented by our parent
23755         classes from the list of pending methods. 
23756
23757         * interface.cs: Add checks for calls after ResolveTypeExpr.
23758
23759 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23760
23761         * class.cs (Class.Emit): Report warning 67: event not used if the
23762         warning level is beyond 3.
23763
23764         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23765         being a NullLiteral.
23766
23767         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23768         specifiers. 
23769
23770         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23771         path that might fail if a type can not be resolved.
23772
23773         * expression.cs (Binary.Emit): Emit unsigned versions of the
23774         operators. 
23775
23776         * driver.cs: use error 5.
23777
23778 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23779
23780         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23781
23782 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23783
23784         * cs-parser.jay (switch_section): A beautiful patch from Martin
23785         Baulig that fixed 33094.
23786
23787 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23788
23789         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23790         Check whether the base is abstract and report an error if so.
23791
23792         * expression.cs (IndexerAccess.DoResolveLValue,
23793         IndexerAccess.DoResolve): ditto. 
23794
23795         (Invocation.DoResolve): ditto.
23796
23797         (Invocation.FullMethodDesc): Improve the report string.
23798
23799         * statement.cs (Block): Eliminate IsVariableDefined as it is
23800         basically just a wrapper for GetVariableInfo.
23801
23802         * ecore.cs (SimpleName): Use new 
23803
23804         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23805         type, as we return the actual parameter ref/unref state on a
23806         different call.
23807
23808 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23809
23810         * support.cs: Return proper flags REF/OUT fixing the previous
23811         commit.  
23812
23813         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23814         not used to mean `ref' but `ref or out' in ParameterReference
23815
23816         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23817         full type signature instead of calling TypeManger.CSharpName
23818         ourselves. 
23819
23820         * support.cs (InternalParameters.ParameterDesc): Do not compare
23821         directly to the modflags, because REF/OUT will actually be bitsets
23822         if set. 
23823
23824         * delegate.cs (VerifyMethod): Check also the modifiers.
23825
23826         * cs-tokenizer.cs: Fix bug where floating point values with an
23827         exponent where a sign was missing was ignored.
23828
23829         * driver.cs: Allow multiple assemblies to be specified in a single
23830         /r: argument
23831
23832 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23833
23834         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23835         because identifiers after a parenthesis would end up in this kind
23836         of production, and we needed to desamiguate it for having casts
23837         like:
23838
23839                 (UserDefinedType *) xxx
23840
23841 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23842
23843         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23844         we should set on the Bindingflags.NonPublic, but not turn on
23845         private_ok.  private_ok controls whether a Private member is
23846         returned (this is chekced on the filter routine), while the
23847         BindingFlags.NonPublic just controls whether private/protected
23848         will be allowed.   This fixes the problem part of the problem of
23849         private properties being allowed to be used in derived classes.
23850
23851         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23852         so we can call the children DoResolveLValue method (this will
23853         properly signal errors on lvalue assignments to base properties)
23854
23855         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23856         getter are null, and we have a property info, we know that this
23857         happened because the lookup failed, so we report an error 122 for
23858         protection level violation.
23859
23860         We also silently return if setter and getter are null in the
23861         resolve functions, this condition only happens if we have flagged
23862         the error before.  This is the other half of the problem. 
23863
23864         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23865         not have accessibility information, that is why we were returning
23866         true in the filter function in typemanager.cs.
23867
23868         To properly report 122 (property is inaccessible because of its
23869         protection level) correctly, we report this error in ResolveAccess
23870         by failing if both the setter and the getter are lacking (ie, the
23871         lookup failed). 
23872
23873         DoResolve and DoLResolve have been modified to check for both
23874         setter/getter being null and returning silently, the reason being
23875         that I did not want to put the knowledge about this error in upper
23876         layers, like:
23877
23878         int old = Report.Errors;
23879         x = new PropertyExpr (...);
23880         if (old != Report.Errors)
23881                 return null;
23882         else
23883                 return x;
23884
23885         So the property expr is returned, but it is invalid, so the error
23886         will be flagged during the resolve process. 
23887
23888         * class.cs: Remove InheritablePropertySignatureCompare from the
23889         class, as we no longer depend on the property signature to compute
23890         whether it is possible to implement a method or not.
23891
23892         The reason is that calling PropertyInfo.GetGetMethod will return
23893         null (in .NET, in Mono it works, and we should change this), in
23894         cases where the Get Method does not exist in that particular
23895         class.
23896
23897         So this code:
23898
23899         class X { public virtual int A { get { return 1; } } }
23900         class Y : X { }
23901         class Z : Y { public override int A { get { return 2; } } }
23902
23903         Would fail in Z because the parent (Y) would not have the property
23904         defined.  So we avoid this completely now (because the alternative
23905         fix was ugly and slow), and we now depend exclusively on the
23906         method names.
23907
23908         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23909         reference method, instead of using the property.
23910
23911         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23912         routines are gone now.
23913
23914         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23915         names, they were incorrectly named.
23916
23917         * cs-tokenizer.cs: Return are more gentle token on failure. 
23918
23919         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23920         had an out-of-sync index variable, which caused it to remove from
23921         the list of pending methods the wrong method sometimes.
23922
23923 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23924
23925         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23926         CanWrite, because those refer to this particular instance of the
23927         property, and do not take into account the fact that we can
23928         override single members of a property.
23929
23930         Constructor requires an EmitContext.  The resolution process does
23931         not happen here, but we need to compute the accessors before,
23932         because the resolution does not always happen for properties.
23933
23934         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23935         subclass, before we did not update this flag, but we did update
23936         bindingflags. 
23937
23938         (GetAccessors): Drop this routine, as it did not work in the
23939         presence of partially overwritten set/get methods. 
23940
23941         Notice that this broke the cs1540 detection, but that will require
23942         more thinking. 
23943
23944 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23945
23946         * class.cs:
23947         * codegen.cs:
23948         * driver.cs: issue a warning instead of an error if we don't support
23949         debugging for the platform. Also ignore a couple of errors that may
23950         arise when trying to write the symbols. Undo my previous patch.
23951
23952 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23953
23954         * driver.cs: ignore /debug switch except for Unix platforms.
23955
23956 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23957
23958         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23959
23960 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23961
23962         * driver.cs: Do not make mcs-debug conditional, so we do not break
23963         builds that use it.
23964
23965         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23966         review this patch.  But basically after all the children variables
23967         have been merged, the value of "Breaks" was not being set to
23968         new_breaks for Switch blocks.  I think that it should be set after
23969         it has executed.  Currently I set this to the value of new_breaks,
23970         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23971         conservative, but I do not understand this code very well.
23972
23973         I did not break anything in the build, so that is good ;-)
23974
23975         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23976
23977 2002-10-20  Mark Crichton  <crichton@gimp.org>
23978
23979         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23980
23981 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23982
23983         * cfold.cs: Fixed compile blocker.
23984
23985 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23986
23987         * driver.cs: I was chekcing the key, not the file.
23988
23989 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23990
23991         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23992         message that we were generating - we just need to silently return
23993         a null.
23994
23995 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23996
23997         * class.cs (Event.Define): Change my previous commit, as this
23998         breaks the debugger.  This is a temporary hack, as it seems like
23999         the compiler is generating events incorrectly to begin with.
24000
24001         * expression.cs (Binary.ResolveOperator): Added support for 
24002         "U operator - (E x, E y)"
24003
24004         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
24005         y)".
24006
24007         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
24008         init-only variables, but this path did not take into account that
24009         there might be also instance readonly variables.  Correct this
24010         problem. 
24011
24012         This fixes bug 32253
24013
24014         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
24015         delegates as well.
24016
24017         * driver.cs: Change the extension for modules to `netmodule'
24018
24019         * cs-parser.jay: Improved slightly the location tracking for
24020         the debugger symbols.
24021
24022         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
24023         modifiers that were specified instead of the hardcoded value
24024         (FamAndAssem).  This was basically ignoring the static modifier,
24025         and others.  Fixes 32429.
24026
24027         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
24028         fixed a bug in the process (32476)
24029
24030         * expression.cs (ArrayAccess.EmitAssign): Patch from
24031         hwang_rob@yahoo.ca that fixes bug 31834.3
24032
24033 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
24034
24035         * driver.cs: Make the module extension .netmodule.
24036
24037 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
24038
24039         * driver.cs: Report an error if the resource file is not found
24040         instead of crashing.
24041
24042         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
24043         false, like Emit does.
24044
24045 2002-10-16  Nick Drochak  <ndrochak@gol.com>
24046
24047         * typemanager.cs: Remove unused private member.  Also reported mcs
24048         bug to report this as a warning like csc.
24049
24050 2002-10-15  Martin Baulig  <martin@gnome.org>
24051
24052         * statement.cs (Statement.Emit): Made this a virtual method; emits
24053         the line number info and calls DoEmit().
24054         (Statement.DoEmit): New protected abstract method, formerly knows
24055         as Statement.Emit().
24056
24057         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
24058
24059 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
24060
24061         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
24062         have fixed a remaining problem: not every AddXXXX was adding a
24063         fully qualified name.  
24064
24065         Now everyone registers a fully qualified name in the DeclSpace as
24066         being defined instead of the partial name.  
24067
24068         Downsides: we are slower than we need to be due to the excess
24069         copies and the names being registered this way.  
24070
24071         The reason for this is that we currently depend (on the corlib
24072         bootstrap for instance) that types are fully qualified, because
24073         we dump all the types in the namespace, and we should really have
24074         types inserted into the proper namespace, so we can only store the
24075         basenames in the defined_names array.
24076
24077 2002-10-10  Martin Baulig  <martin@gnome.org>
24078
24079         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
24080         from bug #31834, see the bug report for a testcase which is
24081         miscompiled.
24082
24083 2002-10-10  Martin Baulig  <martin@gnome.org>
24084
24085         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
24086         flow analysis code for this.
24087
24088         * statement.cs (Do, While, For): Tell the flow analysis code about
24089         infinite loops.
24090         (FlowBranching.UsageVector): Added support for infinite loops.
24091         (Block.Resolve): Moved the dead code elimination here and use flow
24092         analysis to do it.
24093
24094 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
24095
24096         * class.cs (Field.Define): Catch cycles on struct type
24097         definitions. 
24098
24099         * typemanager.cs (IsUnmanagedtype): Do not recursively check
24100         fields if the fields are static.  We only need to check instance
24101         fields. 
24102
24103         * expression.cs (As.DoResolve): Test for reference type.
24104
24105         * statement.cs (Using.ResolveExpression): Use
24106         ConvertImplicitRequired, not ConvertImplicit which reports an
24107         error on failture
24108         (Using.ResolveLocalVariableDecls): ditto.
24109
24110         * expression.cs (Binary.ResolveOperator): Report errors in a few
24111         places where we had to.
24112
24113         * typemanager.cs (IsUnmanagedtype): Finish implementation.
24114
24115 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
24116
24117         * expression.cs: Use StoreFromPtr instead of extracting the type
24118         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
24119
24120         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
24121         an enumeration value to a System.Enum, but System.Enum is not a
24122         value type, but an class type, so we need to box.
24123
24124         (Expression.ConvertExplicit): One codepath could return
24125         errors but not flag them.  Fix this.  Fixes #31853
24126
24127         * parameter.cs (Resolve): Do not allow void as a parameter type.
24128
24129 2002-10-06  Martin Baulig  <martin@gnome.org>
24130
24131         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
24132         if it's a class type and not a struct.  Fixes #31815.
24133
24134 2002-10-06  Martin Baulig  <martin@gnome.org>
24135
24136         * statement.cs: Reworked the flow analysis code a bit to make it
24137         usable for dead code elimination.
24138
24139 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24140
24141         * cs-parser.jay: allow empty source files. Fixes bug #31781.
24142
24143 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24144
24145         * expression.cs (ComposedCast.DoResolveType): A quick workaround
24146         to fix the test 165, will investigate deeper.
24147
24148 2002-10-04  Martin Baulig  <martin@gnome.org>
24149
24150         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
24151         finally blocks actually work.
24152         (Try.Resolve): We don't need to create a sibling for `finally' if
24153         there is no finally block.
24154
24155 2002-10-04  Martin Baulig  <martin@gnome.org>
24156
24157         * class.cs (Constructor.Define): The default accessibility for a
24158         non-default constructor is private, not public.
24159
24160 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24161
24162         * class.cs (Constructor): Make AllowedModifiers public, add
24163         EXTERN.
24164
24165         * cs-parser.jay: Perform the modifiers test here, as the
24166         constructor for the Constructor class usually receives a zero
24167         because of the way we create it (first we create, later we
24168         customize, and we were never checking the modifiers).
24169
24170         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
24171         is a version of LookupTypeReflection that includes the type-name
24172         cache.  This can be used as a fast path for functions that know
24173         the fully qualified name and are only calling into *.GetType() to
24174         obtain a composed type.
24175
24176         This is also used by TypeManager.LookupType during its type
24177         composition.
24178
24179         (LookupType): We now also track the real type name, as sometimes
24180         we can get a quey for the real type name from things like
24181         ComposedCast.  This fixes bug 31422.
24182
24183         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
24184         complete type fullname, it does not have to go through the type
24185         resolution system to obtain the composed version of the type (for
24186         obtaining arrays or pointers).
24187
24188         (Conditional.Emit): Use the EmitBoolExpression to
24189         generate nicer code, as requested by Paolo.
24190
24191         (ArrayCreation.CheckIndices): Use the patch from
24192         hwang_rob@yahoo.ca to validate the array initializers. 
24193
24194 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
24195
24196         * class.cs (ConstructorInitializer.Emit): simplify code by using
24197         Invocation.EmitCall, and at the same time, fix the bugs in calling
24198         parent constructors that took variable arguments. 
24199
24200         * ecore.cs (Expression.ConvertNumericExplicit,
24201         Expression.ImplicitNumericConversion): Remove the code that
24202         manually wrapped decimal (InternalTypeConstructor call is now gone
24203         as well).
24204
24205         * expression.cs (Cast.TryReduce): Also handle decimal types when
24206         trying to perform a constant fold on the type.
24207
24208         * typemanager.cs (IsUnmanagedtype): Partially implemented.
24209
24210         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
24211         that only turned off an error report, and did nothing else. 
24212
24213 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
24214
24215         * driver.cs: Handle and ignore /fullpaths
24216
24217 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
24218
24219         * expression.cs (Binary.ResolveOperator): Catch the case where
24220         DoNumericPromotions returns true, 
24221
24222         (Binary.DoNumericPromotions): Simplify the code, and the tests.
24223
24224 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
24225
24226         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
24227         report error 70.
24228
24229 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24230
24231         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24232         conversion exists, but it is also required that the conversion be
24233         performed.  This manifested in "(Type64Enum) 2".  
24234
24235         * class.cs (TypeManager.AddMethod): The fix is not to change
24236         AddEnum, because that one was using a fully qualified name (every
24237         DeclSpace derivative does), but to change the AddMethod routine
24238         that was using an un-namespaced name.  This now correctly reports
24239         the duplicated name.
24240
24241         Revert patch until I can properly fix it.  The issue
24242         is that we have a shared Type space across all namespaces
24243         currently, which is wrong.
24244
24245         Options include making the Namespace a DeclSpace, and merge
24246         current_namespace/current_container in the parser.
24247
24248 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24249
24250         * cs-parser.jay: Improve error reporting when we get a different
24251         kind of expression in local_variable_type and
24252         local_variable_pointer_type. 
24253
24254         Propagate this to avoid missleading errors being reported.
24255
24256         * ecore.cs (ImplicitReferenceConversion): treat
24257         TypeManager.value_type as a target just like object_type.   As
24258         code like this:
24259
24260         ValueType v = 1;
24261
24262         Is valid, and needs to result in the int 1 being boxed before it
24263         is assigned to the value type v.
24264
24265         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24266         to validate the enumeration name.
24267
24268         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24269         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24270         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24271
24272         * ecore.cs (TryImplicitIntConversion): When doing an
24273         implicit-enumeration-conversion, check if the type is 64-bits and
24274         perform a conversion before passing to EnumConstant.
24275
24276 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24277
24278         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24279         report ambiguous type references.  Unlike the MS version, we
24280         report what the ambiguity is.   Innovation at work ;-)
24281
24282         (DeclSpace.FindType): Require a location argument to
24283         display when we display an ambiguous error.
24284
24285         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24286
24287         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24288
24289         * expression.cs (EmitDynamicInitializers): Apply patch from
24290         hwang_rob@yahoo.ca that fixes the order in which we emit our
24291         initializers. 
24292
24293 2002-09-21  Martin Baulig  <martin@gnome.org>
24294
24295         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24296         delegate takes no arguments.
24297
24298 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24299
24300         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24301         from integers.
24302
24303         * expression.cs: Extract the underlying type.
24304
24305         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24306
24307         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24308
24309 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24310
24311         * class.cs (TypeContainer.DefineType): We can not use the nice
24312         PackingSize with the size set to 1 DefineType method, because it
24313         will not allow us to define the interfaces that the struct
24314         implements.
24315
24316         This completes the fixing of bug 27287
24317
24318         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24319         means also structs.  This fixes part of the problem. 
24320         (Expresion.ImplicitReferenceConversionExists): ditto.
24321
24322         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24323         error if there were no errors reported during the type lookup
24324         process, to avoid duplicates or redundant errors.  Without this
24325         you would get an ambiguous errors plus a type not found.  We have
24326         beaten the user enough with the first error.  
24327
24328         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24329         reference. 
24330
24331         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24332         during the resolution process, stop the lookup, this avoids
24333         repeated error reports (same error twice).
24334
24335         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24336
24337         * typemanager.cs (LookupType): Redo the type lookup code to match
24338         the needs of System.Reflection.  
24339
24340         The issue is that System.Reflection requires references to nested
24341         types to begin with a "+" sign instead of a dot.  So toplevel
24342         types look like: "NameSpace.TopLevelClass", and nested ones look
24343         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24344         levels. 
24345
24346 2002-09-19  Martin Baulig  <martin@gnome.org>
24347
24348         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24349         says that a method always returns or always throws an exception,
24350         don't report the CS0161.
24351
24352         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24353         set `Returns = new_returns'.
24354
24355 2002-09-19  Martin Baulig  <martin@gnome.org>
24356
24357         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24358         to an enum constant, check for a CS0176.
24359
24360 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24361
24362         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24363         for operators that must be in pairs and report errors.
24364
24365         * ecore.cs (SimpleName.DoResolveType): During the initial type
24366         resolution process, when we define types recursively, we must
24367         check first for types in our current scope before we perform
24368         lookups in the enclosing scopes.
24369
24370         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24371
24372         (Invocation.VerifyArgumentsCompat): Call
24373         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24374         I thought we were supposed to always call this, but there are a
24375         few places in the code where we dont do it.
24376
24377 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24378
24379         * driver.cs: Add support in -linkres and -resource to specify the
24380         name of the identifier.
24381
24382 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24383
24384         * ecore.cs (StandardConversionExists): Sync with the conversion
24385         code: allow anything-* to void* conversions.
24386
24387         (FindMostSpecificSource): Use an Expression argument
24388         instead of a Type, because we might be handed over a Literal which
24389         gets a few more implicit conversions that plain types do not.  So
24390         this information was being lost.
24391
24392         Also, we drop the temporary type-holder expression when not
24393         required.
24394
24395 2002-09-17  Martin Baulig  <martin@gnome.org>
24396
24397         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24398         this is an explicit interface implementation.
24399
24400 2002-09-17  Martin Baulig  <martin@gnome.org>
24401
24402         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24403         different `IndexerName' attributes.
24404
24405         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24406         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24407         virtual CommonResolve().
24408
24409 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24410
24411         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24412         and convert that to the UnderlyingType.
24413
24414         * statement.cs (Foreach.Resolve): Indexers are just like variables
24415         or PropertyAccesses.
24416
24417         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24418         inside quoted strings, we were not doing this before.
24419
24420 2002-09-16  Martin Baulig  <martin@gnome.org>
24421
24422         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24423         resolve it.  This is needed for the definite assignment check of the
24424         instance expression, fixes bug #29846.
24425         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24426
24427 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24428
24429         * parameter.cs: Fix compile error.  Cannot reference static member
24430         from an instance object.  Is this an mcs bug?
24431
24432 2002-09-14  Martin Baulig  <martin@gnome.org>
24433
24434         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24435         multiple times.  Fixes bug #30295, added test-166.cs.
24436
24437 2002-09-14  Martin Baulig  <martin@gnome.org>
24438
24439         * statement.cs (Block.Emit): Don't emit unreachable code.
24440         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24441         `break' statements.
24442         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24443
24444 2002-09-14  Martin Baulig  <martin@gnome.org>
24445
24446         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24447         is set.
24448
24449 2002-09-14  Martin Baulig  <martin@gnome.org>
24450
24451         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24452         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24453         be false on the ms runtime.
24454
24455 2002-09-13  Martin Baulig  <martin@gnome.org>
24456
24457         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24458         the CS0038 error message.
24459
24460 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24461
24462         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24463         constant inside, return it.
24464
24465 2002-09-12  Martin Baulig  <martin@gnome.org>
24466
24467         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24468         implicit conversion can be done between enum types.
24469
24470         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24471         check whether an implicit conversion to the current enum's UnderlyingType
24472         exists and report an error if not.
24473
24474         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24475         without debugging support.
24476
24477         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24478         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24479
24480 2002-09-12  Martin Baulig  <martin@gnome.org>
24481
24482         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24483
24484         * ecore.cs (IMemberExpr.DeclaringType): New property.
24485         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24486         nonstatic member of an outer type (CS0038).
24487
24488 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24489
24490         * driver.cs: Activate the using-error detector at warning level
24491         4 (at least for MS-compatible APIs).
24492
24493         * namespace.cs (VerifyUsing): Small buglett fix.
24494
24495         * pending.cs (PendingImplementation): pass the container pointer. 
24496
24497         * interface.cs (GetMethods): Allow for recursive definition.  Long
24498         term, I would like to move every type to support recursive
24499         definitions, not the current ordering mechanism that we have right
24500         now.
24501
24502         The situation is this: Attributes are handled before interfaces,
24503         so we can apply attributes to interfaces.  But some attributes
24504         implement interfaces, we will now handle the simple cases
24505         (recursive definitions will just get an error).  
24506
24507         * parameter.cs: Only invalidate types at the end if we fail to
24508         lookup all types.  
24509
24510 2002-09-09  Martin Baulig  <martin@gnome.org>
24511
24512         * ecore.cs (PropertyExpr.Emit): Also check for
24513         TypeManager.system_int_array_get_length so this'll also work when
24514         compiling corlib.  Fixes #30003.
24515
24516 2002-09-09  Martin Baulig  <martin@gnome.org>
24517
24518         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24519         and throw an exception if we can't get the type's size.  Fixed #30040,
24520         added test-165.cs.
24521
24522 2002-09-09  Martin Baulig  <martin@gnome.org>
24523
24524         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24525
24526         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24527         context.  Fixes bug #30027.
24528
24529         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24530         virtual functions.  Fixes bug #30043, added test-164.cs.
24531
24532 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24533
24534         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24535
24536 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24537
24538         * driver.cs: Use an object to get the windows codepage since it's not a
24539         static property.
24540
24541 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24542
24543         * statement.cs (For.Emit): for infinite loops (test == null)
24544         return whether there is a break inside, not always "true".
24545
24546         * namespace.cs (UsingEntry): New struct to hold the name of the
24547         using definition, the location where it is defined, and whether it
24548         has been used in a successful type lookup.
24549
24550         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24551         strings.
24552
24553         * decl.cs: ditto.
24554
24555 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24556
24557         * attribute.cs : Fix incorrect code which relied on catching
24558         a NullReferenceException to detect a null being passed in
24559         where an object was expected.
24560
24561 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24562
24563         * statement.cs (Try): flag the catch variable as assigned
24564
24565         * expression.cs (Cast): Simplified by using ResolveType instead of
24566         manually resolving.
24567
24568         * statement.cs (Catch): Fix bug by using ResolveType.
24569
24570 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24571
24572         * expression.cs (BetterConversion): Special case for when we have
24573         a NullLiteral as the argument and we have to choose between string
24574         and object types - we choose string the way csc does.
24575
24576         * attribute.cs (Attribute.Resolve): Catch the
24577         NullReferenceException and report error #182 since the Mono
24578         runtime no more has the bug and having this exception raised means
24579         we tried to select a constructor which takes an object and is
24580         passed a null.
24581
24582 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24583
24584         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24585         message (1502, 1503) when we can't locate a method after overload
24586         resolution. This is much more informative and closes the bug
24587         Miguel reported.
24588
24589         * interface.cs (PopulateMethod): Return if there are no argument
24590         types. Fixes a NullReferenceException bug.
24591
24592         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24593         expressions too. Previously we were checking only in one place for
24594         positional arguments leaving out named arguments.
24595
24596         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24597         type to the enum type is not allowed. Remove code corresponding to
24598         that.
24599
24600         (ConvertNumericExplicit): Allow explicit conversions from
24601         the underlying type to enum type. This precisely follows the spec
24602         and closes a bug filed by Gonzalo.
24603
24604 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24605
24606         * compiler.csproj:
24607         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24608
24609 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24610
24611         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24612         it was important that we stored the right value after the
24613         reduction in `converted'.
24614
24615 2002-09-04  Martin Baulig  <martin@gnome.org>
24616
24617         * location.cs (Location.SymbolDocument): Use full pathnames for the
24618         source files.
24619
24620 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24621
24622         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24623         of the expression resolve mechanism, because that will catch the
24624         SimpleName error failures.
24625
24626         (Conditional): If we can not resolve the
24627         expression, return, do not crash.
24628
24629 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24630
24631         * cs-tokenizer.cs:
24632         (location): display token name instead of its number.
24633
24634 2002-08-28  Martin Baulig  <martin@gnome.org>
24635
24636         * expression.cs (Binary.ResolveOperator): Don't silently return
24637         but return an error if an operator cannot be applied between two
24638         enum types.
24639
24640 2002-08-28  Martin Baulig  <martin@gnome.org>
24641
24642         * class.cs (Constructor.Define): Set the permission attributes
24643         correctly instead of making all constructors public.
24644
24645 2002-08-28  Martin Baulig  <martin@gnome.org>
24646
24647         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24648         for private members before reporting a CS0103; if we find anything,
24649         it's a CS0122.
24650
24651 2002-08-28  Martin Baulig  <martin@gnome.org>
24652
24653         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24654         to check whether `closure_start_type == closure_invocation_type',
24655         we also need to check whether `m.DeclaringType == closure_invocation_type'
24656         before bypassing the permission checks.  We might be accessing
24657         protected/private members from the base class.
24658         (TypeManager.RealMemberLookup): Only set private_ok if private
24659         members were requested via BindingFlags.NonPublic.
24660
24661         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24662
24663         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24664         MethodGroupExpr.IsExplicitImpl if appropriate.
24665         (Invocation.DoResolve): Don't report the CS0120 for explicit
24666         interface implementations.
24667
24668 2002-08-27  Martin Baulig  <martin@gnome.org>
24669
24670         * expression.cs (Invocation.DoResolve): If this is a static
24671         method and we don't have an InstanceExpression, we must report
24672         a CS0120.
24673
24674 2002-08-25  Martin Baulig  <martin@gnome.org>
24675
24676         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24677         `==' between a valuetype and an object.
24678
24679 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24680
24681         * ecore.cs (TypeExpr): Provide a ToString method.
24682
24683 2002-08-24  Martin Baulig  <martin@gnome.org>
24684
24685         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24686         now called proggie.dbg and it's a binary file.
24687
24688 2002-08-23  Martin Baulig  <martin@gnome.org>
24689
24690         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24691
24692 2002-08-23  Martin Baulig  <martin@gnome.org>
24693
24694         * struct.cs (MyStructInfo.ctor): Make this work with empty
24695         structs; it's not allowed to use foreach() on null.
24696
24697 2002-08-23  Martin Baulig  <martin@gnome.org>
24698
24699         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24700         writer the full pathname of the generated assembly.
24701
24702 2002-08-23  Martin Baulig  <martin@gnome.org>
24703
24704         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24705         A `finally' block never returns or breaks; improved handling of
24706         unreachable code.
24707
24708 2002-08-23  Martin Baulig  <martin@gnome.org>
24709
24710         * statement.cs (Throw.Resolve): Allow `throw null'.
24711
24712 2002-08-23  Martin Baulig  <martin@gnome.org>
24713
24714         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24715         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24716         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24717         MemberLookup would return a wrong event if this is an explicit
24718         interface implementation and the class has an event with the same
24719         name.
24720
24721 2002-08-23  Martin Baulig  <martin@gnome.org>
24722
24723         * statement.cs (Block.AddChildVariableNames): New public method.
24724         (Block.AddChildVariableName): Likewise.
24725         (Block.IsVariableNameUsedInChildBlock): Likewise.
24726         (Block.AddVariable): Check whether a variable name has already
24727         been used in a child block.
24728
24729         * cs-parser.jay (declare_local_variables): Mark all variable names
24730         from the current block as being used in a child block in the
24731         implicit block.
24732
24733 2002-08-23  Martin Baulig  <martin@gnome.org>
24734
24735         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24736         find the symbol writer.
24737
24738         * driver.cs: csc also allows the arguments to /define being
24739         separated by commas, not only by semicolons.
24740
24741 2002-08-23  Martin Baulig  <martin@gnome.org>
24742
24743         * interface.cs (Interface.GetMembers): Added static check for events.
24744
24745 2002-08-15  Martin Baulig  <martin@gnome.org>
24746
24747         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24748         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24749
24750         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24751         why the MethodData.EmitDestructor() change was necessary.
24752
24753 2002-08-20  Martin Baulig  <martin@gnome.org>
24754
24755         * class.cs (TypeContainer.FindMembers): Added static check for events.
24756
24757         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24758
24759         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24760         use Type.GetEvents(), not Type.FindMembers().
24761
24762 2002-08-20  Martin Baulig  <martin@gnome.org>
24763
24764         * decl.cs (MemberCache): Added a special method cache which will
24765         be used for method-only searched.  This ensures that a method
24766         search will return a MethodInfo with the correct ReflectedType for
24767         inherited methods.      
24768
24769 2002-08-20  Martin Baulig  <martin@gnome.org>
24770
24771         * decl.cs (DeclSpace.FindMembers): Made this public.
24772
24773 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24774
24775         * delegate.cs: fixed build on windows.
24776         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24777
24778 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24779
24780         * ecore.cs (StandardConversionExists): Return a false
24781         if we are trying to convert the void type to anything else
24782         since that is not allowed.
24783
24784         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24785         we flag error 70 in the event an event is trying to be accessed
24786         directly from outside the declaring type.
24787
24788 2002-08-20  Martin Baulig  <martin@gnome.org>
24789
24790         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24791         MemberCache from typemanager.cs to decl.cs.
24792
24793 2002-08-19  Martin Baulig  <martin@gnome.org>
24794
24795         * class.cs (TypeContainer): Implement IMemberContainer.
24796         (TypeContainer.DefineMembers): Create the MemberCache.
24797         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24798         return public members if BindingFlags.Public was given, check
24799         whether members are static.
24800
24801 2002-08-16  Martin Baulig  <martin@gnome.org>
24802
24803         * decl.cs (DeclSpace.Define): Splitted this in Define and
24804         DefineMembers.  DefineMembers is called first and initializes the
24805         MemberCache.
24806
24807         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24808         DefineMembers() on all our DeclSpaces.
24809
24810         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24811         but call DefineMembers() on all nested interfaces.  We call their
24812         Define() in our new Define() function.
24813
24814         * interface.cs (Interface): Implement IMemberContainer.
24815         (Interface.Define): Moved all code except the attribute stuf to
24816         DefineMembers().
24817         (Interface.DefineMembers): Initialize the member cache.
24818
24819         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24820         need this anymore since we can use MemberCache.FindMembers directly.
24821
24822 2002-08-19  Martin Baulig  <martin@gnome.org>
24823
24824         * typemanager.cs (MemberCache): When creating the cache for an
24825         interface type, add all inherited members.
24826         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24827         to `out bool used_cache' and documented it.
24828         (TypeManager.MemberLookup): If we already used the cache in the first
24829         iteration, we don't need to do the interfaces check.
24830
24831 2002-08-19  Martin Baulig  <martin@gnome.org>
24832
24833         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24834         here from IMemberFinder and don't implement this interface anymore.
24835         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24836
24837         * typemanager.cs (IMemberFinder): This interface is now only used by
24838         classes which actually support the member cache.
24839         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24840         since we only put DeclSpaces into this Hashtable.
24841         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24842         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24843
24844 2002-08-16  Martin Baulig  <martin@gnome.org>
24845
24846         * typemanager.cs (ICachingMemberFinder): Removed.
24847         (IMemberFinder.MemberCache): New property.
24848         (TypeManager.FindMembers): Merged this with RealFindMembers().
24849         This function will never be called from TypeManager.MemberLookup()
24850         so we can't use the cache here, just the IMemberFinder.
24851         (TypeManager.MemberLookup_FindMembers): Check whether the
24852         IMemberFinder has a MemberCache and call the cache's FindMembers
24853         function.
24854         (MemberCache): Rewrote larger parts of this yet another time and
24855         cleaned it up a bit.
24856
24857 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24858
24859         * driver.cs (LoadArgs): Support quoting.
24860
24861         (Usage): Show the CSC-like command line arguments.
24862
24863         Improved a few error messages.
24864
24865 2002-08-15  Martin Baulig  <martin@gnome.org>
24866
24867         * typemanager.cs (IMemberContainer.Type): New property.
24868         (IMemberContainer.IsInterface): New property.
24869
24870         The following changes are conditional to BROKEN_RUNTIME, which is
24871         defined at the top of the file.
24872
24873         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24874         class'es members, but add all members from TypeHandle.ObjectType
24875         if we're an interface.
24876         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24877         is the current type.
24878         (MemberCache.CacheEntry.Container): Removed this field.
24879         (TypeHandle.GetMembers): Include inherited members.
24880
24881 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24882
24883         * typemanager.cs: fixed compilation and added a comment on a field that
24884         is never used.
24885
24886 2002-08-15  Martin Baulig  <martin@gnome.org>
24887
24888         * class.cs (ConstructorInitializer.Resolve): In the
24889         Expression.MemberLookup call, use the queried_type as
24890         invocation_type.
24891
24892         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24893         declared' attribute, it's always true.
24894         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24895         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24896         temporary wrapper for FindMembers which tells MemberLookup whether
24897         members from the base classes are included in the return value.
24898         This will go away soon.
24899         (TypeManager.MemberLookup): Use this temporary hack here; once the
24900         new MemberCache is completed, we don't need to do the DeclaredOnly
24901         looping here anymore since the MemberCache will take care of this.
24902         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24903         (MemberCache): When creating the MemberCache for a class, get
24904         members from the current class and all its base classes.
24905         (MemberCache.CacheEntry.Container): New field.  This is a
24906         temporary hack until the Mono runtime is fixed to distinguish
24907         between ReflectedType and DeclaringType.  It allows us to use MCS
24908         with both the MS runtime and the unfixed Mono runtime without
24909         problems and without accecting performance.
24910         (MemberCache.SearchMembers): The DeclaredOnly looping from
24911         TypeManager.MemberLookup is now done here.      
24912
24913 2002-08-14  Martin Baulig  <martin@gnome.org>
24914
24915         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24916         Type.GetFields on dynamic types but get the fields from the
24917         corresponding TypeContainer.
24918         (MyStructInfo.GetStructInfo): Added check for enum types.
24919
24920         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24921         (MemberList.SyncRoot): Implemented.
24922         (TypeManager.FilterWithClosure): No need to check permissions if
24923         closure_start_type == closure_invocation_type, don't crash if
24924         closure_invocation_type is null.
24925
24926 2002-08-13  Martin Baulig  <martin@gnome.org>
24927
24928         Rewrote TypeContainer.FindMembers to use a member cache.  This
24929         gives us a speed increase of about 35% for the self-hosting MCS
24930         build and of about 15-20% for the class libs (both on GNU/Linux).
24931
24932         * report.cs (Timer): New class to get enhanced profiling.  This
24933         whole class is "TIMER" conditional since it remarkably slows down
24934         compilation speed.
24935
24936         * class.cs (MemberList): New class.  This is an IList wrapper
24937         which we're now using instead of passing MemberInfo[]'s around to
24938         avoid copying this array unnecessarily.
24939         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24940         (ICachingMemberFinder, IMemberContainer): New interface.
24941         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24942         has already been checked, otherwise use it for the name comparision.
24943         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24944         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24945         if possible.  Returns a MemberList, not a MemberInfo [].
24946         (TypeHandle): New class, implements IMemberContainer.  We create
24947         one instance of this class per type, it contains a MemberCache
24948         which is used to do the member lookups.
24949         (MemberCache): New class.  Each instance of this class contains
24950         all members of a type and a name-based hash table.
24951         (MemberCache.FindMembers): This is our new member lookup
24952         function.  First, it looks up all members of the requested name in
24953         the hash table.  Then, it walks this list and sorts out all
24954         applicable members and returns them.
24955
24956 2002-08-13  Martin Baulig  <martin@gnome.org>
24957
24958         In addition to a nice code cleanup, this gives us a performance
24959         increase of about 1.4% on GNU/Linux - not much, but it's already
24960         half a second for the self-hosting MCS compilation.
24961
24962         * typemanager.cs (IMemberFinder): New interface.  It is used by
24963         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24964         Enum, Delegate or Interface.
24965         (TypeManager.finder_to_member_finder): New PtrHashtable.
24966         (TypeManager.finder_to_container): Removed.
24967         (TypeManager.finder_to_delegate): Removed.
24968         (TypeManager.finder_to_interface): Removed.
24969         (TypeManager.finder_to_enum): Removed.
24970
24971         * interface.cs (Interface): Implement IMemberFinder.
24972
24973         * delegate.cs (Delegate): Implement IMemberFinder.
24974
24975         * enum.cs (Enum): Implement IMemberFinder.
24976
24977         * class.cs (TypeContainer): Implement IMemberFinder.
24978
24979 2002-08-12  Martin Baulig  <martin@gnome.org>
24980
24981         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24982
24983 2002-08-12  Martin Baulig  <martin@gnome.org>
24984
24985         * ecore.cs (ITypeExpression): New interface for expressions which
24986         resolve to a type.
24987         (TypeExpression): Renamed to TypeLookupExpression.
24988         (Expression.DoResolve): If we're doing a types-only lookup, the
24989         expression must implement the ITypeExpression interface and we
24990         call DoResolveType() on it.
24991         (SimpleName): Implement the new ITypeExpression interface.
24992         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24993         hack, the situation that we're only looking up types can't happen
24994         anymore when this method is called.  Moved the type lookup code to
24995         DoResolveType() and call it.
24996         (SimpleName.DoResolveType): This ITypeExpression interface method
24997         is now doing the types-only lookup.
24998         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24999         (ResolveFlags): Added MaskExprClass.
25000
25001         * expression.cs (MemberAccess): Implement the ITypeExpression
25002         interface.
25003         (MemberAccess.DoResolve): Added support for a types-only lookup
25004         when we're called via ITypeExpression.DoResolveType().
25005         (ComposedCast): Implement the ITypeExpression interface.
25006
25007         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
25008         Expression.Resolve() with ResolveFlags.Type instead.
25009
25010 2002-08-12  Martin Baulig  <martin@gnome.org>
25011
25012         * interface.cs (Interface.Define): Apply attributes.
25013
25014         * attribute.cs (Attribute.ApplyAttributes): Added support for
25015         interface attributes.
25016
25017 2002-08-11  Martin Baulig  <martin@gnome.org>
25018
25019         * statement.cs (Block.Emit): Only check the "this" variable if we
25020         do not always throw an exception.
25021
25022         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
25023         whether the property has a set accessor.
25024
25025 2002-08-11  Martin Baulig  <martin@gnome.org>
25026
25027         Added control flow analysis support for structs.
25028
25029         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
25030         with control flow analysis turned off.
25031         (IVariable): New interface.
25032         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
25033         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
25034         (FieldExpr.DoResolve): Resolve the instance expression with flow
25035         analysis turned off and do the definite assignment check after the
25036         resolving when we know what the expression will resolve to.
25037
25038         * expression.cs (LocalVariableReference, ParameterReference):
25039         Implement the new IVariable interface, only call the flow analysis
25040         code if ec.DoFlowAnalysis is true.
25041         (This): Added constructor which takes a Block argument.  Implement
25042         the new IVariable interface.
25043         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
25044         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
25045         This does the definite assignment checks for struct members.
25046
25047         * class.cs (Constructor.Emit): If this is a non-static `struct'
25048         constructor which doesn't have any initializer, call
25049         Block.AddThisVariable() to tell the flow analysis code that all
25050         struct elements must be initialized before control returns from
25051         the constructor.
25052
25053         * statement.cs (MyStructInfo): New public class.
25054         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
25055         argument to this indexer.  If non-zero, check an individual struct
25056         member, not the whole struct.
25057         (FlowBranching.CheckOutParameters): Check struct members.
25058         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
25059         overloaded versions of these methods which take an additional
25060         `int field_idx' argument to check struct members.
25061         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
25062         overloaded versions of these methods which take an additional
25063         `string field_name' argument to check struct member.s
25064         (VariableInfo): Implement the IVariable interface.
25065         (VariableInfo.StructInfo): New public property.  Returns the
25066         MyStructInfo instance of the variable if it's a struct or null.
25067         (Block.AddThisVariable): New public method.  This is called from
25068         Constructor.Emit() for non-static `struct' constructor which do
25069         not have any initializer.  It creates a special variable for the
25070         "this" instance variable which will be checked by the flow
25071         analysis code to ensure that all of the struct's fields are
25072         initialized before control returns from the constructor.
25073         (UsageVector): Added support for struct members.  If a
25074         variable/parameter is a struct with N members, we reserve a slot
25075         in the usage vector for each member.  A struct is considered fully
25076         initialized if either the struct itself (slot 0) or all its
25077         members are initialized.
25078
25079 2002-08-08  Martin Baulig  <martin@gnome.org>
25080
25081         * driver.cs (Driver.MainDriver): Only report an error CS5001
25082         if there were no compilation errors.
25083
25084         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
25085         `UnsafeContext' property to determine whether the parent is in
25086         unsafe context rather than checking the parent's ModFlags:
25087         classes nested in an unsafe class are unsafe as well.
25088
25089 2002-08-08  Martin Baulig  <martin@gnome.org>
25090
25091         * statement.cs (UsageVector.MergeChildren): Distinguish between
25092         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
25093         we return.  Added test17() and test18() to test-154.cs.
25094
25095 2002-08-08  Martin Baulig  <martin@gnome.org>
25096
25097         * typemanager.cs (TypeManager.FilterWithClosure): If we have
25098         Family access, make sure the invoking type isn't a subclass of the
25099         queried type (that'd be a CS1540).
25100
25101         * ecore.cs (Expression.MemberLookup): Added overloaded version of
25102         this method which takes an additional `Type invocation_type'.
25103
25104         * expression.cs (BaseAccess.DoResolve): Use the base type as
25105         invocation and query type.
25106         (MemberAccess.DoResolve): If the lookup failed and we're about to
25107         report a CS0122, try a lookup with the ec.ContainerType - if this
25108         succeeds, we must report a CS1540.
25109
25110 2002-08-08  Martin Baulig  <martin@gnome.org>
25111
25112         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
25113         (MethodGroupExpr): Implement the IMemberExpr interface.
25114
25115         * expression (MemberAccess.ResolveMemberAccess): No need to have
25116         any special code for MethodGroupExprs anymore, they're now
25117         IMemberExprs.   
25118
25119 2002-08-08  Martin Baulig  <martin@gnome.org>
25120
25121         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
25122         Family, FamANDAssem and FamORAssem permissions.
25123         (TypeManager.IsSubclassOrNestedChildOf): New public method.
25124
25125 2002-08-08  Martin Baulig  <martin@gnome.org>
25126
25127         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
25128         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
25129         or loop block.
25130
25131 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
25132
25133         * driver.cs: implemented /resource option to embed managed resources.
25134
25135 2002-08-07  Martin Baulig  <martin@gnome.org>
25136
25137         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
25138         (FieldBase.HasFieldInitializer): New public property.
25139         (FieldBase.GetInitializerExpression): New public method.  Resolves and
25140         returns the field initializer and makes sure it is only resolved once.
25141         (TypeContainer.EmitFieldInitializers): Call
25142         FieldBase.GetInitializerExpression to get the initializer, this ensures
25143         that it isn't resolved multiple times.
25144
25145         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
25146         the resolving process (SimpleName/MemberLookup) that we're currently
25147         emitting a field initializer (which must not access any instance members,
25148         this is an error CS0236).
25149
25150         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
25151         argument, if the `IsFieldInitializer' flag is set, we must report and
25152         error CS0236 and not an error CS0120.   
25153
25154 2002-08-07  Martin Baulig  <martin@gnome.org>
25155
25156         * ecore.cs (IMemberExpr): New public interface.
25157         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
25158         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
25159         if the expression is an IMemberExpr.
25160
25161         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
25162         to be null, implicitly default to `this' if we're non-static in
25163         this case.  Simplified the code a lot by using the new IMemberExpr
25164         interface.  Also fixed bug #28176 here.
25165
25166 2002-08-06  Martin Baulig  <martin@gnome.org>
25167
25168         * cs-parser.jay (SimpleLookup): Removed.  We need to create
25169         ParameterReferences during semantic analysis so that we can do a
25170         type-only search when resolving Cast, TypeOf and SizeOf.
25171         (block): Pass the `current_local_parameters' to the Block's
25172         constructor.
25173
25174         * class.cs (ConstructorInitializer): Added `Parameters parameters'
25175         argument to the constructor.
25176         (ConstructorInitializer.Resolve): Create a temporary implicit
25177         block with the parameters.
25178
25179         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
25180         references here if we aren't doing a type-only search.
25181
25182         * statement.cs (Block): Added constructor which takes a
25183         `Parameters parameters' argument.
25184         (Block.Parameters): New public property.
25185
25186         * support.cs (InternalParameters.Parameters): Renamed `parameters'
25187         to `Parameters' and made it public readonly.
25188
25189 2002-08-06  Martin Baulig  <martin@gnome.org>
25190
25191         * ecore.cs (Expression.Warning): Made this public as well.
25192
25193         * report.cs (Report.Debug): Print the contents of collections.
25194
25195 2002-08-06  Martin Baulig  <martin@gnome.org>
25196
25197         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
25198         used to tell Resolve() which kinds of expressions it may return.
25199         (Expression.Resolve): Added overloaded version of this method which
25200         takes a `ResolveFlags flags' argument.  This can be used to tell
25201         Resolve() which kinds of expressions it may return.  Reports a
25202         CS0118 on error.
25203         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
25204         ResolveFlags.SimpleName.
25205         (Expression.Error118): Added overloaded version of this method which
25206         takes a `ResolveFlags flags' argument.  It uses the flags to determine
25207         which kinds of expressions are allowed.
25208
25209         * expression.cs (Argument.ResolveMethodGroup): New public method.
25210         Resolves an argument, but allows a MethodGroup to be returned.
25211         This is used when invoking a delegate.
25212
25213         * TODO: Updated a bit.
25214
25215 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25216
25217         Fixed compilation with csc.
25218
25219         * ecore.cs: Expression.Error made public. Is this correct? Should
25220         Warning be made public too?
25221
25222         * expression.cs: use ea.Location instead of ea.loc.
25223         [FIXME:  Filed as bug #28607: MCS must report these errors.]
25224
25225 2002-08-06  Martin Baulig  <martin@gnome.org>
25226
25227         * ecore.cs (Expression.loc): Moved the location here instead of
25228         duplicating it in all derived classes.
25229         (Expression.Location): New public property.
25230         (Expression.Error, Expression.Warning): Made them non-static and
25231         removed the location argument.
25232         (Expression.Warning): Added overloaded version which takes an
25233         `int level' argument.
25234         (Expression.Error118): Make this non-static and removed the
25235         expression and location arguments.
25236         (TypeExpr): Added location argument to the constructor.
25237
25238         * expression.cs (StaticCallExpr): Added location argument to
25239         the constructor.
25240         (Indirection, PointerArithmetic): Likewise.
25241         (CheckedExpr, UnCheckedExpr): Likewise.
25242         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25243         (StringPtr): Likewise.
25244
25245
25246 2002-08-05  Martin Baulig  <martin@gnome.org>
25247
25248         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25249
25250         * assign.cs (Assign.DoResolve): Check whether the source
25251         expression is a value or variable.
25252
25253         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25254         while resolving the corresponding blocks.
25255
25256         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25257         an error, don't silently return null.
25258
25259         * statement.cs (Block.AddVariable): Do the error reporting here
25260         and distinguish between CS0128 and CS0136.
25261         (Block.DoResolve): Report all unused labels (warning CS0164).
25262         (LabeledStatement): Pass the location to the constructor.
25263         (LabeledStatement.HasBeenReferenced): New property.
25264         (LabeledStatement.Resolve): Set it to true here.
25265
25266         * statement.cs (Return.Emit): Return success even after reporting
25267         a type mismatch error (CS0126 or CS0127), this is what csc does and
25268         it avoids confusing the users with any consecutive errors.
25269
25270 2002-08-05  Martin Baulig  <martin@gnome.org>
25271
25272         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25273
25274         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25275
25276         * expression.cs (MemberAccess.DoResolve): Silently return if an
25277         error has already been reported.
25278
25279         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25280         error has already been reported.
25281
25282 2002-08-05  Martin Baulig  <martin@gnome.org>
25283
25284         * statement.cs (UsageVector): Only initialize the `parameters'
25285         vector if we actually have any "out" parameters.
25286
25287 2002-08-05  Martin Baulig  <martin@gnome.org>
25288
25289         * expression.cs (Binary.ResolveOperator): When combining delegates,
25290         they must have the same type.
25291
25292 2002-08-05  Martin Baulig  <martin@gnome.org>
25293
25294         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25295         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25296         work with the ms runtime and we also don't need it: if we're a
25297         PropertyBuilder and not in the `indexer_arguments' hash, then we
25298         are a property and not an indexer.
25299
25300         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25301         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25302         since the latter one doesn't work with the ms runtime.
25303
25304 2002-08-03  Martin Baulig  <martin@gnome.org>
25305
25306         Fixed bugs #27998 and #22735.
25307
25308         * class.cs (Method.IsOperator): New public field.
25309         (Method.CheckBase): Report CS0111 if there's already a method
25310         with the same parameters in the current class.  Report CS0508 when
25311         attempting to change the return type of an inherited method.
25312         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25313         and it's not marked abstract or extern.
25314         (PropertyBase): New abstract base class for Property and Indexer.
25315         (PropertyBase.CheckBase): Moved here from Property and made it work
25316         for indexers.
25317         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25318         the same so we can reuse it there.
25319         (Property, Indexer): Derive from PropertyBase.
25320         (MethodSignature.inheritable_property_signature_filter): New delegate
25321         to find properties and indexers.
25322
25323         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25324         argument and improved error reporting.
25325
25326         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25327         EmptyReadOnlyParameters and made it a property.
25328
25329         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25330         version of this method which takes a `PropertyInfo indexer'.
25331         (TypeManager.RegisterIndexer): New method.
25332
25333         * class.cs: Added myself as author of this file :-)
25334
25335 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25336
25337         * class.cs: fixed compilation on windoze.
25338
25339 2002-08-03  Martin Baulig  <martin@gnome.org>
25340
25341         * interface.cs (Interface.GetInterfaceBases): Check whether all
25342         base interfaces are at least as accessible than the current one.
25343
25344         * class.cs (TypeContainer.GetClassBases): Check whether base types
25345         are at least as accessible than the current type.
25346         (TypeContainer.AsAccessible): Implemented and made non-static.
25347         (MemberBase.CheckParameters): Report errors if the accessibility
25348         checks fail.
25349
25350         * delegate.cs (Delegate.Delegate): The default visibility is
25351         internal for top-level types and private for nested types.
25352         (Delegate.Define): Report errors if the accessibility checks fail.
25353
25354         * enum.cs (Enum.Enum): The default visibility is internal for
25355         top-level types and private for nested types.
25356         (Enum.DefineType): Compute the correct visibility.
25357
25358         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25359         function which takes a `bool is_toplevel' instead of a TypeContainer.
25360
25361         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25362         builtin type.
25363
25364 2002-08-02  Martin Baulig  <martin@gnome.org>
25365
25366         * expression.cs (LocalVariableReferenc): Added constructor which
25367         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25368         (LocalVariableReference.IsReadOnly): New property.
25369         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25370         variable is readonly, use our own readonly flag to do this; you can
25371         use the new constructor to get a writable reference to a read-only
25372         variable.
25373
25374         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25375         reference to the local variable.
25376
25377 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25378
25379         * rootcontext.cs (ResolveCore): Also include System.Exception
25380
25381         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25382         we reach an EmptyStatement.
25383
25384         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25385         is also fine.
25386
25387         * expression.cs (Binary.ResolveOperator): Check error result in
25388         two places.
25389
25390         use brtrue/brfalse directly and avoid compares to null.
25391
25392 2002-08-02  Martin Baulig  <martin@gnome.org>
25393
25394         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25395         Fixes bug #28407, added test-155.cs.
25396
25397 2002-08-01  Martin Baulig  <martin@gnome.org>
25398
25399         * class.cs (Event.EmitDefaultMethod): Make this work with static
25400         events.  Fixes #28311, added verify-3.cs.
25401
25402 2002-08-01  Martin Baulig  <martin@gnome.org>
25403
25404         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25405         `is_disposable' fields.
25406         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25407         `hm.is_disposable' if we're using the collection pattern.
25408         (Foreach.EmitCollectionForeach): Use the correct type for the
25409         enumerator's local variable, only emit the try/finally block if
25410         necessary (fixes #27713).
25411
25412 2002-08-01  Martin Baulig  <martin@gnome.org>
25413
25414         * ecore.cs (Expression.report118): Renamed to Error118 and made
25415         it public static.
25416
25417         * statement.cs (Throw.Resolve): Check whether the expression is of
25418         the correct type (CS0118) and whether the type derives from
25419         System.Exception (CS0155).
25420         (Catch.Resolve): New method.  Do the type lookup here and check
25421         whether it derives from System.Exception (CS0155).
25422         (Catch.CatchType, Catch.IsGeneral): New public properties.
25423
25424         * typemanager.cs (TypeManager.exception_type): Added.
25425
25426 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25427
25428         * driver.cs: Updated About function.
25429
25430 2002-07-31  Martin Baulig  <martin@gnome.org>
25431
25432         Implemented Control Flow Analysis.
25433
25434         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25435         (EmitContext.CurrentBranching): Added.
25436         (EmitContext.StartFlowBranching): Added.
25437         (EmitContext.EndFlowBranching): Added.
25438         (EmitContext.KillFlowBranching): Added.
25439         (EmitContext.IsVariableAssigned): Added.
25440         (EmitContext.SetVariableAssigned): Added.
25441         (EmitContext.IsParameterAssigned): Added.
25442         (EmitContext.SetParameterAssigned): Added.
25443         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25444         Added control flow analysis stuff here.
25445
25446         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25447         resolve the expression as lvalue.
25448         (LocalVariableReference.DoResolve): Check whether the variable has
25449         already been assigned.
25450         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25451         the parameter as assigned here.
25452         (ParameterReference.DoResolve): Check whether the parameter has already
25453         been assigned.
25454         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25455         expression as lvalue.
25456
25457         * statement.cs (FlowBranching): New class for the flow analysis code.
25458         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25459         (LabeledStatement.IsDefined): New public property.
25460         (LabeledStatement.AddUsageVector): New public method to tell flow
25461         analyis that the label may be reached via a forward jump.
25462         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25463         flow analysis.
25464         (VariableInfo.Number): New public field.  This is used by flow analysis
25465         to number all locals of a block.
25466         (Block.CountVariables): New public property.  This is the number of
25467         local variables in this block (including the locals from all parent
25468         blocks).
25469         (Block.EmitMeta): Number all the variables.
25470
25471         * statement.cs: Added flow analysis support to all classes.
25472
25473 2002-07-31  Martin Baulig  <martin@gnome.org>
25474
25475         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25476         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25477         then use this argument.
25478
25479         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25480
25481         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25482         use this to specify /define options.
25483
25484 2002-07-29  Martin Baulig  <martin@gnome.org>
25485
25486         * statement.cs (Fixed): Moved all code that does variable lookups
25487         and resolvings from Emit to Resolve.
25488
25489         * statement.cs (For): Moved all code that does variable lookups
25490         and resolvings from Emit to Resolve.
25491
25492         * statement.cs (Using): Moved all code that does variable lookups
25493         and resolvings from Emit to Resolve.
25494
25495 2002-07-29  Martin Baulig  <martin@gnome.org>
25496
25497         * attribute.cs (Attribute.Resolve): Explicitly catch a
25498         System.NullReferenceException when creating the
25499         CustromAttributeBuilder and report a different warning message.
25500
25501 2002-07-29  Martin Baulig  <martin@gnome.org>
25502
25503         * support.cs (ParameterData.ParameterName): Added method to
25504         get the name of a parameter.
25505
25506         * typemanager.cs (TypeManager.IsValueType): New public method.
25507
25508 2002-07-29  Martin Baulig  <martin@gnome.org>
25509
25510         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25511         is a flag which specifies that it's either ref or out.
25512         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25513         the out parameter to `out Parameter.Modifier mod', also set the
25514         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25515
25516         * support.cs (InternalParameters.ParameterModifier): Distinguish
25517         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25518         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25519
25520         * expression.cs (Argument.GetParameterModifier): Distinguish
25521         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25522         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25523
25524 2002-07-29  Martin Baulig  <martin@gnome.org>
25525
25526         * expression.cs (ParameterReference.ParameterReference): Added
25527         `Location loc' argument to the constructor.
25528
25529         * cs-parser.jay: Pass location to ParameterReference.
25530
25531 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25532
25533         * statement.cs (Try): Initialize the location.
25534
25535         * cs-parser.jay: pass location to Try.
25536
25537         * expression.cs (Unary.Reduce): Change the prototype to return
25538         whether a constant fold could be performed or not.  The result is
25539         returned in an out parameters.  In the case of Indirection and
25540         AddressOf, we want to perform the full tests.
25541
25542 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25543
25544         * statement.cs (Statement.Emit): Flag dead code.
25545
25546 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25547
25548         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25549
25550 2002-07-27  Martin Baulig  <martin@gnome.org>
25551
25552         * class.cs (MethodData.Define): Put back call to
25553         TypeManager.AddMethod(), accidentally commented this out.
25554
25555         * report.cs (Debug): New public method to print debugging information,
25556         this is `[Conditional ("DEBUG")]'.
25557
25558 2002-07-26  Martin Baulig  <martin@gnome.org>
25559
25560         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25561         (switch_statement): Push the current_block to the switch_stack and
25562         pop it again when we're done with the switch.
25563         (switch_section): The new block is a child of the current_block.
25564         Fixes bug #24007, added test-152.cs.
25565
25566 2002-07-27  Martin Baulig  <martin@gnome.org>
25567
25568         * expression.cs (Invocation.EmitArguments): When calling a varargs
25569         function with only its fixed arguments, we need to pass an empty
25570         array.
25571
25572 2002-07-27  Martin Baulig  <martin@gnome.org>
25573
25574         Mono 0.13 has been released.
25575
25576 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25577
25578         * driver.cs: Rename --resource to --linkres, because that is what
25579         we do currently, we dont support --resource yet.
25580
25581         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25582
25583 2002-07-25  Martin Baulig  <martin@gnome.org>
25584
25585         * class.cs (MethodData): New public class.  This is a `method builder'
25586         class for a method or one accessor of a Property/Indexer/Event.
25587         (MethodData.GetMethodFlags): Moved here from MemberBase.
25588         (MethodData.ApplyAttributes): Likewise.
25589         (MethodData.ApplyObsoleteAttribute): Likewise.
25590         (MethodData.ApplyConditionalAttribute): Likewise.
25591         (MethodData.ApplyDllImportAttribute): Likewise.
25592         (MethodData.CheckAbstractAndExternal): Likewise.
25593         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25594         (MethodData.Emit): Formerly known as Method.Emit().
25595         (MemberBase): Moved everything which was specific to a single
25596         accessor/method to MethodData.
25597         (Method): Create a new MethodData and call Define() and Emit() on it.
25598         (Property, Indexer, Event): Create a new MethodData objects for each
25599         accessor and call Define() and Emit() on them.
25600
25601 2002-07-25  Martin Baulig  <martin@gnome.org>
25602
25603         Made MethodCore derive from MemberBase to reuse the code from there.
25604         MemberBase now also checks for attributes.
25605
25606         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25607         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25608         as virtual.
25609         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25610         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25611         (MemberBase.ApplyAttributes): New virtual method; applies the
25612         attributes to a method or accessor.
25613         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25614         (MemberBase.ApplyConditionalAttribute): Likewise.
25615         (MemberBase.ApplyDllImportAttribute): Likewise.
25616         (MemberBase.CheckAbstractAndExternal): Likewise.
25617         (MethodCore.ParameterTypes): This is now a property instead of a
25618         method, it's initialized from DoDefineParameters().
25619         (MethodCore.ParameterInfo): Removed the set accessor.
25620         (MethodCore.DoDefineParameters): New protected virtual method to
25621         initialize ParameterTypes and ParameterInfo.
25622         (Method.GetReturnType): We can now simply return the MemberType.
25623         (Method.GetMethodFlags): Override the MemberBase version and add
25624         the conditional flags.
25625         (Method.CheckBase): Moved some code from Define() here, call
25626         DoDefineParameters() here.
25627         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25628         here to avoid some larger code duplication.
25629         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25630         ensure that abstract and external accessors don't declare a body.
25631
25632         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25633         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25634         lookup in the attribute's parent classes, so we need to abort as soon
25635         as we found the first match.
25636         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25637         the attribute has no arguments.
25638
25639         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25640         of a Method.
25641
25642 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25643
25644         * cs-parser.jay: reverted previous patch.
25645
25646 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25647
25648         * cs-parser.jay: fixed bug #22119.
25649
25650 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25651
25652         * attribute.cs: fixed compilation. The error was:
25653         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25654         be assigned to before control leaves the current method."
25655         [FIXME:  Filed as bug #28186: MCS must report this error.]
25656
25657 2002-07-25  Martin Baulig  <martin@gnome.org>
25658
25659         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25660         method to pull the condition name ouf of a Conditional attribute.
25661         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25662         the obsolete message and error flag out of an Obsolete attribute.
25663
25664         * class.cs (Method.GetMethodFlags): New public method to get the
25665         TypeManager.MethodFlags for this method.
25666         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25667         private methods.
25668         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25669         if we're overriding a virtual function, set the new private variable
25670         `parent_method'; call the new TypeManager.AddMethod().
25671
25672         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25673         the MethodBuilder and the Method in a PtrHashtable.
25674         (TypeManager.builder_to_method): Added for this purpose.
25675         (TypeManager.MethodFlags): Added IsObsoleteError.
25676         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25677         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25678         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25679         the message from the attribute.
25680
25681 2002-07-24  Martin Baulig  <martin@gnome.org>
25682
25683         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25684         preprocessor directives, ensure that the argument to #define/#undef is
25685         exactly one identifier and that it's actually an identifier.
25686
25687         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25688         did not work ....
25689
25690 2002-07-24  Martin Baulig  <martin@gnome.org>
25691
25692         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25693         initialize it to TypeManager.object_type in the constructor.
25694         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25695         of the `hm.get_current' method if we're using the collection pattern.
25696         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25697         for the explicit conversion to make it work when we're using the collection
25698         pattern and the `Current' property has a different return type than `object'.
25699         Fixes #27713.
25700
25701 2002-07-24  Martin Baulig  <martin@gnome.org>
25702
25703         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25704         does not match, but don't report any errors.  This method is called in
25705         order for all methods in a MethodGroupExpr until a matching method is
25706         found, so we don't want to bail out if the first method doesn't match.
25707         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25708         matches, report the 123.  Fixes #28070.
25709
25710 2002-07-24  Martin Baulig  <martin@gnome.org>
25711
25712         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25713         TypeManager.TypeToCoreType() to the top of the method so the
25714         following equality checks will work.  Fixes #28107.
25715
25716 2002-07-24  Martin Baulig  <martin@gnome.org>
25717
25718         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25719         operand is of type uint, and the other operand is of type sbyte,
25720         short or int, the operands are converted to type long." -
25721         Actually do what this comment already told us.  Fixes bug #28106,
25722         added test-150.cs.
25723
25724 2002-07-24  Martin Baulig  <martin@gnome.org>
25725
25726         * class.cs (MethodBase): New abstract class.  This is now a base
25727         class for Property, Indexer and Event to avoid some code duplication
25728         in their Define() and DefineMethods() methods.
25729         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25730         generic methods for Define() and DefineMethods().
25731         (FieldBase): Derive from MemberBase, not MemberCore.
25732         (Property): Derive from MemberBase, not MemberCore.
25733         (Property.DefineMethod): Moved all the code from this method to the
25734         new MethodBase.DefineAccessor(), just call it with appropriate
25735         argumetnts.
25736         (Property.Define): Call the new Property.DoDefine(), this does some
25737         sanity checks and we don't need to duplicate the code everywhere.
25738         (Event): Derive from MemberBase, not MemberCore.
25739         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25740         accessors, this will also make them work with interface events.
25741         (Indexer): Derive from MemberBase, not MemberCore.
25742         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25743         (Indexer.Define): Use the new MethodBase functions.
25744
25745         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25746         argument to the constructor.
25747         (Interface.FindMembers): Added support for interface events.
25748         (Interface.PopluateEvent): Implemented.
25749
25750         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25751
25752 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25753
25754         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25755         but this is required to check for a method name being the same as
25756         the containing class.  
25757
25758         Handle this now.
25759
25760 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25761
25762         * interface.cs: initialize variable.
25763
25764 2002-07-23  Martin Baulig  <martin@gnome.org>
25765
25766         Implemented the IndexerName attribute in interfaces.
25767
25768         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25769         name if this is an explicit interface implementation.
25770         (Indexer.InterfaceIndexerName): New public variable.  If we're
25771         implementing an interface indexer, this is the IndexerName in that
25772         interface.  Otherwise, it's the IndexerName.
25773         (Indexer.DefineMethod): If we're implementing interface indexer,
25774         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25775         and Pending.ImplementIndexer methods.
25776         (Indexer.Define): Also define the PropertyBuilder if we're
25777         implementing an interface indexer and this is neither an explicit
25778         interface implementation nor do the IndexerName match the one in
25779         the interface.
25780
25781         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25782         If a method is defined here, then we always need to create a proxy
25783         for it.  This is used when implementing interface indexers.
25784         (Pending.IsInterfaceIndexer): New public method.
25785         (Pending.ImplementIndexer): New public method.
25786         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25787         This is used when implementing interface indexers to define a proxy
25788         if necessary.
25789         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25790         define a proxy if necessary.
25791
25792         * interface.cs (Interface.IndexerName): New public variable.
25793         (Interface.PopulateIndexer): Set the IndexerName.
25794         (Interface.DefineIndexers): New private method.  Populate all the
25795         indexers and make sure their IndexerNames match.
25796
25797         * typemanager.cs (IndexerPropertyName): Added support for interface
25798         indexers.
25799
25800 2002-07-22  Martin Baulig  <martin@gnome.org>
25801
25802         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25803         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25804         ret if HasReturnLabel.
25805         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25806         variables.
25807
25808         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25809         and set the ec.LoopBeginTryCatchLevel.
25810         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25811         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25812         the current ec.TryCatchLevel, the branch goes out of an exception
25813         block.  In this case, we need to use Leave and not Br.
25814
25815 2002-07-22  Martin Baulig  <martin@gnome.org>
25816
25817         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25818         block unless the block does not always return or it is contained in
25819         another try { ... } catch { ... } block.  Fixes bug #26506.
25820         Added verify-1.cs to the test suite.
25821
25822 2002-07-22  Martin Baulig  <martin@gnome.org>
25823
25824         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25825         then we do not always return.  Fixes bug #24985.
25826
25827 2002-07-22  Martin Baulig  <martin@gnome.org>
25828
25829         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25830         lookup on a per-class level; ie. walk up the class hierarchy until we
25831         found at least one applicable method, then choose the best among them.
25832         Fixes bug #24463 and test-29.cs.
25833
25834 2002-07-22  Martin Baulig  <martin@gnome.org>
25835
25836         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25837         return types of the methods.  The return type is not part of the
25838         signature and we must not check it to make the `new' modifier work.
25839         Fixes bug #27999, also added test-147.cs.
25840         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25841
25842         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25843         on the method's return type.
25844
25845 2002-07-21  Martin Baulig  <martin@gnome.org>
25846
25847         * assign.cs: Make this work if the rightmost source is a constant and
25848         we need to do an implicit type conversion.  Also adding a few more tests
25849         to test-38.cs which should have caught this.
25850
25851         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25852         target in the makefile for this.  The makefile.gnu is primarily intended
25853         for end-users who don't want to debug the compiler.
25854
25855 2002-07-21  Martin Baulig  <martin@gnome.org>
25856
25857         * assign.cs: Improved the Assign class so it can now handle embedded
25858         assignments (X = Y = Z = something).  As a side-effect this'll now also
25859         consume less local variables.  test-38.cs now passes with MCS, added
25860         a few new test cases to that test.
25861
25862 2002-07-20  Martin Baulig  <martin@gnome.org>
25863
25864         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25865         instructions.  Fixes bug #27977, also added test-146.cs.
25866
25867 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25868
25869         * cs-tokenizer.cs: fixed getHex ().
25870
25871 2002-07-19  Martin Baulig  <martin@gnome.org>
25872
25873         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25874         not Type.GetType() to lookup the array type.  This is needed when
25875         we're constructing an array of a user-defined type.
25876         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25877         single-dimensional arrays, but also for single-dimensial arrays of
25878         type decimal.
25879
25880 2002-07-19  Martin Baulig  <martin@gnome.org>
25881
25882         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25883         this function is called, it's not allowed to share LocalBuilders
25884         among ILGenerators.
25885
25886 2002-07-19  Martin Baulig  <martin@gnome.org>
25887
25888         * expression.cs (Argument.Resolve): Report an error 118 when trying
25889         to pass a type as argument.
25890
25891 2002-07-18  Martin Baulig  <martin@gnome.org>
25892
25893         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25894         Conv_R_Un for the signed `long' type.
25895
25896 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25897
25898         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25899         `expr' for the temporary result, as that will fail if we do
25900         multiple resolves on the same expression.
25901
25902 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25903
25904         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25905         ec.TypeContainer for looking up aliases. 
25906
25907         * class.cs (TypeContainer): Remove LookupAlias from here.
25908
25909         * decl.cs (DeclSpace); Move here.
25910
25911 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25912
25913         * class.cs (FindMembers): Only call filter if the constructor
25914         bulider is not null.
25915
25916         Also handle delegates in `NestedTypes' now.  Now we will perform
25917         type lookups using the standard resolution process.  This also
25918         fixes a bug.
25919
25920         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25921         This uses Expressions (the limited kind that can be parsed by the
25922         tree) instead of strings.
25923
25924         * expression.cs (ComposedCast.ToString): Implement, used to flag
25925         errors since now we have to render expressions.
25926
25927         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25928         FormArrayType. 
25929
25930         * ecore.cs (SimpleName.ToString): ditto.
25931
25932         * cs-parser.jay: Instead of using strings to assemble types, use
25933         Expressions to assemble the type (using SimpleName, ComposedCast,
25934         MemberAccess).  This should fix the type lookups in declarations,
25935         because we were using a different code path for this.
25936
25937         * statement.cs (Block.Resolve): Continue processing statements
25938         even when there is an error.
25939
25940 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25941
25942         * class.cs (Event.Define): Also remove the `remove' method from
25943         the list of pending items.
25944
25945         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25946         generate more compact code. 
25947
25948 2002-07-17  Martin Baulig  <martin@gnome.org>
25949
25950         * const.cs (Const.LookupConstantValue): Add support for constant
25951         `unchecked' and `checked' expressions.
25952         Also adding test case test-140.cs for this.
25953
25954 2002-07-17  Martin Baulig  <martin@gnome.org>
25955
25956         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25957         check whether mi.ReturnType implements the IEnumerator interface; the
25958         `==' and the IsAssignableFrom() will fail in this situation.
25959
25960 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25961
25962         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25963         here too.
25964
25965 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25966
25967         * expression.cs: fixed bug #27811.
25968
25969 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25970
25971         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25972         Molaro: when we are a ref, the value already contains a pointer
25973         value, do not take the address of it.
25974
25975 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25976         * removed mb-parser.jay and mb-tokenizer.cs
25977
25978 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25979
25980         * expression.cs: check against the building corlib void type.
25981
25982 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25983
25984         * ecore.cs: fix for valuetype static readonly fields: when 
25985         initializing them, we need their address, not the address of a copy.
25986
25987 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25988
25989         * typemanager.cs: register also enum_type in corlib.
25990
25991 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25992
25993         * class.cs: allow calling this (but not base) initializers in structs.
25994
25995 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25996
25997         * ecore.cs: make sure we compare against the building base types
25998         in GetTypeSize ().
25999
26000 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
26001
26002         * typemanager.cs: fix TypeToCoreType() to handle void and object
26003         (corlib gets no more typerefs after this change).
26004
26005 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
26006
26007         * expression.cs (ArrayCreation.EmitArrayArguments): use
26008         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
26009
26010         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
26011         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
26012         array indexes, the runtime actually forbids them.
26013
26014         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
26015         for array arguments here.
26016
26017         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
26018         instead of the default for ValueTypes.
26019
26020         (New.DoEmit): Use IsValueType instead of
26021         IsSubclassOf (value_type)
26022         (New.DoResolve): ditto.
26023         (Invocation.EmitCall): ditto.
26024
26025         * assign.cs (Assign): ditto.
26026
26027         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
26028         Statements *are* currently doing part of their resolution during
26029         Emit.  
26030
26031         Expressions do always resolve during resolve, but statements are
26032         only required to propagate resolution to their children.
26033
26034 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
26035
26036         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
26037
26038         (LoadAssembly): Do not add the dll if it is already specified
26039
26040         (MainDriver): Add the System directory to the link path at the end,
26041         after all the other -L arguments. 
26042
26043         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
26044         wrong opcode for loading bytes and bools (ldelem.i1 instead of
26045         ldelem.u1) and using the opposite for sbytes.
26046
26047         This fixes Digger, and we can finally run it.
26048
26049         * driver.cs (UnixParseOption): Move the option parsing here.  
26050         (CSCParseOption): Implement CSC-like parsing of options.
26051
26052         We now support both modes of operation, the old Unix way, and the
26053         new CSC-like way.  This should help those who wanted to make cross
26054         platform makefiles.
26055
26056         The only thing broken is that /r:, /reference: and /lib: are not
26057         implemented, because I want to make those have the same semantics
26058         as the CSC compiler has, and kill once and for all the confussion
26059         around this.   Will be doing this tomorrow.
26060
26061         * statement.cs (Unsafe.Resolve): The state is checked during
26062         resolve, not emit, so we have to set the flags for IsUnsfe here.
26063
26064 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26065
26066         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
26067         not catch the Error_ObjectRefRequired in SimpleName (as it is
26068         possible to have a class/instance variable name that later gets
26069         deambiguated), we have to check this here.      
26070
26071 2002-07-10  Ravi Pratap  <ravi@ximian.com>
26072
26073         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
26074         make static and put into Expression.
26075
26076         (Event.Define): Register the private field of the event with the 
26077         TypeManager so that GetFieldFromEvent can get at it.
26078
26079         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
26080         keep track of the private field associated with an event which
26081         has no accessors.
26082
26083         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
26084         private field.
26085
26086         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
26087
26088 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26089
26090         * expression.cs (Binary.EmitBranchable): this routine emits the
26091         Binary expression in a branchable context.  This basically means:
26092         we need to branch somewhere, not just get the value on the stack.
26093
26094         This works together with Statement.EmitBoolExpression.
26095
26096         * statement.cs (Statement.EmitBoolExpression): Use
26097         EmitBranchable. 
26098
26099 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
26100
26101         * statement.cs (For): Reduce the number of jumps in loops.
26102
26103         (For): Implement loop inversion for the For statement.
26104
26105         (Break): We can be breaking out of a Try/Catch controlled section
26106         (foreach might have an implicit try/catch clause), so we need to
26107         use Leave instead of Br.
26108
26109         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
26110         now).  If the instace expression supports IMemoryLocation, we use
26111         the AddressOf method from the IMemoryLocation to extract the
26112         address instead of emitting the instance.
26113
26114         This showed up with `This', as we were emitting the instance
26115         always (Emit) instead of the Address of This.  Particularly
26116         interesting when This is a value type, as we dont want the Emit
26117         effect (which was to load the object).
26118
26119 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
26120
26121         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
26122
26123         * statement.cs (Checked): Set the CheckedState during the resolve
26124         process too, as the ConvCast operations track the checked state on
26125         the resolve process, and not emit.
26126
26127         * cs-parser.jay (namespace_member_declaration): Flag that we have
26128         found a declaration when we do.  This is used to flag error 1529
26129
26130         * driver.cs: Report ok when we display the help only.
26131
26132 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
26133
26134         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
26135
26136 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
26137
26138         * cs-tokenizer.cs (define): We also have to track locally the
26139         defines.  AllDefines is just used for the Conditional Attribute,
26140         but we also need the local defines for the current source code. 
26141
26142 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
26143
26144         * statement.cs (While, For, Do): These loops can exit through a
26145         Break statement, use this information to tell whether the
26146         statement is the last piece of code.
26147
26148         (Break): Flag that we break.
26149
26150         * codegen.cs (EmitContexts): New `Breaks' state variable.
26151
26152 2002-07-03  Martin Baulig  <martin@gnome.org>
26153
26154         * class.cs (TypeContainer.MethodModifiersValid): Allow override
26155         modifiers in method declarations in structs.  Otherwise, you won't
26156         be able to override things like Object.Equals().
26157
26158 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26159
26160         * class.cs (Method, Property, Indexer): Do not allow the public
26161         modifier to be used in explicit interface implementations.
26162
26163         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
26164         override modifiers in method declarations in structs
26165
26166 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
26167
26168         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
26169         integer or real overflow, report an error
26170
26171 2002-07-02  Martin Baulig  <martin@gnome.org>
26172
26173         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
26174         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
26175         to tell the runtime about our newly created System.Object and
26176         System.ValueType types.
26177
26178 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26179
26180         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
26181         struct instead of Ldarg/Starg.
26182
26183 2002-07-02  Martin Baulig  <martin@gnome.org>
26184
26185         * expression.cs (Indirection.Indirection): Call
26186         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
26187
26188 2002-07-02  Martin Baulig  <martin@gnome.org>
26189
26190         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
26191         ValueType, call TypeManager.TypeToCoreType() on it.
26192         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
26193         the OpCodes.Newarr argument.
26194
26195 2002-07-02  Martin Baulig  <martin@gnome.org>
26196
26197         * expression.cs (Invocation.EmitCall): When compiling corlib,
26198         replace all calls to the system's System.Array type to calls to
26199         the newly created one.
26200
26201         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
26202         System.Array methods.
26203         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
26204         from the system's System.Array type which must be replaced.
26205
26206 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
26207
26208         * typemanager.cs: load unverifiable_code_ctor so we can build
26209         corlib using the correct type. Avoid using GetTypeCode() with
26210         TypeBuilders.
26211         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
26212         TypeManager.object_type to allow building corlib.
26213
26214 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
26215
26216         * ecore.cs: handle System.Enum separately in LoadFromPtr().
26217
26218 2002-07-01  Martin Baulig  <martin@gnome.org>
26219
26220         * class.cs: Make the last change actually work, we need to check
26221         whether `ifaces != null' to avoid a crash.
26222
26223 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26224
26225         * class.cs: when we build structs without fields that implement
26226         interfaces, we need to add the interfaces separately, since there is
26227         no API to both set the size and add the interfaces at type creation
26228         time.
26229
26230 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26231
26232         * expression.cs: the dimension arguments to the array constructors
26233         need to be converted if they are a long.
26234
26235 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26236
26237         * class.cs: don't emit ldarg.0 if there is no parent constructor
26238         (fixes showstopper for corlib).
26239
26240 2002-06-29  Martin Baulig  <martin@gnome.org>
26241
26242         MCS now compiles corlib on GNU/Linux :-)
26243
26244         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26245         ie. check for MethodImplOptions.InternalCall.
26246
26247         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26248         and TypeManager.attribute_type are null, so we must explicitly check
26249         whether parent is not null to find out whether it's an attribute type.
26250         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26251         and SetBuilder, not only if the property is neither abstract nor external.
26252         This is necessary to set the MethodImplOptions on the accessor methods.
26253         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26254         SetBuilder, see Property.Emit().
26255
26256         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26257         populate "System.Object", "System.ValueType" and "System.Attribute" since
26258         they've already been populated from BootCorlib_PopulateCoreTypes().
26259
26260 2002-06-29  Martin Baulig  <martin@gnome.org>
26261
26262         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26263         is the NullLiteral, we also need to make sure that target_type is not
26264         an enum type.   
26265
26266 2002-06-29  Martin Baulig  <martin@gnome.org>
26267
26268         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26269         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26270         before calling BootstrapCorlib_ResolveDelegate ().
26271
26272 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26273
26274         * statement.cs: fixed build-breaker. All tests passed ok.
26275
26276 2002-06-27  Martin Baulig  <martin@gnome.org>
26277
26278         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26279         for System.Decimal when compiling corlib.
26280
26281 2002-06-27  Martin Baulig  <martin@gnome.org>
26282
26283         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26284         switch blocks which contain nothing but a default clause.
26285
26286 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26287
26288        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26289
26290 2002-06-27  Martin Baulig  <martin@gnome.org>
26291
26292         * ecore.cs (PropertyExpr.PropertyExpr): Call
26293         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26294
26295         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26296         is already a TypeBuilder.
26297
26298 2002-06-27  Martin Baulig  <martin@gnome.org>
26299
26300         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26301         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26302         the "from an array-type to System.Array" case.  This makes it work
26303         when compiling corlib.
26304
26305 2002-06-27  Martin Baulig  <martin@gnome.org>
26306
26307         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26308         non-static PropertyExpr, set its InstanceExpression.  This makes
26309         the `ICollection.Count' property work in System/Array.cs.
26310
26311 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26312
26313         * driver.cs: Made error handling more consistent.  Errors now
26314         tracked by Report class, so many methods which used to return int
26315         now return void.  Main() now prints success/failure and 
26316         errors/warnings message.
26317
26318         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26319         the magic number return values (123 and 124).  Now, if the
26320         expected error occurs, the compiler exits with success (exit value
26321         0).  If the compilation completes without seeing that particular
26322         error, the compiler exits with failure (exit value 1).  The
26323         makefile in mcs/errors has been changed to handle the new behaviour.
26324
26325         * report.cs: Made 'expected error' number a property and renamed
26326         it from 'Probe' to 'ExpectedError'.
26327
26328         * genericparser.cs: Removed error handling support, since it is
26329         now all done by Report class.
26330
26331         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26332         class, so parse() no longer returns an int.
26333
26334         * namespace.cs: Use Report.Error instead of GenericParser.error
26335
26336 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26337
26338         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26339         TypeContainer.AddOperator): At the front of the list put the
26340         explicit implementations, so they get resolved/defined first. 
26341
26342 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26343
26344         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26345         interface type is implemented by this TypeContainer.  Used during
26346         explicit interface implementation.
26347
26348         (Property.Define, Indexer.Define, Method.Define): Validate that
26349         the given interface in the explicit implementation is one of the
26350         base classes for the containing type.
26351
26352         Also if we are explicitly implementing an interface, but there is
26353         no match in the pending implementation table, report an error.
26354
26355         (Property.Define): Only define the property if we are
26356         not explicitly implementing a property from an interface.  Use the
26357         correct name also for those properties (the same CSC uses,
26358         although that is really not needed).
26359
26360         (Property.Emit): Do not emit attributes for explicitly implemented
26361         properties, as there is no TypeBuilder.
26362
26363         (Indexer.Emit): ditto.
26364
26365         Hiding then means that we do not really *implement* a pending
26366         implementation, which makes code fail.
26367
26368 2002-06-22  Martin Baulig  <martin@gnome.org>
26369
26370         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26371         the return value of Object.GetType().  [FIXME: we need to do this whenever
26372         we get a type back from the reflection library].
26373
26374 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26375
26376         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26377
26378 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26379
26380         * attribute.cs: Return null if we can not look up the type.
26381
26382         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26383         the interface types found.
26384
26385         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26386         interface types found.
26387
26388         * typemanager.cs (GetInterfaces): Make this routine returns alll
26389         the interfaces and work around the lame differences between
26390         System.Type and System.Reflection.Emit.TypeBuilder in the results
26391         result for GetInterfaces.
26392
26393         (ExpandInterfaces): Given an array of interface types, expand and
26394         eliminate repeated ocurrences of an interface.  This expands in
26395         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26396         be IA, IB, IC.
26397
26398 2002-06-21  Martin Baulig  <martin@gnome.org>
26399
26400         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26401         on System.Enum.
26402
26403 2002-06-21  Martin Baulig  <martin@gnome.org>
26404
26405         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26406         and called with one of the core types, return the corresponding typebuilder for
26407         that type.
26408
26409         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26410         element type.
26411
26412 2002-06-21  Martin Baulig  <martin@gnome.org>
26413
26414         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26415         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26416         (Expression.ConvertReferenceExplicit): Likewise.
26417
26418         * expression.cs (ElementAccess.DoResolve): Likewise.
26419         (ElementAccess.DoResolveLValue): Likewise.
26420
26421 2002-06-10  Martin Baulig  <martin@gnome.org>
26422
26423         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26424         add the "value" parameter to the parameter list.
26425
26426         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26427         to our caller.
26428
26429 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26430
26431         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26432         the argument to an int, uint, long or ulong, per the spec.  Also
26433         catch negative constants in array creation.
26434
26435 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26436
26437         * class.cs: do not allow the same interface to appear twice in
26438         the definition list.
26439
26440 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26441
26442         * ecore.cs: don't use ldlen with System.Array.
26443
26444 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26445
26446         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26447
26448 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26449
26450         * modifiers.cs: produce correct field attributes for protected
26451         internal. Easy fix so miguel can work on ther harder stuff:-)
26452
26453 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26454
26455         * pending.cs: New file.  Move the code from class.cs here.
26456         Support clearning the pending flag for all methods (when not doing
26457         explicit interface implementation).
26458
26459 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26460
26461         * rootcontext.cs: added a couple more types needed to bootstrap.
26462
26463 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26464
26465         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26466         constructor in the type, instead of any constructor in the type
26467         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26468         a bug in the Mono runtime when applying the params attribute). 
26469
26470 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26471         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26472
26473 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26474
26475         * expression.cs (Unary.ResolveOperator): Use TypeManager
26476         to resolve the type.
26477
26478 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26479
26480         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26481         attached.
26482
26483         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26484         with each member too.
26485
26486         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26487         field builders too - this takes care of the enum member case.
26488
26489 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26490
26491         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26492         address-of operator on both value types and pointers.
26493
26494 2002-06-10  Martin Baulig  <martin@gnome.org>
26495
26496         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26497         PropertyBuilder to the `property_builders' list.
26498
26499         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26500         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26501         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26502         find any indexers which are inherited from an interface.
26503
26504 2002-06-09  Martin Baulig  <martin@gnome.org>
26505
26506         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26507         the same type as the constant if necessary.  There's also a test-130.cs
26508         for this.
26509
26510         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26511
26512         * typemanager.cs (TypeManager.ChangeType): Previously known as
26513         Enum.ChangeEnumType().
26514
26515 2002-06-09  Martin Baulig  <martin@gnome.org>
26516
26517         * expression.cs (Cast.TryReduce): Added support for consts.
26518
26519 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26520
26521         * class.cs (Accessor): Hold attributes information so we can pass
26522         it along.
26523
26524         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26525         Modify to pass in attributes attached to the methods.
26526
26527         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26528
26529         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26530         to handle the Accessor kind :-)
26531
26532         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26533
26534 2002-06-08  Martin Baulig  <martin@gnome.org>
26535
26536         * expression.cs (Unary.TryReduceNegative): Added support for
26537         ULongConstants.
26538
26539 2002-06-08  Martin Baulig  <martin@gnome.org>
26540
26541         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26542         name can't be found in the `defined_names' - the caller will do a
26543         MemberLookup in this case and thus find methods in System.Enum
26544         such as Enum.IsDefined().
26545
26546 2002-06-08  Martin Baulig  <martin@gnome.org>
26547
26548         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26549         Convert.ChangeType() which works with TypeBuilder created types.
26550         (Enum.LookupEnumValue, Enum.Define): Use it here.
26551
26552         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26553         `TypeBuilder.BaseType != null' check.
26554         (TypeContainer.FindMembers): Only lookup parent members if we
26555         actually have a parent.
26556         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26557         (ConstructorInitializer.Resolve): Likewise.
26558
26559         * interface.cs (Interface.FindMembers): Added
26560         `TypeBuilder.BaseType != null' check.
26561
26562         * rootcontext.cs (RootContext.ResolveCore): Added
26563         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26564         classes_second_stage.
26565
26566         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26567         debug_type and trace_type when compiling with --nostdlib.       
26568
26569 2002-06-07  Martin Baulig  <martin@gnome.org>
26570
26571         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26572         (AddField): Set it to true when adding a non-static field.
26573         (DefineType): Use `have_nonstatic_fields' to find out whether we
26574         have non-static fields, not `Fields != null'.
26575
26576 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26577
26578         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26579         dereferencing a null on the static-field code path)
26580
26581 2002-05-30  Martin Baulig  <martin@gnome.org>
26582
26583         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26584         to take command line arguments.  Use reflection to call the new
26585         custom `Initialize' function on the symbol writer and pass it the
26586         command line arguments.
26587
26588         * driver.cs (--debug-args): New command line argument to pass command
26589         line arguments to the symbol writer.
26590
26591 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26592
26593         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26594         the target type for indexers and properties.  Thanks to Joe for
26595         catching this.
26596
26597 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26598
26599         * typemanager.cs (MethodFlags): returns the method flags
26600         (Obsolete/ShouldIgnore) that control warning emission and whether
26601         the invocation should be made, or ignored. 
26602
26603         * expression.cs (Invocation.Emit): Remove previous hack, we should
26604         not do this on matching a base type, we should do this based on an attribute
26605
26606         Only emit calls to System.Diagnostics.Debug and
26607         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26608         on the command line.
26609
26610         * rootcontext.cs: Global settings for tracing and debugging.
26611
26612         * cs-tokenizer.cs (define): New utility function to track
26613         defines.   Set the global settings for TRACE and DEBUG if found.
26614
26615 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26616
26617         * interface.cs (Populate*): Pass in the TypeContainer as well as
26618         the DeclSpace as parameters so that we can create EmitContexts and
26619         then use that to apply attributes etc.
26620
26621         (PopulateMethod, PopulateEvent, PopulateProperty)
26622         (PopulateIndexer): Apply attributes everywhere.
26623
26624         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26625         etc.
26626
26627         (ApplyAttributes): Update accordingly.
26628
26629         We now apply interface attributes for all members too.
26630
26631 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26632
26633         * class.cs (Indexer.Define); Correctly check if we are explicit
26634         implementation (instead of checking the Name for a ".", we
26635         directly look up if the InterfaceType was specified).
26636
26637         Delay the creation of the PropertyBuilder.
26638
26639         Only create the PropertyBuilder if we are not an explicit
26640         interface implementation.   This means that explicit interface
26641         implementation members do not participate in regular function
26642         lookups, and hence fixes another major ambiguity problem in
26643         overload resolution (that was the visible effect).
26644
26645         (DefineMethod): Return whether we are doing an interface
26646         implementation. 
26647
26648         * typemanager.cs: Temporary hack until we get attributes in
26649         interfaces (Ravi is working on that) and we get IndexerName
26650         support in interfaces.
26651
26652         * interface.cs: Register the indexers as properties.
26653
26654         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26655         warning, I have verified that this is a bug in the .NET runtime
26656         (JavaScript suffers of the same problem).
26657
26658         * typemanager.cs (MemberLookup): When looking up members for
26659         interfaces, the parent of an interface is the implicit
26660         System.Object (so we succeed in searches of Object methods in an
26661         interface method invocation.  Example:  IEnumerable x;  x.ToString
26662         ()) 
26663
26664 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26665
26666         * class.cs (Event): Events should also register if they do
26667         implement the methods that an interface requires.
26668
26669         * typemanager.cs (MemberLookup); use the new GetInterfaces
26670         method. 
26671
26672         (GetInterfaces): The code used to lookup interfaces for a type is
26673         used in more than one place, factor it here. 
26674
26675         * driver.cs: Track the errors at the bottom of the file, we kept
26676         on going.
26677
26678         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26679         instance if the method we are calling is static!
26680
26681 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26682
26683         * attribute.cs (ApplyAttributes): Make this function filter out
26684         the IndexerName attribute (as that attribute in reality is never
26685         applied) and return the string constant for the IndexerName
26686         attribute. 
26687
26688         * class.cs (TypeContainer.Emit): Validate that all the indexers
26689         have the same IndexerName attribute, and if so, set the
26690         DefaultName attribute on the class. 
26691
26692         * typemanager.cs: The return value might contain other stuff (not
26693         only methods).  For instance, consider a method with an "Item"
26694         property and an Item method.
26695
26696         * class.cs: If there is a problem with the parameter types,
26697         return. 
26698
26699 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26700
26701         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26702         looks at user defined conversion after making a call to 
26703         StandardConversionExists - we need this for overload resolution.
26704
26705         * expression.cs : Update accordingly the various method calls.
26706
26707         This fixes 2 bugs filed against implicit user defined conversions 
26708
26709 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26710
26711         * statement.cs: Track the result of the assignment.
26712
26713 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26714
26715         * expression.cs (MemberAccess): Improved error reporting for
26716         inaccessible members.
26717
26718 2002-05-22  Martin Baulig  <martin@gnome.org>
26719
26720         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26721         itself with debugging support.
26722
26723 2002-05-22  Martin Baulig  <martin@gnome.org>
26724
26725         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26726         Removed, this isn't needed anymore.
26727
26728 2002-05-20  Martin Baulig  <martin@gnome.org>
26729
26730         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26731         be underlying type for an enum.
26732
26733 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26734
26735         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26736         that splits out the loading of just the core types.
26737
26738         * rootcontext.cs (ResolveCore): Split the struct resolution in
26739         two, so we can load the enumeration underlying types before any
26740         enums are used.
26741
26742         * expression.cs (Is): Bandaid until we fix properly Switch (see
26743         bug #24985 for details).
26744
26745         * typemanager.cs (ImplementsInterface): The hashtable will contain
26746         a null if there are no interfaces implemented.
26747
26748 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26749
26750         * cs-parser.jay (indexer_declarator): It is fine to have array
26751         parameters
26752
26753 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26754
26755         * typemanager.cs: (RegisterBuilder): New function used to register
26756         TypeBuilders that implement interfaces.  Since
26757         TypeBuilder.GetInterfaces (as usual) does not work with lame
26758         Reflection.Emit. 
26759         (AddUserType): register interfaces.
26760
26761         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26762         dealing with TypeBuilder.  Also, arrays are showing up as
26763         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26764         methods can not be invoked on them!
26765
26766         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26767         (ImplicitReferenceConversionExists): Split out from
26768         StandardConversionExists. 
26769
26770         * expression.cs (As): We were only implementing one of the three
26771         cases for the as operator.  We now implement them all.
26772         (Is): Implement the various other cases for Is as well.
26773
26774         * typemanager.cs (CACHE): New define used to control if we want or
26775         not the FindMembers cache.  Seems to have a negative impact on
26776         performance currently
26777
26778         (MemberLookup): Nested types have full acess to
26779         enclosing type members
26780
26781         Remove code that coped with instance/static returns for events, we
26782         now catch this in RealFindMembers.
26783
26784         (RealFindMembers): only perform static lookup if the instance
26785         lookup did not return a type or an event.  
26786
26787 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26788
26789         * assign.cs (CompoundAssign): We pass more semantic information
26790         now to Compound Assignments than we did before: now we have all
26791         the information at hand, and now we resolve the target *before* we
26792         do the expression expansion, which allows the "CacheValue" method
26793         to have the effect we intended (before, a [x] += 1 would generate
26794         two differen ArrayAccess expressions from the ElementAccess,
26795         during the resolution process).
26796
26797         (CompoundAssign.DoResolve): Resolve target and original_source here.
26798
26799 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26800
26801         * expression.cs (ArrayAccess): dropped debugging information. 
26802
26803         * typemanager.cs: Small bug fix: I was always returning i_members,
26804         instead of one of i_members or s_members (depending on which had
26805         the content).
26806
26807         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26808         method is invoked before any code generation takes place, and it
26809         is a mechanism to inform that the expression will be invoked more
26810         than once, and that the method should use temporary values to
26811         avoid having side effects
26812
26813         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26814
26815         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26816         implementation.
26817
26818         * expression.cs (Indirection, ArrayAccess): Add support for
26819         CacheTemporaries in these two bad boys. 
26820
26821         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26822         ldobj or ldind_ref.  
26823         (StoreFromPtr): Handle stobj as well.
26824
26825         * expression.cs (UnaryMutator): Share more code.
26826
26827         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26828         down: I was not tracking the Filter function as well, which
26829         was affecting the results of the cache.
26830
26831 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26832
26833         * attribute.cs: Remove the hack to handle the CharSet property on
26834         StructLayouts. 
26835
26836 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26837
26838         * attribute.cs (DoResolve): More uglyness, we now only try to
26839         resolve the attribute partially, to extract the CharSet
26840         information (only if we are a StructLayout attribute).  Otherwise 
26841
26842         (GetExtraTypeInfo): Add some code to conditionally kill in the
26843         future this.   I am more and more convinced that the .NET
26844         framework has special code to handle the attribute setting on
26845         certain elements.
26846
26847         * expression.cs (IsParamsMethodApplicable): Revert my previous
26848         foreach change here, it was wrong.
26849
26850 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26851
26852         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26853         (pp_expr): do not abort on unknown input, just return.
26854         (eval): abort if there are pending chars.
26855
26856         * attribute.cs (Attribute.Resolve): Positional parameters are
26857         optional.  Deal with that case.
26858
26859         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26860         the Ansi/Unicode/Auto information for the type.
26861
26862         (TypeContainer.DefineType): instantiate the EmitContext here, as
26863         we will be using it during the type definition (to resolve
26864         attributes) and during the emit phase.
26865
26866         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26867         to pull type information out of the attributes
26868
26869         (Attribute.Resolve): track the constructor builder, and allow for
26870         multiple invocations (structs and classes will use this).
26871
26872         * ecore.cs (MemberLookupFinal): new version with all the
26873         parameters customizable.
26874
26875         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26876         constructors.  Return if the result value is null (as the error
26877         would have been flagged already by MemberLookupFinal)
26878
26879         Do not allow instances of abstract classes or interfaces to be
26880         created.
26881
26882         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26883         We have to compare the assembly property here when dealing with
26884         FamANDAssem and Assembly access modifiers, because we might be
26885         creating an assembly from *modules* (that means that we are not
26886         getting TypeBuilders for types defined in other modules that are
26887         part of this assembly).
26888
26889         (Method.Emit): If the method is marked abstract and has a body,
26890         emit an error. 
26891
26892         (TypeContainer.DefineMembers): If both the defined member and the
26893         parent name match are methods, then do not emit any warnings: let
26894         the Method.Define routine take care of flagging warnings.  But if
26895         there is a mismatch (method overrides something else, or method is
26896         overriwritten by something, then emit warning).
26897
26898         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26899         set to null, this means `do not check for the return type on the
26900         signature'. 
26901
26902         (Method.Define): set the return type for the method signature to
26903         null, so that we get methods with the same name and parameters and
26904         different return types.  This is used to flag warning 114 (you are
26905         hiding a method, and you probably want to use the new/override
26906         keywords instead).
26907
26908         * typemanager.cs (MemberLookup): Implemented proper access
26909         control, closing a long standing set of bug reports.  The problem
26910         was that the Framework only has two bits: Public and NonPublic,
26911         and NonPublic includes private and protected methods, but we need
26912         to enforce the FamANDAssem, FamOrAssem and Family. 
26913
26914 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26915
26916         * statement.cs (GotoCase): Return true: Ammounts to giving up
26917         knowledge on whether we return or not, and letting the other case
26918         be responsible for it.
26919
26920 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26921
26922         * driver.cs: Do not load directories for each file processed, only
26923         do it if there is a pattern.
26924
26925         * ecore.cs: Report readonly assigns here as well, as we might have
26926         been resolved only by MemberAccess.
26927
26928         (SimpleName.SimpleNameResolve): Also be useful for LValue
26929         resolution.   We need this to propagate assign to local readonly variables
26930
26931         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26932         do not want to reuse potential criteria memory.
26933
26934         * class.cs (MyEventBuilder): Set reflected_type;
26935
26936         * ecore.cs (Constantify): Added support for constifying bools.
26937
26938         (RootContext.LookupType): Added a cache for values looked up in
26939         the declaration space.
26940
26941         * typemanager.cs (FindMembers): Now is a front-end to
26942         RealFindMembers, and provides a two-level hashtable-based cache to
26943         the request.  
26944
26945         15% performance improvement: from 22.5 to 19.2 seconds.
26946
26947         * expression.cs (IsParamsMethodApplicable): use foreach.
26948         (Invocation.DoResolve): ditto.
26949         (New.DoResolve): ditto.
26950         (ArrayCreation.DoResolve): ditto.
26951
26952         * ecore.cs (FindMostEncompassingType): use foreach.
26953
26954         * delegate.cs (NewDelegate.DoResolve): Use foreach
26955
26956         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26957         (RemoveMethods): use foreach.
26958
26959         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26960         nested foreach statements instead of for, and also break out of
26961         the inner loop once a match is found.
26962
26963         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26964
26965 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26966
26967         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26968         we actually unwrap the expression to allow for extra information
26969         to be extracted. 
26970
26971         * expression.cs: Use Shr_Un on unsigned operations. 
26972
26973 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26974
26975         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26976         applicable operators was not being considered correctly. This closes
26977         the bug Miguel reported.
26978
26979 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26980
26981         * attribute.cs: check that the type derives from System.Attribute
26982         and report the correct error in that case (moved the duplicate code to
26983         its own method, too).
26984
26985 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26986
26987         * attribute.cs: lookup attribute type name as the spec says: first the
26988         bare attribute name and then name + "Attribute" (nant compiles with
26989         mcs after this fix).
26990
26991 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26992
26993         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26994         Because of the way we parse things, we should try to see if a
26995         UIntConstant can fit in an integer.
26996
26997 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26998
26999         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
27000         when we are in an explicit context.
27001
27002         (ConvertReferenceExplicit): When converting from Iface type S to Class
27003         T make sure the rules are implemented as an OR.
27004
27005         * parameter.cs (ParameterType): Make it a property for now although the
27006         purpose really isn't anything immediate.
27007
27008         * expression.cs (Is*Applicable): Do better checking on the parameter type
27009         of a ref/out parameter. The ones from the system assemblies are already 
27010         marked with the correct type so we don't need to do any correction.
27011
27012         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
27013         the object type is standard too so include that.
27014
27015 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27016
27017         * ecore.cs (StandardConversionExists): Augment with missing code:
27018         deal with IntConstant, LongConstants and Enumerations.
27019
27020         * assign.cs: Report the error, instead of failing silently
27021
27022         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
27023         typecontainer that they are declared, because the
27024         typecontainer/namespace will have the list of using clauses that
27025         need to be applied.
27026
27027         Assembly Attributes were escaping the normal registration
27028         mechanism. 
27029
27030         (EmitCode): Apply attributes within an EmitContext that represents
27031         the container they were declared on.
27032
27033         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
27034
27035 2002-05-06  Ravi Pratap  <ravi@ximian.com>
27036
27037         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
27038         Revamp completely - make much cleaner as we now operate only
27039         on a set of Types.
27040
27041         (FindMostSpecificSource, FindMostSpecificTarget): New methods
27042         to implement the logic detailed in the spec more correctly.
27043
27044         (UserDefinedConversion): Update accordingly.
27045
27046 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27047
27048         * statement.cs: Return flow analysis information up.
27049
27050         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
27051         and the default.
27052
27053         (token): Do not consume an extra character before calling
27054         decimal_digits.
27055
27056 2002-05-06  Piers Haken <piersh@friskit.com>
27057
27058         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
27059
27060 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27061
27062         * class.cs (Constructor.Emit): Set the IsStatic flag in the
27063         EmitContext during the instance constructor initializer
27064         resolution, to stop access to instance variables.
27065
27066         This is mandated by the spec, last paragraph of the `constructor
27067         initializers' section. 
27068
27069 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
27070
27071         * cs-parser.jay, class.cs (Accessor): new class used to represent
27072         an accessor (get or set).  In the past we used `null' to represent
27073         a missing accessor.  But this is ambiguous because there was no
27074         way to tell in abstract indexers/properties if one of them was
27075         specified.
27076
27077         Now there is a way of addressing that.
27078
27079         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
27080         instead of FindMembers.
27081
27082         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
27083         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
27084
27085         * attribute.cs: Treat indexers and properties as the same in terms
27086         of applying attributes
27087
27088         * ecore.cs (FindMostEncompassedType): Use statically initialized
27089         EmptyExpressions()s like we do elsewhere to avoid creating useless
27090         objects (and we take this out of the tight loop).
27091
27092         (GetConversionOperators): Move the code to extract the actual
27093         operators to a separate routine to clean things up.
27094
27095 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
27096
27097         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
27098         events are always registered FieldBuilders.
27099
27100         * class.cs (FieldBase): New class shared by Fields 
27101
27102         * delegate.cs: If we are a toplevel delegate, use our full name.
27103         If we are a nested delegate, then only use our tail name.
27104
27105 2002-05-02  Ravi Pratap  <ravi@ximian.com>
27106
27107         * expression.cs (IsApplicable): Ensure that we add the "&" to
27108         ref/out types before comparing it with the type of the argument.
27109
27110         (IsParamsMethodApplicable): Ditto.
27111
27112         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
27113         silly me ;-)
27114
27115         * delegate.cs : Handle the case when we have more than one applicable
27116         method. Flag an error only when we finish checking all.
27117
27118 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
27119
27120         * expression.cs: Add support for boolean static initializers.
27121
27122 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
27123
27124         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
27125
27126         * parameter.cs (ComputeParameterTypes,
27127         ComputeAndDefineParameterTypes): Better error handling: now we
27128         clear the `types' cache if we fail during any of the type lookups.
27129         We also return the status code correctly to our caller
27130
27131         * delegate.cs: If we fail to define a delegate, abort the extra
27132         steps. 
27133
27134         * expression.cs (Binary.ResolveOperator): for
27135         operator==(object,object) and operator !=(object, object) we also
27136         have to verify that there is an implicit conversion from one to
27137         the other.
27138
27139         (ArrayAccess.DoResolve): Array Access can operate on
27140         non-variables. 
27141
27142 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
27143
27144         * assign.cs (CompoundAssign): A new class used as a "flag" that
27145         the assignment actually is happening as part of a compound
27146         assignment operator.
27147
27148         During compound assignment, a few new rules exist to enable things
27149         like:
27150
27151         byte b |= 1 + 2
27152
27153         From the spec:
27154
27155         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
27156         to the type of x) if y is implicitly convertible to the type of x,
27157         and the operator is a builtin operator and the return type of the
27158         operator is explicitly convertible to the type of x. 
27159
27160         * rootcontext.cs: Reset warning level to 2.  4 catches various
27161         "interesting" features in mcs, we must clean this up at some
27162         point, but currently am trying to kill other bugs ;-)
27163
27164         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
27165         in container classes as well.  
27166
27167         * expression.cs (Binary.ResolveOperator): Handle string case
27168         before anything else (as operator overloading does emit an error
27169         before doing anything else).
27170
27171         This code could go away when we move to a table driven model, but
27172         i could not come up with a good plan last night.
27173
27174 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
27175
27176         * typemanager.cs (CSharpName): reimplementation using regex.
27177         * class.cs: added null check for fields in Emit
27178         * rootcontext.cs: set warninglevel to 4
27179
27180 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
27181
27182         * typemanager.cs (CSharpName): reimplemented with Lupus
27183         suggestion.
27184
27185 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
27186
27187         * statement.cs (If): correclty implement Resolve, because we were
27188         not catching sem errors in there.  The same process is needed
27189         everywhere else. 
27190         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
27191
27192
27193         (Statement.Warning_DeadCodeFound): Factorize code.
27194         (While): Report dead code here too.
27195
27196         (Statement): Added Resolve virtual method to allow
27197         for resolution split from the emit code.
27198
27199 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27200
27201         * statement.cs (EmitBoolExpression): No longer try to resolve the
27202         expression here.    
27203         (MakeBoolean): New utility function that resolve, implicitly
27204         converts to boolean and tags the expression. 
27205
27206
27207         (If, Do): Implement dead code elimination.
27208         (While): Implement loop inversion
27209
27210         (Do, While, For, If): Resolve the expression prior to calling our
27211         code generation.
27212
27213 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
27214
27215         * class.cs:
27216           - added method Report28 (warning: program has more than one entry point)
27217           - added method IsEntryPoint, implements paragraph 10.1 of the spec
27218           - modified method Method.Define, the part at the end of the method
27219
27220         * rootcontext.cs: added static public Location EntryPointLocation;
27221           
27222         * ../errors/cs0028.cs : Add test case for the above warning.              
27223
27224         * typemanager.cs:
27225           - modified method CSharpName to allow arrays of primitive type to
27226             be printed nicely (e.g. instead of System.Int32[][] it now prints
27227             int[][])
27228           - added method CSharpSignature: returns the signature of a method
27229             in string format to be used in reporting errors, warnings, etc.
27230
27231         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27232         with String.Empty.
27233
27234 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27235
27236         * delegate.cs (Define): Fix extremely silly bug where I was
27237         setting the type of the 'object' parameter of the BeginInvoke
27238         method to System.IAsyncResult instead of System.Object ;-)
27239
27240 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27241
27242         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27243         here. 
27244
27245         (Constructor.Emit): return if we fail to initialize the
27246         constructor.  Another door closed!  
27247
27248         * expression.cs (New.DoResolve): Improve error message (from -6 to
27249         1501).  Use DeclaredOnly lookup to find the exact constructor.
27250
27251         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27252         loop.  This is useful.
27253
27254         * cs-parser.jay: Adjust the default parameters so that destructors
27255         have the proper signature.
27256
27257 2002-04-26  Martin Baulig  <martin@gnome.org>
27258
27259         * driver.cs (LoadAssembly): If `assembly' contains any characters
27260         which are only valid in path names and not in assembly names
27261         (currently slash, backslash and point), use Assembly.LoadFrom ()
27262         instead of Assembly.Load () on the `assembly' (before iteration
27263         over the link_paths).
27264
27265 2002-04-26  Martin Baulig  <martin@gnome.org>
27266
27267         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27268
27269 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27270
27271         * class.cs (Property): use the new typemanager.MemberLookup
27272
27273         (TypeContainer.MemberLookup): Implement using the
27274         TypeManager.MemberLookup now. 
27275
27276         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27277         and return MemberInfos, so that these can be used without an
27278         EmitContext (what we had before).
27279
27280 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27281
27282         * expression.cs: Fix the case where the argument to params if the
27283         type of the params.  I omitted handling this before.   Fixed
27284
27285 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27286
27287         * driver.cs: Call BootCorlib_PopulateCoreType
27288
27289         * class.cs (Property.CheckBase): Check for properties only, not
27290         for all members. 
27291
27292         * interface.cs: Temporary hack: try/catch around the
27293         CustomAttributeBuilder, because I am getting an exception that I
27294         do not understand.
27295
27296         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27297         types whose definitions are required to be there (attributes are
27298         defined before standard types).
27299
27300         Compute definitions as we boot the various types, as they are used
27301         immediately (value_type class will need object_type, but if we do
27302         not initialize object_type, we will pass a null, which will let
27303         the runtime pick the System.Object from the existing corlib, which
27304         is not what we want).
27305
27306 2002-04-22  Patrik Torstensson <totte@labs2.com>
27307
27308         * cs-tokenizer.cs: fixed a number of trim() issues.
27309
27310 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27311
27312         * expression.cs (Argument.Type): Ensure that we return the correct
27313         type when we have out or ref parameters [in which case we 
27314         append a "&"].
27315
27316 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27317
27318         * class.cs (Property, Indexer): Allow extern modifier in there. 
27319
27320         * typemanager.cs (InitBaseTypes): Initializes object_type and
27321         value_type, since those will be used early on during the bootstrap
27322         process to compile corlib.
27323
27324         (InitCoreTypes): Move code from here to InitBaseTypes.
27325
27326 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27327
27328         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27329         single-dimension arrays as using the ldlen opcode.  
27330
27331         Daniel Lewis discovered this optimization.  
27332
27333         * typemanager.cs: Add signature for System.Array::get_Length
27334
27335 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27336
27337         * statement.cs: report the error when the foreach does not apply to an
27338         array nor a collection.
27339
27340 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27341
27342         * expression.cs: Add implicit conversions to the operator ~.
27343
27344         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27345
27346         * typemanager.cs: Locate the decimal constructor.
27347
27348 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27349
27350         * attribute.cs: use the new property of TypeOf.
27351         * expression.cs: added 'get' property around typearg.
27352
27353         These changes fix a build breaker reported by NickD. Is this the
27354         correct way to fix?  If not, please, revert my changes and make it
27355         work :-).
27356
27357 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27358
27359         * attribute.cs: Add support for typeof in attribute invocations.
27360         I am not sure that this is right though.
27361
27362 2002-04-14  Duncan Mak  <duncan@ximian.com>
27363
27364         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27365         Binary.Operator.Division case.
27366
27367 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27368
27369         * class.cs (DefineType): Ensure that we do a proper check on
27370         attribute types and also register it with the TypeManager.
27371
27372         (TypeContainer.Targets): The default for attribute types is
27373         AttributeTargets.All.
27374
27375         * attribute.cs (ApplyAttributes): Registering the attribute type
27376         is done elsewhere, not when we discover we have a Usage attribute.
27377
27378 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27379
27380         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27381         and get rid of is_delegate parameter.
27382
27383         * everywhere : update.
27384
27385 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27386
27387         * cs-parser.jay (compilation_unit): Revamp completely to use
27388         some new ideas that I got from Rhys' grammar to solve the problems
27389         with assembly level attributes.
27390
27391         (outer_declaration): New grammar production.
27392
27393         (attribute_sections): Add.
27394
27395         (opt_attributes): Base on attribute_sections
27396
27397         (namespace_declaration): Allow opt_attributes to tackle the case
27398         when we have assembly level attributes - we are clever in this
27399         regard now ;-)
27400
27401         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27402         attributes in the non-global context.
27403
27404         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27405         instead of SetGlobalAttributes.
27406
27407         * class.cs, rootcontext.cs : Ensure we define and generate 
27408         attribute types before anything else.
27409
27410         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27411         and flag the new error -20 for the case when the attribute type
27412         does not have valid targets specified. csc does not catch this.
27413
27414         * ../errors/errors.txt : update for error # -20
27415
27416 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27417
27418         * support.cs (InternalParameters.ParameterModifier): Do some null
27419         checking and return sane values.
27420
27421         * class.cs (Method.Define): If we are a PInvoke method, ensure
27422         that we are static and extern. Report error # 601
27423
27424         * ../errors/cs0601.cs : Add test case for the above error.
27425
27426 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27427
27428         * rootcontext.cs (attribute_types): We need to keep type of
27429         all attribute types separately and emit code for them first.
27430
27431         (RegisterAttribute) : Implement.
27432
27433         * class.cs (DefineType): Check if the current Type is a custom
27434         attribute type and register it accordingly.
27435
27436         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27437         adding the first attribute twice and rename to
27438
27439         (SetGlobalAttributes): this.
27440
27441         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27442         lookups.
27443
27444         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27445         if we are processing global arguments. Hmm, I am unsure of this.
27446
27447 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27448
27449         * expression.cs: added static array of strings to avoid calling
27450         Enum.ToString () for Operator in Binary. Significant recover of
27451         performance.
27452
27453 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27454
27455         * class.cs (FindMembers): Allow the Builders of the various
27456         members to be null.  If they are skip them.  This only happens
27457         during the PInvoke declaration.
27458
27459 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27460
27461         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27462         failure, so we do not keep going afterwards.
27463
27464         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27465         wanted to pass `false' as the `is_delegate' argument.  If this is
27466         the case, why not use delegate_type == null to mean `is_delegate =
27467         false' and anything else as is_delegate = true.
27468
27469 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27470
27471         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27472         code for the section, not the beginning of the tests.
27473
27474 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27475
27476         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27477
27478         * expression.cs (Binary): same.  Warn about errors where we have
27479         Enum/Enum in operator + as well.
27480
27481 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27482
27483         * statement.cs:
27484                 - added support for switch(bool)
27485                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27486                 - add TableSwitchEmit() to handle table-based switch statements
27487
27488 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27489
27490         * expression.cs (Invocation.OverloadResolve): Factor out code which
27491         does parameter compatibility checking with arguments so that we can 
27492         re-use the code even from Delegate.VerifyApplicability
27493
27494         (VerifyArgumentsCompat): Move above code here.
27495
27496         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27497         and instead make a call to the above method.
27498
27499 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27500
27501         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27502         We use it to keep track of classes which are attribute types.
27503
27504 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27505
27506         * delegate.cs (Delegate.Define): Correctly define the types in the
27507         presence of fixed and array parameters.
27508
27509         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27510         doing FindMembers.
27511
27512         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27513         include NonPublic after the first iteration.
27514
27515         * class.cs (Indexer.CheckBase): Only check if both parents are
27516         non-null. 
27517
27518         * cs-parser.jay (accessor_body): If empty, set to null.
27519
27520         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27521         same code path here to resolve constants names that we did have in
27522         MemberAccess.DoResolve.  There is too much code duplicated here.
27523
27524 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27525
27526         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27527
27528         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27529         to MakeUnionSet.
27530
27531         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27532         tokens, numbers and strings.
27533
27534         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27535         parenthesis.
27536
27537         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27538         asyncronous parameters and the regular parameters.  
27539
27540         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27541         specify the target directory.
27542
27543         * expression.cs: (This.DoResolve): Simplify
27544         (As.Emit): Optimize, do not generate IsInst if the expression is
27545         always of the given type.
27546
27547         (Is.DoResolve): Bug fix, we were reporting both always/never for
27548         the is expression.
27549
27550         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27551         creating too many unnecessary arrays.
27552
27553 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27554
27555         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27556         fields instead of rolling our own initializer.   Takes care of all
27557         implicit conversions, and drops unnecessary static checks/argument.
27558
27559 2002-03-31  Dick Porter  <dick@ximian.com>
27560
27561         * driver.cs: use the GetDirectories() return values properly, and
27562         use "/" as path separator.
27563
27564 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27565
27566         * expression.cs (Unary): Optimize - - expr into expr.
27567         (Binary): Optimize a + (-b) into a -b.
27568
27569         * codegen.cs (CodeGen): Made all methods static.
27570
27571 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27572
27573         * rootcontext.cs: 
27574
27575         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27576         TypeBuilder property.
27577
27578         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27579         instead. 
27580
27581         * tree.cs: Removed the various RecordXXXX, and replaced with a
27582         single RecordDecl.  Removed all the accessor methods, and just
27583         left a single access point Type 
27584
27585         * enum.cs: Rename DefineEnum to DefineType.
27586
27587         * decl.cs: New abstract method `DefineType' used to unify the
27588         Defines for Enumerations, Interfaces, TypeContainers and
27589         Delegates.
27590
27591         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27592         LookupBaseClasses method that used to live in class.cs and
27593         interface.cs here, and renamed to FindType.
27594
27595         * delegate.cs: Implement DefineType.  Take advantage of the
27596         refactored pattern for locating the parent builder without taking
27597         the parent_builder argument (which we know does not work if we are
27598         nested, and triggering a toplevel definition).
27599
27600 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27601
27602         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27603         accessibility of a member has changed during override and report
27604         an error if so.
27605
27606         * class.cs (Method.Define, Property.Define): Only complain on
27607         overrides if the method is private, any other accessibility is
27608         fine (and since we just checked the permission is the same, we are
27609         good to go).
27610
27611         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27612         and elif are processed always.  The other pre-processing
27613         directives are only processed if we are "taking" the path
27614
27615 2002-03-29  Martin Baulig  <martin@gnome.org>
27616
27617         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27618         current location is not Null.
27619
27620         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27621         a separate method so we can profile it.
27622
27623         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27624         `span.Seconds' are just seconds, but no minutes or hours.
27625         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27626
27627 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27628
27629         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27630         Remove the gratuitous set of Final:
27631
27632                                 // If an interface implementation, then we can set Final.
27633                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27634                                     implementing.DeclaringType.IsInterface)
27635                                         flags |= MethodAttributes.Final;
27636
27637         I do not know what I was smoking when I used that.
27638
27639
27640         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27641         step into fixing the name resolution issues for delegates and
27642         unifying the toplevel name resolution.
27643
27644 2002-03-28  Martin Baulig  <martin@gnome.org>
27645
27646         * class.cs (Method.Emit): If we have a symbol writer, call its
27647         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27648         tell it about the current method.
27649
27650         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27651         writer that we're going to emit the first byte of IL code for a new
27652         statement (a new source line).
27653         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27654         EmitContext.Mark() before emitting any code.
27655
27656         * location.cs (SymbolDocument): Return null when we're Null.
27657
27658         * statement.cs (Statement): Moved the `Location loc' variable here.
27659         (Statement.EmitBoolExpression): If we have a symbol writer, call
27660         ec.Mark() before emitting any code to tell it that we're at the
27661         beginning of a new statement.
27662         (StatementExpression): Added `Location' argument to the constructor.
27663         (Block): Added public readonly variable `StartLocation' and public
27664         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27665         (Block): Added constructor which takes a start and end location.
27666         (Block.SetEndLocation): New method. This sets the end location.
27667         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27668         local variables we create.
27669         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27670         each statement and do also mark the begin and end of the block.
27671
27672         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27673         tell it the current lexer.Location, use Location.Null for the end of the
27674         block.
27675         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27676         current block, set its end location using SetEndLocation().
27677         (statement_expression): StatementExpression constructor now takes the
27678         lexer.Location as additional argument.
27679         (for_statement, declare_local_variables): Likewise.
27680         (declare_local_variables): When creating a new implicit block, use the
27681         new Block constructor and pass it the lexer.Location.
27682
27683 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27684
27685         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27686         members also on the parent interfaces recursively.
27687
27688 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27689
27690         * report.cs: Use new formats, since Gonzalo finished the missing
27691         bits. 
27692
27693         * expression.cs (Binary.ResolveOperator): added missing operator|
27694         operator& and operator^ for bool/bool.
27695
27696         * cs-parser.jay: CheckDef now takes a Location argument that is
27697         used to report errors more precisly (instead of reporting the end
27698         of a definition, we try to track something which is a lot closer
27699         to the source of the problem).
27700
27701         * cs-tokenizer.cs: Track global token use, so we can properly flag
27702         the use of #define/#undef after the first token has been seen.
27703
27704         Also, rename the reportXXXX to Error_DescriptiveName
27705
27706         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27707         TypeContainer, so that Enum and Interface can use this too.
27708
27709         * class.cs (TypeContainer.LookupInterfaceOrClass,
27710         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27711         `builder' argument.  Typically this was used to pass the parent
27712         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27713         the definition).  
27714
27715         The problem is that a nested class could trigger the definition of
27716         a toplevel class, and the builder would be obviously wrong in that
27717         case. 
27718
27719         So we drop this argument, and we compute dynamically the
27720         TypeBuilder/ModuleBuilder (the correct information was available
27721         to us anyways from DeclSpace.Parent)
27722
27723         * interface.cs (Interface.DefineInterface): Drop builder
27724         parameter cleanup like class.cs
27725
27726         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27727         like class.cs
27728
27729         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27730         values. 
27731
27732         (Try.Emit): Propagate the returns value from the statement.
27733
27734         (Return.Emit): Even if we are leavning 
27735
27736         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27737
27738         * modifiers.cs: Fix the computation of MethodAttributes flags.
27739
27740 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27741
27742         * driver.cs: allow compilation of files that start with '/'.
27743         Add a default case when checking the argument of --target.
27744
27745 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27746
27747         * interface.cs: Implement the same search algorithm for types in
27748         the interface code.
27749
27750         * delegate.cs: Do not allow multiple definition.
27751
27752         * Recovered ChangeLog that got accidentally amputated
27753
27754         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27755
27756         * rootcontext.cs: Load manually enum to allow core classes to
27757         contain enumerations.
27758
27759         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27760         Update to new static methods in TypeManager.
27761
27762         * typemanager.cs (GetMethod, GetConstructor): Use our
27763         implementation of FindMembers to find the members, since during
27764         corlib compilation, the types are TypeBuilders and GetMethod and
27765         GetConstructor do not work.
27766
27767         Make all methods in TypeManager static.
27768
27769         (InitCodeHelpers): Split the functionality from
27770         the InitCodeTypes function.
27771
27772         * driver.cs: Call InitCodeHelpers after we have populated the
27773         types. 
27774
27775         * cs-parser.jay (delegate_declaration): we did not used to compute
27776         the delegate name correctly for void delegates.
27777
27778 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27779
27780         * rootcontext.cs (RootContext): Init the interface_resolve_order
27781         and type_container_resolve_order always.
27782
27783         (ResolveCore, BootstrapCorlib_ResolveClass,
27784         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27785         compiler when compiling with --nostdlib
27786
27787         * class.cs (TypeContainer.DefineType): Check that our parent is
27788         not null.  This test is most important when we are bootstraping
27789         the core types.
27790
27791         * codegen.cs: Split out the symbol writing code.
27792
27793 2002-03-25  Martin Baulig  <martin@gnome.org>
27794
27795         * driver.cs (-g): Made -g an alias for --debug.
27796
27797 2002-03-24  Martin Baulig  <martin@gnome.org>
27798
27799         * codegen.cs (SymbolWriter): New public variable. Returns the
27800         current symbol writer.
27801         (CodeGen): Added `bool want_debugging_support' argument to the
27802          constructor. If true, tell the ModuleBuild that we want debugging
27803         support and ask it for the ISymbolWriter.
27804         (Save): If we have a symbol writer, call it's Close() method after
27805         saving the assembly.
27806
27807         * driver.c (--debug): New command line argument to create a
27808         debugger information file.
27809
27810         * location.cs (SymbolDocument): New public property. Returns an
27811         ISymbolDocumentWriter object for the current source file or null
27812         if we don't have a symbol writer.
27813
27814 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27815
27816         * driver.cs (LoadAssembly): Correctly return when all the paths
27817         have been tried and not before.
27818
27819         * statement.cs (Switch.Emit): return the actual coverage for this
27820         statement (returns/not-returns)
27821
27822         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27823         switch of the statement if we are the last switch section.  That
27824         kills two problems: try/catch problems (we used to emit an empty
27825         nop at the end) and switch statements where all branches would
27826         return. 
27827
27828 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27829
27830         * driver.cs: Add default assemblies (the equivalent to the
27831         Microsoft CSC.RSP file)
27832
27833         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27834         also update tokens_seen and set it to false.
27835
27836         * driver.cs: Implement --recurse for Mike.
27837
27838         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27839         correctly splitting out the paths.
27840
27841 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27842
27843         * interface.cs (Interface.PopulateProperty): Instead of using
27844         `parent' as the declaration space for the set parameters, use
27845         `this' 
27846
27847         * support.cs (InternalParameters): InternalParameters constructor
27848         takes a DeclSpace instead of a TypeContainer.
27849
27850         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27851         types are being initialized, load the address of it before calling
27852         the function.  
27853
27854         (New): Provide a mechanism to disable the generation of local
27855         value type temporaries when the caller will be providing us with
27856         an address to store it.
27857
27858         (ArrayCreation.EmitDynamicInitializers): Use it.
27859
27860 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27861
27862         * expression.cs (Invocation.EmitArguments): Only probe for array
27863         property if there is more than one argument.  Sorry about that.
27864
27865         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27866         empty param arrays.
27867
27868         * class.cs (Method.LabelParameters): Fix incorrect code path that
27869         prevented the `ParamArrayAttribute' from being applied to the
27870         params attribute.
27871
27872 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27873
27874         * support.cs (ReflectionParameters): Correctly compute whether the
27875         last argument is a params array.  Fixes the problem with
27876         string.Split ('a')
27877
27878         * typemanager.cs: Make the assemblies array always be non-null
27879         (empty, but non-null)
27880
27881         * tree.cs (RecordDecl): New function that abstracts the recording
27882         of names.  This reports error 101, and provides a pointer to the
27883         previous declaration.  Fixes a crash in the compiler.
27884
27885         * cs-parser.jay (constructor_declaration): Update to new grammar,
27886         and provide a constructor_body that can be empty.
27887
27888 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27889
27890         * driver.cs: Add support for --resources.
27891
27892         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27893         Make all types for the various array helper methods be integer.
27894
27895         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27896         CheckState to ConvCast.
27897
27898         (ConvCast): Now it takes a `checked' state argument, to avoid
27899         depending on the emit context for the conversion, and just using
27900         the resolve time setting.
27901
27902         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27903         instead of Invocation.EmitArguments.  We do not emit the original
27904         arguments, instead we emit those which have been converted to
27905         unsigned int expressions.
27906
27907         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27908
27909         * codegen.cs: ditto.
27910
27911         * expression.cs (LocalVariableReference): Drop the use of the
27912         Store function that depended on the variable index.
27913
27914         * statement.cs (VariableInfo): Drop the `Idx' property from this
27915         class, as this is not taking into account the indexes for
27916         temporaries tat we generate during the execution, getting the
27917         indexes wrong.
27918
27919         * class.cs: First emit class initializers, then call the parent
27920         constructor. 
27921
27922         * expression.cs (Binary): Fix opcode emision.
27923         (UnaryMutator.EmitCode): Support checked code generation
27924
27925         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27926         matches for events for both the Static and Instance scans,
27927         pointing to the same element.   Fix that.
27928
27929 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27930
27931         * rootcontext.cs (ResolveTree): Always set the
27932         interface_resolve_order, because nested interfaces will be calling
27933         into us.
27934
27935         * class.cs (GetInterfaceOrClass): Track the same resolution
27936         process used by TypeManager.LookupType.  This fixes the nested
27937         type lookups in class declarations (separate path from
27938         LookupType). 
27939
27940         (TypeContainer.DefineType): Also define nested interfaces.
27941         (TypeContainer.RegisterOrder): New public function used to
27942         register the order in which child interfaces need to be closed.
27943
27944         Nested interfaces need to be closed after their parents have been
27945         created. 
27946
27947         * interface.cs (InterfaceAttr): Put all the logic for computing
27948         the interface attribute here. 
27949
27950         (DefineInterface): Register our interface order with the
27951         RootContext or with the TypeContainer depending on the case.
27952
27953 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27954
27955         * cs-parser.jay: rework foreach statement to work with the new
27956         changes to the policy on SimpleNames.
27957
27958         * report.cs: support Stacktrace on warnings as well.
27959
27960         * makefile: drop --unsafe and /unsafe from the compile.
27961
27962 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27963
27964         * ecore.cs (StandardConversionExists): Modify to take an Expression
27965         as the first parameter. Ensure we do null -> reference type conversion
27966         checking.
27967
27968         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27969         temporary Expression objects.
27970
27971 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27972
27973         * interface.cs: workaround bug in method overloading resolution
27974         (there is already a bugzilla bug for it).
27975
27976 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27977
27978         We could also solve this problem by having a separate path for
27979         performing type lookups, instead of DoResolve, we could have a
27980         ResolveType entry point, and only participating pieces of the
27981         production (simplename, deref, array) would implement this. 
27982
27983         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27984         signal SimpleName to only resolve type names and not attempt to
27985         resolve anything else.
27986
27987         * expression.cs (Cast): Set the flag.
27988
27989         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27990
27991         * class.cs: Only report 108 if there is no `new' modifier.
27992
27993         * cs-parser.jay: rework foreach statement to work with the new
27994         changes to the policy on SimpleNames.
27995
27996         * report.cs: support Stacktrace on warnings as well.
27997
27998         * makefile: drop --unsafe and /unsafe from the compile.
27999
28000 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
28001
28002         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28003         lookups here, instead of doing that at parse time.  This means
28004         that our grammar will not introduce `LocalVariableReferences' as
28005         expressions at this point.  That solves the problem of code like
28006         this:
28007
28008         class X {
28009            static void Main ()
28010            { int X = 1;
28011             { X x = null }}}
28012
28013         This is only half the fix.  The full fix requires parameters to
28014         also be handled in this way.
28015
28016         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
28017         makes the use more obvious of the DeclSpace.  The
28018         ec.TypeContainer.TypeBuilder is now only used to pull the
28019         TypeBuilder for it.
28020
28021         My theory is that I can get rid of the TypeBuilder completely from
28022         the EmitContext, and have typecasts where it is used (from
28023         DeclSpace to where it matters).  
28024
28025         The only pending problem is that the code that implements Aliases
28026         is on TypeContainer, and probably should go in DeclSpace.
28027
28028         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28029         lookups here, instead of doing that at parse time.  This means
28030         that our grammar will not introduce `LocalVariableReferences' as
28031         expressions at this point.  That solves the problem of code like
28032         this:
28033
28034         class X {
28035            static void Main ()
28036            { int X = 1;
28037             { X x = null }}}
28038
28039         This is only half the fix.  The full fix requires parameters to
28040         also be handled in this way.
28041
28042         * class.cs (Property.DefineMethod): When implementing an interface
28043         method, set newslot, when implementing an abstract method, do not
28044         set the flag (before we tried never setting it, or always setting
28045         it, which is the difference).
28046         (Indexer.DefineMethod): same.
28047         (Method.DefineMethod): same.
28048
28049         * ecore.cs: Only set the status used flag if we get back a Field.
28050
28051         * attribute.cs: Temporary hack, so Paolo can keep working.
28052
28053 2002-03-08  Ravi Pratap  <ravi@ximian.com>
28054
28055         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
28056         the unmanaged type in the case we have a MarshalAs attribute.
28057
28058         (Resolve): Handle the case when we are parsing the special MarshalAs
28059         attribute [we need to store the unmanaged type to use later]
28060
28061         * typemanager.cs (marshal_as_attr_type): Built in type for the 
28062         MarshalAs Attribute.
28063
28064         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
28065         on parameters and accordingly set the marshalling info.
28066
28067 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
28068
28069         * class.cs: Optimizing slightly by removing redundant code after
28070         we switched to the `NoTypes' return value.
28071         (Property.DefineMethod): use NoTypes here too.
28072
28073         This fixes the bug I introduced in my last batch of changes.
28074
28075 2002-03-05  Ravi Pratap  <ravi@ximian.com>
28076
28077         * tree.cs (RecordEnum): Add. We now keep track of enums too.
28078
28079         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
28080         Enums since those are types too. 
28081
28082         * cs-parser.jay (enum_declaration): Record enums as we parse them.
28083
28084         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
28085         thanks to a call during the lookup process.
28086
28087 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
28088
28089         * statement.cs (Foreach): Lots of work to accomodate a particular
28090         kind of foreach statement that I had not kept in mind.  It is
28091         possible to have foreachs on classes that provide a GetEnumerator
28092         method that return objects that implement the "pattern" for using
28093         a foreach, there is no need to support GetEnumerator
28094         specifically. 
28095
28096         This is needed to compile nant.
28097
28098         * decl.cs: Only report 114 if the member is not `Finalize' and if
28099         the warning level is at least 2.
28100
28101         * class.cs: Moved the compare function from Method to
28102         MethodSignature. 
28103
28104         (MethodSignature.InheritableMemberSignatureCompare): Add new
28105         filter function that is used to extract inheritable methods from a
28106         class. 
28107
28108         (Method.Define): Use the new `inheritable_method_signature_filter'
28109         delegate
28110
28111         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
28112         command. 
28113
28114 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
28115
28116         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
28117
28118         * cs-parser.jay: Add opt_semicolon to the interface declaration.
28119
28120         * expression.cs: Pass location information to
28121         ConvertImplicitStandard. 
28122
28123         * class.cs: Added debugging code to track return values from
28124         interfaces. 
28125
28126 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
28127
28128         * expression.cs (Is.DoResolve): If either side of the `is' is an
28129         interface, do not flag the warning.
28130
28131         * ecore.cs (ImplicitReferenceConversion): We need a separate test
28132         for interfaces
28133
28134         * report.cs: Allow for --fatal to be used with --probe.
28135
28136         * typemanager.cs (NoTypes): Move the definition for the empty Type
28137         array here. 
28138
28139         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
28140         properties. 
28141         (TypeContainer.DefineProxy): New function used to proxy to parent
28142         implementations when implementing interfaces.
28143         (TypeContainer.ParentImplements): used to lookup if our parent
28144         implements a public function that is required by an interface.
28145         (TypeContainer.VerifyPendingMethods): Hook this up.
28146
28147         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
28148         `modules' and `assemblies' arraylists into arrays.  We only grow
28149         these are the very early start up of the program, so this improves
28150         the speedof LookupType (nicely measured).
28151
28152         * expression.cs (MakeByteBlob): Replaced unsafe code with
28153         BitConverter, as suggested by Paolo.
28154
28155         * cfold.cs (ConstantFold.Binary): Special case: perform constant
28156         folding of string concatenation, but if either side is a string,
28157         and the other is not, then return null, and let the runtime use
28158         the concatenation on the string plus the object (using
28159         `Object.ToString'). 
28160
28161 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
28162
28163         Constant Folding has been implemented now.
28164
28165         * expression.cs (Unary.Reduce): Do not throw an exception, catch
28166         the error instead on types that are not supported in one's
28167         complement. 
28168
28169         * constant.cs (Constant and all children): New set of functions to
28170         perform implict and explicit conversions.
28171
28172         * ecore.cs (EnumConstant): Implement the new functions to perform
28173         conversion by proxying to the child expression.
28174
28175         * codegen.cs: (ConstantCheckState): Constant evaluation has its
28176         own separate setting that can not be turned off from the command
28177         line using --unchecked or --checked and is only controlled using
28178         the checked/unchecked statements and expressions.  This setting is
28179         used by the constant folder to flag errors.
28180
28181         * expression.cs (CheckedExpr, UncheckedExpr): Set the
28182         ConstantCheckState as well.   
28183
28184         During Resolve, they also have to flag the state, because the
28185         constant folder runs completely in the Resolve phase.
28186
28187         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
28188         well.
28189
28190 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28191
28192         * cfold.cs: New file, this file contains the constant folder.
28193
28194         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
28195         argument to track whether we are using the resulting address to
28196         load or store a value and provide better error messages. 
28197
28198         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
28199         new AddressOf arguments.
28200
28201         * statement.cs (Foreach.EmitCollectionForeach): Update
28202
28203         * expression.cs (Argument.Emit): Call AddressOf with proper
28204         arguments to track usage.
28205
28206         (New.DoEmit): Call AddressOf with new arguments.
28207
28208         (Unary.Emit): Adjust AddressOf call.
28209
28210 2002-03-01  Ravi Pratap  <ravi@ximian.com>
28211
28212         * cs-parser.jay (member_access): Change the case for pre-defined types
28213         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
28214         this suggestion.
28215
28216         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
28217         a method body.
28218
28219         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
28220         essentially like methods and apply attributes like MethodImplOptions to them too.
28221
28222         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
28223         not being null.
28224
28225         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
28226         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
28227         is the DeclSpace.
28228
28229         * Update code everywhere accordingly.
28230
28231         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28232
28233         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28234
28235 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28236
28237         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28238         try performing lookups against those instead of jumping straight into using
28239         the 'using' clauses.
28240
28241         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28242
28243         (LookupType): Perform lookups in implicit parents too.
28244
28245         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28246         sequence as RootContext.LookupType. 
28247
28248         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28249         the various cases of namespace lookups into this method.
28250
28251 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28252
28253         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28254         in positional arguments)
28255
28256         * class.cs (Operator): Update the AllowedModifiers to contain
28257         extern. 
28258
28259         * cs-parser.jay: Update operator declaration to allow for the
28260         operator body to be empty.
28261
28262         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28263         values. 
28264
28265 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28266
28267         * class.cs (Method.Emit): Label parameters.
28268
28269         * driver.cs: Return 1 or 0 as the program exit code.
28270
28271 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28272
28273         * expression.cs: Special case the `null' object when trying to
28274         auto-compute the type, as anything can be explicitly converted to
28275         that. 
28276
28277         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28278         spotting this Paolo.
28279
28280         (Expression.ImplicitNumericConversion): Perform comparissions of
28281         the type using the underlying type in the case of an enumeration
28282         rather than using the enumeration type for the compare.
28283
28284         Cope with the underlying == type case, which is not possible to
28285         catch before. 
28286
28287         (Expression.ConvertNumericExplicit): Perform comparissions of
28288         the type using the underlying type in the case of an enumeration
28289         rather than using the enumeration type for the compare.
28290
28291         * driver.cs: If the user does not supply an extension, assume .exe
28292
28293         * cs-parser.jay (if_statement): Rewrote so that we can track the
28294         location for the if statement.
28295
28296         * expression.cs (Binary.ConstantFold): Only concat strings when
28297         the operation is "+", not everything ;-)
28298
28299         * statement.cs (Statement.EmitBoolExpression): Take a location
28300         argument. 
28301         (If, While, Do): Track location.
28302
28303         * expression.cs (Binary.ResolveOperator): In the object + string
28304         case, I was missing a call to ConvertImplicit
28305
28306 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28307
28308         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28309         Location arguments. Ensure we use RootContext.LookupType to do our work
28310         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28311
28312         * interface.cs (PopulateMethod): Handle the type of the parameter being
28313         null gracefully.
28314
28315         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28316         have a params method with no fixed arguments and a call is made with no
28317         arguments.
28318
28319 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28320
28321         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28322         the verbatim-string-literal
28323
28324         * support.cs (InternalParameters.ParameterModifier): handle null
28325         fixed parameters.
28326         (InternalParameters.ParameterType): ditto.
28327
28328         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28329         duplicating the name of the variable parameter.
28330         (GetParameterByName): Fix bug where we were not looking up array
28331         paramters if they were the only present (thanks Paolo!).
28332         (GetParameterInfo): We only have an empty set of types if both
28333         fixed and array are set to null.
28334         (GetParameterInfo-idx): Handle FixedParameter == null
28335
28336         * cs-parser.jay: Handle the case where there is no catch
28337         statements (missing null test).
28338
28339 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28340
28341         * driver.cs (MainDriver): Be conservative on our command line
28342         handling.
28343
28344         Catch DirectoryNotFoundException when calling GetFiles.
28345
28346         (SplitPathAndPattern): Used to split the input specification into
28347         a path and a pattern that we can feed to Directory.GetFiles.
28348
28349 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28350
28351         * statement.cs (Fixed): Implement the last case of the Fixed
28352         statement (string handling).
28353
28354         * expression.cs (StringPtr): New class used to return a char * to
28355         a string;  Used by the Fixed statement.
28356
28357         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28358
28359         * expression.cs (Binary.ResolveOperator): Remove redundant
28360         MemberLookup pn parent type.
28361         Optimize union call, we do not need a union if the types are the same.
28362         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28363         type.
28364
28365         Specialize the use of MemberLookup everywhere, instead of using
28366         the default settings. 
28367
28368         (StackAlloc): Implement stackalloc keyword.
28369
28370         * cs-parser.jay: Add rule to parse stackalloc.
28371
28372         * driver.cs: Handle /h, /help, /?
28373
28374         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28375         before we supported unsafe code.
28376
28377         * makefile: add --unsafe to the self compilation of mcs.
28378
28379 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28380
28381         * expression.cs (PointerArithmetic): New class that is used to
28382         perform pointer arithmetic.
28383         (Binary.Resolve): Handle pointer arithmetic
28384         Handle pointer comparission.
28385         (ArrayPtr): Utility expression class that is used to take the
28386         address of an array.
28387
28388         (ElementAccess): Implement array access for pointers
28389
28390         * statement.cs (Fixed): Implement fixed statement for arrays, we
28391         are missing one more case before we are done.
28392
28393         * expression.cs (Indirection): Implement EmitAssign and set the
28394         ExprClass to Variable.  This allows pointer dereferences to be
28395         treated as variables, and to have values assigned to them.
28396
28397         * ecore.cs (Expression.StoreFromPtr): New utility function to
28398         store values dereferencing.
28399
28400 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28401
28402         * expression.cs (Binary.ResolveOperator): Ensure that we are
28403         not trying to operate on a void type - this fixes the reported
28404         bug.
28405
28406         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28407         the parent implementation is sealed.
28408
28409         * ../errors/cs0239.cs : Add.
28410
28411         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28412
28413         * typemanager.cs (unverifiable_code_type): Corresponds to 
28414         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28415         which have unsafe code in them.
28416
28417         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28418         unsafe context.
28419
28420 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28421
28422         * cs-tokenizer.cs: Add support for @"litreal strings"
28423
28424         Make tokenizer accept pre-processor directives
28425         on any column (remove the old C-like limitation). 
28426
28427         * rootcontext.cs (EmitCode): Emit any global attributes.
28428         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28429
28430         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28431
28432         * cs-parser.jay: Add support for global attributes.  
28433
28434 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28435
28436         * expression.cs (Indirection): New helper class.  Unary will
28437         create Indirection classes to be able to implement the
28438         IMemoryLocation interface on it.
28439
28440 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28441
28442         * cs-parser.jay (fixed_statement): reference the right statement.
28443
28444         * statement.cs (Fixed.Emit): Finish implementing the fixed
28445         statement for the &x case.
28446
28447 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28448
28449         * class.cs (Property.Define, Method.Define): Remove newslot when
28450         `implementing'.  
28451
28452         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28453         wrong.  NewSlot should only be used if the `new' keyword is present.
28454
28455         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28456         locating our system dir.  Sorry about this.
28457
28458 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28459
28460         * driver.cs (GetSystemDir): Compute correctly the location of our
28461         system assemblies.  I was using the compiler directory instead of
28462         the library directory.
28463
28464 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28465
28466         * expression.cs (BetterFunction): Put back in what Miguel commented out
28467         since it is the correct fix. The problem is elsewhere ;-)
28468
28469         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28470         parameters of the parms method are themselves compatible or not !
28471
28472         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28473         to check that a class implements an interface before saying that an implicit
28474         conversion was allowed. Use ImplementsInterface to do the checking.
28475
28476 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28477
28478         * class.cs (Method.Define): Track whether we are an explicit
28479         implementation or not.  And only call DefineMethodOverride if we
28480         are an explicit implementation.
28481
28482         (Property.DefineMethod): Ditto.
28483
28484 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28485
28486         * expression.cs (BetterFunction): Catch hideous bug which was
28487          preventing us from detecting ambiguous calls due to implicit casts i.e
28488         cs0121.
28489
28490 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28491
28492         * support.cs (Pair): Remove un-needed method.  I figured why I was
28493         getting the error in cs-parser.jay, the variable in a foreach loop
28494         is readonly, and the compiler does not really treat this as a variable.
28495
28496         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28497         instead of EQUALS in grammar.  
28498
28499         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28500
28501         * expression.cs (Unary.DoResolve): Check whether the argument is
28502         managed or not.
28503
28504 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28505
28506         * support.cs: Api for Pair to set a value.  Despite the fact that
28507         the variables are public the MS C# compiler refuses to compile
28508         code that accesses the field if the variable is part of a foreach
28509         statement. 
28510
28511         * statement.cs (Fixed): Begin implementation of the fixed
28512         statement.
28513
28514         (Block.AddVariable): Return the VariableInfo on success and null
28515         on failure instead of true/false. 
28516
28517         * cs-parser.jay (foreach): Catch errors on variables already
28518         defined (we were ignoring this value before) and properly unwind
28519         the block hierarchy
28520
28521         (fixed_statement): grammar for the fixed statement.
28522
28523 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28524
28525         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28526         pointer types to be incretemented.
28527
28528         (SizeOf): Implement.
28529
28530         * cs-parser.jay (pointer_member_access): Implement
28531         expr->IDENTIFIER production.
28532
28533         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28534         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28535         on safe contexts.
28536
28537         (Unary): Implement indirection.
28538
28539         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28540         use in non-unsafe context).
28541
28542         (SimpleName.DoResolve): Check for pointers in field access on safe
28543         contexts. 
28544
28545         (Expression.LoadFromPtr): Factor the load-indirect code in this
28546         function.  This was duplicated in UnboxCast and ParameterReference
28547
28548 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28549
28550         * expression.cs (ComposedCast): report an error if a pointer cast
28551         is used in a safe region.
28552
28553         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28554         pointer type casts in unsafe context.
28555
28556         * codegen.cs (EmitContext): Set up IsUnsafe.
28557
28558         * cs-parser.jay (non_expression_type): Add productions for pointer
28559         casts. 
28560
28561         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28562         code.  We should not use force into static mode if the method is
28563         not virtual.  Fixes bug in MIS
28564
28565         * statement.cs (Do.Emit, While.Emit, For.Emit,
28566         Statement.EmitBoolExpression): Add support to Do and While to
28567         propagate infinite loop as `I do return' semantics.
28568
28569         Improve the For case to also test for boolean constants.
28570
28571         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28572         to the list of attributes we can add.
28573
28574         Remove `EmitContext' argument.
28575
28576         * class.cs (Method.Define): Apply parameter attributes.
28577         (Constructor.Define): Apply parameter attributes.
28578         (MethodCore.LabelParameters): Move here the core of labeling
28579         parameters. 
28580
28581         * support.cs (ReflectionParameters.ParameterModifier,
28582         InternalParameters.ParameterModifier): Use IsByRef on the type and
28583         only return the OUT bit for these parameters instead of in/out/ref
28584         flags.
28585
28586         This is because I miss-understood things.  The ParameterInfo.IsIn
28587         and IsOut represent whether the parameter has the [In] and [Out]
28588         attributes set.  
28589
28590 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28591
28592         * ecore.cs (FieldExpr.Emit): Release temporaries.
28593
28594         * assign.cs (LocalTemporary.Release): new function.
28595
28596         * codegen.cs (EmitContext.GetTemporaryStorage,
28597         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28598         temporary storage.  Now we can "put back" localbuilders when we
28599         are done with them
28600
28601 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28602
28603         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28604         need to make a copy of the variable to generate verifiable code.
28605
28606 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28607
28608         * driver.cs: Compute dynamically the system directory.
28609
28610         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28611         Slower, but more generally useful.  Used by the abstract
28612         registering implementation. 
28613
28614         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28615         the rules for the special rule on Type/instances.  First check if
28616         we have the same name, and if so, try that special static path
28617         rather than the instance path.
28618
28619 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28620
28621         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28622         for, while and if.
28623
28624         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28625         Enum, ValueType, Delegate or Array for non-corlib compiles.
28626
28627         * cs-tokenizer.cs: Catch long identifiers (645)
28628
28629         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28630         piece of code.
28631
28632         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28633         fix, we were returning too early, so we were not registering
28634         pending methods from abstract classes.
28635
28636         Do not register pending methods if the class is abstract.
28637
28638         * expression.cs (Conditional.DoResolve): Report circular implicit
28639         conversions when we neecd to compute it for conditional
28640         expressions. 
28641
28642         (Is.DoResolve): If the expression is always of the provided type,
28643         flag warning 183.  If the expression can not ever be of the
28644         provided type flag warning 184.
28645
28646         * class.cs: Catch 169 as well.
28647
28648         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28649         read. 
28650
28651 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28652
28653         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28654
28655 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28656
28657         * interface.cs: (PopulateMethod): Check for pointers being defined
28658         only if the unsafe context is active.
28659         (PopulateProperty): ditto.
28660         (PopulateIndexer): ditto.
28661
28662         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28663         specified.  If pointers are present, make sure that they are
28664         present in an unsafe context.
28665         (Constructor, Constructor.Define): ditto.
28666         (Field, Field.Define): ditto.
28667         (Property, Property.Define): ditto.
28668         (Event, Event.Define): ditto.
28669
28670         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28671         hashtable if there are classes or structs defined.
28672
28673         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28674         code, as the constant resolution moved.
28675
28676         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28677         the metadata, so we can flag error 133. 
28678
28679         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28680         pointer is being declared in an unsafe context.
28681
28682 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28683
28684         * modifiers.cs (Modifiers.Check): Require a Location argument.
28685         Report error 227 for Unsafe use.
28686
28687         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28688
28689         * statement.cs (For.Emit): If the test is null, then report that
28690         we do `return', as we wont reach anything afterwards.
28691
28692         (Switch.SwitchGoverningType): Track the expression that matched
28693         the conversion.
28694
28695         * driver.cs: Allow negative numbers as an error code to flag.
28696
28697         * cs-parser.jay: Handle 1551.
28698
28699         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28700
28701 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28702
28703         * cs-parser.jay: Report 1518 (type declaration can only contain
28704         class, struct, interface, enum or delegate)
28705
28706         (switch_label): Report 1523 (keywords `case' or `default' must
28707         preced code)
28708
28709         (opt_switch_sections): Report 1522 (empty switch)
28710
28711         * driver.cs: Report 1515 (response file specified multiple times)
28712         Report 1516 (Source file specified multiple times).
28713
28714         * expression.cs (Argument.Resolve): Signal 1510
28715
28716         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28717         access not allowed in static code)
28718
28719 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28720
28721         * typemanager.cs (IsPointerType): Utility method which we are going
28722         to need a lot.
28723
28724         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28725         the object type, so we take care of that.
28726
28727         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28728
28729         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28730         added to non-params parameters :-)
28731
28732         * typemanager.cs (CSharpName): Include 'void' type too. 
28733
28734         (void_ptr_type): Include in the set of core types.
28735
28736         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28737         duplicating code.
28738
28739         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28740         an unsafe context.
28741
28742         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28743         completely forgotten about it.
28744
28745 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28746
28747         * cs-parser.jay (pointer_type): Add. This begins our implementation
28748         of parsing rules for unsafe code.
28749
28750         (unsafe_statement): Implement.
28751
28752         (embedded_statement): Modify to include the above.
28753
28754         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28755
28756         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28757         if the current context is an unsafe one.
28758
28759         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28760         are handled differently, we need separate rules for them.
28761
28762         (local_variable_declaration): Update to use local_variable_pointer_type
28763         to allow variable declarations of unmanaged pointer types.
28764
28765         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28766         in unsafe contexts.
28767
28768         * ../errors/cs0214.cs : Add.
28769
28770 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28771
28772         * makefile: remove 'response' file when cleaning.
28773
28774 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28775
28776         * cs-parser.jay: Report 1524.
28777
28778 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28779
28780         * typemanager.cs (RegisterMethod): drop checking if we have
28781         registered this from here
28782
28783 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28784
28785         * class.cs (Method.EmitDestructor): Implement calling our base
28786         destructor. 
28787
28788         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28789         value of InFinally.
28790
28791         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28792         this routine and will wrap the call in a try/catch block.  Deal
28793         with the case.
28794
28795 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28796
28797         * ecore.cs (Expression.MemberLookup): instead of taking a
28798         parameter `same_type' that was used to tell whether we could
28799         access private members we compute our containing type from the
28800         EmitContext.
28801
28802         (FieldExpr): Added partial support for volatile fields.  This does
28803         not work for volatile fields exposed from assemblies, as I can not
28804         figure out how to extract the modreq from it.
28805
28806         Updated all the source files to use this.
28807
28808         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28809         because it is referenced by MemberLookup very often. 
28810
28811 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28812
28813         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28814         TypeBuilder.GetCustomAttributes to retrieve what we need.
28815
28816         Get rid of redundant default_member_attr_type as this is the same as
28817         default_member_type which already exists.
28818
28819         * interface.cs, attribute.cs : Update accordingly.
28820
28821 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28822
28823         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28824         work for TYpeBuilders though.  Ravi, can you please fix this?
28825
28826         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28827
28828         * expression.cs (Argument.Emit): Handle the case of ref objects
28829         being passed to ref functions;  
28830
28831         (ParameterReference.EmitLoad): Loads the content of the pointer
28832         without dereferencing.
28833
28834 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28835
28836         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28837
28838 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28839
28840         * class.cs (Indexer.DefineMethod): Incorporate the interface
28841         type in the name of the method if we are doing explicit interface
28842         implementation.
28843
28844         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28845
28846         (BetterConversion): Fix extremely trivial bug where we were referring to
28847         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28848         again !
28849
28850         * ../errors/bug16.cs : Add although we have fixed it.
28851
28852 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28853
28854         * expression.cs (BaseIndexer): Begin implementation.
28855
28856         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28857
28858         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28859         production directly to remove a shift/reduce, and implement
28860         explicit interface implementation.
28861
28862         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28863         after a floating point suffix.
28864
28865         * expression.cs (DoNumericPromotions): Improved the conversion for
28866         uint/uint.  If we have a constant, we avoid doing a typecast to a
28867         larger type.
28868
28869         * class.cs (Indexer): Implement explicit interface implementation
28870         for indexers.
28871
28872 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28873
28874         * class.cs: make the default instance constructor public and hidebysig.
28875
28876 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28877
28878         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28879         so we can call it from elsewhere.
28880
28881         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28882         we emit it internally if the class has a defined indexer; otherwise the user
28883         emits it by decorating the class definition with the DefaultMemberAttribute.
28884
28885         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28886         attribute is not used on a type which defines an indexer.
28887
28888         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28889         character when we skip whitespace.
28890
28891         * ../errors/cs0646.cs : Add.
28892
28893 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28894
28895         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28896         again. 
28897
28898         * makefile: Add practical target `mcs3.exe' which builds the third
28899         generation compiler. 
28900
28901         * expression.cs (New): Fix structures constructor calling.
28902
28903         * class.cs (Property, Method, Indexer): Emit Final flag on the
28904         method if we are an interface implementation and we are not
28905         abstract. 
28906
28907         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28908         whether this property is referencing a `base' method.
28909
28910         * expression.cs (Invocation.EmitCall): take an extra argument:
28911         is_base, this is used to determine whether the `call' or
28912         `callvirt' opcode should be used.
28913
28914
28915         * delegate.cs: update EmitCall.
28916
28917         * class.cs (Method.Define): Set NewSlot for the cases where we are
28918         not implementing an interface method.
28919
28920         (Property.Define): ditto.
28921
28922 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28923
28924         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28925         'r'.  Allows mcs to parse itself fully.
28926
28927 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28928
28929         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28930         of the number of initializers that require the InitializeArray method.
28931
28932         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28933         update the above field where necessary.
28934
28935         (MakeByteBlob): Update accordingly.
28936
28937         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28938         greater than 2.
28939
28940         (EmitDynamicInitializers): Update in accordance with the new optimization.
28941
28942         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28943         same OpCode applies.
28944
28945         * cs-parser.jay : Fix some glaring errors I introduced.
28946
28947 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28948
28949         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28950         so that we can check for name clashes there too.
28951
28952         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28953         for interface indexers.
28954
28955         * interfaces.cs (Define): Emit the default member attribute.
28956
28957         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28958         variable was being referred to while setting the value ;-)
28959
28960 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28961
28962         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28963         byte-by-byte information when we know the data is zero.
28964
28965         Make the block always a multiple of 4, because
28966         DefineInitializedData has a bug.
28967
28968         * assign.cs: Fix, we should assign from the temporary, not from
28969         the source. 
28970
28971         * expression.cs (MakeByteBlob): Fix my incorrect code.
28972
28973 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28974
28975         * typemanager.cs (EnumToUnderlying): This function is used to get
28976         the underlying type from an enumeration, because it does not
28977         always work. 
28978
28979         * constant.cs: Use the I4_S form for values between -128 and 127.
28980
28981         * statement.cs (Block.LookupLabel): Looks up a label.
28982         (Block): Drop support for labeled blocks.
28983
28984         (LabeledStatement): New kind of statement that represents a label
28985         only.
28986
28987         (Goto): Finally implement this bad boy.
28988
28989         * cs-parser.jay: Update to reflect new mechanism to implement
28990         labels.
28991
28992 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28993
28994         * codegen.cs (EmitContext.This): a codegen property that keeps the
28995         a single instance of this instead of creating many different this
28996         instances. 
28997
28998         * delegate.cs (Delegate.DoResolve): Update to use the property;
28999
29000         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
29001
29002         * expression.cs (BaseAccess.DoResolve): Ditto.
29003
29004 2001-12-29  Ravi Pratap  <ravi@ximian.com>
29005
29006         * typemanager.cs (methodimpl_attr_type): Add to hold the type
29007         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
29008
29009         (InitCoreTypes): Update accordingly.
29010
29011         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
29012         so we can quickly store the state.
29013
29014         (ApplyAttributes): Set the correct implementation flags
29015         for InternalCall methods.
29016
29017 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
29018
29019         * expression.cs (EmitCall): if a method is not virtual, then do
29020         not use callvirt on it.
29021
29022         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
29023         user defined stuff) requires the use of stobj, which takes an
29024         address on the stack instead of an array and an index.  So emit
29025         the Ldelema operation for it.
29026
29027         (EmitStoreOpcode): Use stobj for valuetypes.
29028
29029         (UnaryMutator.EmitCode): Use the right 1 value depending on
29030         whether we are dealing with int64/uint64, float or doubles.
29031
29032         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
29033         constructors that I implemented last night.
29034
29035         (Constructor.IsDefault): Fix to work properly for static
29036         constructors.
29037
29038         * cs-parser.jay (CheckDef): report method signature errors.
29039         Update error number 103 to be 132.
29040
29041         * decl.cs: New AdditionResult enumeration value: MethodExists.
29042         Although we do this check for methods later on in the semantic
29043         analysis, catching repeated default constructors is so easy that
29044         we catch these here. 
29045
29046         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
29047         promotions code.
29048
29049         (ParameterReference.EmitAssign, Emit): handle
29050         bools as bytes.
29051
29052         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
29053         (ArrayAccess.EmitStoreOpcode): ditto.
29054
29055         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
29056
29057         * expression.cs (MakeByteBlob): Complete all the missing types
29058         (uint, short, ushort, byte, sbyte)
29059
29060         * class.cs: Only init instance field initializers on instance
29061         constructors. 
29062
29063         Rename `constructors' to instance_constructors. 
29064
29065         (TypeContainer.AddConstructor): Only add constructors to the list
29066         if it is not static.
29067
29068         Make sure that we handle default_static_constructor independently
29069         everywhere where we handle instance_constructors
29070
29071 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
29072
29073         * class.cs: Do not lookup or create a base initializer for a
29074         static constructor.
29075
29076         (ConstructorInitializer.Resolve): use the proper type to lookup
29077         for constructors.
29078
29079         * cs-parser.jay: Report error 1585 (modifiers between type and name).
29080
29081         * enum.cs, interface.cs: Remove CloseType, this is taken care by
29082         in DeclSpace. 
29083
29084         * decl.cs: CloseType is now an virtual method, the default
29085         implementation just closes this type.
29086
29087 2001-12-28  Ravi Pratap  <ravi@ximian.com>
29088
29089         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
29090         to PreserveSig by default. Also emit HideBySig on such methods.
29091
29092         Basically, set the defaults to standard values.
29093
29094         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
29095         argument, if candidate is better, it can't be worse than the best !
29096
29097         (Invocation): Re-write bits to differentiate between methods being
29098         applicable in their expanded form and their normal form - for params
29099         methods of course.
29100
29101         Get rid of use_standard everywhere as only standard conversions are allowed
29102         in overload resolution. 
29103
29104         More spec conformance.
29105
29106 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29107
29108         * driver.cs: Add --timestamp, to see where the compiler spends
29109         most of its time.
29110
29111         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
29112         `this' in static code.
29113
29114         (SimpleName.DoResolve): Implement in terms of a helper function
29115         that allows static-references to be passed upstream to
29116         MemberAccess.
29117
29118         (Expression.ResolveWithSimpleName): Resolve specially simple
29119         names when called by MemberAccess to implement the special
29120         semantics. 
29121
29122         (Expression.ImplicitReferenceConversion): Handle conversions from
29123         Null to reference types before others, as Null's type is
29124         System.Object. 
29125
29126         * expression.cs (Invocation.EmitCall): Handle the special case of
29127         calling methods declared on a reference type from a ValueType
29128         (Base classes System.Object and System.Enum)
29129
29130         (MemberAccess.Resolve): Only perform lookups on Enumerations if
29131         the left hand side is a TypeExpr, not on every enumeration. 
29132
29133         (Binary.Resolve): If types are reference types, then do a cast to
29134         object on operators != and == of both arguments.
29135
29136         * typemanager.cs (FindMembers): Extract instance and static
29137         members if requested.
29138
29139         * interface.cs (PopulateProperty): Use void_type instead of null
29140         as the return type for the setter method.
29141
29142         (PopulateIndexer): ditto.
29143
29144 2001-12-27  Ravi Pratap  <ravi@ximian.com>
29145
29146         * support.cs (ReflectionParameters): Fix minor bug where we
29147         were examining the wrong parameter for the ParamArray attribute.
29148
29149         Cope with requests for the type of the parameter at position
29150         greater than the params parameter's. We now return the element
29151         type of the params array as that makes more sense.
29152
29153         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
29154         accordingly as we no longer have to extract the element type
29155         ourselves.
29156
29157         (Invocation.OverloadResolve): Update.
29158
29159 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29160
29161         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
29162         against IEnumerator, test whether the return value is a descendant
29163         of the IEnumerator interface.
29164
29165         * class.cs (Indexer.Define): Use an auxiliary method to implement
29166         the other bits of the method definition.  Begin support for
29167         explicit interface implementation.
29168
29169         (Property.DefineMethod): Use TypeManager.void_type instead of null
29170         for an empty return value.
29171
29172 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
29173
29174         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
29175         dealing with a FieldExpr which is composed of a FieldBuilder, in
29176         the code path we did extract the constant, but we should have
29177         obtained the underlying value to be able to cast it (otherwise we
29178         end up in an infinite loop, this is what Ravi was running into).
29179
29180         (ArrayCreation.UpdateIndices): Arrays might be empty.
29181
29182         (MemberAccess.ResolveMemberAccess): Add support for section
29183         14.5.4.1 that deals with the special case of E.I when E is a type
29184         and something else, that I can be a reference to a static member.
29185
29186         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
29187         handle a particular array type to create byte blobs, it is just
29188         something we dont generate byteblobs for.
29189
29190         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
29191         arguments. 
29192
29193         * location.cs (Push): remove the key from the hashtable that we
29194         are about to add.   This happens for empty files.
29195
29196         * driver.cs: Dispose files after we have parsed them.
29197
29198         (tokenize): new function that only runs the tokenizer on its
29199         input, for speed testing.
29200
29201 2001-12-26  Ravi Pratap  <ravi@ximian.com>
29202
29203         * class.cs (Event.Define): Define the private field only if there
29204         are no accessors defined.
29205
29206         * expression.cs (ResolveMemberAccess): If there is no associated
29207         field with the event, that means we have an event defined with its
29208         own accessors and we should flag error cs0070 since transforming
29209         ourselves into a field is not valid in that case.
29210
29211         * ecore.cs (SimpleName.DoResolve): Same as above.
29212
29213         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
29214         and charset to sane values.
29215
29216 2001-12-25  Ravi Pratap  <ravi@ximian.com>
29217
29218         * assign.cs (DoResolve): Perform check on events only if they 
29219         are being accessed outside the declaring type.
29220
29221         * cs-parser.jay (event_declarations): Update rules to correctly
29222         set the type of the implicit parameter etc.
29223
29224         (add_accessor, remove_accessor): Set current local parameters.
29225
29226         * expression.cs (Binary): For delegate addition and subtraction,
29227         cast the return value from the method into the appropriate delegate
29228         type.
29229
29230 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29231
29232         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29233         of these as the workaround is unnecessary.
29234
29235         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29236         delegate data - none of that is needed at all.
29237
29238         Re-write bits to extract the instance expression and the delegate method
29239         correctly.
29240
29241         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29242         on delegates too.
29243
29244         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29245         of attaching attributes instead of duplicating code everywhere.
29246
29247         * everywhere : Update code to do attribute emission using the above method.
29248
29249 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29250
29251         * expression.cs (IsParamsMethodApplicable): if there are not
29252         parameters, return immediately.
29253
29254         * ecore.cs: The 0 literal can be implicity converted to an enum
29255         type. 
29256
29257         (SimpleName.DoResolve): First lookup the type, then lookup the
29258         members. 
29259
29260         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29261         want to get its address.  If the InstanceExpression is not
29262         addressable, store the result in a temporary variable, then get
29263         the address of it.
29264
29265         * codegen.cs: Only display 219 errors on warning level or above. 
29266
29267         * expression.cs (ArrayAccess): Make it implement the
29268         IMemoryLocation interface.
29269
29270         (Binary.DoResolve): handle the operator == (object a, object b)
29271         and operator != (object a, object b) without incurring into a
29272         BoxedCast (because 5 != o should never be performed).
29273
29274         Handle binary enumerator operators.
29275
29276         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29277         value type, otherwise use Ldelem_ref.
29278
29279         Use precomputed names;
29280
29281         (AddressOf): Implement address of
29282
29283         * cs-parser.jay (labeled_statement): Fix recursive block
29284         addition by reworking the production.
29285
29286         * expression.cs (New.DoEmit): New has a special case:
29287                 
29288                  If we are dealing with a ValueType, we have a few
29289                  situations to deal with:
29290                 
29291                     * The target of New is a ValueType variable, that is
29292                       easy, we just pass this as the variable reference
29293                 
29294                     * The target of New is being passed as an argument,
29295                       to a boxing operation or a function that takes a
29296                       ValueType.
29297                 
29298                       In this case, we need to create a temporary variable
29299                       that is the argument of New.
29300
29301
29302 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29303
29304         * rootcontext.cs (LookupType): Check that current_type is not null before
29305         going about looking at nested types.
29306
29307         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29308         not implement the IAssignMethod interface any more.
29309
29310         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29311         where we tranform them into FieldExprs if they are being resolved from within
29312         the declaring type.
29313
29314         * ecore.cs (SimpleName.DoResolve): Do the same here.
29315
29316         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29317
29318         * ../errors/bug10.cs : Add.
29319
29320         * ../errors/cs0070.cs : Add.
29321
29322         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29323
29324         * assign.cs : Get rid of EventIsLocal everywhere.
29325
29326 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29327
29328         * ecore.cs (ConvertIntLiteral): finished the implementation.
29329
29330         * statement.cs (SwitchLabel): Convert the value we are using as a
29331         key before looking up the table.
29332
29333 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29334
29335         * codegen.cs (EmitTopBlock): Require a Location argument now.
29336
29337         * cs-parser.jay (constructor_declarator): We need to setup
29338         current_local_parameters before we parse the
29339         opt_constructor_initializer, to allow the variables to be bound
29340         to the constructor arguments.
29341
29342         * rootcontext.cs (LookupType): First lookup nested classes in our
29343         class and our parents before we go looking outside our class.
29344
29345         * expression.cs (ConstantFold): Extract/debox the values at the
29346         beginnning. 
29347
29348         * rootcontext.cs (EmitCode): Resolve the constants first before we
29349         resolve the types.  This is not really needed, but it helps debugging.
29350
29351         * statement.cs: report location.
29352
29353         * cs-parser.jay: pass location to throw statement.
29354
29355         * driver.cs: Small bug fix.
29356
29357         * report.cs: Updated format to be 4-zero filled digits.
29358
29359 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29360
29361         * expression.cs (CheckIndices): Fix minor bug where the wrong
29362         variable was being referred to ;-)
29363
29364         (DoEmit): Do not call EmitStaticInitializers when the 
29365         underlying type is System.Object.
29366
29367 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29368
29369         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29370         and do the usual workaround for SRE.
29371
29372         * class.cs (MyEventBuilder.EventType): New member to get at the type
29373         of the event, quickly.
29374
29375         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29376
29377         * assign.cs (Assign.DoResolve): Handle the case when the target
29378         is an EventExpr and perform the necessary checks.
29379
29380         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29381         interface.
29382
29383         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29384
29385         (EventExpr): Set the type in the constructor itself since we 
29386         are meant to be born fully resolved.
29387
29388         (EventExpr.Define): Revert code I wrote earlier.
29389                 
29390         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29391         instance expression is null. The instance expression is a This in that case
29392         or a null, depending on whether it is a static method or not.
29393
29394         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29395         refers to more than one method.
29396
29397         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29398         and accordingly flag errors.
29399
29400 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29401
29402         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29403
29404 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29405
29406         * location.cs (ToString): Provide useful rutine.
29407
29408 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29409
29410         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29411         objects, return the actual integral boxed.
29412
29413         * statement.cs (SwitchLabel): define an ILLabel for each
29414         SwitchLabel. 
29415
29416         (Switch.CheckSwitch): If the value is a Literal, extract
29417         the underlying literal.
29418
29419         Also in the unused hashtable we had, add the SwitchLabel so we can
29420         quickly look this value up.
29421
29422         * constant.cs: Implement a bunch of new constants.  Rewrite
29423         Literal based on this.  Made changes everywhere to adapt to this.
29424
29425         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29426         dereferencing array only once, and also copes with enumrations.
29427
29428         bytes are two bytes wide, not one.
29429
29430         (Cast): Perform constant conversions.
29431
29432         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29433         wrappers to the literals here.
29434
29435         * expression.cs (DoNumericPromotions): long literals can converted
29436         to ulong implicity (this is taken care of elsewhere, but I was
29437         missing this spot).
29438
29439         * ecore.cs (Expression.Literalize): Make the return type Literal,
29440         to improve type checking.
29441
29442         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29443
29444 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29445
29446         * literal.cs: Revert code from ravi that checked the bounds.  The
29447         bounds are sane by the definition of the type itself. 
29448
29449         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29450         need to actually look up in our parent hierarchy for interfaces
29451         implemented. 
29452
29453         * const.cs: Use the underlying type for enumerations
29454
29455         * delegate.cs: Compute the basename for the delegate creation,
29456         that should fix the delegate test case, and restore the correct
29457         Type Lookup semantics in rootcontext
29458
29459         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29460         referencing a nested type with the Reflection API is using the "+"
29461         sign. 
29462
29463         * cs-parser.jay: Do not require EOF token at the end.
29464
29465 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29466
29467         * rootcontext.cs (LookupType): Concatenate type names with
29468         a '.' instead of a '+' The test suite passes again.
29469
29470         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29471         field of the enumeration.
29472
29473         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29474         the case when the member is an EventExpr.
29475
29476         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29477         static has an associated instance expression.
29478
29479         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29480
29481         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29482
29483         * class.cs (Event.Define): Register event and perform appropriate checks
29484         for error #111.
29485
29486         We define the Add and Remove methods even if the use provides none because
29487         in that case, we provide default implementations ourselves.
29488
29489         Define a private field of the type of the event. This is done by the CSC compiler
29490         and we should be doing it too ;-)
29491
29492         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29493         More methods we use in code we generate.
29494
29495         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29496         is important.
29497
29498         (InitCoreTypes): Update accordingly for the above.
29499
29500         * class.cs (Event.Emit): Generate code for default accessors that we provide
29501
29502         (EmitDefaultMethod): Do the job in the above.
29503
29504         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29505         appropriate place.
29506
29507 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29508
29509         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29510         builders even if we were missing one.
29511
29512         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29513         pass the Basename as our class name instead of the Name.  The
29514         basename will be correctly composed for us.
29515
29516         * parameter.cs (Paramters): Now takes a Location argument.
29517
29518         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29519         make all the code call directly LookupType in RootContext and take
29520         this chance to pass the Location information everywhere.
29521
29522         * Everywhere: pass Location information.
29523
29524 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29525
29526         * class.cs (Constructor.Define): Updated way of detecting the
29527         length of the parameters.
29528
29529         (TypeContainer.DefineType): Use basename as the type name for
29530         nested types.
29531
29532         (TypeContainer.Define): Do not recursively define types here, as
29533         definition is taken care in order by the RootContext.
29534
29535         * tree.cs: Keep track of namespaces in a per-file basis.
29536
29537         * parameter.cs (Parameter.ComputeSignature): Update to use
29538         DeclSpace. 
29539
29540         (Parameters.GetSignature): ditto.
29541
29542         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29543         instead of a TypeContainer.
29544
29545         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29546         resolve names.  Because we need to be resolve in our context, not
29547         our parents.
29548
29549         * driver.cs: Implement response files.
29550
29551         * class.cs (TypeContainer.DefineType): If we are defined, do not
29552         redefine ourselves.
29553
29554         (Event.Emit): Emit the code for add/remove handlers.
29555         (Event.Define): Save the MethodBuilders for add/remove.
29556
29557         * typemanager.cs: Use pair here too.
29558
29559         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29560         DictionaryEntry requires the first argument to be non-null.  
29561
29562         (enum_declaration): Compute full name for registering the
29563         enumeration.
29564
29565         (delegate_declaration): Instead of using
29566         formal_parameter_list, use opt_formal_parameter_list as the list
29567         can be empty.
29568
29569         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29570         (EventParsing): New property that controls whether `add' and
29571         `remove' are returned as tokens or identifiers (for events);
29572
29573 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29574
29575         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29576         use MyEventBuilder only and let it wrap the real builder for us.
29577
29578         (MyEventBuilder): Revamp constructor etc.
29579
29580         Implement all operations that we perform on EventBuilder in precisely the same
29581         way here too.
29582
29583         (FindMembers): Update to use the EventBuilder member.
29584
29585         (Event.Emit): Update accordingly.
29586
29587 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29588
29589         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29590         by calling the appropriate methods.
29591
29592         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29593         useful.
29594
29595         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29596
29597 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29598
29599         * delegate.cs (Delegate.Populate): Check that the return type
29600         and various parameters types are indeed accessible.
29601
29602         * class.cs (Constructor.Define): Same here.
29603
29604         (Field.Define): Ditto.
29605
29606         (Event.Define): Ditto.
29607
29608         (Operator.Define): Check that the underlying Method defined itself
29609         correctly - so it's MethodBuilder should not be null.
29610
29611         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29612         expression happens to be null.
29613
29614         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29615         members but as of now we don't seem to be able to do anything really useful with it.
29616
29617         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29618         not the EventBuilder.
29619
29620 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29621
29622         * cs-tokenizer.cs: Add support for defines.
29623         Add support for #if, #elif, #else, #endif
29624
29625         (eval_var): evaluates a variable.
29626         (eval): stubbed for evaluating functions.
29627
29628         * cs-parser.jay: Pass the defines information
29629
29630         * driver.cs: Add --define command line option.
29631
29632         * decl.cs: Move MemberCore here.
29633
29634         Make it the base class for DeclSpace.  This allows us to catch and
29635         report 108 and 109 for everything now.
29636
29637         * class.cs (TypeContainer.Define): Extract all the members
29638         before populating and emit the warning 108 (new keyword required
29639         to override) instead of having each member implement this.
29640
29641         (MemberCore.Define): New abstract method, we will be using this in
29642         the warning reporting engine in Populate.
29643
29644         (Operator.Define): Adjust to new MemberCore protocol. 
29645
29646         * const.cs (Const): This does not derive from Expression, it is a
29647         temporary object we use to create fields, it is a MemberCore. 
29648
29649         * class.cs (Method.Define): Allow the entry point to be in a
29650         specific class.
29651
29652         * driver.cs: Rewrite the argument handler to clean it up a bit.
29653
29654         * rootcontext.cs: Made it just an auxiliary namespace feature by
29655         making everything static.
29656
29657         * driver.cs: Adapt code to use RootContext type name instead of
29658         instance variable.
29659
29660         * delegate.cs: Remove RootContext argument.
29661
29662         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29663         argument. 
29664
29665         * class.cs (Event.Define): The lookup can fail.
29666
29667         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29668
29669         * expression.cs: Resolve the this instance before invoking the code.
29670
29671 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29672
29673         * cs-parser.jay: Add a production in element_access that allows
29674         the thing to become a "type" reference.  This way we can parse
29675         things like "(string [])" as a type.
29676
29677         Note that this still does not handle the more complex rules of
29678         casts. 
29679
29680
29681         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29682
29683         * ecore.cs: (CopyNewMethods): new utility function used to
29684         assemble the list of methods from running FindMembers.
29685
29686         (MemberLookup): Rework FindMembers so that 
29687
29688 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29689
29690         * class.cs (TypeContainer): Remove Delegates who fail to be
29691         defined.
29692
29693         * delegate.cs (Populate): Verify that we dont get null return
29694         values.   TODO: Check for AsAccessible.
29695
29696         * cs-parser.jay: Use basename to emit error 574 (destructor should
29697         have the same name as container class), not the full name.
29698
29699         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29700         possible representation.  
29701
29702         Also implements integer type suffixes U and L.
29703
29704 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29705
29706         * expression.cs (ArrayCreation.DoResolve): We need to do the
29707         argument resolution *always*.
29708
29709         * decl.cs: Make this hold the namespace.  Hold the root context as
29710         well.
29711         (LookupType): Move here.
29712
29713         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29714
29715         * location.cs (Row, Name): Fixed the code, it was always returning
29716         references to the first file.
29717
29718         * interface.cs: Register properties defined through interfaces.
29719
29720         * driver.cs: Add support for globbing on the command line
29721
29722         * class.cs (Field): Make it derive from MemberCore as well.
29723         (Event): ditto.
29724
29725 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29726
29727         * class.cs (Event::Define): Check that the type of the event is a delegate
29728         type else flag error #66.
29729
29730         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29731         same.
29732
29733         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29734         values of EntryPoint, CharSet etc etc.
29735
29736         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29737
29738         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29739         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29740         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29741         which needs this to do its work.
29742
29743         * ../errors/cs0066.cs : Add.
29744
29745 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29746
29747         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29748         helper functions.
29749
29750         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29751         clears out the parameters field.
29752         (MemberSignatureCompare): Cleanup
29753
29754         (MemberCore): New base class used to share code between MethodCore
29755         and Property.
29756
29757         (RegisterRequiredImplementations) BindingFlags.Public requires
29758         either BindingFlags.Instace or Static.  Use instance here.
29759
29760         (Property): Refactored code to cope better with the full spec.
29761
29762         * parameter.cs (GetParameterInfo): Return an empty array instead
29763         of null on error.
29764
29765         * class.cs (Property): Abstract or extern properties have no bodies.
29766
29767         * parameter.cs (GetParameterInfo): return a zero-sized array.
29768
29769         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29770         method modifier validation to the typecontainer so we can reuse
29771         this on properties.
29772
29773         (MethodCore.ParameterTypes): return an empty sized array of types.
29774
29775         (Property.Define): Test property modifier validity.
29776
29777         Add tests for sealed/override too.
29778
29779         (Method.Emit): abstract or extern methods have no bodies.
29780
29781 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29782
29783         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29784         thing.
29785
29786         (Method::Define, ::Emit): Modify accordingly.
29787
29788         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29789
29790         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29791
29792         * makefile: Pass in /unsafe.
29793
29794 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29795
29796         * class.cs (MakeKey): Kill routine.
29797
29798         * class.cs (TypeContainer.Define): Correctly define explicit
29799         method implementations (they require the full interface name plus
29800         the method name).
29801
29802         * typemanager.cs: Deply the PtrHashtable here and stop using the
29803         lame keys.  Things work so much better.
29804
29805         This of course broke everyone who depended on `RegisterMethod' to
29806         do the `test for existance' test.  This has to be done elsewhere.
29807
29808         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29809         the object stupid Equals method (because, that like fails all over
29810         the place).  We still do not use it.
29811
29812         * class.cs (TypeContainer.SetRequiredInterface,
29813         TypeContainer.RequireMethods): Killed these two routines and moved
29814         all the functionality to RegisterRequiredImplementations.
29815
29816         (TypeContainer.RegisterRequiredImplementations): This routine now
29817         registers all the implementations required in an array for the
29818         interfaces and abstract methods.  We use an array of structures
29819         which can be computed ahead of time to reduce memory usage and we
29820         also assume that lookups are cheap as most classes will not
29821         implement too many interfaces.
29822
29823         We also avoid creating too many MethodSignatures.
29824
29825         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29826         clear the "pending" bit if we find that there are problems with
29827         the declaration.
29828
29829         (TypeContainer.VerifyPendingMethods): Update to report errors of
29830         methods that look like implementations but are not.
29831
29832         (TypeContainer.Define): Add support for explicit interface method
29833         implementation. 
29834
29835 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29836
29837         * typemanager.cs: Keep track of the parameters here instead of
29838         being a feature of the TypeContainer.
29839
29840         * class.cs: Drop the registration of parameters here, as
29841         InterfaceMethods are also interface declarations.
29842
29843         * delegate.cs: Register methods with the TypeManager not only with
29844         the TypeContainer.  This code was buggy.
29845
29846         * interface.cs: Full registation here.
29847
29848 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29849
29850         * expression.cs: Remove reducer for binary expressions, it can not
29851         be done this way.
29852
29853         * const.cs: Put here the code that used to go into constant.cs
29854
29855         * constant.cs: Put here the code for constants, this is a new base
29856         class for Literals.
29857
29858         * literal.cs: Make Literal derive from Constant.
29859
29860 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29861
29862         * statement.cs (Return.Emit): Report error 157 if the user
29863         attempts to return from a finally block.
29864
29865         (Return.Emit): Instead of emitting a return, jump to the end of
29866         the function.
29867
29868         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29869         LocalBuilder to store the result of the function.  ReturnLabel is
29870         the target where we jump.
29871
29872
29873 2001-12-09  Radek Doulik  <rodo@ximian.com>
29874
29875         * cs-parser.jay: remember alias in current namespace
29876
29877         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29878         namespaces
29879
29880         * class.cs (LookupAlias): lookup alias in my_namespace
29881
29882         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29883         aliases hashtable
29884         (LookupAlias): lookup alias in this and if needed in parent
29885         namespaces
29886
29887 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29888
29889         * support.cs: 
29890
29891         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29892         making things static.  I need this to avoid passing the
29893         TypeContainer when calling ParameterType.
29894
29895         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29896         that did string manipulation to compute the type and then call
29897         GetType.  Use Parameter.ParameterType instead.
29898
29899         * cs-tokenizer.cs: Consume the suffix for floating values.
29900
29901         * expression.cs (ParameterReference): figure out whether this is a
29902         reference parameter or not.  Kill an extra variable by computing
29903         the arg_idx during emission.
29904
29905         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29906         function that returns whether a parameter is an out/ref value or not.
29907
29908         (Parameter.ParameterType): The type of the parameter (base,
29909         without ref/out applied).
29910
29911         (Parameter.Resolve): Perform resolution here.
29912         (Parameter.ExternalType): The full type (with ref/out applied).
29913
29914         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29915         support for expressions on the using statement.
29916
29917 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29918
29919         * statement.cs (Using.EmitLocalVariableDecls): Split the
29920         localvariable handling of the using statement.
29921
29922         (Block.EmitMeta): Keep track of variable count across blocks.  We
29923         were reusing slots on separate branches of blocks.
29924
29925         (Try.Emit): Emit the general code block, we were not emitting it. 
29926
29927         Check the type of the declaration to be an IDisposable or
29928         something that can be implicity converted to it. 
29929
29930         Emit conversions if required.
29931
29932         * ecore.cs (EmptyExpression): New utility class.
29933         (Expression.ImplicitConversionExists): New utility function.
29934
29935 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29936
29937         * statement.cs (Using): Implement.
29938
29939         * expression.cs (LocalVariableReference): Support read only variables.
29940
29941         * statement.cs: Remove the explicit emit for the Leave opcode.
29942         (VariableInfo): Add a readonly field.
29943
29944 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29945
29946         * ecore.cs (ConvCast): new class used to encapsulate the various
29947         explicit integer conversions that works in both checked and
29948         unchecked contexts.
29949
29950         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29951         properly generate the overflow opcodes.
29952
29953 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29954
29955         * statement.cs: The correct type for the EmptyExpression is the
29956         element_type, not the variable type.  Ravi pointed this out.
29957
29958 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29959
29960         * class.cs (Method::Define): Handle PInvoke methods specially
29961         by using DefinePInvokeMethod instead of the usual one.
29962
29963         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29964         above to do the task of extracting information and defining the method.
29965
29966 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29967
29968         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29969         of the condition for string type.
29970
29971         (Emit): Move that here. 
29972
29973         (ArrayCreation::CheckIndices): Keep string literals in their expression
29974         form.
29975
29976         (EmitDynamicInitializers): Handle strings appropriately.
29977
29978 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29979
29980         * codegen.cs (EmitContext): Replace multiple variables with a
29981         single pointer to the current Switch statement.
29982
29983         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29984         EmitContext.
29985
29986 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29987
29988         * statement.cs 
29989
29990         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29991         default'.
29992
29993         (Foreach.Emit): Foreach on arrays was not setting
29994         up the loop variables (for break/continue).
29995
29996         (GotoCase): Semi-implented.
29997
29998 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29999
30000         * attribute.cs (CheckAttribute): Handle system attributes by using
30001         Attribute.GetAttributes to examine information we need.
30002
30003         (GetValidPlaces): Same here.
30004
30005         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
30006
30007         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
30008
30009         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
30010
30011         (Method::Define): Set appropriate flags if we have a DllImport attribute.
30012
30013         (Method::Emit): Handle the case when we are a PInvoke method.
30014
30015 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30016
30017         * expression.cs: Use ResolveWithSimpleName on compound names.
30018
30019 2001-12-02  Ravi Pratap  <ravi@ximian.com>
30020
30021         * constant.cs (EmitConstant): Make sure we resolve the associated expression
30022         before trying to reduce it.
30023
30024         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
30025
30026         * constant.cs (LookupConstantValue): Implement.
30027
30028         (EmitConstant): Use the above in emitting the constant.
30029
30030         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
30031         that are user-defined by doing a LookupConstantValue on them.
30032
30033         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
30034         too, like above.
30035
30036 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
30037
30038         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
30039
30040         (BaseAccess.DoResolve): Implement.
30041
30042         (MemberAccess.DoResolve): Split this routine into a
30043         ResolveMemberAccess routine that can be used independently
30044
30045 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
30046
30047         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
30048         As that share bits of the implementation.  Is returns a boolean,
30049         while As returns the Type that is being probed.
30050
30051 2001-12-01  Ravi Pratap  <ravi@ximian.com>
30052
30053         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
30054         instead of a Literal - much easier.
30055
30056         (EnumInTransit): Remove - utterly useless :-)
30057
30058         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
30059
30060         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
30061
30062         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
30063         chain when we have no associated expression.
30064
30065 2001-11-30  Ravi Pratap  <ravi@ximian.com>
30066
30067         * constant.cs (Define): Use Location while reporting the errror.
30068
30069         Also emit a warning when 'new' is used and there is no inherited
30070         member to hide.
30071
30072         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
30073         populated.
30074
30075         (LookupEnumValue): Implement to lookup an enum member's value and define it
30076         if necessary.
30077
30078         (Populate): Re-write accordingly to use the above routine.
30079
30080 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
30081
30082         * expression.cs (This): Fix prototype for DoResolveLValue to
30083         override the base class DoResolveLValue.
30084
30085         * cs-parser.cs: Report errors cs574 and cs575 (destructor
30086         declarations) 
30087
30088         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
30089         (we need to load the address of the field here).  This fixes
30090         test-22. 
30091
30092         (FieldExpr.DoResolveLValue): Call the DoResolve
30093         function to initialize the Instance expression.
30094
30095         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
30096         correctly the GetEnumerator operation on a value type.
30097
30098         * cs-parser.jay: Add more simple parsing error catches.
30099
30100         * statement.cs (Switch): Add support for string switches.
30101         Handle null specially.
30102
30103         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
30104
30105 2001-11-28  Ravi Pratap  <ravi@ximian.com>
30106
30107         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
30108
30109         (declare_local_constant): New helper function.
30110
30111         * statement.cs (AddConstant): Keep a separate record of constants
30112
30113         (IsConstant): Implement to determine if a variable is a constant.
30114
30115         (GetConstantExpression): Implement.
30116
30117         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
30118
30119         * statement.cs (IsVariableDefined): Re-write.
30120
30121 2001-11-27  Ravi Pratap  <ravi@ximian.com>
30122
30123         * class.cs (TypeContainer::FindMembers): Look for constants
30124         in the case when we are looking for MemberTypes.Field
30125
30126         * expression.cs (MemberAccess::DoResolve): Check that in the
30127         case we are a FieldExpr and a Literal, we are not being accessed
30128         by an instance reference.
30129
30130         * cs-parser.jay (local_constant_declaration): Implement.
30131
30132         (declaration_statement): Implement for constant declarations.
30133
30134 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
30135
30136         * statement.cs (Switch): Catch double defaults.
30137
30138         (Switch): More work on the switch() statement
30139         implementation.  It works for integral values now, need to finish
30140         string support.
30141
30142
30143 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30144
30145         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
30146         integer literals into other integer literals.  To be used by
30147         switch. 
30148
30149 2001-11-24  Ravi Pratap  <ravi@ximian.com>
30150
30151         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
30152         some memory.
30153
30154         (EmitDynamicInitializers): Cope with the above since we extract data
30155         directly from ArrayData now.
30156
30157         (ExpectInitializers): Keep track of whether initializers are mandatory
30158         or not.
30159
30160         (Bounds): Make it a hashtable to prevent the same dimension being 
30161         recorded for every element in that dimension.
30162
30163         (EmitDynamicInitializers): Fix bug which prevented the Set array method
30164         from being found.
30165
30166         Also fix bug which was causing the indices to be emitted in the reverse
30167         order.
30168
30169 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30170
30171         * expression.cs (ArrayCreation): Implement the bits that Ravi left
30172         unfinished.  They do not work, because the underlying code is
30173         sloppy.
30174
30175 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30176
30177         * cs-parser.jay: Remove bogus fixme.
30178
30179         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
30180         on Switch statement.
30181
30182 2001-11-23  Ravi Pratap  <ravi@ximian.com>
30183
30184         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
30185         the same. 
30186
30187         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
30188         parameter. Apparently, any expression is allowed. 
30189
30190         (ValidateInitializers): Update accordingly.
30191
30192         (CheckIndices): Fix some tricky bugs thanks to recursion.
30193
30194         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
30195         I was being completely brain-dead.
30196
30197         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
30198         and re-write acordingly.
30199
30200         (DelegateInvocation): Re-write accordingly.
30201
30202         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
30203
30204         (MakeByteBlob): Handle types more correctly.
30205
30206         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
30207         initialization from expressions but it is incomplete because I am a complete
30208         Dodo :-|
30209
30210 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30211
30212         * statement.cs (If.Emit): Fix a bug that generated incorrect code
30213         on If.  Basically, we have to return `true' (ie, we do return to
30214         our caller) only if both branches of the if return.
30215
30216         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
30217         short-circuit operators, handle them as short circuit operators. 
30218
30219         (Cast.DoResolve): Resolve type.
30220         (Cast.Cast): Take an expression as the target type.
30221
30222         * cs-parser.jay (cast_expression): Remove old hack that only
30223         allowed a limited set of types to be handled.  Now we take a
30224         unary_expression and we resolve to a type during semantic
30225         analysis.
30226
30227         Use the grammar productions from Rhys to handle casts (this is
30228         not complete like Rhys syntax yet, we fail to handle that corner
30229         case that C# has regarding (-x), but we will get there.
30230
30231 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30232
30233         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30234         field which is an array type.
30235
30236         * cs-parser.jay (declare_local_variables): Support array initialization too.
30237
30238         * typemanager.cs (MakeKey): Implement.
30239
30240         (everywhere): Use the above appropriately.
30241
30242         * cs-parser.jay (for_statement): Update for array initialization while
30243         declaring variables.
30244
30245         * ecore.cs : The error message was correct, it's the variable's names that
30246         were misleading ;-) Make the code more readable.
30247
30248         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30249         the correct type etc.
30250
30251         (ConvertExplicit): Handle Enum types by examining the underlying type.
30252
30253 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30254
30255         * parameter.cs (GetCallingConvention): Always return
30256         CallingConventions.Standard for now.
30257
30258 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30259
30260         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30261         and `r' after calling DoNumericPromotions.
30262
30263         * ecore.cs: Fix error message (the types were in the wrong order).
30264
30265         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30266         BindingFlags.Instance as well 
30267
30268         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30269         implicit int literal conversion in an empty cast so that we
30270         propagate the right type upstream.
30271
30272         (UnboxCast): new class used to unbox value types.
30273         (Expression.ConvertExplicit): Add explicit type conversions done
30274         by unboxing.
30275
30276         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30277         the target type before applying the implicit LongLiterals to ULong
30278         literal cast.
30279
30280 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30281
30282         * cs-parser.jay (for_statement): Reworked the way For works: now
30283         we declare manually any variables that are introduced in
30284         for_initializer to solve the problem of having out-of-band code
30285         emition (that is what got for broken).
30286
30287         (declaration_statement): Perform the actual variable declaration
30288         that used to be done in local_variable_declaration here.
30289
30290         (local_variable_declaration): Do not declare anything, just pass
30291         the information on a DictionaryEntry
30292
30293 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30294
30295         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30296         re-write of the logic to now make it recursive.
30297
30298         (UpdateIndices): Re-write accordingly.
30299
30300         Store element data in a separate ArrayData list in the above methods.
30301
30302         (MakeByteBlob): Implement to dump the array data into a byte array.
30303
30304 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30305
30306         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30307         into CheckIndices.
30308
30309         * constant.cs (Define): Implement.
30310
30311         (EmitConstant): Re-write fully.
30312
30313         Pass in location info.
30314
30315         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30316         respectively.
30317
30318         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30319         DictionaryEntry since we need location info too.
30320
30321         (constant_declaration): Update accordingly.
30322
30323         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30324         code into another method : UpdateIndices.
30325
30326 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30327
30328         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30329         some type checking etc.
30330
30331 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30332
30333         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30334         bits to provide dimension info if the user skips doing that.
30335
30336         Update second constructor to store the rank correctly.
30337
30338 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30339
30340         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30341         and try to implement.
30342
30343         * ../errors/cs0150.cs : Add.
30344
30345         * ../errors/cs0178.cs : Add.
30346
30347 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30348
30349         * statement.cs: Implement foreach on multi-dimensional arrays. 
30350
30351         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30352         name of the params argument.
30353
30354         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30355         initializing the array.
30356
30357         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30358         we can use this elsewhere.
30359
30360         * statement.cs: Finish implementation of foreach for single
30361         dimension arrays.
30362
30363         * cs-parser.jay: Use an out-of-band stack to pass information
30364         around, I wonder why I need this.
30365
30366         foreach_block: Make the new foreach_block the current_block.
30367
30368         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30369         function used to return a static Parameters structure.  Used for
30370         empty parameters, as those are created very frequently.
30371
30372         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30373
30374 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30375
30376         * interface.cs : Default modifier is private, not public. The
30377         make verify test passes again.
30378
30379 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30380
30381         * support.cs (ReflectionParameters): Fix logic to determine
30382         whether the last parameter is a params one. Test 9 passes again.
30383
30384         * delegate.cs (Populate): Register the builders we define with
30385         RegisterParameterForBuilder. Test 19 passes again.
30386
30387         * cs-parser.jay (property_declaration): Reference $6 instead
30388         of $$ to get at the location.
30389
30390         (indexer_declaration): Similar stuff.
30391
30392         (attribute): Ditto.
30393
30394         * class.cs (Property): Register parameters for the Get and Set methods
30395         if they exist. Test 23 passes again.
30396
30397         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30398         call to EmitArguments as we are sure there aren't any params arguments. 
30399         Test 32 passes again.
30400
30401         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30402         IndexOutOfRangeException. 
30403
30404         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30405         Test 33 now passes again.
30406
30407 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30408
30409         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30410         broke a bunch of things.  Will have to come up with a better way
30411         of tracking locations.
30412
30413         * statement.cs: Implemented foreach for single dimension arrays.
30414
30415 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30416
30417         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30418         an error.  This removes the lookup from the critical path.
30419
30420         * cs-parser.jay: Removed use of temporary_loc, which is completely
30421         broken. 
30422
30423 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30424
30425         * support.cs (ReflectionParameters.ParameterModifier): Report
30426         whether the argument is a PARAMS argument or not.
30427
30428         * class.cs: Set the attribute `ParamArrayAttribute' on the
30429         parameter argument.
30430
30431         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30432         and cons_param_array_attribute (ConstructorInfo for
30433         ParamArrayAttribute)., 
30434
30435         * codegen.cs: Emit the return using the `Return' statement, that
30436         way we can report the error correctly for missing return values. 
30437
30438         * class.cs (Method.Emit): Clean up.
30439
30440         * expression.cs (Argument.Resolve): Take another argument: the
30441         location where this argument is used.  Notice that this is not
30442         part of the "Argument" class as to reduce the size of the
30443         structure (we know the approximate location anyways).
30444
30445         Test if the argument is a variable-reference, if not, then
30446         complain with a 206.
30447
30448         (Argument.Emit): Emit addresses of variables.
30449
30450         (Argument.FullDesc): Simplify.
30451
30452         (Invocation.DoResolve): Update for Argument.Resolve.
30453
30454         (ElementAccess.DoResolve): ditto.
30455
30456         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30457         method should be virtual, as this method is always virtual.
30458
30459         (NewDelegate.DoResolve): Update for Argument.Resolve.
30460
30461         * class.cs (ConstructorInitializer.DoResolve): ditto.
30462
30463         * attribute.cs (Attribute.Resolve): ditto.
30464
30465 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30466
30467         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30468
30469         * expression.cs (ParameterReference): Drop IStackStorage and implement
30470         IAssignMethod instead. 
30471
30472         (LocalVariableReference): ditto.
30473
30474         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30475         IAssignMethod instead. 
30476
30477 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30478
30479         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30480         enumerations that are used in heavily used structures derive from
30481         byte in a laughable and pathetic attempt to reduce memory usage.
30482         This is the kind of pre-optimzations that you should not do at
30483         home without adult supervision.
30484
30485         * expression.cs (UnaryMutator): New class, used to handle ++ and
30486         -- separatedly from the other unary operators.  Cleans up the
30487         code, and kills the ExpressionStatement dependency in Unary.
30488
30489         (Unary): Removed `method' and `Arguments' from this class, making
30490         it smaller, and moving it all to SimpleCall, so I can reuse this
30491         code in other locations and avoid creating a lot of transient data
30492         strucutres when not required.
30493
30494         * cs-parser.jay: Adjust for new changes.
30495
30496 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30497
30498         * enum.cs (Enum.Populate): If there is a failure during
30499         definition, return
30500
30501         * cs-parser.jay (opt_enum_base): we used to catch type errors
30502         here, but this is really incorrect.  The type error should be
30503         catched during semantic analysis.
30504
30505 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30506
30507         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30508         current_local_parameters as expected since I, in my stupidity, had forgotten
30509         to do this :-)
30510
30511         * attribute.cs (GetValidPlaces): Fix stupid bug.
30512
30513         * class.cs (Method::Emit): Perform check on applicability of attributes.
30514
30515         (Constructor::Emit): Ditto.
30516
30517         (Field::Emit): Ditto.
30518
30519         (Field.Location): Store location information.
30520
30521         (Property, Event, Indexer, Operator): Ditto.
30522
30523         * cs-parser.jay (field_declaration): Pass in location for each field.
30524
30525         * ../errors/cs0592.cs : Add.
30526
30527 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30528
30529         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30530
30531         (InitCoreTypes): Update accordingly.
30532
30533         (RegisterAttrType, LookupAttr): Implement.
30534
30535         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30536         info about the same.
30537
30538         (Resolve): Update to populate the above as necessary.
30539
30540         (Error592): Helper.
30541
30542         (GetValidPlaces): Helper to the above.
30543
30544         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30545
30546         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30547
30548 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30549
30550         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30551
30552         * ../errors/cs0617.cs : Add.
30553
30554 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30555
30556         * enum.cs (Emit): Rename to Populate to be more consistent with what
30557         we expect it to do and when exactly it is called.
30558
30559         * class.cs, rootcontext.cs : Update accordingly.
30560
30561         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30562         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30563
30564         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30565
30566         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30567         of a fieldinfo using the above, when dealing with a FieldBuilder.
30568
30569 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30570
30571         * ../errors/cs0031.cs : Add.
30572
30573         * ../errors/cs1008.cs : Add.
30574
30575         * ../errrors/cs0543.cs : Add.
30576
30577         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30578         enum type.
30579
30580         (FindMembers): Implement.
30581
30582         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30583         enums and delegates too.
30584
30585         (enum_types): Rename to builder_to_enum.
30586
30587         (delegate_types): Rename to builder_to_delegate.
30588
30589         * delegate.cs (FindMembers): Implement.
30590
30591 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30592
30593         * typemanager.cs (IsEnumType): Implement.
30594
30595         * enum.cs (Emit): Re-write parts to account for the underlying type
30596         better and perform checking etc.
30597
30598         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30599         of the underlying type.
30600
30601         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30602         value
30603
30604         * enum.cs (error31): Helper to report error #31.
30605
30606         * cs-parser.jay (enum_declaration): Store location of each member too.
30607
30608         * enum.cs (member_to_location): New hashtable. 
30609
30610         (AddEnumMember): Update location hashtable.
30611
30612         (Emit): Use the location of each member while reporting errors.
30613
30614 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30615
30616         * cs-parser.jay: A for_initializer if is a
30617         local_variable_declaration really ammount to have an implicit
30618         block with the variable declaration and no initializer for for.
30619
30620         * statement.cs (For.Emit): Cope with null initializers.
30621
30622         This fixes the infinite loop on for initializers.
30623
30624 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30625
30626         * enum.cs: More cleanup.
30627
30628         * ecore.cs: Remove dead code.
30629
30630         * class.cs (Property.Emit): More simplification.
30631         (Event.Emit): ditto.
30632
30633         Reworked to have less levels of indentation.
30634
30635 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30636
30637         * class.cs (Property): Emit attributes.
30638
30639         (Field): Ditto.
30640
30641         (Event): Ditto.
30642
30643         (Indexer): Ditto.
30644
30645         (Operator): Ditto.
30646
30647         * enum.cs (Emit): Ditto.
30648
30649         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30650         Enums too.
30651
30652         * class.cs (Field, Event, etc.): Move attribute generation into the
30653         Emit method everywhere.
30654
30655         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30656         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30657         as we had no way of defining nested enums !
30658
30659         * rootcontext.cs : Adjust code accordingly.
30660
30661         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30662
30663 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30664
30665         * expression.cs (EvalConstantExpression): Move into ecore.cs
30666
30667         * enum.cs (Enum): Rename some members and make them public and readonly
30668         according to our convention.
30669
30670         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30671         nothing else.
30672
30673         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30674
30675         (Enum::Emit): Write a simple version for now which doesn't try to compute
30676         expressions. I shall modify this to be more robust in just a while.
30677
30678         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30679
30680         (TypeContainer::CloseType): Create the Enum types too.
30681
30682         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30683
30684         * expression.cs (EvalConstantExpression): Get rid of completely.
30685
30686         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30687         user-defined values and other cases.
30688
30689         (IsValidEnumLiteral): Helper function.
30690
30691         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30692         out there in the case we had a literal FieldExpr.
30693
30694         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30695
30696         (Literalize): Revamp a bit to take two arguments.
30697
30698         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30699
30700 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30701
30702         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30703
30704         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30705
30706         (Resolve): Use the above to ensure we have proper initializers.
30707
30708 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30709
30710         * expression.cs (Expression::EvalConstantExpression): New method to 
30711         evaluate constant expressions.
30712
30713         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30714
30715 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30716
30717         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30718         in an array.
30719
30720         (Binary.ResolveOperator): Handle operator != (object a, object b)
30721         and operator == (object a, object b);
30722
30723         (Binary.DoNumericPromotions): Indicate whether the numeric
30724         promotion was possible.
30725
30726         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30727         Implement.  
30728
30729         Made the ArrayAccess implement interface IAssignMethod instead of
30730         IStackStore as the order in which arguments are passed reflects
30731         this.
30732
30733         * assign.cs: Instead of using expr.ExprClass to select the way of
30734         assinging, probe for the IStackStore/IAssignMethod interfaces.
30735
30736         * typemanager.cs: Load InitializeArray definition.
30737
30738         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30739         static data that can be used to initialize arrays. 
30740
30741 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30742
30743         * expression.cs: Handle operator== and operator!= for booleans.
30744
30745         (Conditioal.Reduce): Implement reducer for the ?: operator.
30746
30747         (Conditional.Resolve): Implement dead code elimination.
30748
30749         (Binary.Resolve): Catch string literals and return a new
30750         concatenated string.
30751
30752         (Unary.Reduce): Implement reduction of unary expressions.
30753
30754         * ecore.cs: Split out the expression core handling here.
30755
30756         (Expression.Reduce): New method used to perform constant folding
30757         and CSE.  This is needed to support constant-expressions. 
30758
30759         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30760         targets, and optimize for !x.
30761
30762 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30763
30764         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30765         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30766         set custom atttributes.
30767
30768         * literal.cs (Literal::GetValue): New abstract method to return the actual
30769         value of the literal, cast as an object.
30770
30771         (*Literal): Implement GetValue method.
30772
30773         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30774         expressions to the arraylist but objects of type Argument.
30775
30776         * class.cs (TypeContainer::Emit): Emit our attributes too.
30777
30778         (Method::Emit, Constructor::Emit): Ditto.
30779
30780         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30781         to be ignoring earlier.
30782
30783 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30784
30785         * attribute.cs (AttributeSection::Define): Implement to do the business
30786         of constructing a CustomAttributeBuilder.
30787
30788         (Attribute): New trivial class. Increases readability of code.  
30789
30790         * cs-parser.jay : Update accordingly.
30791
30792         (positional_argument_list, named_argument_list, named_argument): New rules
30793
30794         (attribute_arguments): Use the above so that we are more correct.
30795
30796 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30797
30798         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30799         to perform all checks for a method with a params parameter.
30800
30801         (Invocation::OverloadResolve): Update to use the above method and therefore
30802         cope correctly with params method invocations.
30803
30804         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30805         params too.
30806
30807         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30808         constructors in our parent too because we can't afford to miss out on 
30809         protected ones ;-)
30810
30811         * attribute.cs (AttributeSection): New name for the class Attribute
30812
30813         Other trivial changes to improve readability.
30814
30815         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30816         use the new class names.
30817
30818 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30819
30820         * class.cs (Method::Define): Complete definition for params types too
30821
30822         (Indexer::Define): Ditto.
30823
30824         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30825         Cope everywhere with a request for info about the array parameter.
30826
30827 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30828
30829         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30830
30831         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30832         local_variable_type to extract the string corresponding to the type.
30833
30834         (local_variable_type): Fixup the action to use the new helper method.
30835
30836         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30837         go.
30838
30839         * expression.cs : Clean out code which uses the above.
30840
30841 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30842
30843         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30844         and bale out if necessary by returning a false.
30845
30846         (RegisterProperty): Ditto.
30847
30848         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30849         and print out appropriate error messages.
30850
30851         * interface.cs (everywhere): Ditto.
30852
30853         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30854         location to constructor.
30855
30856         * class.cs (Property, Event, Indexer): Update accordingly.
30857
30858         * ../errors/cs111.cs : Added.
30859
30860         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30861         of a method, as laid down by the spec.
30862
30863         (Invocation::OverloadResolve): Use the above method.
30864
30865 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30866
30867         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30868         now take a TypeContainer and a Parameters object.
30869
30870         (ParameterData): Modify return type of ParameterModifier method to be 
30871         Parameter.Modifier and not a string.
30872
30873         (ReflectionParameters, InternalParameters): Update accordingly.
30874
30875         * expression.cs (Argument::GetParameterModifier): Same here.
30876
30877         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30878         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30879         symbol in it at all so maybe this is only for now.
30880
30881 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30882
30883         * support.cs (InternalParameters): Constructor now takes an extra argument 
30884         which is the actual Parameters class.
30885
30886         (ParameterDesc): Update to provide info on ref/out modifiers.
30887
30888         * class.cs (everywhere): Update call to InternalParameters to pass in
30889         the second argument too.
30890
30891         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30892         to return the modifier info [ref/out etc]
30893
30894         (InternalParameters, ReflectionParameters): Implement the above.
30895
30896         * expression.cs (Argument::ParameterModifier): Similar function to return
30897         info about the argument's modifiers.
30898
30899         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30900         too.
30901
30902         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30903         a new SetFormalParameters object which we pass to InternalParameters.
30904
30905 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30906
30907         * expression.cs (NewArray): Merge into the ArrayCreation class.
30908
30909 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30910
30911         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30912         NewUserdefinedArray into one as there wasn't much of a use in having
30913         two separate ones.
30914
30915         * expression.cs (Argument): Change field's name to ArgType from Type.
30916
30917         (Type): New readonly property which returns the proper type, taking into 
30918         account ref/out modifiers.
30919
30920         (everywhere): Adjust code accordingly for the above.
30921
30922         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30923         whether we are emitting for a ref or out parameter.
30924
30925         * expression.cs (Argument::Emit): Use the above field to set the state.
30926
30927         (LocalVariableReference::Emit): Update to honour the flag and emit the
30928         right stuff.
30929
30930         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30931
30932         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30933
30934         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30935
30936         (ReflectionParameters, InternalParameters): Implement the above method.
30937
30938         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30939         reporting errors.
30940
30941         (Invocation::FullMethodDesc): Ditto. 
30942
30943 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30944
30945         * cs-parser.jay: Add extra production for the second form of array
30946         creation. 
30947
30948         * expression.cs (ArrayCreation): Update to reflect the above
30949         change. 
30950
30951         * Small changes to prepare for Array initialization.
30952
30953 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30954
30955         * typemanager.cs (ImplementsInterface): interface might be null;
30956         Deal with this problem;
30957
30958         Also, we do store negative hits on the cache (null values), so use
30959         this instead of calling t.GetInterfaces on the type everytime.
30960
30961 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30962
30963         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30964
30965         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30966         split functionality out into different classes.
30967
30968         (New::FormArrayType): Move into NewBuiltinArray.
30969
30970         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30971         quite useless.
30972
30973         (NewBuiltinArray): New class to handle creation of built-in arrays.
30974
30975         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30976         account creation of one-dimensional arrays.
30977
30978         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30979
30980         (NewUserdefinedArray::DoResolve): Implement.
30981
30982         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30983
30984         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30985         we maintain inside the TypeManager. This is necessary to perform lookups on the
30986         module builder.
30987
30988         (LookupType): Update to perform GetType on the module builders too.     
30989
30990         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30991
30992         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30993
30994 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30995
30996         * expression.cs (New::DoResolve): Implement guts of array creation.
30997
30998         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30999
31000 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
31001
31002         * expression.cs: Fix bug I introduced lsat night that broke
31003         Delegates. 
31004
31005         (Expression.Resolve): Report a 246 error (can not resolve name)
31006         if we find a SimpleName in the stream.
31007
31008         (Expression.ResolveLValue): Ditto.
31009
31010         (Expression.ResolveWithSimpleName): This function is a variant of
31011         ResolveName, this one allows SimpleNames to be returned without a
31012         warning.  The only consumer of SimpleNames is MemberAccess
31013
31014 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
31015
31016         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
31017         might arrive here.  I have my doubts that this is correct.
31018
31019         * statement.cs (Lock): Implement lock statement.
31020
31021         * cs-parser.jay: Small fixes to support `lock' and `using'
31022
31023         * cs-tokenizer.cs: Remove extra space
31024
31025         * driver.cs: New flag --checked, allows to turn on integer math
31026         checking. 
31027
31028         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
31029         Threading.Monitor.Exit 
31030
31031 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
31032
31033         * expression.cs (IndexerAccess::DoResolveLValue): Set the
31034         Expression Class to be IndexerAccess.
31035
31036         Notice that Indexer::DoResolve sets the eclass to Value.
31037
31038 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
31039
31040         * class.cs (TypeContainer::Emit): Emit code for indexers.
31041
31042         * assign.cs (IAssignMethod): New interface implemented by Indexers
31043         and Properties for handling assignment.
31044
31045         (Assign::Emit): Simplify and reuse code. 
31046
31047         * expression.cs (IndexerAccess, PropertyExpr): Implement
31048         IAssignMethod, clean up old code. 
31049
31050 2001-10-22  Ravi Pratap  <ravi@ximian.com>
31051
31052         * typemanager.cs (ImplementsInterface): New method to determine if a type
31053         implements a given interface. Provides a nice cache too.
31054
31055         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
31056         method.
31057
31058         (ConvertReferenceExplicit): Ditto.
31059
31060         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
31061         various methods, with correct names etc.
31062
31063         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
31064         Operator.UnaryNegation.
31065
31066         * cs-parser.jay (operator_declarator): Be a little clever in the case where
31067         we have a unary plus or minus operator.
31068
31069         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
31070         UnaryMinus.
31071
31072         * everywhere : update accordingly.
31073
31074         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
31075         respectively.
31076
31077         * class.cs (Method::Define): For the case where we are implementing a method
31078         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
31079         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
31080
31081 2001-10-21  Ravi Pratap  <ravi@ximian.com>
31082
31083         * interface.cs (FindMembers): Implement to work around S.R.E
31084         lameness.
31085
31086         * typemanager.cs (IsInterfaceType): Implement.
31087
31088         (FindMembers): Update to handle interface types too.
31089
31090         * expression.cs (ImplicitReferenceConversion): Re-write bits which
31091         use IsAssignableFrom as that is not correct - it doesn't work.
31092
31093         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
31094         and accordingly override EmitStatement.
31095
31096         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
31097         using the correct logic :-)
31098
31099 2001-10-19  Ravi Pratap  <ravi@ximian.com>
31100
31101         * ../errors/cs-11.cs : Add to demonstrate error -11 
31102
31103 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
31104
31105         * assign.cs (Assign::Resolve): Resolve right hand side first, and
31106         then pass this as a hint to ResolveLValue.
31107
31108         * expression.cs (FieldExpr): Add Location information
31109
31110         (FieldExpr::LValueResolve): Report assignment to readonly
31111         variable. 
31112
31113         (Expression::ExprClassFromMemberInfo): Pass location information.
31114
31115         (Expression::ResolveLValue): Add new method that resolves an
31116         LValue. 
31117
31118         (Expression::DoResolveLValue): Default invocation calls
31119         DoResolve. 
31120
31121         (Indexers): New class used to keep track of indexers in a given
31122         Type. 
31123
31124         (IStackStore): Renamed from LValue, as it did not really describe
31125         what this did.  Also ResolveLValue is gone from this interface and
31126         now is part of Expression.
31127
31128         (ElementAccess): Depending on the element access type
31129
31130         * typemanager.cs: Add `indexer_name_type' as a Core type
31131         (System.Runtime.CompilerServices.IndexerNameAttribute)
31132
31133         * statement.cs (Goto): Take a location.
31134
31135 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31136
31137         * delegate.cs (Delegate::VerifyDelegate): New method to verify
31138         if two delegates are compatible.
31139
31140         (NewDelegate::DoResolve): Update to take care of the case when
31141         we instantiate a delegate from another delegate.
31142
31143         * typemanager.cs (FindMembers): Don't even try to look up members
31144         of Delegate types for now.
31145
31146 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31147
31148         * delegate.cs (NewDelegate): New class to take care of delegate
31149         instantiation.
31150
31151         * expression.cs (New): Split the delegate related code out into 
31152         the NewDelegate class.
31153
31154         * delegate.cs (DelegateInvocation): New class to handle delegate 
31155         invocation.
31156
31157         * expression.cs (Invocation): Split out delegate related code into
31158         the DelegateInvocation class.
31159
31160 2001-10-17  Ravi Pratap  <ravi@ximian.com>
31161
31162         * expression.cs (New::DoResolve): Implement delegate creation fully
31163         and according to the spec.
31164
31165         (New::DoEmit): Update to handle delegates differently.
31166
31167         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
31168         because of which we were printing out arguments in reverse order !
31169
31170         * delegate.cs (VerifyMethod): Implement to check if the given method
31171         matches the delegate.
31172
31173         (FullDelegateDesc): Implement.
31174
31175         (VerifyApplicability): Implement.
31176
31177         * expression.cs (Invocation::DoResolve): Update to accordingly handle
31178         delegate invocations too.
31179
31180         (Invocation::Emit): Ditto.
31181
31182         * ../errors/cs1593.cs : Added.
31183
31184         * ../errors/cs1594.cs : Added.
31185
31186         * delegate.cs (InstanceExpression, TargetMethod): New properties.
31187
31188 2001-10-16  Ravi Pratap  <ravi@ximian.com>
31189
31190         * typemanager.cs (intptr_type): Core type for System.IntPtr
31191
31192         (InitCoreTypes): Update for the same.
31193
31194         (iasyncresult_type, asynccallback_type): Ditto.
31195
31196         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
31197         correct.
31198
31199         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
31200         too.
31201
31202         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
31203         the builders for the 4 members of a delegate type :-)
31204
31205         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
31206         type.
31207
31208         * expression.cs (New::DoResolve): Implement guts for delegate creation.
31209
31210         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
31211
31212 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
31213
31214         * statement.cs (Break::Emit): Implement.   
31215         (Continue::Emit): Implement.
31216
31217         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31218         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31219         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31220         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
31221         end loop
31222
31223         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
31224         properties that track the label for the current loop (begin of the
31225         loop and end of the loop).
31226
31227 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31228
31229         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31230         use of emitting anything at all.
31231
31232         * class.cs, rootcontext.cs : Get rid of calls to the same.
31233
31234         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31235
31236         (Populate): Define the constructor correctly and set the implementation
31237         attributes.
31238
31239         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31240         have been defined.
31241
31242         (AddDelegateType): Implement.
31243
31244         (IsDelegateType): Implement helper method.
31245
31246         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31247
31248         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31249         and accordingly handle it.
31250
31251         * delegate.cs (Populate): Take TypeContainer argument.
31252         Implement bits to define the Invoke method. However, I still haven't figured out
31253         how to take care of the native int bit :-(
31254
31255         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31256         Qualify the name of the delegate, not its return type !
31257
31258         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31259         conversion.
31260
31261         (StandardConversionExists): Checking for array types turns out to be recursive.
31262
31263         (ConvertReferenceExplicit): Implement array conversion.
31264
31265         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31266
31267 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31268
31269         * cs-parser.jay (delegate_declaration): Store the fully qualified
31270         name as it is a type declaration.
31271
31272         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31273         readonly.
31274
31275         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31276         as TypeContainer::DefineType.
31277
31278         (Populate): Method in which all the definition of the various methods (Invoke)
31279         etc is done.
31280
31281         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31282         see.
31283
31284         (CloseDelegate): Finally creates the delegate.
31285
31286         * class.cs (TypeContainer::DefineType): Update to define delegates.
31287         (Populate, Emit and CloseType): Do the same thing here too.
31288
31289         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31290         delegates in all these operations.
31291
31292 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31293
31294         * expression.cs: LocalTemporary: a new expression used to
31295         reference a temporary that has been created.
31296
31297         * assign.cs: Handle PropertyAccess back here, so that we can
31298         provide the proper semantic access to properties.
31299
31300         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31301         a few more explicit conversions. 
31302
31303         * modifiers.cs: `NEW' modifier maps to HideBySig.
31304
31305         * expression.cs (PropertyExpr): Make this into an
31306         ExpressionStatement, and support the EmitStatement code path. 
31307
31308         Perform get/set error checking, clean up the interface.
31309
31310         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31311         them into toplevel access objects.
31312
31313 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31314
31315         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31316         SRE.
31317
31318         * typemanager.cs: Keep track here of our PropertyBuilders again to
31319         work around lameness in SRE.
31320
31321 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31322
31323         * expression.cs (LValue::LValueResolve): New method in the
31324         interface, used to perform a second resolution pass for LValues. 
31325
31326         (This::DoResolve): Catch the use of this in static methods.
31327
31328         (This::LValueResolve): Implement.
31329
31330         (This::Store): Remove warning, assigning to `this' in structures
31331         is 
31332
31333         (Invocation::Emit): Deal with invocation of
31334         methods on value types.  We need to pass the address to structure
31335         methods rather than the object itself.  (The equivalent code to
31336         emit "this" for structures leaves the entire structure on the
31337         stack instead of a pointer to it). 
31338
31339         (ParameterReference::DoResolve): Compute the real index for the
31340         argument based on whether the method takes or not a `this' pointer
31341         (ie, the method is static).
31342
31343         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31344         value types returned from functions when we need to invoke a
31345         method on the sturcture.
31346
31347
31348 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31349
31350         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31351         defining the type in the Modulebuilder or Typebuilder. This is to take
31352         care of nested types which need to be defined on the TypeBuilder using
31353         DefineNestedMethod.
31354
31355         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31356         methods in RootContext, only ported to be part of TypeContainer.
31357
31358         (TypeContainer::GetInterfaceOrClass): Ditto.
31359
31360         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31361
31362         * interface.cs (Interface::DefineInterface): New method. Does exactly
31363         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31364         too.
31365
31366         (Interface::GetInterfaces): Move from RootContext here and port.
31367
31368         (Interface::GetInterfaceByName): Same here.
31369
31370         * rootcontext.cs (ResolveTree): Re-write.
31371
31372         (PopulateTypes): Re-write.
31373
31374         * class.cs (TypeContainer::Populate): Populate nested types too.
31375         (TypeContainer::Emit): Emit nested members too.
31376
31377         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31378         instead just use the name argument passed in as it is already fully
31379         qualified.
31380
31381         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31382         to TypeContainer mapping to see if a type is user-defined.
31383
31384         * class.cs (TypeContainer::CloseType): Implement. 
31385
31386         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31387         the default constructor.
31388
31389         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31390         twice.
31391
31392         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31393
31394         * interface.cs (CloseType): Create the type here.
31395
31396         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31397         the hierarchy.
31398
31399         Remove all the methods which are now in TypeContainer.
31400
31401 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31402
31403         * delegate.cs (Define): Re-write bits to define the delegate
31404         correctly.
31405
31406 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31407
31408         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31409
31410         * expression.cs (ImplicitReferenceConversion): handle null as well
31411         as a source to convert to any reference type.
31412
31413         * statement.cs (Return): Perform any implicit conversions to
31414         expected return type.  
31415
31416         Validate use of return statement.  
31417
31418         * codegen.cs (EmitContext): Pass the expected return type here.
31419
31420         * class.cs (Method, Constructor, Property): Pass expected return
31421         type to EmitContext.
31422
31423 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31424
31425         * expression.cs: Make DoResolve take an EmitContext instead of a
31426         TypeContainer.
31427
31428         Replaced `l' and `location' for `loc', for consistency.
31429
31430         (Error, Warning): Remove unneeded Tc argument.
31431
31432         * assign.cs, literal.cs, constant.cs: Update to new calling
31433         convention. 
31434
31435         * codegen.cs: EmitContext now contains a flag indicating whether
31436         code is being generated in a static method or not.
31437
31438         * cs-parser.jay: DecomposeQI, new function that replaces the old
31439         QualifiedIdentifier.  Now we always decompose the assembled
31440         strings from qualified_identifier productions into a group of
31441         memberaccesses.
31442
31443 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31444
31445         * rootcontext.cs: Deal with field-less struct types correctly now
31446         by passing the size option to Define Type.
31447
31448         * class.cs: Removed hack that created one static field. 
31449
31450 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31451
31452         * statement.cs: Moved most of the code generation here. 
31453
31454 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31455
31456         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31457         seem very right.
31458
31459         (ElementAccess): Remove useless bits for now - keep checks as the spec
31460         says.
31461
31462 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31463
31464         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31465         and start performing checks according to the spec.
31466
31467 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31468
31469         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31470         rank_specifiers instead.
31471
31472         (rank_specifiers): Change the order in which the rank specifiers are stored
31473
31474         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31475
31476         * expression.cs (ElementAccess): Implement the LValue interface too.
31477
31478 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31479
31480         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31481         except that user defined conversions are not included.
31482
31483         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31484         perform the conversion of the return type, if necessary.
31485
31486         (New::DoResolve): Check whether we are creating an array or an object
31487         and accordingly do the needful.
31488
31489         (New::Emit): Same here.
31490
31491         (New::DoResolve): Implement guts of array creation.
31492
31493         (New::FormLookupType): Helper function.
31494
31495 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31496
31497         * codegen.cs: Removed most of the code generation here, and move the
31498         corresponding code generation bits to the statement classes. 
31499
31500         Added support for try/catch/finalize and throw.
31501
31502         * cs-parser.jay: Added support for try/catch/finalize.
31503
31504         * class.cs: Catch static methods having the flags override,
31505         virtual or abstract.
31506
31507         * expression.cs (UserCast): This user cast was not really doing
31508         what it was supposed to do.  Which is to be born in fully resolved
31509         state.  Parts of the resolution were being performed at Emit time! 
31510
31511         Fixed this code.
31512
31513 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31514
31515         * expression.cs: Implicity convert the result from UserCast.
31516
31517 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31518
31519         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31520         prevented it from working correctly. 
31521
31522         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31523         merely ConvertImplicit.
31524
31525 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31526
31527         * typemanager.cs: Make the LookupTypeContainer function static,
31528         and not per-instance.  
31529
31530         * class.cs: Make static FindMembers (the one that takes a Type
31531         argument). 
31532
31533         * codegen.cs: Add EmitForeach here.
31534
31535         * cs-parser.jay: Make foreach a toplevel object instead of the
31536         inline expansion, as we need to perform semantic analysis on it. 
31537
31538 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31539
31540         * expression.cs (Expression::ImplicitUserConversion): Rename to
31541         UserDefinedConversion.
31542
31543         (Expression::UserDefinedConversion): Take an extra argument specifying 
31544         whether we look for explicit user conversions too.
31545
31546         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31547
31548         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31549
31550         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31551         with the appropriate arguments.
31552
31553         * cs-parser.jay (cast_expression): Record location too.
31554
31555         * expression.cs (Cast): Record location info.
31556
31557         (Expression::ConvertExplicit): Take location argument.
31558
31559         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31560         to determine if we are doing explicit conversions.
31561
31562         (UserCast::Emit): Update accordingly.
31563
31564         (Expression::ConvertExplicit): Report an error if everything fails.
31565
31566         * ../errors/cs0030.cs : Add.
31567
31568 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31569
31570         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31571         virtual and newslot bits. 
31572
31573         * class.cs (TypeContainer::RegisterRequiredImplementations):
31574         Record methods we need.
31575
31576         (TypeContainer::MakeKey): Helper function to make keys for
31577         MethodBases, since the Methodbase key is useless.
31578
31579         (TypeContainer::Populate): Call RegisterRequiredImplementations
31580         before defining the methods.   
31581
31582         Create a mapping for method_builders_to_methods ahead of time
31583         instead of inside a tight loop.
31584
31585         (::RequireMethods):  Accept an object as the data to set into the
31586         hashtable so we can report interface vs abstract method mismatch.
31587
31588 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31589
31590         * report.cs: Make all of it static.
31591
31592         * rootcontext.cs: Drop object_type and value_type computations, as
31593         we have those in the TypeManager anyways.
31594
31595         Drop report instance variable too, now it is a global.
31596
31597         * driver.cs: Use try/catch on command line handling.
31598
31599         Add --probe option to debug the error reporting system with a test
31600         suite. 
31601
31602         * report.cs: Add support for exiting program when a probe
31603         condition is reached.
31604
31605 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31606
31607         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31608         we do a forcible conversion regardless of type, to check if 
31609         ForceConversion returns a null.
31610
31611         (Binary::error19): Use location to report error.
31612
31613         (Unary::error23): Use location here too.
31614
31615         * ../errors/cs0019.cs : Check in.
31616
31617         * ../errors/cs0023.cs : Check in.
31618
31619         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31620         case of a non-null MethodInfo object with a length of 0 !
31621
31622         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31623         an applicable member - according to the spec :-)
31624         Also fix logic to find members in base types.
31625
31626         (Unary::ResolveOperator): Same here.
31627
31628         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31629         as I was getting thoroughly confused between this and error19 :-)
31630
31631         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31632         (::FindMostEncompassedType): Implement.
31633         (::FindMostEncompassingType): Implement.
31634         (::StandardConversionExists): Implement.
31635
31636         (UserImplicitCast): Re-vamp. We now need info about most specific
31637         source and target types so that we can do the necessary conversions.
31638
31639         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31640         mathematical union with no duplicates.
31641
31642 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31643
31644         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31645         in order from base classes to child classes, so that we can in
31646         child classes look up in our parent for method names and
31647         attributes (required for handling abstract, virtual, new, override
31648         constructs: we need to instrospect our base class, and if we dont
31649         populate the classes in order, the introspection might be
31650         incorrect.  For example, a method could query its parent before
31651         the parent has any methods and would determine that the parent has
31652         no abstract methods (while it could have had them)).
31653
31654         (RootContext::CreateType): Record the order in which we define the
31655         classes.
31656
31657 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31658
31659         * class.cs (TypeContainer::Populate): Also method definitions can
31660         fail now, keep track of this.
31661
31662         (TypeContainer::FindMembers): Implement support for
31663         DeclaredOnly/noDeclaredOnly flag.
31664
31665         (Constructor::Emit) Return the ConstructorBuilder.
31666
31667         (Method::Emit) Return the MethodBuilder. 
31668         Check for abstract or virtual methods to be public.
31669
31670         * rootcontext.cs (RootContext::CreateType): Register all the
31671         abstract methods required for the class to be complete and the
31672         interface methods that must be implemented. 
31673
31674         * cs-parser.jay: Report error 501 (method requires body if it is
31675         not marked abstract or extern).
31676
31677         * expression.cs (TypeOf::Emit): Implement.
31678
31679         * typemanager.cs: runtime_handle_type, new global type.
31680
31681         * class.cs (Property::Emit): Generate code for properties.
31682
31683 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31684
31685         * expression.cs (Unary::ResolveOperator): Find operators on base type
31686         too - we now conform exactly to the spec.
31687
31688         (Binary::ResolveOperator): Same here.
31689
31690         * class.cs (Operator::Define): Fix minor quirk in the tests.
31691
31692         * ../errors/cs0215.cs : Added.
31693
31694         * ../errors/cs0556.cs : Added.
31695
31696         * ../errors/cs0555.cs : Added.
31697
31698 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31699
31700         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31701         single integer which is really efficient
31702
31703 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31704
31705         *  expression.cs (Expression::ImplicitUserConversion): Use location
31706         even in the case when we are examining True operators.
31707  
31708         * class.cs (Operator::Define): Perform extensive checks to conform
31709         with the rules for operator overloading in the spec.
31710
31711         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31712         some of the other conversions mentioned in the spec.
31713
31714         * typemanager.cs (array_type): New static member for the System.Array built-in
31715         type.
31716
31717         (cloneable_interface): For System.ICloneable interface.
31718
31719         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31720         we start resolving the tree and populating types.
31721
31722         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31723  
31724 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31725
31726         * expression.cs (Expression::ExprClassFromMemberInfo,
31727         Expression::Literalize): Create literal expressions from
31728         FieldInfos which are literals.
31729
31730         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31731         type casts, because they were wrong.  The test suite in tests
31732         caught these ones.
31733
31734         (ImplicitNumericConversion): ushort to ulong requires a widening
31735         cast. 
31736
31737         Int32 constant to long requires widening cast as well.
31738
31739         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31740         for integers because the type on the stack is not i4.
31741
31742 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31743
31744         * expression.cs (report118): require location argument. 
31745
31746         * parameter.cs: Do not dereference potential null value.
31747
31748         * class.cs: Catch methods that lack the `new' keyword when
31749         overriding a name.  Report warnings when `new' is used without
31750         anything being there to override.
31751
31752         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31753
31754         * class.cs: Only add constructor to hashtable if it is non-null
31755         (as now constructors can fail on define).
31756
31757         (TypeManager, Class, Struct): Take location arguments.
31758
31759         Catch field instance initialization in structs as errors.
31760
31761         accepting_filter: a new filter for FindMembers that is static so
31762         that we dont create an instance per invocation.
31763
31764         (Constructor::Define): Catch errors where a struct constructor is
31765         parameterless 
31766
31767         * cs-parser.jay: Pass location information for various new
31768         constructs. 
31769
31770         * delegate.cs (Delegate): take a location argument.
31771
31772         * driver.cs: Do not call EmitCode if there were problesm in the
31773         Definition of the types, as many Builders wont be there. 
31774
31775         * decl.cs (Decl::Decl): Require a location argument.
31776
31777         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31778         into integers, and find the most appropiate integer for it.
31779
31780         * literal.cs: Implement ULongLiteral.
31781
31782         * rootcontext.cs: Provide better information about the location of
31783         failure when CreateType fails.
31784
31785 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31786
31787         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31788         as well.
31789
31790         * expression.cs (Binary::CheckShiftArguments): Add missing type
31791         computation.
31792         (Binary::ResolveOperator): Add type to the logical and and logical
31793         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31794         before.
31795
31796         (Binary::DoNumericPromotions): In the case where either argument
31797         is ulong (and most signed types combined with ulong cause an
31798         error) perform implicit integer constant conversions as well.
31799
31800 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31801
31802         * expression.cs (UserImplicitCast): Method should always be
31803         non-null. 
31804         (Invocation::BetterConversion): Simplified test for IntLiteral.
31805
31806         (Expression::ImplicitNumericConversion): Split this routine out.
31807         Put the code that performs implicit constant integer conversions
31808         here. 
31809
31810         (Expression::Resolve): Become a wrapper around DoResolve so we can
31811         check eclass and type being set after resolve.
31812
31813         (Invocation::Badness): Remove this dead function
31814
31815         (Binary::ResolveOperator): Do not compute the expensive argumnets
31816         unless we have a union for it.
31817
31818         (Probe::Emit): Is needs to do an isinst and then
31819         compare against null.
31820
31821         (::CanConvert): Added Location argument.  If the Location argument
31822         is null (Location.Null), then we do not report errors.  This is
31823         used by the `probe' mechanism of the Explicit conversion.  We do
31824         not want to generate an error for something that the user
31825         explicitly requested to be casted.  But the pipeline for an
31826         explicit cast first tests for potential implicit casts.
31827
31828         So for now, if the Location is null, it means `Probe only' to
31829         avoid adding another argument.   Might have to revise this
31830         strategy later.
31831
31832         (ClassCast): New class used to type cast objects into arbitrary
31833         classes (used in Explicit Reference Conversions).
31834
31835         Implement `as' as well.
31836
31837         Reverted all the patches from Ravi below: they were broken:
31838
31839                 * The use of `level' as a mechanism to stop recursive
31840                   invocations is wrong.  That was there just to catch the
31841                   bug with a strack trace but not as a way of addressing
31842                   the problem.
31843
31844                   To fix the problem we have to *understand* what is going
31845                   on and the interactions and come up with a plan, not
31846                   just get things going.
31847
31848                 * The use of the type conversion cache that I proposed
31849                   last night had an open topic: How does this work across
31850                   protection domains.  A user defined conversion might not
31851                   be public in the location where we are applying the
31852                   conversion, a different conversion might be selected
31853                   (ie, private A->B (better) but public B->A (worse),
31854                   inside A, A->B applies, but outside it, B->A will
31855                   apply).
31856
31857                 * On top of that (ie, even if the above is solved),
31858                   conversions in a cache need to be abstract.  Ie, `To
31859                   convert from an Int to a Short use an OpcodeCast', not
31860                   `To convert from an Int to a Short use the OpcodeCast on
31861                   the variable 5' (which is what this patch was doing).
31862
31863 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31864
31865         * expression.cs (Invocation::ConversionExists): Re-write to use
31866         the conversion cache
31867
31868         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31869         cache all conversions done, not just user-defined ones.
31870
31871         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31872         to determine if a conversion exists instead of acutually trying to 
31873         perform the conversion. It's faster too.
31874
31875         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31876         and only then attempt the implicit conversion.
31877
31878 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31879
31880         * expression.cs (ConvertImplicit): Use a cache for conversions
31881         already found. Check level of recursion and bail out if necessary.
31882
31883 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31884
31885         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31886         Export standard methods that we expect for string operations.
31887
31888         * statement.cs (Block::UsageWarning): Track usage of variables and
31889         report the errors for not used variables.
31890
31891         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31892         operator. 
31893
31894 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31895
31896         * codegen.cs: remove unnneded code 
31897
31898         * expression.cs: Removed BuiltinTypeAccess class
31899
31900         Fix the order in which implicit conversions are
31901         done.  
31902
31903         The previous fixed dropped support for boxed conversions (adding a
31904         test to the test suite now)
31905
31906         (UserImplicitCast::CanConvert): Remove test for source being null,
31907         that code is broken.  We should not feed a null to begin with, if
31908         we do, then we should track the bug where the problem originates
31909         and not try to cover it up here.
31910
31911         Return a resolved expression of type UserImplicitCast on success
31912         rather than true/false.  Ravi: this is what I was talking about,
31913         the pattern is to use a static method as a "constructor" for
31914         objects. 
31915
31916         Also, do not create arguments until the very last minute,
31917         otherwise we always create the arguments even for lookups that
31918         will never be performed. 
31919
31920         (UserImplicitCast::Resolve): Eliminate, objects of type
31921         UserImplicitCast are born in a fully resolved state. 
31922
31923         * typemanager.cs (InitCoreTypes): Init also value_type
31924         (System.ValueType). 
31925
31926         * expression.cs (Cast::Resolve): First resolve the child expression.
31927
31928         (LValue): Add new method AddressOf to be used by
31929         the `&' operator.  
31930
31931         Change the argument of Store to take an EmitContext instead of an
31932         ILGenerator, because things like FieldExpr need to be able to call
31933         their children expression to generate the instance code. 
31934
31935         (Expression::Error, Expression::Warning): Sugar functions for
31936         reporting errors.
31937
31938         (Expression::MemberLookup): Accept a TypeContainer instead of a
31939         Report as the first argument.
31940
31941         (Expression::ResolvePrimary): Killed.  I still want to improve
31942         this as currently the code is just not right.
31943
31944         (Expression::ResolveMemberAccess): Simplify, but it is still
31945         wrong. 
31946
31947         (Unary::Resolve): Catch errors in AddressOf operators.
31948
31949         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31950         index to a byte for the short-version, or the compiler will choose
31951         the wrong Emit call, which generates the wrong data.
31952
31953         (ParameterReference::Emit, ::Store): same.
31954
31955         (FieldExpr::AddressOf): Implement.
31956
31957         * typemanager.cs: TypeManager: made public variable instead of
31958         property.
31959
31960         * driver.cs: document --fatal.
31961
31962         * report.cs (ErrorMessage, WarningMessage): new names for the old
31963         Error and Warning classes.
31964
31965         * cs-parser.jay (member_access): Turn built-in access to types
31966         into a normal simplename
31967
31968 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31969
31970         * expression.cs (Invocation::BetterConversion): Fix to cope
31971         with q being null, since this was introducing a bug.
31972
31973         * expression.cs (ConvertImplicit): Do built-in conversions first.
31974
31975 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31976
31977         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31978
31979 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31980
31981         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31982         I had introduced long ago (what's new ?).
31983
31984         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31985         the work of all the checking. 
31986         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31987         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31988
31989         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31990         that is the right way. 
31991
31992         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31993         overloading resolution. Use everywhere instead of cutting and pasting code.
31994
31995         (Binary::ResolveOperator): Use MakeUnionSet.
31996
31997         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31998         we have to convert to bool types. Not complete yet.
31999
32000 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32001
32002         * typemanager.cs (TypeManager::CSharpName): support ushort.
32003
32004         * expression.cs (Expression::TryImplicitIntConversion): Attempts
32005         to provide an expression that performsn an implicit constant int
32006         conversion (section 6.1.6).
32007         (Expression::ConvertImplicitRequired): Reworked to include
32008         implicit constant expression conversions.
32009
32010         (Expression::ConvertNumericExplicit): Finished.
32011
32012         (Invocation::Emit): If InstanceExpression is null, then it means
32013         that we perform a call on this.
32014
32015 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32016
32017         * expression.cs (Unary::Emit): Remove some dead code.
32018         (Probe): Implement Resolve and Emit for `is'.
32019         (Expression::ConvertImplicitRequired): Attempt to do constant
32020         expression conversions here.  Maybe should be moved to
32021         ConvertImplicit, but I am not sure.
32022         (Expression::ImplicitLongConstantConversionPossible,
32023         Expression::ImplicitIntConstantConversionPossible): New functions
32024         that tell whether is it possible to apply an implicit constant
32025         expression conversion.
32026
32027         (ConvertNumericExplicit): Started work on explicit numeric
32028         conversions.
32029
32030         * cs-parser.jay: Update operator constants.
32031
32032         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
32033         (Parameters::GetSignature): Hook up VerifyArgs here.
32034         (Parameters::VerifyArgs): Verifies that no two arguments have the
32035         same name. 
32036
32037         * class.cs (Operator): Update the operator names to reflect the
32038         ones that the spec expects (as we are just stringizing the
32039         operator names).
32040
32041         * expression.cs (Unary::ResolveOperator): Fix bug: Use
32042         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
32043         previous usage did only work for our methods.
32044         (Expression::ConvertImplicit): Handle decimal implicit numeric
32045         conversions as well.
32046         (Expression::InternalTypeConstructor): Used to invoke constructors
32047         on internal types for default promotions.
32048
32049         (Unary::Emit): Implement special handling for the pre/post
32050         increment/decrement for overloaded operators, as they need to have
32051         the same semantics as the other operators.
32052
32053         (Binary::ResolveOperator): ditto.
32054         (Invocation::ConversionExists): ditto.
32055         (UserImplicitCast::Resolve): ditto.
32056
32057 2001-09-26  Ravi Pratap  <ravi@ximian.com>
32058
32059         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
32060         operator, return after emitting body. Regression tests pass again !
32061
32062         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
32063         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
32064         (Invocation::OverloadResolve): Ditto.
32065         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
32066
32067         * everywhere : update calls to the above methods accordingly.
32068
32069 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32070
32071         * assign.cs (Assign): Make it inherit from ExpressionStatement.
32072
32073         * expression.cs (ExpressionStatement): New base class used for
32074         expressions that can appear in statements, so that we can provide
32075         an alternate path to generate expression that do not leave a value
32076         on the stack.
32077
32078         (Expression::Emit, and all the derivatives): We no longer return
32079         whether a value is left on the stack or not.  Every expression
32080         after being emitted leaves a single value on the stack.
32081
32082         * codegen.cs (EmitContext::EmitStatementExpression): Use the
32083         facilties of ExpressionStatement if possible.
32084
32085         * cs-parser.jay: Update statement_expression.
32086
32087 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
32088
32089         * driver.cs: Change the wording of message
32090
32091 2001-09-25  Ravi Pratap  <ravi@ximian.com>
32092
32093         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
32094         the type of the expression to the return type of the method if
32095         we have an overloaded operator match ! The regression tests pass again !
32096         (Unary::ResolveOperator): Ditto.
32097
32098         * expression.cs (Invocation::ConversionExists): Correct the member lookup
32099         to find "op_Implicit", not "implicit" ;-)
32100         (UserImplicitCast): New class to take care of user-defined implicit conversions.
32101         (ConvertImplicit, ForceConversion): Take TypeContainer argument
32102
32103         * everywhere : Correct calls to the above accordingly.
32104
32105         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
32106         (ConvertImplicit): Do user-defined conversion if it exists.
32107
32108 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
32109
32110         * assign.cs: track location.
32111         (Resolve): Use implicit conversions on assignment.
32112
32113         * literal.cs: Oops.  Not good, Emit of short access values should
32114         pass (Bytes) or the wrong argument will be selected.
32115
32116         * expression.cs (Unary::Emit): Emit code for -expr.
32117
32118         (Unary::ResolveOperator): Handle `Substract' for non-constants
32119         (substract from zero from the non-constants).
32120         Deal with Doubles as well. 
32121
32122         (Expression::ConvertImplicitRequired): New routine that reports an
32123         error if no implicit conversion exists. 
32124
32125         (Invocation::OverloadResolve): Store the converted implicit
32126         expressions if we make them
32127
32128 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32129
32130         * class.cs (ConstructorInitializer): Take a Location argument.
32131         (ConstructorBaseInitializer): Same here.
32132         (ConstructorThisInitializer): Same here.
32133
32134         * cs-parser.jay : Update all calls accordingly.
32135
32136         * expression.cs (Unary, Binary, New): Take location argument.
32137         Update accordingly everywhere.
32138
32139         * cs-parser.jay : Update all calls to the above to take a location
32140         argument.
32141
32142         * class.cs : Ditto.
32143
32144 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32145
32146         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
32147         (Invocation::BetterConversion): Same here
32148         (Invocation::ConversionExists): Ditto.
32149
32150         (Invocation::ConversionExists): Implement.
32151
32152 2001-09-22  Ravi Pratap  <ravi@ximian.com>
32153
32154         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
32155         Also take an additional TypeContainer argument.
32156
32157         * All over : Pass in TypeContainer as argument to OverloadResolve.
32158
32159         * typemanager.cs (CSharpName): Update to check for the string type and return
32160         that too.
32161
32162         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
32163         a given method.
32164
32165 2001-09-21  Ravi Pratap  <ravi@ximian.com>
32166
32167         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
32168         (Invocation::BetterFunction): Implement.
32169         (Invocation::BetterConversion): Implement.
32170         (Invocation::ConversionExists): Skeleton, no implementation yet.
32171
32172         Okay, things work fine !
32173
32174 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
32175
32176         * typemanager.cs: declare and load enum_type, delegate_type and
32177         void_type. 
32178
32179         * expression.cs (Expression::Emit): Now emit returns a value that
32180         tells whether a value is left on the stack or not.  This strategy
32181         might be reveted tomorrow with a mechanism that would address
32182         multiple assignments.
32183         (Expression::report118): Utility routine to report mismatches on
32184         the ExprClass.
32185
32186         (Unary::Report23): Report impossible type/operator combination
32187         utility function.
32188
32189         (Unary::IsIncrementableNumber): Whether the type can be
32190         incremented or decremented with add.
32191         (Unary::ResolveOperator): Also allow enumerations to be bitwise
32192         complemented. 
32193         (Unary::ResolveOperator): Implement ++, !, ~,
32194
32195         (Invocation::Emit): Deal with new Emit convetion.
32196
32197         * All Expression derivatives: Updated their Emit method to return
32198         whether they leave values on the stack or not.
32199
32200         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
32201         stack for expressions that are statements. 
32202
32203 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32204
32205         * expression.cs (LValue): New interface.  Must be implemented by
32206         LValue objects.
32207         (LocalVariableReference, ParameterReference, FieldExpr): Implement
32208         LValue interface.
32209
32210         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
32211         interface for generating code, simplifies the code.
32212
32213 2001-09-20  Ravi Pratap  <ravi@ximian.com>
32214
32215         * expression.cs (everywhere): Comment out return statements in ::Resolve
32216         methods to avoid the warnings.
32217
32218 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32219
32220         * driver.cs (parse): Report error 2001 if we can not open the
32221         source file.
32222
32223         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
32224         not resolve it.
32225
32226         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
32227         object. 
32228
32229         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32230         otherwise nested blocks end up with the same index.
32231
32232         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32233
32234         * expression.cs:  Instead of having FIXMEs in the Resolve
32235         functions, throw exceptions so it is obvious that we are facing a
32236         bug. 
32237
32238         * cs-parser.jay (invocation_expression): Pass Location information.
32239
32240         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32241         Use a basename for those routines because .NET does not like paths
32242         on them. 
32243
32244         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32245         already defined.
32246
32247 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32248
32249         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32250         are loading the correct data types (throws an exception if not).
32251         (TypeManager::InitCoreTypes): Use CoreLookupType
32252
32253         * expression.cs (Unary::ResolveOperator): return the child
32254         expression for expressions which are just +expr.
32255         (Unary::ResolveOperator): Return negative literals for -LITERAL
32256         expressions (otherwise they are Unary {Literal}).
32257         (Invocation::Badness): Take into account `Implicit constant
32258         expression conversions'.
32259
32260         * literal.cs (LongLiteral): Implement long literal class.
32261         (IntLiteral): export the `Value' of the intliteral. 
32262
32263 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32264
32265         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32266
32267         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32268         instead of 'Operator'
32269
32270         * expression.cs (Binary::ResolveOperator): Update accordingly.
32271         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32272         and 'Minus'
32273
32274         * cs-parser.jay (unary_expression): Update to use the new names.
32275
32276         * gen-treedump.cs (GetUnary): Same here.
32277
32278         * expression.cs (Unary::Resolve): Implement.
32279         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32280         operators are found instead of making noise ;-)
32281         (Unary::ResolveOperator): New method to do precisely the same thing which
32282         Binary::ResolveOperator does for Binary expressions.
32283         (Unary.method, .Arguments): Add.
32284         (Unary::OperName): Implement.   
32285         (Unary::ForceConversion): Copy and Paste !
32286
32287         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32288         a unary operator.
32289
32290         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32291         for the inbuilt operators. Only overloading works for now ;-)
32292
32293 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32294
32295         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32296         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32297
32298         * expression.cs (This::Emit): Implement. 
32299         (This::Resolve): Implement.
32300         (TypeOf:Resolve): Implement.
32301         (Expression::ResolveSimpleName): Add an implicit this to instance
32302         field references. 
32303         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32304         Bind instance variable to Field expressions.
32305         (FieldExpr::Instance): New field used to track the expression that
32306         represents the object instance.
32307         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32308         binding 
32309         (FieldExpr::Emit): Implement.
32310
32311         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32312         the last instruction contains a return opcode to avoid generating
32313         the last `ret' instruction (this generates correct code, and it is
32314         nice to pass the peverify output).
32315
32316         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32317         initializer for static and instance variables.
32318         (Constructor::Emit): Allow initializer to be null in the case of
32319         static constructors.  Only emit initializer for instance
32320         constructors. 
32321
32322         (TypeContainer::FindMembers): Return a null array if there are no
32323         matches.
32324
32325         Also fix the code for the MemberTypes.Method branch, as it was not
32326         scanning that for operators (or tried to access null variables before).
32327
32328         * assign.cs (Assign::Emit): Handle instance and static fields. 
32329
32330         * TODO: Updated.
32331
32332         * driver.cs: Stop compilation if there are parse errors.
32333
32334         * cs-parser.jay (constructor_declaration): Provide default base
32335         initializer for non-static constructors.
32336         (constructor_declarator): Do not provide a default base
32337         initializers if none was specified.
32338         Catch the fact that constructors should not have parameters.
32339
32340         * class.cs: Do not emit parent class initializers for static
32341         constructors, that should be flagged as an error.
32342
32343 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32344
32345         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32346         Move back code into TypeContainer::Populate.
32347
32348 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32349
32350         * class.cs (TypeContainer::AddConstructor): Fix the check to
32351         compare against Name, not Basename. 
32352         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32353
32354         * cs-parser.jay : Update accordingly.
32355
32356         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32357         for methods, don't forget to look into the operators too.
32358         (RegisterMethodBuilder): Helper method to take care of this for
32359         methods, constructors and operators.
32360         (Operator::Define): Completely revamp.
32361         (Operator.OperatorMethod, MethodName): New fields.
32362         (TypeContainer::Populate): Move the registering of builders into
32363         RegisterMethodBuilder.
32364         (Operator::Emit): Re-write.
32365
32366         * expression.cs (Binary::Emit): Comment out code path to emit method
32367         invocation stuff for the case when we have a user defined operator. I am
32368         just not able to get it right !
32369
32370 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32371
32372         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32373         argument. 
32374
32375         (Expression::MemberLookup): Provide a version that allows to
32376         specify the MemberTypes and BindingFlags. 
32377
32378         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32379         so it was not fetching variable information from outer blocks.
32380
32381         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32382         Beforefieldinit as it was buggy.
32383
32384         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32385         that Ravi put here.  
32386
32387         * class.cs (Constructor::Emit): Only emit if block is not null.
32388         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32389         deal with this by semantically definining it as if the user had
32390         done it.
32391
32392         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32393         constructors as we now "emit" them at a higher level.
32394
32395         (TypeContainer::DefineDefaultConstructor): Used to define the
32396         default constructors if none was provided.
32397
32398         (ConstructorInitializer): Add methods Resolve and Emit. 
32399
32400         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32401
32402 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32403
32404         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32405         the default constructor builder with our hashtable for methodbuilders
32406         to methodcores.
32407
32408         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32409         and argument_count is 0 in which case we have a match.
32410         (Binary::ResolveOperator): More null checking and miscellaneous coding
32411         style cleanup.
32412
32413 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32414
32415         * rootcontext.cs (IsNameSpace): Compare against null.
32416
32417         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32418
32419         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32420         and Unary::Operator.
32421
32422         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32423         accordingly.
32424
32425         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32426         we have overloaded operators.
32427         (Binary::ResolveOperator): Implement the part which does the operator overload
32428         resolution.
32429
32430         * class.cs (Operator::Emit): Implement.
32431         (TypeContainer::Emit): Emit the operators we have too.
32432
32433         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32434         the case when we have a user-defined operator.
32435
32436 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32437
32438         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32439
32440 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32441
32442         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32443         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32444         (Constructor::Emit): Implement.
32445         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32446         if we have no work to do. 
32447         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32448         Emit method.
32449
32450         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32451         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32452
32453         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32454         of parent.parent.
32455
32456 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32457
32458         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32459         in the source.
32460         (Tree::RecordNamespace): Method to do what the name says ;-)
32461         (Tree::Namespaces): Property to get at the namespaces hashtable.
32462
32463         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32464         keep track.
32465
32466         * rootcontext.cs (IsNamespace): Fixed it :-)
32467
32468 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32469
32470         * class.cs (TypeContainer::FindMembers): Add support for
32471         constructors. 
32472         (MethodCore): New class that encapsulates both the shared aspects
32473         of a Constructor and a Method.  
32474         (Method, Constructor): Factored pieces into MethodCore.
32475
32476         * driver.cs: Added --fatal which makes errors throw exceptions.
32477         Load System assembly as well as part of the standard library.
32478
32479         * report.cs: Allow throwing exceptions on errors for debugging.
32480
32481         * modifiers.cs: Do not use `parent', instead use the real type
32482         container to evaluate permission settings.
32483
32484         * class.cs: Put Ravi's patch back in.  He is right, and we will
32485         have to cope with the
32486
32487 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32488
32489         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32490         FamORAssem, not FamANDAssem.
32491
32492 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32493
32494         * driver.cs: Added --parse option that only parses its input files
32495         and terminates.
32496
32497         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32498         incorrect.  IsTopLevel is not used to tell whether an object is
32499         root_types or not (that can be achieved by testing this ==
32500         root_types).  But to see if this is a top-level *class* (not
32501         necessarly our "toplevel" container). 
32502
32503 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32504
32505         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32506         parent instead of a direct call to GetType.
32507
32508 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32509
32510         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32511         Modifiers.TypeAttr. This should just be a call to that method.
32512
32513         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32514         object so that we can determine if we are top-level or not.
32515
32516         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32517         TypeContainer too.
32518
32519         * enum.cs (Enum::Define): Ditto.
32520
32521         * modifiers.cs (FieldAttr): Re-write.
32522
32523         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32524         (TypeContainer::HaveStaticConstructor): New property to provide access
32525         to precisely that info.
32526
32527         * modifiers.cs (MethodAttr): Re-write.
32528         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32529
32530         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32531         of top-level types as claimed.
32532
32533 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32534
32535         * expression.cs (MemberLookup): Fruitless attempt to lookup
32536         constructors.  Maybe I need to emit default constructors?  That
32537         might be it (currently .NET emits this for me automatically).
32538         (Invocation::OverloadResolve): Cope with Arguments == null.
32539         (Invocation::EmitArguments): new function, shared by the new
32540         constructor and us.
32541         (Invocation::Emit): Handle static and instance methods.  Emit
32542         proper call instruction for virtual or non-virtual invocations.
32543         (New::Emit): Implement.
32544         (New::Resolve): Implement.
32545         (MemberAccess:Resolve): Implement.
32546         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32547         to track instances.
32548         (FieldExpr::Resolve): Set type.
32549
32550         * support.cs: Handle empty arguments.
32551                 
32552         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32553         SimpleLookup): Auxiliary routines to help parse a qualifier
32554         identifier.  
32555
32556         Update qualifier_identifier rule.
32557
32558         * codegen.cs: Removed debugging messages.
32559
32560         * class.cs: Make this a global thing, this acts just as a "key" to
32561         objects that we might have around.
32562
32563         (Populate): Only initialize method_builders_to_methods once.
32564
32565         * expression.cs (PropertyExpr): Initialize type from the
32566         PropertyType. 
32567
32568         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32569         Resolve pattern.  Attempt to implicitly convert value to boolean.
32570         Emit code.
32571
32572         * expression.cs: Set the type for the int32/int32 argument case.
32573         (Binary::ResolveOperator): Set the return type to boolean for
32574         comparission operators
32575
32576         * typemanager.cs: Remove debugging print code.
32577
32578         (Invocation::Resolve): resolve type.
32579
32580         * class.cs: Allocate a MemberInfo of the correct size, as the code
32581         elsewhere depends on the test to reflect the correct contents.
32582
32583         (Method::) Keep track of parameters, due to System.Reflection holes
32584
32585         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32586         mapping here.
32587
32588         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32589         of the exact size and return that.
32590
32591         (Class::LookupMethodByBuilder): New function that maps
32592         MethodBuilders to its methods.  Required to locate the information
32593         on methods because System.Reflection bit us again.
32594
32595         * support.cs: New file, contains an interface ParameterData and
32596         two implementations: ReflectionParameters and InternalParameters
32597         used to access Parameter information.  We will need to grow this
32598         as required.
32599
32600         * expression.cs (Invocation::GetParameterData): implement a cache
32601         and a wrapper around the ParameterData creation for methods. 
32602         (Invocation::OverloadResolve): Use new code.
32603
32604 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32605
32606         * class.cs (TypeContainer::EmitField): Remove and move into 
32607         (Field::Define): here and modify accordingly.
32608         (Field.FieldBuilder): New member.
32609         (TypeContainer::Populate): Update accordingly.
32610         (TypeContainer::FindMembers): Implement.
32611
32612 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32613
32614         * statement.cs: (VariableInfo::VariableType): New field to be
32615         initialized with the full type once it is resolved. 
32616
32617 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32618
32619         * parameter.cs (GetParameterInfo): Use a type cache to compute
32620         things only once, and to reuse this information
32621
32622         * expression.cs (LocalVariableReference::Emit): Implement.
32623         (OpcodeCast::Emit): fix.
32624
32625         (ParameterReference::Resolve): Implement.
32626         (ParameterReference::Emit): Implement.
32627
32628         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32629         that are expressions need to stay as Expressions.
32630
32631         * typemanager.cs (CSharpName): Returns the C# name of a type if
32632         possible. 
32633
32634         * expression.cs (Expression::ConvertImplicit): New function that
32635         implements implicit type conversions.
32636
32637         (Expression::ImplicitReferenceConversion): Implements implicit
32638         reference conversions.
32639
32640         (EmptyCast): New type for transparent casts.
32641
32642         (OpcodeCast): New type for casts of types that are performed with
32643         a sequence of bytecodes.
32644
32645         (BoxedCast): New type used for casting value types into reference
32646         types.  Emits a box opcode.
32647
32648         (Binary::DoNumericPromotions): Implements numeric promotions of
32649         and computation of the Binary::Type.
32650
32651         (Binary::EmitBranchable): Optimization.
32652
32653         (Binary::Emit): Implement code emission for expressions.
32654
32655         * typemanager.cs (TypeManager): Added two new core types: sbyte
32656         and byte.
32657
32658 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32659
32660         * class.cs (TypeContainer::FindMembers): Method which does exactly
32661         what Type.FindMembers does, only we don't have to use reflection. No
32662         implementation yet.
32663
32664         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32665         typecontainer objects as we need to get at them.
32666         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32667
32668         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32669         typecontainer object.
32670
32671         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32672         of just a Report object.
32673
32674 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32675
32676         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32677         "remove_"
32678         (TypeContainer::Populate): Now define the delegates of the type too.
32679         (TypeContainer.Delegates): Property to access the list of delegates defined
32680         in the type.
32681
32682         * delegates.cs (Delegate::Define): Implement partially.
32683
32684         * modifiers.cs (TypeAttr): Handle more flags.
32685
32686 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32687
32688         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32689         and not <=
32690         (Operator::Define): Re-write logic to get types by using the LookupType method
32691         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32692         (Indexer::Define): Ditto.
32693         (Event::Define): Ditto.
32694         (Property::Define): Ditto.
32695
32696 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32697
32698         * class.cs (TypeContainer::Populate): Now define operators too. 
32699         (TypeContainer.Operators): New property to access the list of operators
32700         in a type.
32701         (Operator.OperatorMethodBuilder): New member to hold the method builder
32702         for the operator we are defining.
32703         (Operator::Define): Implement.
32704
32705 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32706
32707         * class.cs (Event::Define): Make the prefixes of the accessor methods
32708         addOn_ and removeOn_ 
32709
32710         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32711         of the location being passed in too. Ideally, this should go later since all
32712         error reporting should be done through the Report object.
32713
32714         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32715         (Populate): Iterate thru the indexers we have and define them too.
32716         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32717         for the get and set accessors.
32718         (Indexer::Define): Implement.
32719
32720 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32721
32722         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32723         my previous implementation, did not work.
32724
32725         * typemanager.cs: Add a couple of missing types (the longs).
32726
32727         * literal.cs: Use TypeManager.bool_type instead of getting it.
32728
32729         * expression.cs (EventExpr): New kind of expressions.
32730         (Expressio::ExprClassFromMemberInfo): finish
32731
32732 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32733
32734         * assign.cs: Emit stores to static fields differently.
32735
32736 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32737
32738         * Merge in changes and adjust code to tackle conflicts. Backed out my
32739         code in Assign::Resolve ;-) 
32740
32741 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32742
32743         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32744         instead Report.Error and also pass in the location.
32745         (CSharpParser::Lexer): New readonly property to return the reference
32746         to the Tokenizer object.
32747         (declare_local_variables): Use Report.Error with location instead of plain 
32748         old error.
32749         (CheckDef): Ditto.
32750
32751         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32752         (Operator.CheckBinaryOperator): Ditto.
32753
32754         * cs-parser.jay (operator_declarator): Update accordingly.
32755
32756         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32757         (CheckBinaryOperator): Same here.
32758
32759         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32760         on the name without any prefixes of namespace names etc. This is because we
32761         already might have something already fully qualified like 
32762         'System.Console.WriteLine'
32763
32764         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32765
32766 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32767
32768         * cs-tokenizer.cs (location): Return a string which also contains
32769         the file name.
32770
32771         * expression.cs (ElementAccess): New class for expressions of the
32772         type 'element access.'
32773         (BaseAccess): New class for expressions of the type 'base access.'
32774         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32775         respectively.
32776
32777         * cs-parser.jay (element_access): Implement action.
32778         (base_access): Implement actions.
32779         (checked_expression, unchecked_expression): Implement.
32780
32781         * cs-parser.jay (local_variable_type): Correct and implement.
32782         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32783
32784         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32785
32786         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32787         name and the specifiers.
32788
32789         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32790
32791         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32792         making them all public ;-)
32793
32794         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32795         class anyways.
32796
32797 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32798
32799         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32800         PropertyExprs.
32801         (FieldExpr, PropertyExprs): New resolved expressions.
32802         (SimpleName::MemberStaticCheck): Perform static checks for access
32803         to non-static fields on static methods. Maybe this should be
32804         generalized for MemberAccesses. 
32805         (SimpleName::ResolveSimpleName): More work on simple name
32806         resolution. 
32807
32808         * cs-parser.jay (primary_expression/qualified_identifier): track
32809         the parameter index.
32810
32811         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32812         (EmitContext::EmitBoolExpression): Chain to expression generation
32813         instead of temporary hack.
32814         (::EmitStatementExpression): Put generic expression code generation.
32815
32816         * assign.cs (Assign::Emit): Implement variable assignments to
32817         local variables, parameters and fields.
32818
32819 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32820
32821         * statement.cs (Block::GetVariableInfo): New method, returns the
32822         VariableInfo for a variable name in a block.
32823         (Block::GetVariableType): Implement in terms of GetVariableInfo
32824
32825         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32826         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32827
32828 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32829
32830         * cs-parser.jay (operator_declaration): Continue on my quest : update
32831         to take attributes argument.
32832         (event_declaration): Ditto.
32833         (enum_declaration): Ditto.
32834         (indexer_declaration): Ditto.
32835
32836         * class.cs (Operator::Operator): Update constructor accordingly.
32837         (Event::Event): Ditto.
32838
32839         * delegate.cs (Delegate::Delegate): Same here.
32840
32841         * enum.cs (Enum::Enum): Same here.
32842
32843 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32844
32845         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32846
32847         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32848
32849         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32850         being passed around as an arraylist.
32851         (Attributes::AddAttribute): Method to add attribute sections.
32852
32853         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32854         (struct_declaration): Update accordingly.
32855         (constant_declaration): Update.
32856         (field_declaration): Update.
32857         (method_header): Update.
32858         (fixed_parameter): Update.
32859         (parameter_array): Ditto.
32860         (property_declaration): Ditto.
32861         (destructor_declaration): Ditto.
32862
32863         * class.cs (Struct::Struct): Update constructors accordingly.
32864         (Class::Class): Ditto.
32865         (Field::Field): Ditto.
32866         (Method::Method): Ditto.
32867         (Property::Property): Ditto.
32868         (TypeContainer::OptAttribute): update property's return type.
32869
32870         * interface.cs (Interface.opt_attributes): New member.
32871         (Interface::Interface): Update to take the extra Attributes argument.
32872
32873         * parameter.cs (Parameter::Parameter): Ditto.
32874
32875         * constant.cs (Constant::Constant): Ditto.
32876
32877         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32878         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32879         the attributes as a parameter.
32880         (InterfaceProperty): Update constructor call.
32881         (InterfaceEvent): Ditto.
32882         (InterfaceMethod): Ditto.
32883         (InterfaceIndexer): Ditto.
32884
32885         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32886         pass the attributes too.
32887         (interface_event_declaration): Ditto.
32888         (interface_property_declaration): Ditto.
32889         (interface_method_declaration): Ditto.
32890         (interface_declaration): Ditto.
32891
32892 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32893
32894         * class.cs (Method::Define): Track the "static Main" definition to
32895         create an entry point. 
32896
32897         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32898         EntryPoint if we find it. 
32899
32900         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32901         (EmitContext::ig): Make this variable public.
32902
32903         * driver.cs: Make the default output file be the first file name
32904         with the .exe extension.  
32905
32906         Detect empty compilations
32907
32908         Handle various kinds of output targets.  Handle --target and
32909         rename -t to --dumper.
32910
32911         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32912         methods inherited from Expression return now an Expression.  This
32913         will is used during the tree rewriting as we resolve them during
32914         semantic analysis.
32915
32916         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32917         the spec.  Missing entirely is the information about
32918         accessability of elements of it.
32919
32920         (Expression::ExprClassFromMemberInfo): New constructor for
32921         Expressions that creates a fully initialized Expression based on
32922         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32923         a Type.
32924
32925         (Invocation::Resolve): Begin implementing resolution of invocations.
32926
32927         * literal.cs (StringLiteral):  Implement Emit.
32928
32929 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32930
32931         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32932         member.
32933
32934 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32935
32936         * cs-parser.jay (attribute_arguments): Implement actions.
32937         (attribute): Fix bug in production. Implement action.
32938         (attribute_list): Implement.
32939         (attribute_target): Implement.
32940         (attribute_target_specifier, opt_target_specifier): Implement
32941         (CheckAttributeTarget): New method to check if the attribute target
32942         is valid.
32943         (attribute_section): Implement.
32944         (opt_attributes): Implement.
32945
32946         * attribute.cs : New file to handle attributes.
32947         (Attribute): Class to hold attribute info.
32948
32949         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32950         (attribute_section): Modify production to use 2 different rules to 
32951         achieve the same thing. 1 s/r conflict down !
32952         Clean out commented, useless, non-reducing dimension_separator rules.
32953
32954         * class.cs (TypeContainer.attributes): New member to hold list
32955         of attributes for a type.
32956         (Struct::Struct): Modify to take one more argument, the attribute list.
32957         (Class::Class): Ditto.
32958         (Field::Field): Ditto.
32959         (Method::Method): Ditto.
32960         (Property::Property): Ditto.
32961
32962         * cs-parser.jay (struct_declaration): Update constructor call to
32963         pass in the attributes too.
32964         (class_declaration): Ditto.
32965         (constant_declaration): Ditto.
32966         (field_declaration): Ditto.
32967         (method_header): Ditto.
32968         (fixed_parameter): Ditto.
32969         (parameter_array): Ditto.
32970         (property_declaration): Ditto.
32971
32972         * constant.cs (Constant::Constant): Update constructor similarly.
32973         Use System.Collections.
32974
32975         * parameter.cs (Parameter::Parameter): Update as above.
32976
32977 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32978
32979         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32980         (TypeContainer.delegates): New member to hold list of delegates.
32981
32982         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32983         this time as I seem to be on crack ;-)
32984
32985 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32986
32987         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32988         tell whether an identifier represents a namespace.
32989
32990         * expression.cs (NamespaceExpr): A namespace expression, used only
32991         temporarly during expression resolution.
32992         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32993         utility functions to resolve names on expressions.
32994
32995 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32996
32997         * codegen.cs: Add hook for StatementExpressions. 
32998
32999         * class.cs: Fix inverted test for static flag in methods.
33000
33001 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33002
33003         * class.cs (Operator::CheckUnaryOperator): Correct error number used
33004         to make it coincide with MS' number.
33005         (Operator::CheckBinaryOperator): Ditto.
33006
33007         * ../errors/errors.txt : Remove error numbers added earlier.
33008
33009         * ../errors/cs1019.cs : Test case for error # 1019
33010
33011         * ../errros/cs1020.cs : Test case for error # 1020
33012
33013         * cs-parser.jay : Clean out commented cruft.
33014         (dimension_separators, dimension_separator): Comment out. Ostensibly not
33015         used anywhere - non-reducing rule.
33016         (namespace_declarations): Non-reducing rule - comment out.
33017
33018         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
33019         with TypeContainer::AddEnum.
33020
33021         * delegate.cs : New file for delegate handling classes.
33022         (Delegate): Class for declaring delegates.
33023
33024         * makefile : Update.
33025
33026         * cs-parser.jay (delegate_declaration): Implement.
33027
33028 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
33029
33030         * class.cs (Event::Define): Implement.
33031         (Event.EventBuilder): New member.
33032
33033         * class.cs (TypeContainer::Populate): Update to define all enums and events
33034         we have.
33035         (Events): New property for the events arraylist we hold. Shouldn't we move to using
33036         readonly fields for all these cases ?
33037
33038 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33039
33040         * class.cs (Property): Revamp to use the convention of making fields readonly.
33041         Accordingly modify code elsewhere.
33042
33043         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
33044         the Define method of the Property class.
33045
33046         * class.cs : Clean up applied patch and update references to variables etc. Fix 
33047         trivial bug.
33048         (TypeContainer::Populate): Update to define all the properties we have. Also
33049         define all enumerations.
33050
33051         * enum.cs (Define): Implement.
33052
33053 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33054
33055         * cs-parser.jay (overloadable_operator): The semantic value is an
33056         enum of the Operator class.
33057         (operator_declarator): Implement actions.
33058         (operator_declaration): Implement.
33059
33060         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
33061         validity of definitions.
33062         (Operator::CheckBinaryOperator): Static method to check for binary operators
33063         (TypeContainer::AddOperator): New method to add an operator to a type.
33064
33065         * cs-parser.jay (indexer_declaration): Added line to actually call the
33066         AddIndexer method so it gets added ;-)
33067
33068         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
33069         already taken care of by the MS compiler ?  
33070
33071 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33072
33073         * class.cs (Operator): New class for operator declarations.
33074         (Operator::OpType): Enum for the various operators.
33075
33076 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33077
33078         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
33079         ostensibly handle this in semantic analysis.
33080
33081         * cs-parser.jay (general_catch_clause): Comment out
33082         (specific_catch_clauses, specific_catch_clause): Ditto.
33083         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
33084         (catch_args, opt_catch_args): New productions.
33085         (catch_clause): Rewrite to use the new productions above
33086         (catch_clauses): Modify accordingly.
33087         (opt_catch_clauses): New production to use in try_statement
33088         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
33089         and re-write the code in the actions to extract the specific and
33090         general catch clauses by being a little smart ;-)
33091
33092         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
33093         Hooray, try and catch statements parse fine !
33094
33095 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33096
33097         * statement.cs (Block::GetVariableType): Fix logic to extract the type
33098         string from the hashtable of variables.
33099
33100         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
33101         I end up making that mistake ;-)
33102         (catch_clauses): Fixed gross error which made Key and Value of the 
33103         DictionaryEntry the same : $1 !!
33104
33105 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33106
33107         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
33108
33109         * cs-parser.jay (event_declaration): Correct to remove the semicolon
33110         when the add and remove accessors are specified. 
33111
33112 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33113
33114         * cs-parser.jay (IndexerDeclaration): New helper class to hold
33115         information about indexer_declarator.
33116         (indexer_declarator): Implement actions.
33117         (parsing_indexer): New local boolean used to keep track of whether
33118         we are parsing indexers or properties. This is necessary because 
33119         implicit_parameters come into picture even for the get accessor in the 
33120         case of an indexer.
33121         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
33122
33123         * class.cs (Indexer): New class for indexer declarations.
33124         (TypeContainer::AddIndexer): New method to add an indexer to a type.
33125         (TypeContainer::indexers): New member to hold list of indexers for the
33126         type.
33127
33128 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33129
33130         * cs-parser.jay (add_accessor_declaration): Implement action.
33131         (remove_accessor_declaration): Implement action.
33132         (event_accessors_declaration): Implement
33133         (variable_declarators): swap statements for first rule - trivial.
33134
33135         * class.cs (Event): New class to hold information about event
33136         declarations.
33137         (TypeContainer::AddEvent): New method to add an event to a type
33138         (TypeContainer::events): New member to hold list of events.
33139
33140         * cs-parser.jay (event_declaration): Implement actions.
33141
33142 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33143
33144         * cs-parser.jay (dim_separators): Implement. Make it a string
33145         concatenating all the commas together, just as they appear.
33146         (opt_dim_separators): Modify accordingly
33147         (rank_specifiers): Update accordingly. Basically do the same
33148         thing - instead, collect the brackets here.
33149         (opt_rank_sepcifiers): Modify accordingly.
33150         (array_type): Modify to actually return the complete type string
33151         instead of ignoring the rank_specifiers.
33152         (expression_list): Implement to collect the expressions
33153         (variable_initializer): Implement. We make it a list of expressions
33154         essentially so that we can handle the array_initializer case neatly too.
33155         (variable_initializer_list): Implement.
33156         (array_initializer): Make it a list of variable_initializers
33157         (opt_array_initializer): Modify accordingly.
33158
33159         * expression.cs (New::NType): Add enumeration to help us
33160         keep track of whether we have an object/delegate creation
33161         or an array creation.
33162         (New:NewType, New::Rank, New::Indices, New::Initializers): New
33163         members to hold data about array creation.
33164         (New:New): Modify to update NewType
33165         (New:New): New Overloaded contructor for the array creation
33166         case.
33167
33168         * cs-parser.jay (array_creation_expression): Implement to call
33169         the overloaded New constructor.
33170
33171 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
33172
33173         * class.cs (TypeContainer::Constructors): Return member
33174         constructors instead of returning null.
33175
33176 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
33177
33178         * typemanager.cs (InitCoreTypes): Initialize the various core
33179         types after we have populated the type manager with the user
33180         defined types (this distinction will be important later while
33181         compiling corlib.dll)
33182
33183         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
33184         on Expression Classification.  Now all expressions have a method
33185         `Resolve' and a method `Emit'.
33186
33187         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
33188         generation from working.     Also add some temporary debugging
33189         code. 
33190
33191 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
33192
33193         * codegen.cs: Lots of code generation pieces.  This is only the
33194         beginning, will continue tomorrow with more touches of polish.  We
33195         handle the fundamentals of if, while, do, for, return.  Others are
33196         trickier and I need to start working on invocations soon.
33197
33198         * gen-treedump.cs: Bug fix, use s.Increment here instead of
33199         s.InitStatement. 
33200
33201         * codegen.cs (EmitContext): New struct, used during code
33202         emission to keep a context.   Most of the code generation will be
33203         here. 
33204
33205         * cs-parser.jay: Add embedded blocks to the list of statements of
33206         this block.  So code generation proceeds in a top down fashion.
33207
33208 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
33209
33210         * statement.cs: Add support for multiple child blocks.
33211
33212 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
33213
33214         * codegen.cs (EmitCode): New function, will emit the code for a
33215         Block of code given a TypeContainer and its ILGenerator. 
33216
33217         * statement.cs (Block): Standard public readonly optimization.
33218         (Block::Block constructors): Link children. 
33219         (Block::Child): Child Linker.
33220         (Block::EmitVariables): Emits IL variable declarations.
33221
33222         * class.cs: Drop support for MethodGroups here, delay until
33223         Semantic Analysis.
33224         (Method::): Applied the same simplification that I did before, and
33225         move from Properties to public readonly fields.
33226         (Method::ParameterTypes): Returns the parameter types for the
33227         function, and implements a cache that will be useful later when I
33228         do error checking and the semantic analysis on the methods is
33229         performed.
33230         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33231         and made a method, optional argument tells whether this is a class
33232         or a structure to apply the `has-this' bit.
33233         (Method::GetCallingConvention): Implement, returns the calling
33234         convention. 
33235         (Method::Define): Defines the type, a second pass is performed
33236         later to populate the methods.
33237
33238         (Constructor::ParameterTypes): implement a cache similar to the
33239         one on Method::ParameterTypes, useful later when we do semantic
33240         analysis. 
33241
33242         (TypeContainer::EmitMethod):  New method.  Emits methods.
33243
33244         * expression.cs: Removed MethodGroup class from here.
33245
33246         * parameter.cs (Parameters::GetCallingConvention): new method.
33247
33248 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33249
33250         * class.cs (TypeContainer::Populate): Drop RootContext from the
33251         argument. 
33252
33253         (Constructor::CallingConvention): Returns the calling convention.
33254         (Constructor::ParameterTypes): Returns the constructor parameter
33255         types. 
33256
33257         (TypeContainer::AddConstructor): Keep track of default constructor
33258         and the default static constructor.
33259
33260         (Constructor::) Another class that starts using `public readonly'
33261         instead of properties. 
33262
33263         (Constructor::IsDefault): Whether this is a default constructor. 
33264
33265         (Field::) use readonly public fields instead of properties also.
33266
33267         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33268         track of static constructors;  If none is used, turn on
33269         BeforeFieldInit in the TypeAttributes. 
33270
33271         * cs-parser.jay (opt_argument_list): now the return can be null
33272         for the cases where there are no arguments. 
33273
33274         (constructor_declarator): If there is no implicit `base' or
33275         `this', then invoke the default parent constructor. 
33276
33277         * modifiers.cs (MethodAttr): New static function maps a set of
33278         modifiers flags into a MethodAttributes enum
33279         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33280         MethodAttr, TypeAttr to represent the various mappings where the
33281         modifiers are used.
33282         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33283
33284 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33285
33286         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33287         method arguments.
33288
33289         * interface.cs (PopulateIndexer): Implemented the code generator
33290         for interface indexers.
33291
33292 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33293
33294         * interface.cs (InterfaceMemberBase): Now we track the new status
33295         here.  
33296
33297         (PopulateProperty): Implement property population.  Woohoo!  Got
33298         Methods and Properties going today. 
33299
33300         Removed all the properties for interfaces, and replaced them with
33301         `public readonly' fields. 
33302
33303 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33304
33305         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33306         initialize their hashtables/arraylists only when they are needed
33307         instead of doing this always.
33308
33309         * parameter.cs: Handle refs and out parameters.
33310
33311         * cs-parser.jay: Use an ArrayList to construct the arguments
33312         instead of the ParameterCollection, and then cast that to a
33313         Parameter[] array.
33314
33315         * parameter.cs: Drop the use of ParameterCollection and use
33316         instead arrays of Parameters.
33317
33318         (GetParameterInfo): Use the Type, not the Name when resolving
33319         types. 
33320
33321 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33322
33323         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33324         and instead use public readonly fields.
33325
33326         * class.cs: Put back walking code for type containers.
33327
33328 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33329
33330         * class.cs (MakeConstant): Code to define constants.
33331
33332         * rootcontext.cs (LookupType): New function.  Used to locate types 
33333
33334
33335 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33336
33337         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33338         this System.Reflection code is.  Kudos to Microsoft
33339
33340         * typemanager.cs: Implement a type cache and avoid loading all
33341         types at boot time.  Wrap in LookupType the internals.  This made
33342         the compiler so much faster.  Wow.  I rule!
33343
33344         * driver.cs: Make sure we always load mscorlib first (for
33345         debugging purposes, nothing really important).
33346
33347         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33348         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33349
33350         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33351         on namespaces that have been imported using the `using' keyword.
33352
33353         * class.cs (TypeContainer::TypeAttr): Virtualize.
33354         (Class::TypeAttr): Return attributes suitable for this bad boy.
33355         (Struct::TypeAttr): ditto.
33356         Handle nested classes.
33357         (TypeContainer::) Remove all the type visiting code, it is now
33358         replaced with the rootcontext.cs code
33359
33360         * rootcontext.cs (GetClassBases): Added support for structs. 
33361
33362 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33363
33364         * interface.cs, statement.cs, class.cs, parameter.cs,
33365         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33366         Drop use of TypeRefs, and use strings instead.
33367
33368 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33369
33370         * rootcontext.cs: 
33371
33372         * class.cs (Struct::Struct): set the SEALED flags after
33373         checking the modifiers.
33374         (TypeContainer::TypeAttr): new property, returns the
33375         TypeAttributes for a class.  
33376
33377         * cs-parser.jay (type_list): Oops, list production was creating a
33378         new list of base types.
33379
33380         * rootcontext.cs (StdLib): New property.
33381         (GetInterfaceTypeByName): returns an interface by type name, and
33382         encapsulates error handling here.
33383         (GetInterfaces): simplified.
33384         (ResolveTree): Encapsulated all the tree resolution here.
33385         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33386         types. 
33387
33388         * driver.cs: Add support for --nostdlib, to avoid loading the
33389         default assemblies.
33390         (Main): Do not put tree resolution here. 
33391
33392         * rootcontext.cs: Beginning of the class resolution.
33393
33394 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33395
33396         * rootcontext.cs: Provide better error reporting. 
33397
33398         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33399
33400         * rootcontext.cs (CreateInterface): Handle the case where there
33401         are no parent interfaces.
33402
33403         (CloseTypes): Routine to flush types at the end.
33404         (CreateInterface): Track types.
33405         (GetInterfaces): Returns an array of Types from the list of
33406         defined interfaces.
33407
33408         * typemanager.c (AddUserType): Mechanism to track user types (puts
33409         the type on the global type hash, and allows us to close it at the
33410         end). 
33411
33412 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33413
33414         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33415         RecordInterface instead.
33416
33417         * cs-parser.jay: Updated to reflect changes above.
33418
33419         * decl.cs (Definition): Keep track of the TypeBuilder type that
33420         represents this type here.  Not sure we will use it in the long
33421         run, but wont hurt for now.
33422
33423         * driver.cs: Smaller changes to accomodate the new code.
33424
33425         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33426         when done. 
33427
33428         * rootcontext.cs (CreateInterface):  New method, used to create
33429         the System.TypeBuilder type for interfaces.
33430         (ResolveInterfaces): new entry point to resolve the interface
33431         hierarchy. 
33432         (CodeGen): Property, used to keep track of the code generator.
33433
33434 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33435
33436         * cs-parser.jay: Add a second production for delegate_declaration
33437         with `VOID'.
33438
33439         (enum_body): Put an opt_comma here instead of putting it on
33440         enum_body or enum_member_declarations so we can handle trailing
33441         commas on enumeration members.  Gets rid of a shift/reduce.
33442
33443         (type_list): Need a COMMA in the middle.
33444
33445         (indexer_declaration): Tell tokenizer to recognize get/set
33446
33447         * Remove old targets.
33448
33449         * Re-add the parser target.
33450
33451 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33452
33453         * cs-parser.jay: Add precendence rules for a number of operators
33454         ot reduce the number of shift/reduce conflicts in the grammar.
33455
33456 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33457
33458         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33459         and put it here.
33460
33461         Get rid of old crufty code.
33462
33463         * rootcontext.cs: Use this to keep track of the parsed
33464         representation and the defined types available to the program. 
33465
33466         * gen-treedump.cs: adjust for new convention.
33467
33468         * type.cs: Split out the type manager, and the assembly builder
33469         from here. 
33470
33471         * typemanager.cs: the type manager will live here now.
33472
33473         * cil-codegen.cs: And the code generator here. 
33474
33475 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33476
33477         * makefile: Fixed up for easy making.
33478
33479 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33480
33481         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33482         the 
33483
33484         (unary_expression): Expand pre_increment_expression and
33485         post_decrement_expression to reduce a shift/reduce.
33486
33487 2001-07-11  Simon Cozens
33488
33489         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33490
33491         Improve allow_keyword_as_indent name.
33492
33493 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33494
33495         * Adjustments for Beta2. 
33496
33497 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33498
33499         * decl.cs: Added `Define' abstract method.
33500         (InTransit): new property, used to catch recursive definitions. 
33501
33502         * interface.cs: Implement `Define'. 
33503
33504         * modifiers.cs: Map Modifiers.constants to
33505         System.Reflection.TypeAttribute flags.
33506
33507         * class.cs: Keep track of types and user-defined types.
33508         (BuilderInit): New method for creating an assembly
33509         (ResolveType): New function to launch the resolution process, only
33510         used by interfaces for now.
33511
33512         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33513         that are inserted into the name space. 
33514
33515 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33516
33517         * ARGH.  I have screwed up my tree so many times due to the use of
33518         rsync rather than using CVS.  Going to fix this at once. 
33519
33520         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33521         load types.
33522
33523 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33524
33525         * Experiment successful: Use System.Type rather that our own
33526         version of Type.  
33527
33528 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33529
33530         * cs-parser.jay: Removed nsAliases from here.
33531
33532         Use new namespaces, handle `using XXX;' 
33533
33534         * namespace.cs: Reimplemented namespace handling, use a recursive
33535         definition of the class.  Now we can keep track of using clauses
33536         and catch invalid using clauses.
33537
33538 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33539
33540         * gen-treedump.cs: Adapted for all the renaming.
33541
33542         * expression.cs (Expression): this class now has a Type property
33543         which returns an expression Type.
33544
33545         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33546         `Type', as this has a different meaning now in the base
33547
33548 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33549
33550         * interface.cs, class.cs: Removed from all the sources the
33551         references to signature computation, as we can not do method
33552         signature computation during the parsing time, as we are not
33553         trying to solve at that point distinguishing:
33554
33555         class X {
33556                 void a (Blah x) {}
33557                 void a (NS.Blah x) {}
33558         }
33559
33560         Which depending on the context might be valid or not, as we do not
33561         know if Blah is the same thing as NS.Blah at that point.
33562
33563         * Redid everything so the code uses TypeRefs now instead of
33564         Types.  TypeRefs are just temporary type placeholders, that need
33565         to be resolved.  They initially have a pointer to a string and the
33566         current scope in which they are used.  This is used later by the
33567         compiler to resolve the reference to an actual Type. 
33568
33569         * DeclSpace is no longer a CIR.Type, and neither are
33570         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33571         are all DeclSpaces, but no Types. 
33572
33573         * type.cs (TypeRefManager): This implements the TypeRef manager,
33574         which keeps track of all the types that need to be resolved after
33575         the parsing has finished. 
33576
33577 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33578
33579         * ARGH.  We are going to have to store `foreach' as a class rather
33580         than resolving it, as we need to verify error 1579 after name
33581         resolution.   *OR* we could keep a flag that says `This request to
33582         IEnumerator comes from a foreach statement' which we can then use
33583         to generate the error.
33584
33585 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33586
33587         * class.cs (TypeContainer.AddMethod): we now add methods to the
33588         MethodGroup instead of the method hashtable.  
33589
33590         * expression.cs: Add MethodGroup abstraction, which gets us one
33591         step closer to the specification in the way we handle method
33592         declarations.  
33593
33594         * cs-parser.jay (primary_expression): qualified_identifier now
33595         tried to match up an identifier to a local variable reference or
33596         to a parameter reference.
33597
33598         current_local_parameters is now a parser global variable that
33599         points to the current parameters for the block, used during name
33600         lookup.
33601
33602         (property_declaration): Now creates an implicit `value' argument to
33603         the set accessor.
33604
33605 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33606
33607         * parameter.cs: Do not use `param' arguments as part of the
33608         signature, per the spec.
33609
33610 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33611
33612         * decl.cs: Base class for classes, structs and interfaces.  This
33613         is the "Declaration Space" 
33614
33615         * cs-parser.jay: Use CheckDef for checking declaration errors
33616         instead of having one on each function.
33617
33618         * class.cs: Factor out some code for handling error handling in
33619         accordance to the "Declarations" section in the "Basic Concepts"
33620         chapter in the ECMA C# spec.
33621
33622         * interface.cs: Make all interface member classes derive from
33623         InterfaceMemberBase.
33624
33625 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33626
33627         * Many things: all interfaces are parsed and generated in
33628         gen-treedump.  Support for member variables, constructors,
33629         destructors, properties, constants is there.
33630
33631         Beginning of the IL backend, but very little done, just there for
33632         testing purposes. 
33633
33634 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33635
33636         * cs-parser.jay: Fix labeled statement.
33637
33638         * cs-tokenizer.cs (escape): Escape " and ' always.
33639         ref_line, ref_name: keep track of the line/filename as instructed
33640         by #line by the compiler.
33641         Parse #line.
33642
33643 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33644
33645         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33646         to match the values in System.CodeDOM.
33647
33648         Divid renamed to Divide.
33649
33650         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33651         statements. 
33652         (Statements.set): remove.
33653
33654         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33655         statements. 
33656
33657         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33658         falseStatements always have valid values. 
33659
33660         * cs-parser.jay: Use System.CodeDOM now.
33661