2010-05-11 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-05-11  Marek Safar  <marek.safar@gmail.com>
2
3         * namespace.cs: Ignore missing dependencies failure at
4         initialization.
5
6 2010-05-11  Marek Safar  <marek.safar@gmail.com>
7
8         A fix for bug #604640
9         * namespace.cs: Don't resolve using constraints too early.
10
11 2010-05-11  Marek Safar  <marek.safar@gmail.com>
12
13         A fix for bug #604239
14         * generic.cs: Copy partial type constraints to partial container.
15
16 2010-05-10  Marek Safar  <marek.safar@gmail.com>
17
18         A fix for bug #557210
19         * import.cs: Relax underlying enum field rules.
20
21 2010-05-10  Marek Safar  <marek.safar@gmail.com>
22
23         A fix for bug #603476
24         * property.cs: Implement IParametersMember for indexer accessors.
25
26 2010-05-07  Marek Safar  <marek.safar@gmail.com>
27
28         A fix for bug #601141
29         * class.cs: Update all partial modifiers.
30
31 2010-05-06  Marek Safar  <marek.safar@gmail.com>
32
33         A fix for bug #601708
34         * method.cs, membercache.cs: Destructors cannot be hidden.
35
36 2010-05-06  Marek Safar  <marek.safar@gmail.com>
37
38         A fix for bug #602551
39         * class.cs: Resursive reference of type definition is allowed.
40
41 2010-05-06  Marek Safar  <marek.safar@gmail.com>
42
43         * anonymous.cs: Mutate cached storey instance types too.
44
45 2010-05-06  Marek Safar  <marek.safar@gmail.com>
46
47         A fix for bug #602443
48         * convert.cs: Explicit enum conversion cannot involve user operators
49
50 2010-05-05  Miguel de Icaza  <miguel@novell.com>
51
52         * class.cs (TypeContainer.DefineBaseTypes)
53         (TypeContainer.CheckRecursiveDefinition): check for the iface not
54         being null, as we could have failed resolution and crashed;
55         Fixes #442144
56
57         * cs-parser.jay: Productions to catch common mistakes when other
58         punctuation operators are used instead of comma.   Fixes 571702 
59
60 2010-05-05  Marek Safar  <marek.safar@gmail.com>
61
62         * anonymous.cs: Mutate correct set of constraints.
63
64 2010-05-05  Marek Safar  <marek.safar@gmail.com>
65
66         A fix for bug #602842
67         * expression.cs: Resolve all array bound arguments.
68
69 2010-05-05  Marek Safar  <marek.safar@gmail.com>
70
71         * import.cs: Don't import private fields.
72
73 2010-04-30  Marek Safar  <marek.safar@gmail.com>
74
75         Partially based on patch by <sami.lamti@gmail.com>
76
77         * eval.cs, ecore.cs: Fixed eval show methods.
78
79 2010-04-30  Marek Safar  <marek.safar@gmail.com>
80
81         * generic.cs, delegate.cs: Implement output type inference of
82         methodgroup now when the specification was cleared at least little
83         bit.
84
85 2010-04-29  Marek Safar  <marek.safar@gmail.com>
86
87         A fix for bug #575611
88         * class.cs: Fix recursive unmanaged recursice sruct check.
89         
90 2010-04-29  Marek Safar  <marek.safar@gmail.com>
91
92         A fix for bug #479776
93         * expression.cs: Implement typeof unbounded nested generic types.
94
95 2010-04-29  Marek Safar  <marek.safar@gmail.com>
96
97         A fix for bug #474953
98         * class.cs: Fix valid recursive base type definition.
99
100 2010-04-29  Marek Safar  <marek.safar@gmail.com>
101
102         A fix for bug #421737
103         * convert.cs, expression.cs: A boxing conversion exists from a
104         nullable-type to a reference type, if a boxing conversion exists
105         from the underlying non-nullable-value-type to the reference type.
106
107 2010-04-29  Marek Safar  <marek.safar@gmail.com>
108
109         A fix for bug #376875
110         * import.cs: Import volatile modifier.
111
112 2010-04-29  Marek Safar  <marek.safar@gmail.com>
113
114         A fix for bug #372412
115         * typespec.cs, expression.cs, codegen.cs: Emit readonly prefix for
116         generic arrays.
117
118 2010-04-29  Marek Safar  <marek.safar@gmail.com>
119
120         A fix for bug #568955
121         * statements.cs: Handle recursive scope initializers.
122
123 2010-04-28  Marek Safar  <marek.safar@gmail.com>
124
125         A fix for bug #566511
126         * anonymous.cs: Always get inflated version of hoisted variable
127         on generic type definition.
128
129 2010-04-28  Marek Safar  <marek.safar@gmail.com>
130
131         * import.cs, membercache.cs: Relax rules for valid properties.
132
133 2010-04-28  Marek Safar  <marek.safar@gmail.com>
134
135         * import.cs: Intern arrays used in generic arguments.
136
137 2010-04-28  Marek Safar  <marek.safar@gmail.com>
138
139         A fix for bug #600398
140         * convert.cs: Actually use effective base type for the comparison.
141
142 2010-04-28  Marek Safar  <marek.safar@gmail.com>
143
144         A fix for bug #600326
145         * ecore.cs: Pass arity to base member lookup.
146
147 2010-04-28  Marek Safar  <marek.safar@gmail.com>
148
149         A fix for bug #573385
150         * expression.cs: MemberAccess is of generic type based on right
151         arity length only.
152
153 2010-05-28  Marek Safar  <marek.safar@gmail.com>
154
155         * cs-tokenizer.cs: Made tab size configurable.
156
157 2010-05-27  Marek Safar  <marek.safar@gmail.com>
158
159         * attribute.cs: Ensure Obsolete members are defined before doing
160         ctor look-up.
161
162 2010-05-27  Marek Safar  <marek.safar@gmail.com>
163
164         * visit.cs: Add DOM visitor skeleton.
165         
166         * *.cs: Updated.
167
168 2010-05-27  Marek Safar  <marek.safar@gmail.com>
169
170         * attribute.cs, codegen.cs: Drop COMPILER_ACCESS hack.
171         
172 2010-05-27  Marek Safar  <marek.safar@gmail.com>
173
174         * *.cs: Major rewrite of compiler internals to better work with
175         unmodified System.Reflection.Emit. Some of the key changes are
176         - TypeSpec replaces reflection specific System.Type.
177         - All Type(TypeSpec) operations are now done in compiler therefore
178         no dependency on SRE to inflate generic members and types or to
179         query unclosed types.
180         - MemberCache is now the only and full hierarchical topology.
181         - Generic constraints are implemented properly.
182         - And as a bonus compilation is on average 30% faster.
183
184 2010-04-15  Jb Evain  <jbevain@novell.com>
185
186         * dmcs.exe.config: update the runtime version to .net 4.0 RTM.
187
188 2010-04-12  Marek Safar  <marek.safar@gmail.com>
189
190         * expression.cs, attribute.cs, parameter.cs: More attribute type
191         checks.
192
193 2010-04-12  Marek Safar  <marek.safar@gmail.com>
194
195         A fix for bug #593342
196
197         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
198         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
199         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
200         codegen.cs: Add custom attribute encoder to deal with unfinished
201         types and easier corlib bootstrap from its own types.
202
203 2010-03-26  Marek Safar  <marek.safar@gmail.com>
204
205         * cs-parser.jay: Report invalid constraint types.
206
207 2010-03-16  Jb Evain  <jbevain@novell.com>
208
209         * Makefile: rename the net_2_1 profile to moonlight.
210
211 2010-03-11  Marek Safar  <marek.safar@gmail.com>
212
213         * statement.cs, cs-parser.jay: Use correct location for empty
214         statements.
215
216 2010-03-11  Marek Safar  <marek.safar@gmail.com>
217
218         * cs-parser.jay: Disable Location from expression.
219         
220         * generic.cs: Check constraints for overrides in the parser.
221
222 2010-03-09  Marek Safar  <marek.safar@gmail.com>
223
224         * cs-parser.jay (GetLocation): Use an expression when available.
225
226 2010-03-04  Marek Safar  <marek.safar@gmail.com>
227
228         A fix for bug #582579
229         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
230
231 2010-03-04  Marek Safar  <marek.safar@gmail.com>
232
233         A patch by kornelpal@gmail.com
234         
235         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
236         compiler generated classes sealed by default. Emit and close top
237         level compiler generated classes as well. 
238         
239         * support.cs: Use RuntimeHelpers.GetHashCode.
240
241 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
242
243         * Makefile: We need to use the internal bootstrapping gmcs for
244         net_2_1_bootstrap too now.
245
246 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
247
248         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
249
250 2010-03-02  Marek Safar  <marek.safar@gmail.com>
251
252         * cs-tokenizer.cs: Missed few locations in previous fix.
253
254 2010-03-02  Marek Safar  <marek.safar@gmail.com>
255
256         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
257         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
258         Report correct location for operator errors.
259
260 2010-03-02  Marek Safar  <marek.safar@gmail.com>
261
262         * typemanager.cs (IsDynamicType): Don't check external types when
263         the attribute is not external.
264
265 2010-02-24  Marek Safar  <marek.safar@gmail.com>
266
267         A fix for bug #582579
268         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
269         modifiers.
270
271 2010-02-24  Marek Safar  <marek.safar@gmail.com>
272
273         A fix for bug #581804
274         * ecore.cs: Fixed type comparison.
275
276 2010-02-08  Miguel de Icaza  <miguel@novell.com>
277
278         * namespace.cs (CompletionGetTypesStartingWith): Do not include
279         private types in the completion results.
280
281         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
282         ... let ?"
283
284 2010-02-17  Marek Safar  <marek.safar@gmail.com>
285
286         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
287         constraint parsing.
288
289 2010-02-14  Miguel de Icaza  <miguel@novell.com>
290
291         * eval.cs: Do not do the report printer dance unless the user has
292         set the DescribeTypes feature.
293
294 2010-02-10  Marek Safar  <marek.safar@gmail.com>
295
296         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
297
298 2010-02-08  Marek Safar  <marek.safar@gmail.com>
299
300         A fix for bug #577029
301         * anonymous.cs: Fixed TypeBuilder* check.
302
303 2010-02-06  Miguel de Icaza  <miguel@novell.com>
304
305         * eval.cs (CompileBlock): Also undo if there are problems during
306         semantic analysis, fixes various cases where invalid C# code would
307         be reported, but the internal changes would not be undone.
308
309 2010-02-03  Miguel de Icaza  <miguel@novell.com>
310
311         * driver.cs: Change the --fatal flag to allow a number to be
312         passed, this ignores the first N fatal errors.   Useful to debug
313         errors that do not happen on the first hit.
314
315         * cs-parser.jay (invocation_expression): accept both the
316         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
317         inside an invocation.
318
319         * driver.cs: Expose FatalErrors.
320
321         * eval.cs: Initialize the printer's Fatal property from the
322         Driver's FatalError flag, this allows csharp --fatal to work
323         again. 
324
325         Add support for calling Describe (typeof (TYPE)) if the expression
326         entered is a TYPE.
327         
328 2010-02-02  Marek Safar  <marek.safar@gmail.com>
329
330         A fix for bug #574991
331         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
332         --lint.
333
334 2010-02-02  Marek Safar  <marek.safar@gmail.com>
335
336         A fix for bug #575986
337         * expression.cs: Don't mutate typeof type definitions.
338
339 2010-01-28  Marek Safar  <marek.safar@gmail.com>
340
341         * decl.cs: Use only one set of modifiers.
342
343 2010-01-26  Marek Safar  <marek.safar@gmail.com>
344
345         A fix for bug #573329
346         * eval.cs: Don't disable error reporting completely on silent mode.
347         
348 2010-01-25  Marek Safar  <marek.safar@gmail.com>
349
350         A fix for bug #573312
351         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
352         pointer index of unknown size types greater than 2.
353
354 2010-01-15  Marek Safar  <marek.safar@gmail.com>
355
356         * *.cs: Use only 1 member kind enum.
357
358 2010-01-15  Marek Safar  <marek.safar@gmail.com>
359
360         * *.cs: Add event specification.
361
362 2010-01-14  Marek Safar  <marek.safar@gmail.com>
363
364         * membercache.cs: Extracted from decl.cs.
365         
366         * *.cs: Put more infrastructure in place.
367
368 2010-01-13  Marek Safar  <marek.safar@gmail.com>
369
370         * *.cs: Add property specification, unused yet.
371
372 2010-01-13  Marek Safar  <marek.safar@gmail.com>
373
374         * property.cs: Move all property based declarations into a new file.
375
376 2010-01-13  Marek Safar  <marek.safar at gmail.com>
377
378         * expression.cs (Conditional): Resolve reduced expression.
379
380 2010-01-13  Marek Safar  <marek.safar at gmail.com>
381
382         * *.cs: Introduced non-generic method specification.
383
384 2010-01-07  Marek Safar  <marek.safar@gmail.com>
385
386         * method.cs: Move all method based declarations into a new file.
387
388 2010-01-07  Marek Safar  <marek.safar@gmail.com>
389
390         * *.cs: Extract field specification.
391
392 2009-12-17  Marek Safar  <marek.safar@gmail.com>
393
394         * field.cs: Extracted from class.cs
395
396 2009-12-15  Marek Safar  <marek.safar@gmail.com>
397
398         * attribute.cs (GetFixedBuffer): Work on field definition only.
399
400 2009-12-15  Marek Safar  <marek.safar@gmail.com>
401
402         * *.cs: Clean up NET_4_0 conditional where possible.
403
404 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
405
406         support.cs (DynamicType): Assembly property returns the assembly builder.
407         This is required due to how compiler context works in corlib.
408
409 2009-12-14  Marek Safar  <marek.safar@gmail.com>
410
411         A fix for bug #564376
412         * assign.cs (LocalTemporary): Removed no longer needed special
413         by-ref handling.
414
415 2009-12-11  Marek Safar  <marek.safar@gmail.com>
416
417         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
418         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
419         enum for easier debugging.
420
421 2009-12-10  Marek Safar  <marek.safar@gmail.com>
422
423         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
424         point.
425         
426         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
427         directly.
428
429 2009-12-10  Marek Safar  <marek.safar@gmail.com>
430
431         * cs-parser.jay, statement.cs: Handle parser error in code
432         completition.
433
434 2009-12-10  Marek Safar  <marek.safar@gmail.com>
435
436         * ecore.cs: Ignore base imported methods when they are already
437         in method bag.
438         
439         * eval.cs: Handle non-existent keys.
440         
441         * report.cs, driver.cs: Make fatal work with console printer only.
442
443 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
444
445         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
446
447 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
448
449         * typemanager.cs: Add MakeGenericMethod that checks if the method
450         is really the generic method definition.
451
452         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
453         to inflate generic methods.
454
455 2009-12-08  Marek Safar  <marek.safar@gmail.com>
456
457         A fix for bug #561149
458         * anonymous.cs: Use actual type parameters when checking for generic
459         method host.
460
461 2009-12-08  Marek Safar  <marek.safar@gmail.com>
462
463         A fix for bug #561369
464         * expression.cs (DoNumericPromotion): Fixed typo.
465
466 2009-12-08  Marek Safar  <marek.safar@gmail.com>
467
468         *.cs: Moving to generics world.
469
470         cs-parser.jay: Removed current_array_type.
471
472 2009-12-07  Marek Safar  <marek.safar@gmail.com>
473
474         *.cs: Moving to generics world.
475
476 2009-12-04  Marek Safar  <marek.safar@gmail.com>
477
478         *.cs: Moving to generics world (day 2).
479
480 2009-12-03  Marek Safar  <marek.safar@gmail.com>
481
482         *.cs: Moving to generics world.
483
484 2009-12-02  Marek Safar  <marek.safar@gmail.com>
485
486         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
487         Encode dynamic type attribute for elements where attributes cannot
488         be used.
489
490 2009-12-01  Marek Safar  <marek.safar@gmail.com>
491
492          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
493          arguments by ref.
494
495 2009-12-01  Marek Safar  <marek.safar@gmail.com>
496
497         A fix for bug #360455
498         * class.cs: Never report a unused warning for generic events to
499         workaround wrong expression type.
500
501 2009-11-30  Marek Safar  <marek.safar@gmail.com>
502
503         A fix for bug #558305
504         * decl.cs, class.cs: Check partial method definitions using correct
505         flag.
506
507 2009-11-30  Marek Safar  <marek.safar@gmail.com>
508
509         * argument.cs: Don't cache rarely used dynamic flag.
510
511 2009-11-27  Marek Safar  <marek.safar@gmail.com>
512
513         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
514
515 2009-11-27  Marek Safar  <marek.safar@gmail.com>
516
517         * ecore.cs (SimpleName): Removed no longer needed in_transit as
518         Resolve is now non-reentrant (saves ~0.6MB for corlib).
519
520 2009-11-26  Marek Safar  <marek.safar@gmail.com>
521
522         A fix for bug #545081
523         * decl.cs: Check private nested types of nested types recursively.
524
525 2009-11-26  Marek Safar  <marek.safar@gmail.com>
526
527         A fix for bug #558305
528         * location.cs: Ignore self referencing #line directive
529
530 2009-11-26  Marek Safar  <marek.safar@gmail.com>
531
532         A fix for bug #558292
533         * class.cs: Allow single unsafe fixed buffer fields.
534
535 2009-11-26  Marek Safar  <marek.safar@gmail.com>
536
537         * expression: Optimize few more zero-based operations.
538
539 2009-11-26  Marek Safar  <marek.safar@gmail.com>
540
541         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
542         avoids boxing of literal values.
543
544 2009-11-26  Marek Safar  <marek.safar@gmail.com>
545
546         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
547         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
548         codegen.cs: LocatedToken redesing to avoid excessive allocation and
549         boxing (saves ~7MB for corlib). Also fixes presise token location.
550
551 2009-11-25  Marek Safar  <marek.safar@gmail.com>
552
553         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
554         common data buckers.
555
556 2009-11-24  Marek Safar  <marek.safar@gmail.com>
557
558         * expression.cs: Lower static array initializer barrier.
559         
560         * support.cs, driver.cs: Share reader buffer.
561
562 2009-11-23  Marek Safar  <marek.safar@gmail.com>
563
564         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
565
566 2009-11-23  Marek Safar  <marek.safar@gmail.com>
567
568         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
569         cleanup some obsolete code.
570
571 2009-11-20  Marek Safar  <marek.safar@gmail.com>
572
573         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
574         Expression.Resolve.
575
576 2009-11-20  Marek Safar  <marek.safar@gmail.com>
577
578         * *.cs: Resolved expressions are never resolved again, this helps to
579         uncover some not easy to find bugs and improve the performance.
580
581 2009-11-19  Marek Safar  <marek.safar@gmail.com>
582
583         * *.cs: Made constant expressions fully compatible with any other
584         expression.
585
586 2009-11-19  Marek Safar  <marek.safar@gmail.com>
587
588         * *.cs: DoResolve is a worker method and has to be protected.
589
590 2009-11-18  Marek Safar  <marek.safar@gmail.com>
591
592         * *.cs: More context specific handling.
593
594 2009-11-17  Marek Safar  <marek.safar@gmail.com>
595
596         * *.cs: More context specific handling.
597
598 2009-11-16  Marek Safar  <marek.safar@gmail.com>
599
600         * dynamic.cs, class.cs: Removed few fixed user types conversions.
601         
602         * symbolwriter.cs: Uses public ILOffset.
603
604 2009-11-13  Marek Safar  <marek.safar@gmail.com>
605
606         A fix for bug #553650
607         * generic.cs: Another missing TypeToCoreType, still too many to fix.
608
609 2009-11-13  Marek Safar  <marek.safar@gmail.com>
610
611         A fix for bug #555170
612
613         * class.cs, delegate.cs, enum.cs: Constants have to be available
614         for parameters resolve.
615
616 2009-11-12  Marek Safar  <marek.safar@gmail.com>
617
618         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
619         arrays.
620
621 2009-11-12  Marek Safar  <marek.safar@gmail.com>
622
623         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
624         with a statically known candidate set.
625
626 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
627
628         * generic.cs: Made type inflation for generic constraint checks
629         recursive. This fixes BGO #553655.
630
631 2009-11-11  Marek Safar  <marek.safar@gmail.com>
632
633         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
634         checks.
635
636 2009-11-10  Marek Safar  <marek.safar@gmail.com>
637
638         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
639         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
640         attribute.cs: Add some dynamic error checking.
641
642 2009-11-07  Marek Safar  <marek.safar@gmail.com>
643
644         A fix for bug #553465
645
646         * expression.cs: Fixed mixed version of expression tree anonymous
647         type.
648
649 2009-11-06  Marek Safar  <marek.safar@gmail.com>
650
651         A fix for bug #553031
652
653         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
654         expression tree version of anonymous type with members declaration.
655
656 2009-11-05  Marek Safar  <marek.safar@gmail.com>
657
658         * parameter.cs: Handle nullable parameter default expression.
659         
660         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
661         class.cs, attribute.cs: Check for wrong dynamic arguments.
662
663 2009-11-05  Marek Safar  <marek.safar@gmail.com>
664
665         * statement.cs: Dynamic statements.
666
667 2009-11-04  Marek Safar  <marek.safar@gmail.com>
668
669         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
670         Compound assignments over dynamic type.
671
672 2009-11-03  Marek Safar  <marek.safar@gmail.com>
673
674         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
675         constructor arguments.
676
677 2009-10-30  Marek Safar  <marek.safar@gmail.com>
678
679         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
680         codegen.cs: Unary mutator on dynamic member access expression.
681
682 2009-10-29  Marek Safar  <marek.safar@gmail.com>
683
684         A fix for bug #550580   
685         * convert.cs: Don't eliminate explicit precission casts.
686
687 2009-10-28  Marek Safar  <marek.safar@gmail.com>
688
689         A fix for bug #550404
690         
691         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
692         expression.cs, statement.cs, ecore.cs: Quote any nested expression
693         tree.
694
695 2009-10-27  Marek Safar  <marek.safar@gmail.com>
696
697         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
698         constant.
699         
700         * class.cs: Allow nullable binary user operators.
701
702 2009-10-26  Marek Safar  <marek.safar@gmail.com>
703
704         * expression.cs: Move binary expression optimization at the end of
705         resolve.
706
707 2009-10-23  Marek Safar  <marek.safar@gmail.com>
708
709         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
710         Separate NullConstant from NullLiteral.
711
712 2009-10-23  Marek Safar  <marek.safar@gmail.com>
713
714         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
715         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
716         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
717         ModuleContainer. Add common unclosed member check routine.
718
719 2009-10-22  Marek Safar  <marek.safar@gmail.com>
720
721         * argument.cs: Use literal flag for real literals only.
722
723         * dynamic.cs: Use correct return type for custom delegates.
724
725 2009-10-22  Marek Safar  <marek.safar@gmail.com>
726
727         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
728         resolver.
729
730 2009-10-22  Marek Safar  <marek.safar@gmail.com>
731
732         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
733
734 2009-10-21  Marek Safar  <marek.safar@gmail.com>
735
736         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
737         conversion.
738
739 2009-10-21  Marek Safar  <marek.safar@gmail.com>
740
741         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
742         binder flags.
743
744 2009-10-20  Marek Safar  <marek.safar@gmail.com>
745
746         * argument.cs, dynamic.cs, expression.cs: Latest API update.
747
748 2009-10-19  Marek Safar  <marek.safar@gmail.com>
749
750         * typemanager.cs, expression.cs: Dynamic array initializer.
751
752 2009-10-16  Marek Safar  <marek.safar@gmail.com>
753
754         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
755         is imported.
756
757 2009-10-16  Marek Safar  <marek.safar@gmail.com>
758
759         A fix for bug #493523, #507067
760         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
761         standard nullable conversion using underlying standard conversion
762         and not full conversion.
763
764 2009-10-15  Marek Safar  <marek.safar@gmail.com>
765
766         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
767         type in VerifyArgumentsCompat.
768
769 2009-10-15  Marek Safar  <marek.safar@gmail.com>
770
771         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
772         Reject variable used with type arguments.
773
774 2009-10-14  Marek Safar  <marek.safar@gmail.com>
775
776         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
777         Implement dynamic expressions assignment.
778
779 2009-10-14  Marek Safar  <marek.safar@gmail.com>
780
781         * expression.cs: Build underlying expression when resolving unary
782         mutators.
783
784 2009-10-14  Marek Safar  <marek.safar@gmail.com>
785
786         * expression.cs: Emit enum array initializer using binary blob.
787
788 2009-10-08  Marek Safar  <marek.safar@gmail.com>
789
790         * typemanager.cs, constant.cs: Optimize decimal constants which fit
791         to long range.
792
793 2009-10-07  Marek Safar  <marek.safar@gmail.com>
794
795         * typemanager.cs: Reset object_type.
796         
797         * assign: Made SimpleAssign public.
798
799 2009-10-06  Marek Safar  <marek.safar@gmail.com>
800
801         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
802         invocation assembly to IsThisOrFriendAssembly.
803
804 2009-10-05  Marek Safar  <marek.safar@gmail.com>
805
806         * expression.cs: Equality comparison of generic parameter with
807         class constraint.
808
809 2009-10-05  Marek Safar  <marek.safar@gmail.com>
810
811         A fix for bug #543570
812         * generic.cs: Import predefined constraints correctly.
813
814 2009-10-02  Marek Safar  <marek.safar@gmail.com>
815
816         * ecore.cs: Don't crash on overloads with optional paremeters where
817         arguments count overflows.
818         
819         * parameter.cs: Import optional parameter constants using optional
820         value type.
821
822 2009-10-01  Marek Safar  <marek.safar@gmail.com>
823
824         * Makefile: Default is gmcs compiler.
825
826 2009-10-01  Marek Safar  <marek.safar@gmail.com>
827
828         * cs-parser.jay: Fixed few NRE.
829
830 2009-10-01  Marek Safar  <marek.safar@gmail.com>
831
832         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
833
834 2009-09-30  Marek Safar  <marek.safar@gmail.com>
835
836         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
837         ShimExpression, ImplicitCast.
838
839 2009-09-30  Marek Safar  <marek.safar@gmail.com>
840
841         A fix for bug #542959
842         * delegate.cs: Emit correct delegate instance variable when there
843         are static and non-static overloads.
844
845 2009-09-29  Marek Safar  <marek.safar@gmail.com>
846
847         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
848         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
849
850 2009-09-28  Marek Safar  <marek.safar@gmail.com>
851
852         A fix for bug #542487
853         * ecore.cs: Resolve extension methods hidden by properties.
854
855 2009-09-25  Marek Safar  <marek.safar@gmail.com>
856
857         * expression.cs, ecore.cs: More dynamic binary expressions.
858
859 2009-09-22  Marek Safar  <marek.safar@gmail.com>
860
861         * nullable.cs, expression.cs: Fixed null lifted conversion for
862         bitwise enum operations.
863
864 2009-09-22  Marek Safar  <marek.safar@gmail.com>
865
866         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
867         values in checked context.
868
869 2009-09-22  Marek Safar  <marek.safar@gmail.com>
870
871         * expression.cs, ecore.cs: Fixed array index constant conversion.
872
873 2009-09-20  Miguel de Icaza  <miguel@novell.com>
874
875         * expression.cs: Do not crash when MemberLookup returns something
876         that is not a MemberExpr here.   Report error 582 instead. 
877
878         Fixes #499988.
879
880 2009-09-18  Marek Safar  <marek.safar@gmail.com>
881
882         * decl.cs, class.cs: Check protected property accessors.
883
884 2009-09-18  Marek Safar  <marek.safar@gmail.com>
885
886         * dynamic.cs, assign.cs: Dynamic compound assignment.
887
888 2009-09-17  Marek Safar  <marek.safar@gmail.com>
889
890         * expression.cs: Fixed compound assignment explicit conversion.
891
892 2009-09-17  Marek Safar  <marek.safar@gmail.com>
893
894         * expression.cs, ecore.cs: Cannot infer variables from method group.
895
896 2009-09-16  Marek Safar  <marek.safar@gmail.com>
897
898         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
899         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
900         codegen.cs: Dynamic binary operations scaffolding.
901
902 2009-09-15  Marek Safar  <marek.safar@gmail.com>
903
904         * expression.cs: Fixes nullable promotion for enum type variables.
905
906 2009-09-11  Marek Safar  <marek.safar@gmail.com>
907
908         * driver.cs, dynamic.cs: Reset more static variables.
909
910 2009-09-11  Marek Safar  <marek.safar@gmail.com>
911
912         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
913         driver.cs: Introduced Expression::MakeExpression.
914
915 2009-09-11  Marek Safar  <marek.safar@gmail.com>
916
917         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
918
919 2009-09-09  Marek Safar  <marek.safar@gmail.com>
920
921         * eval.cs, report.cs: Use Console.Out for all eval error or warning
922         output.
923
924 2009-09-09  Marek Safar  <marek.safar@gmail.com>
925
926         A fix for bug #518707
927         * expression.cs (Is): Optimize only generic parameter type
928         expression probing value type generic parameter.
929
930 2009-09-09  Marek Safar  <marek.safar@gmail.com>
931
932         A fix for bug #532571
933         * ecore.cs: Check for simple name type arguments used with
934         non-generic type.
935
936 2009-09-08  Marek Safar  <marek.safar@gmail.com>
937
938         A fix for bug #497421
939         * generic.cs (CheckConstraint): Don't use buildin types to check for
940         parameterless constructor.
941
942 2009-09-08  Marek Safar  <marek.safar@gmail.com>
943
944         A fix for bug #537402
945         * generic.cs (CheckConstraint): Correctly inflate generic type
946         arguments when checking generic method. 
947
948 2009-09-08  Marek Safar  <marek.safar@gmail.com>
949
950         A fix for bug #536463
951         * decl.cs (AddToContainer): Don't report collision between explicit
952         and parameterless non-explicit members.
953
954 2009-09-08  Marek Safar  <marek.safar@gmail.com>
955
956         * eval.cs: Reset more static stuff.
957
958 2009-09-07  Marek Safar  <marek.safar@gmail.com>
959
960         A fix for bug #324625
961         * expression.cs, ecore.cs: Create nested generic type expression
962         using declaring and not current type.
963
964 2009-09-07  Marek Safar  <marek.safar@gmail.com>
965
966         * *.cs: Changed Report class to accept various output printers and
967         be an instance class. An expression resolver can now use different
968         message reporter for each call and Report.Error can safely throw
969         an exception. Part of ongoing work to turn mcs into proper library.
970
971 2009-09-04  Marek Safar  <marek.safar@gmail.com>
972
973         * statement.cs, ecore.cs: Removed error reporting from emit code.
974
975 2009-09-04  Marek Safar  <marek.safar@gmail.com>
976
977         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
978
979 2009-09-03  Marek Safar  <marek.safar@gmail.com>
980
981         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
982         parser checks out of constructors.
983
984 2009-09-02  Marek Safar  <marek.safar@gmail.com>
985
986         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
987
988 2009-09-02  Marek Safar  <marek.safar@gmail.com>
989
990         A fix for bug #535448
991         * anonymous.cs, class.cs: Copy return label between all contexts.
992
993 2009-09-02  Marek Safar  <marek.safar@gmail.com>
994
995         A fix for bug #535395
996         * namespace.cs: Resolve context can be null.
997
998 2009-08-25  Marek Safar  <marek.safar@gmail.com>
999
1000         A fix for bug #533912
1001         * generic.cs: Use correct context for constraints resolving.
1002
1003 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1004
1005         A fix for bug #532630
1006         * driver.cs: Trim conditional symbols.
1007
1008 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1009
1010         * context.cs: New file.
1011         
1012         * *.exe.sources, *.csproj: Updated.
1013
1014 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1015
1016         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
1017         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
1018         IMembercontext, some small cleanups.
1019
1020 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1021
1022         * *.cs: Split ResolveContext and EmitContext.
1023
1024 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1025
1026         * *.cs: Only ResolveContext implements IMemberContext.
1027
1028 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1029
1030         * *.cs: Renamed IResolveContext to IMemberContext.
1031
1032 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1033
1034         * *.cs: Detached ResolveContext from EmitContext.
1035
1036 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1037
1038         * codegen.cs: Moved flow-analysis to BlockContext.
1039
1040 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1041
1042         * *.cs: Detached BlockContext from EmitContext.
1043
1044 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
1045
1046         * statement.cs: avoid nullref when the return value of GetEnumerator()
1047         does not contain any MoveNext() method.
1048
1049 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1050
1051         * *.cs: Removed IResolveContext::GenericDeclContainer.
1052
1053 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1054
1055         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
1056
1057 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1058
1059         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
1060         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
1061
1062 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1063
1064         * *.cs: Removed boolean fields from EmitContext.
1065
1066 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1067
1068         * *.cs: Add IResolveContext::IsStatic.
1069
1070 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1071
1072         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
1073
1074 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1075
1076         * *.cs: Removed DeclContainer from EmitContext.
1077
1078 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1079
1080         * *.cs: Add IResolveContext::CurrentTypeParameters.
1081
1082 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1083
1084         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
1085
1086 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1087
1088         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
1089         codegen.cs: Add IResolveContext::LookupExtensionMethod.
1090
1091 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1092
1093         * decl.cs: Look in PartialContainer for parent type parameters.
1094
1095 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1096
1097         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
1098         codegen.cs: Add IResolveContext::LookupTypeParameter.
1099
1100 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1101
1102         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1103         Moved resolved logic from Emit to Resolve.
1104
1105 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1106
1107         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
1108         codegen.cs: Reworked atttributes handling of ResolveContext.
1109
1110 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1111
1112         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
1113         LookupNamespaceOrType to ResolveContext.
1114
1115 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1116
1117         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
1118         class.cs: Removed unused parameters and methods.
1119
1120 2009-08-11  Marek Safar  <marek.safar@gmail.com>
1121
1122         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
1123         codegen.cs: Finding the best common type of a set of expressions for
1124         lambda statements.
1125
1126 2009-08-07  Marek Safar  <marek.safar@gmail.com>
1127
1128         * dynamic.cs, expression.cs: More dynamic conversions.
1129
1130 2009-08-06  Miguel de Icaza  <miguel@novell.com>
1131
1132         * generic.cs: This loop was incorrect, it was increment ii, but
1133         checking for `i'.  This was a change introduced to fix #327497,
1134         now we fix #424012.
1135  
1136         * class.cs: Catch another case for cs0533 error, fixes #324782.
1137
1138 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
1139
1140         * typemanager.cs (GetGenericArguments): SRE returns null for
1141         generic methods on type builder instances if they are not generic
1142         themselves. For example, for Foo<int>::Bar() it returns null, but
1143         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
1144
1145 2009-08-05  Marek Safar  <marek.safar@gmail.com>
1146
1147         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
1148         delegate.cs: Work on dynamic binding.
1149
1150 2009-08-04  Marek Safar  <marek.safar@gmail.com>
1151
1152         A second fix for bug #525342
1153         * class.cs: Attach partial method attributes to method
1154         implementation.
1155
1156 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1157
1158         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
1159         restrictions.
1160         
1161         * rootcontext.cs: Default to langversion v4.
1162
1163 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1164
1165         * pending.cs: Check return type before member info is set.
1166
1167 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1168
1169         * anonymous.cs: Fully initialize generic hoisted field expression.
1170
1171 2009-08-02  Miguel de Icaza  <miguel@novell.com>
1172
1173         * cs-parser.jay: Flag variables declared on the interactive shell
1174         as used to prevent the 168 warning about local variable not being
1175         used. 
1176
1177 2009-07-31  Marek Safar  <marek.safar@gmail.com>
1178
1179         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
1180         attribute.cs: Emit dynamic export attribute.
1181
1182 2009-07-30  Marek Safar  <marek.safar@gmail.com>
1183
1184         * expression.cs: More verifier work.
1185
1186 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1187
1188         * nullable.cs: Fixed SRE crash during corlib compilation.
1189
1190 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1191
1192         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1193         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1194         More TypeManager.TypeToCoreType needed.
1195
1196 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1197
1198         * anonymous.cs: Update after recent SRE fixes.
1199
1200 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1201
1202         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1203         version of GetFieldHandle for fields of generic types.
1204
1205 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1206
1207         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1208         ecore.cs: Add TypeManager.IsDynamicType,
1209         PredefinedAttributes.Dynamic.
1210
1211 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1212
1213         A fix for bug #415375
1214         * expression.cs: Fixed object and reference type parameter
1215         comparison.
1216
1217 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1218
1219         A fix for bug #525342
1220         * class.cs: Attach partial method attributes to method
1221         implementation.
1222
1223 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1224
1225         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1226         Dynamic arguments.
1227
1228 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1229
1230         * anonymous.cs (MutateField): Add imported types handling.
1231
1232 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1233
1234         * expression.cs, delegate.cs: Moved arguments resolve into their
1235         counterparts expressions. Removed argument resolve from
1236         CollectionElementInitializer.
1237
1238 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1239
1240         A fix for bug #523683
1241         * convert.cs, delegate.cs: Use common overload mechanism for method
1242         group conversion check.
1243
1244 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1245
1246         A fix for bug #523899
1247         * generics.cs: Exact type inference with other bound types.
1248
1249 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1250
1251         Don't complain when the same type is implemented by the output
1252         assembly as well as multiple referenced assemblies
1253         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1254         'must_be_unique' flag.
1255         (GlobalRootNamespace): Update to changes.
1256         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1257         already have a type in hand.
1258
1259 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1260
1261         * expression.cs: More verifier instrumentation.
1262         
1263         * statement.cs: Do proper throw expression conversion.
1264
1265 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1266
1267         A fix for bug #522789
1268         * expression.cs: Mutate invocation return type.
1269
1270 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1271
1272         * anonymous.cs: Split assignable and readonly generated variable
1273         references.
1274
1275 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1276
1277         A fix for bug #521671
1278         * statement.cs: Fixed crash when checking missing type.
1279
1280 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1281
1282         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1283         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1284         class.cs, driver.cs: Work on dynamic binding.
1285
1286         * dynamic.cs: New file.
1287
1288         * *.sources, *.proj: Updated.
1289
1290 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1291
1292         * expression.cs (Conditional): Avoid double Resolve.
1293
1294 2009-07-13  Marcus Griep  <marcus@griep.us>
1295
1296         * ecore.cs: Fix obscure bug with resolving members of interfaces
1297         that hide parent interface members. Fixes bug #444388 and corrects
1298         bug #323096
1299
1300 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1301
1302         * expression.cs (LocalVariableReference): Bounce resolve.
1303
1304 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1305
1306         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1307         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1308         types to new class.
1309         
1310         * support.cs: New dynamic type wrapper.
1311
1312 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1313
1314         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1315         typed local variable.
1316
1317 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1318
1319         A fix for bug #519005
1320         * anonymous.cs: Use null_type as no return type placeholder.
1321
1322 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1323
1324         * generic.cs: Handle type inference of identical type parameters
1325         with different bounds.
1326
1327 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1328
1329         * expression.cs, class.cs: Events variance.
1330         
1331         * cs-parser.jay: Interface events error messages.
1332
1333 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1334
1335         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1336
1337 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1338
1339         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1340         parameter expression can be value-type New.
1341
1342         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1343
1344 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1345
1346         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1347         Implemented C# 4.0 named arguments.
1348
1349 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1350
1351         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1352         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1353         parameter modifier. Also fixes bug #515497.
1354
1355 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1356
1357         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1358         arguments expression to be implemented.
1359         
1360         *.sources: Add argument.cs
1361
1362 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1363
1364         * parameter.cs: Moved GetParameterIndexByName to base class.
1365         
1366         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1367         unused AType. Use argument's version of GetExpressionTree.
1368
1369 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1370
1371         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1372         arguments grammar.
1373
1374 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1375
1376         A fix for bug #514096
1377         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1378
1379 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1380
1381         * expression.cs: The first multi-dimensional array nested array
1382         initializers was not checked.
1383         
1384         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1385
1386 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1387
1388         A fix for bug #513400
1389         * nullable.cs (EmitEquality): Operands emit could be simplified for
1390         built-in types when we now emit user operators differently.
1391
1392 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1393
1394         * ecore.cs: Report inaccessible delegate methods correctly.
1395
1396 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1397
1398         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1399         cs-parser.jay: Implemented C# 4.0 optional parameters.
1400
1401 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1402
1403         * driver.cs: Removed broken DefineManifestResource.
1404
1405 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1406
1407         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1408         Use $(BOOTSTRAP_PROFILE) instead.
1409
1410 2009-06-12  Jb Evain  <jbevain@novell.com>
1411
1412         * rootcontext.cs: add a Platform field.
1413         * driver.cs: handle /platform.
1414         * codegen.cs: pass the proper flags according to
1415         the platform when saving the assembly.
1416
1417 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1418
1419         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1420         Add optional parameters grammar.
1421
1422 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1423
1424         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1425         driver.cs: Split lang version and metadata version.
1426
1427 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1428
1429         * decl.cs: Better overload ctor collision error message.
1430
1431 2009-06-05  Jb Evain  <jbevain@novell.com>
1432
1433         * driver.cs (EmbededResource): avoid using an internal method
1434         in gmcs to embed manifest resources.
1435
1436 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1437
1438         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1439         the compiler from older mono versions (like moon's bots)
1440
1441 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1442
1443         * namespace.cs (LookupTypeReflection): Ignore collisions between
1444         forwarded types.
1445
1446 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1447
1448         * codegen.cs: Enabled generic type forwarders.
1449
1450 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1451
1452         * dmcs.*: Add another version of SRE compiler.
1453
1454 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1455
1456         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1457         generic-mcs.cs: Fixed variant type conversions.
1458
1459 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1460
1461         A fix for bug #507863
1462         * codegen.cs: Fixes a crash on invalid string value attribute.
1463
1464 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1465
1466         A fix for bug #508334
1467         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1468         cs-parser.jay: Fully import __arglist modifier.
1469
1470 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1471
1472         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1473         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1474         actually work with closed generic types.
1475
1476 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1477
1478         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1479         Fix the build by replacing the use of 'var' with the actual type.
1480
1481 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1482
1483         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1484     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1485         declarations.
1486           
1487         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1488         filter.
1489
1490 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1491                         Marek Safar  <marek.safar@gmail.com>
1492
1493         A fix for bug #377509
1494         * parameter.cs: Use predefined and not empty name for implicit
1495         setters.
1496
1497 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1498
1499         * class.cs: Don't report wrong warnings for event fields.
1500
1501 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1502
1503         A fix for bug #504667
1504         * class.cs: Check for static class using parent container instead of
1505         parent type.
1506
1507 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1508
1509         A fix for bug #496922
1510         * expression.cs: Always use temporary variable when using object
1511         initializer.
1512
1513 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1514
1515         A fix for bug #495112
1516         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1517         local cache.
1518
1519 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1520
1521         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1522
1523 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1524
1525         * complete.cs: No idea how gonzalo got a null in the list, but
1526         avoid crashing.
1527
1528 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1529
1530         * complete.cs (CompletionElementInitializer): New completion class
1531         to support completing inside a C# 3 element initializer, so this
1532         allows completion for Silverlight situations where it is very
1533         common to do:
1534
1535         new TextBlock () { Fo<TAB>
1536
1537         (CompletionSimpleName): Expose the prefix that was
1538         passed to the simple name.
1539
1540         * cs-parser.jay (object_or_collection_initializer): Add support
1541         for element_initializers.
1542
1543         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1544         special case completion expressions as this method aggressively
1545         collects data before it operates, and errors were being thrown
1546         earlier than we were able to complete.
1547
1548 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1549
1550         * eval.cs: Make getcompletions silent and enable debugging output
1551         if the -v option is passed.
1552
1553         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1554         Consider looking up the namespace that matches the prefix being
1555         used. 
1556
1557         This is part of the support for allowing completions like:
1558         `System.Co<TAB>' to complete to System.Console.
1559
1560         * complete.cs (CompletionSimpleName.AppendResults): Make this
1561         routine reusable.
1562
1563 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1564
1565         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1566         COMPLETE_COMPLETION as internal.
1567
1568 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1569
1570         * complete.cs: Include namespace resolution in simple names as
1571         well as global types and types in the using scope in the
1572         resolution. 
1573
1574         * namespace.cs: Supporting infrastrcture to provide completions
1575         based on the current using scope. 
1576
1577         * eval.cs: Introduce an entry point that allows for initialization
1578         to return a list of the files passed on the command line.
1579
1580 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1581
1582         A fix for bug #494243
1583         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1584
1585 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1586
1587         A fix for bug #493887
1588         * statement.cs: Don't skip string multi-section with default or
1589         null label when populating string hashtable.
1590
1591 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1592
1593         A fix for bug #492329
1594         * expression.cs (New): Load variable when assigning type parameter
1595         to ref variable.
1596
1597 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1598
1599         A fix for bug #488960
1600         * decl.cs: Compare MVAR types using non-null values.
1601
1602 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1603
1604         * typemanager.cs, expression.cs: Removed unused nullable checks.
1605
1606 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1607
1608         * *.cs: Removed some gmcs conditionals.
1609
1610 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1611
1612         * generic.cs, support.cs: Moved generics stuff out of support.cs
1613
1614 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1615
1616         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1617         DeclaringType.
1618
1619 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1620
1621         * attribute.cs: Consider all members for error reporting when
1622         checking named arguments.
1623
1624 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1625
1626         A fix for bug #487625
1627         * namespace.cs: Use a warning for all predefined type conflicts.
1628
1629 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1630
1631         A fix for bug #485706
1632         * statement.cs: Explicitly type catch type argument to pass verifier
1633         check.
1634
1635 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1636
1637         Initial support to provide code completion facilities to consumers
1638         of the evaluator API.
1639         
1640         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1641         support the completion engine.   When we reach the end of the
1642         input stream instead of returning EOF, when this flag is true the
1643         tokenizer instead produces:
1644
1645                 One GENERATE_COMPLETION token: this token then must be
1646                 handled in the grammar at every point where the user
1647                 would likely request a completion.
1648
1649                 As many COMPLETE_COMPLETION tokens as necessary.   These
1650                 tokens are generated to assist the parser in unwinding and
1651                 producing a valid parse tree.    
1652
1653         The parser rules do not have to be perfect, the parser needs to be
1654         augmented with judicious use of GENERATE_COMPLETION tokens to
1655         improve the areas where we can provide completion and the parser
1656         needs to add support for COMPLETE_COMPLETION tokens in productions
1657         to make them work.
1658
1659         It is common to not have enough support for COMPLETE_COMPLETION
1660         under certain rules and that even if we generated the
1661         GENERATE_COMPLETION token that the resulting tree will be invalid
1662         due to the missing rules that support COMPLETE_COMPLETION.
1663
1664         The final EOF token is produced by having the parser notify the
1665         tokenizer when it reaches the root production that the next token
1666         should be EOF.
1667
1668         * support.cs (CompletionResult): New Exception.   This exception
1669         is thrown to return the completion results when one of the special
1670         completion expressions is reached.
1671
1672         This exception is thrown by the completing ExpressionStatements
1673         classes that live in complete.cs
1674
1675         * complete.cs (CompletingExpression): a new base class for
1676         completing expressions.   This derives from the
1677         ExpressionStatement class and not from Expression as it allows
1678         completion to happen not only where expressions are expected in
1679         the grammar, but also where statements are expected.
1680
1681         (CompletionSimpleName): A new class used to provide completions
1682         for SimpleNames.     This currently only resolves to local
1683         variables from the evaluator context (GetVars call).
1684
1685         (CompletionMemberAccess): Implements support for completing member
1686         access patterns. 
1687
1688         * cs-parser.jay: Add support for completion in a few places. 
1689
1690         * eval.cs (GetCompletions): New public API for the evaluator that
1691         returns a list of possible completions given the input.   The
1692         return value is an array of completions 
1693
1694         * anonymous.cs (Compatible): If the exception thrown from the
1695         resolved expression is a CompletionResult exception let that one
1696         through instead of printing a diagnostic error in the try/catch. 
1697 <       
1698 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1699
1700         * 
1701
1702         * driver.cs (Main): Use Environment.Exit to quit quickly and
1703         prevent the compiler from doing the usual wait for helper thread
1704         to terminate.  
1705
1706         This is to prevent a slowdown that was reported by Gonzalo on
1707         ASP.NET 
1708
1709 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1710
1711         * ecore.cs: Load build-in types directly instead of accessing
1712         an internal field.
1713
1714 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1715
1716         * ecore.cs: Always use unbox.any when available.
1717
1718 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1719
1720         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1721
1722 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1723
1724         * generic.cs: Removed obsolete version of type inference.
1725
1726 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1727
1728         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1729         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1730         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1731         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1732
1733 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1734
1735         A fix for bug #482996
1736         * anonymous.cs: Make sure we are not infering return type when
1737         checking type compatibility.
1738
1739 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1740
1741         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1742         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1743         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1744         attributes in their own structure. Needed when accessing their
1745         properties before they are resolved.
1746
1747 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1748
1749         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1750         hashtable (~10x faster).
1751         
1752         * driver.cs: Removed wrong Reset.
1753
1754 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1755
1756         * class.cs: Use correct common base type for unmanaged delayed
1757         check.
1758
1759         * rootcontext.cs: Wrap unhandled exception.
1760
1761 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1762
1763         Make SeekableStreamReader self-tuning and arbitrarily seekable
1764         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1765         the buffer.
1766         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1767         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1768         buffer size when the stream needs to be re-read from the beginning.
1769
1770 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1771
1772         A fix for bug #480100
1773         * parameter.cs: A parameter is not hoisted when used directly as ET.
1774
1775 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1776
1777         * statement.cs: Fixed an issue when using variable is of interface
1778         type.
1779
1780 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1781
1782         A fix for bug #480319
1783         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1784
1785 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1786
1787         A fix for bug #480867
1788         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1789         expression to have no valid type.
1790
1791 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1792
1793         A fix for bug #481258
1794         * class.cs: Set extension method flag in partial container.
1795
1796 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1797
1798         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1799         
1800         * attribute.cs: Add sanity check.
1801
1802 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1803
1804         * class.cs: Add external constructor error.
1805
1806 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1807
1808         A fix for bug #475354
1809         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1810         correctly user defined nullable equality operators.
1811
1812 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1813
1814         A fix for bug #479532
1815         * expression.cs: Implement NewInitialize::AddressOf.
1816
1817 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1818
1819         A fix for bug #413633
1820         * expression.cs: Iterate all base class-constraint types.
1821
1822 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1823
1824         A fix for bug #479209
1825         * literal.cs: Mutate null underlying type.
1826
1827 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1828
1829         A fix for bug #476295
1830         * convert.cs: Avoid wrapping implicitly convertible reference type.
1831
1832 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1833
1834         * iterators.cs: Create MemberName correctly.
1835
1836 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1837
1838         A fix for bug #478655
1839         * literal.cs: Check also underlying null type conversion.
1840
1841 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1842
1843         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1844
1845 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1846
1847         A fix for bug #477447
1848         * statement.cs: Add reference to correct parent storey when this
1849         is accessible from deep children storey (more than 1 level).
1850
1851 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1852
1853         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1854         * class.cs: Define base type members before setting up member cache.
1855
1856 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1857
1858         A fix for bug #477378
1859         * nullable.cs, expression.cs, statement.cs: More precise null type
1860         sanity checks.
1861
1862 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1863
1864         A fix for bug #472805
1865         * typemanager.cs, namespace.cs: Import only visible extension method
1866         types.
1867
1868 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1869
1870         A fix for bug #476895
1871         * attribute.cs: Use correct resolve context for attribute type.
1872
1873 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1874
1875         A fix for bug #476266
1876         * anonymous.cs: Mutate multi-dimensional arrays.
1877
1878 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1879
1880         A fix for bug #476400
1881         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1882
1883 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1884
1885         A fix for bug #476811
1886         * generics.cs: Fixed null-literal check.
1887
1888 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1889
1890         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1891         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1892         messing with static variables.
1893
1894 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1895
1896         A fix for bug #475965
1897         * generics.cs: Check generic parameter type after extracting from
1898         Expression<T>.
1899
1900 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1901
1902         A fix for bug #475823
1903         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1904         typed-null support.
1905
1906 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1907
1908         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1909         Simplified event field definition using backing field and not
1910         field builder directly.
1911
1912         * expression.cs (EmitLdArg): Optimize fast paths.
1913
1914 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1915
1916         A fix for bug #475327
1917         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1918
1919 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1920
1921         A fix for bug #475342
1922         * cs-parser.jay: Using 'super' instead of 'base' to call base
1923         constructor crashes compiler.
1924
1925 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1926
1927         A fix for bug #475354
1928         * expression.cs (Constantify): Add nullable types.
1929         
1930         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1931
1932 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1933
1934         A fix for bug #475246
1935         * expression.cs: More broken flowanalysis hacking needed.
1936
1937 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1938
1939         * attribute.cs: Compare only ref/out array modifiers. 
1940
1941 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1942
1943         * statement.cs: Use member cache when looking for foreach members.
1944
1945 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1946
1947         * expression.cs: Don't expose internal initializer types.
1948         
1949         * statement.cs: Check also explicit conversions for goto case.
1950
1951 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1952
1953         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1954
1955 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1956
1957         * *.cs: Replace null-type with NullLiteral where appropriate.
1958
1959 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1960
1961         * expression.cs: Initializer of reference argument use temporary
1962         variable to be verifiable.
1963         
1964         * parameter.cs: Share EmitLdArg.
1965
1966 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1967
1968         A fix for bug #473559
1969         * class.cs: Fixed: Not reporting error about nested class with the
1970         same name.
1971
1972 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1973
1974         Contributed under the MIT/X11 license.
1975
1976         * generic.cs: Added VerifyVariantTypeParameters which performs new
1977         variance verification logic. The old logic, based on the spec, was
1978         wrong because the spec is full of LIES!
1979
1980         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1981
1982         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1983
1984         * class.cs:
1985         * ecore.cs: Added calls to the new variance verification logic.
1986
1987         * parameter.cs:
1988         * delegate.cs: Removed calls to the old variance verification logic.
1989
1990 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1991
1992         * delegate.cs: Use cached Invoke method directly.
1993
1994 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1995
1996         * expression.cs: Emit expression tree for hoisted variable access.
1997
1998 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1999
2000         * namespace.cs: Add better extension class check.
2001
2002 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
2003
2004         * generic.cs: Fixed typeo (TypeParameter.Variacne).
2005
2006 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
2007
2008         This patch adds initial generic variance support to the compiler.
2009         It is contributed under the MIT/X11 license.
2010
2011         * typemanager.cs: Modified ImplementsInterface to check variance.
2012         Added VerifyVariantTypeParameters which checks the specified type to see
2013         if it uses a variant type parameter as a type argument (which is not
2014         allowed). Added IsVariantOf which determins if the first type is a
2015         variant of the second. NOTE: This only supports reference types at
2016         the moment to conform with the current level of VM support. When the
2017         VM supports value types, this will follow step.
2018
2019         * generic.cs: Added the Variance enum. Added a Variance property to
2020         TypeParameter and added variance support to definition phase. Added a
2021         Variance property to TypeParameterName. Also check to make sure that
2022         no variant types appear in generic method parameters.
2023
2024         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
2025         keywords if the langversion supports it.
2026
2027         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
2028         that variant types are only used in legal positions. Also added
2029         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
2030         parameters.
2031
2032         * decl.cs: Construct TypeParameter with the variance information.
2033
2034         * convert.cs: Checks variance in ImplicitReferenceConversionExists
2035         and ImplicitConversionStandard.
2036
2037         * rootcontext.cs: Added new "Future" language version.
2038
2039         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
2040         type parameters are not used as type arguments in interface inheritance.
2041         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
2042         parameters are not used as method return types. In MemberBase.
2043         ResolveMemberType, ensure that variant type parameters are not used
2044         as type arguments. Also call VerifyNoVariantTypeParameters on every
2045         set of parameters which are resolved.
2046
2047         * delegate.cs: Modified Delegate.Define to ensure that variant
2048         parameters are not used as type arguments and that a contravariant
2049         parameter is not used as the return type. Also call
2050         VerifyNoVariantTypeParameters on the delegate parameters.
2051
2052         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
2053         to specify generic variance.
2054
2055         * driver.cs: Added support for LanguageVersion.Future in the form of
2056         "-langversion:future".
2057
2058         * generic-mcs.cs: Stubbed out new members in generic.cs.
2059
2060 2009-02-03  Marek Safar  <marek.safar@gmail.com>
2061
2062         * class.cs, generic.cs: Emit type parameter constraints for nested
2063         types.
2064
2065 2009-02-02  Marek Safar  <marek.safar@gmail.com>
2066
2067         A fix for bug #471213
2068         * class.cs: Avoid emitting backing field for abstract event fields.
2069
2070 2009-02-01  Marek Safar  <marek.safar@gmail.com>
2071
2072         A fix for bug #359731
2073         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
2074         expressions.
2075
2076 2009-01-30  Marek Safar  <marek.safar@gmail.com>
2077
2078         A fix for bug #470767
2079         * statement.cs: Introduced BlockScopeExpression, needed when 
2080         expression tree conversion has to emit scope variables.
2081
2082 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2083
2084         * class.cs: Remove duplicate CallingConvention.
2085
2086 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2087
2088         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
2089         when I finally found the right naming convention.
2090
2091 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2092
2093         * cs-tokenizer.cs: Put back different open parens optimization.
2094
2095 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2096
2097         A fix for bug #470227
2098         * cs-tokenizer.cs: Remove too agressive parser optimization.
2099
2100 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2101
2102         A fix for bug #324319
2103         * class.cs: Remove too early base type resolve.
2104
2105 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2106
2107         A fix for bug #324319
2108         * ecore.cs: Explicitly type null when assigning to type argument to
2109         make pass verifier check.
2110
2111 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2112
2113         * anonymous.cs: Fixed recent regression when initializing captured 
2114         this.
2115
2116 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2117
2118         A fix for bug #469019
2119         * anonymous.cs: Use all parent type parameters when instantiating
2120         nested generic storey.
2121
2122 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2123
2124         * expression.cs: Check for null instance methodgroup expression.
2125
2126 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2127
2128         A fix for bug #469244
2129         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
2130         instance inside a conditional expression.
2131
2132 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2133
2134         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
2135         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
2136         GetElementType and HasElementType. IsValueType clean up.
2137
2138 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2139
2140         * nullable.cs: Use common EmitCall.
2141         
2142         * expression.cs: Emit constraint. for virtual calls only.
2143
2144 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2145
2146         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
2147         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
2148         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
2149         checks.
2150
2151 2009-01-22  Jb Evain  <jbevain@novell.com>
2152
2153         * anonymous.cs: make anonymous types' ToString implementation
2154         match what csc outputs.
2155
2156 2009-01-21  Marek Safar  <marek.safar@gmail.com>
2157
2158         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
2159         up.
2160
2161 2009-01-17  Marek Safar  <marek.safar@gmail.com>
2162
2163         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
2164         verifier checks.
2165
2166 2009-01-16  Marek Safar  <marek.safar@gmail.com>
2167
2168         * nullable.cs (LiftedBinaryOperator): Check for all possible null
2169         expressions.
2170
2171 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2172
2173         A fix for bug #466634
2174         * statement.cs: Add reference for nested storey when only this
2175         is captured.
2176
2177 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2178
2179         A fix for bug #466474
2180         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
2181         was specified.
2182
2183 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2184
2185         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
2186         Fixed nested stories parent referencing process. Also fixes #463985.
2187
2188 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2189
2190         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2191         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2192         implementation. Also fixes #463108.
2193
2194 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2195
2196         A fix for bug #416109
2197         * decl.cs: Issue correct CLSAttribute warning location.
2198
2199 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2200
2201         A fix for bug #456775
2202         * attribute.cs: Use attribute owner scope when resolving attribute
2203         arguments.
2204
2205 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2206
2207         A fix for bug #457257
2208         * decl.cs: Fixed incorrect member declaring type comparison.
2209
2210 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2211
2212         A fix for bug #460896
2213         * driver.cs: Handle /RES resources as embeddable.
2214
2215 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2216
2217         A fix for bug #462515
2218         * ecore.cs: Report inacessible members upwards.
2219
2220 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2221
2222         A fix for bug #463190, #463192
2223         * decl.cs, namespace.cs: Also import internal extension classes.
2224
2225 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2226
2227         A fix for bug #463415
2228         * generic.cs: Use right index for RemoveDependentTypes.
2229
2230 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2231
2232         A fix for bug #463196
2233         * expression.cs: Fixed enum to null comparison.
2234
2235 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2236
2237         A fix for bug #463121
2238         * nullable.cs: Fixed nullable user equality operator comparison.
2239
2240 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2241
2242         A fix for bug #462950
2243         * class.cs, decl.cs: Use full explicit name when defining automatic
2244         property backing field.
2245
2246 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2247
2248         A fix for bug #462592
2249         * pending.cs: Emit type arguments for generic proxy method.
2250
2251 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2252
2253         * expression.cs (As): Mutate all type arguments.
2254
2255 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2256
2257         A fix for bug #462622
2258         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2259         context.
2260
2261 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2262
2263         A fix for bug #450782
2264         * ecore.cs: Consider more variables of form V.I to be fixed.
2265
2266 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2267
2268         A fix for bug #460712
2269         * typemanager.cs: Core types could be imported.
2270
2271 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2272
2273         A fix for bugs #460847, #460772, #458049, #457339, #447807
2274         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2275         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2276         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2277         user lambdas used inside query clauses.
2278
2279 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2280
2281         A fix for bug #460229
2282         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2283
2284 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2285
2286         A fix for bug #459952
2287         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2288
2289 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2290
2291         A fix for bug #459630
2292         * convert.cs: Enum to valuetype conversion is not allowed.
2293
2294 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2295
2296         A fix for bug #457087
2297         * generic.cs: Don't crash when constraint comes from type
2298         declaration.
2299
2300 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2301
2302         A fix for bug #459221
2303         * anonymous.cs, statement.cs: Delay only captured this
2304         initialization.
2305
2306 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2307
2308         A fix for bug #457489
2309         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2310         and initialization to capture scope initializers correctly.
2311
2312 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2313
2314         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2315         ParameterReference refactoring.
2316
2317 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2318
2319         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2320         to be imported from any assembly.
2321
2322 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2323
2324         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2325         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2326         from anonymous method and lambda expression.
2327
2328 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2329
2330         A fix for bug #448560
2331         * expression.cs (As): Box any generic type arguments to be
2332         verifiable.
2333
2334 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2335
2336         Add tripwire for implicit conversion bugs
2337         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2338         for CS1501 error.
2339         (MethodGroupExpr.OverloadResolve): Add sanity check between
2340         IsApplicable and VerifyArgumentsCompat.
2341         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2342
2343 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2344
2345         Fix build break in System.Data_test
2346         * convert.cs (ImplicitConversionExists): Move NullLiteral
2347         conversions ...
2348         (ImplicitStandardConversionExists): ... here.
2349
2350 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2351
2352         * literal.cs: Emit correctly explicit null to nullable cast.
2353
2354 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2355
2356         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2357         resolve.
2358
2359 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2360
2361         A fix for bug #449005
2362         * convert.cs, nullable.cs: Use only one implicit nullable
2363         conversion.
2364
2365 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2366
2367         * convert.cs, literal.cs: More Convert cleanup is needed.
2368
2369 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2370
2371         * decl.cs, class.cs: Fixed misleading error message.
2372
2373 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2374
2375         A fix for bug #449005
2376         * nullable.cs (EmitEquality): Disable optimization for user operator
2377         operands.
2378
2379 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2380
2381         A fix for bug #447027
2382         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2383         with context variables stored as expression instances.
2384
2385 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2386
2387         A fix for bug #447027
2388         * delegate.cs: Fixed delegate VerifyMethod logic.
2389
2390 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2391
2392         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2393         but not verifiable.
2394
2395 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2396
2397         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2398         member type resolve to follow normal flow, instead of random
2399         property access.
2400
2401 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2402
2403         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2404         type.
2405
2406 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2407
2408         * const.cs: Emit decimal array constant as literal.
2409
2410 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2411
2412         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2413
2414 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2415
2416         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2417         into real property (saves 8 MB for corlib compilation).
2418
2419 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2420
2421         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2422         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2423         generic-mcs.cs: Small cleanup of TypeArguments.
2424
2425 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2426
2427         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2428         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2429         of ConstructedType expression, renamed to GenericTypeExpr.
2430
2431 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2432
2433         A fix for bug #445303
2434         * location.cs (IsConditionalDefined): Handle undefined global
2435         defines.
2436
2437 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2438
2439         A fix for bug #444678
2440         * expression.cs (TryReduceConstant): Always create new constant
2441         instance.
2442
2443 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2444
2445         A fix for bug #444673
2446         * ecore.cs: Ignore open generic types when used as generic type
2447         instance fields.
2448
2449 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2450
2451         A fix for bug #445458
2452         * expression.cs, cs-parser.jay: Don't crash when an expression
2453         statement is null.
2454
2455 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2456
2457         A fix for bug #445464
2458         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2459         inside unbound type.
2460
2461 2008-11-14  Jb Evain  <jbevain@novell.com>
2462
2463         * driver.cs: ignore empty -nowarn argument such as
2464         the one in -nowarn:12,13,,.
2465
2466 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2467
2468         A fix for bug #444271
2469         * anonymous.cs: Rescan parent storeys when best candidate was
2470         undone.
2471
2472 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2473
2474         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2475         useless UnboundTypeExpression.
2476         
2477         * attribute.cs: Do check obsolete attribute on generic types.
2478
2479 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2480
2481         A fix for bugs #425680, #400139
2482         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2483         refactoring.
2484
2485 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2486
2487         A fix for bug #435747
2488         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2489         compound value types assignment. Few micro optimizations added.
2490
2491 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2492
2493         A fix for bug #442610
2494         * anonymous.cs (MutateConstructor): More SRE hacking.
2495
2496 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2497
2498         A fix for bug #442579
2499         * ecore.cs: Also initialize expanded form of a method with 1 params
2500         parameter.
2501
2502 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2503
2504         * expression.cs (UnaryMutator): Do early l-side check.
2505
2506 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2507
2508         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2509         Init, otherwise we would crash later on when checking for friend
2510         assemblies. 
2511
2512         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2513         Otherwise we never get any meaningful information as to what
2514         failed. 
2515
2516 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2517
2518         A fix for bug #436318
2519         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2520
2521 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2522
2523         * namespace.cs: Turns out that it was a really bad idea to hide
2524         the errors for namespaces not found here in eval mode.    
2525
2526         * eval.cs: When we process using clauses, only enter those into
2527         the list of valid using clauses after they have been validated.   
2528
2529         The above change gives the proper semantics: it does not
2530         senselessly report the same errors with broken using statements by
2531         never storing them in the first place when they are invalid.
2532
2533 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2534
2535         A fix for bug #421839
2536         * cs-parser.jay: Remove expression from coalesce rule to force lower
2537         priority than the assignment operator.
2538
2539 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2540
2541         A fix for bug #437875
2542         * nullable.cs: Compile correctly method group operand used with null
2543         coalescing operator.
2544
2545 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2546
2547         A fix for bug #434589
2548         * expression.cs (Binary): Ignore lifted conversions when at least
2549         one operand is of reference type.
2550
2551 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2552
2553         * cs-parser.jay: Better syntax error report.
2554
2555 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2556
2557         A fix for bug #436792
2558         * cs-parser.jay: Use GetLocation to access location.
2559
2560 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2561
2562         A fix for bug #440774
2563         * cs-parser.jay: Also set current_array_type when parsing local
2564         variables types.
2565
2566 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2567
2568         A fix for bug #440785
2569         * expression.cs (As): Don't resolve self modifing expression
2570         multiple times.
2571
2572 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2573
2574         A fix for bug #439447
2575         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2576
2577 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2578
2579         A fix for bug #437571
2580         * cs-parser.jay: Fixes internal error for invalid expression
2581         statements.
2582
2583 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2584
2585         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2586
2587 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2588
2589         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2590
2591 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2592
2593         * cs-tokenizer.cs: More precise cast parsing.
2594
2595 2008-10-16  Martin Baulig  <martin@ximian.com>
2596
2597         * anonymous.cs (AnonymousMethodStorey): Put back the
2598         `hoisted_locals' hashtable and use it in EmitType().
2599
2600 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2601
2602         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2603         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2604         ~5MB for corlib.
2605
2606 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2607
2608         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2609
2610 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2611
2612         * statement.cs: Mutate scope initializers.
2613
2614 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2615
2616         * expression.cs: Use typeless value for This constant.
2617         
2618         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2619
2620 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2621
2622         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2623         tokenizer.
2624
2625 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2626
2627         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2628         type to type cast.
2629
2630 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2631
2632         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2633         parser and tokenizer. Fixes many ambiguities including #433258.
2634
2635 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2636
2637         * cs-parser.jay: Fixed missing accessor recovery.
2638
2639 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2640
2641         A fix for bug #433701
2642         * expression.cs: Better error message.
2643
2644 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2645
2646         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2647         
2648         * Makefile: Disabled unused debug symbols.
2649
2650         Also fixes: #320556, #321097, #321656, #321876, #351316
2651
2652 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2653
2654         * eval.cs: rename "<interactive>" to "{interactive}", to work
2655         around a requirement in the compiler that this be a valid
2656         filename, and in Windows it is not (433886).
2657
2658 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2659
2660         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2661
2662 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2663
2664         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2665         cs-parser.jay: Generic type declaration and type arguments cleanup.
2666
2667 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2668
2669         * cs-parser.jay: Allow parsing weird array creation construct.
2670
2671 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2672
2673         * cs-parser.jay: Conflicts reduction.
2674
2675 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2676
2677         * cs-parser.jay: Conflicts reduction.
2678
2679 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2680
2681         Fix #398325
2682         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2683         property.  Add a 'count' hint about the use of the shared vector.
2684         Ensure that we don't leak out dirty bits.
2685         (UsageVector.MergeChild): Throw away information about variables
2686         in child vectors.
2687         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2688
2689 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2690
2691         A fix for bug #431746
2692         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2693         parameters when iterator is created.
2694
2695 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2696
2697         A fix for bug #431827
2698         * expression.cs: Fixed right based pointer arithmetic operations
2699         emit.
2700
2701 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2702
2703         A fix for bug #353779
2704         * assign.cs, expression.cs: Fixed compound assignment conversions.
2705
2706 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2707
2708         A fix for bug #375262
2709         * statement.cs: Refactor ArrayForeach to be usable with string
2710         indexer. Optimized single dimentional arrays foreach.
2711
2712 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2713
2714         A fix for bug #431255
2715         * anonymous.cs, expression.cs: Removed broken optimization.
2716
2717 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2718
2719         * anonymous.cs: Use full type parameters of parent generic
2720         containers. Removed unnecessary AddParentStoreyReference call.
2721
2722 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2723
2724         A fix for bug #324702
2725         * class.cs: Use better shorter names for explicit interface member
2726         implementations.
2727
2728         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2729
2730 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2731         
2732         * expression.cs: Use new interface to check fixed expression.
2733
2734 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2735
2736         A fix for bug #421101
2737         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2738         interface to check for fixed fixed-buffers.
2739
2740 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2741
2742         A fix for bug #429264
2743         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2744         
2745         * delegate.cs: Removed unnecessary casts.
2746
2747 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2748
2749         A fix for bug #352151
2750         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2751         class.cs: Fixed already defined explicit interface members check.
2752
2753 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2754
2755         cs-tokenizer.cs: Fix typo.
2756
2757 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2758
2759         * eval.cs (InteractiveBase): The quit command now just sets a
2760         flag, instead of calling Environment.Exit(), it is milder on
2761         embedded hosts. 
2762
2763         CompiledMethod is now in Mono.CSharp, not nested inside
2764         the Evaluator, it was inconvenient to use.
2765
2766 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2767
2768         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2769         code to be invoked without having to reparse.
2770
2771 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2772
2773         * ecore.cs: The recent changes to FieldExpr broke this as well.
2774         Fixes LINQ queries in the interactive shell.
2775
2776         * Multiple files: indentation fixing for the Mono coding
2777         guidelines for the switch statement.
2778
2779         * eval.cs: Make the Evaluator API thread safe.
2780
2781 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2782
2783         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2784         constructor parsing.
2785
2786 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2787
2788         A fix for bug #325326
2789         * statement.cs: Check possible mistaken empty statement using
2790         explicit blocks only.
2791
2792 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2793
2794         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2795         RootNamespace.ComputeNamespaces to update the internal list of
2796         namespaces, this is no longer done for us.
2797
2798         (InteractiveBase): Use the Evaluator APIs instead of calling into
2799         Driver directly
2800
2801 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2802
2803         A fix for bug #429264
2804         * expression.cs: Missing mutator for access to multidimensional
2805         arrays.
2806
2807 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2808
2809         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2810         entry wrapper.
2811         
2812         * driver.cs: Missing input argument check.
2813
2814 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2815
2816         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2817         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2818         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2819         DefineMembers.
2820
2821 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2822
2823         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2824         fully constructed FieldExpr, fixes the regression introduced in
2825         the last commit.
2826         
2827         * ecore.cs, expression.cs: Plug back the eclass initialization as
2828         otherwise it regresses `csharp'. 
2829
2830 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2831
2832         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2833         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2834         phase to resolve phase. It resolves problems with expression trees
2835         and fixes bugs #323796, #325156.
2836
2837 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2838
2839         * codegen.cs: Report better error when symbol writer is missing.
2840
2841 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2842
2843         * codegen.cs: Set .NET symbol writer.
2844         
2845         * decl.cs: Guard against null generic arguments.
2846         
2847         * report.cs: Don't report exactly same additional details.
2848
2849 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2850
2851         A fix for bug #324917
2852         * cs-parser.jay: Add missing multidimensional non-expression type
2853         ranks.
2854         
2855 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2856
2857         A fix for bug #428191
2858         * anonymous.cs: Create an outer generic fields also for non-storey
2859         anonymous methods.
2860
2861 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2862
2863         A fix for bug #378294
2864         * class.cs: Make fixed size buffers gmcs feature only.
2865
2866 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2867
2868         A fix for bug #355622, #324993
2869         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2870         field initializer.
2871
2872 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2873
2874         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2875         error reporting.
2876
2877 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2878
2879         A fix for bug #416110
2880         * generic.cs: Struct constraint results in default ctor and
2881         ValueType base type constraint to be set.
2882
2883 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2884
2885         A fix for bug #423791
2886         * generic.cs: Fixed params output type type-inference.
2887
2888 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2889
2890         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2891         
2892 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2893
2894         * cs-tokenizer.cs: Don't break on extra partial modifier.
2895
2896 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2897
2898         A fix for bug #427592
2899         * generic.cs: Use common parameter resolve method.
2900
2901 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2902
2903         A fix for bug #414758
2904         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2905         property.
2906
2907 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2908
2909         * driver.cs, namespace.cs: Read types and namespaces after all
2910         requested assemblies are loaded, fixes issues with System.Core
2911         auto-reference, and #419888.
2912
2913 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2914
2915         A fix for bug #417705
2916         * cs-parser.jay: Fixed as/is operator expression split.
2917
2918 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2919
2920         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2921         Fixed expression tree representation of empty new expression and
2922         new initializer expression.
2923
2924 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2925
2926         * eval.cs: Remove warning, keep reference to driver around.
2927
2928         * Hide fields that do not need to be public.
2929
2930 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2931
2932         A fix for bug #426385
2933         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2934         conversion for array elements.
2935
2936 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2937
2938         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2939         void parsing conflicts.
2940
2941 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2942
2943         A fix for bug #425601
2944         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2945         System.Core only when there is no custom ExtensionAttribute
2946         implementation.
2947
2948 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2949
2950         * namespace.cs: Do not report CS0246 (name
2951
2952 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2953
2954         A fix for bug #425669
2955         * generic.cs: Don't cache generic static anonymous method 
2956         containers.
2957
2958 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2959
2960         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2961         conflicting constraints.
2962
2963 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2964
2965         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2966         mcs too.
2967
2968 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2969
2970         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2971         to null pointer conversion fixes.
2972
2973 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2974
2975         * cs-parser.jay, expression.cs: An implicitly typed local variable
2976         declarator cannot use an array initializer.
2977
2978 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2979
2980         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2981
2982 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2983
2984         * generic.cs (InflatedConstraints): Don't crash when constraints
2985         are different.
2986         
2987         * cs-parser.jay: const_declarator is a block.
2988
2989         * constant.cs: Check for not allowed NaN conversions.
2990
2991 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2992
2993         * driver.cs: Drop --shell argument, the compiler is no longer a
2994         REPL. 
2995
2996         * eval.cs: Move most of the code that deals with evaluation into
2997         this file and document the public API from repl.cs
2998
2999         * repl.cs: Remove from here.
3000         
3001 2008-09-10  Marek Safar  <marek.safar@gmail.com>
3002
3003         A fix for bug #424684
3004         * generic.cs: Generic class constraints must come first.
3005
3006 2008-09-09  Miguel de Icaza  <miguel@novell.com>
3007
3008         * cs-parser.jay: Improve error reporting for syntax errors in
3009         statements and expressions, we now report the expected tokens
3010         instead of reporting the useless "; expected".
3011
3012         Drop the strings from the token declaration, it turns out that
3013         they did not do what I thought they did.  Instead they were adding
3014         two sets of tokens to the tables.
3015
3016 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3017
3018         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
3019         delegate.cs: Share special type check.
3020
3021 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3022
3023         A fix for bug #423981
3024         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
3025
3026 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3027
3028         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
3029         ConvertImplicitly.
3030
3031 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3032
3033         A fix for bugs: #324750, #335946
3034         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
3035         lookup rule to determine ?-based tokens.
3036
3037 2008-09-08  Miguel de Icaza  <miguel@novell.com>
3038
3039         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
3040         expressions (like event adding or removing) end up here, so we
3041         need to treat those as statements.
3042
3043         Add LoadAssembly method.
3044
3045 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3046
3047         * repl.cs: Add Time method.
3048
3049 2008-09-05  Marek Safar  <marek.safar@gmail.com>
3050
3051         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
3052
3053 2008-09-05  Miguel de Icaza  <miguel@novell.com>
3054
3055         * repl.cs: Add workaround for old compilers.
3056
3057 2008-09-04  Jb Evain  <jbevain@novell.com>
3058
3059         * repl.cs (PrettyPrint): pretty print everything that
3060         implements IDictionary, as well as IEnumerables. Also,
3061         add a quit helper property.
3062
3063 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3064
3065         * constant.cs: Better error reporting for decimal literals.
3066         
3067         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
3068         field attributes.
3069         
3070 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3071                         Miguel de Icaza  <miguel@novell.com>
3072
3073         A fix for bug #422951
3074         * assign.cs (Assign.DoResolve): Perform the type conversions
3075         checks before we attempt to initialize `New' initializers. 
3076
3077 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3078
3079         A fix for bug #422853
3080         * delegate.cs (DelegateCreation): Add special handling for
3081         EmptyExpression.Null instance expression which is just another
3082         hack for undecided member instance exression.
3083
3084 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3085
3086         * expression.cs, ecore.cs: Emit full expression tree for reduced
3087         binary expressions.
3088
3089 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3090
3091         * expression.cs (This): Guard against multi-resolving.
3092         
3093         * ecore.cs, statement.cs (Throw): Simplified.
3094         
3095         * flowanalysis.cs: Also verify event fields.
3096
3097 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3098
3099         * assign.cs (Assign.DoResolve): Perform the type conversions
3100         checks before we attempt to initialize `New' initializers. 
3101
3102         * repl.cs (PrettyPrint): Add Hashtable prettyprint
3103
3104         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
3105         public. 
3106
3107         * repl.cs: Update help.
3108
3109 2008-09-03  Miguel de Icaza  <miguel@novell.com>
3110
3111         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
3112         handling of the default config handling, including the special
3113         treatment of System.Core assembly. 
3114
3115         Fixes the REPL processing for LINQ.
3116
3117 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3118
3119         A fix for bug #422507
3120         * expression.cs (UnboxCast): Add missing child expression mutator.
3121
3122 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3123
3124         * driver.cs: Don't self reference System.Core assembly.
3125
3126 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3127
3128         A fix for bug #422507
3129         * expression.cs (StringConcat): Add missing type mutator.
3130
3131 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3132
3133         * generic.cs (TypeInferenceContext): Follow equality rule for
3134         constructed type lower bound type inference.
3135
3136 2008-09-02  Miguel de Icaza  <miguel@novell.com>
3137
3138         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
3139         <dblank@cs.brynmawr.edu> which updates the cursor position on
3140         refresh.
3141         
3142 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3143
3144         A fix for bug #367145
3145         * driver.cs: Fixed import of extension methods when using -noconfig
3146         option.
3147
3148 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3149
3150         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
3151         version from non-generic implementation instead.
3152
3153 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3154
3155         A fix for bug #418908
3156         * class.cs: Use AddScopeStatement for field initializers.
3157
3158 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3159
3160         A fix for bug #415385
3161         * ecore.cs, convert.cs: Do method group conversion for equal group types.
3162
3163 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3164
3165         A fix for bug #421736
3166         * iterators.cs: Don't crash on unreachable iterators.
3167
3168 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3169
3170         A fix for bug #421628
3171         * parameter.cs, attribute.cs: Clone also parameter attributes.
3172
3173 2008-08-30  Miguel de Icaza  <miguel@novell.com>
3174
3175         * namespace.cs (LookupType): In EvalMode, try to replace
3176         the TypeBuilder from our cache with a Type as Reflection.Emit does
3177         not  like to mix code from older assemblies emitted and new
3178         assemblies emitted. 
3179
3180         This sounds like a serious Mono bug that prevents multiple
3181         assemblies to be generated and consumed at the same time.
3182
3183         * cs-parser.jay (push_current_class): Do not make interactive
3184         classes internal or private, make them public as we currently
3185         generate each new class in a new assembly.   
3186
3187 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3188
3189         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3190         remove types that are entered into the global namespace during
3191         parsing so that we can remove them on failure.
3192  
3193         * cs-parser.jay: Parsing: we now keep track of types that are
3194         entered into global variables and queue those in case the parsing
3195         or resolution fail.
3196  
3197         This happens in a few situations: during partial-input, we invoke
3198         the parser repeatedly for example with the string "class X", this
3199         would cause X to be registed, and we need to remove this
3200         registration so that another parse attempt later with say "class X {"
3201         would actually work.
3202  
3203         Additionally, if there is an error in the resolution phase, for
3204         example: "class X : NonExistant {}" th
3205         
3206         * cs-parser.jay: Be more precise with the errors being raised,
3207         instead of flagging all exceptions during parsing to be attributed
3208         to the parsing process, distinguish those from errors happening in
3209         the actions and hint that using -v would produce the actual
3210         exception. 
3211
3212         * repl.cs: Do not load all compiler references on each reset,
3213         doing the partial reset takes care of this.
3214         
3215 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3216
3217         * repl.cs: Add support for loading all the files from
3218         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3219         as shell libraries.
3220
3221         Introduce a micro-parser that is able to deambiguate on its input
3222         whether we are dealing with a compilation unit (namespace, class,
3223         interface, struct, delegate) declaration or a statement.   This
3224         allows both declarations and statements to be entered. 
3225
3226         Set history size by default to 300 lines.
3227
3228         Instead of distinguishing based on the parser.InteractiveResult,
3229         have only two cases: statements were parsed, or a compilation unit
3230         was.   Always pull the Using statement additions from the
3231         compilation unit parse.
3232         
3233         * cs-tokenizer.cs: Rename tokens to better describe their intent
3234         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3235         
3236         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3237         EvalMode is used to trigger the lookup of global variables while
3238         StatementMode is used turn variable declarations into static
3239         fields.
3240
3241         * getline.cs: Allow history size to be set.
3242         
3243 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3244
3245         A fix for bug #360755
3246         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3247
3248 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3249
3250         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3251         
3252         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3253         member name, it is too confusing
3254         
3255         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3256         
3257         * rootcontext.cs: Finally default to warning level 4.
3258
3259 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3260
3261         * class.cs (CheckBase): Ignore overloaded operators.
3262
3263 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3264
3265         A fix for bug #420830
3266         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3267
3268 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3269
3270         A fix for bug #420832
3271         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3272
3273 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3274
3275         A fix for bug #420386
3276         * nullables.cs: Fixed logic of nullable user comparison operators involving
3277         null values.
3278
3279 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3280         
3281         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3282
3283 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3284
3285         * repl.cs: Add support for aborting the running code with C-c. 
3286
3287 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3288
3289         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3290
3291 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3292
3293         * cs-parser.jay (interactive_statement_list): A new set of rules
3294         for hosting statements that uses the "interactive_" prefix.   
3295
3296         * repl.cs: Add support for parsing `using' as a statement or as a
3297         directive.  Deambiguating before passing this to the parser.
3298
3299         We need to distinguish statement_expressions that occur at the
3300         toplevel vs those that occur embedded into expressions.
3301
3302         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3303         that fixes the cursor key handling, and a history bug.
3304         
3305 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3306
3307         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3308         limitations in Console, instead the 2.0 bootstrap libraries now
3309         include the Console bits.
3310
3311         Also, remove the use of Nullables from getline.cs
3312
3313         ------------
3314         
3315         Interactive support for the C# compiler.   Use gmcs --shell to
3316         enter a read-eval-print loop shell.
3317
3318         Docs: http://www.mono-project.com/CsharpRepl
3319         
3320         * sources: include repl.cs here and getline.cs for gmcs.exe,
3321         everything else is getline.cs impaired.
3322
3323         * Makefile: when bootstrapping pass a special flag
3324         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3325         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3326         This distinguishes those two cases.
3327
3328         * repl.cs: Support for a read-eval-print loop.   Will be soon
3329         refactored into eval support and then REPL on top of it.
3330
3331         * ecore.cs: If a simplename lookup fails, before erroring out,
3332         if we are in EvalMode to resolve the name to a declaration in the
3333         Eval-land.    
3334
3335         This means that variable declarations that happened in previous
3336         classes (as repl puts every statement in a separate class) are
3337         made visible in this way.
3338
3339         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3340         triggered an error due to the end of file being reached.   This is
3341         used to do multi-line input, and notify the caller that the user
3342         needs to provide more text before a successful parse.
3343
3344         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3345         to drive the evaluation with a custom wrapper. 
3346
3347         * driver.cs: Add support for --shell, and refactor some code to be
3348         reused from repl.cs
3349         
3350         * namespace.cs: Add support for serializing the contents of the
3351         namespaces and reloading them.  
3352
3353         * getline.cs: A managed implementation of ReadLine under
3354         X11/Apache2 license terms.  Easy to embed in other applications as
3355         well.
3356
3357         * namespace.cs: Add some functions to save and restore the
3358         namespace state.
3359
3360         * rootcontext.cs: New public field.
3361
3362         * cs-tokenizer.cs: Add support for one of the possible characters
3363         we introduce into the token stream.  
3364
3365         This patch does not affect the regular tokenization process, the
3366         only performance hit would happen if there is an invalid character
3367         on the input string.
3368
3369         * support.cs: Move isatty helper routine here.
3370
3371         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3372         code generator for in-memory assemblies.
3373
3374 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3375
3376         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3377         parameter cannot be always used as a type.
3378
3379 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3380
3381         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3382
3383 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3384
3385         * convert.cs: Implement explicit array to IList<T> conversion.
3386
3387 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3388
3389         A fix for bug #362740
3390         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3391
3392 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3393         
3394         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3395         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3396         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3397         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3398         handling to use just one type of infrastructure and deal with generics
3399         more effectivelly.
3400
3401 2008-07-23  Martin Baulig  <martin@ximian.com>
3402
3403         *** Merged this from trunk revision 108527 ***
3404
3405         * statement.cs
3406         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3407         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3408         scope variable.
3409
3410 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3411         
3412         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3413         error checks.
3414
3415 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3416         
3417         * delegate.cs: Fixed compiler crash when creating delegate using partial
3418         method.
3419         
3420         * typemanager.cs: MulticastDelegate is not a delegate.
3421
3422 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3423         
3424         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3425         checks.
3426
3427 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3428
3429         * cs-parser.jay (type): Allow 'var' in mcs too.
3430         (local_variable_type): Likewise.
3431
3432 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3433         
3434         * driver.cs: Removed broken -noconfig variants.
3435
3436 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3437         
3438         A fix for bug #417078
3439         * expression.cs: Emit correctly left side pointer operators.
3440
3441 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3442
3443         * generic.cs, lambda.cs: Inflate method generic arguments only.
3444
3445 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3446
3447         * class.cs: Fixed struct layout check regression.
3448
3449 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3450
3451         * cs-parser.jay, enum.cs: Simplified enum parsing.
3452         
3453         * decl.cs: Check all type parameters conflicts.
3454         
3455         * expression.cs, statement.cs, attribute.cs: More expression checks.
3456
3457 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3458
3459         * generic.cs: Add type inference types restriction.
3460         
3461         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3462         anonymous.cs, expression.cs: Allocate less accessor parameters.
3463
3464 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3465
3466         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3467         classes.
3468
3469 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3470
3471         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3472
3473 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3474
3475         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3476         Also fixes #362146 and #381592.
3477
3478 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3479
3480         * ecore.cs: Reduced constant cannot be used as an attribute value.
3481         
3482         * cs-parser.jay: Base expression has to be a type.
3483         
3484         * expression.cs (Conditional): Uses ReducedExpression.
3485
3486 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3487
3488         A fix for bug #376826
3489         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3490         address of hoisted local variable or parameter cannot be taken.
3491
3492 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3493
3494         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3495         anonymous method inside checked/unchecked expression.
3496
3497 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3498
3499         * typemanager.cs (IsEqual): Guard against null.
3500         
3501         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3502         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3503         routine. Fixed few misleading conversion errors.
3504
3505 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3506
3507         * class.cs: Consider generics when checking cycles in struct layout.
3508
3509 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3510
3511         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3512
3513 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3514
3515         A fix for bug #414165
3516         * anonymous.cs: Use same anonymous implementation method for all anonymous
3517         method emits.
3518
3519 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3520
3521         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3522         constraints.
3523
3524 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3525
3526         * cs-parser.jay: Typeof argument has to be a type expression.
3527         
3528         * namespace.cs: Check alias and namespace definitions collisions.
3529         
3530         * class.cs, pending.cs: Moved explicit interface accessor implementation
3531         check.
3532         
3533         * delegate.cs, expression.cs: Verify special name invocations.
3534         
3535 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3536
3537         * cs-parser.jay: Don't choke on empty generic type arguments.
3538         
3539         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3540         
3541         * expression.cs, ecore.cs: Minor expressions bugs.
3542
3543 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3544
3545         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3546         and added more error handling.
3547         
3548         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3549         
3550         *  modifiers.cs, enum.cs: Fixed.
3551
3552 2008-07-31  Jb Evain  <jbevain@novell.com>
3553
3554         * driver.cs: remove -pkg ability of smcs.
3555
3556 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3557
3558         * statement.cs (Switch): Correctly set empty default target for single
3559         blocks.
3560
3561 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3562
3563         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3564         string switch statement implementation to use string dictionary which
3565         significantly (2-8x) improves performance of generated code.
3566
3567 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3568
3569         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3570         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3571         
3572 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3573
3574         A fix for bug #412595
3575         * typemanager.cs, convert.cs, expression.cs: Some types are never
3576         convertible to each other.
3577
3578 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3579
3580         * nullable.cs (CreateNullConstant): An error messages update.
3581
3582 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3583
3584         A fix for bug #412595
3585         * cfold.cs: Don't cast undefined bool constant.
3586
3587 2008-07-29  Martin Baulig  <martin@ximian.com>
3588
3589         * symbolwriter.cs
3590         (SymbolWriter.Reset): New public static method.
3591
3592         * driver.cs
3593         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3594
3595 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3596
3597         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3598         
3599         * expression.cs (ElementAccess): Exact size allocation.
3600
3601 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3602
3603         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3604
3605 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3606
3607         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3608         
3609         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3610         flow analysis.
3611
3612 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3613
3614         A fix for bug #412217
3615         * assign.cs: Mutate also assignment type.
3616
3617 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3618
3619         A fix for bug #323644
3620         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3621         indexers.
3622
3623 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3624
3625         A fix for bug #412134
3626         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3627         non-enumerable operands when overloading equality or bitwise operators.
3628
3629 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3630
3631         * anonymous.cs: Cache closed generic anonymous method delegates.
3632
3633 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3634
3635         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3636         anonymous.cs, statement.cs: Always emit anonymous method as static method
3637         when is instance free. Use nesting for nested anynomous methods blocks.
3638         
3639 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3640
3641         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3642         types.
3643
3644 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3645
3646         * expression.cs: Removed MakeSimpleCall.
3647
3648 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3649
3650         A fix for bug #323012
3651         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3652         Base method implementing interface has to be public.
3653
3654 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3655
3656         * cs-parser.jay: Don't break on missing argument.
3657
3658 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3659
3660         A fix for bug #320993
3661         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3662           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3663
3664 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3665
3666         A fix for bug #320748
3667         * convert.cs: Implicit user operators cannot convert to interfaces
3668
3669 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3670
3671         A fix for bug #312686
3672         * driver.cs: Ignore empty assembly references.
3673
3674 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3675
3676         A fix for bug #387040
3677         * ecore.cs: Skip constrains check for an explicit implementation.
3678
3679 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3680
3681         A fix for bug #409045
3682         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3683           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3684           identifiers are file specific unless passed as input arguments.
3685
3686 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3687
3688          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3689          to emit UnmanagedMarshal data under 2.0 profile.
3690
3691 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3692
3693         A fix for bug #410369
3694         * parameter.cs: Clone correctly ParamsParameter.
3695
3696 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3697
3698         * expression.cs (Argument): Always report type for type based expressions
3699         errors.
3700
3701 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3702
3703         A fix for bug #410666
3704         * anonymous.cs: Correctly initialize generic storey reference.
3705
3706 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3707
3708         * convert.cs: Don't box same type arguments.
3709
3710 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3711
3712         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3713         Finished missing generic type mutators.
3714
3715 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3716
3717         * iterators.cs, statement.cs: Finished statements CloneTo.
3718
3719 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3720
3721         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3722         
3723         * expression.cs: Emit optimized default value expressions in expression tree
3724         array initializer.
3725
3726 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3727
3728         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3729
3730 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3731
3732         A fix for bug #367536
3733         * cs-parser.jay: Check static constructor of generic types for an access
3734         modifier.
3735
3736 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3737
3738         A fix for bug #353800
3739         * lambda.cs: Emit ret for contextual statements.
3740         
3741         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3742         up emitting redundant ret for all anonymous methods with return.
3743
3744 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3745
3746         A fix for bug #365188
3747         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3748         create anonymous method storey in unreachable block.
3749
3750 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3751
3752         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3753         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3754         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3755         statement.cs: Fixed relevant defects found by Gendarme.
3756
3757 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3758
3759         A fix for bug #325291
3760         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3761         statement.cs: Replaced IAnonymousHost with top level block flag.
3762
3763 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3764
3765         * cs-parser.jay: Clean up unused open_parens.
3766
3767 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3768
3769         * ecore.cs: Custom error message for a range variable assignment.
3770
3771 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3772
3773         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3774         load.
3775
3776 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3777
3778         * literal.cs: Null literal is of object type.
3779
3780 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3781
3782         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3783         expression of nullable equality comparison.
3784
3785 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3786
3787         * expression.cs(PointerArithmetic): Removed redundant assignment.
3788
3789 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3790
3791         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3792
3793 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3794
3795         A fix for bug #408361
3796         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3797         they are replaced by GetMethod.
3798
3799 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3800
3801         A fix for bug #408721 by jeremie.laval@gmail.com
3802         * expression.cs (Indirection): Implemented CloneTo.
3803
3804 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3805
3806         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3807         assert check.
3808
3809 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3810
3811         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3812
3813 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3814
3815         * linq.cs: Reset tranparent parameter counter in probing mode.
3816
3817 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3818
3819         * anonymous.cs: Mutate anonymous method type.
3820
3821 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3822
3823         * ecore.cs, anonymous.cs: Mutate field expressions.
3824
3825 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3826
3827         A fix for bug #369670
3828         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3829
3830 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3831
3832         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3833
3834 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3835
3836         Fix bug #314902
3837         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3838         only one '>', and finds a '>>', abort the generic lookahead.
3839
3840 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3841
3842         A fix for bug #319902
3843         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3844
3845 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3846
3847         A fix for bug #406371
3848         * statement.cs: Moved EmitSymbolInfo to Block.
3849
3850 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3851
3852         * ecore.cs: Report better error for extension method overload failures.
3853
3854 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3855
3856         * expression.cs (Is): No need to box reference values.
3857
3858 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3859
3860         * class.cs: Use event resolve context when initializing CreateEmitContext.
3861
3862 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3863
3864         A fix for bug #394436
3865         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3866         method used inside expression trees. Added more LINQ to expression tree
3867         conversions.
3868
3869 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3870
3871         A fix for bug #378189, #370577
3872         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3873         from expression.
3874
3875 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3876
3877         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3878         hierarchically.
3879
3880 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3881
3882         A fix for bug #406702
3883         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3884
3885 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3886
3887         A fix for bug #406648
3888         * cs-parser.jay: Report nullable use in mcs for some cases.
3889
3890 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3891
3892         * ecore.cs: Improved argument mismatch error messages.
3893
3894 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3895
3896         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3897
3898 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3899
3900         * expression.cs (TypeOf): Mutate type argument.
3901
3902 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3903
3904         * class.cs: Report missing partial modifier for correct type.
3905
3906 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3907
3908         * ecore.cs, expression.cs (VariableReference): Variable property is 
3909         protected.
3910
3911 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3912
3913         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3914         
3915 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3916
3917         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3918         method delegates.
3919
3920 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3921
3922         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3923         anonymous method storey to an instance method when only "this" is hoisted.
3924
3925 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3926
3927         A fix for bug #321615
3928         * expression.cs: Pointer comparisons use unsigned operator.
3929
3930 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3931
3932         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3933
3934 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3935
3936         A fix for bug #404905
3937         * class.cs: Always initialize local unsafe variables.
3938
3939 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3940
3941         A fix for bug #396987
3942         * expression.cs (NewInitialize): Clear local temporary variable for next run
3943
3944 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3945
3946         A fix for bug #401020
3947         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3948
3949 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3950
3951         A fix for bug #398319
3952         * cs-parser.jay: Implemented undocumented base access expression inside
3953         anonymous types.
3954
3955 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3956
3957         A fix for bug #404227
3958         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3959
3960 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3961
3962         A fix for bug #404227
3963         * convert.cs: Fixed explicit array to interface cast.
3964
3965 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3966
3967         A fix for bug #403894
3968         * delegate.cs: Mutate DelegateInvocation type.
3969
3970 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3971
3972         A fix for bug #379348
3973         * delegate.cs: Box a load of generic parameters.
3974
3975 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3976
3977         * expression.cs: Add an array creation arguments mutate.
3978
3979 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3980
3981         A fix for bug #386068
3982         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3983         parameter.
3984
3985 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3986
3987         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3988         CloneTo.
3989
3990 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3991
3992         A fix for bug #403518
3993         * delegate.cs: Type correctly anonymous method new invocation.
3994
3995 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3996
3997         A fix for bug #394826
3998         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3999         calls.
4000
4001 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4002
4003         A fix for bug #394826
4004         * anonymous.cs, iterators.cs: Construct generic storey only when is really
4005         needed.
4006
4007 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4008
4009         * class.cs: Clone indexer parameters for localized capturing.
4010
4011 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4012
4013         A fix for bug #402379
4014         * expression.cs: Don't crash when an object initializer resolve fails.
4015
4016 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4017
4018         A fix for bug #402888
4019         * expression.cs: Mutate conditional expression.
4020
4021 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4022
4023         A fix for bug #401012
4024         * class.cs: Keep StructLayout in shared container.
4025
4026 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4027
4028         A fix for bug #400438
4029         * decl.cs, class.cs: Only properties can be automatically implemented.
4030
4031 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4032
4033         * statement.cs (ChangeToIterator): Copy also labels.
4034
4035 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4036
4037         * ecore.cs: Pass type argument details to parent extension method.
4038
4039 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4040
4041         A fix for bug #375966
4042         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
4043
4044 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
4045
4046         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
4047
4048 2008-06-22  Marek Safar  <marek.safar@gmail.com>
4049
4050         A fix for bug #394347
4051         * anonymous.cs: Cache compatible delegates as compatibility check produces
4052         a new method every time.
4053
4054 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4055
4056         * anonymous.cs: Propagate storey reference for single references.
4057
4058 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4059
4060         A fix for bug #387615
4061         * assign.cs, expression.cs: Correctly clone compound assignment.
4062
4063 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4064
4065         A fix for bug #359611, #359604
4066         * anonymous.cs: Mutate all types of hoisted parameters.
4067
4068 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4069
4070         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
4071         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
4072         expression.cs, codegen.cs, statement.cs
4073         
4074         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
4075         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
4076         
4077         ** Anonymous methods, lambda expressions rewrite **
4078         
4079         Anonymous expressions are now resolved when an explicit block is resolved 
4080         and they don't require any registration procedure anymore. Further,
4081         anonymous methods are defined when explicit block is emitted which allows
4082         better control of whole process and opens possibilities for more
4083         optimizations as well as alternative to reverse whole process.
4084         
4085         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
4086         process consistent and to correctly emit hoisted generic methods when they
4087         have at least 1 hoisted variable.
4088         
4089 2008-06-17  Martin Baulig  <martin@ximian.com>
4090
4091         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
4092         iterator method.
4093         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
4094         virtual property; check it in Emit().
4095         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
4096         an iterator.
4097         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
4098         an iterator.
4099         (Indexer.Define): Likewise.
4100
4101 2008-06-17  Marek Safar  <marek.safar@gmail.com>
4102
4103         * convert.cs: Don't use IsInterface on type arguments.
4104         
4105         * delegate.cs: DelegateInvocation uses MethodInfo.
4106         
4107         * parameter.cs: Removed IsTypeParameter.
4108         
4109         * generic-mcs.cs: More missing stuff.
4110
4111 2008-06-16  Martin Baulig  <martin@ximian.com>
4112
4113         * modifiers.cs
4114         (Modifiers.DEBUGGER_HIDDEN): New public const.
4115
4116         * typemanager.cs
4117         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
4118
4119         * class.cs
4120         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
4121         (AbstractPropertyEventMethod): Likewise.
4122         (Constructor.Emit): Likewise.
4123         (SourceMethod.SetCompilerGenerated): Removed.
4124
4125         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
4126         on MoveNext().
4127
4128         * anonymous.cs
4129         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
4130         if we're an `IteratorHost'.
4131         (AnonymousMethodMethod..ctor): Don't set
4132         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
4133         not on the method.
4134
4135 2008-06-16  Marek Safar  <marek.safar@gmail.com>
4136
4137         * statement.cs: Clean-up foreach statements.
4138
4139 2008-06-12  Marek Safar  <marek.safar@gmail.com>
4140
4141         * class.cs: Stop using public method which should not exist
4142         (MethodBuilder.SetGenericMethodSignature).
4143
4144 2008-06-11  Martin Baulig  <martin@ximian.com>
4145
4146         * location.cs
4147         (Location.LookupFile): Add `CompilationUnit' argument; when given
4148         a relative file name, make it relative to the directory the .cs
4149         file is located in instead of using the current directory.
4150
4151 2008-06-11  Martin Baulig  <martin@ximian.com>
4152
4153         * class.cs
4154         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
4155         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
4156         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
4157         (SourceMethod.SetCompilerGenerated): Likewise.
4158
4159 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4160
4161         * codegen.cs, driver: Only write symbol file when it's asked for.
4162
4163 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4164
4165         * codegen.cs: Don't use assembly writer error handling for symbol writer.
4166
4167 2008-06-10  Martin Baulig  <martin@ximian.com>
4168
4169         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
4170
4171 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4172
4173         A fix for bug #316290
4174         * expression.cs: Include decimal operators in predefined table.
4175         
4176         * parameters.cs: More readonlyness.
4177
4178 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4179
4180         A fix for bug #397213
4181         * cs-parser.jay: One more missing current_local_parameters reset.
4182
4183 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4184
4185         A fix for bug #396633
4186         * class.cs: Host backing field in partial container.
4187
4188 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4189
4190         A fix for bug #397068
4191         * expression.cs: Check both operand types when predefined operator is used.
4192
4193 2008-06-05  Martin Baulig  <martin@ximian.com>
4194
4195         Merged the `debugger-kahalo' branch.
4196
4197         * class.cs
4198         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4199         we're an iterator method.
4200         (SourceMethod): Reflect latest symbol writer changes;
4201         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4202         now `start_row' and `end_row'.
4203         (Constructor.Emit): Fix the logic whether to emit symbol information.
4204
4205         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4206         generated methods.
4207
4208         * location.cs
4209         (CompilationUnit): New public class; derives from `SourceFile'.
4210         (SourceFileEntry.DefineSymbolInfo): New public method.
4211         (SourceFileEntry.SetChecksum): New public method.
4212         (Location): Encode hidden line numbers by using `column == 255';
4213         the .ctor now accepts `column == -1' to mark a hidden line number.
4214         (Location.Hidden): New public property.
4215         (Location.CheckPoint): Add `CompilationUnit'.
4216         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4217         (Location.Push): Add `CompilationUnit compile_unit' argument.
4218         (Location.CompilationUnit): New public property.
4219
4220         * statement.cs
4221         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4222
4223         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4224
4225         * driver.cs: `SourceFile' -> `CompilationUnit'.
4226
4227         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4228
4229         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4230
4231         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4232         `#line hidden'.
4233
4234         * symbolwriter.cs
4235         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4236         new symbol writer API to also pass the file.
4237
4238 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4239
4240         * statement.cs: Emit catch variable assignment using variable expression.
4241         
4242 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4243
4244         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4245         with other variable types.
4246
4247 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4248
4249         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4250         GetLength method emit, it breaks resolve rules.
4251         
4252 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4253             Marek Safar  <marek.safar@gmail.com>
4254                         
4255         A fix for bug #395542
4256         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4257         declaration.
4258         
4259 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4260
4261         A fix for bug #395287
4262         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4263
4264 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4265
4266         A fix for bug #395845
4267         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4268         non-nullable parameter type.
4269         
4270 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4271
4272         * class.cs: Handle contructor initializer as a statement in top-level block.
4273
4274 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4275
4276         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4277         security attributes.
4278
4279 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4280
4281         * ecore.cs, expression.cs: Small IVariable refactoring.
4282
4283 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4284
4285         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4286
4287 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4288
4289         * cs-parser.jay: Removed redundant catch type check.
4290
4291 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4292
4293         A fix for bug #390372
4294         * nullable.cs: Set correct return type.
4295
4296 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4297
4298         A fix for bug #391062
4299         * typemanager.cs: Fixed crash when comparing null types.
4300
4301 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4302
4303         A fix for bug #391871
4304         * cs-parser.jay: Better error handling for invalid catch type.
4305
4306 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4307
4308         A fix for bug #392155
4309         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4310
4311 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4312
4313         A fix for bug #390666
4314         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4315         expressions.
4316
4317 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4318
4319         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4320         in getter.
4321
4322 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4323
4324         A fix for bug #389625
4325         * delegate.cs, generic.cs: Some progress on method group return type
4326         inference.
4327
4328 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4329
4330         A fix for bug #378419
4331         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4332
4333 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4334
4335         * class.cs (Constructor): Added IsCompilerGenerated.
4336
4337 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4338
4339         * expression.cs: Enum binary operators can accept non-enum operand only when
4340         is implicitly convertible to underlying type.
4341
4342 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4343
4344         A fix for bug #389272
4345         * support.cs: Workaround System.InvalidOperationException for enums.
4346
4347 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4348
4349         A fix for bug #389073
4350         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4351
4352 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4353
4354         * driver.cs: Split Parse.
4355         
4356         * location.cs (LookupFile): Uses string.Empty.
4357
4358 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4359
4360         * expression.cs, parameter.cs: Small ParameterReference clean up.
4361
4362 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4363
4364         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4365         hack. Fixes #387502.
4366
4367 2008-05-06  Martin Baulig  <martin@ximian.com>
4368
4369         * class.cs (Constructor.Emit): Fix the logic whether to emit
4370         symbol information.
4371
4372 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4373
4374         Fix #385503
4375         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4376         InvalidOperationException when the iterator is before the start or
4377         after the end.
4378
4379 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4380
4381         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4382         when left is nullable type.
4383
4384 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4385
4386         A fix for bug #386628
4387         * expression.cs (LocalVariableReference): Continue in resolving when
4388         variable is not assigned.
4389
4390 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4391
4392         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4393         nullable operations.
4394
4395 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4396
4397         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4398         it saves many redundant temporary variables for nullable operations.
4399
4400 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4401
4402         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4403         
4404         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4405         method.
4406         
4407         * nullable.cs: Constant coalescing operator optimizations.
4408
4409 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4410
4411         * constant.cs: Use unsigned conversion for values which are unsigned only.
4412
4413 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4414
4415         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4416         coalescing operator as it should be.
4417
4418 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4419
4420         A fix for bug #371016
4421         * expression.cs: All predefined delegate operators require implicit method
4422         group conversion.
4423         
4424 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4425
4426         * constant.cs: Emit long constant as uint when fits the range.
4427         
4428         * convert.cs, expression.cs: Fixed few unsafe conversions.
4429
4430 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4431
4432         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4433
4434 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4435
4436         Fix #385758
4437         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4438         'expr'.
4439         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4440
4441 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4442
4443         * constant.cs, literal.cs: IsLiteral property for error reporting.
4444         
4445         * ecore.cs, expression.cs: Implemented Property expression.
4446
4447 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4448
4449         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4450         
4451         * nullable.cs: Implemented nullable coalescing null operator.
4452
4453         * ecore.cs, expression.cs: Expression trees work.
4454
4455 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4456
4457         * ecore.cs: CreateExpressionTree is finally abstract.
4458
4459         * expression.cs, linq.cs: Updated.
4460
4461 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4462
4463         * expression.cs, ecore.cs: Block base access expression inside expression
4464         tree.
4465
4466 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4467
4468         A fix for bug #385058
4469         * expression.cs: User-defined operator implementations always take
4470         precedence over predefined operator implementations.
4471
4472 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4473
4474         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4475         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4476         expression tree conversions.
4477         
4478 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4479
4480         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4481         operators method details to Operator class.
4482
4483 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4484
4485         * anonymous.cs: Pass unsafe flags to anonymous container.
4486         
4487         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4488         inside expression tree.
4489
4490 2008-04-29  Martin Baulig  <martin@ximian.com>
4491
4492         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4493         (Tokenizer.PopPosition): Also restore the `line'.
4494
4495 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4496
4497         * delegate.cs: Implemented Invoke expression.
4498
4499 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4500
4501         * expression.cs: Fixed equality reference comparison regression.
4502
4503 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4504
4505         * ecore.cs: Clean up EmptyCast hack.
4506         
4507         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4508         using correct conversion rules. Also fixes #383993.
4509
4510 2008-04-28  Martin Baulig  <martin@ximian.com>
4511
4512         * class.cs (Constructor.Emit): Don't emit debugging information
4513         for generated default .ctor's.
4514
4515 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4516
4517         * convert.cs: Empty-cast ushort to int conversion.
4518
4519 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4520
4521         A fix for bug #384191
4522         * ecore.cs, expression.cs: Fixed expression cloning.
4523
4524 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4525
4526         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4527
4528 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4529
4530         Fix #381559, test-638.cs, test-639.cs
4531         * assign.cs (CompoundAssign.Helper): New wrapper.
4532         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4533         access.
4534         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4535         Pass unconverted expressions to the params array creation expression.
4536         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4537         (PropertyExpr.EmitAssign): Likewise.
4538         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4539         element if it is of kind CompoundAssign.Helper.
4540         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4541         first before anything else.
4542         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4543         (ArrayAccess.LoadArrayAndArguments): Simplify.
4544
4545 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4546
4547         * expression.cs: Fixed cloning of typeof(void).
4548
4549 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4550
4551         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4552         (Assign.Emit): Likewise.  Move it to ...
4553         (CompoundAssign.DoResolve): ... here and ...
4554         (CompoundAssign.Emit): ... here.
4555         (EventAddOrRemove): New helper to handle += and -= on events, and
4556         avoid the use of BinaryDelegates.
4557         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4558         (EventExpr.EmitAddOrRemove): Improve.
4559         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4560
4561         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4562         create VarExprs for 'foo.bar.var'.
4563         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4564         is a highly inappropriate name for its functionality.
4565
4566 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4567
4568         Simplify handling of multiple assignments
4569         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4570         inheritable-only.
4571         (SimpleAssign): New.  Class to be used for normal assignments.
4572         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4573         * expression.cs, parameter.cs, statement.cs: Likewise.
4574
4575 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4576
4577         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4578         for incompatible underlying types, more to come, uff.
4579
4580 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4581
4582         Fix gtest-388.cs
4583         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4584         Handle 'leave_copy'.
4585
4586 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4587
4588         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4589
4590 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4591
4592         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4593         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4594         * statement.cs (While, Do, For): Allow test to have side effects.
4595         (For.DoEmit): Always emit InitStatement.
4596
4597         Fix test-635.cs
4598         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4599         Always create SideEffectConstant.
4600         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4601         of type EnumConstant.
4602
4603         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4604         Handle 'right' being SideEffectConstant of type 'bool'.
4605
4606         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4607         Use left.EmitBranchable instead of open coding it, so as to
4608         improve optimization opportunities.
4609
4610         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4611
4612         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4613         assumptions.
4614         (Expression.EmitSideEffect): Document.
4615
4616 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4617
4618         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4619
4620 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4621
4622         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4623
4624 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4625
4626         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4627         conversion to expression tree.
4628
4629 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4630
4631         * ecore.cs: Removed unused expression.
4632
4633 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4634
4635         * expression.cs: Implemented NegateChecked and New expressions.
4636
4637 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4638
4639         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4640
4641 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4642
4643         Fix #351102
4644         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4645         needing final 'ret' instruction.
4646
4647 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4648
4649         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4650
4651 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4652
4653         * expression.cs: Emit ldnull and not null expression as an instance argument
4654          of static method expression calls.
4655
4656 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4657
4658         A fix for bug #378200
4659         * expression.cs: Fixed crash when creating parameterless expression tree
4660         method call.
4661
4662 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4663
4664         A fix for bug #375297
4665         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4666         method.
4667
4668 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4669
4670         A fix for bug #377596
4671         * decl.cs, class.cs: Emit delegate type argument attributes.
4672
4673 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4674
4675         A fix for bug #365314
4676         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4677         
4678 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4679
4680         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4681         only.
4682
4683 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4684
4685         * generic.cs (TypeParameter): Removed redundant location.
4686
4687 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4688
4689         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4690         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4691         FullNamedExpression in all declaration type expression, statements will come
4692         later.
4693
4694 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4695
4696         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4697         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4698
4699 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4700
4701         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4702         code.
4703
4704 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4705
4706         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4707         constraints.
4708
4709 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4710
4711         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4712         name expressions.
4713         Also fixes #340463.
4714
4715 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4716
4717         Hook up 'EmitSideEffect'
4718         * constant.cs (Constant.EmitSideEffect): New.
4719         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4720         (SideEffectConstant.EmitSideEffect): New.
4721         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4722         unconditional branch in EmitBranchable.
4723         (FieldExpr.EmitBranchable): New.
4724         * expression.cs (Unary.EmitSideEffect): New.
4725         (Binary.EmitSideEffect): New.
4726         (VariableReference.EmitSideEffect): New.  Do nothing.
4727
4728 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4729
4730         Introduce 'EmitSideEffect'
4731         * ecore.cs (Expression.EmitSideEffect): New.
4732         (TypeCast): Rename from EmptyCast.
4733         (EmptyCast): New.
4734         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4735         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4736         * convert.cs, nullable.cs: Update to changes.
4737
4738 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4739
4740         * class.cs, cs-parser.jay: Early check for base types expression.
4741
4742 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4743
4744         * decl.cs (MemberName): Declare PrettyName as obsolete.
4745
4746 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4747
4748         * namespace.cs: Use MemberName comparison.
4749
4750 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4751
4752         Fix build break
4753         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4754         FullName.
4755         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4756         (MemberName.FullyQualifiedName): New.  Provides the functionality
4757         that users assume FullName would have.
4758         * ecore.cs, namespace.cs: Update to changes.
4759
4760         * statement.cs (Using.assign): Make into ExpressionStatement.
4761         (Using.EmitPreTryBody): Simplify.
4762
4763 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4764
4765         * report.cs: ColorFormat is protected.
4766         
4767         * rootcontext.cs: Unused fields clean-up.
4768         
4769         * namespace.cs: Made UsingEntry name private.
4770
4771 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4772
4773         * cs-tokenizer.cs, location.cs: Removed unused field.
4774
4775 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4776             Raja R Harinath  <harinath@hurrynot.org>
4777
4778         Fix #379822
4779         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4780         (SideEffectConstant.side_effect): Rename from 'right'.
4781         (SideEffectConstant..ctor): Normalize 'side_effect'.
4782         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4783         value of this constant.
4784         * cfold.cs: Update to changes.
4785
4786 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4787
4788         * cs-paser.jay: Removed unused variable.
4789         
4790         * driver.cs: Made Compile instance method.
4791
4792 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4793
4794         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4795
4796 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4797
4798         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4799
4800 2008-04-13  Jb Evain  <jbevain@novell.com>
4801
4802         * namespace.cs: update the System.Core fullname for 2.1
4803         * driver.cs: update the list of required assemblies for 2.1.
4804         Merged from the Moonlight 2 branch.
4805
4806 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4807
4808         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4809         types and user defined operators. User operators arguments has to be checked
4810         for null value before invocation, which also means no operator is called
4811         when any argument is not convertible to unwrapped nullable type.
4812         
4813 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4814
4815         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4816         of Unary expressions to follow operator overloading rules precisely.
4817         Also fixes #321794, #323794
4818         
4819 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4820
4821         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4822         expression.
4823         
4824 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4825
4826         * expression.cs, ecore.cs: Implemented MemberInit expression.
4827         
4828 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4829
4830         Fix mono/tests/exception4.cs
4831         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4832         ec.NeedReturnLabel () rather emitting a 'nop'.
4833
4834         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4835         simple heuristic.
4836         (TryCatch.SomeCodeFollows): Likewise.
4837         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4838         for 'break', 'continue' and 'return' statements inside a try.
4839         We're fairly sure that the generated IL stream will have more
4840         instructions textually following the try.
4841         (FlowBranchingTryCatch): Likewise.
4842
4843         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4844         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4845         overrides.
4846
4847         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4848         wrapper -- forward everything to CollectionForeach.
4849         (CollectionForeach.NonDisposableWrapper): New.
4850         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4851         instead of a pop + branch to end.
4852
4853 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4854
4855         A fix for bug #377485
4856         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4857         Propagate location for extension method groups. Report conversion failure at
4858         right place.
4859
4860 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4861
4862         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4863         ListInit and Field expressions.
4864
4865 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4866
4867         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4868         Since $PC is always -1 inside the body of MoveNext, the fault
4869         handler is a no-op.
4870         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4871         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4872         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4873
4874         The denouement!  Fix #324708
4875         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4876         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4877         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4878         'finally' inside the finally clause.
4879
4880         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4881         inside an iterator.  Don't emit the body of the 'finally' inside
4882         the finally clause yet.
4883
4884         Use the ResumableStatement infrastructure for MoveNext ()
4885         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4886         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4887         'old_resume_points'.  Move dispatcher upfront.
4888         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4889         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4890         in an enumerator.  This encodes the main fix in this patch series
4891         -- we can only jump into the first instruction of a try from the
4892         outside, but we want to emit try/finally regions in iterators and
4893         resume in the middle of them.
4894
4895 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4896
4897         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4898         of NeedReturnLabel here.
4899
4900         Introduce a common point for emitting try/finally to IL
4901         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4902         features of the various subclasses, which are now driven by ...
4903         (ExceptionStatement.EmitPreTryBody): ... this and ...
4904         (ExceptionStatement.EmitTryBody): ... this and the original
4905         EmitFinallyBody.
4906         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4907         Remove DoEmit and update to follow above protocol.
4908
4909         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4910         of the dispatcher are the same, skip emitting the 'switch'.
4911         * iterator.cs (Iterator.EmitDispose): Update to changes.
4912
4913         Clean up handling of 'using' statement
4914         * statement.cs (UsingTemporary): New.  Carved out of ...
4915         (Using): ... this.  Simplify drastically.  Handle exactly
4916         one variable.
4917         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4918         or Using as appropriate.  If there are multiple variable declared,
4919         create nested Using statements.
4920         (resource_acquisition): Kill.
4921
4922         * statement.cs (ExceptionStatement.EmitForDispose): Use
4923         EmitFinallyBody, not EmitFinally.
4924
4925         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4926         * iterator.cs: Update to changes.
4927
4928         Start using the ResumableStatement infrastructure
4929         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4930         (ResumableStatement.EmitForDispose): New.
4931         (ExceptionStatement): Override them.
4932         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4933         EmitForDispose to create the body of the Dispose method.  Don't
4934         use OldResumePoint.
4935
4936         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4937         * statement.cs (Toplevel.AddResumePoint): ... here.
4938         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4939         * flowanalysis.cs (FlowBranchingIterator): New.
4940         * codegen.cs (EmitContext): Update to changes.
4941
4942         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4943         (Iterator.old_resume_points): Rename from 'resume_points'.
4944         (Iterator.MoveNextStatement): Remove unused class.
4945
4946         New infrastructure for try/finally in iterators (still unused)
4947         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4948         (FlowBranchingToplevel.AddResumePoint): Hook into
4949         ToplevelBlock.AddResumePoint.
4950         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4951         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4952         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4953         resume points and assign program-counter values.
4954         (ExceptionBlock.AddResumePoint): Collect resume points for
4955         de-muxer at the top of try block.
4956         * iterators.cs (Yield.CheckContext): Simplify.
4957         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4958
4959 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4960
4961         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4962         argument to an ExitStatement.
4963         (FlowBranchingException): Refactor saved origins code.
4964         * statement.cs (ExitStatement): Update to cahges.
4965         * iterator.cs (YieldBreak): Likewise.
4966
4967         * statement.cs (ResumableStatement): New.  Common base class for
4968         YieldReturn and ExceptionStatement.
4969         (ExitStatement): New.  Common base class for Return and YieldBreak.
4970         (Return): Update to changes.
4971         * iterator.cs (YieldBreak): Likewise.
4972         * lambda.cs (ContextualReturn): Likewise.
4973
4974         Fix #377028
4975         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4976         emit a meaningful error message.
4977
4978         Fix #324765, #319508
4979         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4980         (VariableInfo.SetAssigned): Set it.
4981         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4982         determine if CS0219 or CS0168 is appropriate.  Don't use
4983         flow-analysis information.
4984         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4985         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4986         (EmitContext.EndFlowBranching): ... this.
4987
4988 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4989
4990         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4991
4992 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4993
4994         A fix for bug #376508
4995         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4996         ImplicitConversionExists.
4997
4998 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4999
5000         * expression.cs (Binary): Added remaining binary operators to expression
5001         tree builder.
5002
5003         * nullable.cs: Optimize shift with null argument.
5004
5005 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
5006
5007         Fix minor IL regression
5008         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
5009         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
5010         * cs-parser.jay (try_statement): Update to changes.
5011
5012         * statement.cs (TryFinally.need_exc_block): Delete.
5013         (TryFinally): Update to changes.
5014
5015         Now all ExceptionStatements are unconditional
5016         * statement.cs (CollectionForeach.DisposableWrapper): New.
5017         Extract out the try/finally code into a new wrapper.
5018         (CollectionForeach.Resolve): Use it to simplify the code.
5019
5020 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
5021
5022         Start at simplifying ExceptionStatement semantics a bit
5023         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
5024         * cs-parser.jay (try_statement): Update to changes.
5025         (opt_catch_clauses): Remove.
5026         * flowanalysis.cs: Update to changes.
5027         (FlowBranching.BranchingType.TryCatch): New.
5028         (FlowBranchingTryCatch): New.
5029
5030         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
5031         (FlowBranching.CreateBranching): Update to changes.
5032         (FlowBranchingBlock.AddSibling): Add sanity check.
5033         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
5034         Update to changes.
5035
5036         * iterators.cs (Iterator.MarkFinally): Remove.
5037         * statement.cs (ExceptionStatement): Update to changes.
5038
5039         Add support for skipping over finally blocks at runtime.  First
5040         in a series to fix #324708
5041         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
5042         (Iterator.EmitMoveNext): Initialize it.
5043         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
5044         branch over the body of the 'finally' clause.
5045
5046 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
5047
5048         Avoid lopsided use of Foo/DoFoo names
5049         * statement.cs (ExpressionStatement.EmitFinallyBody):
5050         Rename from EmitFinally.
5051         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
5052         * iterator.cs: Update to changes.
5053
5054 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5055
5056         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
5057         based on UserOperatorCall. More binary nullable operators clean up.
5058
5059 2008-04-02  Martin Baulig  <martin@ximian.com>
5060
5061         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
5062
5063 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5064
5065         * nullable.cs: Merge user and empty conversions when lifting expression
5066         trees.
5067         
5068         * expression.cs (StringConcat): Implemented expression tree representation.
5069
5070 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5071
5072         * nullable.cs: When lifting null literal and a user operator exists, no call 
5073         is made.
5074         
5075 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5076
5077         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
5078         null.
5079
5080 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5081
5082         * nullable.cs, expression.cs: Use namespace instead heavily nested
5083         monster abstract class.
5084
5085 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5086
5087         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
5088         lifting of null literal and user operators. Clean up of some temporary
5089         nullable hacks.
5090
5091 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
5092
5093         Fix #368224, test-629.cs
5094         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
5095         if it crossed an unwind-protect boundary.
5096         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
5097         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
5098         inside an unwind-protected region.
5099         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
5100         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
5101         'leave' instead of a 'br' if unwind-protected.
5102         (Iterator.EmitYieldBreak): Likewise.
5103
5104 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
5105
5106         * driver.cs: Only define versioninfo resources if no win32 resource
5107         file was specified.
5108
5109 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5110
5111         A fix for bug #372375
5112         * convert.cs: Fixed boxing of nullable types.
5113
5114 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5115
5116         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
5117         type.
5118
5119 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5120
5121         A fix for bug #374619
5122         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
5123         
5124 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5125
5126         * lambda.cs: Check return type only for invocation.
5127         
5128 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5129
5130         A fix for bug #374214
5131         * ecore.cs: Correctly report argument type mismatch.
5132
5133 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5134
5135         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
5136         and not rely on broken IsEnum.
5137
5138 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5139
5140         * nullable.cs: New file, extracted from generic.cs.
5141         
5142         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
5143
5144 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5145
5146         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
5147         predefined comparison operators and null literals.
5148         
5149         * report.cs: New warning ID.
5150         
5151 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5152
5153         A fix for bug #370577
5154         * lambda.cs: Check return type too.
5155
5156 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5157
5158         A fix for bug #372846
5159         * class.cs: Automatic properties can be declared as unsafe.
5160
5161 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5162
5163         * location.cs: Use string based concatenation.
5164         
5165         * expression.cs: LiftedBinaryOperator is gmcs only.
5166         
5167 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5168
5169         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
5170         conversions rules and expression trees.
5171
5172 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5173
5174         * delegate.cs: Use extension method source as delegate target.
5175
5176 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5177
5178         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
5179         binary operations to be purely based on binary operations and optimized
5180         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
5181         and other ET refactoring.
5182         
5183         * typemanager.cs: Fixed warning.
5184         
5185 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5186
5187         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5188         
5189         * symbolwriter.cs: Fixed.
5190
5191 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5192
5193         * anonymous.cs, driver.cs: Reset anonymous types counters.
5194
5195 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5196
5197         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5198         
5199         * class.cs: Use fullname for all type member definitions.
5200         
5201 2008-02-19  Martin Baulig  <martin@ximian.com>
5202
5203         * class.cs
5204         (IMethodData.EmitExtraSymbolInfo): New interface method.
5205         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5206         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5207         interface method here as an empty public virtual method.
5208
5209         * anonymous.cs
5210         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5211         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5212         CodeGen.SymbolWriter.SetRealMethodName().       
5213
5214 2008-02-18  Martin Baulig  <martin@ximian.com>
5215
5216         * anonymous.cs
5217         (ScopeInfo.EmitType): Override this and emit debugging
5218         information for captured variables.
5219         (RootScopeInfo.EmitType): Override this and emit symbol
5220         information for a captured `this'.
5221
5222 2008-02-15  Martin Baulig  <martin@ximian.com>
5223
5224         * iterators.cs: Emit debugging info.
5225
5226         * codegen.cs
5227         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5228         (EmitContext.OmitDebuggingInfo): New public property.
5229
5230         * statement.cs
5231         (While): Override Emit() and don't emit symbol info there; do it
5232         inside DoEmit() instead.
5233         (Block.Emit): Omit symbol information while emitting the scope
5234         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5235         block logic.
5236         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5237         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5238         .ctor to make `IsIterator' work.
5239
5240 2008-03-14  Martin Baulig  <martin@ximian.com>
5241
5242         * symbolwriter.cs: Added the new symbol writer function from the
5243         debugger's `terrania' branch; temporarily enclose them inside
5244         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5245         my vacations.
5246
5247 2008-03-14  Martin Baulig  <martin@ximian.com>
5248
5249         * symbolwriter.cs
5250         (SymbolWriter): Make this a public static class.
5251
5252         * codegen.cs
5253         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5254         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5255
5256 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5257
5258         A fix for bug #370577
5259         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5260         return type.
5261         
5262 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5263
5264         * typemanager.cs (CSharpName): Made 250 times faster.
5265
5266 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5267
5268         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5269         
5270 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5271
5272         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5273         crash when predefined field does not exist.
5274         
5275 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5276
5277         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5278         
5279 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5280
5281         * class.cs (FixedField): Don't crash when contructors are missing.
5282
5283 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5284
5285         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5286         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5287         check internal types accessibility for internal and external types.
5288         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5289
5290 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5291
5292         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5293         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5294         attribute.cs, statement: Use corect instance of predefined types (work
5295         related to #364674).
5296
5297 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5298
5299         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5300         
5301 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5302
5303         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5304         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5305         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5306         predefined types clean up, delayed predefined types members initialization
5307         (work related to #364674).
5308
5309 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5310
5311         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5312         
5313 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5314
5315         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5316         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5317         predefined types clean up (work related to #364674).
5318
5319 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5320
5321         * ecore.cs: Print an error message instead of throwing exception.
5322         
5323 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5324
5325         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5326         expression.cs, statement.cs: Unififed null literal representation.
5327
5328 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5329
5330         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5331         expression.cs: Refactored binary operators resolve phase and improved speed.
5332         The nullable code is still missing and won't work correctly, more fixes
5333         required.
5334
5335         It also fixes #323726, #324312, #324248, and many other unreported issues.
5336
5337 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5338
5339         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5340         instead of 'gmcs'.
5341
5342 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5343
5344         * ecore.cs: Clean-up and split BetterConversion.
5345         
5346 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5347
5348         Fix #363791
5349         * enum.cs (EnumMember.Value): Only access 'value' if
5350         ResolveValue says it's ok.
5351         (EnumMember.DoResolveValue): Don't set prev_member.value.
5352         (Enum.GetDefinition): Reverse arguments of Equals --
5353         EnumMember.Value can return 'null'.
5354
5355         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5356
5357 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5358
5359         * generic.cs, expression.cs: More ongoing work on expression trees.
5360         
5361 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5362
5363         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5364         handle missing matches when mutiple operators exist.
5365         
5366 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5367
5368         A fix for bug #363218
5369         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5370         initializers.
5371         
5372 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5373
5374         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5375         update. This time to deal correctly with SideEffectConstant expression used
5376         as an argument for another constant folding.
5377
5378 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5379
5380         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5381         MethodBuilder.
5382
5383 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5384
5385         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5386
5387 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5388
5389         A fix for bug #328136
5390         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5391         side is a false constant, because we still need to evaluate the right-hand
5392         side.
5393
5394         * statement.cs (If): Emit two types of boolean constants (simple constant,
5395         side-effect constant).
5396
5397 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5398
5399         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5400
5401         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5402         constants.
5403
5404 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5405
5406         A fix for bug #361457
5407         * ecore.cs (IsApplicable): Params methods have lower priority.
5408
5409         * support.cs: Return correct parameter modifier for params types.
5410
5411 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5412
5413         * generic.cs (TypeParameter): Cache attribute target name.
5414
5415         * support.cs: Removed unused variable.
5416
5417         * typemanager.cs: Removed debugging leftover.
5418
5419         * ecore.cs: Use local type instead of a property;
5420
5421         * class.cs (VerifyMembers): Consider also parent to test whether type member
5422         is local or public.
5423
5424         * expression.cs (FullMethodDesc): Removed.
5425
5426         * attribute.cs (IsValidArgumentType): Made static.
5427
5428 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5429
5430         Cleanup to be more readable.
5431         * Makefile (GMCS_PROFILE): Remove.
5432         (COMPILER_NAME): New helper.
5433
5434 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5435
5436         * cs-tokenizer.cs: if a conditional expression happens inside a
5437         (...) this also means that we do not need to de-ambiguate between
5438         an parenthesized expression and a cast.
5439
5440         Fixes 346484.
5441
5442         * constant.cs (SideEffectConstant): a constant value that happens
5443         to have a side effect.
5444
5445         Fixes the build regressions introduced by the fix for #359789
5446
5447 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5448
5449         * expression.cs (Conditional.Emit): when emitting the ternary
5450         operator, use local variables to generate code verifiable code.
5451
5452         The verifier cannot infer that the type on stack before the
5453         stloc.0 is executed is of type ParentB. This happens because the
5454         stack merge algorithm uses only parent types when deciding which
5455         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5456         335.
5457
5458         This code compiled with mcs is not verifiable under MS. The MS
5459         verifier picks the first common interface of Foo and Bar, which is
5460         wrong, but doesn't use a full join type of the 2 interfaces.
5461
5462         CSC uses a clever hack to compile such code in a verifiable
5463         way. It stores the intermediate values in a local variable with
5464         the expected type.
5465
5466         Fixes: #358102
5467
5468 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5469
5470         * expression.cs: Do not fold BitwiseAnd operators when the left
5471         side is a false constant, because we still need to evaluate the
5472         right-hand side.
5473
5474         Fixes #359789
5475
5476         * support.cs: Instead of throwing an InternalErrorException when
5477         the position of the stream is outside the boundary of our buffer,
5478         reset the state of the reader, and restart the reading from the
5479         beginning of the file.
5480
5481 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5482
5483         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5484
5485 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5486
5487         A fix for bug #361686
5488         * decl.cs: A protected types used inside a private class which parents
5489         derives from the protected class are accessible.
5490
5491 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5492
5493         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5494         the parameterless constructor.
5495
5496 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5497
5498         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5499         lookup methods to use standard member cache when doing member lookup.
5500
5501 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5502
5503         * driver.cs: Don't report full path for referenced module as assembly error.
5504
5505 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5506
5507         * Makefile: Fixed `qh' target to work on all machines.
5508
5509         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5510         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5511         and HasElementType with TypeManager implementation.
5512
5513 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5514
5515         A fix for bugs #325134, #359749
5516         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5517         first binds point to non-method member expression.
5518
5519 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5520
5521         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5522
5523 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5524
5525         A fix for bugs #321394, #323028
5526         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5527         Reworked naive IsAccessibleAs implementation to handle nested types.
5528
5529 2008-02-05  Jb Evain  <jbevain@novell.com>
5530
5531         * class.cs: use generic type comparison for parameters
5532         as well.
5533
5534 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5535
5536         A fix for bug #325372
5537         * class.cs: Use generic type comparison when testing method signatures.
5538
5539 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5540
5541         A fix for bug #357047
5542         * ecore.cs: Applied C# 3.0 changes to better conversion.
5543
5544 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5545
5546         A fix for bug #358374
5547         * cs-parser.jay: Correctly set modifiers for all constructor types.
5548
5549 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5550
5551         A fix for bug #355251
5552         * generic.cs: Added base class constraint based type inference.
5553
5554 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5555
5556         A fix for bug #357255
5557         * decl.cs: One more missing visibility check.
5558
5559 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5560
5561         * support.cs: Fixed broken return.
5562
5563 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5564
5565         * report.cs: Correctly reset warnings count after probing.
5566
5567 2008-01-25  Martin Baulig  <martin@ximian.com>
5568
5569         * namespace.cs
5570         (NamespaceEntry.SymbolFileID): Make this work again after
5571         MemberName.ToString() is gone.
5572
5573 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5574
5575         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5576         expressions.
5577
5578 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5579
5580         * generic.cs: Use full implicit conversion for type inference fixing.
5581
5582 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5583
5584         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5585         Fixed user operator conversions.
5586
5587 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5588
5589         * generic.cs: Do nullable type to null comparison optimization during
5590         resolve phase.
5591
5592 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5593
5594         A fix for bug #355163
5595         * generic.cs: Enabled l-value resolve on nullable expressions.
5596
5597 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5598
5599         A fix for bug #353986
5600         * class.cs: Ingore static ctors with parameters for any further checks.
5601
5602 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5603
5604         A fix for bug #354310
5605         * namespace.cs: Removed redundant check.
5606
5607 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5608
5609         A fix for bug #354928
5610         * expression.cs: ElementInitializers can be resolved only once.
5611
5612 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5613
5614         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5615         Condition expressions.
5616
5617 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5618
5619         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5620
5621 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5622
5623         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5624         not allowed.
5625
5626         * generic.cs: Implemented coalesce expression.
5627
5628 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5629
5630         A fix for bug #355145
5631         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5632         expression tree type inference.
5633
5634 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5635
5636         Fix #354663
5637         * expression.cs (Binary.IsUnsignedType): Fix typo.
5638
5639 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5640
5641         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5642
5643 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5644
5645         A fix for bug #355161
5646         * ecore.cs, expression.cs: Wider range of extension method supported
5647         expressions.
5648
5649 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5650
5651         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5652         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5653         bug #354970.
5654
5655 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5656
5657         A fix for bug #355148
5658         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5659
5660 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5661
5662         * expression.cs (CreateExpressionTree): Add support for or and
5663         logical or, and indent following the coding conventions.
5664
5665         * typemanager.cs (LinqExpression): renamed from
5666         ExpressionTreeManager, for a shorter name.
5667
5668         Use TypeManager.CoreLookupType to lookup types from our core
5669         assemblies and turn those into "Type" variables.
5670
5671         Consumers that previously used "Namespace" and "Type" from this
5672         class should instead use the TypeExpression which is a type that
5673         is fully resolved (without involving the regular C# resolution
5674         rules). 
5675
5676         This typically looks like this:
5677
5678         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5679         new MemberAccess (texpr, name, type_arguments, loc)
5680
5681         This avoids the problem in: #355178
5682
5683 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5684
5685         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5686         feature in parser only as we do in other cases.
5687         
5688 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5689
5690         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5691         typemanager.cs: A refactoring of params arguments to reuse existing
5692         expressions (params -> array initializer) to emit params argument instead
5693         of specialized handling.
5694         It was required by expression tree implementation and it has other benefits
5695         as well, we now apply same optimization for params arguments as we do for
5696         array initializers.
5697         
5698 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5699
5700         A fix for bug #353526
5701         * generic.cs: A type inference of params arguments may not required any
5702         temporary array creation.
5703         
5704 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5705
5706         A fix for bug #353534
5707         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5708         supported for delegates only.
5709         
5710 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5711
5712         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5713         type for more than 1 candidates.
5714         
5715 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5716
5717         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5718         expressions.
5719         
5720 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5721
5722         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5723         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5724         operator) expressions. 
5725                 
5726 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5727
5728         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5729         not accessed from the generated IL.
5730
5731 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5732
5733         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5734         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5735         statement.cs: The first expression tree implementation drop, mostly
5736         infrastructure work.
5737
5738 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5739
5740         * ecore.cs (IsNestedChild): Refactored.
5741
5742 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5743
5744         * lambda.cs: Don't use a cast on unknown expression statement.
5745
5746 2008-01-10  Geoff Norton  <gnorton@novell.com>
5747
5748         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5749         arguments
5750
5751 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5752
5753         * doc.cs: Report better /doc crash details.
5754         
5755 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5756
5757         A fix for bug #352536
5758         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5759
5760 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5761
5762         A fix for bug #352287
5763         * ecore.cs, expression.cs: Do `this' access checking in all member access
5764         expressions.
5765         
5766 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5767
5768         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5769         
5770         * report.cs: Reset message stacks.
5771         
5772 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5773
5774         * generic.cs (InferInPhases): Correctly calculate params position.
5775         
5776 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5777
5778         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5779         arguments.
5780
5781 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5782
5783         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5784         
5785         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5786         
5787         * driver.cs: Updated --help option.
5788         
5789 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5790
5791         * generic.cs (InferParamsTypeArguments): Removed.
5792         (InferInPhases): Add params type inference.
5793         (LowerBoundInference): Fixed scoring mechanism.
5794         
5795         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5796         
5797 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5798
5799         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5800         byte array for unsigned "baked" assemblies.
5801
5802 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5803
5804         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5805         array for assemblies that are not strongnamed.
5806
5807 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5808
5809         A fix for bug #351481
5810         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5811         declaring type for nested generic types.
5812         
5813 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5814
5815         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5816         instead of ToString.
5817         
5818 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5819
5820         A fix for bug #351047
5821         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5822         null and structs only when equality and inequality operators are defined
5823         either as an user-operators or predefined operators.
5824         
5825 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5826
5827         A fix for bug #351047
5828         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5829         
5830 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5831
5832         A fix for bug #351257
5833         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5834         
5835 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5836
5837         A fix for bug #351157
5838         * class.cs (Using): Fixed yet another broken cloning.
5839         
5840         (Block): Put back more sensible default value for statements.
5841         
5842 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5843
5844         * codegen.cs: Allow AssemblyVersion with only major version component.
5845         Fixes bug #351055.
5846
5847 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5848
5849         A fix for bug #324654
5850         * class.cs: Use FullName property as member name.
5851
5852 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5853
5854         A fix for bug #342117
5855         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5856         constructor constraint.
5857
5858 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5859
5860         A fix for bug #338273
5861         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5862         only.
5863
5864 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5865
5866         A fix for bug #350839
5867         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5868
5869 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5870
5871         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5872         GHOP:
5873         
5874         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5875
5876         * statement.cs: Changed some Hashtables to use HybridDictionaries
5877         instead. It was observed that some HashTables only contained a few
5878         items in the vast majority of cases. Since HybridDictionary is
5879         more efficient on small sets (<10 elements), "known_variables"
5880         from class ExplicitBlock as well as "labels" and "constants " from
5881         class Block were changed to HybridDictionaries. 
5882
5883         Atsai results: (56216kb->54987kb)
5884
5885         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5886
5887
5888 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5889
5890         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5891         GHOP:
5892         
5893         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5894         
5895         * expression.cs: foreach loop to for loop, saved on allocation of
5896         enumerator (59333kb->59141kb)
5897
5898         * statement.cs. Changed foreach loops to for loops, saved on
5899         allocation of enumerator (59141kb->59006kb)
5900
5901         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5902         when constructed with no specified capacity. This was causing a
5903         few ArrayLists to allocate more memory than they would potentially
5904         need in the Block class and MemberCache class. Setting the
5905         ArrayLists to construct with a capacity of 1 saves some
5906         memory. (56216kb->55585kb)
5907
5908 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5909
5910         A fix for bug #347189 (2nd issue)
5911         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5912         type.
5913
5914 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5915         
5916         * report.cs: Do not use colors if stdout and stderr are not a
5917         terminal.
5918
5919 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5920
5921         A fix for bug #346998
5922         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5923         overloads.
5924
5925 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5926
5927         A fix for bug #343465
5928         * class.cs: Explicit method name for nested types uses dots only.
5929
5930 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5931
5932         A fix for bug #343707
5933         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5934
5935 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5936
5937         * ecore.cs: Report type inference errors only when arguments count matches
5938         parameter count.
5939         
5940         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5941         
5942         * expression.cs, report.cs: New warning.
5943         
5944         * typemanager.cs: Catch anonymous method type too.
5945
5946 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5947
5948         A fix for bug #346379
5949         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5950
5951 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5952
5953         A fix for bug #347359
5954         * expression.cs (Invocation): Don't resolve already resolved expression.
5955
5956 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5957
5958         A fix for bug #347189
5959         * class.cs (FixedField): Use non-dependent code only in the define phase.
5960
5961 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5962
5963         A fix for bug #348076
5964         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5965
5966 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5967
5968         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5969         discovered extension methods.
5970
5971 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5972
5973         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5974         method.
5975
5976 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5977
5978         * report.cs (ErrorMessage): Add support for using colors on
5979         terminals that support it. 
5980
5981 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5982
5983         * ecore.cs: Use information about expanded params for error reporting.
5984
5985 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5986
5987         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5988         and logic for params overloads.
5989         
5990 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5991
5992         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5993         as this is also created from the parser.  Fixes #349034
5994
5995 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5996
5997         * statement.cs (Throw.CloneTo): it is valid to have empty
5998         expressions for throw. 
5999
6000 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6001
6002         * cs-parser.jay: Set delegate constraint parsing region correctly.
6003
6004 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6005
6006         A fix for bug #345467
6007         * typemanager.cs (IsEqual): Compare generic parameters position only.
6008         
6009 2007-11-28  Marek Safar  <marek.safar@gmail.com>
6010
6011         * expression.cs (BaseAccess): Type arguments can be null.
6012
6013 2007-11-27  Raja R Harinath  <harinath@gmail.com>
6014
6015         * statement.cs (Block.Resolve): Ensure flow-branching tree is
6016         consistent even when an error has occured.
6017         (Switch.Resolve): Likewise.
6018
6019 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6020
6021         A fix for bug #334505
6022         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
6023         overrides.
6024         
6025 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6026
6027         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
6028         refactorings required to resolve extension methods correctly when mixing
6029         generics and non-generics members.
6030         
6031 2007-11-20  Marek Safar  <marek.safar@gmail.com>
6032
6033         A fix for bug #342584
6034         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
6035         conversion.
6036         
6037 2007-11-19  Marek Safar  <marek.safar@gmail.com>
6038
6039         A fix for bug #342512
6040         * delegate.cs: Use delegate argument expression when is available. Don't
6041         emit virtual call when class is sealed.
6042         
6043 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6044
6045         A fix for bug #325423
6046         * assign.cs (FieldInitializer): Use resolved expression for emit.
6047         
6048         * class.cs: Print less confusing error message.
6049         
6050 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6051
6052         * cs-tokenizer.cs: Removed GMCS ifdefs.
6053         
6054         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
6055         mcs.
6056         
6057         * cs-parser.jay: Disabled nullable check.
6058         
6059         * generic-mcs: Copied more generic stuff.
6060                 
6061 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6062
6063         * gcs-parser.jay: Merged to cs-parser.jay.
6064         
6065         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
6066         * *.csproj, *.sources: Updated to use only jay parser file.
6067
6068 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6069
6070         * gcs-parser.jay: Added nullable and default expression feature checks.
6071         
6072 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6073
6074         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
6075         it fixes many TODOs and hidden bugs.
6076         
6077         * expression: Removed duplicate error check.
6078
6079 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6080
6081         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
6082         implicitly type local variable only when it is used in a declaration.
6083
6084 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6085
6086         * attribute.cs: Use CS0612 for empty strings.
6087
6088 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6089
6090         * lambda.cs, statement.cs: Contextual return may act as a statement.
6091
6092 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6093
6094         A fix for a regression cause by #324222
6095         * class.cs: Don't report unused even when it implements an interface.
6096         
6097 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6098
6099         A fix for bug #341205
6100         * ecore.cs, expression.cs: Method group expression cannot do static
6101         method access with an instance reference check before overloading takes
6102         a place.
6103         
6104 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6105
6106         A fix for bug #325359
6107         * class.cs: Use predictable name for automatically generated property.
6108         
6109 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6110
6111         A fix for bug #324996
6112         * expression.cs (Is): Handle case where D is nullable and T is not
6113         correctly.
6114         
6115         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
6116         
6117 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6118
6119         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
6120         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
6121         Flush small error reporting changes.
6122         
6123 2007-11-09  Marek Safar  <marek.safar@gmail.com>
6124
6125         A fix for bug #324996
6126         * expression.cs: Rewrote Is expression implementation to work with
6127         generics, nullable types, anonymous method. A const result expression 
6128         uses existing infrastructure instead of custom not fully-featured one.
6129         
6130 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6131
6132         A fix for bug #340202
6133         * class.cs: Consider generics for volatile field.
6134
6135 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6136
6137         A fix for bug #335594
6138         * expression.cs: Use conversion rules when handling string addition.
6139         
6140 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6141
6142         A fix for bug #336651
6143         * expression.cs: Fixed a crash when probing is on.
6144         
6145 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6146
6147         A fix for bug #324242
6148         * covert.cs: Added a conversion from any nullable-type with an 
6149         underlying enum-type to the type System.Enum.
6150         
6151 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6152
6153         A fix for bug #324222
6154         * class.cs: Report all non-used event fields.
6155         
6156 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6157
6158         A fix for bug #325161
6159         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
6160         qualifier for generic types.
6161         
6162 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6163
6164         A fix for bug #322971
6165         * expression.cs, ecore.cs: Added intermediate result value check for
6166         indexers. 
6167         
6168 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6169
6170         A fix for bug #324754
6171         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
6172         when it was requested.
6173
6174 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6175
6176         A fix for bug #325101
6177         * expression.cs: Do type not value comparison for `is' expression.
6178
6179 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6180
6181         A fix for bug #320236
6182         * convert.cs: Don't apply user conversion on underlying target type.
6183
6184 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6185
6186         * expression.cs: Don't use unresolved expression for error reporting.
6187  
6188 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6189
6190         A fix for bugs #337712, #324490
6191         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6192         overloading resolution too.
6193         
6194         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6195         the process consistent and more robust.
6196         
6197         * expression.cs, linq.cs, report.cs: Update.
6198
6199 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6200
6201         A fix for bug #332909
6202         * attribute.cs: Resolve attributes in correct context using error
6203         handling procedure.
6204         
6205         * rootcontext.cs: Define Obsolete attribute members as core members.
6206         
6207 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6208
6209         * statement.cs: Removed unused methods.
6210         
6211 2007-10-31  Wade Berrier  <wberrier@novell.com>
6212
6213         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6214         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6215         during 'make dist')
6216
6217 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6218
6219         A fix for bug #338102
6220         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6221         methods registered as non-generics.
6222         
6223 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6224
6225         A fix for bugs #337712, #324490
6226         * delegate.cs: Delegate covariance and contravariance is not allowed for
6227         value types.
6228         
6229 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6230
6231         A fix for bug #337719 
6232         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6233         `from' keyword.
6234         
6235 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6236  
6237         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6238
6239 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6240  
6241         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6242         query expressions.
6243
6244 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6245
6246         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6247
6248 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6249  
6250         A fix for bug #334652
6251         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6252         extension methods when we have not found the best candidate in normal
6253         container.
6254
6255 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6256
6257         * AssemblyInfo.cs: Keep up-to-date.
6258
6259 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6260
6261         * Makefile: Fixed generics compiler name.
6262         
6263 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6264
6265         * lambda.test: removed, lambda parsing is done differently.
6266         
6267         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6268
6269 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6270
6271         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6272
6273 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6274
6275         * Makefile, *.sources : All C# compilers are in mcs folder.
6276         
6277         * *.cs: Use existing 2_1 define for smcs.
6278
6279 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6280
6281         A fix for bug #335847
6282         * assign.cs, expression.cs: Couple of changes to avoid creating a
6283         temporary variable for each object initializer assignment statement. It
6284         simplifies struct initialization too, otherwise two temporary variables
6285         would be required.
6286         Implemented optimization of redundant default element initializers.
6287         
6288 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6289
6290         A fix for bug #336766
6291         * expression.cs (Class.CheckBase): Use generic name when method is
6292         generic.
6293         
6294 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6295
6296         A fix for bug #334737
6297         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6298         variable and not variable argument for prepared copies.
6299
6300 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6301
6302         A fix for bug #325110
6303         * class.cs, expression.cs, attribute.cs: Use open generic method when
6304         checking conditional attribute.
6305         
6306 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6307
6308         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6309         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6310         FeatureIsNotAvailable.
6311
6312 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6313
6314         ** C# 3.0 Partial methods
6315         
6316         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6317         methods support. Because of member cache issue with generics only
6318         non-generics partial methods are fully supported.
6319         
6320 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6321         
6322         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6323         generics and to use member cache for member checking. It also improves
6324         performance and fixes remaining overloads issues.
6325         
6326 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6327         
6328         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6329         roottypes.cs, typemanager.cs:
6330                 
6331         A member cache creation logic changed to add members immediately and
6332         not rely on fallback. The member cache is now only prefered way
6333         how to access and find type declaration members. It saves 5 MB of memory
6334         during MWF compilation and makes code ready for more optimizations and
6335         clean-ups, it's also a pre-requirement for partial methods.
6336         
6337 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6338
6339         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6340         handling for generic parameters.
6341
6342 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6343         
6344         * class.cs (FixedField): Removed redundant volatile check.
6345         
6346 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6347         
6348         * class.cs, decl.cs: Fixed overload members verification to do only one
6349         check per possible collision.
6350         
6351 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6352         
6353         A fix for bug #325478
6354         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6355         and create only one disposable flags container.
6356         
6357 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6358         
6359         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6360         * statement.cs (Fixed): Fixed variables cloning.
6361         
6362 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6363         
6364         A fix for bug #333342
6365         * class.cs (EventField): Don't mark value type event as synchronized. 
6366         
6367 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6368         
6369         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6370         inference to identify best candidate method correctly.
6371         (ProperyExpr): A range variable is read only and cannot be modified.
6372         
6373 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6374         
6375         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6376         logic to identify best candidate method correctly.
6377         
6378 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6379         
6380         * location.cs (Equals, GetHashCode): Removed.
6381         
6382 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6383         
6384         * report.cs: Implemented message recorder. It is used mainly for lambda
6385         expressions to capture otherwise swallowed error messages.
6386         
6387         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6388
6389         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6390         and not at the top.
6391         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6392                 
6393         * expression.cs (MemberAccess): Always report lookup failure.
6394         
6395         * location.cs: Implemented Equals, GetHashCode.
6396         
6397         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6398         
6399 2007-10-10  Jb Evain  <jbevain@novell.com>
6400
6401         * codegen.cs: re-enable assembly version check.
6402
6403 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6404         
6405         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6406         checks.
6407         
6408         * namespace.cs (UsingAlias): Do correct version check.
6409         
6410 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6411         
6412         * expresison.cs, ecore.cs: Issue extension method error message when
6413         appropriate.
6414         
6415         * rootcontext.cs: Added ISO_2 compiler mode option.
6416
6417 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6418         
6419         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6420          message.
6421         
6422 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6423         
6424         * attribute.cs (GetString, GetBoolean): Work with both literal and
6425         constant.
6426         
6427         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6428         Moved method overload specific methods to MethodGroupExpr.
6429         
6430         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6431         it should be less memory consuming.
6432         
6433 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6434
6435         * codegen.cs: remove the assembly version check until the buildbot is
6436         fixed.
6437
6438 2007-10-07  Jb Evain  <jbevain@novell.com>
6439
6440         * attribute.cs (Attribute.GetString): if the value
6441         expression is a StringConstant, return its string value.
6442
6443 2007-10-07  Jb Evain  <jbevain@novell.com>
6444
6445         * typemanager.cs: add `assembly_version_attribute_type`.
6446         * codegen.cs: on attribute emission, check that the
6447         AssemblyVersionAttribute doesn't overflow.
6448
6449 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6450         
6451         A fix for bug #324677
6452         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6453         parent container of a scope container with currently resolved one. 
6454         
6455 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6456         
6457         A fix for bug #325534
6458         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6459         only.
6460         
6461 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6462         
6463         A fix for bug #327504
6464         * class.cs (Operator.Define): Refactored implicit and explicit user
6465         operator conversion rules.
6466         
6467 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6468         
6469         A fix for bug #327520
6470         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6471         
6472 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6473         
6474         A fix for bug #328022
6475         * class.cs (MethodData.Define): Use correct method to check whether
6476         a method implementents an accessor.
6477         
6478 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6479         
6480         A fix for bug #330069
6481         * statement.cs (Fixed.Resolve): Read the first array element only when
6482         an array is instantiated. 
6483         
6484 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6485         
6486         * expression.cs, assign.cs, generics.cs: Print correct operator when
6487         compound assignment is used.
6488         
6489 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6490         
6491         A fix for bug #325841
6492         * expression.cs (ArrayAccess): Use full argument cloning only for
6493         string compound concatenation.
6494         
6495 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6496         
6497         A fix for bug #328774
6498         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6499         assignment.
6500         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6501         assignment.
6502
6503 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6504
6505         Fix #328490
6506         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6507         Event accessibility checks here.  Remove some bogus code that
6508         accidently made GenericMethods work.
6509         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6510
6511 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6512         
6513         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6514         
6515         * statement.cs (Block): Refactored AddVariable to allow error handling
6516         customization.
6517         
6518         * generic.cs: New stub.
6519         
6520 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6521         
6522         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6523         flag.
6524         
6525 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6526
6527         * class.cs: Use partial container to record whether any partial part
6528         contains static field initializer and therefore default contructor has
6529         to be defined.
6530         
6531 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6532
6533         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6534         mono-list when only one of two partial parts has defined accessibility
6535         modifier.
6536         
6537 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6538
6539         A fix for bug #82845
6540         
6541         * class.cs (TypeContainer): Set correct resolve context for all field
6542         initializers.
6543         
6544 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6545
6546         * assign.cs: Fixed a crash when field is resolved twice with an error.
6547         
6548         * codegen.cs: Changed InFieldInitializer to be flag.
6549         
6550         * anonymous.cs, ecore.cs, expression.cs: Update after
6551         IsInFieldInitializer rename.
6552         
6553         * const.cs: Removed unused parameter.
6554         
6555         * class.cs: Changed the way how we resolve and emit field initializers.
6556         The field initilizers have to have access to contructor block to emit
6557         compiler generated code.
6558
6559 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6560
6561         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6562         generics use TypeContainer instead.
6563         
6564 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6565         
6566         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6567
6568         * lambda.cs (ResolveParameters): Use more powerful
6569         InflateGenericArgument.
6570         
6571         * parameters.cs: Better exception message.
6572                 
6573 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6574
6575         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6576         correct expression block type. 
6577         
6578         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6579         
6580         * expression.cs (Invocation): Extracted method group resolve to
6581         DoResolveOverload.
6582         
6583 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6584
6585         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6586         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6587         
6588         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6589         generic extension methods.
6590
6591 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6592
6593         A fix for bug #82676 (Do I get it right now?)
6594         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6595         object before a standard conversion is applied.
6596         
6597 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6598
6599         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6600         #82676.
6601         
6602 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6603
6604         A fix for bug #82676
6605         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6606         non-generic interface types.
6607         
6608 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6609
6610         A fix for bug #82690
6611         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6612         
6613 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6614
6615         A fix for bug #82571
6616         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6617         modifier for container based methods.
6618         
6619 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6620
6621         A fix for bug #82676
6622         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6623         any interface-type T means to any of interface type T.
6624
6625 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6626
6627         * namespace.cs: We have 2 versions of System.Core assembly.
6628
6629 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6630
6631         A fix for bug #82652
6632         * class.cs (Class.GetClassBases): Compare types and not expressions.
6633
6634 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6635
6636         A fix for bug #82620
6637         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6638         actually never worked before.
6639         (IndexerAccess): Emit prepared arguments before they are modified.
6640         
6641 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6642
6643         A fix for bug #82563
6644         * assign.cs: Revert wrong fix.
6645         
6646         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6647         correctly.
6648         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6649         Instead of ldelema/stdind we have to use temporary variables to handle
6650         cases like String.Concat (params string[]).
6651         
6652 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6653
6654         * class.cs: EmitAttributes to Emit rename.
6655         
6656         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6657         null.
6658         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6659         GetClsCompliantAttributeValue execution.
6660         
6661 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6662
6663         * anonymous.cs: Use shorter type prefix.
6664         
6665         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6666         when exist.
6667         
6668         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6669         variables when probing is on.
6670         
6671         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6672         unresolved variables.
6673         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6674         handle transparent identifiers.
6675         
6676 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6677
6678         * attribute.cs (IsClsCompliant): Add nullable types test.
6679         
6680 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6681
6682         * doc.cs : catch other types of exception than XmlException to
6683           report CS1570. Fixed bug #82565.
6684
6685 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6686
6687         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6688         The number of delegate parameters has to match.
6689         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6690         arrays.
6691
6692 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6693
6694         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6695         to fix problem with private arguments.
6696
6697 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6698
6699         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6700         
6701         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6702         
6703         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6704         empty. Add cloning suport.
6705         
6706         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6707
6708 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6709
6710         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6711         to create EmptyCast. It handles EmptyConstantCast specialization for
6712         constants.
6713         
6714 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6715
6716         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6717         (EmitArrayArgument): One routine for array arguments.
6718         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6719         
6720 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6721
6722         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6723
6724 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6725
6726         * anonymous.cs: MemberLookupFinal update.
6727
6728         * class.cs (ConstructorInitializer): Is expression based.
6729         
6730         * delegate.cs: MethodGroupExpr update.
6731         
6732         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6733         messages.
6734         (Error_MemberLookupFailed): Customizable error override.
6735         (MethodGroupExpr): Keep queried type for later usage.
6736         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6737         resolve.
6738         
6739         * expression.cs: Error_MemberLookupFailed refactoring.
6740         (New.DoResolve): Resolve as much as possible.
6741         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6742         customization for invalid member types.
6743
6744         * statement.cs: MethodGroupExpr update.
6745         
6746 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6747
6748         * modifier.cs (Check): Check all modifiers and not only accessibility
6749         ones.
6750
6751 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6752
6753         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6754         type and not an expression.
6755
6756 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6757
6758         * statement.cs (Catch.Clone): Type and variable can be null.
6759
6760 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6761
6762         A fix for bug #81979
6763         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6764         I am really not sure whether this is the best fix.
6765         
6766         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6767         only once.
6768         
6769 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6770
6771         ** C# 3.0 Object and collection initializers (major re-write)
6772         
6773         * assign.cs (DoResolve): Initializers are not assign related.
6774         
6775         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6776         used during collection or object initialization.
6777         
6778         * expression.cs (Error_InvalidArguments): Add initializers specific
6779         messages. More will come later because it requires some general
6780         refactoring.
6781         (New.DoResolve): Better error handling for unsafe types.
6782         (EmptyExpressionStatement): New class.
6783         (ElementInitializer): An object initializer expression.
6784         (CollectionElementInitializer): A collection initializer expression.
6785         (CollectionOrObjectInitializers): A block of object or collection
6786         initializers.
6787         (NewInitialize): New expression with element/object initializers.
6788         
6789         * statement.cs: Reverted object/collection initializer hacks.
6790         
6791         * typemanager.cs (CSharpName): Filter __arglist type.
6792         
6793 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6794
6795         ** C# 3.0 Anonymous Types (update to the latest standard)
6796         
6797         * expression.cs (Binary.ResolveOperator): Threat all null based types
6798         same.
6799         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6800         (AnonymousTypeParameter): Updated.
6801         
6802         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6803         (AnonymousTypeClass): New anonymous type container.
6804         
6805         * class.cs (AddField): Return operation result.
6806         
6807         * generic.cs: Another empty TypeArguments overload.
6808         
6809         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6810         are stored at top of normal hierarchy.
6811         
6812         * typemanager.cs (CSharpName): Filter anonymous types.
6813         
6814 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6815
6816         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6817         as single Concat call. How could we miss that :-(
6818         
6819 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6820
6821         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6822         
6823 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6824
6825         * expression.cs: Fix the previous commit, the creation of the
6826         arguments array list needs also to be conditional on the arguments
6827         not being null.
6828
6829         * class.cs: Add a little bit of help to help narrow down problems.
6830
6831         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6832         not try to copy in that case. 
6833
6834         * driver.cs: When building SMCS, include a new different set of
6835         default assemblies here.   Do this here so we can control whether
6836         to include the default assemblies with /noconfig.
6837
6838 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6839
6840         A fix for bug #81979
6841         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6842         only.
6843
6844 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6845
6846         A fix for bug #82300
6847
6848         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6849         we are in probing scope.
6850
6851 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6852
6853         A fix for bug #82301
6854
6855         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6856         (Statement.CloneTo): Clone and not map children blocks.
6857
6858 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6859
6860         A fix for bug #82299
6861
6862         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6863         variable too.
6864         
6865         * statement.cs (Statement.CloneTo): Clone variables before statements
6866         to allow remaping of local variables.
6867
6868 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6869
6870         A fix for bug #82296
6871
6872         * anonymous.cs,
6873         * report.cs: Log crash details for future clone problems.
6874         
6875         * statement.cs (Return.Clone): Don't clone non-existent expression.
6876
6877 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6878
6879         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6880         (Class.AddBasesForPart): Move CS0537 check here from ...
6881         * cs-parser.jay (class_declaration): ... here.  Move calling of
6882         'AddBasesForPart' to ...
6883         (class_bases): ... here.
6884         (struct_declaration, interface_declaration): Update to changes.
6885
6886 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6887
6888         A fix for bug #81923
6889
6890         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6891         conversion is allowed.
6892
6893 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6894
6895         A fix for bug #81564
6896
6897         * ecore.cs (EventExpr): Add IsBase handling.
6898
6899         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6900         too.    
6901         
6902 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6903
6904         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6905         * cs-parser.jay: Some whitespace cleanups.
6906         (current_delegate): New.
6907         (type_name): New.
6908         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6909         a dummy code block, and use 'type_name' instead of 'member_name'.
6910         (interface_declaration, class_declaration): Likewise.
6911         (delegate_declaration): Likewise.  Rearrange slightly and use
6912         'current_delegate'.
6913         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6914         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6915
6916 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6917
6918         A fix for bug #82039
6919
6920         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6921         available.
6922
6923         * typemanager.cs (CSharpName): Split to string overload.
6924
6925 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6926
6927         * expression.cs,
6928         * report.cs: Updated warning CS0472.
6929
6930 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6931
6932         A fix for bug #82181
6933         * cs-parser.jay,
6934         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6935
6936 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6937
6938         A fix for bug #82277
6939         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6940
6941 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6942
6943         ** C# 3.0 Type Inference (major bits are working)
6944         
6945         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6946         (.ImplicitStandardConversionExists): Uses compatible.
6947         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6948         (.InferReturnType): New method.
6949         (.Compatible): Refactored.
6950         (.ResolveParameters): Uses factory to create resolved parameters.
6951         (.CompatibleMethod): Add probing mode support.
6952         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6953         clearly distinguish between 2 different operations.
6954         (LambdaMethod): Moved to lambda.cs.
6955         (AnonymousMethod): Removed unused fields and methods.
6956         (AnonymousDelegate): Simplified.
6957         
6958         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6959         
6960         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6961         
6962         * delegate.cs (Delegate): New mehods to reduce code duplication.
6963         (.GetConstructor): New method.
6964         (.GetInvokeMethod): New method.
6965         (DelegateCreation): Updated.
6966         
6967         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6968         does not exist.
6969         (OverloadResolve): Made probing little bit faster.
6970         
6971         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6972         when probing is on.
6973         
6974         * generic.cs (TypeInferenceContext): Dummy implementation.
6975         
6976         * iterators.cs: Updated after Resolve/Define rename.
6977         
6978         * lambda.cs (LambdaExpression)
6979         (.ResolveParameters): Handles both type of arguments and type inference too.
6980         
6981         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6982         (InflateTypes): Updated.
6983         
6984         * support.cs (InflateTypes): Changed signature and updated.
6985         
6986         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6987         (MemberLookup_FindMembers): More MS tricks.
6988         (GetParameterData): Ditto.
6989         (GetDelegateParameters): Uses quick path for dynamic types.
6990         
6991 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6992
6993         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6994         only.
6995
6996 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6997
6998         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6999         syntax.
7000         
7001 2007-07-26  Jb Evain  <jbevain@novell.com>
7002
7003         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
7004         which takes a boolean 'report_errors', similar to the GetMethod.
7005         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
7006         in .net 2.1, do not report errors here.
7007
7008         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
7009         System.Runtime.CompilerServices.RequiredAttributeAttribute and
7010         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
7011         in .net 2.1.
7012
7013         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
7014         of the type InternalsVisibleToAttribute before the first call
7015         to CoreLookupType which is allowed to fail (third boolean parameter
7016         to true). Because, during the resolution for a type that is not
7017         immediately found, we try to check if the type is not defined in
7018         a friend assembly, and to do so, we need the
7019         InternalVisibleToAttribute.
7020
7021 2007-07-23  Miguel de Icaza  <miguel@novell.com>
7022
7023         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
7024         feature that allows structs to be compared against null and inline
7025         the result as true or false.
7026
7027         Notice that the same code is not permitted inside a generic block
7028         of code that would do:
7029
7030         class Foo<T> where T : struct {
7031             bool Eval (T x)
7032             {
7033                  return x == null;
7034             }
7035         }
7036
7037         It is only allowed if the type of T is not bound (no where
7038         clause).   In my opinion, this CSC 2 behavior is broken but people
7039         seem to be using it (IronRuby does, a few bug reports on bugzilla
7040         have it and some people have complained about it).
7041
7042         All of the users that depend on this behavior have code that is
7043         very likely broken. 
7044         
7045         * report.cs (Warning, Error): make these take object arguments,
7046         not strings, as that allows us to take advantage of Format.
7047
7048 2007-07-20  William Holmes  <billholmes54@gmail.com>
7049
7050         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
7051           Left member variable for the Count.
7052         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
7053           MemberName.CountTypeArguments to avoid a NRE. 
7054
7055         This code is contributed under the MIT X11 license
7056
7057 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7058
7059         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
7060
7061 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7062
7063         * doc.cs : generic method arguments are written as ``x while generic
7064           type arguments are `x. Combined with the previous change, fixed bug
7065           #79706.
7066
7067 2007-07-18  Raja R Harinath  <rharinath@novell.com>
7068
7069         Fix #82120
7070         * expression.cs (Binary.ResolveOperator): When converting
7071         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
7072
7073 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7074
7075         * doc.cs : when T: or whatever x: is specified, it does not really
7076           check the doc comment's syntax correctness. Fixed bug #82006.
7077
7078 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7079
7080         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
7081         LambdaExpression better.
7082         
7083         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
7084         
7085         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
7086         
7087         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
7088         as it can be generated.
7089         
7090         * expression.cs (Invocation.Error_InvalidArguments): Show correct
7091         modifiers.
7092         
7093         * lambda.cs (LambdaExpression): Refactored to share same code with
7094         AnonymousMethodExpression.
7095         
7096 2007-07-17  Marek Safar  <marek.safar@gmail.com>
7097
7098         * anonymous.cs (MakeName): Include host name for easier debugging.
7099         (LambdaMethod): New class for lambda spcecific stuff.
7100         
7101         * attribute.cs: Set EmitContext return type.
7102
7103         * class.cs: Set EmitContext return type.
7104         
7105         * codegen.cs (EmitContext): Return type cannot be null to stop messing
7106         with null/void meaning.
7107         
7108         * iterators.cs (ContainerType): Implemented.
7109         
7110         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
7111         
7112         * statement.cs (Return): Updated to lambda expressions.
7113         (Block.CloneTo): Parent can be null.
7114                 
7115 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7116
7117         A fix for bug #81917
7118         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
7119         
7120         * class.cs (FixedField): Check whether field is in unsafe scope.
7121
7122         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
7123         (FieldExpr.Emit): Fixed buffers cannot be volatile.
7124
7125         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
7126         FieldExpr.
7127         
7128         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
7129                 
7130 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7131
7132         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
7133         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
7134         from Report class.
7135
7136 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7137
7138         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
7139         
7140 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7141
7142         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
7143         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
7144         
7145         * codegen.cs(EmitContext): Add ProbingMode flag.
7146         
7147         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
7148         
7149         * driver.cs: For now set both warning values.
7150         
7151         * ecore.cs (SimpleName): Name is readonly.
7152         (MethodGroup.OverloadResolve): One quick path for probing.
7153         
7154         * expression.cs (Unary): Set Oper r/o.
7155         (Binary): Set Oper r/o.
7156         (ParameterReference): Set few instance variables as r/o.
7157         (ParameterReference.DoResolveBase): Don't capture aruments when 
7158         the probing is on.
7159         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
7160         (Arglist): arguments are private.
7161         (SizeOf): type is private and r/o.
7162         (MemberAccess): arguments are private.
7163
7164         * report.cs: Enhanced reporting on/off capabilities.
7165         
7166         * lambda.cs: Uses ec.IsInProbingMode.
7167         (ContextualReturn): Derives from return.
7168         
7169         * rootcontext.cs: For now set both warning values.
7170         
7171         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
7172         copy if one exists.
7173         (Return.Resolve): Don't die immediately.
7174         (Block.Resolve): Speed-up probing.
7175         (Block.CloneTo): Clone only child blocks.
7176
7177 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
7178
7179         * iterators.cs: reverted Miguel's latest change (r81925) as it
7180         breaks the build in System.
7181
7182 2007-07-13  Miguel de Icaza  <miguel@novell.com>
7183
7184         * iterators.cs (Yield.CheckContext): Check for the iterator type
7185         also here as we can call into Yield even in codepaths that are not
7186         directly checked by
7187         (MethodOrOperator is the only path that was checked).
7188
7189         In addition to the standard check, use a more specific check for
7190         constructors to report a more verbose error. 
7191
7192 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7193
7194         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7195         report the warning and continue 
7196
7197         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7198         values on the stack on the call to Emit.   Use EmitStatement if
7199         possible, or using Emit + Pop if not possible.   Fixes #82064
7200
7201 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7202
7203         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7204         avoid try...finally in some cases.
7205
7206 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7207
7208         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7209         
7210         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7211         instead of method. Re-use standard error handling.
7212         (ConstructorInitializer.Emit): Simplified.
7213         
7214         * delegate.cs: Updated after Invocation.EmitCall change.
7215         
7216         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7217         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7218         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7219         method and don't permanently changing input arguments.
7220         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7221         is resolved it has one of the candidates is the best one which is later
7222         used to emit. Removed a few unused method.
7223         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7224
7225         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7226         (Binary.ResolveOperator): Ditto.
7227         (ConditionalLogicalOperator.DoResolve): Ditto.
7228         (Invocation): Uses method group.
7229         (Invocation.DoResolve): Simplified.
7230         (Invocation.EmitCall): Removed useless is_static.
7231         (Invocation.Emit): Delegate to method group.
7232         (Invocation.EmitStatement): Simplified.
7233         (New): Uses method group.
7234         (MemberAccess.DoResolve): Don't destroy original expression.
7235         
7236         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7237         
7238 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7239
7240         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7241         
7242         * anonymous.cs,
7243         * lambda.cs: Add custom error message type.
7244
7245 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7246
7247         * lambda.cs: Simplified little bit.
7248         
7249         * parameter.cs: Introduced ImplicitLambdaParameter.
7250         (Parameters.CreateFullyResolved): New factory instead of ctor.
7251         
7252         * anonymous.cs,
7253         * class.cs,
7254         * delegate.cs: Updated parameter creation.
7255         
7256 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7257
7258         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7259         arguments.
7260         
7261         * generic.cs: Synchronized with gmcs.
7262         
7263 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7264
7265         * class.cs (Indexer): Check return type as soon as possible.
7266         
7267         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7268         members too.
7269         
7270         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7271         
7272         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7273         
7274         * parameter.cs (Parameter): Use expression type when it is available.
7275         
7276         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7277         method modifier for the first parameter only.
7278
7279 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7280
7281         A fix for bug #81938
7282         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7283         
7284         * constant.cs: Tide up an exception message.
7285
7286 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7287
7288         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7289         an uninitialized variable is used.
7290         
7291         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7292
7293 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7294
7295         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7296         not found error handling.
7297
7298         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7299         simplified.
7300         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7301         (ArrayCreation.DoResolve): Simplified.
7302         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7303         its own resolve process.
7304         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7305
7306 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7307
7308         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7309         more error details.
7310         
7311 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7312
7313         * cs-tokenizer.cs: Removed var related stuff.
7314         
7315         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7316         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7317         a type and a keyword at same time.
7318         
7319         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7320         matches to "var".
7321         
7322         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7323         implicitly typed arrays, more changes will follow.
7324         
7325         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7326         
7327 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7328
7329         * ecore.cs (VarExpr): Removed Handled field.
7330         
7331         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7332         build-in assign functionality.
7333         (ForEach.Resolve): Removed all implicitly typed local variable code and
7334         simplified.
7335         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7336         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7337
7338 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7339
7340         * assign.cs: Removed implicitly typed local variable check.
7341         
7342         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7343         referencing implicitly typed local variable.
7344         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7345         variable here.
7346         
7347         * statement.cs (Fixed): Removed unsupported implicitly typed local
7348         variable code.
7349
7350 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7351
7352         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7353
7354 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7355
7356         A fix for bugs #81855 and #76274
7357         * attribute.cs (AttachTo): Always set owner for global attributes to
7358         prefined owner.
7359         
7360         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7361         usefull too.
7362         
7363         * cs-parser.jay: Assembly and module attributes must precede all other
7364         elements except using clauses and extern alias declarations.
7365
7366 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7367
7368         A fix for bug #81748
7369         * cs-tokenizer.cs,
7370         * expression.cs: More checks for non ISO-1 features.
7371
7372 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7373
7374         A fix for bug #81807
7375         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7376         present inside switch statement and it is required by nullable check.
7377
7378 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7379
7380         A fix for bug #81840
7381         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7382         when type matching fails.
7383         
7384         * namespace.cs: Tiny error message change.
7385
7386 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7387
7388         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7389         reporting. Added automatic property check.
7390         
7391         * class.cs: Updated after CheckAbstractAndExtern relocation.
7392         (AEventPropertyAccessor.GetSignatureForError): Customized.
7393         
7394 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7395
7396         * class.cs (DefineBaseTypes): Base type can be undefined.
7397         
7398         * ecore.cs (TypeLookup): Minor refactoring.
7399         (DoResolveAsTypeStep): Removed redundant check.
7400
7401         * namespace.cs (Lookup): Removed redundant check.
7402                 
7403         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7404         ResolveAsTypeTerminal step.
7405         (BootstrapCorlib_*): Simplified.
7406         (PopulateCoreType): Core types can be now external.
7407
7408 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7409
7410         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7411          verification only.
7412          (InferTypeArguments): Infers anonymous expression type arguments.
7413          (Compatible): Split to Compatible and InferTypeArguments. 
7414         
7415         * lambda.cs: Updated.
7416
7417 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7418
7419         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7420
7421 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7422
7423         Fix #80477, cs0135-2.cs, cs0135-3.cs
7424         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7425         names to the "known" variables list.
7426         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7427         parameter names are also "known".
7428         (Block.CheckError136): Remove.
7429         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7430         null.
7431
7432 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7433
7434         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7435
7436 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7437
7438         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7439         internal error not an user error.
7440          
7441         * expression.cs (IsApplicable): Refactored to make debugging easier.
7442
7443         * support.cs: More tricks for non-mono runtimes.
7444         
7445         * typemanager.cs (CoreLookupType): Made public.
7446         (InitSystemCore): All linq specific stuff moved to linq.cs
7447
7448 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7449
7450         * typemanager.cs (CSharpSignature): One more missing build-in types
7451         replacement.
7452         More tricks for non-mono runtime.
7453
7454 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7455
7456         * statement.cs (Block.CheckError136_InParents): Remove.
7457         (Block.AddVariable): Use GetParameterInfo instead.
7458         (ToplevelBlock.ProcessArguments): Likewise.
7459
7460 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7461
7462         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7463         information too.
7464         (ToplevelBlock.GetParameterInfo): Split out of ...
7465         (ToplevelBlock.GetParameterRefernce): ... this.
7466         (ToplevelBlock.ParameterMap): Remove.
7467         * expression.cs (ParameterReference): Update to use
7468         ToplevelParameterInfo.
7469
7470         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7471         regression.
7472
7473         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7474         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7475
7476         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7477         (ToplevelBlock.ProcessParameters) ... here.
7478         (ToplevelBlock..ctor): Invoke it.
7479
7480         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7481         new parameters.
7482
7483         * statement.cs (IKnownVariable): New interface.
7484         (LocalInfo): Implement it.
7485         (ToplevelParameterInfo): New class.
7486         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7487         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7488         GetKnownVariableInfo.
7489
7490 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7491
7492         Partly speed up CS0136 error checks.
7493         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7494         'recurse' parameter.
7495         (Block.DoCheckError136): Only check errors in parameters.  Move
7496         local variable checks ...
7497         (Block.AddVariable): ... here, and ...
7498         (ToplevelBlock.ResolveMeta): ... here.
7499
7500 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7501
7502         * statement.cs (Block.IsChildOf): Remove.
7503
7504         * statement.cs (Statement.Clone): Move special case code ...
7505         (Block.CloneTo): ... here.
7506
7507 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7508
7509         * statement.cs (ToplevelBlock.container): Remove field.  It's
7510         redundant with 'Parent'.
7511         (ToplevelBlock.ContainerBlock): Remove accessor.
7512         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7513         child with parent here, ...
7514         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7515         current_block.
7516         (start_anonymous): Don't save current_block.
7517         (top_current_block): Remove.
7518
7519         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7520         (Block.Resolve): Update to changes.
7521         (Block..ctor): Move setting of "correct" 'Toplevel'
7522         and 'Explicit' fields to ...
7523         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7524
7525 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7526
7527         Kill Block.Implicit
7528         * statement.cs (Block.Implicit): Remove.
7529         (Block): Update to changes.
7530         * flowanalysis.cs: Likewise.
7531
7532         Mildly speed up CheckInvariantMeaningInBlock
7533         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7534         Recursively call AddKnownVariable to all enclosing blocks.
7535         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7536         Remove recursive calls.
7537         (Block): Update to changes.
7538
7539         New ExplicitBlock invariants
7540         * statement.cs (Block.Explicit): New field.  It points to the
7541         immediately enclosing non-implicit block.
7542         (Block..ctor): Maintain the invariant.
7543         * cs-parser.jay: Take advantage of invariant.
7544
7545         Introduce ExplicitBlock
7546         * statement.cs (ExplicitBlock): New.
7547         (ToplevelBlock): Derive from it.
7548         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7549         sense of flag.
7550         (Block.Implicit): Update to changes.
7551         * cs-parser.jay: Update to changes.
7552
7553         Remove unused field
7554         * codegen.cs (EmitContext.IsLastStatement): Remove.
7555         * statement.cs (Block.DoEmit): Update to changes.
7556
7557 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7558
7559         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7560         modifying current_block directly.
7561
7562 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7563         
7564         * class.cs: Implemented automatic properties (C# 3.0)
7565           Thanks to Marek for the help.
7566
7567 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7568
7569         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7570         variable as assigned, note also that all its components are
7571         assigned too.
7572         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7573
7574 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7575
7576         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7577         member is marked as compiler generated.
7578         
7579         * decl.cs (MemberCore): Refactored ModFlags into property.
7580
7581         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7582         (Check): Check only accessibility modifiers.
7583
7584 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7585
7586         Track all assignable slots in one bit array
7587         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7588         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7589         logic from VariableMap constructor here.  Use the same 'offset'
7590         variable that's later used for computing offsets of local
7591         variables.
7592         * flowanalysis.cs (UsageVector.parameters): Remove.
7593         (UsageVector): Update to changes.
7594         (VariableMap): Remove.
7595
7596         Avoid creating ParameterMap in every block
7597         * statement.cs (Block.ParameterMap): Move ...
7598         (ToplevelBlock.ParameterMap): ... here.
7599         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7600         only once.
7601         * flowanalysis.cs (FlowBranching.param_map): Remove.
7602         (FlowBranching.UsageVector): Update to changes.
7603         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7604
7605         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7606
7607         * expression.cs (ParameterReference): Distinguish between block
7608         where parameter was referenced and declared.
7609
7610 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7611
7612         * flowanalysis.cs, statement.cs: Put back improved error handling.
7613
7614 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7615         
7616         * assign.cs:
7617         * expression.cs:
7618           Imporved object and collection initialization (C# 3.0).
7619
7620 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7621
7622         A fix for bug #81380
7623         * expression.cs (Is.DoResolve): Only value types have constant `is'
7624         behaviour.
7625
7626 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7627
7628         * statement.cs (ToplevelBlock.child): Remove.
7629
7630 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7631
7632         Rationalize ResolveMeta: refactoring
7633         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7634         out constant handling code into ...
7635         (Block.DoResolveConstants): ... this.
7636
7637         Rationalize ResolveMeta: kill local_map
7638         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7639         (Block.AssignableSlots): New.
7640         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7641         for locals -- move code from VariableMap here.  Avoid unnecessary
7642         allocations.
7643         * flowanalysis.cs (FlowBranching.local_map): Remove.
7644         (FlowBranching..ctor): Use Block.AssignableSlots.
7645         (VariableMap): Remove unused constructors.
7646
7647 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7648
7649         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7650
7651 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7652
7653         * typemanager.cs (IsFriendAssembly): Should not be called for building
7654         assembly.
7655
7656 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7657
7658         * literal.cs (NullConstant): Print null in all cases.
7659         
7660         * expression.cs (Binary.ResolveOperator): Implemented delegate
7661          comparison based on C# 2.0 changes.
7662
7663 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7664
7665         This code is contributed under the MIT X11 license
7666         
7667         The following enables support for several C# 3.0 language features:
7668         
7669         * cs-tokenizer.cs: Added support for the "var" keyword.
7670         
7671         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7672           Added VarExpr class to facilitate type inferencing.
7673         
7674         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7675           to support anonymous types.
7676         
7677         * assign.cs: Added support for type inferencing and initialization.
7678         
7679         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7680         
7681         * expression.cs: Added implicit array support to ArrayCreation.
7682           Added 5 types and 1 interface:
7683           
7684           IInitializable                Implementing classes can inject initializing
7685                                         statements after object instantiation.
7686           
7687           Initializer                   Stores data for object initialization.
7688           
7689           AnonymousType                 An expression for anonymous types.
7690           
7691           AnonymousTypeParameter        Stores data about an anonymous type's field.
7692           
7693           NewInitialize                 An expression for object initialization.
7694           
7695           CollectionInitialize          An expression for collection initialization.
7696         
7697         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7698           statements.
7699
7700 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7701
7702         A fix for bug #81500
7703         * cs-tokenizer.cs: Add special handling for coalescing operator.
7704
7705 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7706
7707         A fix for bug #81529
7708         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7709         its value from base class until it is redefined.
7710
7711 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7712
7713         Fix regression in cs0631-3.cs
7714         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7715         fallback.  Make error fallback catch more cases.
7716
7717 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7718
7719         * cs-parser.jay: Allow parameters in operator declarations to have
7720         attributes. 
7721
7722 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7723
7724         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7725         exists. 
7726
7727         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7728         inside the ContextualReturn, it does not have to be an
7729         ExpressionStatement. 
7730
7731 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7732
7733         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7734         set, set it.
7735
7736 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7737
7738         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7739         method in two methods: ResolveNoDefine and Resolve.
7740
7741         ResolveNoDefine will stop just after ResolveTopBlock has been
7742         called.   
7743
7744         Resolve will then continue by creating a method and issuing the
7745         call to method.Define ().
7746
7747         (AnonymousMethod): Split and implement the new Resolve and
7748         ResolveNoDefine as well.
7749
7750         * lambda.cs (LambdaExpression): Split the anonymous method
7751         resolution code into a separate routine (CoreCompatibilityTest)
7752         from DoCompatibleTest.
7753
7754         (LambdaExpression.TryBuild): New method, this method tries to
7755         build the LambdaExpression with the given set of types to be used
7756         as the types for the various parameters of the lambda expression. 
7757
7758         If the compilation succeed with the given types, the infered type
7759         of the Anonymous method is returned, otherwise null is returned.
7760
7761 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7762
7763         A fix for bug #81414
7764         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7765
7766 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7767
7768         * cs-tokenizer.cs: Change various identifiers here from the
7769         camelCasing to the recommended Linux-like style for instance
7770         variables from the Coding Guidelines. 
7771
7772 2007-04-19  Martin Baulig  <martin@ximian.com>
7773
7774         * convert.cs
7775         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7776         System.Enum to System.ValueType.
7777
7778 2007-04-13  Martin Baulig  <martin@ximian.com>
7779
7780         Rewrote implicit reference conversions.  We need to distinguish
7781         between implicit reference conversions (13.1.4) and implicit
7782         boxing conversions (13.1.5).
7783
7784         According to the spec, there's an an implicit conversion
7785         "From a one-dimensional array-type S[] to IList<T> and base
7786         interfaces of this interface, provided there is an implicit
7787         reference conversion from S to T."  Note that this does not
7788         include boxing conversions.
7789
7790         * convert.cs
7791         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7792         (Convert.ImplicitReferenceConversion): Split into
7793         ImplicitReferenceConversionCore() and
7794         ImplicitBoxingConversionExist().
7795         (Convert.ImplicitReferenceConversionExists): Use the new
7796         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7797
7798 2007-04-12  Martin Baulig  <martin@ximian.com>
7799
7800         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7801         `TypeManager.null_type' checks up to the top of the method.
7802
7803 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7804
7805         A fix for bug #81350
7806         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7807         extension methods.
7808
7809 2007-04-11  Martin Baulig  <martin@ximian.com>
7810
7811         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7812         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7813         to make this work for generic classes; fixes #79561.
7814
7815 2007-04-11  Martin Baulig  <martin@ximian.com>
7816
7817         * expression.cs (As): Add support for nullable types; fixes #79371.
7818
7819 2007-04-11  Martin Baulig  <martin@ximian.com>
7820
7821         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7822         `type.FullName' is null; fixes #80243.
7823
7824 2007-04-11  Martin Baulig  <martin@ximian.com>
7825
7826         * expression.cs (Invocation.IsApplicable): Don't modify the method
7827         if type inference succeeded, but the method was not applicable.
7828         Fixes #81250.
7829
7830 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7831
7832         A fix for bug #81324
7833         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7834         internal and external namespaces containers.
7835
7836 2007-04-10  Martin Baulig  <martin@ximian.com>
7837
7838         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7839         TypeManager.DropGenericMethodArguments() so we also call
7840         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7841
7842 2007-04-10  Martin Baulig  <martin@ximian.com>
7843
7844         * iterators.cs (Iterator.CreateIterator): Don't crash if
7845         `method.ReturnType' is null.  This happens if something went wrong
7846         while resolving that typ (we already reported an error in this case).
7847
7848 2007-04-10  Martin Baulig  <martin@ximian.com>
7849
7850         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7851         generic interfaces; report the CS0144 directly.
7852
7853 2007-04-10  Martin Baulig  <martin@ximian.com>
7854
7855         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7856         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7857
7858 2007-04-10  Martin Baulig  <martin@ximian.com>
7859
7860         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7861
7862 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7863
7864         A better fix
7865         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7866         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7867
7868         Fix #81338
7869         * statement.cs (For.Resolve): If resolution fails, use
7870         KillFlowBranching.
7871
7872 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7873
7874         * anonymous.cs (MakeName): Make faster and zero-based.
7875         (VerifyExplicitParameterCompatibility): Back to mode where generic
7876         parameter is ignored.
7877         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7878
7879         * class.cs (EmitType): Method can emit another new method.
7880
7881         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7882
7883         * driver.cs: Updated.
7884
7885         * lambda.cs: Reuse predefined empty parameters.
7886
7887         * parameter.cs: Updated
7888
7889         * support.cs: Implemented InflateTypes.
7890
7891         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7892         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7893
7894 2007-04-03  Martin Baulig  <martin@ximian.com>
7895
7896         Fix #80632.
7897
7898         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7899         version of TypeManager.IsOverride() which also works with generic
7900         types.  
7901
7902 2007-04-03  Martin Baulig  <martin@ximian.com>
7903
7904         Fix #81044.
7905
7906         * convert.cs
7907         (Convert.ExplicitReferenceConversion): We need to cast when
7908         converting from IList<T> to S[].
7909
7910 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7911
7912         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7913         at this level.
7914         
7915         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7916
7917 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7918
7919         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7920         argument and return type inferring.
7921
7922         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7923         (ReturnType): Turned to property.
7924
7925         * statement.cs (Return): Implemented return type inferring.
7926
7927         * support.cs (ReflectionParameters): Use local types if possible.
7928
7929 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7930
7931         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7932         (FlowBranching.UsageVector): Update to changes.
7933
7934         Prepare to kill 'Reachability'
7935         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7936         argument of constructor.
7937
7938 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7939
7940         Prepare to kill 'Reachability'
7941         * flowanalysis.cs (UsageVector.is_unreachable): New.
7942         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7943         'reachability', and verify they're consistent.
7944
7945         Fix #81121
7946         * expression.cs (New.EmitStatement): Handle type parameters here too.
7947
7948 2007-03-29  Martin Baulig  <martin@ximian.com>
7949
7950         Fix #79148.
7951
7952         * anonymous.cs
7953         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7954         CompilerGeneratedClass.
7955         (ScopeInfo.EmitScopeInstance): Make this protected.
7956         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7957         `ec.CurrentAnonymousMethod.Scope == Scope'.
7958
7959         * statement.cs (Block.ScopeInfo): Make this a property.
7960
7961 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7962
7963         Prepare to kill 'Reachability'
7964         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7965         (FlowBranching.UsageVector.Reachability): Remove property.
7966         (FlowBranching.UsageVector.IsUnreachable): New property.
7967         (FlowBranching.UsageVector.ResetBarrier): New.
7968         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7969         * codegen.cs, statement.cs: Update to changes.
7970
7971 2007-03-27  Martin Baulig  <martin@ximian.com>
7972
7973         Fix #81209.
7974
7975         * decl.cs
7976         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7977         generic types.
7978
7979 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7980
7981         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7982         instead of TriState.  Remove all mention of TriState.
7983
7984         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7985         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7986         and maintain invariants.
7987
7988 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7989
7990         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7991
7992 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7993
7994         * expression.cs: Stop using obsolete 2.0 opcodes.
7995
7996 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7997
7998         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7999         one of the latests Martin's fixes.
8000
8001 2007-03-23  Miguel de Icaza  <miguel@novell.com>
8002
8003         * expression.cs: On BigEndian systems, swap the bytes, temporary
8004         solution until we get a new bitconverter class.
8005
8006 2007-03-23  Martin Baulig  <martin@ximian.com>
8007
8008         Fix #81158.
8009
8010         * decl.cs (MemberCache.AddMembers): Add generic methods both as
8011         "Method" and "Method`1".  Normally, a cache lookup is done on the
8012         "Method" form (ie. without the generic arity), but this one makes
8013         lookups on the full form work as well.
8014
8015 2007-03-22  Raja R Harinath  <rharinath@novell.com>
8016
8017         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
8018         unused properties.
8019
8020 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
8021         * class.cs: 
8022         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
8023         ordered_member_list, to TypeBuilder to store members to be defined
8024         in the order they were parsed in.
8025         - ordered_explicit_member_list contains all properties indexers
8026           and methods that are defined as explicit implementation of an
8027           interface or base class.
8028         - ordered_member_list contains all properties indexers and methods
8029           that are not defined as explicit implementation of an interface
8030           or base class.
8031
8032         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
8033         functionality in these removed classes has been replaced with 
8034         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
8035         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
8036
8037         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
8038         to CheckForDuplications inside GetMethod and SetMethod Define Method
8039         to handle method property and indexer name conflicts.
8040
8041         Fixes #79434
8042
8043         All code is contributed under the MIT/X11 license.
8044
8045 2007-03-20  Martin Baulig  <martin@ximian.com>
8046
8047         * class.cs (TypeContainer.Interfaces): Removed; they're now
8048         included in `TypeContainer.Types'.
8049
8050 2007-03-20  Martin Baulig  <martin@ximian.com>
8051
8052         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
8053
8054         * class.cs (TypeContainer.CreateType): New public method.  This is
8055         now called before DefineType() to create the TypeBuilders.
8056         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
8057         has already been created by CreateType().
8058         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
8059         don't resolve our base classes here; this has been moved into
8060         DefineBaseTypes().  We're now called from CreateType().
8061         (TypeContainer.DefineBaseTypes): New private method; resolve our
8062         base classes here.  We're now called from DefineType().
8063
8064         * rootcontext.cs
8065         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
8066         our types first to create all the TypeBuilders.  After that, call
8067         TypeContainer.DefineType() on all the types which'll resolve their
8068         base classes and setup the resolve order.
8069
8070 2007-03-20  Martin Baulig  <martin@ximian.com>
8071
8072         * class.cs (TypeContainer.Enums): Removed; they're now included in
8073         `TypeContainer.Types'.  
8074
8075 2007-03-20  Martin Baulig  <martin@ximian.com>
8076
8077         * class.cs
8078         (TypeContainer.DefineType): Don't call ResolveMembers() here.
8079         (TypeContainer.DoResolveMembers): Call DefineType() on our
8080         `compiler_generated' classes; moved here from DefineNestedTypes().
8081
8082         * rootcontext.cs
8083         (RootContext.ResolveTree): Call ResolveMembers() on all
8084         TypeContainer's in the `type_container_resolve_order'.
8085
8086 2007-03-19  Marek Safar  <marek.safar@gmail.com>
8087
8088         * class.cs: Use corlib to handle InternalMethodImplAttribute.
8089
8090 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8091
8092         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
8093         implementation flags.
8094
8095 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8096
8097         * class.cs: More optimizations for type parameters.
8098
8099 2007-03-15  Marek Safar  <marek.safar@gmail.com>
8100
8101         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
8102
8103         * ecore.cs, parameter.cs: More common code for both corlibs.
8104
8105         * typemanager.cs (IsGenericMethod): Simplified.
8106
8107 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8108
8109         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8110         'returns'.
8111         * statement.cs, iterators.cs, lambda.cs: Update to changes.
8112
8113         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
8114         unconditionally.  Simplify explanation.
8115         (Try.Resolve, Using.Resolve): Likewise.
8116
8117 2007-03-15  Martin Baulig  <martin@ximian.com>
8118
8119         Fix #80731.
8120
8121         * decl.cs (DeclSpace): If we're a partial class, use our
8122         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
8123
8124 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8125
8126         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8127         'throws'.
8128         (FlowBranching.UsageVector): Update to changes.
8129         (FlowBranching.MergeSiblings): Likewise.
8130         * statement.cs: Likewise.
8131
8132 2007-03-15  Martin Baulig  <martin@ximian.com>
8133
8134         Fix #79302.
8135
8136         * decl.cs
8137         (MemberCache): Added a special .ctor for type parameters.
8138
8139         * typemanager.cs
8140         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
8141         `MemberCache'.  
8142
8143 2007-03-09  Martin Baulig  <martin@ximian.com>
8144
8145         * enum.cs (Enum): Make this a TypeContainer.
8146         (EnumMember): Derive from `Const'.
8147
8148         * const.cs
8149         (Const.DoResolveValue): New protected virtual method; move most of
8150         the functionality of ResolveValue() here so we can override it in
8151         `EnumMember'.
8152         (Const.CreateConstantReference): Make this virtual.
8153
8154         * class.cs (Kind): Add `Kind.Enum'.
8155         (TypeContainer.Emit): Don't emit the enums here; they're already
8156         in the `RootContext.typecontainer_resolve_order'.
8157
8158         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
8159         here; they're already in the `typecontainer_resolve_order'.
8160
8161         * ecore.cs (EnumConstant.ConvertImplicitly): Add
8162         TypeManager.DropGenericTypeArguments().
8163
8164         * typemanager.cs
8165         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
8166         (TypeManager.IsEnumType): Likewise.
8167         (TypeManager.EnumToUnderlying): Likewise.
8168         (TypeManager.IsEqual): Add support for enums.
8169
8170 2007-03-12  Raja R Harinath  <rharinath@novell.com>
8171
8172         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
8173         DefaultParameterValueAttribute to be undefined, say if System.dll
8174         is not referenced.
8175
8176 2007-03-11  Marek Safar  <marek.safar@gmail.com>
8177
8178         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
8179         any mscorlib.
8180
8181 2007-03-10  Marek Safar  <marek.safar@gmail.com>
8182
8183         * class.cs, parameter.cs: Unified parameters verification.
8184
8185 2007-03-08  Martin Baulig  <martin@ximian.com>
8186
8187         * cs-parser.jay (constructor_header): Pass the location to the
8188         newly created TopLevelBlock.
8189
8190 2007-03-07  Martin Baulig  <martin@ximian.com>
8191
8192         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8193
8194 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8195
8196         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8197         with the changes from David, fixes the build.
8198
8199 2007-03-05  David Mitchell  <dmitchell@logos.com>
8200
8201         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8202         and its base interfaces to a one-dimensional array type S[],
8203         provided there is an implicit or explicit reference conversion
8204         from S to T.
8205
8206 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8207
8208         * cs-tokenizer.cs: Implemented basic linq grammar.
8209
8210         * driver.cs: Set linq lang version on demand.
8211
8212 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8213
8214         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8215
8216 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8217
8218         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8219         (Fixes #80455)
8220
8221         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8222         here.
8223         Check property and event extern attributes.
8224
8225         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8226         charset.
8227
8228 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8229
8230         A fix for bug #80407
8231         * ecore.cs: Don't report ambiguity error when methods have same parent.
8232
8233 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8234
8235         A fix for bug #80878
8236         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8237
8238 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8239
8240         * attribute.cs: Enable ExtensionAttribute presence test.
8241
8242 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8243
8244         * class.cs: Warn about missing GetHashCode only when Equals is override.
8245
8246         * decl.cs: Check accessibility of type arguments.
8247
8248         * typemanager.cs: Correctly report nullable array.
8249
8250 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8251
8252         * class.cs, report.cs: Capture more details when things go wrong.
8253
8254 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8255
8256         A fix for bug #80650
8257         * cs-parser.jay: Anonymous container starts at constructor declaration
8258         and not at block beginning because it has to be usable in constructor
8259         initializer.
8260
8261         * statement.cs: Use context location and not block one for error reporting.
8262
8263 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8264
8265         A fix for bug #78712
8266         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8267         too.
8268
8269 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8270
8271         A fix for bug #80493 by Atsushi Enomoto
8272         * cs-parser.jay: Ignore invalid attribute target.
8273
8274 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8275  
8276         * cs-tokenizer.cs: Ignore '\0' as white space character.
8277
8278 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8279
8280         * cs-parser.jay: Add support for lambda expressions to the mcs
8281         compiler as well.
8282
8283         * lambda.cs: Only clone when we are probing, not on the final call
8284         (Compatible is the final call). 
8285
8286         * statement.cs (CloneContext): Introduce class to provide block
8287         remapping during clone.
8288
8289         All statements Clone themselves now.
8290
8291         (Clone): special handling for blocks, when we clone a block, we
8292         register the block inside this routine, as children of the block
8293         might trigger a lookup. 
8294         
8295         * expression.cs: Add support for CloneContext in all expressions. 
8296         
8297 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8298  
8299         A fix for bug #80493
8300         * statement.cs: Report ambiguous warning when interfaces are not related.
8301
8302 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8303
8304         C# 3.0 extension methods.
8305
8306         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8307         cannot be used directly.
8308
8309         * class.cs (Class.Emit): Emit extension attribute if any class method
8310         is extension method.
8311         (Method.Define): Add basic extension method validation conditions.
8312         (Method.Emit): Emit extension attribute for method.
8313
8314         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8315         extension method exists. Currently we follow same approach as Microsoft
8316         does, emit even if a method or a class are private but this can change
8317         later.
8318
8319         * cs-parser.jay: Add handling of `this' keyword in method parameters
8320         context.
8321
8322         * decl.cs (DeclSpace.IsStaticClass): New property.
8323         (MemberCache.FindExtensionMethods): Looks for extension methods with
8324         defined name and extension type.
8325
8326         * doc.cs: Updated after OverloadResolve changes.
8327
8328         * driver.cs: Add new soft reference to System.Core.dll.
8329
8330         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8331         (ExtensionMethodGroupExpr): Represents group of extension methods.
8332
8333         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8334         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8335         to MethodGroupExpr and made non-static for easier customization.
8336         (Invocation.DoResolve): Add extension method lookup when no standard
8337         method was found.
8338         (MemberAccess.DoResolve): Try extension methods if no member exists.
8339
8340         * modifiers.cs: Add METHOD_EXTENSION modifier.
8341
8342         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8343         as well as candidate extension type.
8344         (ComputeNamespaces): When assembly constains extension methods registers
8345         them.
8346         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8347         extension method lookup.
8348         (Namespace.LookupExtensionMethod): Looks for extension method in this
8349         namespace.
8350         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8351         find a method which matches name and extensionType.
8352
8353         * parameter.cs (Parameter): Add This modifer.
8354         (HasExtensionMethodModifier): New property.
8355         (Resolve): Add extension parameter check.
8356         (ModFlags): turned to property to exclude this modifier as it is not real
8357         parameter modifier.
8358         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8359
8360         * support.cs (ParameterData): Add ExtensionMethodType.
8361         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8362
8363         * typemanager.cs: Add type and ctor extension attribute type.
8364
8365 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8366
8367         * report.cs (DisableErrors, EnableErrors): used to prevent error
8368         output when we are "trying" to compile various methods with
8369         different types. 
8370
8371         * ecore.cs (Expression): Add Clone method that calls the virtual
8372         CloneTo method.  The current CloneTo method in Expression throws
8373         an exception so we can track down all the places where this must
8374         be implemented (not using abstract, because that would be a lot of
8375         up-front-work before we can start testing the implementation
8376         idea). 
8377
8378         Important: we only need Clone capabilities for expressions created
8379         by the parser, as the expressions we will be cloning are
8380         expressions in the pre-resolved state.   This vastly simplifies
8381         the work required. 
8382         
8383         (SimpleName): Add CloneTo that does nothing.
8384         (EmptyCast): Add CloneTo.
8385         
8386         * expression.cs (Binary): Implement CloneTo.
8387         (Invocation.IsApplicable): Store the current ec in
8388         EmitContext.TempEc and restore it on return.  This is used so we
8389         do not have to sprinkle hundres of methods with an extra
8390         EmitContext, we know that the only user is the lambda expression
8391         ImplicitConversionExists code. 
8392         
8393         (Argument): Add Cloning capabilities.
8394         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8395         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8396         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8397         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8398         IndexerAccess): Add Clone capability.
8399
8400         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8401
8402         (Argument): Add cloning capability.
8403
8404         * assign.cs (Assign): Implement CloneTo.
8405
8406         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8407         
8408         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8409         version by calling Convert with the EmitContext (that we are
8410         currently storing in ec, this is not great, but will do for now,
8411         to avoid passing EmitContext parameters to hundreds of functions
8412         that do not need them now).
8413
8414         (SetExpression): Remove, it is not needed.
8415         
8416         (ContextualReturn): Implement CloneTo.
8417
8418         * statement.cs (Statement): Implement cloning infrastructure,
8419         similar to expressions.
8420
8421         (Block): Partial implementation of Clone for statements.
8422
8423         (Return): Implement clone.
8424         
8425         * constant.cs (Constant.CloneTo): New method, does nothing.
8426
8427         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8428         solution, until we decide how to exactly do this.  
8429         
8430 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8431  
8432         A fix for bug #80493
8433         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8434         a property is override we need to use second accessor.
8435
8436 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8437  
8438         A fix for bug #80418
8439         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8440         methods.
8441
8442 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8443
8444         Another fix for bug #80749
8445         * pending.cs: Abstract class has priority over interfaces.
8446
8447 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8448
8449         Another fix for bug #80749
8450         * pending.cs: Abstract class has priority over interfaces.
8451
8452 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8453
8454         Another fix for bug #80749
8455         * pending.cs: Abstract class has priority over interfaces.
8456
8457 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8458
8459         Another fix for bug #80749
8460         * pending.cs: Abstract class has priority over interfaces.
8461
8462 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8463
8464         * class.cs Better error message.
8465
8466         * driver.cs: Add shorter versions of -optimize option.
8467
8468 2007-02-13  Martin Baulig  <martin@ximian.com>
8469
8470         * class.cs (Constructor.Emit): Check the return value of
8471         ec.ResolveTopBlock() and return on error.
8472
8473 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8474
8475         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8476         message to fix error message regression.
8477
8478 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8479
8480         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8481
8482 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8483
8484         A fix for bug #80749
8485         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8486         its parent container.
8487
8488         * class.cs (DefineFieldInitializers): Each initializer can has different
8489         resolve context.
8490
8491         * const.cs: Updated.
8492
8493 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8494
8495         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8496         now all the heavy lifting to check that embedded statements or
8497         expressions have the right form is done in the ContextualReturn.
8498
8499         (ContextualReturn): New class.  
8500
8501         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8502         method that can be invoked to report 201, so we do not replicate
8503         this everywhere.
8504
8505         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8506         
8507         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8508         treating tabs as spaces. 
8509
8510 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8511
8512         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8513         * assign.cs: Use full implicit conversion for right side check.
8514
8515 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8516
8517         * statement.cs (Switch): Switch over boolean type is not standardized.
8518
8519 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8520
8521         A fix for bug #80755
8522         * decl.cs (FindBaseEvent): Don't use method cache for events.
8523
8524 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8525
8526         * cs-parser.jay: Better syntax error handling.
8527
8528         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8529         instead of underlying type value.
8530
8531 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8532
8533         * driver.cs: Check define identifier before is registered.
8534
8535         * namespace.cs: Use existing error message.
8536
8537         * report.cs: New warning.
8538
8539 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8540
8541         A fix for bug #80742
8542         * expression.cs: Delegate Invoke method can be called directly.
8543
8544 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8545
8546         A fix for bug #80676
8547         * class.cs (IsEntryPoint): The Main method can have params modifier.
8548
8549 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8550
8551         * parameter.cs (Parameter, Parameters): Add Clone method.
8552
8553         * anonymous.cs (Compatible): Turn method into virtual method, so
8554         LambdaExpression can implement a different behavior.
8555
8556         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8557         out the basic checking here, so it can be used by
8558         LambdaExpressions.
8559         
8560         * lambda.cs: Introduce "Compatible" function that will do the
8561         heavy lifting.
8562
8563 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8564
8565         * attribute.cs: Unified one error message.
8566
8567         * class.cs (Class): Use type attributes and not properties to test static
8568         class.
8569         (IsEntryPoint): Don's pass local variable.
8570
8571         * convert.cs: Removed duplicate check.
8572
8573         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8574
8575         * driver.cs: Don't crash when soft reference does not exist.
8576
8577         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8578         (UsingEntry): Removed redundant allocation.
8579
8580         * parameter.cs: Add fast path for type parameters.
8581
8582         * support.cs: Don't allocate attribute when it's not used.
8583
8584 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8585
8586         * anonymous.cs
8587         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8588         this into a virtual method, so we can override it in LambdaExpression.
8589
8590         * driver.cs: Improve diagnostics in case of failure. 
8591
8592         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8593         write a function that is slightly more complex and that parses:
8594
8595         type identifier [, type identifier]* )
8596
8597         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8598         this expression:
8599
8600                 (canEmpty ? i >= 0 : i > 0)
8601
8602 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8603
8604         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8605         exception on possibly valid code.
8606
8607 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8608
8609         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8610         Push/PopPosition.
8611         (parse_opt_type_arguments): Remove.  It's almost the same as
8612         parse_less_than.
8613         (parse_namespace_or_typename): Use parse_less_than.
8614
8615 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8616
8617         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8618         this bug took a few hours to find, because the state saved and
8619         restored by PushPosition and PopPosition was ignoring the state of
8620         parse_generic_less_than.
8621
8622         I can also now remove the handling of OP_LT and OP_GT, this solves
8623         the big mistery.
8624         
8625         * cs-tokenizer.cs: store the location for the ARROW token, we use
8626         that in the parser.
8627
8628         (PushPosition, PopPosition): save/restore also `current_token',
8629         restore `parse_generic_less_than' (was missing).
8630
8631         (parse_opt_type_arguments): use parse_type, not
8632         parse_namespace_or_typename to parse types.
8633
8634         * lambda.cs: Empty new file, will eventually have the lambda
8635         expression implementation.
8636
8637         * lambda.test: used to test the internal tokenizer. 
8638
8639         * report.cs (FeatureIsNotISO1): Rename from
8640         FeatureIsNotStandardized, because it was about the language level
8641         (1 vs 2) it was not about standarization.
8642
8643         (FeatureRequiresLINQ): New.
8644
8645         * support.cs (SeekableStreamReader): Only require that the reader
8646         is a TextReader, not a StreamReader, so we can plug StringReader. 
8647
8648         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8649         given position in the input stream the following tokens can be
8650         parsed as a type followed by an identifier.
8651
8652         (is_punct): after a '(' if parse_type_and_parameter returns true,
8653         then return a special token OPEN_PARENS_LAMBDA which is used to
8654         avoid reduce/reduce errors in the grammar for the
8655         lambda_expression rules.
8656
8657         (parse_type): implement a type parser inside the
8658         tokenizer, the parser only returns true or false depending on
8659         whether the input at a given position can be parsed as a type.
8660
8661         (peek_token): new method used during type parsing.
8662
8663 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8664
8665         Fix #80531
8666         * anonymous.cs (ScopeInfo.InflateParameters): New.
8667         (AnonymousContainer.Resolve): Use it to redirect types of
8668         delegate parameters.
8669
8670 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8671
8672         Fix #80530
8673         * expression.cs (Error_InvalidArguments): Don't use two different
8674         messages for CS1503.  Use ExtraInformation and
8675         SymbolRelatedToPreviousError instead.
8676
8677         Fix #80358
8678         * decl.cs (DeclSpace.initialize_type_params): Don't access
8679         'type_params' of a partial class directly.
8680
8681 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8682
8683         * constant.cs: Removed a handful of out-of-range checks that were
8684         not necessary. 
8685
8686 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8687
8688         * expression.cs (CheckUselessComparison): Add additional check for char
8689         constants.
8690
8691         * namespace.cs: Fixed typo.
8692
8693 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8694
8695         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8696         gone, instead we inline the test, preventing the needless casts to
8697         longs, ulongs and doubles for the parameters, avoiding calls to
8698         methods that overchecked stuff, and instead inlined things
8699         nicely. 
8700
8701 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8702
8703         * cs-parser.jay: Better parameter error handling.
8704
8705 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8706
8707         A fix for bug #80368, #80522
8708         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8709         whether array initializer contains constants only.
8710         (ArrayCreation.Emit): Use better formula to decide when
8711         are array initializers for static initialization.
8712         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8713         have to emit even constants otherwise they are pre-initialized.
8714
8715 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8716             Raja R Harinath  <rharinath@novell.com>
8717
8718         Fix emit order of 'get' vs. 'set'.
8719         * support.cs (Accessors): New.
8720         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8721         Note the order in which accessors are declared in the source.
8722         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8723         Refactored from Property.Define and Indexer.Define.
8724         (PropertyBase.DefineAccessors): New helper that calls the above in
8725         appropriate order as noted by the parser.
8726         (Property.Define, Indexer.Define): Update to changes.
8727         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8728
8729 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8730
8731         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8732         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8733         there's an implicit conversion from the current type to the target
8734         type before converting the underlying constant.
8735
8736 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8737
8738         * const.cs (ResolveValue): Updated after constant conversion was made more
8739         generic.
8740
8741         * constant.cs (GetAttributableValue): constant to object conversion is
8742         used for attributes only.
8743         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8744         constant conversions.
8745         (LongConstant.ConvertImplicitly): Ditto.
8746
8747         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8748         (ImplicitConversionStandard): Handle constant conversion as extra step.
8749         It solves the issue when constant conversion was called indirectly like
8750         inside array initializer and constant folding was skipped.
8751
8752         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8753         this change.
8754
8755         * statement.cs(ImplicitConversionStandard): Updated after constant
8756         conversion was made more generic.
8757
8758 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8759
8760         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8761         Constraints, solves the problem where the compiler incorrectly
8762         reported that a type parameter was not constrained to a class (Bug
8763         80518)
8764
8765 2007-01-14  Marek Habersack  <grendello@gmail.com>
8766
8767         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8768
8769 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8770
8771         A fix for bug #80368
8772         * assign.cs (FieldInitializer): New class implements field
8773         initializer statement.
8774
8775         * attribute.cs: Update after FieldMember rename.
8776
8777         * class.cs (PropertyBasedMember): New common class for property based
8778         types.
8779         (InterfaceMemberBase): New base class for all members which can be used as
8780         an interface members.
8781         (MethodCore): Moved really common code to InterfaceMemberBase.
8782         (Method.Define): Equal and GetHasCode detection is relevant for methods
8783         only.
8784         (MethodData.Define): Don't assume that public event implements an
8785         interface automatically.
8786         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8787         modifier is used.
8788         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8789         (FieldMember): Merged with FieldBase.
8790         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8791         event extern modifier can be used.
8792         (EventField.EventFieldAccessor): Moved event field specific code here.
8793         (Event.AllowedModifiers): Even event can be extern.
8794         (Event.FindOutBaseMethod): New override specific to events.
8795         (Indexer.parameters): Reintroduce parameters because base class holds
8796         only properties common data.
8797         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8798         need do extra parameters check.
8799
8800         * const.cs: Update after FieldMember rename.
8801
8802         * decl.cs (MemberCache.FindBaseEvent): New method.
8803
8804         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8805         to reflect that indexer is now derived from PropertyBased.
8806
8807         * ecore.cs (GetMemberType): Made public.
8808         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8809         obsolete event.
8810
8811         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8812         
8813         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8814         (RegisterEvent): Removed.
8815         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8816         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8817
8818 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8819
8820         Fix #80249
8821         * statement.cs (CollectionForeach.TryType): Prefer generic
8822         GetEnumerator over non-generic variant.  Fix code to follow comments.
8823
8824 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8825
8826         Fix #80446
8827         * support.cs (ReflectionParameter): Don't use an invalid index on
8828         the generic parameter data.
8829
8830 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8831
8832         * driver.cs: Just add a tiny bit of infrastructure.
8833
8834 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8835
8836         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8837         where field type is struct from current assembly.
8838         
8839         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8840         it is possible.
8841
8842 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8843
8844         A fix for bug #80381
8845         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8846         the core types.
8847
8848         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8849         messages.
8850         (Namespace.LookupType): Always use core types from corlib when speficied.
8851
8852         * report.cs: A new warning.
8853
8854         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8855         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8856         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8857
8858         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8859         (InitCoreTypes): Set expression type of object_type and value_type
8860         immediately after lookup.
8861
8862 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8863
8864         * cs-tokenizer.cs: Accept Pc class characters (Connector
8865         Punctuation) as valid identifiers.  Fixes #78259
8866
8867         * expression.cs (Invocation.DoResolve): Moved the check for the
8868         use of `this' for doing method calls to the Invocation resolution
8869         step, after overload resolution has taken place instead of doing
8870         the check at the low-level `This.DoResolve' level.
8871
8872         The `This.DoResolve'(appens before overload resolution, so it has
8873         no way of knowing if the method that will be called will be
8874         instace or static, triggering an erroneous report for cs0188 (Bug
8875         78113).
8876
8877         We now do the check for instance method invocations after we know
8878         what method will be called.
8879
8880         (This.CheckThisUsage): Move the actual use of this structure
8881         checking into its own method and expose it. 
8882
8883         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8884         EmitContext.
8885
8886         Exceptions: Null.ConvertImplicitly,
8887         Constant.ImplicitConversionRequired as there are too many call
8888         sites for passing the ec. 
8889
8890         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8891         EmitContext, if the value is null, then we do not try to provide
8892         the extra information from the error (If a userdefined conversion
8893         exists, as UserDefinedConversion requires a non null-EmitContext).
8894
8895         Fixes: #80347
8896
8897 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8898
8899         * flowanalysis.cs (MyBitVector): Document some invariants.
8900         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8901         introduced below, and add a couple of others, 
8902
8903 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8904
8905         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8906         GetPropertyFromAccessor and GetEventFromAccessor.
8907         
8908         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8909         overrides non-obsolete one.
8910         (Indexer.Define): Error message has been moved to the parser.
8911
8912         * cs-parser.jay: Better syntax errors handling.
8913
8914         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8915         when an invocation has no arguments.
8916
8917         * ecore.cs: Removed not used caching.
8918
8919         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8920         implementation.
8921
8922         * report.cs: Add a new warning.
8923
8924         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8925
8926         * typemanager.cs (enumeration_type): Removed.
8927         (CSharpSignature): Reuses IsSpecialMethod.
8928         (IsEqual): Hack for MS BCL.
8929         (GetPropertyFromAccessor): New method.
8930         (GetEventFromAccessor): New method.
8931         (IsSpecialMethod): Fixed to handle more cases.
8932
8933 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8934
8935         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8936         Made white spaces array static.
8937
8938         * ecore.cs (RemoveGenericArity): Optimized.
8939
8940         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8941         10 times faster).
8942         (MyBitVector.initialize_vector): Simplified.
8943
8944 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8945
8946         * ecore.cs: Am not entirely happy with this hack, but it seems to
8947         address the issue in 80257 (a small test case for
8948         CreativeDocs.NET). 
8949
8950         I set the MethodGroupExpr.Type to an internal compiler type
8951         (itself in this case) to force the resolution to take place.   Why
8952         it does not take place with a null is beyond me.
8953
8954 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8955
8956         A fix for bug #80288
8957         * expression.cs (ResolveOperator): Consider user defined conversion for
8958         logical and operator too.
8959         (EmitBranchable): Optimization for logical and when full constant folding
8960         could not be applied but one operand is constant.
8961
8962 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8963
8964         * class.cs (GetClassBases): Write 5 times every day, will never use
8965         FullName for error reporting.
8966
8967         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8968
8969 2006-12-19  Martin Baulig  <martin@ximian.com>
8970
8971         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8972         the symbol file info here.
8973
8974 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8975
8976         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8977         of `elseif' is taking then following sections are not taking.
8978         Fixes an issue reported on mono mailing list.
8979
8980 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8981
8982         A fix for bug #80300
8983         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8984         a caller is not taking.
8985
8986 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8987
8988         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8989         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8990         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8991         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8992         * class.cs: Update to changes.
8993
8994 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8995
8996         A fix for bug #79934
8997         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8998         partial container.
8999
9000         * class.cs (ResolveMembers): Register an iterator in current container and
9001         not in shared one.
9002
9003 2006-12-16  Raja R Harinath  <rharinath@novell.com>
9004
9005         Fix test-543.cs
9006         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
9007         satisfy a params annotated parameter.
9008
9009 2006-12-16  Marek Safar  <marek.safar@gmail.com>
9010
9011         A fix for bug #77014
9012         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
9013         paramters correctly and not rely on hacks in Parameters class.
9014         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
9015         at any possition.
9016         (Invocation.VerifyArgumentsCompat): Ditto.
9017         (Invocation.EmitArguments): Changed to correctly emit params arguments at
9018         any possition.
9019
9020         * parameter.cs (HasParams): Don't assume that params is the last one.
9021
9022         * support.cs (ReflectionParameters.ctor): Look for params attribute
9023         correctly.
9024         (ReflectionParameters.ParameterType): Removed hack when we returned last
9025         parameter for out of range parameters.
9026         (ParameterName, ParameterModifier): Ditto.
9027
9028 2006-12-14  Marek Safar  <marek.safar@gmail.com>
9029
9030         A fix for bug #79987
9031         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
9032         when assembly is not CLS compliant but type is. I have no idea why is this
9033         allowed.
9034
9035         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
9036
9037 2006-12-13  Miguel de Icaza  <miguel@novell.com>
9038
9039         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
9040         in struct constructors, they are basically no-ops.
9041
9042 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9043
9044         * cs-tokenizer.cs (Position): Save preprocessor status too.
9045
9046 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9047
9048         A fix for bug #77794
9049         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
9050
9051 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9052
9053         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
9054         Fixes #69299.
9055         (pp_expr): Report error for an invalid expression.
9056         (handle_preprocessing_directive): Simplified; add more error checking.
9057
9058 2006-12-11  Marek Safar  <marek.safar@gmail.com>
9059
9060         A fix for bug #74939
9061         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
9062         directives handling.
9063
9064 2006-12-10  Marek Safar  <marek.safar@gmail.com>
9065
9066         A fix for bugs #80093, and #75984
9067         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
9068         logic, it seems to me as it worked before "by coincidence".
9069         (xtoken): Simplified to use reworked handle_preprocessing_directive.
9070         (cleanup): Enabled endif check.
9071
9072 2006-12-09  Marek Safar  <marek.safar@gmail.com>
9073
9074         A fix for bug #80162
9075         * statement.cs (CollectionForeach.TryType): Generics and non-generics
9076         enumerators are never ambiguous.
9077
9078 2006-12-08  Raja R Harinath  <rharinath@novell.com>
9079
9080         Fix #80060
9081         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
9082
9083 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9084
9085         A fix for bug #80144
9086         * class.cs (EventProperty.Define): Explicit implementation means
9087         that an even is used.
9088
9089 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9090
9091         Fixes the operators implementation (part II)
9092
9093         * cfold.cs (DoConstantNumericPromotions): Renamed to
9094         DoBinaryNumericPromotions and simplified.
9095         (BinaryFold): Couple of conversion fixes; simplified.
9096
9097         * constant.cs, ecore.cs, literal.cs
9098         (ToType): Renamed to ConvertImplicitly.
9099         (Reduce): Renamed to ConvertExplicitly.
9100
9101         * class.cs, convert.cs: Updated.
9102
9103         * expression.cs: TryReduce doesn't throw an exception.
9104
9105 2006-12-01  Marek Safar  <marek.safar@gmail.com>
9106
9107         A fix for bug #80108
9108         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
9109         compatible.
9110
9111 2006-11-30  Marek Safar  <marek.safar@gmail.com>
9112
9113         Fixes unary operators implementation (part I)
9114         Also fixes #80026
9115
9116         * cfold.cs (Error_CompileTimeOverflow): Made internal
9117
9118         * const.cs (IConstant): Changed to use reference to constant and
9119         not constant itself.
9120         Updated IConstant implementations.
9121
9122         * constant.cs (CreateConstant): New factory method.
9123         Updated IConstant implementation.
9124
9125         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
9126
9127         * ecore.cs: Updated to use CreateConstantReference.
9128
9129         * enum.cs: Reflects IConstant changes.
9130
9131         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
9132
9133         * literal.cs (NullConstant): Change to be independently usable.
9134
9135 2006-11-29  Martin Baulig  <martin@ximian.com>
9136
9137         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
9138         we need to emit the scope initializer before calling the base .ctor.
9139
9140         * anonymous.cs: Merged back from the new anonymous methods branch.
9141         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
9142
9143         * expression.cs (ParameterReference.DoResolveBase): Create a
9144         "normal" ScopeInfo when capturing parameters rather than using the
9145         root scope; this makes things work with anonymous methods having
9146         parameters.
9147
9148         * statement.cs
9149         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
9150
9151 2006-11-22  Marek Safar  <marek.safar@gmail.com>
9152
9153         A fix for bug #79987
9154         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
9155         check to a base class.
9156         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
9157         only when assembly has missing attribute.
9158         * report.cs: Update.
9159
9160 2006-11-21  Marek Safar  <marek.safar@gmail.com>
9161
9162         * cs-tokenizer.cs: Merged with gmcs version.
9163
9164 2006-11-20  Marek Safar  <marek.safar@gmail.com>
9165
9166         * cs-tokenizer.cs,
9167         * cs-parser.jay: Better error message when partial keyword is misplaced.
9168
9169 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
9170
9171         A fix for bug #79810
9172         report.cs: CS1058 only applies to 2.0 profile (gmcs).
9173         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
9174         a RuntimeWrappedException by default.
9175
9176 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9177
9178         A fix for bug #79843
9179         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
9180         implementation.
9181         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
9182
9183 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9184
9185         * driver.cs, namespace.cs: Uses faster IndexOf version.
9186
9187 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9188
9189         A fix for bug #79941
9190         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9191         operators.
9192         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9193         even if internal name is different.
9194         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9195         (UserDefinedConversion): Simplified as the operators cannot be internal.
9196         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9197         conversions.
9198         (MethodLookup): Replaced EmitContext with parentType.
9199         * expression.cs: Updated.
9200
9201 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9202
9203         * driver.cs (BadAssembly): Handle all the ugliness of
9204         DefineDynamicAssembly.
9205
9206 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9207
9208         Address parts of #58244 -- most of what's left is in the runtime
9209         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9210         CS1509 error checks, and handle them for all assembly loads, not
9211         just the first invocation.
9212         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9213         * codegen.cs (AssemblyClass.AddModule): ... here.
9214
9215 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9216
9217         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9218         IEnumerable<T> is ambiguous.
9219
9220 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9221
9222         A fix for bug #67689
9223         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9224         GetEnumerator is ambiguous.
9225
9226         * report.cs: Add new warning.
9227
9228 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9229
9230         A fix for bug #78602
9231         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9232         to protected member can be nested type.
9233
9234 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9235
9236         A fix for bug #78965
9237         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9238         to protected member must derive from current type.
9239
9240 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9241
9242         assign.cs: Reuses error method.
9243
9244         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9245         instead of type for constants.
9246         (Expression.Error_ValueAssignment): Common error method.
9247
9248         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9249         for any assignment.
9250
9251 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9252
9253         A fix for bug #79081
9254         * expression.cs (MemberAccess.DoResolve): Check nested type
9255         accessibility.
9256
9257 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9258
9259         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9260
9261 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9262
9263         A fix for bug #76591
9264         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9265
9266 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9267
9268         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9269         type forwarder of the same type multiple times.
9270
9271 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9272
9273         Fix #78820
9274         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9275         instance as an rvalue, even when we later resolve as an lvalue.
9276
9277 2006-10-25  Martin Baulig  <martin@ximian.com>
9278
9279         * anonymous.cs: Fix #79673.
9280
9281 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9282
9283         A fix for bug #79666
9284         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9285         ignored when is optimized (= default value) as its value is already set.
9286
9287 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9288
9289         A fix for bug #79724
9290         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9291         TypeContainer for type lookup.
9292
9293 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9294
9295         A fix for bug #79231
9296         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9297         * expression.cs (OverloadResolve): Always convert type name for
9298         an error message.
9299         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9300         other member.
9301
9302 2006-10-18  Martin Baulig <martin@ximian.com>
9303
9304         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9305
9306 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9307
9308         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9309         an int32, but requesting an int64 from the conversion
9310
9311 2006-10-12  Martin Baulig  <martin@ximian.com>
9312
9313         * anonymous.cs
9314         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9315         
9316 2006-10-12  Martin Baulig  <martin@ximian.com>
9317
9318         * statement.cs
9319         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9320
9321 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9322
9323         * convert.cs: Remove broken code: I was doing the "Existance"
9324         tests for Implicit conversions.
9325
9326 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9327
9328         * convert.cs: Added one missing case in
9329         ImplicitStandardConversionExists uint64 to intptr.
9330
9331         Fixes #59800
9332         
9333         * typemanager.cs (uintptr_type): another core known type.   
9334
9335         * ecore.cs (OperatorCast): routine used to do cast operations that
9336         depend on op_Explicit.  We could change some of the Decimal
9337         conversions to use this.
9338
9339         This one has a probe mechanism that checks both types for an op_
9340         which it coudl be used to eliminate two classes: CastToDecimal
9341         and CastFromDecimal.
9342
9343         * convert.cs: Implement the conversions documented in #59800
9344         
9345 2006-10-10  Martin Baulig  <martin@ximian.com>
9346
9347         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9348         before RootScope.ResolveMembers().
9349
9350         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9351         `CurrentType' if appropriate.
9352
9353 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9354
9355         A fix for bug #78568
9356         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9357         when contains binary operators.
9358         * cs-parser.jay: Updated.
9359
9360 2006-10-09  Martin Baulig  <martin@ximian.com>
9361
9362         * delegate.cs
9363         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9364         moved that into Define() and also do the other type parameter
9365         checks there.  Fixes #79094.  Added gtest-292.cs.
9366
9367         * expression.cs
9368         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9369         since that doesn't include type parameters; don't use `Ldelema'
9370         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9371
9372 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9373
9374         A fix for #77796
9375         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9376         conversion is allowed.
9377
9378 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9379
9380         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9381         error reporting when no error occurs.
9382
9383 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9384
9385         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9386         does not exist.
9387
9388 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9389
9390         Fix #79584
9391         * class.cs (DefineTypeBuilder): Check circular dependencies before
9392         setting the parent of the TypeBuilder.
9393         (CheckRecursiveDefinition): Don't use 'BaseType', since
9394         it may not be valid until after DefineTypeBuilder.  Use
9395         'base_type' instead.
9396
9397 2006-10-04  Martin Baulig  <martin@ximian.com>
9398
9399         Merged the Anonymous Methods patch.
9400
9401         * anonymous.cs, iterators.cs: The new anonymous methods code.
9402
9403         * statement.cs (Variable): New public abstract class.
9404         (LocalInfo.Variable): New public property.
9405         (LocalInfo.ResolveVariable): New public method.
9406         (Block.Flags): Add `IsIterator'.
9407         (Block.AddVariable): Improved the CS0136 check.
9408         (Block.AnonymousChildren): New public property.
9409         (Block.AddAnonymousChild): New public method.
9410         (ToplevelBlock): Update to use the new anonymous method framework.
9411         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9412         `ToplevelBlock'; this is required to correctly implement the
9413         CS0136 check.
9414         (Fixed, Using): Use `TemporaryVariable' instead of directly
9415         creating the `LocalBuilder'.
9416
9417         * parameter.cs (Parameter.ResolveVariable): New public method.
9418         (Parameters.ResolveVariable): Likewise.
9419
9420         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9421
9422         * class.cs (TypeContainer): Replaced the `iterators' list and
9423         corresponding methods with a list of `CompilerGeneratedClass'es.
9424         (TypeContainer.ResolveMembers): New public method.
9425         (Method): `IIteratorContainer' has been replaced by
9426         `IAnonymousHost'.
9427
9428         * expression.cs (VariableReference): New public abstract base
9429         class for `LocalVariableReference', `ParameterReference' and
9430         `This'.
9431
9432         * codegen.cs (EmitContext): Removed `capture_context',
9433         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9434         (EmitContext.EmitThis): Removed.
9435
9436         * cs-parser.jay: Replace `iterator_container' with
9437         `anonymous_host'.       
9438
9439 2006-10-04  Martin Baulig  <martin@ximian.com>
9440
9441         * generic.cs (GenericMethod): Don't make this abstract.
9442         (Constraints.Clone): Added dummy implementation.
9443
9444 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9445
9446         Fix #79577
9447         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9448         'declspaces'.  Avoid allocating arrays willy-nilly.
9449
9450         Fix #79553
9451         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9452         cases out of the switch.
9453
9454 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9455
9456         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9457         message when non-generic type is used with the type arguments.
9458         * expression.cs: Updated.
9459
9460 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9461
9462         Fix #79013
9463         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9464         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9465         Change semantics slightly.  Don't insist on having only one
9466         temporary EmptyExpression -- just throttle the creation of new ones.
9467
9468         Fix #79451
9469         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9470         non-interfaces too.  If no methods are found, don't try to create
9471         a MethodGroupExpr.
9472
9473 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9474
9475         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9476         generic type.
9477
9478         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9479         us produce better error message.
9480
9481 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9482
9483         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9484         of the `|' operator.
9485
9486         * report.cs: A new warning added.
9487
9488 2006-09-27  Martin Baulig  <martin@ximian.com>
9489
9490         * generic.cs (GenericMethod): Don't make this abstract.
9491
9492 2006-09-27  Martin Baulig  <martin@ximian.com>
9493
9494         * report.cs
9495         (InternalErrorException): Added overloaded ctor taking a params array.
9496
9497 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9498
9499         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9500         Fixed the cases when same error was reported twice.
9501
9502         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9503         now report symbol information.
9504
9505 2006-09-25  Martin Baulig  <martin@ximian.com>
9506
9507         * class.cs: Completely unified with the gmcs version.
9508
9509 2006-09-25  Martin Baulig  <martin@ximian.com>
9510
9511         * typemanager.cs (TypeManager.IsNullableType): New public function.
9512         (TypeManager.IsNullableTypeOf): Likewise.
9513         (TypeManager.IsNullableValueType): Likewise.
9514
9515         * class.cs (MethodCore): Added the `GenericMethod' argument from
9516         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9517
9518 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9519
9520         * convert.cs: Unify with gmcs version.
9521
9522 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9523
9524         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9525         verify them as well.
9526
9527         * report.cs: New warning.
9528
9529 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9530
9531         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9532         for anonymous block with out argument.
9533
9534 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9535
9536         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9537         not used private events only.
9538
9539 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9540
9541         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9542
9543         * const.cs (Const.Define): Check for constant type.
9544         (Const.IsConstantTypeValid): Looks for valid constant types.
9545
9546         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9547
9548         * ecore.cs (EmptyConstantCast): New common class for all constant based
9549         EmptyCast(s).
9550
9551         * expression.cs (Is.DoResolve): Handle null constant especially.
9552         (New.DoResolve): Check for new void().
9553         (MemberAccess.DoResolve): Cope with all kind of nulls.
9554
9555         * literal.cs (NullConstant): Uses EmptyConstantCast.
9556         (NullDefault): Based on EmptyConstantCast.
9557         (NullLiteral): Uses EmptyConstantCast.
9558
9559         * statement.cs (Block.ResolveMeta): Check for constant type.
9560
9561 2006-09-22  Martin Baulig  <martin@ximian.com>
9562
9563         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9564
9565 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9566
9567         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9568         not the null type.
9569
9570         Fix part of #79451
9571         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9572         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9573         code slightly.
9574
9575 2006-09-22  Martin Baulig  <martin@ximian.com>
9576
9577         * ecore.cs: Merged with the gmcs version.
9578
9579         * generic.cs (ConstructedType): New dummy class.
9580         (TypeArguments): Don't make this abstract.
9581
9582         * typemanager.cs
9583         (TypeManager.IsGenericTypeDefinition): New method.
9584         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9585
9586 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9587
9588         * expression.cs (ComposedCast): Check for arrays of TypedReference
9589         before creating the type, not after.
9590
9591 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9592
9593         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9594         after ToType change.
9595
9596         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9597         when constant must be implicitly convertible.
9598
9599         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9600
9601         * ecore.cs (NullCast): Derives from NullConstant.
9602
9603         * expression.cs (Is.DoResolve): Removed useless variables.
9604         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9605         (New.Constantify): Add enum support.
9606         (MemberAccess.DoResolve): Add warning when accessing null constant or
9607         variable.
9608
9609         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9610         property.
9611
9612         * literal.cs (NullConstant): New abstract class with common
9613         functionality for all null specializations.
9614         (NullDefault): Represents default(X) when result can be
9615         reduced to null.
9616         (NullLiteral): Updated.
9617
9618         * report.cs: Add new warning.
9619
9620 2006-09-21  Martin Baulig  <martin@ximian.com>
9621
9622         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9623
9624 2006-09-21  Martin Baulig  <martin@ximian.com>
9625
9626         * generic.cs (GenericConstraints): New dummy class.
9627         (Constraints): Likewise.
9628         (TypeParameter): Likewise.
9629         (TypeParameterName): Likewise.
9630         (GenericMethod): Likewise.
9631
9632         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9633
9634         * decl.cs: Merged with the gmcs version.
9635
9636 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9637
9638         * generic.cs (TypeParameter): Implement IMemberContainer.
9639         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9640
9641         * rootcontext.cs: Unify with gmcs version.
9642
9643         * report.cs: Unify with gmcs version.
9644         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9645         from gmcs/generics.cs.
9646         * generics.cs (TypeParameter): New dummy class.
9647
9648         * support.cs: Unify with gmcs version.
9649
9650 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9651
9652         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9653         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9654
9655         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9656         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9657         * mcs.exe.sources: Add generic.cs.
9658
9659         * codegen.cs: Unify with gmcs version.
9660
9661         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9662         (EmitContext): Add GenericDeclContainer implementation.
9663         * decl.cs (MemberCore, DeclSpace): Likewise.
9664         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9665
9666         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9667         MCS TypeManager has a corresponding dummy method.
9668
9669 2006-09-19  Martin Baulig  <martin@ximian.com>
9670
9671         * expression.cs: Completely merged with the gmcs version.
9672
9673 2006-09-19  Martin Baulig  <martin@ximian.com>
9674
9675         * expression.cs (Invocation): Merged with the gmcs version.
9676         (ArrayAccess.GetStoreOpcode): Likewise.
9677
9678 2006-09-19  Martin Baulig  <martin@ximian.com>
9679
9680         * typemanager.cs
9681         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9682         (TypeManager.IsGenericMethodDefinition): Likewise.
9683
9684 2006-09-19  Martin Baulig  <martin@ximian.com>
9685
9686         * typemanager.cs
9687         (TypeManager.IsEqual): Moved the gmcs implementation here.
9688         (TypeManager.DropGenericTypeArguments): Likewise.
9689         (TypeManager.DropGenericMethodArguments): Likewise.
9690         (TypeManager.GetTypeArguments): Moved here from gmcs.
9691         (TypeManager.HasGenericArguments): Likewise.
9692
9693 2006-09-19  Martin Baulig  <martin@ximian.com>
9694
9695         * expression.cs (Binary): Merged with the gmcs version.
9696
9697 2006-09-19  Martin Baulig  <martin@ximian.com>
9698
9699         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9700
9701 2006-09-19  Martin Baulig  <martin@ximian.com>
9702
9703         * typemanager.cs: Merged with the gmcs version.
9704
9705 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9706
9707         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9708         * driver.cs: Likewise.
9709
9710 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9711
9712         A fix for #79401
9713         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9714         only if parent type is class.
9715         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9716         update.
9717
9718 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9719
9720         * cs-parser.jay,
9721         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9722         keywords are used.
9723         * typemanager.cs(CSharpName): Converts NullType to null.
9724
9725 2006-09-15  Martin Baulig  <martin@ximian.com>
9726
9727         * typemanager.cs
9728         (TypeManager.GetMethodName): Added mcs implementation.
9729         (TypeManager.IsEqual): Likewise.
9730
9731         * ecore.cs
9732         (SimpleName.RemoveGenericArity): Added dummy implementation.
9733
9734         * pending.cs: Merged with the gmcs version.     
9735
9736 2006-09-15  Martin Baulig  <martin@ximian.com>
9737
9738         * statement.cs: Merge with the gmcs version.
9739
9740 2006-09-15  Martin Baulig  <martin@ximian.com>
9741
9742         * statement.cs (Switch): Merge with the gmcs implementation
9743         (without nullables), which is newer.
9744
9745 2006-09-15  Martin Baulig  <martin@ximian.com>
9746
9747         * statement.cs (Block.Variables): Make this public.
9748         (ToplevelBlock.Parameters): Make this a property.
9749         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9750
9751 2006-09-15  Martin Baulig  <martin@ximian.com>
9752
9753         * namespace.cs: Merge with the gmcs version.
9754
9755 2006-09-15  Martin Baulig  <martin@ximian.com>
9756
9757         * decl.cs (MemberName): Minor code cleanups.
9758
9759 2006-09-15  Martin Baulig  <martin@ximian.com>
9760
9761         * parameter.cs: Merge with the gmcs version.
9762
9763 2006-09-15  Martin Baulig  <martin@ximian.com>
9764
9765         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9766         and an error in mcs.
9767
9768 2006-09-15  Martin Baulig  <martin@ximian.com>
9769
9770         * flowanalysis.cs: Merged from GMCS; added the generics code into
9771         a `GMCS_SOURCE' conditional so we can share this file.
9772
9773 2006-09-08  Martin Baulig  <martin@ximian.com>
9774
9775         * typemanager.cs (TypeManager.interlocked_type): New public field.
9776         (TypeManager.int_interlocked_compare-exchange): New public field.
9777         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9778         enumerator types here and call InitGenericCoreTypes().
9779         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9780         after calling InitEnumUnderlyingTypes().
9781
9782         * rootcontext.cs
9783         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9784         `classes_second_stage'. 
9785
9786 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9787
9788         * assign.cs, ecore.cs, expression.cs: Share error message text.
9789         * class.cs (FieldMember.Define): Check for varible of static type.
9790         * driver.cs (LoadAssembly): Uses error output for errors.
9791         * statement.cs: Updated.
9792
9793 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9794
9795         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9796         type instance.
9797
9798 2006-09-07  Martin Baulig  <martin@ximian.com>
9799
9800         * driver.cs
9801         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9802
9803 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9804
9805         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9806         
9807 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9808
9809         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9810         #52019 and #79064, the use of the \uXXXX sequence in source code
9811         to represent unicode characters.
9812
9813 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9814
9815         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9816         support.
9817         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9818
9819 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9820
9821         * assign.cs: Catch attempts to assign to a method groups in += and
9822         report as 1656
9823
9824 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9825
9826         A fix for #79056
9827         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9828
9829 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9830
9831         * class.cs (Method.Define): Issue a warning when generic method looks like
9832         an entry point.
9833         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9834         as well.
9835
9836 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9837  
9838         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9839         looking for ctor.
9840         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9841         search all base interfaces as a member can be ambiguous.
9842         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9843         Constructor member type filter. 
9844         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9845         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9846         reporting for returned memberinfos.
9847         * report.cs: Updated.
9848         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9849         version to work on all runtimes.
9850         (TypeManager.RealMemberLookup): Removed members filtering.
9851
9852 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9853
9854         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9855         (PropertyExpr.EmitAssign): Likewise.
9856         * expression.cs (Indirection.EmitAssign): Likewise.
9857         (LocalVariableReference.EmitAssign): Likewise.
9858         (ParameterReference.EmitAssign): Likewise.
9859         (Invocation.EmitArguments): Likewise.
9860         (ArrayAccess.EmitAssign): Likewise.
9861         (IndexerAccess.EmitAssign): Likewise.
9862         (This.EmitAssign): Likewise.
9863         (ConditionalLogicalOperator.Emit): Likewise.
9864
9865         Fix #79026
9866         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9867         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9868         leave it in after returning it.
9869         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9870
9871 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9872
9873         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9874         message.
9875
9876 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9877
9878         Fix cs0146-3.cs and cs0146-4.cs.
9879         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9880         enclosing types don't depend on the current type.
9881
9882 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9883
9884         Fix #77963
9885         * class.cs (TypeContainer.DoDefineMembers): Use
9886         FindBaseMemberWithSameName on Parent, since we're interested in
9887         whether we hide inherited members or not.
9888         (FindBaseMemberWithSameName): Make slightly more robust.
9889
9890         Fix the non-generic testcase from #77396
9891         * decl.cs (DeclSpace.DeclContainer): Remove override.
9892
9893         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9894         declspaces for doppelgangers too.
9895         (UsingEntry): Implement IResolveContext.
9896         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9897         'this' as the resolve context.
9898         (LocalAliasEntry): Likewise.
9899
9900         Implement parts of #77403
9901         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9902         toplevel declaration space.  Each namespace declaration introduces
9903         a "partial" root declaretion space.
9904         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9905         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9906         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9907         from 'current_namespace.SlaveDeclSpace'.
9908         (namespace_declaration): Likewise.
9909         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9910         check.  It can't happen now.
9911         * decl.cs (DeclSpace.LookupType): Likewise.
9912         * driver.cs (MainDriver): Sanity check.
9913
9914 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9915
9916         * decl.cs (DeclSpace.FindNestedType): Remove.
9917         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9918         LookupTypeContainer to get the container of the nested type.
9919         * class.cs (TypeContainer.FindNestedType): Make non-override.
9920
9921 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9922
9923         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9924         * class.cs (TypeContainer.PartialContainer): ... here.
9925         (TypeContainer.AddBasesForPart): New helper.
9926         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9927         instead.
9928         * cs-parser.jay (current_class): Convert to DeclSpace.
9929         (struct_declaration, interface_declaration, class_declaration):
9930         Use AddBasesForPart instead of .Bases directly.
9931         * const.cs, iterators.cs: Update to changes.
9932
9933 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9934
9935         * class.cs (TypeContainer.AddMemberType): Rename from
9936         AddToTypeContainer.
9937         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9938         (AddTypeContainer): New.  Combine AddClassOrStruct and
9939         AddInterface.
9940         (AddPartial): Update.  Add 'is_partial' argument.
9941         * roottypes.cs: Update to changes.
9942         * cs-parser.jay (push_current_class): New helper for handling
9943         current_container and current_class.
9944         (struct_declaration, interface_declaration, class_declaration):
9945         Use it.
9946
9947 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9948
9949         * roottypes.cs: Rename from tree.cs.
9950
9951         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9952         * tree.cs (Tree, ITreeDump): Remove types.
9953         * rootcontext.cs (tree, Tree): Remove fields.
9954         (root, ToplevelTypes): New.
9955         * *.cs: Update to rename.
9956
9957         * tree.cs (Tree.RecordDecl): Remove.
9958         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9959         namespace here.
9960         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9961
9962 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9963
9964         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9965         DoFlowAnalysis and OmitStructFlowAnalysis here.
9966         (ec.With): Rename from WithUnsafe and generalize.
9967         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9968         (ec.WithFlowAnalyis): New.
9969         * ecore.cs, expression.cs, statement.cs: Update.
9970
9971 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9972
9973         * statement.cs (Block.ResolveMeta): Simplify slightly.
9974
9975         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9976         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9977         check_state to flags.
9978         (CheckState, ConstantCheckState): Update.
9979         (InUnsafe): New read-only property.
9980         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9981         arbitrary flags.
9982         (WithUnsafe): New helper similar to WithCheckState.
9983         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9984         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9985
9986 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9987
9988         Make comparisons use the same IL irrespective of whether they're
9989         in a 'checked' or 'unchecked' context: one of the issues in #78899
9990         * codegen.cs (EmitContext.CheckState): Make read-only property.
9991         (EmitContext.ConstantCheckState): Likewise.
9992         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9993         helper that implement a save/restore stack for CheckState
9994         values.  This is the only way to change check-state.
9995         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9996         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9997         (CheckedExpr.EmitBranchable): New forwarding method.
9998         (UnCheckedExpr): Likewise.
9999         * statement.cs (Block.ResolveMeta): Use WithCheckState.
10000         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
10001         (Checked.Resolve, checked.DoEmit): Likewise.
10002
10003 2006-07-20  Miguel de Icaza  <miguel@novell.com>
10004
10005         * anonymous.cs: Cache the resolved anonymous delegate, and return
10006         this so that the ResolveTopBlock is only triggered once, not
10007         twice.
10008
10009         Currently we trigger ResolvetopBlock twice due to a first pass of
10010         argument check compatibility, and a second pass that does the
10011         actual resolution.   
10012         
10013 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10014
10015         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
10016         modifiers.
10017         * rootcontext.cs (Reset): Add helper_classes.
10018
10019 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10020
10021         A fix for #78860
10022         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
10023         correctly.
10024
10025 2006-07-13  Miguel de Icaza  <miguel@novell.com>
10026
10027         * statement.cs (Lock): Handle expressions of type
10028         TypeManager.null_type specially.  Fixes #78770
10029
10030 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10031
10032         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
10033         to an event.
10034
10035 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10036
10037         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
10038         for accessors as well.
10039         * ecore.cs (EventExpr): Add AccessorTable.
10040
10041 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
10042
10043         A fix for #78738
10044         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
10045         for CS0122 where appropriate.
10046         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
10047         level attributes.
10048         (Filter): Assembly can be null in the case of top level attributes.
10049
10050 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
10051
10052         A fix for #78690
10053
10054         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
10055         is done at global level.
10056
10057 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10058
10059         A fix for #77002, Implemented TypeForwarder support.
10060
10061         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
10062         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
10063         * typemanager.cs (): Add type_forwarder_attr_type.
10064
10065 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10066
10067         * report.cs: Add CS0469 warning.
10068
10069 2006-06-21  Martin Baulig  <martin@ximian.com>
10070
10071         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
10072         the `try'-block, so we also report CS0016 etc. there.
10073
10074 2006-06-21  Martin Baulig  <martin@ximian.com>
10075
10076         * delegate.cs
10077         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
10078
10079 2006-06-21  Martin Baulig  <martin@ximian.com>
10080
10081         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
10082         also report CS1686 for parameters.
10083
10084 2006-06-21  Martin Baulig  <martin@ximian.com>
10085
10086         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
10087         instead of an error if the value is not implicitly convertible to
10088         the switch types; fixes #77964.
10089
10090 2006-06-21  Raja R Harinath  <rharinath@novell.com>
10091
10092         Fix #78673
10093         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
10094         FieldBuilder is null.
10095
10096         Fix #78662
10097         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
10098         'left' and 'right' before error-checking.
10099
10100 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
10101
10102         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
10103         Fixed bug #78601.
10104         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
10105         (FieldExpr.DoResolve): likewise.
10106         (PropertyExpr.InstanceResolve): likewise.
10107         (EventExpr.InstanceResolve): likewise. 
10108
10109 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
10110
10111         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
10112         attribute applicable tests for attribute argument.
10113
10114 2006-06-02  Raja R Harinath  <rharinath@novell.com>
10115
10116         Fix #78079
10117         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
10118         (Binary.OverloadResolve_PredefinedIntegral): New.
10119         (Binary.OverloadResolve_PredefinedFloating): New.
10120         (Binary.OverloadResolve_PredefinedString): New.
10121         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
10122         Follow the standard more closely, and treat numeric promotions in
10123         terms of overload resolution.
10124         (Binary.CheckShiftArguments): Simplify.
10125
10126 2006-06-01  Raja R Harinath  <rharinath@novell.com>
10127
10128         * flowanalysis.cs (MyBitVector): Simplify representation.
10129         (MyBitVector.Clone): Avoid allocating BitArray.
10130         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
10131         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
10132         (*): Update.  Change all references to MyBitVector.And and
10133         MyBitVector.Or to &= and |=.
10134
10135 2006-05-29  Raja R Harinath  <rharinath@novell.com>
10136
10137         Fix cs0231-[34].cs.
10138         * cs-parser.jay (formal_parameter_list): Extend the pattern below
10139         to param arguments too.
10140
10141 2006-05-26  Miguel de Icaza  <miguel@novell.com>
10142
10143         * cs-parser.jay: Catch another parsing form for arglist being
10144         followed by other arguments.  Fixes #78313.
10145
10146 2006-05-24  Raja R Harinath  <rharinath@novell.com>
10147
10148         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
10149         checking of out parameters to ...
10150         (FlowBranchingToplevel.Merge): ... here.
10151         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
10152         set, propagate the origin upward, and only complain if there was
10153         no other error.
10154         (FlowBranchingException.AddContinueOrigin): Likewise.
10155         (FlowBranchingException.AddReturnOrigin): Likewise.
10156         (FlowBranchingException.AddGotoOrigin): Likewise.       
10157
10158 2006-05-23  Raja R Harinath  <rharinath@novell.com>
10159
10160         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
10161         unreachable, skip it.
10162         (FlowBranchingException.Merge): Always propagate jumps, even if
10163         the finally block renders subsequent code unreachable.
10164
10165 2006-05-18  Raja R Harinath  <rharinath@novell.com>
10166
10167         Fix #77601
10168         * statement.cs (Goto.Resolve): Move responsibility for resolving
10169         'goto' to FlowBranching.AddGotoOrigin.
10170         (Goto.SetResolvedTarget): New.  Callback to set the
10171         LabeledStatement that's the target of the goto.
10172         (Goto.DoEmit): Use Leave instead of Br when crossing an
10173         unwind-protect boundary.
10174         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
10175         LookupLabel and adjust to new semantics.
10176         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
10177         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
10178         Goto.SetResolvedTarget to update target.
10179         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
10180         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
10181         AddBreakOrigin & co.  Delay propagation until ...
10182         (FlowBranchingException.Merge): ... this.
10183
10184         * statement.cs (Block.Resolve): Always depend on flow-branching to
10185         determine unreachability.  Kill workaround that originally emitted
10186         only one statement after an "unreachable" label (see infloop in
10187         test-515.cs).
10188
10189         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10190         This is still "wrong", but anything better would probably need a
10191         multi-pass algorithm.
10192         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10193         usage vector.  Force current usage vector to be reachable, to
10194         optimistically signify backward jumps.
10195         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10196         detected.
10197         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10198         detected, return the original salted-away usage vector instead,
10199         updated with appropriate changes.  Print unreachable warning if
10200         necessary.
10201         * statement.cs (Block.Resolve): Don't print unreachable warning on
10202         a labeled statement.
10203
10204 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10205
10206         * driver.cs: Pass filename without path to AssemblyBuilder's 
10207         AddResourceFile. Fixes bug #78407.
10208
10209 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10210
10211         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10212         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10213         (FlowBranching.MergeChild): Overwrite
10214         reachability information from Labeled branchings too.
10215
10216 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10217
10218         * statement.cs (Goto.Resolve): Merge jump origins here ...
10219         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10220
10221         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10222         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10223         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10224         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10225         here, ...
10226         * statement.cs (Goto.Resolve): ... not here.
10227         (Goto.Emit): Remove CS1632 check.
10228
10229 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10230
10231         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10232         error message.
10233
10234 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10235
10236         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10237         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10238         (FlowBranchingException.Label): Likewise.
10239
10240         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10241         given value.
10242         (MyBitVector.Or): Use it to avoid losing information (Count).
10243         (FlowBranching.MergeOrigins): Likewise.
10244
10245         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10246         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10247         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10248         (UsageVector.ToString): Simplify.
10249         (UsageVector.MergeSiblings): Move here from ...
10250         (FlowBranching.Merge): ... here.
10251         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10252         not a MyBitVector.
10253
10254 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10255
10256         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10257         null bitvector is treated as all-true.
10258
10259         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10260         (MyBitVector): Rationalize invariants.  'vector != null' implies
10261         that we have our own copy of the bitvector.  Otherwise,
10262         'InheritsFrom == null' implies all inherited bits are true.
10263
10264 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10265
10266         * statement.cs (LocalInfo): Add IsConstant.
10267         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10268         local variable for constants.
10269
10270 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10271
10272         * flowanalysis.cs (MyBitVector.Empty): New.
10273         (MyBitVector): Don't allow InheritedFrom to be null.
10274         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10275         (UsageVector, FlowBranching): Update to changes.
10276
10277         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10278         recursion.  The 'Parent == null' condition isn't sufficient for
10279         anonymous methods.
10280         (FlowBranching.AddBreakOrigin): Likewise.
10281         (FlowBranching.AddContinueOrigin): Likewise.
10282         (FlowBranching.AddReturnOrigin): Likewise.
10283         (FlowBranching.StealFinallyClauses): Likewise.
10284         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10285         (FlowBranching.CheckOutParameters): Likewise.
10286         (FlowBranchingToplevel): Terminate all the above recursions here.
10287         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10288         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10289
10290         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10291         toplevel block.
10292         (FlowBranchingToplevel): New.  Empty for now.
10293         (FlowBranching.MergeTopBlock): Update.
10294         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10295         branching for the anonymous delegate.
10296         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10297
10298         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10299         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10300         information at the start of the merge.  Reorganize.
10301
10302 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10303
10304         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10305
10306 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10307
10308         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10309         to newly introduced ctor.
10310
10311         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10312         message to one place.
10313         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10314         global namespace.
10315
10316 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10317
10318         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10319
10320         * ecore.cs (Expression.ResolveAsConstant): Updated.
10321
10322         * statement.cs (ResolveMeta): Updated.
10323
10324 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10325
10326         * cs-parser.jay: __arglist cannot be used in initializer.
10327
10328 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10329
10330         A fix for #77879
10331         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10332         private types.
10333
10334 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10335
10336         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10337         (LabeledStatement): Add 'name' parameter.
10338         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10339         (Block.AddLabel): Update to changes.
10340         * cs-parser.jay (labeled_statement): Likewise.
10341
10342         * flowanalysis.cs (BranchingType.Labeled): New.
10343         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10344         (FlowBranchingLabeled): New.  Does nothing for now, but will
10345         eventually handle 'goto' flows.
10346         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10347         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10348         that's terminated ...
10349         (Block.Resolve): ... here.
10350
10351         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10352         (UsageVector.MergeFinallyOrigins): Likewise.
10353         (FlowBranching.InTryOrCatch): Likewise.
10354         (FlowBranching.AddFinallyVector): Likewise.
10355         (FlowBranchingException): Update to changes.
10356
10357         Fix #78290
10358         * statement.cs (Return.Resolve): Move error checking to ...
10359         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10360         (FlowBranchingException): Handle return origins like break and
10361         continue origins.
10362         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10363
10364 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10365
10366         A fix for #76122
10367         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10368         filter.
10369
10370 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10371
10372         A fix for #77543
10373         * class.cs (MethodData.Define): Do public accessor check only when method
10374         implements an interface.
10375
10376 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10377
10378         Remove special handling of 'break'
10379         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10380         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10381         (UsageVector.Break): Remove.
10382         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10383         reachability.
10384         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10385
10386         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10387         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10388
10389 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10390
10391         A fix for #75726
10392         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10393         be the interface member.
10394
10395 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10396
10397         A fix for #60069
10398         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10399         for emitting small (int) values.
10400
10401 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10402
10403         Fix #59427
10404         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10405         control-flow passes through the 'finally' after merging-in all the
10406         control-flows from 'try' and the 'catch' clauses.
10407
10408         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10409         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10410         always true at the only non-recursive entry point.
10411         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10412         FlowBranchingBreakable.
10413         (FlowBranchingLoop): Remove.
10414         * statement.cs (Return.DoResolve): Update to changes.
10415
10416         Fix #76471, #76665
10417         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10418         (FlowBranching.CreateBranching): Handle it: create a
10419         FlowBranchingContinuable.
10420         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10421         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10422         except that it handles the 'continue' command.
10423         (FlowBranching.UsageVector.MergeOrigins): Rename from
10424         MergeBreakOrigins.
10425         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10426         except that it overrides AddContinueOrigin.
10427         (FlowBranchingException): Override AddContinueOrigin, similar to
10428         AddBreakOrigin.
10429         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10430         Create a new branching around the embedded statement.
10431         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10432         control flow after the embedded statement.
10433         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10434
10435         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10436         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10437         FlowBranchingBreakable.
10438         (FlowBranchingSwitch): Remove.
10439
10440         Fix test-503.cs
10441         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10442         error reporting to ...
10443         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10444         Rename from 'AddBreakVector'.  Add new location argument.  Return
10445         a bool indicating whether the 'break' crosses an unwind-protect.
10446         (FlowBranchingException.AddBreakOrigin): Add.
10447         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10448         flowbranching after updating with the effects of the 'finally'
10449         clause.
10450         (FlowBranchingBreakable): New common base class for
10451         FlowBranchingLoop and FlowBranchingSwitch.
10452
10453         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10454         embedded statement.
10455         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10456
10457 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10458
10459         * statement.cs (Do.Resolve): If the loop is infinite, set the
10460         barrier.
10461         (While.Resolve, For.Resolve): Set a barrier after the embedded
10462         statement.  There's no direct control flow that goes from the end
10463         of the embedded statement to the end of the loop.
10464         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10465         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10466         above ensure that the reachability is correctly computed.
10467
10468         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10469         (UsageVector.MergeBreakOrigins): If the current path is
10470         unreachable, treat it as if all parameters/locals are initialized.
10471         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10472         infinite loops before merging-in break origins.
10473
10474         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10475         (Reachability.Reachable): Split part into ...
10476         (Reachability.Unreachable): ... this.  Simplify.
10477         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10478
10479         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10480         (Reachability.SetThrowsSometimes): Likewise.
10481         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10482         TriState.Always, use corresponding property.
10483         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10484         (Block.Resolve): Likewise.  Remove some redundant checks.
10485
10486 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10487
10488         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10489         (Reachability.Meet): Don't bother checking AlwaysThrows --
10490         barrier is always set.
10491         (FlowBranchingBlock.Merge): Likewise.
10492
10493 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10494
10495         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10496         checks for unreachable.
10497
10498 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10499
10500         A fix for #77980
10501         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10502
10503         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10504         whether field is really assigned.
10505
10506 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10507
10508         * flowanalysis.cs (Reachability): Make 4-argument constructor
10509         private.
10510         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10511         (Reachability.Always): Rename from the highly misleading
10512         'Reachability.Never'.
10513         (FlowBranching.Merge): Update to changes.  Mark an impossible
10514         situation with a 'throw'.
10515         (*): Update to changes.
10516
10517 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10518
10519         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10520         Remove 'Undefined'.
10521         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10522         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10523         (*): Update to changes.
10524         * statement.cs: Update to changes.
10525
10526 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10527
10528         A fix for #78049
10529         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10530
10531 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10532
10533         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10534         dummy UsageVector.
10535
10536         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10537         argument to two arguments: an usage-vector and a bool.  Move call
10538         to FlowBranching.Merge () ...
10539         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10540
10541         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10542         handling of loop and switch reachability to ...
10543         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10544
10545 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10546
10547         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10548         handling to FlowBranchingLoop.InLoop.
10549         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10550
10551 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10552
10553         A fix for #78115
10554         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10555         anonymous method is allowed from AnonymousContainer here.
10556
10557         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10558
10559 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10560
10561         Fix #78156
10562         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10563
10564 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10565
10566         A fix for #49011.
10567         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10568         (DoubleConstant.Reduce): Ditto.
10569
10570 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10571
10572         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10573         Remove 'lvalue_right_side' argument.  Move parts to ...
10574         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10575         (LocalVariable.DoResolveLValue): ... these.
10576
10577 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10578
10579         Fix cs1655.cs
10580         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10581         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10582         (LocalVariableReference.DoResolveBase): Use it to implement new
10583         CS1655 check.
10584         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10585         (Argument.Resolve): Simplify.  Move CS1510 check ...
10586         * ecore.cs (Expression.ResolveLValue): ... here.
10587         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10588         (PropertyExpr.DoResolveLValue): Likewise.
10589         (FieldExpr.Report_AssignToReadonly): Likewise.
10590         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10591         LValueMemberAccess or LValueMemberOutAccess on instance depending
10592         on it.
10593         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10594         DoResolve as appropriate.
10595
10596 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10597
10598         Fix #75800
10599         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10600         implicit conversions on 'out' and 'ref' arguments.
10601
10602         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10603         improve clarity.  Remove dead code.
10604
10605         Fix #66031
10606         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10607         (Catch.Resolve): Resolve VarBlock if it exists.
10608
10609 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10610
10611         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10612         twice, this was some residual code, the enumerator was emitted
10613         properly in the two branche of if later.
10614
10615 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10616
10617         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10618         cast is never an lvalue.
10619         (Cast.DoResolve, Cast.ResolveRest): Combine.
10620         (Argument.Emit): Simplify slightly.  Move 'Expr is
10621         IMemoryLocation' check ...
10622         (Argument.Resolve): ... here.
10623         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10624
10625         Simplifications.  Fix cs0191-2.cs
10626         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10627         CS1649 and CS1651 to ...
10628         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10629         the actual selection of the error code and message to a lookup
10630         table.  Add a dummy return value to simplify callsites.
10631         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10632         readonly fields of other instances of the same type.  Move CS0197
10633         warning from ...
10634         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10635         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10636         resolution of an out or ref argument.  The code simplification
10637         above uses this invariant.
10638
10639 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10640
10641         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10642         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10643         CheckMarshallByRefAccess.  Drop parameter.
10644         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10645         warning.
10646         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10647         InstanceExpression.
10648         * report.cs (AllWarnings): Add CS1690.
10649         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10650         for ref access too.
10651         (LocalVariableReference.DoResolveBase): Update.
10652
10653 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10654
10655         * class.cs (MethodOrOperator): Moved common parts from method class.
10656         detect obsolete attributes.
10657         (Method.Define): Simplified as it reuses code from base.
10658         (Constructor.ValidAttributeTargets): Fixed issue found during
10659         refactoring.
10660         (Destructor.ValidAttributeTargets): Fixed issue found during
10661         refactoring.
10662         (Operator): Finished refactoring set off by #78020. Operator class is now
10663         ordinary method class.
10664
10665         * anonymous.cs: Updated.
10666
10667         * decl.cs (DeclSpace): Add IsGeneric
10668
10669 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10670
10671         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10672
10673 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10674
10675         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10676         detect obsolete attributes.
10677         (Method.CreateEmitContext): Moved to MethodOrOperator.
10678
10679 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10680
10681         A fix for #78048.
10682         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10683         customized exception to make crash detection easier.
10684         (MethodOrOperator): Started to work on new base class for methods and
10685         operators.
10686         (Method): Derives from MethodOrOperator.
10687         (Constructor.Emit): Emits its own attributes.
10688         (AbstractPropertyEventMethod.Emit): Ditto.
10689         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10690         patch.
10691         (Operator.Emit): It's temporary more tricky than should be.
10692         
10693         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10694
10695         * report.cs (InternalErrorException): Add ctor with inner exception.
10696
10697 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10698
10699         A fix for #76744.
10700         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10701         only not visible.
10702
10703 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10704
10705         A fix for #77916.
10706         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10707         array.
10708
10709 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10710
10711         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10712         attribute is present and Guid not.
10713         (Interface.ApplyAttributeBuilder): Ditto.
10714
10715         * attribute.cs: Add error message.
10716
10717 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10718
10719         A fix for #78020.
10720
10721         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10722         sources (it's composite) so hold them in extra array as they are used in
10723         Emit phase only. It worked in the previous versions by mistake.
10724         (Attribute.Emit): Emit attribute for more owners when exist.
10725
10726         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10727         it has now different behaviour.
10728
10729 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10730
10731         * constant.cs (Constant.IsDefaultInitializer): New method.
10732
10733         * class.cs: Updated.
10734
10735         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10736         re-initialize default values. It saves KBs almost for every assembly.
10737         Thanks Zoltan for the idea.
10738         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10739         (ArrayCreation.DoResolve): Resolve only once.
10740         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10741         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10742
10743 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10744
10745         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10746         From #77961.
10747
10748 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10749
10750         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10751         in an embedded statement too.
10752
10753 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10754
10755         Fix #77958
10756         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10757
10758 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10759
10760         A fix for #77966.
10761
10762         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10763         was not specified.
10764
10765         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10766
10767 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10768
10769         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10770         phase.
10771
10772         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10773         LocalTemporary change.
10774
10775         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10776         TypeContainer.
10777         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10778         initializers optimization.
10779         (ClassOrStruct.TypeAttr): Moved from modifiers.
10780         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10781         (FieldBase.ResolveInitializer): Resolves initializer.
10782         (FieldBase.HasDefaultInitializer): New property.
10783
10784         * cs-parser.jay: Removed message.
10785
10786         * expression.cs (CompilerGeneratedThis): New specialization.
10787
10788         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10789
10790 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10791
10792         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10793
10794 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10795
10796         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10797         be now EnumConstants only.
10798
10799 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10800
10801         * attribute.cs, driver.cs: Reset more caches.
10802
10803 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10804
10805         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10806
10807 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10808
10809         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10810         for easier reuse. Updated all overrides.
10811         (IntegralConstant): New base class for all integral constants.
10812         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10813         of the constant range, report custom error.
10814         (UIntConstant.Reduce): Fixed uint conversion.
10815
10816         * ecore.cs, literal.cs: Reduce updates.
10817
10818 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10819
10820         A fix for #75813.
10821
10822         * class.cs (Constructor.Define): Removed extra if for default ctors.
10823         A patch from Atsushi Enomoto.
10824
10825 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10826
10827         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10828         GetAttributableValue.
10829
10830         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10831         when required.
10832
10833         * convert.cs (ImplicitConversionRequired): Error message moved to
10834         DoubleLiteral.
10835
10836         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10837         automatic implicit conversion of an output value.
10838         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10839
10840         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10841         conversion.
10842         (TypeOf.GetAttributableValue): Add extra handling for object type.
10843
10844         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10845         special error message.
10846
10847 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10848
10849         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10850         InternalCall.
10851         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10852         compatible with MS runtime.
10853
10854 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10855
10856         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10857         attribute arguments here.
10858
10859         * class.cs (Indexer.Define): The check was moved to attribute class.
10860
10861 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10862
10863         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10864         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10865         easier.
10866
10867 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10868
10869         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10870         mcs to keep code differences small.
10871         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10872         * typemanager.cs (parameter_default_value_attribute_type): New.
10873         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10874         CS1908 check.
10875
10876 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10877
10878         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10879
10880 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10881
10882         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10883
10884         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10885         the blocks too.
10886
10887 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10888
10889         * doc-bootstrap.cs : fix build.
10890
10891 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10892
10893         * expression.cs (StringConcat.Append): Issue a warning when empty string
10894         is going to append.
10895
10896 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10897
10898         * assign.cs (CompoundAssign.ResolveSource): Removed.
10899
10900         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10901         clean up.
10902
10903         * class.cs (TypeContainer.FindMethods): Removed.
10904         (TypeContainer.CheckMemberUsage): Made static.
10905
10906         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10907
10908         * constant.cs (CheckRange): Removed unused type argument.
10909         (CheckUnsigned): Removed unused type argument.
10910
10911         * cs-parser.jay: Updated after MemberAccess clean up.
10912         Uses Length for empty string test.
10913
10914         * cs-tokenizer.cs: Uses Length for empty string test.
10915         (IsCastToken): Made static.
10916         (is_hex): Made static.
10917         (real_type_suffix): Made static.
10918
10919         * decl.cs (SetupCache): Made static.
10920         (OnGenerateDocComment): Removed unused ds argument.
10921
10922         * delegate.cs (VerifyDelegate): Removed unused argument.
10923
10924         * doc.cs: Uses Length for empty string test.
10925
10926         * driver.cs: Uses Length for empty string test.
10927
10928         * enum.cs (IsValidEnumType): Made static
10929
10930         * expression.cs (EnumLiftUp): Removed unused argument.
10931         (ResolveMethodGroup): Ditto.
10932         (BetterConversion): Ditto.
10933         (GetVarargsTypes): Ditto.
10934         (UpdateIndices): Ditto.
10935         (ValidateInitializers): Ditto.
10936         (MemberAccess.ctor): Ditto.
10937         (GetIndexersForType): Ditto.
10938
10939         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10940
10941         * iterators.cs: Updated after MemberAccess clean up.
10942
10943         * location.cs: Uses Length for empty string test.
10944
10945         * namespace.cs: Uses Length for empty string test.
10946
10947          * report.cs (CheckWarningCode): Made static.
10948
10949         * statement.cs (LabeledStatement): Removed unused argument.
10950
10951         * typemanager.cs (FilterNone): Removed.
10952
10953 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10954
10955         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10956         obsolete.
10957
10958         * class.cs: Updated.
10959
10960 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10961
10962         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10963
10964 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10965
10966         A fix for #77822.
10967
10968         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10969         reporting, it's more tricky than I thought.
10970
10971 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10972
10973         A fix for #77816.
10974
10975         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10976         host container.
10977         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10978         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10979         Add more error reporting; Fixed issue with params.
10980
10981         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10982
10983         * cs-parser.jay: AnonymousMethod requires host container.
10984
10985         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10986
10987 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10988
10989         * class.cs: Change 'TypeContainer ds' constructor argument to
10990         'DeclSpace parent'.  Some classes were missed below due to
10991         different naming convention.
10992
10993         * class.cs (MemberCore.Parent): Delete.  This makes the
10994         ParentContainer changes below enforceable by the compiler.
10995
10996         Treat pointers to enclosing declaration space as 'DeclSpace', not
10997         'TypeContainer'.
10998         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10999         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
11000
11001         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
11002         of TypeContainer.
11003         (Block.AddThisVariable): Likewise.
11004         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
11005         (AbstractPropertyEventMethod.Emit): Likewise.
11006         (AbstractPropertyEventMethod.EmitMethod): Likewise.
11007         (GetMethod.Define, SetMethod.Define): Likewise.
11008         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
11009         (DelegateMethod.EmitMethod): Likewise.
11010
11011         Fix regression test-partial-13.cs.
11012         Rationalize use of PartialContainer.  Ensure that the partial
11013         class semantics can be tied to type-correctness, i.e., any
11014         violation will cause a compile error.
11015         * class.cs, const.cs: Access all fields that belong to class
11016         TypeContainer via ParentContainer.  Arguments of EmitContexts and
11017         Resolve()-like functions still use 'Parent'.
11018
11019         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
11020         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
11021         (PropertyMethod.CheckModifiers): Remove unused argument.
11022         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
11023         DeclSpace.
11024
11025 2006-03-17  Raja R Harinath  <harinath@gmail.com>
11026
11027         Make semantics of PartialContainer simpler.
11028         * decl.cs (DeclSpace.IsPartial): Remove.
11029         * class.cs (TypeContainer.IsPartial): Likewise.
11030         (TypeContainer..ctor): Set PartialContainer to point to self.
11031         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
11032         (TypeContainer.FindNestedType): Likewise.
11033         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
11034
11035 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
11036
11037         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
11038
11039 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11040
11041         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
11042         classes.
11043
11044 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11045
11046         * class.cs (Operator.Define): An error for base conversion was not
11047         reported correctly.
11048
11049 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
11050
11051         * iterator.cs : yield break is allowed in try statement which has
11052           catch clauses. Fixed bug #77767.
11053
11054 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
11055
11056         A fix for #77593, #77574.
11057
11058         * class.cs (MethodCore.CheckBase): Another if for operator.
11059
11060 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
11061
11062         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
11063         were not resolved
11064
11065         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
11066         (DelegateCreation.ImplicitStandardConversionExists): New method for just
11067         conversion test.
11068         
11069         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
11070         not needed.
11071
11072         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
11073         Updated after another emitcontext usage was clean up. It should help us to
11074         synchronize with gmcs easier.
11075
11076 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
11077
11078         A fix for #77353.
11079
11080         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
11081         (Event.Define): ditto
11082         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
11083
11084         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
11085         Removed redundant code and set NewSlot for Invoke method too.
11086
11087         * parameter.cs (Parameters.ctor): Add custom, type ctor.
11088         (Parameters.MergeGenerated): New method. Use this method when you merge
11089         compiler generated argument with user arguments.
11090
11091 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
11092
11093         * attribute.cs (ResolveAsTypeTerminal): Removed.
11094
11095         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
11096         specialization for predefined types; 30% speed up.
11097         Finally placed obsolete check to right place.
11098         (Expression.ResolveType): Removed.
11099
11100         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
11101         Updated after ResolveType was removed.
11102
11103         * expression.cs (Cast.ctor): Check void cast.
11104         (Binary.ResolveAsTypeTerminal): Is never type.
11105         (Conditional.ResolveAsTypeTerminal): Is never type.
11106
11107         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
11108
11109 2006-03-01  Raja R Harinath  <rharinath@novell.com>
11110
11111         Fix #77679.
11112         * expression.cs (ParameterReference.DoResolveBase): Change return
11113         type to bool.
11114         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
11115         Update.
11116
11117         Fix #77628.
11118         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
11119
11120         Fix #77642.
11121         * typemanager.cs (GetFullNameSignature): Don't nullref on
11122         protected accessors.
11123
11124 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
11125
11126         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
11127         these two separated members to simplify the code.
11128         (Attribute.Resolve): Refactored to use new fields and methods.
11129         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
11130         implemented obsolete attribute checking.
11131         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
11132         implemented obsolete checking again. It look line never ending quest ;-)
11133         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
11134
11135         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
11136
11137         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
11138
11139         *class.cs (Property.Define): Add RegisterProperty call.
11140
11141         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
11142         argument groups (only 2).
11143
11144         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
11145         encoding expression to arguments.
11146         (Expression.ExprClassToResolveFlags): Just turned to property.
11147
11148         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
11149         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
11150         optimized as well as implemented support for zero-length attributes.
11151
11152         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
11153         Add caching of PropertyInfo's.
11154
11155 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11156
11157         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
11158         error multiple times.
11159
11160 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11161
11162         New partial class implementation.
11163         A fix for #77027, #77029, #77403
11164
11165         * attribute.cs (Attributable): Made attributes protected.
11166
11167         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
11168         the replacements of ClassPart and PartialContainer.
11169         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
11170         (TypeContainer.AddInterface): Ditto.
11171         (TypeContainer.AddPartial): The main method for partial classes. It checks
11172         for errors and merges ModFlags and attributes. At the end class is added to
11173         partial_parts list.
11174         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
11175         required here.
11176         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
11177         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
11178         from the rest of partial classes.
11179         (TypeContainer.GetClassBases): Simplified.
11180         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
11181         DefineType.
11182         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
11183         (TypeContainer.HasExplicitLayout): Uses Flags now.
11184         (PartialContainer): Removed.
11185         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
11186         (StaticClass): Was merged with Class.
11187         (Class.GetClassBases): class and static class bases are verified here.
11188         (Class.TypeAttr): Added static attributes when class is static.
11189         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11190         (MemberBase): In some cases we need to call parent container for partial
11191         class. It should be eliminated but it's not easy now.
11192
11193         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11194
11195         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11196         partial classed to accumulate class comments.
11197         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11198
11199         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11200
11201         * driver.cs (MainDriver): Tree.GetDecl was removed.
11202
11203         * modifiers.cs (Modifiers): Add partial modifier.
11204
11205         * tree.cs (Tree.decl): Removed.
11206         (RootTypes): Started to use this class more often for root types
11207         specializations.
11208
11209 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11210
11211         A fix for #77615
11212
11213         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11214         external interface does not have an attribute.
11215
11216 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11217
11218         Another prerequisites for new partial classs implementation.
11219         
11220         * attribute.cs (Attribute.Equal): Implemented.
11221         (Attribute.Emit): Changed as attributes can be applied more than twice.
11222         (Attributes.Emit): Check for duplicate attributes here.
11223
11224         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11225         as a parameter, clean-up.
11226
11227 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11228
11229         A fix for #77485
11230
11231         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11232         contains obsolete attribute check which can in some cases look for base
11233         type of current class which is not initialized yet.
11234         (TypeContainer.BaseType): Replacement of ptype.
11235
11236         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11237
11238 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11239
11240         First of prerequisites for new partial classs implemention.
11241         
11242         * attribute.cs (Attributable): Extended by ResolveContext;
11243         Attributes finally have correct context for resolving in all cases.
11244         (AttachTo): Attribute owner is assigned here.
11245
11246         * codegen.cs (IResolveContext): Introduce new interface to hold
11247         all information needed in resolving phase.
11248         (EmitContext): Implements IResolveContext; more clean-up needed here.
11249         
11250         * decl.cs (MemberCore): Implemented IResolveContext.
11251
11252         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11253         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11254         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11255         Refactored to use new IResolveContext instead of EmitContext; cleanup
11256
11257 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11258
11259         * codegen.cs (EmitScopeInitFromBlock): check here the
11260         capture_context, there is no need to make two calls to the
11261         EmitContext. 
11262
11263         * anonymous.cs: Add some debugging messages that might help me
11264         track other instances of this problem in the future (the
11265         regression of test 467).
11266
11267         * cs-parser.jay: track the variable block, as we need to initalize
11268         any captured variables declared in this block for the "catch"
11269         portion of the "Try" statement.
11270
11271         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11272         scope initialization for captured variables. 
11273
11274         Also, move the emit for the variables after the block location has
11275         been marked.
11276
11277 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11278
11279         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11280
11281 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11282
11283         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11284         commit yesterday, the initialization for the roots is necessary.
11285         What is not necessary is the scope activation.
11286
11287 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11288
11289         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11290         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11291         CS0206 checks.
11292         (Argument.Resolve): Remove CS0206 checks.
11293
11294 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11295
11296         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11297         scopes for all the roots, the scopes will now be emitted when the
11298         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11299
11300         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11301         code.  This reduces a lot of existing cruft.
11302         
11303         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11304         that the ScopeInfo is generated as we enter the scope, not at the
11305         time of use, which is what we used to do before.
11306
11307         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11308         every time a Block is about to be emitted if we have a
11309         CaptureContext. 
11310
11311 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11312
11313         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11314         (Reset): Update.
11315         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11316
11317         * typemanager.cs (cons_param_array_attribute): Make private.
11318         (Reset): Set it to null.
11319         (InitCoreHelpers): Don't initialize it.
11320         (ConsParamArrayAttribute): New.  Initialize it as needed.
11321         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11322
11323 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11324
11325         * expression.cs: There might be errors reported during the
11326         selection of applicable methods.  If there are errors, do not
11327         continue execution as it will lead the compiler to crash.
11328
11329 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11330
11331         * expression.cs: Member access is not allowed on anonymous
11332         methods.  Fixes #77402.
11333
11334 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11335
11336         Fix #77401
11337         * cs-parser.jay (VariableDeclaration): Don't set
11338         current_array_type to null.
11339         (field_declaration, event_declaration, declaration_statement):
11340         Set it to null here.
11341
11342 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11343
11344         * typemanager.cs (GenericParameterPosition): New.
11345         * doc.cs: Use it.
11346
11347 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11348
11349         * doc.cs : To process "include" elements, first we should create
11350           another list than XmlNodeList, because it could result in node
11351           removal, which could result in that the XmlNodeList gives up
11352           yielding next node.
11353
11354           (Also made code identical to gmcs again.)
11355
11356 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11357
11358         * ecore.cs: Introduce an error report that we were not catching
11359         before, if not silent, we must report the error.  Gonzalo ran into
11360         it.
11361
11362 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11363
11364         A fix for bug: #76957
11365         
11366         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11367         ComputeMethodHost before creating the method, this is a new
11368         requirement. 
11369
11370         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11371         that this method references (RegisterScope).  The actual scope
11372         where the method is hosted is computed with the ComputeMethodHost
11373         before we create the method.
11374
11375         Moved the Deepest routine here.
11376
11377         (AnonymousContainer.ComputeMethodHost): New routine used to
11378         compute the proper ScopeInfo that will host the anonymous method.
11379
11380         (ScopeInfo): Deal with multiple roots.  The problem was that we
11381         did not have a unique root where all ScopeInfos could be hanged
11382         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11383         of roots.  
11384
11385         Remove AdjustMethodScope which is now computed at the end.  Remove
11386         LinkScope which did a partial link, instead link all ScopeInfos
11387         before code generation from the new "LinkScopes" routine. 
11388
11389         Simplify all the Add* routines as they no longer need to maintain
11390         the tree, they just need to record that they are using variables
11391         from a ScopeInfo.
11392
11393         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11394         routines to produce the forest of ScopeInfo trees.
11395
11396         * class.cs (TypeContainer.AppendMethod): This is just like
11397         AddMethod, but ensures that an interface implementation method
11398         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11399         methods, but at the end.
11400
11401         We use this functionality to ensure that the generated MoveNext
11402         method in the iterator class is resolved/emitted before the
11403         enumerator methods created.   
11404
11405         This is required because the MoveNext method computes the right
11406         ScopeInfo for the method.  And the other methods will eventually
11407         need to resolve and fetch information computed from the anonymous
11408         method. 
11409
11410 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11411             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11412
11413         Fix rest of #76995.
11414         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11415         the 'aliases' hash.
11416         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11417         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11418
11419 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11420
11421         Fix #76656, cs0231-2.cs.
11422         * cs-parser.jay (formal_parameter_list): Make error case catch
11423         more issues.
11424         (parenthesized_expression_0): Add CS1026 check.
11425         (invocation_expression): Remove unused { $$ = lexer.Location }.
11426
11427 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11428
11429         Fix #76824.
11430         * cs-parser.jay (statement_expression): Don't list out the
11431         individual statement-expressions.  Convert syntax error into
11432         CS0201 check.
11433
11434 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11435
11436         Fix #76874.
11437         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11438         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11439         CheckIntermediateModification.
11440         (FieldExpr.DoResolve): Add new two-argument version that
11441         allows us to resolve the InstanceExpression as an lvalue.
11442         The one-argument variant is now just a wrapper.
11443         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11444         Resolve the lhs as an lvalue if the it has a value type.
11445         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11446         from Assign.DoResolve.
11447         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11448         resolved as an lvalue.
11449         (PropertyExpr.DoResolve): Update.
11450         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11451         has a value type.  Move CS1612 check here from
11452         CheckIntermediateModification.
11453         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11454         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11455         'right_side' of a ResolveLValue on an 'out' argument.
11456         (EmptyExpression.LValueMemberAccess): New.  Used as the
11457         'right_side' of a propagated ResolveLValue on a value type.
11458         (LocalVariableReference.DoResolveBase): Recognize
11459         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11460         Add CS1654 check.
11461         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11462         EmptyExpression.Null.
11463
11464 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11465
11466         * typemanager.cs : added IsGenericParameter(). In mcs it always
11467           return false.
11468         * doc.cs : for generic parameters, use GenericParameterPosition,
11469           not FullName.
11470
11471 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11472
11473         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11474
11475 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11476
11477         This fixes the problem where we used ldfld instead of ldflda to
11478         load the "THIS" pointer on captured parameters, when THIS is a
11479         value type.  See bug #77205.
11480         
11481         * iterators.cs (CapturedThisReference.Emit): Pass false to
11482         EmitThis (we do not need the address).
11483
11484         * codegen.cs (EmitThis): it needs to know whether we need the
11485         address of `this' or not.  This is used by value types.  
11486
11487         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11488         every other call passes false.
11489
11490 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11491
11492         Fix #77221.
11493         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11494         GetOverride.
11495         * expression.cs (Invocation.OverloadResolve): Update.
11496         (Invocation.DoResolve): Avoid double resolution of invocation.
11497
11498 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11499
11500         Fix #77180.
11501         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11502         unary negation of floating point types as 0-expr; negation cannot
11503         overflow in floating point types.
11504
11505         Fix #77204.
11506         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11507         on operands of 'void' type.
11508
11509         Fix #77200.
11510         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11511         and ExclusiveOr for boolean constants too.
11512
11513 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11514
11515         Fix #75636.
11516         * expression.cs (Invocation.OverloadResolve): Replace reflected
11517         override methods with their base virtual methods, rather than
11518         skipping over them.
11519         * typemanager.cs (TypeManager.GetOverride): New.
11520
11521 2006-01-05  Jb Evain  <jbevain@gmail.com>
11522
11523         * class.cs (Property.Define, Indexer.Define): do not tag the
11524         properties as SpecialName | RTSpecialName.
11525
11526 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11527
11528         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11529         doing a low-level comparission of parameter types.  It was lacking
11530         a check for __argslist. 
11531
11532 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11533
11534         * expression.cs (ParameterReference.DoResolveBase): Allow
11535         reference parameters if they are local to this block. 
11536
11537         This allows the ref and out parameters of a delegate to be used in
11538         an anonymous method, for example:
11539
11540         delegate void set (out int x);
11541
11542         set s = delegate (out int x){
11543                 x = 0;
11544         };
11545
11546         This is used by functionality introduced late in the C# language.
11547         
11548         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11549         method that take ref and out parameters. 
11550
11551         Fixes #77119 which was a late change in the spec.
11552
11553 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11554
11555         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11556         parent if its the same scope.  Fixes #77060.
11557
11558 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11559
11560         * driver.cs: Report the case of no source files and no -out:
11561         argument provided.
11562
11563 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11564
11565         Fix #77035.
11566         * expression.cs (ComposedCast.GetSignatureForError): Define.
11567
11568 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11569
11570         Fix #76995
11571
11572         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11573         ListDictionary, to contain the ExternAliasEntry entries (in
11574         addition to the NamespaceEntry.aliases hashtable). This field is
11575         shared between the original entry and its doppelganger (bodyless 
11576         copy of it).
11577         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11578         extern_aliases field.
11579         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11580         lookup in extern_aliases.
11581
11582 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11583
11584         Fix #77006.
11585         * class.cs (TypeContainer.Mark_HasEquals): New.
11586         (TypeContainer.Mark_HasGetHashCode): New.
11587         (ClassPart): Override them.
11588         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11589
11590         Fix #77008.
11591         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11592         'parent' argument to the base constructor.
11593
11594         Remove all mention of TypeContainer from decl.cs.
11595         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11596         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11597         (DeclSpace.DeclSpace): Likewise.
11598         (DeclSpace.DefineMembers): Remove unused argument.
11599         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11600         debugging check -- we don't care if the debug code throws an
11601         InvalidCastException instead of an InternalErrorException.
11602         * class.cs (TypeContainer.DefineMembers): Update to changes.
11603         (TypeContainer.DoDefineMembers): Likewise.
11604         (TypeContainer.GetMethods): Likewise.
11605         (PropertyMember.Define): Likewise.
11606         (MemberBase.Parent): New property that forwards to
11607         MemberCore.Parent, but ensures that we get a TypeContainer.
11608         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11609         (RootContext.PopulateTypes): Likewise.  Remove special case code
11610         for !RootContext.StdLib: DefineMembers is idempotent.
11611
11612 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11613
11614         * convert.cs (ExplicitConversionCore): Check the return value from
11615         ExplicitConversionCore which can return null on failure.  Fixes #76914
11616
11617 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11618
11619         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11620
11621 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11622
11623         * doc.cs : The search for referenced namespace was insufficient to
11624           get global one as it used to do. Fixed bug #76965.
11625
11626 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11627
11628         * doc.cs : check name in cref in the last phase that whether it is
11629           namespace or not.
11630
11631 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11632
11633         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11634           Mono.C5.
11635
11636 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11637
11638         * doc.cs : so it turned out that we cannot skip override check for 
11639           interface members. Fixed bug #76954.
11640
11641 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11642
11643         * cs-tokenizer.cs : fixed bug #75984:
11644           - #warning and #error should not be handled when the source line
11645             is disabled.
11646           - #line is not checked strictly when the source line is disabled.
11647           - #define and #undef is on the other hand checked strictly at any
11648             state.
11649
11650 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11651
11652         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11653           CS1027 report.
11654
11655 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11656
11657         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11658
11659         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11660         event initializers.
11661         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11662         (FieldBase.Initializer): Initializer is now optional.
11663         (EventField.Define): Only event field can have initializer.
11664
11665         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11666
11667         * const.cs (Const): Reuse initializer.
11668
11669         * cs-parser.jay: Updated after FieldBase changes.
11670         Added current_array_type to simplify array initializers.
11671
11672         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11673
11674         * expression.cs, iterators.cs: Updated.
11675
11676         * namespace.cs (NamespaceEntry): Made UsingFound private.
11677
11678 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11679
11680         * parameterCollection.cs: Obsolete, removed.
11681         * parser.cs: Obsolete, removed.
11682
11683 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11684
11685         Fix #76849.
11686         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11687
11688         * enum.cs (Enum.Define): Set obsolete context here.
11689
11690 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11691
11692         * doc.cs :
11693           - FindDocumentedMember() now expects 1) paramList as null
11694             when "we don't have to check the number of parameters" and
11695             2) Type.EmptyTypes when "there is no arguments".
11696           - Introduced FoundMember struct to hold the exact type which was
11697             used to find the documented member (the above change broke
11698             test-xml-044; it might be better just to use DeclaringType than
11699             what MS does, like this change does, but it depends on usage.)
11700
11701 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11702
11703         * doc.cs : documented member might be from DeclaringType for nested
11704           types. Fixed bug #76782.
11705
11706 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11707
11708         * anonymous.cs: Have the param code handle leaving copies on the
11709         stack etc. Allows anonymous params to take part in the assignment
11710         code (++, +=, etc). Fixes bug #76550
11711
11712         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11713         it down to the anon code.
11714
11715         * iterators.cs: Use dummy var here
11716
11717         * codegen.cs: Handle new vars
11718
11719 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11720
11721         Fix #76849.
11722         * class.cs (MethodData.Define): Set proper Obsolete context.
11723
11724         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11725         obsolete context.
11726         (FieldExpr.DoResolve): Ditto.
11727
11728 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11729
11730         Fix #76849.
11731         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11732         parent is not obsolete.
11733
11734 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11735
11736         * doc.cs : (FindDocumentedMember) find parameterless members first
11737           and get CS0419 in the early stage. Fixed first case of bug #76727.
11738
11739 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11740
11741         Fix #76859.
11742         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11743         no error was reported.
11744
11745         *expression.cs (Binary.DoResolve): left can be null.
11746
11747 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11748
11749         Fix #76783.
11750         * class.cs (MethodData.Emit): Parameters should be labeled first.
11751
11752 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11753
11754         Fix #76761.
11755         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11756
11757 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11758
11759         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11760
11761         * class.cs (MethodCore): Parameter clean up.
11762         (IMethodData): Added ParameterInfo.
11763         (MethodData): Parameter clean up.
11764         (Indexer.Define): Parameter clean up.
11765
11766         * anonymous.cs,
11767         * codegen.cs,
11768         * cs-parser.jay,
11769         * decl.cs,
11770         * doc.cs,
11771         * ecore.cs,
11772         * flowanalysis.cs,
11773         * iterators.cs,
11774         * pending.cs,
11775         * statement.cs,
11776         * typemanager.cs: Parameter clean up.
11777
11778         * delegate.cs (Define): Get rid of duplicated code.
11779
11780         * expression.cs (ParameterReference): Removed useless parameters
11781         and simplified.
11782         (Invocation): Ditto.
11783
11784         * parameter.cs (ParamsParameter): New class, params specialization.
11785         (ArglistParameter): Attemp to separate arglist.
11786         (Parameter): Refactored to be reusable and faster.
11787         (Parameter.Modifier): Made understandable.
11788         (Parameters): Changed to be used as a class for `this' assembly
11789         parameters. Refactored to use new specialized classes.
11790
11791         * support.cs (ParameterData): Added Types property.
11792         (InternalParameters): Deleted.
11793
11794 2005-08-20  Martin Baulig  <martin@ximian.com>
11795
11796         Merging this patch from GMCS to fix #75867.
11797
11798         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11799         scope if we don't already have it.
11800
11801 2005-11-17  Martin Baulig  <martin@ximian.com>
11802
11803         * anonymous.cs
11804         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11805         inherit the scope from our parent.  Fixes #76653.
11806
11807 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11808
11809         * doc.cs : the previous patch does not actually fix the bug.
11810           PropertyInfo override check is now implemented and really fixed it.
11811         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11812
11813 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11814
11815         * doc.cs : apply "override filter" also to properties.
11816           Fixed bug #76730.
11817
11818 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11819
11820         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11821           no need to check overrides. For classes, omit those results from 
11822           interfaces since they must exist in the class. Fixed bug #76726.
11823
11824 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11825
11826         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11827           with different parameters. Fixed the second problem in #76685.
11828
11829 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11830
11831         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11832           get expected 'protected' access in CheckValidFamilyAccess()).
11833           Fixed bug #76692.
11834
11835 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11836
11837         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11838           Fixed bug #76705.  CS1569 was incorrectly commented out.
11839
11840 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11841
11842         * doc.cs : use Invocation.IsOverride() to do real override check.
11843         * expression.cs : made Invocation.IsOverride() internal.
11844
11845 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11846
11847         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11848           TypeBuilder.FindMembers() and filter overriden base members out.
11849           Fixed bug #76990.
11850
11851 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11852
11853         * doc.cs : ref/out parameters are represented as '@' (instead of
11854           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11855
11856 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11857
11858         * doc.cs : when there was no '.' in cref to methods in doc comment,
11859           then parameters were missing in the output. Fixed bug #76691.
11860
11861 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11862
11863         * driver.cs : don't output docs when there is an error.
11864           Fixed bug #76693.
11865
11866 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11867
11868         * doc.cs :
11869           Now it should detect indexers. Fixed primary concern in bug #76685.
11870           Fixed CS0419 message to not show the identical member signature in
11871           the message.
11872
11873 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11874
11875         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11876           instead of Type.FindMembers() since it does not handle events.
11877           Fixed bug #71604.
11878
11879 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11880
11881         * codegen.cs: Fixed typo (speficied -> specified).
11882
11883 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11884
11885         Fix #76369.
11886         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11887
11888 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11889
11890         * attribute.cs: Changed error message.
11891
11892         * cs-tokenizer.cs: One more check.
11893
11894 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11895
11896         * statement.cs (Block.Resolve): Ignore empty statement.
11897
11898 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11899
11900         * report.cs: Made error/warning methods more strict to avoid
11901         their misuse.
11902
11903         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11904         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11905         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11906         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11907
11908 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11909
11910         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11911         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11912
11913         * class.cs (TypeContainer.IsComImport): New property.
11914         (Constructor.Define): Create proper ctor for ComImport types.
11915
11916         * expression.cs (New.CheckComImport): Fixed.
11917
11918 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11919
11920         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11921         that a parameter has been captured does not mean that we do not
11922         have to do the rest of the processing.  This fixes the second part
11923         of #76592.  If there was another anonymous method capturing
11924         values in the past, the Scope would never be set for the second
11925         method that captured the same parameter.
11926
11927         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11928         properly manipulate the stack.   Second part of fix for #76592.
11929
11930         * expression.cs (New): Add support for invoking "new" on
11931         interfaces that have been flagged with the ComImport attribute and
11932         the CoClass.  Fixes #76637 
11933
11934         * statement.cs (Try.DoEmit): When a variable is captured, do not
11935         try to emit the vi.LocalBuilder variable as it has been captured.
11936         Create a temporary variable and store the results on the
11937         FieldBuilder.  Fixes #76642
11938
11939 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11940
11941         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11942
11943         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11944
11945         * expression.cs (Binary.DoResolve): Added && optimalization.
11946     
11947         * typemanager.cs (AddUserType): Removed useless argument.
11948
11949 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11950
11951         * statement.cs (Block.variables): Uses ListDictionary.
11952
11953 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11954
11955         Fix #75969.
11956         * class.cs (PartialContainer.EmitType): Customized to emit
11957         security attributes.
11958         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11959         for partial classes.
11960
11961 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11962
11963         Fix #76599.
11964         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11965         access has to be fixed.
11966         
11967         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11968
11969 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11970
11971         Fix #76590.
11972         * ecore.cs (NullCast.Reduce): Implemented.
11973
11974         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11975         constant type.
11976         
11977         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11978         properly.
11979         (Foreach.Resolve): Catch null properly.
11980
11981 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11982  
11983         * cs-tokenizer.cs: Warning text fix.
11984
11985         * driver.cs: AllWarningNumbers exposed on public interface.
11986
11987         * report.cs (): Reviewed warning numbers.
11988         (IsValidWarning): Use binary search.
11989
11990 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11991  
11992         * driver.cs: Implemeted resource visibility.
11993         (Resources): New class for code sharing between /res: and
11994         /linkres:
11995  
11996 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11997
11998         Fix #76568.
11999         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
12000         folding.
12001         
12002         * convert (Convert.ImplicitReferenceConversion): NullCast holds
12003         contants only.
12004         
12005         * ecore.cs (NullCast): Child is contant only.
12006         
12007         * literal.cs (NullLiteral.Reduce): null can be converted to any
12008         reference type.
12009
12010 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
12011
12012         * driver.cs: Use Encoding.Default as default code page instead
12013           of ISO-28591.
12014
12015 2005-10-27  Raja R Harinath  <rharinath@novell.com>
12016
12017         Fix #76085.
12018         * expression.cs (Invocation.Error_InvalidArguments): Handle
12019         __arglist parameters.
12020         (Invocation.VerifyArgumentsCompat): Likewise.
12021         * support.cs (ReflectionParameters.GetSignatureForError): Print
12022         __arglist parameters.
12023         (InternalParamters.GetSignatureForError): Likewise.
12024         * parameter.cs (Parameters.GetSignatureForError): Likewise.
12025
12026 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
12027
12028         * attribute.cs (GetPropertyValue): Made public.
12029
12030         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
12031         Resolve.
12032         Add new property WrapNonExceptionThrows to handle 2.0 assembly
12033         attribute.
12034         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
12035         is not defined.
12036         
12037         * driver.cs: Reflect method name change.
12038         
12039         * statement.cs (Try.Resolve): Warn when try has both general
12040         exception handlers.
12041         
12042         * typemanager.cs: runtime_compatibility_attr_type new predefined
12043         type.
12044
12045 2005-10-26  Raja R Harinath  <harinath@gmail.com>
12046
12047         Fix #76419.
12048         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
12049         treat it as an empty parameter list.
12050
12051 2005-10-26  Raja R Harinath  <rharinath@novell.com>
12052
12053         Fix #76271.     
12054         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
12055         ResolveAsTypeStep silent.
12056         * statement.cs (Block.AddConstant): Mark block as used.
12057         (Block.ResolveMeta): Avoid piling on error messages
12058         if a constant initializer resolution fails.
12059
12060 2005-10-25  Raja R Harinath  <rharinath@novell.com>
12061
12062         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
12063         Remove.
12064         (NamespaceEntry.VerifyAllUsing): New.
12065         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
12066         behaviour.  Delegates actual resolution of alias to ...
12067         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
12068         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
12069         Update.
12070         * driver.cs (Driver.MainDriver): Update.
12071         
12072         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
12073         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
12074         property.
12075         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
12076         Remove.
12077         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
12078         RootNamespace.DefineNamespacesForAll.
12079
12080 2005-10-24  Raja R Harinath  <harinath@gmail.com>
12081
12082         * typemanager.cs (assemblies, external_aliases, modules)
12083         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
12084         (ComputeNamespaces, GetRootNamespace): Remove extra staging
12085         overhead.  Move resposibility ...
12086         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
12087         * driver.cs, attribute.cs, codegen.cs: Update to changes.
12088
12089 2005-10-23  Raja R Harinath  <harinath@gmail.com>
12090
12091         * namespace.cs (RootNamespace.all_namespaces): Renamed from
12092         cached_namespaces.  Improve usage.
12093         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
12094         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
12095         Move from GlobalRootNamespace and simplify.
12096         (RootNamespace.Global): Make instance variable.
12097         (RootNamespace.RootNamespace): Add "alias name" parameter.
12098         (GlobalRootNamespace): Simplify drastically.
12099         (Namespace.Lookup): Don't use GetNamespace.
12100         * typemanager.cs (GetRootNamespace): Rename from
12101         ComputeNamespaceForAlias.
12102         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
12103
12104 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12105
12106         * anonymous.cs (AnonymousContainer): Don't crash when container
12107         doesn't exist.
12108
12109 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12110
12111         * expression.cs (Binary.DoResolve): Warn when comparing same
12112         values.
12113
12114 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12115
12116         Fix #76486.
12117         * expression.cs (Binary.DoResolve): It looks like there are no
12118         convetsion rules in enum context.
12119
12120 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
12121
12122         Add support for extern alias qualifiers.
12123         * typemanager.cs: Move some LookupTypeReflection code
12124         to namespace.cs, to have cleaner code. Added some methods
12125         to help us keep track of the extern aliased references.
12126         * driver.cs: Add suport for extern alias assemblies on command
12127         line and check for their warnings/errors. Also keep track of the
12128         extern aliased assemblies.
12129         * namespace.cs: Move the global functionality of Namespace
12130         to GlobalRootNamespace/RootNamespace. Now the global namespace
12131         is GlobalRootNamespace.Globa. Also the code moved from 
12132         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
12133         Finally added LocalAliasEntry (AliasEntry before) and
12134         ExternAliasEntry, to handle alias statements.
12135         * cs-parser.jay: Add support in the grammar for extern alias
12136         statement.
12137         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
12138         Update callings to Namespace (now in GlobalRootNamespace).
12139
12140 2005-10-18  Raja R Harinath  <rharinath@novell.com>
12141
12142         Fix #76371.
12143         * class.cs (TypeContainer.DefineType): Move updating of
12144         topological sort earlier in the code.
12145         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
12146
12147 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
12148
12149         Fix #76273.
12150         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
12151         
12152         * constant.cs (Constant.TryReduce): Moved from Cast class.
12153         (Reduce): Made little bit more OO and fixed missing conversions.
12154         
12155         * ecore.cs (Reduce): Implemented.
12156         (Binary.EnumLiftUp): New method to upgrade values to enum values.
12157         
12158         * literal.cs (Reduce): Implemented.
12159         
12160         * class.cs: Reverted Miguel's wrong commit.
12161
12162 2005-10-14  Miguel de Icaza  <miguel@novell.com>
12163
12164         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
12165
12166 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
12167
12168         * cs-parser.jay, expression.cs : CS0214 was missing error location
12169           for constants. Fixed bug #76404.
12170
12171 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
12172
12173         Fix #76370.
12174         * convert.cs (ExplicitConversionCore): Fixed object->enum
12175         conversion.
12176
12177 2005-10-10  Raja R Harinath  <rharinath@novell.com>
12178
12179         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
12180         InstanceExpression.
12181         (PropertyExpr.EmitCall): Likewise.
12182         * expression.cs (Invocation.EmitArguments): Handle case where
12183         arguments == null.
12184         (Invocation.EmitCall): Avoid allocating temporary variable if
12185         there are no arguments.
12186
12187 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12188
12189         Fix #76323.
12190         * convert.cs (ImplicitConversionStandard): Move conversion of
12191         void* to arbitrary pointer types ...
12192         (ExplicitConversionStandard): .. here.
12193         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12194         error to always print typenames.
12195
12196 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12197
12198         * convert.cs (GetConversionOperator): Rename from
12199         GetConversionOperators.  Move operator selection code from ...
12200         (UserDefinedConversion): ... here.
12201
12202 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12203
12204         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12205         conversion.
12206
12207 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12208
12209         * assign.cs (Assign.DoResolve): Error method changed.
12210
12211         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12212         
12213         * const.cs (ResolveValue): Reset in_transit immediately.
12214         
12215         * constant.cs: Error method changed.
12216         
12217         * convert.cs: Removed useless location parameter.
12218         (ExplicitNumericConversion): Don't do double enum check.
12219         (ExplicitConversionCore): Renamed from ExplicitConversion.
12220         (ExplicitUnsafe): Extracted from ExplicitConversion.
12221         (ExplicitConversion): Uses for error reporting.
12222         
12223         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12224         error messages.
12225         (ResolveBoolean): Uses common error method.
12226         (CastToDecimal): Get rid of ec.
12227         (CastFromDecimal): Optimized.
12228         (ConvCast): Get rid of ec.
12229         
12230         * enum.cs (ResolveValue): Reset in_transit immediately.
12231         (Emit): Return after first error.
12232         
12233         * expression.cs: Convert changes.
12234         
12235         * literal.cs: Error method changed.
12236         
12237         * statement.cs: Error method changed.
12238
12239 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12240
12241         * support.cs (SeekableStreamReader.Position): Don't error out when
12242         the requested position is just beyond the end of the current
12243         buffered data.
12244
12245 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12246
12247         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12248         try to keep in sync with the byte count of the underlying Stream.
12249         However, this limits us to a window size of 2048 characters: i.e.,
12250         the maximum lookahead of our lexer/parser can be 2048 characters.
12251
12252 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12253
12254         Fix #76255.
12255         * driver.cs: Fix compilation files with full root path.
12256
12257 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12258
12259         * report.cs (SymbolRelatedToPreviousError): Format the output so
12260         it does not use an open parenthesis that is never closed. 
12261
12262         * driver.cs: Follow coding guidelines
12263
12264 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12265
12266         Fix #72930.
12267         * const.cs (Const.ResolveValue): Check for assigning non-null
12268         value to reference type.
12269
12270 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12271
12272         * anonymous.cs: Implemented ExprClassName.
12273         
12274         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12275         delegate.
12276         
12277         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12278         check.
12279         
12280         * class.cs (StaticClass.DefineContainerMembers): Report protected
12281         members as error.
12282         
12283         * codegen.cs: if(ed) PRODUCTION.
12284         
12285         * convert.cs (Error_CannotImplicitConversion): Better error
12286         distinction.
12287         
12288         * cs-parser.jay: More error checks.
12289         
12290         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12291         
12292         * driver.cs (CSCParseOption): Enabled wrong option check.
12293         
12294         * ecore.cs (Expression.ExprClassName): Turned to property.
12295         (MemberExpr.CheckIntermediateModification): For checking boxed
12296         value types     modification.
12297         
12298         * statement.cs (Fixed.Resolve): Expression type must be
12299         convertible to fixed type.
12300         (CollectionForeach.GetEnumeratorFilter,TryType):
12301         Small refactoring for easier error checking.
12302
12303 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12304
12305         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12306         attributes.
12307         
12308         * class.cs (GeneratedBaseInitializer): New class for customization
12309         compiler generated initializers.
12310         (MemberBase.DoDefine): Check Obsolete attribute here.
12311         (FieldMember.DoDefine): Ditto.
12312         
12313         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12314         constants.
12315         
12316         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12317         (MemberCore.GetObsoleteAttribute): Removed argument.
12318         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12319         (MemberCore.CheckObsoleteType): New helper.
12320         
12321         * delegate.cs,
12322         * enum.cs,
12323         * statement.cs: Updates after MemberCore changes.
12324         
12325         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12326         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12327         
12328         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12329         obsolete attribute for compiler construct.
12330         (As.DoResolve): Cache result.
12331         
12332         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12333
12334 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12335
12336         Fix #76133.
12337         * expression.cs (This.VerifyFixed): In a value type T, the type of
12338         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12339         value type R, 'this' is treated as a value parameter.
12340
12341 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12342
12343         * statement.cs (Lock): Use the TemporaryVariable class instead of
12344         manually using local variables as those do not work when variables
12345         are captured.
12346
12347         * ecore.cs: Moved the TemporaryVariable class from being a nested
12348         class inside Foreach to be a public class that can be employed in
12349         other places. 
12350
12351 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12352
12353         * cs-parser.jay: interface_accessors replaced by
12354         accessor_declarations.
12355
12356         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12357         location.
12358         
12359         * statement.cs (GotoCase.Resolve): Convert null constant to
12360         null case.
12361         (SwitchLabel.ResolveAndReduce): Ditto.
12362         (SwitchLabel.NullStringCase): Custom null stamp.
12363         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12364         
12365         typemanager.cs (CSharpSignature): Don't skip first argument
12366         for full names.
12367
12368 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12369
12370         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12371
12372         * location.cs (InEmacs): in this mode, do not report column
12373         location as it confuses Emacs.
12374
12375 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12376
12377         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12378         expression.cs, iterators.cs, literal.cs: Store constants and
12379         literals location.
12380         
12381         * class.cs (MemberBase.ShortName): Pass location.
12382         
12383         * cs-parser.jay: Some location fixes.
12384         
12385         * ecore.cs (Expression.Location): Made virtual.
12386
12387 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12388
12389         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12390         if the underlying types are the same, otherwise we need to produce
12391         code that will do the proper cast.
12392
12393         This was exposed by Marek's constant rewrite which produced
12394         invalid code for the call site:
12395
12396         enum X : long { a }
12397         void Method (X v) {}
12398
12399         Method ((X) 5)
12400
12401         This fixes test-49.cs
12402
12403 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12404
12405         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12406           Type/Object should be allowed as well. Fixed bug #75968.
12407
12408 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12409
12410         * expression.cs : (Binary.DoResolve): when one is enum constant and
12411           another is constant 0, then return enum one *as enum type*.
12412           Fixed bug 74846.
12413
12414 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12415
12416         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12417         internal.
12418
12419         Fix #75941.
12420         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12421         flow-branching for LocalVariableReferences in case we were invoked
12422         from a MemberAccess.
12423         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12424         Carved out of ...
12425         (LocalVariableReference.DoResolveBase): ... this.
12426         (MemberAccess.Resolve): Do the check that was disabled during
12427         SimpleNameResolve.
12428
12429 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12430
12431         * class.cs :
12432           (PartialContainer.Create): check abstract/sealed/static strictly
12433           but abstract/sealed can exist only at one side. Fixed bug #75883.
12434
12435 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12436
12437         Fix #75945.
12438         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12439         specified, don't default to UnmanagedType.I4.
12440
12441 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12442
12443         * expression.cs : conditional operator should check possibly
12444           incorrect assign expression. Fixed bug #75946.
12445
12446 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12447
12448         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12449           Reverting the change. gmcs is much complex than mcs on this matter.
12450
12451 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12452
12453         * cs-tokenizer.cs : To read another token ahead of the actual 
12454           consumption, use new SavedToken and cache token instead of moving
12455           back the stream with SeekableStreamReader (it seemed problematic).
12456         * cs-parser.jay,
12457           driver.cs : Thus use StreamReader directly.
12458         * support.cs : Thus removed SeekableStreamReader.
12459
12460 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12461
12462         Fix #75934.
12463         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12464         (ScopeInfo.EmitScopeType): Use it to construct field names from
12465         names of captured locals.
12466
12467         Fix #75929.
12468         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12469         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12470         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12471         (ExplicitConversion): Remove enum cases already handled by
12472         implicit conversion.  Move implicit conversion check to the beginning.
12473         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12474         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12475         Don't treat System.Enum as a struct.
12476
12477 2005-08-30  Jb Evain  <jbevain@gmail.com>
12478
12479         * attribute.cs: handles as expression in parameters.
12480
12481 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12482
12483         Fix #75802.
12484         * class.cs (TypeContainer.VerifyClsName): Don't use a
12485         PartialContainer when verifying CLS compliance.
12486         (AbstractPropertyEventMethod): Set Parent here, ...
12487         (PropertyMethod): ... not here.
12488
12489 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12490
12491         * attribute.cs : escaped attribute name should not be allowed to be
12492           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12493
12494 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12495
12496         Fix #75927.
12497         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12498         when converting a long constant to unsigned long.
12499         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12500         detect where IsApplicable and VerifyArgumentsCompat disagree.
12501
12502 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12503         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12504
12505         Fix #75848.
12506         * class.cs (TypeContainer.CanElideInitializer): New helper.
12507         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12508         can safely emitting the initializer of a field.
12509
12510 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12511
12512         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12513           allowed inside a switch (without loop). Fixed bug #75433.
12514
12515 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12516
12517         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12518         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12519
12520 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12521
12522         * driver.cs : kinda reverting the default encoding changes (not exact 
12523           revert since I noticed that "codepage:reset" might not work fine).
12524
12525 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12526
12527         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12528           Location. Now getter and setter store location correctly.
12529           (errors/cs0111-12.cs now reports the expected location.)
12530
12531 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12532
12533         * driver.cs : Use default encoding on the environment.
12534           Removed (now that) extra parameter for SeekableStreamReader.
12535         * support.cs : (SeekableStreamReader) third .ctor() argument for
12536           StreamReader is not required (always true). preamble size could
12537           be acquired in simpler and safe way.
12538
12539 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12540
12541         * cs-parser.jay: report CS0642 at warning level 3
12542           and report CS0642 for an if else statement also
12543           fixes bug #74745. Patch by John Luke (and a bit
12544           modified by me).
12545           Removed extra CS0642 warning check for "while",
12546           "for" and "fixed".
12547         * statement.cs: In Block.Resolve(), CS0642 check
12548           is reimplemented to check a sequence of an empty
12549           statement and a block.
12550
12551           Both fix bug #66777.
12552
12553 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12554
12555         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12556         detection until I fix it.
12557         
12558         * cs-tokenizer.cs: Changed error message.
12559         
12560         * cs-parser.jay: Fixed 2 error locations.
12561         
12562         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12563         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12564         properties.
12565         
12566         * enum.cs (GetSignatureForError): Fixed.
12567         
12568         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12569         method detection.
12570         
12571         * class.cs,
12572         * typemanager.cs (RegisterProperty): Removed.
12573         
12574         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12575
12576 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12577
12578         Fix #75874.
12579         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12580         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12581
12582 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12583
12584         * expression.cs : tiny fix is required for not warning positive ulong.
12585           See test-441.cs.
12586
12587 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12588
12589         * expression.cs : add CS0652 check for constant and integral
12590           expression. Fixed bug #53974.
12591
12592 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12593
12594         * expression.cs : in DoNumericPromotions(), check if there is implicit
12595           conversion overload for string (to check CS0034). Fixed bug #52492.
12596
12597 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12598
12599         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12600
12601 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12602
12603         * ecore.cs : report location when it is *not* Null.
12604
12605 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12606
12607         * codegen.cs,
12608           ecore.cs,
12609           flowanalysis.cs,
12610           expression.cs:
12611           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12612           correctly. Fixed bug #75721.
12613
12614 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12615
12616         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12617         loop that performs 'min (pos, char_count)'.
12618
12619         Fix #75862.
12620         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12621         converted value in Operator.OnesComplement.
12622
12623 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12624
12625         * anonymous.cs: If the anon method is pulled into a helper class,
12626         it needs to be `internal' not `private'. Fixes runtime behavior on
12627         msft. bug #75704
12628
12629 2005-08-20  Martin Baulig  <martin@ximian.com>
12630
12631         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12632         scope if we don't already have it.
12633
12634         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12635         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12636         fixes #75867.
12637
12638 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12639
12640         Fix #75803
12641         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12642         is a partial class.
12643
12644 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12645
12646         The big constants rewrite
12647         Fix #75746, #75685 and more
12648         As a side effect saved 1MB for MWF ;-)
12649         
12650         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12651         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12652         enum based for corlib compilation.
12653         
12654         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12655         subtractions.
12656         
12657         * class.cs (FixedField.Define): Use ResolveAsConstant.
12658         
12659         * const.cs (IConstant): Interface constants and enums.
12660         (Const.ResolveValue): New method for constant resolvning.
12661         (ExternalConstant): Constants from imported assemblies.
12662         
12663         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12664         conversion; like enums.
12665         (Constant.ToType): Converts this constant to different type.
12666         (Constant.Increment): Adds 1.
12667         
12668         * convert.cs (ImplicitConversionRequired): Simplified.
12669         
12670         * cs-parser.jay: Create EnumMember directly.
12671         
12672         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12673         
12674         * doc.cs (GenerateEnumDocComment): Removed.
12675         
12676         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12677         (ConvertIntLiteral): Removed.
12678         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12679         
12680         * enum.cs (EnumMember): Implement IConstant.
12681         (Enum.IsValidEnumConstant): Removed.
12682         (Enum.GetNextDefaultValue): Removed.
12683         (Enum.FindMembers): Updated.
12684         (Enum.GenerateDocComment): Iterate enum members.
12685         
12686         * expression.cs (Cast.TryReduce): Handle enums correctly.
12687         (New.Constantify): Made public.
12688         (MemberAccess.DoResolve): Removed contant specific if(s).
12689         
12690         * literal.cs (NullLiteral): Implement new abstract methods.
12691         
12692         * statement.cs (GotoCase.Resolve): Use new constant methods.
12693         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12694         
12695         * typemanager.cs (LookupEnum): Removed.
12696         (IsEnumType): Fixed to work with corlib.
12697         (RegisterConstant): Removed.
12698         (LookupConstant): Removed.
12699         (GetConstant): Changed to work with IConstant.
12700
12701 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12702
12703         * location.cs : Fixed overflown (>255) column number.
12704
12705 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12706
12707         First cut of the qualified-alias-member feature.
12708         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12709         token.
12710         * cs-parser.jay (DOUBLE_COLON): New token.
12711         (namespace_or_type_name): Add rule for recognizing
12712         qualified-alias-members.
12713         (primary_expression): Likewise.
12714         (element_access): Allow QualifiedAliasMember as a possible
12715         type-bearing expression.
12716         (local_variable_type, local_variable_pointer_type): Likewise.
12717         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12718         aliases in the current and enclosing namespace declarations.
12719         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12720         * decl.cs (MemberName.is_double_colon): New.
12721         (MemberName.MemberName): Add new constructor for alias-member.
12722         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12723         * expression.cs (QualifiedAliasMember): New expression type.
12724
12725 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12726
12727         * location.cs : it borked when no argument was specified.
12728
12729 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12730
12731         * location.cs : tiny ToString() format fix.
12732
12733 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12734
12735         * statement.cs : oops, it was missing.
12736
12737 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12738
12739         A set of fixes for precise line/column location.
12740
12741         * location.cs :
12742           "token" field now holds a file/line "delta", a line number offset 
12743           from the segment, and a column number. See also:
12744           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12745           December/009508.html
12746           Removed static IsNull. Use instance IsNull property instead.
12747         * cs-tokenizer.cs :
12748           For some tokens it stores Location. For Identifier it stores
12749           LocatedToken which is a pair of string name and location.
12750           Column numbers are adjusted only at getChar().
12751         * report.cs :
12752           Use Location.ToString() for reporting (it now contains column).
12753         * cs-parser.jay :
12754           Largely modified to use LocatedToken instead of
12755           string (IDENTIFIER), and to acquire Location from some tokens.
12756         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12757           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12758           codegen.cs :
12759           Now MemberName holds Location. DeclSpace.ctor() receives Location
12760           as a parameter. Removed extra parameters to all derived classes.
12761           Replaced Location.IsNull() with instance property.
12762         * assign.cs, expression.cs :
12763           Added .ctor() overload that omits Location.
12764         * attribute.cs :
12765           Added "nameEscaped" flag that indicates the identifier was escaped
12766           in the source file. This fixes bug #57047.
12767
12768 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12769
12770         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12771         New method, looking for lo-case imported cls type.
12772
12773         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12774         here.
12775
12776         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12777
12778         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12779
12780         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12781         all_imported_types.
12782         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12783
12784         Optimized to save 3.5 MB for SWF compilation.
12785
12786 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12787
12788         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12789         (PartialContainer.Create): Moved logic AddToContainer.
12790         (PartialContainer.MarkForDuplicationCheck): Shares name.
12791         
12792         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12793         place.
12794         
12795         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12796         initialization.
12797         (Namespace.GetSignatureForError): New method.
12798         
12799         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12800         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12801
12802 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12803
12804         Fix #75669.
12805         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12806         member lookup rather than qualifier_type, since qualifier_type can
12807         be null.
12808
12809 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12810
12811         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12812         enum member.
12813
12814 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12815
12816         * statement.cs: Copy the local exception into the exception
12817         captured local.  Fixes 75674
12818
12819 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12820
12821         Fix #75658.
12822         * expression.cs (Invocation.OverloadResolve): Don't report error
12823         CS1501 if error CS1502 has been reported.
12824         (New.DoResolve): Delegate CS1501 reporting to
12825         Invocation.OverloadResolve.
12826
12827         Fix #75656.
12828         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12829         invariant-meaning-in-block property in an enclosing block if
12830         necessary.
12831
12832 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12833
12834         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12835         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12836         (Switch.CheckSwitch): Just save 50kb for SWF.
12837
12838 2005-07-27  Martin Baulig  <martin@ximian.com>
12839
12840         * anonymous.cs (CaptureContext.AddField): Added
12841         `AnonymousContainer am' argument; compute its toplevel scope if
12842         it's not already computed.  Fixes #75649.
12843
12844 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12845
12846         Fix #75628.
12847         * class.cs (Constructor.Emit): Reset block to null if the block
12848         resolve fails.
12849
12850 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12851
12852         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12853
12854 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12855
12856         * class.cs (MethodData.Define): Check whether accessor implementing
12857         interface is public.
12858
12859         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12860
12861 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12862
12863         Fix #57245
12864         * namespace.cs (LookupType): Moved same type check to...
12865         
12866         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12867         with the same name.
12868
12869 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12870
12871         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12872         already found a typebuilder.
12873         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12874         MemberNames, not strings.
12875
12876         * const.cs (Error_ExpressionMustBeConst): 
12877         Rename from Error_EpressionMustBeConst.
12878         * const.cs, class.cs, statement.cd: Update.
12879
12880 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12881
12882         Fix #65573
12883
12884         * const.cs (Const.LookupConstantValue): Report missing contant expression
12885         everytime.
12886         (Error_EpressionMustBeConstant): Only one error method.
12887
12888         * class.cs, statement.c: Updated.
12889
12890 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12891
12892         * statement.cs (Block.Flags): Add back HasVarargs.
12893         (Block.flags): Make protected.
12894         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12895
12896         * typemanager.cs (types, typecontainers, user_types): Remove.
12897         (UserTypes, TypeContainers): Likewise.
12898         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12899         (CleanUp, Reset): Update.
12900         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12901         (GetNestedType): Use Type.GetNestedType.
12902         (CoreLookupType): Take two arguments, the namespace and the
12903         basename of the type.  Update to use the Namespace.Lookup
12904         mechanism.
12905         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12906         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12907         string concatenation and substring matches.
12908         * class.cs, enum.cs, delegate.cs: Update to changes.
12909
12910 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12911
12912         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12913         Expression and made virtual.
12914
12915         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12916         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12917
12918         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12919
12920         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12921         error message.
12922
12923         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12924         change.
12925
12926 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12927
12928         Fix #57707
12929         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12930         AssemblyCultureAttribute is not used on executable.
12931
12932         * rootcontext.cs,
12933         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12934
12935 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12936
12937         Fix #60638.
12938         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12939         New.  Reports CS0252/CS0253.
12940         Mostly taken from preliminary patch by Duncak Mak.
12941         (Binary.DoResolveOperator): Store results of operator lookup.
12942         Use them to detect if we need to warn about unintended reference
12943         comparisons.
12944
12945 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12946
12947         Fix #72969.
12948         * namespace.cs (Namespace.Lookup): Add back location parameter.
12949         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12950         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12951
12952         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12953         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12954         (Namespace.LookupType): ... this.
12955         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12956         of namespaces.
12957         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12958         purported to handle pointers.
12959         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12960         CoreLookupType.
12961
12962 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12963
12964         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12965         type as namespace.
12966
12967 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12968
12969         * namespace.cs (Namespace.Lookup): Drop location parameter.
12970         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12971         (NamespaceEntry.Lookup): ... this.
12972         (NamespaceEntry.Error_AmbiguousTypeReference):
12973         Move here from DeclSpace.
12974         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12975         names ...
12976         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12977         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12978         Move to NamespaceEntry.
12979         * delegate.cs, expression.cs: Update to changes.
12980
12981 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12982
12983         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12984         CheckAttributeType and refactored.
12985         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12986         ResolveAsTypeTerminal error handling.
12987         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12988         handling.
12989         (GetSignatureForError): Print errors in same way.
12990
12991         * class.cs,
12992         * codegen.cs: Reflect attribute GetSignatureForError change.
12993
12994         * ecore.cs,
12995         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12996
12997         * namespace.cs (UsingEntry): Refactored to make fields private.
12998
12999         * assign.cs,
13000         statement.cs: Error_UnexpectedKind has extra parameter.
13001
13002 2005-07-14  Raja R Harinath  <rharinath@novell.com>
13003
13004         * ecore.cs (IAlias): Remove.
13005         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
13006         that implement the interface.
13007         * namespace.cs (Namespace): Likewise.
13008         (Namespace.declspaces): Renamed from 'defined_names'.
13009         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
13010         DeclSpace instead of an IAlias.
13011         * tree.cs (Tree.AddDecl): Update.
13012
13013 2005-07-12  Raja R Harinath  <rharinath@novell.com>
13014
13015         * statement.cs (Block.Flags); Remove HasVarargs.
13016         (Block.HasVarargs): Move to ToplevelBlock.
13017         (Block.ThisVariable, Block.AddThisVariable): Likewise.
13018         (Block.Variables): Make protected.  Initialize variable hashtable
13019         if necessary.
13020         (Block.AddVariable): Update.
13021         (Block.Resolve): Update to changes.
13022         (ToplevelBlock.HasVarargs): New boolean.
13023         (ToplevelBlock.ThisVariable): Move here from Block.
13024         (ToplevelBlock.AddThisVariable): Likewise.
13025         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
13026         * expression.cs (This.ResolveBase): Update to changes.
13027         (ArglistAccess.DoResolve): Likewise.
13028
13029 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13030
13031         Fix #75321
13032         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
13033
13034         * class.cs (TypeContainer.VerifyMembers): Distinguish between
13035         not used and not used & assigned.
13036         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
13037
13038 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13039
13040         Fix #75053
13041         * expression.cs (Is.DoResolve): null is never provided type.
13042
13043 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
13044
13045         Fix #52496
13046         * cs-parser.jay: Less strict event error rule to catch more errors.
13047
13048 2005-07-08  Martin Baulig  <martin@ximian.com>
13049
13050         Fix test-iter-10.cs - distinguish whether we `yield' in a property
13051         gettter (allowed) or setter (not allowed).
13052
13053         * class.cs (Accessor): Implement IIteratorContainer.
13054         (Accessor.Yields): New public field.
13055         (PropertyBase.PropertyMethod.Define): Handle iterators on a
13056         per-accessor basis.
13057
13058         * cs-parser.jay
13059         (get_accessor_declaration, set_accessor_declaration): Set the
13060         `yields' flag on the accessor, not the property.
13061         (property_declaration): Do the iterators check on a per-accessor
13062         basis and not for the whole property.
13063
13064 2005-07-08  Martin Baulig  <martin@ximian.com>
13065
13066         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
13067         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
13068
13069 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
13070
13071         Fix #74975
13072         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
13073         (ExtractSecurityPermissionSet): Cope with self referencing security
13074         attributes properly.
13075
13076         * driver.cs (SetOutputFile): Made public property OutputFile.
13077
13078 2005-07-07  Raja R Harinath  <rharinath@novell.com>
13079
13080         Fix #75486.
13081         * class.cs (TypeContainer.first_nonstatic_field): Rename from
13082         has_nonstatic_fields.  Make into a FieldBase pointer.
13083         (TypeContainer.AddField): Add CS0282 check.
13084         (TypeContainer.EmitType): Update.
13085
13086 2005-07-06  Miguel de Icaza  <miguel@novell.com>
13087
13088         * cs-tokenizer.cs (consume_identifier): Do not create strings to
13089         compare if they start with __.
13090
13091 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13092
13093         * statement.cs (Switch.SwitchGoverningType): Only look at
13094         UserCasts that don't need implicit standard conversions to one of
13095         the allowed switch types (Fixes test-322.cs).
13096         (LocalInfo.Resolve): Re-enable sanity-test.
13097
13098 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
13099
13100         * cs-tokenizer.cs (consume_identifier): Detect double undescores
13101         
13102         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
13103         
13104         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
13105
13106 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13107
13108         Fix #75472.
13109         * ecore.cs (SimpleName.GetSignatureForError): Add.
13110         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
13111         (MemberAccess.GetSignatureForError): Add.
13112
13113 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
13114  
13115         The big error and warning messages review.
13116         
13117         * anonymous.cs,
13118         * assign.cs,
13119         * attribute.cs,
13120         * class.cs,
13121         * codegen.cs,
13122         * convert.cs,
13123         * cs-parser.jay,
13124         * cs-tokenizer.cs,
13125         * decl.cs,
13126         * delegate.cs,
13127         * doc.cs,
13128         * driver.cs,
13129         * ecore.cs,
13130         * enum.cs,
13131         * expression.cs,
13132         * flowanalysis.cs,
13133         * iterators.cs,
13134         * literal.cs,
13135         * location.cs,
13136         * modifiers.cs,
13137         * namespace.cs,
13138         * parameter.cs,
13139         * pending.cs,
13140         * report.cs,
13141         * rootcontext.cs,
13142         * statement.cs,
13143         * support.cs,
13144         * tree.cs,
13145         * typemanager.cs: Updated.
13146         
13147         * class.cs: (MethodCore.SetYields): Moved here to share.
13148         (PropertyMethod.Define): Moved iterator setup here.
13149         
13150         * iterators.cs: Add orig_method to have full access to parent
13151         container.
13152
13153 2005-07-05  Raja R Harinath  <rharinath@novell.com>
13154
13155         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
13156         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
13157         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
13158         variable of struct type.
13159         * expression.cs (Unary.ResolveOperator): Update to change.
13160         (Indirection.VerifyFixed): Likewise.
13161         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
13162         (ParameterReference.VerifyFixed): Value parameters are fixed.
13163         (This.VerifyFixed): Treat 'this' as a value parameter.
13164         * statement.cs (LocalInfo.IsFixed): Remove.
13165
13166 2005-07-01  Martin Baulig  <martin@ximian.com>
13167
13168         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
13169         `ec.EmitThis ()' to get the correct scope.
13170
13171 2005-07-01  Martin Baulig  <martin@ximian.com>
13172
13173         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
13174         instance is a ParameterReference; fixes #75299.
13175
13176 2005-07-01  Martin Baulig  <martin@ximian.com>
13177
13178         Reverted Marek's latest patch (r46725):
13179         - it contains structural changes which are neither mentioned in
13180           the ChangeLog nor explained anywhere; for example the additional
13181           argument of EmitContext's and Iterator's .ctor's and the
13182           TypeContainer.DefineMembers() change.
13183         - structural changes like this should go in in seperate patches
13184           and not be hidden in a huge patch which just seems to affect
13185           warnings and errors.
13186           a big and hard to understand patch.
13187         - it breaks iterators and causes regressions, for instance in
13188           test-iter-03.cs.      
13189
13190 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13191
13192         Fix #75412.
13193         * expression.cs (Indexers.map): Remove.
13194         (Indexers.Append): Filter out inaccessible setters and getters.
13195         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13196
13197         Fix #75283.
13198         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13199         Refactored from ...
13200         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13201         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13202         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13203         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13204
13205 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13206
13207         Fix #75322
13208         * class.cs (FieldBase.GetInitializerExpression): One more field
13209         for backup.
13210
13211 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13212
13213         * pending.cs: Do not define a proxy if the base method is virtual,
13214         it will be picked up by the runtime (bug 75270).
13215
13216 2005-06-08  Martin Baulig  <martin@ximian.com>
13217
13218         The big Iterators rewrite :-)
13219
13220         * iterators.cs: Rewrite this to use the anonymous methods framework.
13221
13222         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13223         before the TypeContainers; see 2test-21.cs.
13224
13225         * class.cs
13226         (TypeContainer.DefineType): Don't create a new EmitContext if we
13227         already have one (this only happens if we're an Iterator).
13228         (TypeContainer.Define): Also call Define() on all our iterators.
13229         (Method.CreateEmitContext): Added support for iterators.
13230
13231         * anonymous.cs
13232         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13233         (AnonymousContainer.CreateMethodHost): Moved here from
13234         AnonymousMethod and made abstract.
13235         (AnonymousContainer.CreateScopeType): New abstract method.
13236         (AnonymousContainer.IsIterator): New public property.
13237         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13238         get the ScopeTypeBuilder rather than manually defining it here. 
13239         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13240         iterators here.
13241
13242         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13243         before RootContext.DefineTypes().
13244
13245         * codegen.cs (EmitContext.RemapToProxy): Removed.
13246         (EmitContext.CurrentAnonymousMethod): Changed type from
13247         AnonymousMethod -> AnonymousContainer.
13248         (EmitContext.ResolveTopBlock): Protect from being called twice.
13249         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13250         (EmitContext.EmitThis): Removed the iterators hacks; use the
13251         anonymous methods framework for that.
13252
13253         * statement.cs
13254         (ToplevelBlock.Container): Make this a property, not a field.
13255         (ToplevelBlock.ReParent): New public method; move the
13256         ToplevelBlock into a new container.
13257         (Foreach.TemporaryVariable): Simplify.
13258
13259 2005-06-05  Martin Baulig  <martin@ximian.com>
13260
13261         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13262         (Block.AddTemporaryVariable): New public method; creates a new
13263         `LocalInfo' for a temporary variable.
13264         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13265         variables here.
13266         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13267         non-iterator variables.
13268
13269 2005-06-05  Martin Baulig  <martin@ximian.com>
13270
13271         * statement.cs (Foreach.TemporaryVariable): Create the
13272         LocalBuilder in the Emit phase and not in Resolve since in some
13273         situations, we don't have an ILGenerator during Resolve; see
13274         2test-19.cs for an example.
13275
13276 2005-06-04  Martin Baulig  <martin@ximian.com>
13277
13278         **** Merged r45395 from GCS ****
13279
13280         The big Foreach rewrite - Part II.
13281
13282         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13283         with `PropertyInfo ienumerator_getcurrent'.
13284
13285         * codegen.cs (VariableStorage): Removed.
13286
13287         * statement.cs
13288         (Foreach): Derive from Statement, not ExceptionStatement.
13289         (Foreach.CollectionForeach): New nested class.  Moved all the code
13290         dealing with collection foreach here.
13291         (Foreach.ForeachHelperMethods): Removed.
13292         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13293
13294 2005-05-23  Martin Baulig  <martin@ximian.com>
13295
13296         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13297         don't need to.  Fix #75014.
13298
13299 2005-05-20  Martin Baulig  <martin@ximian.com>
13300
13301         Merged r44808 from GMCS.
13302
13303         * class.cs (TypeContainer.CircularDepException): Removed.
13304         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13305         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13306         (CS0146) and interface (CS0529) dependencies here.
13307
13308 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13309
13310         * expression.cs (Invocation.EmitCall): Fix initialization
13311         'this_call' to reflect current behaviour.  Fix indentation.
13312
13313         * convert.cs (FindMostEncompassedType): Add two trivial special
13314         cases (number_of_types == 0 || number_of_types == 1).
13315         (FindMostEncompasingType): Likewise.
13316
13317 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13318
13319         Some cleanups preparing for the fix of #75283.
13320         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13321         error testing.
13322         (EventExpr.InstanceResolve): Likewise.
13323         (EventExpr.DoResolve): Remove redundant checks.
13324
13325 2005-06-10  Duncan Mak  <duncan@novell.com>
13326
13327         * cs-tokenizer.cs (process_directives): New flag for controlling
13328         the processing of preprocessor directives.
13329         (x_token): After seeing a '#', return Token.NONE instead of going
13330         to handle_preprocessing_directive() when not processing
13331         directives. This avoids unnecessary processing during the token peek in
13332         is_punct().
13333
13334         This fixes #74939.
13335
13336         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13337         the existing error reporting methods instead of Report.Error.
13338
13339         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13340         after Raja's rewrite.
13341
13342 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13343
13344         * class.cs: Small fix.
13345
13346 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13347
13348         Fix #75160.
13349         * class.cs (GetPartialBases): Fix return value check of
13350         part.GetClassBases.
13351
13352 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13353
13354         Ensure that partial classes are registered in their enclosing
13355         namespace.  Initial part of fix of #75160.
13356         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13357         Register declspace with namespace here, not in
13358         DeclSpace.RecordDecl.
13359         * cs-parser.jay: Pass namespace to RecordDecl.
13360         * class.cs (PartialContainer.Create): Likewise.
13361         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13362         called.
13363         * decl.cs (Declspace.RecordDecl): Remove.
13364         * namespace.cs (NamespaceEntry.DefineName): Remove.
13365
13366 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13367
13368         * rootcontext.cs: Reset TargetExt as well.
13369
13370 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13371
13372         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13373         -langversion:ISO-1.
13374
13375 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13376
13377         Fix #75080, cs0119.cs.
13378         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13379         of ...
13380         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13381         allowing ExprClass.Type and ExprClass.Namespace for
13382         ResolveFlags.VariableOrValue.
13383         (Expression.Resolve) [1-argument variant]: Change default resolve
13384         flags based on language version.
13385         (Expression.Error_UnexpectedKind): Use a simple string array
13386         rather than an ArrayList.
13387         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13388         not ExprClass.Type.
13389         (TypeOfVoid.DoResolve): Likewise.
13390         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13391         flags argument -- it always has the same value.
13392
13393 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13394
13395         Fix #75081.
13396         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13397         Use it in the error message.
13398         * assign.cs, expression.cs, statement.cs: Update.
13399
13400 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13401
13402         Fix #75088.
13403         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13404         the "almostMatchedMember" case too.
13405         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13406         that failed the accessibility checks to 'almost_match'.
13407
13408 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13409
13410         * attribute.cs: Use internal MethodBuilder methods to set
13411         ExactSpelling and SetLastError on PInvoke methods, instead
13412         of passing them via charset.  Fixes #75060.
13413
13414 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13415
13416         * parameter.cs (Parameter): Remove TODO comment.
13417         (Parameter.DefineParameter): Remove Location parameter.
13418         (Parameters.LabelParameters): Likewise.
13419         * class.cs (Constructor.Emit): Update to change.
13420         (MethodData.Emit): Likewise.
13421         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13422         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13423
13424 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13425
13426         * parameter.cs,
13427           Removed Parameters.Location and added Parameter.Location instead.
13428           Removed Location parameter from Emit() and GetSignature().
13429         * anonymous.cs,
13430           class.cs,
13431           cs-parser.jay,
13432           delegate.cs,
13433           iterators.cs,
13434           statement.cs :
13435           Modified all related calls.
13436
13437 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13438
13439         Improve user-defined conversion handling.
13440         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13441         applicable operators.
13442         (AddConversionOperators): New.  Helper for GetConversionOperators.
13443         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13444         there is only one most encompassed/encompassing type.
13445         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13446         "applicable operator" handling.
13447         (UserConversion): Move cache here from GetConversionOperators.
13448         Directly cache the chosen operator, rather than the whole
13449         MethodGroup.
13450         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13451         case.  Allow conversion of decimal to sbyte and byte too.
13452         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13453         New static methods.  Used to avoid allocating EmptyExpressions in
13454         convert.cs.
13455
13456 2005-05-24  Duncan Mak  <duncan@novell.com>
13457
13458         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13459         another class, used in Convert.ExplicitNumericConversion.
13460         (CastToDecimal): New class, similar to above, but casts to
13461         System.Decimal, used in Convert.ImplicitNumericConversion and also
13462         in explicit convesion from double/float to decimal.
13463
13464         * convert.cs (ImplicitNumericConversion): Handle implicit
13465         conversions to System.Decimal.
13466         (ExplicitNumericConversion): handle explicit conversions to
13467         System.Decimal.
13468
13469         This fixes #68711.
13470         
13471 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13472
13473         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13474         know the type at this stage, just break through.   Fixes #75008 
13475
13476 2005-05-19  Martin Baulig  <martin@ximian.com>
13477
13478         * delegate.cs
13479         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13480         to disable error reporting.
13481
13482         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13483         here since we don't want to report an error; see the new test-336.cs.
13484
13485 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13486
13487         * statement.cs (ToplevelBlock.GetParameterReference)
13488         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13489         Move here from class Block.
13490         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13491         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13492
13493 2005-05-18  Martin Baulig  <martin@ximian.com>
13494
13495         Fix #74978.
13496
13497         * flowanalysis.cs
13498         (FlowBranching.Reachability): Add non-static public And() and Or()
13499         methods.
13500         (FlowBranchingSwitch): New class; do the `break_origins' thing
13501         like in FlowBranchingLoop.
13502         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13503         reachability, not just locals and parameters.
13504         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13505         switch; MergeBreakOrigins() now takes care of that.
13506
13507 2005-05-18  Martin Baulig  <martin@ximian.com>
13508
13509         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13510         a loop and may leave it, reset the barrier; fixes #74974.
13511
13512 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13513         
13514         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13515         is back.
13516         
13517         * cs-parser.jay: Catch more lexical errors.
13518         
13519         * report.cs: Add one more Error method.
13520         
13521         * rootcontext.cs,
13522         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13523
13524 2005-05-17  Martin Baulig  <martin@ximian.com>
13525
13526         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13527         #70970. 
13528
13529 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13530
13531         Fix test-382.cs.  Emit values of decimal constants.
13532         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13533         Carved out of ...
13534         (TypeContainer.AddField): ... this.
13535         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13536         with initializers to include 'Const's.
13537         (ClassPart.RegisterFieldForInitialization): Forward to
13538         PartialContainer.
13539         * const.cs (Const.Const): Pass initializer to base class.
13540         (Const.Define): In case of decimal constants, register them for
13541         initialization in a static constructor.
13542
13543 2005-05-14  Martin Baulig  <martin@ximian.com>
13544
13545         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13546         do not call ResolveUnreachable() on unreachable statements in
13547         here, see the comment in the source code.
13548
13549 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13550
13551         Fix #74934.
13552         * expression.cs (BinaryResolveOperator): If one of the operands of
13553         an equality comparison is 'null' and the other is a pointer type,
13554         convert the null to a NullPointer.
13555         * convert.cs (ImplicitReferenceConversion): If the expression is a
13556         NullLiteral and the target type is a pointer type, return a
13557         NullPointer instead.
13558         (ImplicitConversionStandard): Likewise.
13559
13560 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13561         
13562         * cs-parser.jay: Set readonly context based on special constructs.
13563         
13564         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13565         readonly variable error handling.
13566         
13567         * rootcontext.cs (EmitCode): Don't verify members when error
13568         occurred.
13569         
13570         * statement.cs (LocalInfo): Add reaodnly context information.
13571         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13572
13573 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13574
13575         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13576         for #74041 to initialize 'resolved' to false only for explicit
13577         blocks.  Fixes #74873.
13578
13579 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13580
13581         Fix #74920.
13582         * typemanager.cs (unmanaged_enclosing_types): New.
13583         (IsUnmanagedType): Avoid infloops by using
13584         'unmanaged_enclosing_types' to talk with recursive invocations.
13585
13586 2005-05-13  Martin Baulig  <martin@ximian.com>
13587
13588         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13589         instance variable, not a local.  Fix #74873.
13590         (Block.ResolveUnreachable): Set it to true here.
13591
13592 2005-05-11  Duncan Mak  <duncan@novell.com>
13593
13594         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13595         continuing to process for 'arg'.
13596         (handle_preprocessing_directive): Check the argument of the #endif
13597         directive and report error CS1025 if there are any trailing
13598         characters.
13599
13600         According to the C# spec, having even whitespace after the #endif
13601         directive is illegal; however, because we call arg.TrimEnd ()
13602         beforehand, we have the same behavior as csc, allowing whitespace
13603         after the directive.
13604
13605         Fixes #74892.
13606
13607 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13608
13609         Fix #74863.
13610         
13611         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13612         (Constructor.GetObsoleteAttribute): Implemented correctly.
13613
13614 2005-05-10  Martin Baulig  <martin@ximian.com>
13615
13616         * support.cs (ReflectionParameters.ParameterModifier): Use
13617         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13618         and `ParameterAttributes.In'.  Fixes #74884.
13619
13620 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13621
13622         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13623         
13624         * expression.cs (Argument.GetParameterModifier): Turned to property.
13625         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13626         
13627         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13628         its C# equivalent.
13629         
13630 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13631
13632         Fix #74852.
13633         * decl.cs (MemberCache.AddMethods): Register override methods,
13634         rather than non-override methods.
13635         * typemanager.cs (RegisterOverride): New.
13636         (IsOverride): Update.
13637
13638 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13639
13640         Fix #73105.
13641         
13642         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13643         recursive declaration.
13644         
13645         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13646         
13647 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13648
13649         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13650         
13651         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13652
13653 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13654
13655         Fix #74797.
13656         * decl.cs (DeclSpace.FamilyAccessible): 
13657         Use TypeManager.IsNestedFamilyAccessible.
13658
13659         Fix reopened #64812.
13660         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13661         internal'.
13662
13663 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13664             Abin Thomas  <projectmonokochi@rediffmail.com>
13665             Anoob V E  <projectmonokochi@rediffmail.com>
13666             Harilal P R  <projectmonokochi@rediffmail.com>
13667
13668         Fix #64812.
13669         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13670         allow access to all static members.
13671
13672 2005-05-04  Martin Baulig  <martin@ximian.com>
13673
13674         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13675
13676 2005-05-04  Martin Baulig  <martin@ximian.com>
13677
13678         Fix #74655.
13679
13680         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13681         section at the end; make things work if `default' is not the last
13682         section.        
13683
13684 2005-05-04  Martin Baulig  <martin@ximian.com>
13685
13686         Fix #70400.
13687
13688         * statement.cs (Switch): Replaced the `got_default' field with a
13689         `default_section' one.
13690         (Switch.CheckSwitch): Set `default_section' here.
13691         (Switch.Resolve): If we're a constant switch and the constant is
13692         not found, use the default section.
13693
13694 2005-05-03  Martin Baulig  <martin@ximian.com>
13695
13696         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13697
13698         * statement.cs (Foreach.ArrayForeach): New nested class.
13699         (Foreach.TemporaryVariable): New nested class.
13700         (Foreach.EmitArrayForeach): Removed; this is now in the new
13701         ArrayForeach class.
13702
13703 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13704
13705         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13706         more conservative.
13707         (VerifyPendingMethods): Revert change below.
13708
13709         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13710         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13711         that used to trigger warning -28.  Remove warning -28.
13712         * expression.cs (Invocation.OverloadResolve): Use
13713         TypeManager.IsOverride to distinguish override methods.
13714
13715         Fix #74773.
13716         * pending.cs (VerifyPendingMethods): If a base type implements the
13717         requested interface, don't bother checking individual methods of
13718         the base type.  As a side-effect, this prevents the creation of
13719         unnecessary proxies.
13720
13721 2005-05-02  Martin Baulig  <martin@ximian.com>
13722
13723         Fix #70182.
13724
13725         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13726         Also `And' the locals if the old vector is null.
13727         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13728         null; in this case we basically reset all the variables.        
13729
13730 2005-05-02  Martin Baulig  <martin@ximian.com>
13731
13732         Fix #74529.
13733
13734         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13735         Added `FlowBranching branching' argument; always `and' the
13736         variables instead of `or'ing them unless we're an infinite loop.
13737
13738         * statement.cs (While.Resolve): Create a new sibling unless we're
13739         infinite.       
13740
13741 2005-05-02  Martin Baulig  <martin@ximian.com>
13742
13743         Fix #70140.
13744
13745         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13746         arguments; use it instead of creating a new TopLevelBlock.
13747         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13748         our ConstructorInitializer.
13749
13750         * statement.cs
13751         (TopLevelBlock.TopLevelBranching): New public property.
13752         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13753         and create our `TopLevelBranching'.
13754
13755         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13756         anonymous method host, use `block.TopLevelBranching' rather than
13757         creating a new branching.
13758
13759 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13760
13761         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13762         a ScopeInfo, if any of the current children is a child of the new
13763         entry, move those children there.
13764
13765 2005-04-30  Martin Baulig  <martin@ximian.com>
13766
13767         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13768         at the beginning of a SwitchSection.  Fix #73335.
13769
13770 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13771
13772         Fix #74378
13773         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13774         
13775         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13776         (FieldExpr.DoResolve): Obsolete members are ignored for field
13777         initializers.
13778         
13779 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13780
13781         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13782         of arrays detection.
13783
13784         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13785         verification.
13786         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13787
13788         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13789         arrays report.
13790
13791 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13792
13793         * cs-parser.jay: Use the prefered version of -unsafe in error
13794         message.
13795
13796 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13797
13798         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13799         circumstances.
13800
13801 2005-04-20  John Luke  <john.luke@gmail.com>
13802
13803         * driver.cs: fix typo in error message, --outout to --output
13804
13805 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13806
13807         * codegen.cs (InRefOutArgumentResolving): New field.
13808         
13809         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13810         fields outside contructor.
13811         
13812         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13813         
13814 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13815
13816         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13817         parameter code was not completed ever, so it was not as up-to-date
13818         as local variables.  Must finish it.
13819
13820         The bug fix was to compare the Toplevel of the block, not the
13821         current block.  Thanks for Ben for pointing this out. 
13822
13823 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13824
13825         * decl.cs (AddMethods): Use the declaring type of the problem
13826         method to determine if we want to squash a warning.
13827
13828 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13829
13830         * attribute.cs: Removed debug output.
13831
13832         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13833         
13834         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13835         Report.Stderr.
13836         
13837 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13838
13839         Fix #74481.
13840         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13841         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13842         all null comparisons against reference types.
13843
13844 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13845
13846         Fix# 74565
13847         * class.cs (TypeContainer.CircularDepException) New nested
13848         exception class.
13849         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13850         (TypeContainer.DefineType): Removed error, reset InTransit before
13851         exit.
13852         (Class.DefineType): Throw exception when is in Transit.
13853         Catch exception and report error.
13854         (Struct.DefineType): Throw exception when is in Transit.
13855         Catch exception and report error.
13856         (Interface.DefineType): Throw exception when is in Transit.
13857         Catch exception and report error.
13858
13859         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13860         handle nested exception handlers.
13861
13862         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13863         a catch.
13864
13865         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13866         InFinally and InCatch storage.
13867
13868         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13869         (Catch.Resolve): Set and Restore ec.InCatch.
13870         (Try.Resolve): Set and Restore ec.InFinally.
13871         (Try.HasCatch): True when try has catch.
13872
13873 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13874
13875         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13876           for the same event member, so exclude such cases from warning 419.
13877           Fixed bug #74633.
13878
13879 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13880
13881         * expression.cs (Binary.ResolveOperator): Apply patch from John
13882         Luke to fix bug 59864: operators &, | and ^ on enumerations
13883         require that the same enum type on both sides.
13884
13885         * driver.cs: Add warnings to old flag usage, this is to assist
13886         people who produce Makefiles and hope that the Makefiles will be
13887         used on Windows.
13888
13889         * class.cs (TypeContainer.EmitType): Moved the definition of the
13890         special $PRIVATE$ field from the resolve phase to the Emit phase.
13891         During resolve we do not know if we are a struct with
13892         HasExplicitLayout, we know this only after the attributes for the
13893         type are emitted.
13894
13895         Set the FieldOffset to zero on the dummy field that we create for
13896         the class.   Fixes 74590.
13897
13898 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13899
13900         Fix #73834.
13901         * ecore.cs (PropertyExpr.resolved): New.
13902         (DoResolve): Use it to handle a case of double resolution here.
13903         Handle a case of identical-name-and-type-name.
13904         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13905         resolution by storing the results of expression resolution back
13906         into the "probes" array.
13907
13908 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13909
13910         Fix cs0208-7.cs and cs0208-8.cs.
13911         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13912         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13913         error reporting to point out the reason a struct is not unmanaged.
13914
13915 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13916
13917         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13918           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13919
13920 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13921
13922         Fix #74528.
13923         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13924         IdenticalNameAndTypeName here.
13925         (EventExpr.InstanceResolve): Likewise.
13926
13927 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13928
13929         C# 2.0 DefaultCharSetAttribute implementation
13930         
13931         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13932         which allows us to set GlobalNamespace for every resolve.
13933         (Attribute.ResolveArguments): Cut from Resolve.
13934         (Attribute.GetCharSetValue): Returns CharSet named argument.
13935         (Attribute.DefinePInvokeMethod): Gets default charset from
13936         module settings.
13937         (GlobalAttribute.ResolveAsTypeStep): Override.
13938         (GlobalAttribute.ResolveArguments): Override.
13939         
13940         * class.cs (TypeAttr): Is protected.
13941         
13942         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13943         (ModuleClass.DefaultCharSetType): New memeber.
13944         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13945         
13946         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13947         charset from module.
13948         
13949         * delegate.cs (TypeAttr): Override.
13950         (Delegate.DefineType): Use this TypeAttr.
13951         
13952         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13953         at very early stage (before types are defined) to resolve model
13954         module attributes. It will probably not work with corlib but it
13955         should be ok.
13956         
13957         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13958         charset from module.
13959         
13960         * typemanager.cs (default_charset_type): New type.
13961
13962 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13963
13964         * decl.cs (MemberCache.AddMethods): Don't warn if
13965         System.Object.Finalize has buggy MethodAttributes.
13966
13967         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13968         removed below.
13969
13970 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13971
13972         * doc.cs : detect ambiguous reference to overloaded members.
13973           Fixed bug #71603. MS 1.1 csc does not detect it.
13974
13975 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13976
13977         * doc.cs : delegates must not be referenced with parameters.
13978           Fixed bug #71605.
13979
13980 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13981
13982         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13983
13984 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13985
13986         * driver.cs (MainDriver): Stop processing if the CLS stage found
13987         errors. 
13988
13989         (CompilerCallableEntryPoint.InvokeCompiler): Always
13990         reset after execution;   Take a TextWriter argument for the
13991         output.
13992
13993         * report.cs: Use the error stream instead of hardcoding stderr. 
13994
13995 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13996
13997         * class.cs: Reduce code paths to test, too small of an
13998         optimization to make it worth the extra testing.  Always perform
13999         it. 
14000
14001 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14002
14003         Fix #74510.
14004         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
14005         operators that had errors reported on them.
14006
14007 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
14008
14009         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
14010         argument types.
14011         (Attribute.Resolve): Add named argument type checking.
14012         
14013         * class.cs (FixedField.Define): Use IsPrimitiveType
14014         
14015         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
14016         
14017         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
14018         unsafe parameter types.
14019         
14020         * statement.cs (Using.ResolveExpression): Add better error description.
14021         
14022         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
14023         
14024 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14025
14026         Fix #74484.
14027         * attribute.cs (Attribute.GetAttributeUsage): Resolve
14028         AttributeUsageAttribute in the emitcontext of the attribute class,
14029         not in the emitcontext of the attributable entity it was attached to.
14030         * cs-parser.jay: Use 'current_class', not 'current_container',
14031         when creating a GlobalAttribute.
14032
14033 2005-04-08  Alp Toker  <alp@atoker.com>
14034
14035         * pending.cs: The fix to #58413 failed to compile methods implementing
14036         interfaces with/without params modifiers and vice versa, even though
14037         params modifiers aren't part of the signature. Make the modifier check
14038         less strict as in csc.
14039
14040 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
14041             Anoob V E  <projectmonokochi@rediffmail.com>
14042             Harilal P R  <projectmonokochi@rediffmail.com>
14043
14044         Fix #58413.
14045         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
14046         modifiers of pending methods.
14047         (PendingImplementation.PendingImplementation): Initialize it.
14048         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
14049         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
14050         with ParameterData.  Add check for modifiers.
14051         * class.cs (MethodData.Define): Update to changes.
14052
14053 2005-04-07  Raja R Harinath  <rharinath@novell.com>
14054
14055         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
14056
14057 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
14058
14059         * class.cs (PropertyMethod.Define): Check private accessor in abstract
14060         property.
14061         
14062         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
14063         
14064         * rootcontext.cs,
14065         * typemanager.cs: Registered RequiredAttributeAttribute.
14066         
14067 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
14068
14069         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
14070         Warning CS0169 is back at level 3.
14071         (IMethodData.SetMemberIsUsed): New method.
14072         
14073         * decl.cs (IsUsed): New value; moved from FieldBase.Status
14074         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
14075         
14076         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
14077
14078         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
14079         contants.
14080         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
14081         is used.
14082         
14083         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
14084         is used.
14085         
14086         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
14087         to avoid the problems with nested types.
14088
14089 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
14090             Anoob V.E  <projectmonokochi@rediffmail.com>
14091             Harilal P.R  <projectmonokochi@rediffmail.com>
14092             Raja R Harinath  <rharinath@novell.com>
14093
14094         Fix #73820.
14095         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
14096         attribute.
14097         * typemanager (GetConstructor): Make public.
14098
14099 2005-04-05  John Luke  <john.luke@gmail.com>
14100             Raja R Harinath  <rharinath@novell.com>
14101
14102         Fix #62232.
14103         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
14104         struct too.  Return false quicker in a few cases.
14105         (VerifyUnManaged): Use it.
14106
14107 2005-04-05  Raja R Harinath  <rharinath@novell.com>
14108
14109         Fix #74041.
14110         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
14111         not 'unreachable_seen'.
14112
14113 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
14114
14115         * attribute.cs (Attribute.GetValue): Removed unused.
14116         
14117         * codegen.cs (CodeGen.TrimExt): Removed unused.
14118         
14119         * cs-parser.jay (output): Removed unused.
14120         
14121         * cs-tokenizer.cs (hex_digits): Removed unused.
14122         
14123         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
14124         
14125         * expression.cs (Indirection.LoadExprValue): Removed unused.
14126         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
14127         
14128         * iterators.cs (Iterator.param_types): Removed unused.
14129         
14130         * statement.cs (Goto.block): Removed unused.
14131         (ToplevelBlock.did): Removed unused.
14132         (Switch.ResolveConstantSwitch): Removed unused.
14133
14134 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
14135
14136         * rootcontext.cs: Allow mcs to bootstrap with the compilation
14137         resetting thingy.
14138
14139 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14140
14141         Fix #74232 and cs0208-3.cs.
14142         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
14143         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
14144         unmanaged type.  Don't use FieldBuilders when 't' is a
14145         TypeBuilder.  Use ModFlags and MemberType fields.
14146         * class.cs (MemberBase.member_type): Rename from MemberType.
14147         (MemberBase.MemberType): New property.  Determines member_type on
14148         demand.
14149         (MemberBase.DoDefine): Don't initialize MemberType here.
14150         (FieldMember.Define): Likewise.
14151
14152 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
14153
14154         Fix #74241
14155         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
14156         Attributes are emitted there.
14157         
14158 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14159
14160         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
14161         keyword in 'partial enum' too.
14162         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
14163         is not allowed).
14164         Report from Kamil Skalski <nazgul@omega.pl>.
14165
14166         Fix #74309.
14167         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
14168         have partial containers too.
14169
14170         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
14171         in block' checks to Block.CheckInvariantMeaningInBlock.
14172         * statement.cs (Block.GetKnownVariableInfo): Make private.
14173         (Block.IsVariableUsedInChildBlock): Remove.
14174         (Block.IsVariableUsedInBlock): Likewise.
14175         (Block.CheckInvariantMeaningInBlock): New.  Show location of
14176         conflicting declaration.
14177         (Block.AddVariable): Make error messages less long-winded and more
14178         specific.  Show location of conflicting declaration.
14179         * parameter.cs (Parameters.Location): New readonly property.
14180
14181 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14182
14183         Clean up semantics of invoking ResolveMemberAccess.
14184         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
14185         can have an instance, ensure that we pass in a non-TypeExpression
14186         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14187         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14188         argument.  Update to changes and simplify.
14189         (FieldExpr.Emitinstance): Remove CS0120 check.
14190         (PropertyExpr.EmitInstance): Likewise.
14191         * expression.cs (Argument.Resolve): Likewise.
14192         (Invocation.DoResolve): Update to changes in semantics of
14193         InstanceExpression.
14194
14195 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14196
14197         Fix #74241
14198         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14199         customization.
14200         
14201         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14202
14203 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14204
14205         Fix difference in behaviour with commandline invocation.
14206         * driver.cs (Driver.Reset): New.
14207         (CompilerCallableEntryPoint): Call it.
14208
14209         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14210         variable" warnings if the boolean expression failed to resolve.
14211
14212 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14213
14214         * attribute.cs: Fix the union of several permissions when some of them
14215         are unrestricted (so the result isn't an unrestricted permission set).
14216         Fix #74036.
14217
14218 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14219
14220         * ecore.cs (MemberExpr): New class.  Convert from interface
14221         IMemberExpr.
14222         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14223         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14224         error checks.
14225         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14226         (MethodGroupExpr.IsExplicitImpl): Remove.
14227         (Expression.GetFieldFromEvent): Remove.
14228         (SimpleName.MemberStaticCheck): Remove.
14229         (SimpleName.DoSimpleNameResolve): Update to changes.
14230         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14231         (MemberAccess.IdenticalNameAndTypeName): Remove.
14232         (MemberAccess.error176): Move to MemberExpr.
14233         (MemberAccess.DoResolve): Update to changes.
14234         (BaseAccess.DoResolve): Likewise.
14235
14236 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14237
14238         C# 2.0 Conditional attribute class implementation
14239         
14240         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14241         Analyzes class whether it has attribute which has ConditionalAttribute
14242         and its condition is not defined.
14243         
14244         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14245         (Class.IsExcluded): New method. Search for at least one defined
14246         condition in ConditionalAttribute of attribute class.
14247
14248 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14249
14250         * ecore.cs (PropertyExpr): Derive from Expression, not
14251         ExpressionStatement.
14252         (PropertyExpr.EmitStatement): Remove.
14253
14254 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14255
14256         Fix #74060.
14257         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14258         internal field "value__" of an enum be private.  The examples for
14259         "value__" that I found on MSDN all used FieldAttributes.Private.
14260
14261         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14262         Don't mention IL method attribute names.
14263
14264         Fix #47991.  Remove a TODO.
14265         * statement.cs (Block.Toplevel): Make into a field.
14266         (Block.Parameters): Move into ToplevelBlock.
14267         (Block.known_variables): Rename from child_variable_names.
14268         (Block.Block): Remove variants that take Parameters.  Initialize
14269         'Toplevel' with the immediately surrounding toplevel block.
14270         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14271         LocalInfo parameter.
14272         (Block.GetKnownVariableInfo): New.
14273         (Block.IsVariableNameUsedInChildBlock): Update.
14274         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14275         the block, even though it may not be in scope.
14276         (Block.AddVariable): Remove Parameters parameter.  Use
14277         Toplevel.Parameters instead.
14278         (Block.AddConstant): Remove Parameters parameter.
14279         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14280         (Block.IsParamaterReference): Likewise.
14281         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14282         (ToplevelBlock.Parameters): New.  Moved from Block.
14283         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14284         initialize Parameters to a non-null value.
14285         * cs-parser.jay: Update to changes.
14286         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14287         simple names that mean different things in the same block.  Use
14288         Block.IsVariableNameUsedInBlock.
14289
14290 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14291
14292         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14293         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14294         GetTypeHandle.  It is possible for a reflected type to derive from
14295         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14296         System.Array during mscorlib compilation).
14297         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14298         contain a method_hash, don't create one either.  Don't create a
14299         deep copy of the base cache's method_hash.
14300         (MemberCache.SetupCache): Rename back from DeepCopy.
14301         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14302         already initialized.  If we see an override function, add its
14303         underlying base virtual function to the member_hash too.
14304
14305         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14306
14307 2005-03-26  Raja R Harinath  <harinath@acm.org>
14308
14309         Fix #73038.
14310         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14311         fails to resolve, ensure that the LHS is still resolved as an
14312         lvalue.
14313
14314 2005-03-25  Raja R Harinath  <harinath@acm.org>
14315
14316         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14317         ec.ContainerType.
14318         (Enum.current_ec): Remove.
14319         (Enum.LookupEnumValue): Remove EmitContext argument.
14320         Just uses the one created during DefineType.
14321         (Enum.FindMembers): Update.
14322         * expression.cs (MemberAccess.DoResolve): Update.
14323
14324 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14325
14326         * assign.cs (Assign.DoResolve): Check for CS1717 when
14327         source and target are same (uses Equals).
14328
14329         * expression.cs (LocalVariableReference, ParameterReference,
14330         This): Implemented Equals, GetHashCode.
14331
14332         * statement.cs (Block.GetParameterReference): Removed useless
14333         local variable.
14334
14335 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14336
14337         Fix cs0128.cs
14338         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14339         blocks before deciding whether the error is cs0136 or cs0128.
14340
14341         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14342         (using_alias_directive, using_namespace_directive): Pass
14343         MemberName, not an expression to Namespace.UsingAlias and
14344         Namespace.Using.
14345         (MakeName): Use the MemberName of the namespace.
14346         * namespace.cs (Namespace.MemberName): New.
14347         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14348         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14349         Likewise.
14350         * decl.cs (MemberName.Name): Make readonly.
14351         (MemberName.FromDotted): New "constructor".
14352         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14353         (MemberCore.Name): Compute from MemberName on demand.
14354         (MemberCore.SetMemberName): Provide a way to change the
14355         MemberName.
14356         (MemberCore.AddToContainer): Don't take a fullname parameter.
14357         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14358         fully qualified name of the container to the member name.
14359         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14360         only if the type is a member of the root container.
14361         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14362         MemberName.Left rather than searching for an embedded ".".
14363         (PartialContainer.CreatePart): Update to changes in RootContext.
14364         (MemberBase.ShortName): Turn into a property.  Use
14365         MemberCore.SetMemberName.
14366         (MemberBase.ExplicitInterfaceName): Remove.
14367         (MemberBase.UpdateMemberName): Remove.
14368         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14369         (PropertyBase.SetMemberName): New override.
14370         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14371         (Tree.GetDecl): New.
14372         (Tree.AllDecls): Rename from Decls.
14373         * attribute.cs, enum.cs, report.cs: Update to changes.
14374         * driver.cs (MainDriver): Use MemberName.FromDotted on
14375         RootContext.MainClass.
14376
14377 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14378
14379         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14380         checks.
14381
14382         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14383
14384 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14385
14386         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14387         property accessor modifiers.
14388
14389         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14390         fixed buffer attribute (CS1716).
14391         (PropertyMethod.HasCustomAccessModifier): When property accessor
14392         has custom modifier.
14393
14394         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14395         modifiers.
14396         (PropertyExpr.DoResolveLValue): Add CS0272.
14397
14398 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14399
14400         * convert.cs: When converting to a pointer, use the proper Conv.U
14401         or Conv.I depending on the source data type.
14402
14403         * cs-tokenizer.cs: Make the size for large decimal constants,
14404         fixes #72957.
14405
14406 2005-03-17  Martin Baulig  <martin@ximian.com>
14407
14408         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14409         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14410
14411 2005-03-17  Martin Baulig  <martin@ximian.com>
14412
14413         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14414         to bool so we can return an error condition.
14415         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14416         returned an error.
14417
14418 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14419
14420         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14421         attributes.
14422
14423 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14424
14425         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14426         Refactor to avoid traversing the list of assemblies, and to avoid
14427         string concatenation.
14428         * typemanager.cs (guid_attr_type): Remove.
14429         (negative_hits, pointers, references): Remove hashes.
14430         (type_hash): New.
14431         (GetConstructedType): New.  Uses type_hash to handle constructed
14432         types (arrays, references, pointers).
14433         (GetReferenceType, GetPointerType): Use it.
14434         (GetNestedType): New.  Uses type_hash to handle nested types of
14435         reflected types.
14436         (LookupType, LookupTypeDirect): Remove.
14437         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14438         'types' hash and LookupTypeReflection directly.
14439         (params_string, params_object): Use GetConstructedType.
14440         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14441         top-level types.
14442         (Namespace.Lookup): Use cached_types.
14443         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14444         provided by old TypeManager.LookupType.
14445         * rootcontext.cs (MakeFQN): Remove.
14446         * decl.cs (DeclSpace.MakeFQN): Likewise.
14447         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14448         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14449         TypeManager.GetConstructedType.
14450         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14451
14452 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14453
14454         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14455         indexers.
14456
14457         * cs-parser.jay: Reports CS1527 for any namespace element.
14458
14459         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14460         Added CS0407.
14461
14462         * expression.cs (ParameterReference.IsAssigned): Changed error to
14463         CS0269.
14464         (Error_WrongNumArguments): Moved CS0245 detection here.
14465
14466         * statement.cs (Return.Resolve): Add CS1622 report.
14467
14468 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14469
14470         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14471
14472 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14473
14474         * attribute.cs expression.cs: Get rid of some allocations.
14475
14476 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14477
14478         * doc.cs : just eliminate the latest change.
14479
14480 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14481
14482         * doc.cs : commented out the latest change. It breaks xml-030.cs
14483
14484 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14485
14486         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14487           fail. So invoke CreateType() in FindDocumentedType().
14488
14489 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14490
14491         * cs-tokenizer.cs : added IsKeyword().
14492         * doc.cs : Detect keyword incorrectly used as identifier.
14493           Allow identifiers prefixed by @.
14494
14495 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14496
14497         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14498         It caused exception in namespace resolving (again!).
14499         
14500         * class.cs (Class.ctor): Removed exit.
14501         (PropertyMethod.ctor): ditto.
14502         
14503         * codegen.cs (Codegen.Reset): Reset static data.
14504         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14505         
14506         * cs-tokenizer.cs (Cleanup): Removed.
14507         
14508         * driver.cs (GetSystemDir): Rewrote to one line command.
14509         It caused problem with unloaded dynamic modules.
14510         (UnixParseOption): Removed Exit.
14511         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14512         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14513         Now can be mcs used as library.
14514         
14515         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14516         empty location.
14517         
14518         * location.cs (Reset): Reset static data.
14519         
14520         * namespace.cs (Reset): Reset static data.
14521         
14522         * report.cs (Report.Reset): Reset static data.
14523         
14524         * rootcontext.cs (RootContext.Reset): Reset static data.
14525         
14526         * tree.cs (RootTypes.ctor): Use Location.Null
14527         
14528         * typemanager.cs (TypeManager.Reset): Reset static data.
14529         (CoreLookupType): Removed Exit.
14530         (TypeHandle.Reset): Reset static data.
14531         
14532 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14533
14534         Fix #73516.
14535         * typemanager.cs (ComputeNamespaces): Import namespaces from
14536         referenced modules too.
14537
14538 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14539
14540         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14541         than '.'.
14542
14543 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14544
14545         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14546         enclosing DeclSpace.  This ensures that a name-lookup populates
14547         more caches and there are fewer 'TypeExpression's.  Carve out
14548         nested type lookup into ...
14549         (LookupNestedTypeInHierarchy): ... this.
14550
14551 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14552
14553         Clean up a few partial-class semantics.  
14554         Fixes test-357.cs and cs1618-2.cs.
14555         * cs-parser.jay (struct_declaration): Use 'current_class' as
14556         parent of newly-created struct.  Remove call to Register ().
14557         Use 'pop_current_class' to complete handing the current struct.
14558         (interface_declaration): Likewise.
14559         (class_declaration): Likewise.
14560         (enum_declaration): Use 'current_class' as parent of newly created
14561         enum.
14562         (delegate_declaration): Likewise.
14563         (pop_current_class): New function.  This is used to handle closing
14564         up the 'current_class' and 'current_container', and pointing them
14565         to the enclosing class/container.
14566         (CSharpParser): Initialize 'current_class' too.
14567         * decl.cs (MemberCore): Add check for invariant: a partial
14568         container is not a parsed entity, and thus does not enclose any
14569         parsed members.
14570         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14571         (DeclSpace.BaseTypeExpr): Use it.
14572         (DeclSpace.LookupType): Add check for invariant.
14573         * class.cs (TypeContainer): Add check for invariant: a nested
14574         class should have the same NamespaceEntry as its enclosing class.
14575         (TypeContainer.EmitFieldInitializers): Make virtual.
14576         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14577         MemberCore.
14578         (TypeContainer.Register): Remove.
14579         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14580         null.  Use TypeResolveEmitContext for resolving base types and
14581         interfaces.  Move initialization of Parts.TypeBuilder here from
14582         ...
14583         (TypeContainer.DefineNestedTypes): ... here.
14584         (PartialContainer): Take a Namespace not a NamespaceEntry.
14585         (PartialContainer.Create): Don't use Register.  Call the
14586         appropriate Add... function directly.
14587         (ClassPart): Take both the PartialContainer and the enclosing
14588         class as constructor arguments.
14589         (ClassPart.EmitFieldInitializers): Override.
14590         (ClassPart.PartFindNestedTypes): Remove.
14591         (FieldBase.GetInitializerExpression): Resolve the initializer
14592         expression in the emit context of the enclosing class.
14593         * tree.cs (RootTypes): Remove Register ().
14594         
14595 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14596
14597         * cs-parser.jay: Removed CS0134.
14598         
14599         * driver.cs: Removed CS1901.
14600         
14601         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14602         for predefined types.
14603
14604 2005-03-07  Duncan Mak  <duncan@novell.com>
14605
14606         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14607         well. Fixes bug #73454.
14608
14609 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14610
14611         * cs-tokenizer.cs (xtoken): Add CS1035.
14612         
14613         * class.cs (MethodData.Define): Add CS0683.
14614         (FieldMember.ctor): Add CS0681.
14615
14616 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14617
14618         * ecore.cs (SimpleName.DoResolve): Rename from
14619         SimpleName.DoResolveAllowStatic.
14620         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14621         Pass 'intermediate' flag to MemberStaticCheck.
14622         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14623         of "intermediate" lookups via MemberAccess.
14624         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14625         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14626
14627 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14628
14629         Fix #73394.
14630         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14631         slipped in because of variable names that are identical to a
14632         builtin type's BCL equivalent ('string String;', 'int Int32;').
14633         (PropertyExpr.EmitInstance): Likewise.
14634
14635 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14636
14637         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14638         
14639         * report.cs (warning_ignore_table): Made public.
14640
14641 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14642
14643         Fix #73282.
14644         * class.cs (MethodData.Emit): Pass 'container' to
14645         container.GetObsoleteAttribute instead of 'container.Parent'.
14646
14647 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14648
14649         * cs-parser.jay: Add 1534 error test.
14650
14651         * iterators.cs (Yield.CheckContext): Add error 1629.
14652         (Iterator.ctor): Save unsafe modifier.
14653         (MoveNextMethod.DoEmit): Restore unsafe context.
14654
14655         * namespace.cs (UsingAlias): Better error message.
14656
14657 2005-03-03  Dan Winship  <danw@novell.com>
14658
14659         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14660         the warning message [#73219]
14661
14662 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14663
14664         Fix compile with MCS 1.0.0.0.
14665         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14666         w_restore to not depend on string constant folding.
14667
14668 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14669
14670         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14671         CS0246 check to users who passed 'silent = false'.
14672         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14673         check.
14674         (SimpleName.SimpleNameResolve): Update.
14675         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14676         (MemberAccess.IdenticalNameAndTypeName): Update.
14677         * doc.cs (FindDocumentedTypeNonArray): Update.
14678
14679 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14680
14681         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14682         * parameters.cs (ComputeAndDefineParameters): Remove.
14683         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14684         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14685         Use GetParameterInfo.
14686
14687 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14688
14689         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14690
14691 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14692
14693         Unify DeclSpace.LookupType and DeclSpace.FindType.
14694         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14695         is in charge of defining nested types on demand.
14696         (DeclSpace.LookupType): Use it when the current_type is a
14697         TypeBuilder.  Use LookupTypeDirect for reflected types.
14698         (DeclSpace.FindType): Remove.
14699         (DeclSpace.LookupInterfaceOrClass): Likewise.
14700         (DeclSpace.DefineTypeAndParents): Likewise.
14701         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14702         DeclSpace.LookupType.
14703         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14704         * typemanager.cs (LookupType): Simplify.
14705         (AddUserType): Remove type from negative_hits.
14706         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14707         * class.cs (TypeContainer.FindMembers): Move handling of nested
14708         types ...
14709         (TypeContainer.FindMembers_NestedTypes): ... here.
14710         (TypeContainer.FindNestedType): Implement override.
14711         (ClassPart.FindNestedType): Delegate to PartialContainer.
14712         (ClassPart.PartFindNestedType): Looks up the nested types of the
14713         part alone.
14714
14715 2005-03-02  Martin Baulig  <martin@ximian.com>
14716
14717         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14718         static constructor in static classes.
14719
14720 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14721
14722         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14723         sizeParamIndex is not specified.
14724
14725 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14726
14727         Fix #73117
14728         * report.cs (WarningMessage.IsEnabled): Missing null check.
14729
14730 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14731
14732         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14733         in the fields and not in the properties.
14734
14735 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14736
14737         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14738         fields as well.
14739
14740 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14741
14742         * attribute.cs: Small refactoring (improved robustness).
14743         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14744         (ValidateGuid): Removed.
14745         (Resolve): Removed referenced to above mentioned.
14746         (GetAttributeUsage): Made private and changed to work without
14747         class assistance.
14748         (GetIndexerAttributeValue): Don't crash.
14749         (GetConditionalAttributeValue): Ditto.
14750         (GetClsCompliantAttributeValue): Ditto.
14751         (ExtractSecurityPermissionSet): All attributes exceptions are
14752         error 648.
14753         (GetPropertyValue): New helper.
14754         (GetMethodImplOptions): New method.
14755         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14756         some missing properties.
14757         
14758         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14759         (Method.ApplyAttributeBuilder): Updated.
14760         
14761         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14762         exception.
14763
14764 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14765
14766         Fix #73052.
14767         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14768         non-simple types (array, pointer, reference).
14769
14770 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14771
14772         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14773
14774         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14775         for operators.
14776         (Method.CheckBase): Catch wrong destructor here.
14777         (MethodData.Define): Add errors 550, 668.
14778
14779         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14780
14781         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14782
14783         * pending.cs (VerifyPendingMethods): Add error 551.
14784
14785         * typemanager.cs (CSharpName): Next error report helper.
14786
14787 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14788
14789         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14790         attributes. Removed useless attribute double check.
14791         It saves almost 2MBs for corlib.
14792
14793 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14794
14795         Fix #72924.
14796         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14797         called twice in case of error.
14798
14799 2005-02-23  Chris Toshok  <toshok@ximian.com>
14800
14801         Fix compiler portions of #72827.
14802         * statement.cs (Block.Emit): call Begin/EndScope on the
14803         EmitContext instead of the ILGenerator.
14804
14805         * codegen.cs (EmitContext.BeginScope): new method, call
14806         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14807         we have one.)
14808         (EmitContext.BeginScope): same, but EndScope and CloseScope
14809
14810         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14811         offset and call the superclass's OpenScope(int) with it.
14812         (SymbolWriter.CloseScope): get the current il
14813         offset and call superclass's CloseScope(int) with it.
14814
14815 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14816
14817         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14818         CS1677 for out and ref as well.
14819
14820         * class.cs (Method.Define): Add error CS1599 detection.
14821         
14822         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14823         
14824         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14825         
14826         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14827         
14828         * support.cs.cs (ModifierDesc): New helper method.
14829
14830 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14831             Abin Thomas  <projectmonokochi@rediffmail.com>
14832             Anoob V E  <projectmonokochi@rediffmail.com>
14833             Harilal P R  <projectmonokochi@rediffmail.com>
14834
14835         Fix #57851, #72718.
14836         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14837         MemberLookup (used for error reporting) actually returns a result.
14838         Fix error report number (122, not 112).
14839
14840 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14841             Anoob V E  <projectmonokochi@rediffmail.com>
14842             Harilal P R  <projectmonokochi@rediffmail.com>
14843
14844         Fix #71134.
14845         * pending.cs (PendingImplementation.GetAbstractMethods):
14846         Find NonPublic members too.
14847
14848 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14849
14850         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14851         Fixed error 217.
14852         
14853         * class.cs (MethodCore.CheckMethodAgainstBase):
14854         Add error 239 report.
14855
14856 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14857
14858         Fix #68955.
14859         * expression.cs (Invocation.IsApplicable): Make public.
14860         (Invocation.IsParamsMethodApplicable): Likewise.
14861         * delegate.cs (Delegate.VerifyApplicability): Don't use
14862         Invocation.VerifyArgumentCompat for parameter applicability
14863         testing.  Use Invocation.IsApplicable and
14864         Invocation.IsParamsMethodApplicable.
14865
14866 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14867
14868         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14869         
14870         * class.cs (Operator.Define): Add error 217 report.
14871         
14872 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14873
14874         * namespace.cs (UsingEntry.Resolve): Undo change below.
14875
14876 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14877
14878         Fix #72756.
14879         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14880         disable the error message when the extended MemberLookup also
14881         fails.
14882         (Expression.MemberLookupFinal): Update.
14883         (SimpleName.DoSimpleNameResolve): Update.
14884         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14885         Don't use MemberLookupFinal.
14886         (New.DoResolve): Update.
14887         (BaseAccess.CommonResolve): Update.
14888
14889 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14890
14891         Fix #72732.
14892         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14893         occured previously, don't resolve again.
14894
14895 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14896
14897         Fix #69949
14898         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14899         argument. Call ResolveAttributeUsage for unresolved.
14900         when types doesn't match ctor arguments.
14901         
14902         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14903         for nested attribute classes.
14904         (Class.attribute_usage): Removed.
14905         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14906         for attribute class.
14907         
14908         * ecore.cs (IsAttribute): Removed.
14909         
14910         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14911         
14912         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14913         now normal types.
14914         (attribute_types): Removed.
14915         (EmitCode): Global attributes are emited as the latest.
14916
14917 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14918
14919         * class.cs (EmitFieldInitializers): Don't emit field initializer
14920         for default values when optimilization is on.
14921         
14922         * constant.cs (Constant.IsDefaultValue): New property.
14923         
14924         * driver.cs: Add /optimize handling.
14925         
14926         * constant.cs,
14927         * ecore.cs,
14928         * literal.cs: Implement new IsDefaultValue property.
14929         
14930         * rootcontext.cs (Optimize): New field, holds /optimize option.
14931
14932 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14933
14934         Fix crasher in re-opened #72347.
14935         * namespace.cs (Namespace.Lookup): Return null if
14936         DeclSpace.DefineType returns null.
14937
14938         Fix #72678.
14939         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14940
14941 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14942
14943         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14944         now returns null if it cannot resolve to an lvalue.
14945         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14946         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14947         returned null.  Remove check for SimpleName.
14948         (EventExpr.DoResolveLValue): New.
14949         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14950         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14951         error from ...
14952         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14953         avoid CS0131 error.
14954         (Unary.ResolveOperator): Move CS0211 check ...
14955         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14956         CS0131 error.
14957         (Unary.DoResolveLValue): Simplify.
14958         (AddressOf.DoResolveLValue): New.
14959         (ArrayAccess.DoResolveLValue): New.
14960
14961 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14962
14963         * attribute.cs (Attribute.Resolve): Add arguments casting for
14964         when types doesn't match ctor arguments.
14965
14966 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14967
14968         Fix parts of #63202.
14969         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14970         lookup of operator in base type.  Ensure that all checks happen
14971         when the operator resolves to an "op_..." method.
14972
14973 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14974
14975         Fix #71992.
14976         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14977         'ignore_cs0104' parameter.  Pass it to ...
14978         (NamespaceEntry.Lookup): ... this.
14979         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14980         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14981         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14982         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14983         Update.  Request that cs0104 errors be ignored.
14984         (ComposedCast.ResolveAsTypeStep): Update.
14985
14986 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14987
14988         Fix #59209.
14989         * expression.cs (Invocation.BetterFunction): Remove support for
14990         comparing virtual functions and their overrides.
14991         (Invocation.IsOverride): New.
14992         (Invocation.OverloadResolve): Don't consider 'override' functions
14993         during candidate selection.  Store them in a lookaside list.
14994         If the selected method is a 'virtual' function, use the list to
14995         find any overrides that are closer to the LHS type.
14996
14997 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14998
14999         * expression.cs (New.DoResolve): Add complex core type reduction.
15000         (New.Constantify): Converts complex core type syntax like 'new int ()'
15001         to simple constant.
15002         
15003 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15004
15005         * decl.cs (EntryType.EntryType): New constructor to create an
15006         updated copy of a cache entry.
15007         (MemberCache.AddMethods): Use it.
15008         (MemberCache.ClearDeclaredOnly): Remove.
15009         (MemberCache.MemberCache): Update.
15010
15011 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15012
15013         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
15014         variable.  This one is represents the actual low-level declaration
15015         of the method, as opposed to the semantic level `IsStatic'.   
15016
15017         An anonymous method which is hosted into a static method might be
15018         actually an instance method.  IsStatic would reflect the
15019         container, while MethodIsStatic represents the actual code
15020         generated.
15021
15022         * expression.cs (ParameterReference): Use the new MethodIsStatic
15023         instead of IsStatic.
15024
15025         * anonymous.cs (AnonymousMethod.Compatible): Pass the
15026         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
15027         set on the current EmitContext. 
15028
15029         * expression.cs (Cast): Overload DoResolveLValue so we can pass
15030         resolve our casted expression as an LValue.  This triggers the
15031         proper LValue processing that is later required by Assign.
15032
15033         This fixes 72347.
15034
15035         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
15036
15037 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
15038
15039         C# 2.0 Fixed buffer implementation
15040
15041         * anonymous.cs: Update after RegisterHelperClass renaming.
15042
15043         * attribute.cs (AttributeTester.fixed_buffer_cache):
15044         Cache of external fixed buffers.
15045         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
15046         implementation if field is fixed buffer else null.
15047
15048         * class.cs
15049         (TypeContainer.AddField): Accept FieldMember instead of Field.
15050         (FieldBase.IsFieldClsCompliant): Extracted code from
15051         VerifyClsCompliance descendant customization.
15052         (FixedField): New class handles fixed buffer fields.
15053         (FixedFieldExternal): Keeps information about imported fixed
15054         buffer.
15055         (IFixedField): Make access to internal or external fixed buffer
15056         same.
15057
15058         * cs-parser.jay: Add fixed buffer parsing.
15059
15060         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
15061         buffer.
15062
15063         * expression.cs (Indirection): Extended implementation to accept
15064         fixed buffer field.
15065         (PointerArithmetic.Emit): Get element from fixed buffer as well.
15066         (ElementAccess.MakePointerAccess): Get type as parameter.
15067         (DoResolve): Add fixed buffer field expression conversion.
15068         (DoResolveLValue): Ditto.
15069         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
15070         (ArrayPtr): Derives from FixedBufferPtr.
15071         (ArrayPtr.Emit): Add extra emit for array elements.
15072
15073         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
15074
15075         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
15076         for compiler generated types.
15077         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
15078
15079         * statement.cs (Fixed): Refactored to be easier add fixed buffer
15080         and consume less memory.
15081         (Fixed.Resolve): Add fixed buffer case.
15082
15083         * typemanager.cs (compiler_generated_attr_ctor,
15084         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
15085         (HasElementType): Add our own implementation to work on every
15086         runtime.
15087
15088 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15089
15090         * anonymous.cs (CaptureContext): Track whether `this' has been
15091         referenced.   
15092
15093         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
15094         only captured `this' if it was implicitly done (instance
15095         methods/variables were used). 
15096
15097         * codegen.cs (EmitContext.CaptureThis): New method to flag that
15098         `this' must be captured.
15099
15100 2005-01-30  Miguel de Icaza  <miguel@novell.com>
15101  
15102         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
15103         is null it means that there has been no need to capture anything,
15104         so we just create a sibling.
15105
15106         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
15107
15108         Just a partial fix.  The other half is fairly elusive.
15109         
15110 2005-02-10  Raja R Harinath  <rharinath@novell.com>
15111
15112         Fix #52586, cs0121-4.cs.
15113         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
15114         and return a hashtable.
15115         (MemberCache.ClearDeclaredOnly): New.
15116         (MemberCache.MemberCache): Update to change.  Make a deep copy of
15117         the method_hash of a base type too.
15118         (MemberCache.AddMethods): Adapt to having a deep copy of the base
15119         type methods.  Overwrite entries with the same MethodHandle so
15120         that the ReflectedType is correct.  The process leaves in base
15121         virtual functions and their overrides as distinct entries.
15122         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
15123         matters since it was boxed in a ArrayList before.
15124         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
15125         modifier.
15126         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
15127         case of a virtual function and its override (choose the overload
15128         as better).
15129         (Invocation.OverloadResolve): Avoid 'override' members during
15130         'applicable_type' calculation.
15131
15132 2005-02-09  Raja R Harinath  <rharinath@novell.com>
15133
15134         Combine two near-redundant caches.
15135         * typemanager.cs (method_params): Rename from method_internal_params.
15136         (TypeManager.GetParameterData): New.  Replace
15137         Invocation.GetParameterData.
15138         (TypeManager.LookupParametersByBuilder): Remove.
15139         * expression.cs (Invocation.method_parameter_cache): Remove.
15140         (Invocation.GetParameterData): Remove.
15141         Update to changes.
15142         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
15143         Update to changes.
15144
15145 2005-02-08  Raja R Harinath  <rharinath@novell.com>
15146
15147         Fix #72015.
15148         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
15149         TypeManager.multicast_delegate_type is null, resolve it by looking
15150         up "System.MulticastDelegate".
15151         * rootcontext.cs (RootContext.ResolveCore): Simplify.
15152
15153 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
15154             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
15155             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
15156
15157         Fix cs0164.cs.
15158         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
15159         (LabeledStatement.AddReference): New.  Set 'referenced'.
15160         (Goto.Resolve): Use it.
15161
15162 2005-02-05  John Luke  <john.luke@gmail.com>
15163
15164         * driver.cs: remove duplicate -doc line in Usage ()
15165
15166 2005-02-04  Raja R Harinath  <rharinath@novell.com>
15167
15168         * location.cs (Location.AddFile): Fix CS2002 error report.
15169
15170 2005-02-02  Martin Baulig  <martin@ximian.com>
15171
15172         * delegate.cs (Delegate.DefineType): Report an internal error if
15173         TypeManager.multicast_delegate_type is null.  See bug #72015 for
15174         details.        
15175
15176 2005-02-02  Raja R Harinath  <rharinath@novell.com>
15177
15178         Fix a crasher in a variant of #31984.
15179         * const.cs (Constant.CheckBase): New override that defers the
15180         new-or-override check in case the base type hasn't been populated
15181         yet.
15182         (Constant.Define): Ensure the new-or-override check is performed.
15183
15184 2005-02-01  Duncan Mak  <duncan@ximian.com>
15185
15186         * const.cs (LookupConstantValue): Check that `ce' is not null
15187         before calling GetValue ().
15188
15189 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15190
15191         Fix test-334.cs (#69519).
15192         * cs-parser.jay (using_alias_directive): Pass in an expression to
15193         NamespaceEntry.UsingAlias.
15194         (using_namespace_directive): Pass in an expression to
15195         NamespaceEntry.Using.
15196         (namespace_name): Don't flatten to a string.
15197         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15198         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15199         ResolveAsTypeStep.
15200         (NamespaceEntry.UsingEntry): Likewise.
15201         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15202         changes.
15203         (NamespaceEntry.LookupForUsing): Remove.
15204         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15205         names.
15206         (NamespaceEntry.Lookup): Remove support for dotted names.
15207
15208 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15209
15210         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15211         split into two.
15212         (NamespaceEntry.ImplicitParent): Compute on demand.
15213         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15214         parallels the current.
15215         (NamespaceEntry.LookupForUsing): Use it.
15216         (NamespaceEntry.Lookup): If the current namespace-entry is
15217         implicit, don't search aliases and using tables.
15218
15219 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15220
15221         Fix #31984.
15222         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15223         BaseCache here.
15224         (TypeContainer.BaseCache): Compute on demand.
15225         (TypeContainer.FindMembers): Define constants and types if they're
15226         not already created.
15227         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15228         check.
15229         * const.cs (Constant.Define): Make idempotent.
15230
15231 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15232
15233         * pending.cs: Produce better code (no nops produced by using Ldarg
15234         + value).
15235         
15236         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15237         i - 1' it should be arg + 1.
15238
15239         Fixes bug #71819.
15240
15241 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15242
15243         * attribute.cs (Attribute.CheckAttributeType): Make private
15244         non-virtual.
15245         (Attribute.ResolveType): Make virtual.
15246         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15247         handling of RootContext.Tree.Types.
15248
15249 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15250
15251         Update attribute-handling to use the SimpleName/MemberAccess
15252         mechanisms.
15253         * cs-parser.jay (attribute): Pass in an expression to the
15254         constructors of Attribute and GlobalAttribute.
15255         * attribute.cs (Attribute): Take an expression for the name.
15256         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15257         passed in attribute name expression.
15258         (Attribute.CheckAttributeType): Use it.
15259         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15260         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15261         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15262         argument to prevent error messages if the lookup fails.
15263
15264 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15265
15266         * expression.cs (Indirection): Implemented IVariable interface
15267         to support indirection in AddressOf operator.
15268         (PointerArithmetic.Emit): Add optimalization for case where
15269         result can be precomputed.
15270
15271 2005-01-26  Martin Baulig  <martin@ximian.com>
15272
15273         * class.cs (TypeContainer.AttributeTargets): Return the correct
15274         AttributeTargets depending on our `Kind' instead of throwing an
15275         exception; fixes #71632.
15276
15277 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15278
15279         Fix #71257
15280         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15281         constant members.
15282
15283 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15284
15285         Fix #71602.
15286         * expression.cs (MemberAccess.DoResolve): Don't complain with
15287         cs0572 when the LHS of a member access has identical name and type
15288         name.
15289
15290 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15291
15292         Fix #71651, #71675
15293         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15294         CreatePermission.
15295         Create custom PermissionSet only for PermissionSetAttribute.
15296
15297 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15298
15299         Fix #71649
15300         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15301         delegates in static class.
15302
15303 2005-01-24  Martin Baulig  <martin@ximian.com>
15304
15305         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15306         merging an implicit block, just use its reachability.
15307
15308         * statement.cs (Block.Resolve): Make the unreachable code check
15309         work wrt. implicit blocks; see test-337 from #63842.
15310
15311 2005-01-21  Alp Toker  <alp@atoker.com>
15312  
15313         * cs-parser.jay: destructor_declaration's container is PartialContainer
15314         not Class when partial types are used, so use Kind prop instead of
15315         'is'.
15316         
15317 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15318
15319         * cs-parser.jay: Improve error reporting when an interface
15320         declares new types.
15321
15322 2005-01-20  Dick Porter  <dick@ximian.com>
15323
15324         * support.cs: SeekableStreamReader fix from Sandor Dobos
15325         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15326         chars are read.  Fixes bug 70369.
15327
15328 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15329
15330         * cs-parser.jay (catch_clause): Simplify current_block handling
15331         somewhat.
15332
15333 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15334
15335         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15336         code with ImplicitStandardConversion to handle the implicit
15337         conversion of method groups into valid delegate invocations. 
15338
15339         The problem is that in parameter handling we were using this code
15340         path.  Fixes bug #64698
15341
15342 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15343
15344         * cs-parser.jay: Fix several infelicities.
15345         - Avoid assigning to the parser value stack.  Code like 
15346           '$3 = null' is unclean.  Synthesize a value for the code block
15347           instead. 
15348         - Avoid using oob_stack for storing location information.  Use ...
15349         (_mark_): ... this.  New (empty) rule.  Saves the current location
15350         in $$.
15351         (foreach_statement): Avoid using oob_stack for current_block
15352         handling.  Use technique used in for_statement and
15353         using_statement.  Synthesize a value for the code block to store
15354         additional intermediate information.
15355
15356 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15357
15358         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15359         of a different type is only allowed to private fields of a
15360         containing type, not on fields of a base class.
15361
15362         See test-174.cs and error cs0122-9.cs
15363
15364 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15365
15366         Fix test-335.cs (bug #58126).
15367         * cs-parser.jay (argument): Split out non-expression parts of the
15368         rule into 'non_simple_argument'.
15369         (invocation_expression): Support parenthesized invocations with
15370         multiple arguments, and with single non-simple arguments.
15371
15372 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15373
15374         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15375         places.
15376
15377 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15378
15379         Fix cs0038-1.cs, cs1640-6.cs.
15380         * ecore.cs (Expression.Resolve): Remove special-case for
15381         SimpleName in error-handling.
15382         (Expression.almostMatchedMembers): Relax access permission to
15383         protected.
15384         (Expression.MemberLookupFailed): Handle duplicates in
15385         almostMatchedMembers list.
15386         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15387         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15388         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15389         overload if the passed in MemberInfo is a MethodBase.
15390
15391 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15392
15393         Fix #70749
15394         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15395         for non-CAS & merge permission sets properly.
15396
15397 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15398
15399         Improve standard-compliance of simple name and member access 
15400         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15401         * ecore.cs (FullNamedExpression): New abstract base class 
15402         for Namespaces and TypeExpressions.
15403         (ResolveFlags.SimpleName): Remove.
15404         (SimpleName): Remove support for dotted names.
15405         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15406         DeclSpace.FindType and DeclSpace.LookupType.
15407         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15408         (Expression.ExprClassName): Make member function.
15409         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15410         a namespace.  Remove creation of dotted "SimpleName"s.
15411         (MemberAccess.DoResolve): Likewise.
15412         * decl.cs (DeclSpace.Cache): Make private.
15413         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15414         (DeclSpace.FindType): Update.
15415         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15416         FullNamedExpression.
15417         * namespace.cs (Namespace): Derive from FullNamedExpression
15418         so that it can be part of expression resolution.
15419         (Namespace.Lookup): Return an FullNamedExpression.
15420         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15421         namespace.
15422         * rootcontext.cs (NamespaceLookup): Remove.
15423         (LookupType): Move to DeclSpace.
15424         * attribute.cs (CheckAttributeType): Update.
15425         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15426         (FindDocumentedTypeNonArray): Likewise.
15427
15428 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15429
15430         Fix cs0509.cs, cs1632.cs.
15431         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15432         is the same as IsInterface.
15433         (TypeContainer.GetClassBases): Likewise.
15434         * statement.cs (LabeledStatement.ig): New field.
15435         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15436         label.
15437         (LabeledStatement.DoEmit): Check that the label was created with
15438         the same ILGenerator.
15439
15440 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15441
15442         Fix #71058
15443         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15444         accessors to its properties.
15445
15446         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15447         from accessors to property.
15448         
15449 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15450
15451         Fix #70722
15452         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15453         only for overrides.
15454         
15455 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15456
15457         * attribute.cs: Check for null and empty strings.  
15458
15459         I have lost another battle to Paolo.
15460
15461 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15462
15463         Fix #70942
15464         * class.cs (PropertyMethod): Set Parent field in ctors.
15465         (SetMethod.InternalParameters): Add unsafe switch hack.
15466         Override MarkForDuplicationCheck where it is appropriate.
15467
15468         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15469         It says whether container allows members with the same name.
15470         Base default is no.
15471         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15472         Removed is_method parameter.
15473
15474 2005-01-06  Duncan Mak  <duncan@ximian.com>
15475
15476         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15477         because the previous change led to incorrect reporting of CS1032
15478         ("Cannot define/undefine preprocessor symbols after first token in
15479         file"). Instead of using `tokens_seen' as the only flag that
15480         triggers CS1040, introduce `comments_seen'. This new flag is used
15481         to signify having seen comments on the current line, so it is
15482         unset after a newline.
15483
15484 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15485
15486         * doc.cs : When searching for a type, find nested type too.
15487           This fixes bug #71040.
15488
15489 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15490
15491         * doc.cs :
15492           - Warn missing member comment on those classes which also does not
15493             have doc comments. Fixed bug #71041.
15494           - Don't warn missing doc comment on default constructor.
15495             Fixed bug #71042.
15496
15497 2005-01-06  Duncan Mak  <duncan@ximian.com>
15498
15499         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15500         comments, set `tokens_seen' to true. This allows us to detect
15501         misplaced preprocessor directives (i.e. not at the beginning of
15502         the a line, nor after whitespaces). In that case, report error
15503         CS1040. This fixes bug #56460.
15504
15505         * cs-parser.jay (interface_member_declaration): Add checks for
15506         IsExplicitImpl, and report CS0541 error if an interface member is
15507         defined as an explicit interface declaration.
15508
15509 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15510
15511         Fix #70817
15512         * class.cs (PropertyMethod): Set Parent field in ctors.
15513         (SetMethod.InternalParameters): Add unsafe switch hack.
15514         
15515         * decl.cs (MemberCore.Parent): Cannot be readonly.
15516
15517 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15518
15519         * decl.cs (DeclSpace.ResolveType): Remove.
15520         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15521         Merge in code from ...
15522         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15523         * class.cs, enum.cs: Update to changes.
15524
15525 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15526
15527         * anonymous.cs: Ensure that we init the scope of our parent if it
15528         has not been initialized yet.
15529
15530 2004-12-30  Duncan Mak  <duncan@ximian.com>
15531
15532         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15533         if field.FieldBuilder is null. Fixes #70758.
15534
15535         * convert.cs: Fixed some typos and updated some of the comments.
15536         (ImplicitStandardConversionExists):
15537         (TryImplicitIntConversion): If `target_type' is an interface and
15538         the type of `ic' implements this interface, return true or a new
15539         BoxedCast instead of null. This fixes #70468.
15540
15541 2004-12-29  Duncan Mak  <duncan@ximian.com>
15542
15543         * expression.cs (Argument.Emit): Check that Expr is
15544         IMemoryLocation before casting to it, and report CS1510 otherwise.
15545
15546         This fixes #70402.
15547
15548 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15549
15550         * statement.cs (Block.ThisVariable): remove the recursion here, to
15551         make the --profile more sane.
15552
15553 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15554
15555         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15556         assembly, by JB Evain.
15557
15558 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15559
15560         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15561           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15562         "parent" refers to enclosing type/class.  "base" refers to superclass.
15563
15564 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15565
15566         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15567         Ensure that we only have GlobalAttributes.
15568         * attribute.cs (Attribute.Emit): Make non-virtual.
15569         (GlobalAttribute.Emit): Remove.
15570         (Attribute.Resolve): Make virtual.
15571         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15572         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15573         the argument. Don't create one.
15574         (Attribute.GetObsoleteAttribute): Likewise.
15575         (Attribute.GetClsCompliantAttributeValue): Likewise.
15576         * class.cs, decl.cs: Update to changes.
15577
15578 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15579
15580         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15581         
15582         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15583         
15584         * statement.cs (Foreach.Resolve): Add error 186 report.
15585
15586 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15587
15588         * expression.cs (Conditional.DoResolve): Add warning 429.
15589         
15590         * statement.cs (If.Resolve): Add warning 665.
15591
15592 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15593
15594         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15595         except when in the parser, and in GlobalAttribute.
15596         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15597         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15598         RootContext.Tree.Types.NamespaceEntry once work is done.
15599         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15600         and resets RootContext.Tree.Types.NamespaceEntry.
15601
15602 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15603
15604         * cs-parser.jay: Don't create a block for every variable.
15605
15606 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15607
15608         * location.cs: Provide extra information.
15609
15610         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15611         variables from the captured environment, it is the ldarg_0.
15612
15613 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15614
15615         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15616         find a conclusion.
15617         
15618         * class.cs: Changed warning level for 169 to avoid developer
15619         displeasure from warning flooding. It will be changed back when they
15620         fix most of current BCL warnings.
15621         
15622         * RootContext.cs: Pushed default WarningLevel to 3.
15623         
15624         * statement.cs: Removed unused variable.
15625
15626 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15627
15628         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15629         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15630         Add error 502 report.
15631         (StaticClass.DefineType): Add error 441 report.
15632         (Class.AllowedModifiersProp): New virtual property as temporary
15633         extension to AllowedModifiers.
15634         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15635         to share implementation with StaticClass and don't call virtual
15636         methods from ctor.
15637         
15638         * driver.cs (MainDriver): Add error 1558 test.
15639
15640         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15641         report. Moved error 36 test here.
15642
15643         * statement.cs (Throw.Resolve): Add error 724 report.
15644
15645         * typemanager.cs: Add out_attribute_type core type.
15646         
15647 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15648
15649         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15650         3018 report.
15651         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15652
15653         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15654         3017 report.
15655         
15656         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15657
15658         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15659         Add error 3023 report.
15660         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15661
15662         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15663         implementation.
15664
15665 2004-12-12  John Luke  <john.luke@gmail.com>
15666
15667         * driver.cs (AddArgs): take -- into account when
15668         adding arguments, fixes bug 65710 
15669
15670 2004-12-12  Martin Baulig  <martin@ximian.com>
15671
15672         * expression.cs (Unary.TryReduceNegative): Added support for
15673         SByteConstant and ByteConstant.
15674         (Unary.Reduce): Check error values from TryReduceNegative().
15675
15676 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15677
15678         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15679         and report exception as error 182.
15680
15681 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15682
15683         * driver.cs (Main): Fix message when there are warnings.
15684
15685 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15686
15687         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15688
15689 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15690
15691         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15692         Reduced number of warnings.
15693         
15694         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15695
15696 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15697
15698         * driver.cs: Removed message.
15699
15700         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15701
15702 2004-12-08    <vargaz@freemail.hu>
15703
15704         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15705
15706 2004-12-08  Martin Baulig  <martin@ximian.com>
15707
15708         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15709         instead of a CS3002 for properties and indexer.
15710
15711 2004-12-08  Martin Baulig  <martin@ximian.com>
15712
15713         * decl.cs (MemberName.ToString): Make this work again.
15714
15715 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15716
15717         * attribute.cs (Resolve): Add error 591 detection.
15718
15719         * class.cs (FieldMember.Define): Add error 1547 detection.
15720         (Indexer.Define): Add error 620 detection.
15721         (Operator.Define): Add error 590 detection.
15722
15723         * ecore.cs: Missing argument for error 79.
15724
15725         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15726         detection.
15727
15728 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15729
15730         Fix #70106
15731         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15732         only.
15733
15734 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15735
15736         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15737           Some operator comments were suppressed.
15738         * doc.cs : Implicit/explicit operator name in doc comments are like
15739           "op_Explicit(type)~returnType", so added suffix handling.
15740
15741 2004-12-07  Martin Baulig  <martin@ximian.com>
15742
15743         * decl.cs
15744         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15745         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15746         (DeclSpace.ec): New protected field; store the EmitContext here.
15747         (DeclSpace.EmitContext): New public property; moved here from
15748         `TypeContainer'.
15749         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15750         EmitContext.
15751
15752         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15753         (Enum.Emit): Don't create a new EmitContext.
15754
15755         * delegate.cs (Delegate.DefineType): Always create the
15756         EmitContext.
15757
15758         * iterators.cs (Iterators.DefineIterator): Create a new
15759         EmitContext and store it in `ec'.
15760
15761 2004-08-24  Martin Baulig  <martin@ximian.com>
15762
15763         * typemanager.cs
15764         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15765         this for accessibility checks.
15766         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15767         IsNestedFamilyAccessible.
15768         (TypeManager.IsSubclassOf): New method, do what the name actually
15769         says.   
15770
15771 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15772
15773         Fix crash on cs0657-17.cs.
15774         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15775         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15776         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15777         the case where the NamespaceEntry gets overwritten.
15778
15779 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15780
15781         Fixed #69195, #56821
15782         * ecore.cs (ResolveBoolean): Tiny refactoring.
15783
15784         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15785         of right expression resolving when left is false constant and
15786         operator is LogicalAnd OR true constant and operator is LogicalOr.
15787
15788         * statement.cs (ResolveUnreachable): Always reports warning.
15789
15790 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15791
15792         * class.cs: Distinguish between 1721 and 1722 (just a little help
15793         for the programmer).
15794
15795 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15796
15797         * delegate.cs: Only allow this on new versions of the language. 
15798
15799 2004-12-02  Duncan Mak  <duncan@ximian.com>
15800
15801         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15802         Expression class.
15803         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15804         here as a static method. Take an additional bool out parameter
15805         `must_do_cs1540_check' for signaling to InstanceResolve.
15806         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15807         member field from PropertyExpr class and made it an argument of
15808         the method instead.
15809         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15810         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15811         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15812         and `remove_accessor' as well as InstanceResolve: report CS0122
15813         where applicable.
15814
15815         Fixes #70129.
15816
15817 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15818
15819         Fix test-327.cs, test-328.cs, and put in early infrastructure
15820         for eventually fixing #52697.
15821         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15822         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15823         from other methods.
15824         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15825         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15826         (VerifyUsing, error246): Update.
15827         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15828         'NamespaceEntry.LookupNamespaceOrType'.
15829
15830 2004-12-03  Martin Baulig  <martin@ximian.com>
15831
15832         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15833         method as our child, call AnonymousMethod.Compatible() on it.
15834
15835 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15836
15837         Disable XML documentation support in 'basic' profile.
15838         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15839         Redirect XmlElement to System.Object.
15840         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15841         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15842         * mcs.exe.sources: Add doc-bootstrap.cs.
15843         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15844         of doc.cs.
15845
15846 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15847
15848         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15849           comments are allowed.
15850
15851 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15852
15853         * delegate.cs: Add checks for subtypes in paramaters and return values
15854         in VerifyMethod () to add support for Covariance/Contravariance
15855         in delegates.
15856         
15857 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15858
15859         * report.cs: Remove extra closing parenthesis.
15860
15861         * convert.cs (Error_CannotImplicitConversion): If the name of the
15862         types are the same, provide some extra information.
15863
15864         * class.cs (FieldBase): Use an unused bit field from the field to
15865         encode the `has_offset' property from the FieldMember.  This saves
15866         a couple of Ks on bootstrap compilation.
15867
15868         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15869         method as our child, return the AnonymousMethod resolved
15870         expression.
15871
15872         * expression.cs (New.DoResolve): Allow return values from
15873         NewDelegate to also include AnonymousMethods.
15874
15875         Fixes #70150.
15876
15877 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15878
15879         Fix bug #70102
15880         * attribute.cs (Resolve): Improved implementation of params
15881         attribute arguments.
15882
15883         * support.cs (ParameterData): Add HasParams to be faster.
15884
15885 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15886
15887         all things are for /doc support:
15888
15889         * doc.cs: new file that supports XML documentation generation.
15890         * mcs.exe.sources: added doc.cs.
15891         * driver.cs:
15892           Handle /doc command line option.
15893           Report error 2006 instead of 5 for missing file name for /doc.
15894           Generate XML documentation when required, after type resolution.
15895         * cs-tokenizer.cs:
15896           Added support for picking up documentation (/// and /** ... */),
15897           including a new XmlCommentState enumeration.
15898         * cs-parser.jay:
15899           Added lines to fill Documentation element for field, constant,
15900           property, indexer, method, constructor, destructor, operator, event
15901           and class, struct, interface, delegate, enum.
15902           Added lines to warn incorrect comment.
15903         * rootcontext.cs :
15904           Added Documentation field (passed only when /doc was specified).
15905         * decl.cs:
15906           Added DocComment, DocCommentHeader, GenerateDocComment() and
15907           OnGenerateDocComment() and some supporting private members for
15908           /doc feature to MemberCore.
15909         * class.cs:
15910           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15911         * delegate.cs:
15912           Added overriden DocCommentHeader.
15913         * enum.cs:
15914           Added overriden DocCommentHeader and GenerateDocComment().
15915
15916 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15917
15918         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15919         unwrapping the enumeration values, chain to
15920         DoConstantNumericPromotions again, so we can promote things to the
15921         fundamental types (takes care of enums that are bytes, sbytes).
15922
15923         Fixes bug #62054.
15924
15925 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15926
15927         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15928         Fix long-standing bug in type-lookup.  Use FindType instead of
15929         LookupType when ec.ResolvingTypeTree.
15930         (Attribute.ResolveType, Attribute.Resolve)
15931         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15932         Update to changes.
15933         (Attributes.Search): Remove internal version.  Update.
15934         (Attributes.SearchMulti): Update.
15935         (Attributes.GetClsCompliantAttribute): Remove.
15936         (Attributes.GetIndexerNameAttribute): Remove.
15937         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15938         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15939         * class.cs (Indexer.Define): Likewise.
15940
15941 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15942
15943         Fix bug #68790
15944         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15945         MarshallByReference members access.
15946
15947         * expression.cs: Use CheckMarshallByRefAccess;
15948         Better error CS0197 message.
15949
15950         * report.cs: Print whole related error message.
15951
15952 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15953
15954         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15955         the current directory to help debugging.
15956
15957 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15958
15959         * class (GetClassBases): Better error 60 report.
15960         (EventProperty): Disabled warning 67 detection.
15961
15962 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15963
15964         Fix bug #60324
15965         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15966
15967         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15968         precise values.
15969
15970 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15971
15972         Fix bug #49488
15973         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15974
15975         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15976
15977 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15978
15979         * attribute.cs (Attribute.Resolve): Refine error reporting and
15980         report a cs0117 if the identifier does not exist, to distinguish
15981         from 0617 which is a miss-use of the actual identifier.
15982
15983         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15984         between cs0070 and cs0079.
15985
15986         * class.cs (MemberBase.DoDefine): When reporting a wrong
15987         accessibility level, we use MethodCore to compare instead of
15988         Method (this was a regression in some refactoring effort).
15989
15990         So now we correctly report cs0056 again.
15991
15992         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15993         testing the target_type (which was known to be object_type) and
15994         not the source type (which is anonymous_method).
15995
15996         Fixed reporting of error cs1660.
15997
15998         * expression.cs (UserCast.Source): Expose the underlying cast.
15999
16000         * statement.cs (Switch.SwitchGoverningType): Sort the list of
16001         allowed types to find a match to int32 first (most common).
16002
16003         In addition, it ignores any ImplicitUserConversions that did an
16004         internal implicit conversion (as the switch statement allows only
16005         one integral conversion to exist).
16006
16007         * class.cs (PartialContainer.Create): rename `name' to
16008         `member_name' for clarity.  Then replace the string calls with a
16009         call to MemberName.GetPartialName, as now using
16010         MemberName.ToString is an error (this is due to the side effects
16011         it had, that were fixed in the past).
16012
16013         This will restore the error reporting on a number of partial class
16014         errors that were missusing this (and getting an exception as a
16015         results, which is now just a plain textual warning, because
16016         yyparse debug output would crash otherwise).
16017
16018 2004-11-26  Raja R Harinath  <rharinath@novell.com>
16019
16020         * Makefile (PROGRAM_INSTALL_DIR): Remove.
16021
16022 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16023
16024         * rootcontext.cs (LookupType): Make sure to cache lookups that
16025         don't give us a negative result. This saves about 5% of corlib
16026         compilation time.
16027
16028 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16029
16030         * report.cs (AbstractMessage.Print): messages are sent to stderr
16031
16032         * class.cs (TypeContainer.GetClassBases): It is an error to have a
16033         non-interface in the list of interfaces (at this point, either
16034         parent was properly set, or a base class is being listed in the
16035         interfaces section).
16036
16037         This flags error 1722, and resolves the crash from bug 69259.
16038
16039 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16040
16041         * statement.cs (Using.EmitExpressionFinally): make this work right
16042         for valuetypes. Fixes 69926.
16043
16044 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16045
16046         * const.cs (Const.ChangeType): Cope with the "0 literal can be
16047         converted to an enum" here, before we try to change the underlying
16048         type.  This code exists, but it is a different code path than the
16049         one used while encoding constants.
16050
16051         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
16052         old bug: when converting from the null literal to a pointer,
16053         return an EmptyCast, not the NullLiteral.
16054
16055         This fixes #69921, the recent null_type changes probably made this
16056         bug more prominent.
16057
16058         (ImplicitReferenceConversionExists): In addition, resynchronized
16059         the code here, so it matches the same code in
16060         ImplicitReferenceConversionExists for the `from any class-type S
16061         to any interface-type T'.
16062         
16063
16064 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
16065
16066         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
16067
16068 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
16069
16070         * cs-parser.jay: Use verbosity accordingly. 
16071
16072 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16073
16074         * expression.cs (Unary.ResolveOperator): Do not report warning;
16075         AddressOf reads from variable.
16076         
16077         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
16078
16079 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16080
16081         Fix bug #69462
16082
16083         * attribute.cs (Attributable): Removed CheckTargets.
16084         (Attributes.Emit): Explicit attribute targets are tested here.
16085
16086         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
16087         not enabled for interfaces.
16088
16089         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
16090         (GetAssemblyName): Ouch next bug there.
16091
16092 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16093
16094         * expression.cs: Error 275 added.
16095         
16096 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
16097
16098         Fix bug #69177 (Implemented decimal constant support)
16099
16100         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
16101         (BinaryFold): Add DecimalConstant.
16102
16103         * const.cs (Define): Decimal constant 
16104         (is not constant.
16105         (ChangeType): Add decimal type handling.
16106         (LookupConstantValue): Don't set value for decimal type but
16107         emit DecimalConstantAttribute. Needed for constant optimization.
16108
16109         * constant.cs (ToDecimal): New method.
16110         (ConvertToDecimal): New method.
16111         (IntConstant): Implemented ConvertToDecimal.
16112         (DecimalConstant.Emit): Emit optimized version for decimals in
16113         int range.
16114
16115         * expression.cs (ResolveOperator): Changed order of constant
16116         reduction to work correctly with native types which have
16117         overloaded operators.
16118         (ResolveMemberAccess): Extract constant value from attribute
16119         for decimal type.
16120
16121         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
16122
16123         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
16124         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
16125         (ChangeType): Decimal is special.
16126         (TypeToCoreType): Add decimal type.
16127
16128 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16129
16130         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
16131         decimal types.
16132
16133 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16134
16135         * class.cs (EventField.ApplyAttributeBuilder): Fix error
16136         test cs1667-5.cs.
16137
16138 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16139
16140         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
16141
16142         * pending.cs (PendingImplementation): Grab only interfaces.
16143
16144 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16145
16146         * statement.cs (ForeachHelperMethods): Add location member and
16147         error 202 detection.
16148
16149 2004-11-19  Raja R Harinath  <rharinath@novell.com>
16150
16151         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
16152         automatically handled by executable.make.
16153         (PROGRAM): Make profile-specific.
16154
16155 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
16156
16157         * expression.cs (DoResolveBase): Fixed wrong warning for out
16158         variables.
16159
16160 2004-11-18  Martin Baulig  <martin@ximian.com>
16161
16162         Merged latest changes into gmcs.  Please keep this comment in
16163         here, it makes it easier for me to see what changed in MCS since
16164         the last time I merged.
16165
16166 2004-11-17  Raja R Harinath  <rharinath@novell.com>
16167
16168         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
16169         (TypeHandle.GetMemberCache): New.
16170         (TypeHandle.TypeHandle): Update.
16171         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
16172         (TypeManager.LookupParentInterfacesCache):
16173         Rename from LookupInterfaceCache.  Optimize slightly.
16174         (TypeManager.MemberLookup_FindMembers): Update.
16175         * decl.cs (MemberCache.MemberCache): Set Container to null in the
16176         multi-type variant.
16177         (AddCacheContents): Rename from AddHashtable.
16178         * class.cs (TypeContainer.parent_container): Remove.
16179         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
16180         (TypeContainer.DoDefineMembers): Don't initialize it.
16181         Update to name changes.
16182         
16183 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
16184
16185         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
16186         that factors the code to check access modifiers on override.  
16187
16188         (PropertyBase): Use the code here.
16189
16190         Patch from Lluis S'anchez, fixes bug #69361.
16191
16192 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16193
16194         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16195         routine that is used to report the use of a captured variable
16196         whose address has been taken.
16197
16198         There are two checks: one when variables are being captured and
16199         the other check is when the address of a variable is taken. 
16200         
16201         (because an anonymous methods might be resolved before *or* after
16202         the address has been taken) and 
16203
16204         * expression.cs (Conditional.DoResolve): Remove the special
16205         casing that Martin added to trueExpr and falseExpr being both
16206         NullLiteral.  We get the right behavior now just by introducing
16207         the null_type into the compiler. 
16208
16209         * convert.cs (ExplicitConversion): Change the code to use
16210         null_type instead of testing `expr is NullLiteral'.
16211         (ImplicitConversionStandard): use null_type too.
16212         (ImplicitReferenceConversionExists): use null_type too.
16213         (ImplicitReferenceConversion): use null_type too.
16214
16215         * literal.cs: The type of `NullLiteral' is now null_type instead
16216         of object_type. 
16217         (Resolve): Set the type here.
16218
16219         * typemanager.cs: Introduce null_type.
16220
16221 2004-11-17  Martin Baulig  <martin@ximian.com>
16222
16223         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16224         direction, like FindMembers() does.  Fixes #69546, testcase is in
16225         test-315.cs.    
16226
16227 2004-11-16  Martin Baulig  <martin@ximian.com>
16228
16229         This is based on a patch from Marek Safar, see bug #69082.
16230         Fixes bugs #63705 and #67130.
16231
16232         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16233         method; create a MemberCache for an interface type and cache the
16234         result.
16235
16236         * decl.cs (IMemberContainer.ParentContainer): Removed.
16237         (IMemberContainer.ParentCache): New property.
16238         (MemberCache.SetupCacheForInterface): Removed.
16239         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16240         to create a cache for an interface's "parent".
16241
16242         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16243         interfaces too.
16244
16245 2004-11-16  Martin Baulig  <martin@ximian.com>
16246
16247         Merged back from gmcs; these changes already went into gmcs a
16248         couple of weeks ago.
16249
16250         * typemanager.cs
16251         (TypeManager.AddUserType): Removed the `ifaces' argument.
16252         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16253         `TypeExpr []'.
16254         (TypeManager.AddUserInterface): Removed.
16255         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16256         `TypeExpr []'.
16257         (TypeManager.GetInterfaces): Likewise.
16258         (TypeManager.GetExplicitInterfaces): Likewise.
16259
16260         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16261
16262         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16263         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16264
16265 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16266
16267         * statement.cs: Avoid adding bools to a hashtable.
16268
16269 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16270
16271         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16272         calling an unsafe method from a safe location.
16273
16274 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16275
16276         Fix #69167
16277         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16278
16279 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16280
16281         * namespace.cs (VerifyUsing): use GetPartialName instead of
16282         ToString. 
16283
16284 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16285
16286         * statement.cs (Return.Resolve): Fix regression in typo: if
16287         `in_exc', we have to request a NeedReturnLabel, this was a typo
16288         introduced in the anonymous method check-in.  Fixes #69131.
16289
16290         * Indexers were using the ShortName when defining themselves,
16291         causing a regression in the compiler bootstrap when applying the
16292         patch from 2004-11-02 (first part), now they use their full name
16293         and the bug is gone.
16294
16295 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16296
16297         * driver.cs: Strip the path from the names of embedded resources. Fixes
16298         #68519.
16299
16300 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16301
16302         Fix error message regression: cs0104-2.cs.
16303         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16304         (AliasEntry.Resolve): Update.
16305         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16306         'silent' flag.
16307         (RootContext.LookupType): Update.
16308
16309 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16310
16311         * cs-parser.jay: Add support for handling accessor modifiers
16312         * class: Add support port accessor modifiers and error checking,
16313         define PropertyMethod.Define as virtual (not abstract anymore)
16314         * ecore.cs: Add checking for proeprties access with access modifiers
16315         * iterators.cs: Modify Accessor constructor call based in the modified
16316         constructor
16317 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16318
16319         * expression.cs (StringConcat): Handle being called twice,
16320         as when we have a concat in a field init with more than two
16321         ctors in the class
16322
16323 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16324
16325         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16326         special case explicit implementations, we should always produce
16327         the .property or .event declaration.
16328         
16329         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16330         since it will not return correct data if people use this
16331         unresolved in the presence of using statements (see test-313).
16332
16333         * class.cs (MethodData.Define): If we are an explicit interface
16334         implementation, set the method name to the full name of the
16335         interface plus the name of the method.  
16336
16337         Notice that using the method.MethodName.GetFullName() does not
16338         work, as it will only contain the name as declared on the source
16339         file (it can be a shorthand in the presence of using statements)
16340         and not the fully qualifed type name, for example:
16341
16342         using System;
16343
16344         class D : ICloneable {
16345                 object ICloneable.Clone ()  {
16346                 }
16347         }
16348
16349         Would produce a method called `ICloneable.Clone' instead of
16350         `System.ICloneable.Clone'.
16351
16352         * namespace.cs (Alias.Resolve): Use GetPartialName.
16353         
16354 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16355
16356         * cs-parser.jay: Add error 1055 report.
16357
16358 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16359
16360         * assign.cs (Assign.DoResolve): Only do the transform of
16361         assignment into a New if the types are compatible, if not, fall
16362         through and let the implicit code deal with the errors and with
16363         the necessary conversions. 
16364
16365 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16366
16367         * cs-parser.jay: Add error 1031 report.
16368
16369         * cs-tokenizer.cs: Add location for error 1038.
16370
16371 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16372
16373         * cs-parser.jay: Add error 1016 report.
16374
16375 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16376
16377         * cs-parser.jay: Add errors 1575,1611 report.
16378
16379 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16380
16381         * cs-parser.jay: Add error 1001 report.
16382
16383 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16384
16385         Fix #68850
16386         * attribute.cs (GetMarshal): Add method argument for
16387         caller identification.
16388
16389         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16390         agument for GetMarshal and RuntimeMissingSupport.
16391
16392 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16393
16394         * attribute.cs (ExtractSecurityPermissionSet): Removed
16395         TypeManager.code_access_permission_type.
16396
16397         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16398
16399 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16400
16401         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16402         for obsolete use of a variable here.   Fixes regression on errors
16403         cs0619-25 and cs0619-26.
16404
16405 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16406
16407         Fix #62358, implemented security attribute encoding.
16408
16409         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16410         Tests permitted SecurityAction for assembly or other types.
16411         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16412         data from SecurityPermissionAttribute to PermisionSet class.
16413
16414         * class.cs (ApplyAttributeBuilder): Added special handling
16415         for System.Security.Permissions.SecurityAttribute based types.
16416
16417         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16418         special handling for System.Security.Permissions.SecurityAttribute
16419         based types.
16420
16421         * enum.cs (ApplyAttributeBuilder): Added special handling
16422         for System.Security.Permissions.SecurityAttribute based types.
16423
16424         * parameter.cs (ApplyAttributeBuilder): Added special handling
16425         for System.Security.Permissions.SecurityAttribute based types.
16426
16427         * rootcontext.cs: Next 2 core types.
16428
16429         * typemanager.cs (TypeManager.security_permission_attr_type):
16430         Built in type for the SecurityPermission Attribute.
16431         (code_access_permission_type): Build in type.
16432
16433 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16434
16435         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16436         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16437         all of this information into
16438         EmitContext.EmitCapturedVariableInstance.
16439         
16440         * codegen.cs (EmitCapturedVariableInstance): move here the
16441         funcionality of emitting an ldarg.0 in the presence of a
16442         remapping.   This centralizes the instance emit code.
16443
16444         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16445         then emit a load of this: it means that we have reached the
16446         topmost ScopeInfo: the one that contains the pointer to the
16447         instance of the class hosting the anonymous method.
16448
16449         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16450         captures to the topmost CaptureContext.
16451
16452 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16453
16454         * expression.cs (LocalVariableReference): Move the knowledge about
16455         the iterators into codegen's EmitCapturedVariableInstance.
16456
16457 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16458
16459         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16460         all code paths return a value from an anonymous method (it is the
16461         same as the 161 error, but for anonymous methods).
16462
16463 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16464
16465         The introduction of anonymous methods in the compiler changed
16466         various ways of doing things in the compiler.  The most
16467         significant one is the hard split between the resolution phase
16468         and the emission phases of the compiler.
16469
16470         For instance, routines that referenced local variables no
16471         longer can safely create temporary variables during the
16472         resolution phase: they must do so from the emission phase,
16473         since the variable might have been "captured", hence access to
16474         it can not be done with the local-variable operations from the runtime.
16475         
16476         * statement.cs 
16477
16478         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16479         is a toplevel block.
16480
16481         (ToplevelBlock): A new kind of Block, these are the blocks that
16482         are created by the parser for all toplevel method bodies.  These
16483         include methods, accessors and anonymous methods.
16484
16485         These contain some extra information not found in regular blocks:
16486         A pointer to an optional CaptureContext (for tracking captured
16487         local variables and parameters).  A pointer to the parent
16488         ToplevelBlock.
16489         
16490         (Return.Resolve): Catch missmatches when returning a value from an
16491         anonymous method (error 1662).
16492         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16493         phase.
16494
16495         (Break.Resolve): ditto.
16496
16497         (SwitchLabel): instead of defining the labels during the
16498         resolution phase, we now turned the public ILLabel and ILLabelCode
16499         labels into methods called GetILLabelCode() and GetILLabel() that
16500         only define the label during the Emit phase.
16501
16502         (GotoCase): Track the SwitchLabel instead of the computed label
16503         (its contained therein).  Emit the code by using
16504         SwitchLabel.GetILLabelCode ().
16505
16506         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16507         whether the Local has been captured or not.
16508
16509         (LocalInfo.IsCaptured): New property, used to tell whether the
16510         local has been captured.
16511         
16512         * anonymous.cs: Vastly updated to contain the anonymous method
16513         support.
16514
16515         The main classes here are: CaptureContext which tracks any
16516         captured information for a toplevel block and ScopeInfo used to
16517         track the activation frames for various local variables.   
16518
16519         Each toplevel block has an optional capture context associated
16520         with it.  When a method contains an anonymous method both the
16521         toplevel method and the anonymous method will create a capture
16522         context.   When variables or parameters are captured, they are
16523         recorded on the CaptureContext that owns them, for example:
16524
16525         void Demo () {
16526              int a;
16527              MyDelegate d = delegate {
16528                  a = 1;
16529              }
16530         }
16531
16532         Here `a' will be recorded as captured on the toplevel
16533         CapturedContext, the inner captured context will not have anything
16534         (it will only have data if local variables or parameters from it
16535         are captured in a nested anonymous method.
16536
16537         The ScopeInfo is used to track the activation frames for local
16538         variables, for example:
16539
16540         for (int i = 0; i < 10; i++)
16541                 for (int j = 0; j < 10; j++){
16542                    MyDelegate d = delegate {
16543                         call (i, j);
16544                    }
16545                 }
16546
16547         At runtime this captures a single captured variable `i', but it
16548         captures 10 different versions of the variable `j'.  The variable
16549         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16550         recorded on a child.  
16551
16552         The toplevel ScopeInfo will also track information like the `this'
16553         pointer if instance variables were referenced (this is necessary
16554         as the anonymous method lives inside a nested class in the host
16555         type of the method). 
16556
16557         (AnonymousMethod): Expanded to track the Toplevel, implement
16558         `AnonymousMethod.Compatible' to tell whether an anonymous method
16559         can be converted to a target delegate type. 
16560
16561         The routine now also produces the anonymous method content
16562
16563         (AnonymousDelegate): A helper class that derives from
16564         DelegateCreation, this is used to generate the code necessary to
16565         produce the delegate for the anonymous method that was created. 
16566
16567         * assign.cs: API adjustments for new changes in
16568         Convert.ImplicitStandardConversionExists.
16569
16570         * class.cs: Adjustments to cope with the fact that now toplevel
16571         blocks are of type `ToplevelBlock'. 
16572
16573         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16574         insteda of standard blocks.
16575
16576         Flag errors if params arguments are passed to anonymous methods.
16577
16578         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16579         `CurrentAnonymousMethod' which points to the current Anonymous
16580         Method.  The variable points to the AnonymousMethod class that
16581         holds the code being compiled.  It is set in the new EmitContext
16582         created for the anonymous method.
16583
16584         (EmitContext.Phase): Introduce a variable and an enumeration to
16585         assist in enforcing some rules about when and where we are allowed
16586         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16587         only one that enfonces this right now).
16588
16589         (EmitContext.HaveCaptureInfo): new helper method that returns
16590         whether we have a CapturedContext initialized.
16591
16592         (EmitContext.CaptureVariable): New method used to register that a
16593         LocalInfo must be flagged for capturing. 
16594
16595         (EmitContext.CapturedParameter): New method used to register that a
16596         parameters must be flagged for capturing. 
16597         
16598         (EmitContext.CapturedField): New method used to register that a
16599         field must be flagged for capturing. 
16600
16601         (EmitContext.HaveCapturedVariables,
16602         EmitContext.HaveCapturedFields): Return whether there are captured
16603         variables or fields. 
16604
16605         (EmitContext.EmitMethodHostInstance): This is used to emit the
16606         instance for the anonymous method.  The instance might be null
16607         (static methods), this (for anonymous methods that capture nothing
16608         and happen to live side-by-side with the current method body) or a
16609         more complicated expression if the method has a CaptureContext.
16610
16611         (EmitContext.EmitTopBlock): Routine that drives the emission of
16612         code: it will first resolve the top block, then emit any metadata
16613         and then emit the code.  The split is done so that we can extract
16614         any anonymous methods and flag any captured variables/parameters.
16615         
16616         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16617         during this phase, the ILGenerator should not be used as labels
16618         and local variables declared here might not be accessible to any
16619         code that is part of an anonymous method.  
16620
16621         Exceptions to this include the temporary variables that are
16622         created by some statements internally for holding temporary
16623         variables. 
16624         
16625         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16626         metadata for a cb
16627
16628         (EmitContext.TemporaryReturn): This method is typically called
16629         from the Emit phase, and its the only place where we allow the
16630         ReturnLabel to be defined other than the EmitMeta.  The reason is
16631         that otherwise we would have to duplicate a lot of logic in the
16632         Resolve phases of various methods that today is on the Emit
16633         phase. 
16634
16635         (EmitContext.NeedReturnLabel): This no longer creates the label,
16636         as the ILGenerator is not valid during the resolve phase.
16637
16638         (EmitContext.EmitThis): Extended the knowledge in this class to
16639         work in anonymous methods in addition to iterators. 
16640
16641         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16642         code is necessary on the stack to access the instance to a local
16643         variable (the variable will be accessed as a field).
16644
16645         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16646         EmitContext.EmitAddressOfParameter): Routines to support
16647         parameters (not completed at this point). 
16648         
16649         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16650         will also remove the parameters.
16651
16652         * convert.cs (Convert): Define a `ConstantEC' which points to a
16653         null.  This is just to prefity some code that uses
16654         ImplicitStandardConversion code and do not have an EmitContext
16655         handy.
16656
16657         The idea is to flag explicitly that at that point in time, it is
16658         known that the conversion will not trigger the delegate checking
16659         code in implicit conversions (which requires a valid
16660         EmitContext). 
16661
16662         Everywhere: pass new EmitContext parameter since
16663         ImplicitStandardConversionExists now requires it to check for
16664         anonymous method conversions. 
16665
16666         (Convert.ImplicitStandardConversionExists): If the type of an
16667         expression is the anonymous_method_type, and the type is a
16668         delegate, we invoke the AnonymousMethod.Compatible method to check
16669         whether an implicit conversion is possible. 
16670
16671         (Convert.ImplicitConversionStandard): Only do implicit method
16672         group conversions if the language level is not ISO_1.
16673
16674         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16675         MethodInfo for the Invoke method.  used by Delegate and
16676         AnonymousDelegate.
16677
16678         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16679         method conversions if the target type is a delegate.
16680
16681         Removed extra debugging nops.
16682
16683         (LocalVariableReference): Turn the `local_info' into a public
16684         field. 
16685
16686         Add `prepared' field, the same hack used for FieldExprs to cope
16687         with composed assignments, as Local variables do not necessarily
16688         operate purely on the stack as they used to: they can be captured
16689         fields. 
16690
16691         Add `temp' for a temporary result, like fields.
16692
16693         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16694
16695         It now copes with Local variables that are captured and emits the
16696         proper instance variable to load it from a field in the captured
16697         case. 
16698
16699         (ParameterReference.DoResolveBase): During the resolve phase,
16700         capture parameters if we are in an anonymous method.
16701
16702         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16703         anonymous method, use the EmitContext helper routines to emit the
16704         parameter reference.
16705
16706         * iterators.cs: Set RemapToProxy to true/false during the
16707         EmitDispose class.
16708
16709         * parameters.cs (GetParameterByName): New helper method. 
16710
16711         * typemanager.cs (anonymous_method_type) a new type that
16712         represents an anonyous method.  This is always an internal type,
16713         used as a fencepost to test against the anonymous-methodness of an
16714         expression. 
16715         
16716 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16717
16718         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16719         561 report.
16720         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16721
16722 2004-10-18  Martin Baulig  <martin@ximian.com>
16723
16724         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16725         `Type' directly, but call ResolveType() on it.
16726         (Catch.Resolve): Likewise.
16727         (Foreach.Resolve): Likewise.
16728
16729 2004-10-18  Martin Baulig  <martin@ximian.com>
16730
16731         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16732         `Type' directly, but call ResolveType() on it.
16733         (Probe.DoResolve): Likewise.
16734         (ArrayCreation.LookupType): Likewise.
16735         (TypeOf.DoResolve): Likewise.
16736         (SizeOf.DoResolve): Likewise.
16737
16738 2004-10-18  Martin Baulig  <martin@ximian.com>
16739
16740         * expression.cs (Invocation.BetterFunction): Put back
16741         TypeManager.TypeToCoreType().
16742
16743 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16744
16745         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16746         the ResolveType.
16747
16748 2004-10-18  Martin Baulig  <martin@ximian.com>
16749
16750         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16751         `Type' directly, but call ResolveType() on it.
16752
16753 2004-10-18  Martin Baulig  <martin@ximian.com>
16754
16755         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16756         `Type' directly, but call ResolveType() on it.
16757         (MemberBase.DoDefine): Likewise.
16758
16759         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16760         `Type' directly, but call ResolveType() on it.
16761         (ComposedCast.DoResolveAsTypeStep): Likewise.
16762
16763         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16764         `Type' directly, but call ResolveType() on it.
16765
16766 2004-10-17  John Luke  <john.luke@gmail.com>
16767
16768         * class.cs (Operator.GetSignatureForError): use CSharpName
16769
16770         * parameter.cs (Parameter.GetSignatureForError): Returns
16771         correct name even if was not defined.
16772
16773 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16774
16775         Fix #65816.
16776         * class.cs (TypeContainer.EmitContext): New property.
16777         (DefineNestedTypes): Create an emitcontext for each part.
16778         (MethodCore.DoDefineParameters): Use container's emitcontext.
16779         Pass type array to InternalParameters.
16780         (MemberBase.DoDefine): Use container's emitcontext.
16781         (FieldMember.Define): Likewise.
16782         (Event.Define): Likewise.
16783         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16784         Pass type array to InternalParameters.
16785         (SetIndexerMethod.GetParameterInfo): Likewise.
16786         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16787         * delegate.cs (Define): Pass emitcontext to
16788         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16789         array to InternalParameters.
16790         * expression.cs (ParameterReference.DoResolveBase): Pass
16791         emitcontext to GetParameterInfo.
16792         (ComposedCast.DoResolveAsTypeStep): Remove check on
16793         ec.ResolvingTypeTree.
16794         * parameter.cs (Parameter.Resolve): Change argument to
16795         EmitContext.  Use ResolveAsTypeTerminal.
16796         (Parameter.GetSignature): Change argument to EmitContext.
16797         (Parameters.ComputeSignature): Likewise.
16798         (Parameters.ComputeParameterTypes): Likewise.
16799         (Parameters.GetParameterInfo): Likewise.
16800         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16801         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16802         * support.cs (InternalParameters..ctor): Remove variant that takes
16803         a DeclSpace.
16804         * typemanager.cs (system_intptr_expr): New.
16805         (InitExpressionTypes): Initialize it.
16806
16807 2004-10-12  Chris Toshok  <toshok@ximian.com>
16808
16809         * cs-parser.jay: fix location for try_statement and catch_clause.
16810
16811 2004-10-11  Martin Baulig  <martin@ximian.com>
16812
16813         * report.cs: Don't make --fatal abort on warnings, we have
16814         -warnaserror for that.
16815
16816 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16817
16818         More DeclSpace.ResolveType avoidance.
16819         * decl.cs (MemberCore.InUnsafe): New property.
16820         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16821         with newly created EmitContext.
16822         (FieldMember.Define): Likewise.
16823         * delegate.cs (Delegate.Define): Likewise.
16824         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16825         only if normal name-lookup fails.
16826         (TypeExpr.DoResolve): Enable error-checking.
16827         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16828         (SizeOf.DoResolve): Likewise.
16829         (ComposedCast.DoResolveAsTypeStep): Likewise.
16830         (StackAlloc.DoResolve): Likewise.
16831         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16832         (Block.Unsafe): New property.
16833         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16834         (Unsafe): Set 'unsafe' flag of contained block.
16835         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16836         (Fixed.Resolve): Likewise.
16837         (Catch.Resolve): Likewise.
16838         (Using.ResolveLocalVariableDecls): Likewise.
16839         (Foreach.Resolve): Likewise.
16840
16841 2004-10-05  John Luke <john.luke@gmail.com>
16842
16843         * cs-parser.jay: add location to error CS0175
16844
16845 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16846
16847         * ecore.cs (Expression.Constantity): Add support for turning null
16848         into a constant.
16849
16850         * const.cs (Const.Define): Allow constants to be reference types
16851         as long as the value is Null.
16852
16853 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16854
16855         * namespace.cs (NamespaceEntry.Using): No matter which warning
16856         level is set, check if this namespace name has already been added.
16857
16858 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16859
16860         * expression.cs: reftype [!=]= null should always use br[true,false].
16861         # 67410
16862
16863 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16864
16865         Fix #67108
16866         * attribute.cs: Enum conversion moved to 
16867         GetAttributeArgumentExpression to be applied to the all
16868         expressions.
16869
16870 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16871
16872         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16873         * class.c (TypeContainer.DefineType): Flag error if
16874         base types aren't accessible due to access permissions.
16875         * decl.cs (DeclSpace.ResolveType): Move logic to
16876         Expression.ResolveAsTypeTerminal.
16877         (DeclSpace.ResolveTypeExpr): Thin layer over
16878         Expression.ResolveAsTypeTerminal.
16879         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16880         Refactor code into NestedAccess.  Use it.
16881         (DeclSpace.NestedAccess): New.
16882         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16883         argument to silence errors.  Check access permissions.
16884         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16885         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16886         (Cast.DoResolve): Likewise.
16887         (New.DoResolve): Likewise.
16888         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16889         (TypeOf.DoResolve): Likewise.
16890
16891         * expression.cs (Invocation.BetterConversion): Return the Type of
16892         the better conversion.  Implement section 14.4.2.3 more faithfully.
16893         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16894         section 14.4.2.2 explicit.
16895         (Invocation.OverloadResolve): Update.
16896         (Invocation): Remove is_base field.
16897         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16898         (Invocation.Emit): Likewise.
16899
16900 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16901
16902         * README: Update to changes.
16903
16904 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16905
16906         * cs-parser.jay: Reverted 642 warning fix.
16907
16908 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16909
16910         Fix bug #66615
16911         * decl.cs (FindMemberWithSameName): Indexer can have more than
16912         1 argument.
16913
16914 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16915
16916         * expression.cs (LocalVariableReference.DoResolveLValue):
16917         Do not report warning 219 for out values.
16918         (EmptyExpression.Null): New member to avoid extra allocations.
16919
16920 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16921
16922         * cs-parser.jay: Fix wrong warning 642 report.
16923
16924         * cs-tokenizer.cs (CheckNextToken): New helper;
16925         Inspect next character if is same as expected.
16926
16927 2004-09-23  Martin Baulig  <martin@ximian.com>
16928
16929         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16930         (Convert.ImplicitReferenceConversionExists): Likewise.
16931
16932 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16933
16934         * class.cs (Operator.Define): Add error 448 and 559 report.
16935
16936 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16937
16938         * class.cs (MemberBase.IsTypePermitted): New protected
16939         method for checking error CS0610.
16940
16941 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16942
16943         * class.cs (TypeContainer.HasExplicitLayout): New property
16944         Returns whether container has StructLayout attribute set Explicit.
16945         (FieldMember): New abstract class for consts and fields.
16946         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16947         (Field): Reuse FieldMember.
16948
16949         * const.cs (Const): Reuse FieldMember.
16950
16951         * rootcontext.cs: EmitConstants call moved to class.
16952
16953 2004-09-22  Martin Baulig  <martin@ximian.com>
16954
16955         Thanks to Peter Sestoft for this bug report.
16956
16957         * expression.cs (Conditional): If both the `trueExpr' and the
16958         `falseExpr' is a NullLiteral, return a NullLiteral.
16959
16960 2004-09-22  Martin Baulig  <martin@ximian.com>
16961
16962         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16963         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16964         for the "get_Current" call.
16965
16966 2004-09-22  Martin Baulig  <martin@ximian.com>
16967
16968         Marek and me just fixed one of our oldest bugs: #28562 :-)
16969
16970         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16971
16972         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16973         we're an EnumConstant, just return that.
16974         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16975         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16976         to get the value which'll actually be written into the attribute.
16977         However, we have to use GetValue() to access the attribute's value
16978         in the compiler.        
16979
16980 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16981
16982         * constant.cs (Constant.IsNegative): New abstract property
16983         IsNegative.
16984
16985         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16986         (StackAlloc.DoResolve): Reused IsNegative.
16987
16988 2004-09-21  Martin Baulig  <martin@ximian.com>
16989
16990         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16991         if we're used in an iterator, we may be called from different
16992         methods.
16993
16994         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16995         we actually have an exception block.
16996
16997 2004-09-20  John Luke <jluke@cfl.rr.com>
16998
16999         * class.cs, cs-parser.jay: Improve the error report for 1520:
17000         report the actual line where the error happens, not where the
17001         class was declared.
17002
17003         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
17004         Pass location information that was available elsewhere.
17005
17006 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
17007
17008         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
17009         runtime to delay sign assemblies.
17010
17011 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17012
17013         * cs-parser.jay: Do not report the stack trace, this is barely
17014         used nowadays.
17015
17016 2004-08-22  John Luke  <john.luke@gmail.com>
17017  
17018         * driver.cs : check that a resource id is not already used
17019         before adding it, report CS1508 if it is, bug #63637
17020
17021 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17022
17023         * ecore.cs: Removed dead code.
17024
17025 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
17026
17027         * class.cs: Do not report warning CS0067 on the interfaces.
17028
17029 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17030
17031         * cs-parser.jay: Add error 504 report.
17032
17033 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17034
17035         * rootcontext.cs: WarningLevel is 4 by default now.
17036
17037         * statement.cs (Fixed.Resolve): Do not null
17038         VariableInfo.
17039
17040 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17041
17042         Fixed bug #55780
17043         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
17044         deep search when property is not virtual.
17045         (PropertyExpr.ResolveAccessors): Make one call for both
17046         accessors.
17047
17048 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17049
17050         Fixed bug #65766
17051         * statement.cs: Error 152 report constains also location.
17052
17053 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17054
17055         Fixed bug #65766
17056         * const.cs: Explicitly set constant as static.
17057
17058 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17059
17060         Fixed bug #64226
17061         * cs-parser.jay: Add error 1017 report.
17062
17063 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17064
17065         Fixed bug #59980, #64224
17066         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
17067
17068         * typemanager.cs (IsSpecialMethod): Simplified
17069
17070 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17071
17072         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
17073         condition with better params.
17074
17075 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17076
17077         Fixed bug #65238
17078         * attribute.cs (Resolve): Property has to have both
17079         accessors.
17080
17081 2004-09-14  Martin Baulig  <martin@ximian.com>
17082
17083         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
17084
17085 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17086
17087         Fixed bug #61902
17088         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
17089         called and is obsolete then this member suppress message
17090         when call is inside next [Obsolete] method or type.
17091
17092         * expression.cs: Use TestObsoleteMethodUsage member.
17093
17094 2004-09-14  Martin Baulig  <martin@ximian.com>
17095
17096         * cs-parser.jay: Sync a bit with the GMCS version.
17097
17098 2004-09-14  Martin Baulig  <martin@ximian.com>
17099
17100         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
17101         (CSharpParser.yacc_verbose_flag): New public field.
17102
17103         * genericparser.cs: Removed.
17104
17105 2004-09-14  Raja R Harinath  <rharinath@novell.com>
17106
17107         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
17108
17109 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
17110
17111         * class.cs (MethodCore.CheckBase): Fix bug #65757.
17112
17113 2004-09-10  Martin Baulig  <martin@ximian.com>
17114
17115         Backported my MemberName changes from GMCS into MCS.
17116
17117         - we are now using a special `MemberName' class instead of using
17118         strings; in GMCS, the `MemberName' also contains the type
17119         arguments.
17120
17121         - changed the grammar rules a bit:
17122           * the old `member_name' is now a `namespace_or_type_name':
17123             The rule is that we use `namespace_or_type_name' everywhere
17124             where we expect either a "member name" (GetEnumerator) or a
17125             "member name" with an explicit interface name
17126             (IEnumerable.GetEnumerator).
17127             In GMCS, the explicit interface name may include type arguments
17128             (IEnumerable<T>.GetEnumerator).
17129           * we use `member_name' instead of just `IDENTIFIER' for
17130             "member names":
17131             The rule is that we use `member_name' wherever a member may
17132             have type parameters in GMCS.       
17133
17134         * decl.cs (MemberName): New public class.
17135         (MemberCore.MemberName): New public readonly field.
17136         (MemberCore.ctor): Take a `MemberName' argument, not a string.
17137         (DeclSpace): Likewise.
17138
17139         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
17140         * enum.cs (Enum.ctor): Likewise.
17141
17142         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
17143         MemberName.     
17144         (AliasEntry.ctor): Take a MemberName, not an Expression.
17145         (AliasEntry.UsingAlias): Likewise.
17146
17147         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
17148         (IMethodData.MemberName): Changed type from string to MemberName.
17149         (MemberBase.ExplicitInterfaceName): Likewise.
17150         (AbstractPropertyEventMethod.SetupName): Make this private.
17151         (AbstractPropertyEventMethod.ctor): Added `string prefix'
17152         argument; compute the member name here.
17153         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
17154         on the `member.MemberName' and the `prefix'.
17155
17156         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
17157         not `type_name'.
17158         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
17159         thus, we get a `MemberName' instead of a `string'.  These
17160         declarations may have type parameters in GMCS.
17161         (interface_method_declaration, delegate_declaration): Likewise.
17162         (class_declaration, interface_declaration): Likewise.
17163         (method_header): Use `namespace_or_type_name' instead of
17164         `member_name'.  We may be an explicit interface implementation.
17165         (property_declaration, event_declaration): Likewise.
17166         (member_name): This is now just an `IDENTIFIER', not a
17167         `namespace_or_type_name'.
17168         (type_name, interface_type): Removed.
17169         (namespace_or_type_name): Return a MemberName, not an Expression.
17170         (primary_expression): Use `member_name' instead of `IDENTIFIER';
17171         call GetTypeExpression() on the MemberName to get an expression.
17172         (IndexerDeclaration.interface_type): Changed type from string to
17173         MemberName.
17174         (MakeName): Operate on MemberName's instead of string's.
17175
17176 2004-09-13  Raja R Harinath  <rharinath@novell.com>
17177
17178         Fix bug #55770.
17179         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
17180         (NamespaceEntry.Lookup): Add new argument to flag if we want the
17181         lookup to avoid symbols introduced by 'using'.
17182         * rootcontext.cs (NamespaceLookup): Update.
17183
17184 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17185
17186         * class.cs (TypeContainer.DoDefineMembers): Do not call
17187         DefineDefaultConstructor for static classes.
17188
17189 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17190
17191         * attribute.cs (Attribute.Resolve): Add error 653 report.
17192
17193         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17194         report.
17195         (Method.ApplyAttributeBuilder): Add error 685 report.
17196         (Operator.Define): Add error 564 report.
17197
17198         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17199
17200         * expression.cs (Invocation.DoResolve): Add error
17201         245 and 250 report.
17202
17203         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17204         error 674 report.
17205
17206 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17207
17208         * class.cs (ConstructorInitializer.Resolve):
17209         Wrong error number (515->516).
17210
17211 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17212
17213         * class.cs (Indexer.Define): Add error 631 report.
17214
17215 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17216
17217         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17218
17219 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17220
17221         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17222
17223 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17224
17225         * cs-parser.jay: Added error CS0241 report.
17226
17227 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17228
17229         * cs-parser.jay (fixed_statement): Introduce a scope for the
17230         declaration in the 'fixed' statement.
17231
17232 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17233
17234         * cs-parser.jay: Added CS0230 error report.
17235
17236 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17237
17238         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17239
17240 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17241
17242         * expression.cs (Argument.Resolve): Added error CS0192 and
17243         CS0199 report.
17244
17245 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17246
17247         C# 2.0 #pragma warning feature
17248
17249         * cs-tokenizer.cs (PreProcessPragma): New method; 
17250         Handles #pragma directive.
17251
17252         * report.cs (WarningRegions): New class; Support
17253         class for #pragma warning directive. It tests whether
17254         warning is enabled for a given line.
17255
17256 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17257
17258         * const.cs: Add more descriptive error report, tahnks to
17259         Sebastien. 
17260
17261 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17262
17263         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17264
17265 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17266
17267         * expression.cs: Apply patch from Ben: Remove dead code from
17268         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17269         as that code just threw an exception anwyays.
17270
17271         * const.cs: Remove the call to the turnintoconstant, for details
17272         see bug: #63144
17273         
17274         * literal.cs: The type of the null-literal is the null type;  So
17275         we use a placeholder type (literal.cs:System.Null, defined here)
17276         for it.
17277
17278         * expression.cs (Conditional.DoResolve): Remove some old code that
17279         is no longer needed, conversions have been fixed.
17280
17281         (ArrayCreationExpression.DoResolve): Return false if we fail to
17282         resolve the inner expression.
17283
17284 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17285
17286         Fix test-290.cs.
17287         * cs-parser.jay (delegate_declaration): Record a delegate
17288         declaration as a type declaration.
17289         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17290
17291 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17292
17293         * parameter.cs: Do not crash if the type can not be resolved. 
17294
17295         * expression.cs: Report errors with unsafe pointers, fixes #64896
17296
17297 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17298
17299         * expression.cs: Pointer arith always needs to do a conv.i
17300         if the operand is a long. fix 65320
17301
17302 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17303
17304         Fixed cs0619-37.cs, cs0619-38.cs
17305
17306         * enum.cs (GetObsoleteAttribute): Removed.
17307
17308         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17309         on Enum member is double staged. The first is tested member
17310         and then enum.
17311
17312 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17313
17314         Fixed #56986, #63631, #65231
17315
17316         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17317         adds member to name container.
17318         (TypeContainer.AddToTypeContainer): New method, adds type to
17319         name container.
17320         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17321         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17322         AddOperator): Simplified by reusing AddToMemberContainer.
17323         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17324         instead of field.
17325         (Method.CheckForDuplications): Fixed implementation to test all
17326         possibilities.
17327         (MemberBase): Detection whether member is explicit interface
17328         implementation is now in constructor.
17329         (MemberBase.UpdateMemberName): Handles IndexerName.
17330         (Accessor): Changed to keep also location information.
17331         (AbstractPropertyEventMethod): Is derived from MemberCore.
17332         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17333         will be emited or not.
17334         (PropertyBase.AreAccessorsDuplicateImplementation):
17335         Tests whether accessors are not in collision with some method.
17336         (Operator): Is derived from MethodCore to simplify common
17337         operations.
17338
17339         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17340         must be performed.
17341         (DeclSpace.AddToContainer): Adds the member to defined_names
17342         table. It tests for duplications and enclosing name conflicts.
17343
17344         * enum.cs (EnumMember): Clean up to reuse the base structures
17345
17346 2004-09-03  Martin Baulig  <martin@ximian.com>
17347
17348         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17349         into TypeContainer, to make partial classes work again.
17350
17351 2004-09-03  Martin Baulig  <martin@ximian.com>
17352
17353         * rootcontext.cs (RootContext.V2): Removed.
17354
17355 2004-03-23  Martin Baulig  <martin@ximian.com>
17356
17357         * expression.cs (Invocation.OverloadResolve): Added `bool
17358         may_fail' argument and use it instead of the Location.IsNull() hack.
17359
17360 2004-09-03  Martin Baulig  <martin@ximian.com>
17361
17362         Merged latest changes into gmcs.  Please keep this comment in
17363         here, it makes it easier for me to see what changed in MCS since
17364         the last time I merged.
17365
17366 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17367
17368         Fix #61128.
17369         * expression.cs (BetterConversion): Don't allow either conversion 
17370         to be null.  Remove redundant implicit conversion test when 'q ==
17371         null' -- when this function is invoked, we already know that the
17372         implicit conversion exists.
17373         (BetterFunction): Assume that 'best' is non-null.  Remove
17374         redundant reimplementation of IsApplicable when 'best' is null.
17375         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17376         number of arguments.
17377         (IsAncestralType): Extract from OverloadResolve.
17378         (OverloadResolve): Make robust to the MethodGroupExpr being
17379         unsorted.  Implement all the logic of Section 14.5.5.1, and
17380         support overloading of methods from multiple applicable types.
17381         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17382
17383         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17384         (RealError, Warning): Append type of report to related symbol.
17385
17386 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17387
17388         * enum.cs: Fixed CLS-Compliance checks for enum members.
17389         Error tests cs3008-8.cs, cs3014-8.cs
17390
17391 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17392
17393         Fixed bug #62342, #63102
17394         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17395         like ImplementMethod.
17396
17397 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17398
17399         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17400         Fixed bug #65170.
17401
17402 2004-09-02  Martin Baulig  <martin@ximian.com>
17403
17404         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17405         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17406         on the MethodBase.
17407
17408 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17409
17410         C# 2.0 Static classes implemented
17411
17412         * class.cs (TypeContainer): instance_constructors,
17413         initialized_fields, initialized_static_fields,
17414         default_constructor, base_inteface_types are protected to be
17415         accessible from StaticClass.
17416         (TypeContainer.DefineDefaultConstructor): New virtual method
17417         for custom default constructor generating
17418         (StaticClass): New class to handle "Static classes" feature.
17419
17420         * cs-parser.jay: Handle static keyword on class like instance
17421         of StaticClass.
17422
17423         * driver.cs: Added "/langversion" command line switch with two
17424         options (iso-1, default).
17425
17426 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17427
17428         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17429
17430 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17431
17432         * delegate.cs: Style.
17433
17434 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17435
17436         * delegate.cs: Add seperate instance expr field for miguel.
17437
17438 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17439
17440         * PointerArithmetic (Resolve): make sure we are not doing
17441         pointer arith on void*. Also, make sure we are resolved
17442         by not setting eclass until resolve.
17443
17444         All callers: Make sure that PointerArithmetic gets resolved.
17445
17446 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17447
17448         * ArrayCreation (LookupType): If the type does not resolve 
17449         to an array, give an error.
17450
17451 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17452
17453         * statement.cs (Try.Resolve): Fixed bug #64222
17454
17455 2004-08-27  Martin Baulig  <martin@ximian.com>
17456
17457         * class.cs
17458         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17459         crash here.     
17460
17461 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17462
17463         * ecore.cs (Constantify): Get underlying type via
17464         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17465         Windows in special cases.
17466
17467 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17468
17469         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17470         for obtaining also private methods.
17471         (GetRemoveMethod): Used GetRemoveMethod (true)
17472         for obtaining also private methods.
17473
17474 2004-08-24  Martin Baulig  <martin@ximian.com>
17475
17476         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17477         MethodAttributes.HideBySig for operators.
17478
17479 2004-08-23  Martin Baulig  <martin@ximian.com>
17480
17481         Back to the old error reporting system :-)
17482
17483         * report.cs (Message): Removed.
17484         (Report.MessageData, ErrorData, WarningData): Removed.
17485         (Report.Error, Warning): Back to the old system.
17486
17487 2004-08-23  Martin Baulig  <martin@ximian.com>
17488
17489         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17490
17491         * class.cs (TypeContainer.ParentContainer): New public virtual
17492         method; replaces the explicit interface implementation.
17493         (ClassPart.ParentContainer): Override.
17494
17495 2004-08-23  Martin Baulig  <martin@ximian.com>
17496
17497         * statement.cs (Switch): Added support for constant switches; see
17498         #59428 or test-285.cs.
17499
17500 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17501
17502         Fixed bug #62740.
17503         * statement.cs (GetEnumeratorFilter): Removed useless
17504         logic because C# specs is strict. GetEnumerator must be
17505         public.
17506
17507 2004-08-22  Martin Baulig  <martin@ximian.com>
17508
17509         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17510         a switch and may break, reset the barrier.  Fixes #59867.
17511
17512 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17513
17514         CLS-Compliance speed up (~5% for corlib)
17515
17516         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17517         New method. Tests container for CLS-Compliant names
17518
17519         * class.cs (TypeContainer.VerifyClsName): New method.
17520         Checks whether container name is CLS Compliant.
17521         (Constructor): Implements IMethodData.
17522
17523         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17524         low-case table for CLS Compliance test.
17525         (MemberCache.VerifyClsParameterConflict): New method.
17526         Checks method parameters for CS3006 error.
17527
17528         * enum.cs (EnumMember): Is derived from MemberCore.
17529         (Enum.VerifyClsName): Optimized for better performance.
17530
17531 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17532
17533         * report.cs: Renamed Error_T to Error and changed all
17534         references.
17535
17536 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17537
17538         * class.cs (TypeContainer.IndexerArrayList): New inner class
17539         container for indexers.
17540         (TypeContainer.DefaultIndexerName): New constant for default
17541         indexer name. Replaced all "Item" with this constant.
17542         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17543
17544         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17545         DefaultMemberAttribute constructor.
17546
17547 2004-08-05  Martin Baulig  <martin@ximian.com>
17548
17549         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17550         Fix bug #59429.
17551
17552 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17553
17554         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17555         multi platforms problem.
17556
17557         * compiler.csproj: Included shared files.
17558
17559 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17560
17561         Fix bug 60333, 55971 in the more general way
17562         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17563         Added arg_type argument for constant conversion.
17564         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17565
17566 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17567
17568         Fix bug #59760
17569         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17570         OperatorArrayList, MethodCoreArrayList for typecontainer
17571         containers. Changed class member types to these new types.
17572         (MethodArrayList.DefineMembers): Added test for CS0659.
17573
17574 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17575
17576         * cfold.cs: Synchronize the folding with the code in expression.cs
17577         Binary.DoNumericPromotions for uint operands.
17578
17579         * attribute.cs: Revert patch from Raja, it introduced a regression
17580         while building Blam-1.2.1 (hard to isolate a test case).
17581
17582 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17583
17584         Fix for #55382
17585         * class.cs:
17586         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17587         name collision.
17588         (MethodCore.parent_method): New member. The method we're overriding
17589         if this is an override method.
17590         (MethodCore.CheckBase): Moved from Method class and made common.
17591         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17592         private.
17593         (MethodCore.CheckForDuplications): New abstract method. For custom
17594         member duplication search in a container
17595         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17596         method and its return type.
17597         (Event.conflict_symbol): New member. Symbol with same name in the
17598         parent class.
17599
17600         * decl.cs:
17601         (MemberCache.FindMemberWithSameName): New method. The method
17602         is looking for conflict with inherited symbols.
17603
17604 2004-08-04  Martin Baulig  <martin@ximian.com>
17605
17606         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17607
17608         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17609
17610 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17611
17612         * report.cs (Message): New enum for better error, warning reference in
17613         the code.
17614         (MessageData): New inner abstract class. It generally handles printing of
17615         error and warning messages.
17616         Removed unused Error, Warning, Message methods.
17617
17618 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17619
17620         Fix for cs0592-8.cs test
17621         * attribute.cs
17622         (Attributable.ValidAttributeTargets): Made public.
17623         (Attribute.ExplicitTarget): New member for explicit target value.
17624         (Attribute.CheckTargets): Now we translate explicit attribute
17625         target to Target here.
17626
17627 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17628
17629         * ecore.cs (MethodGroupExpr): new IsBase property.
17630
17631         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17632
17633         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17634         rather than an instance expr.
17635
17636         (DelegateCreation.Emit): Use the method group rather than
17637         the instance expression. Also, if you have base.Foo as the
17638         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17639
17640         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17641
17642         (NewDelegate.DoResolve): Only check for the existance of Invoke
17643         if the method is going to be needed. Use MethodGroupExpr.
17644
17645         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17646
17647         * expression.cs: For pointer arith., make sure to use
17648         the size of the type, not the size of the pointer to
17649         the type.
17650
17651 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17652
17653         Fix for #60722
17654         * class.cs (Class): Added error CS0502 test.
17655
17656 2004-08-03  John Luke  <jluke@cfl.rr.com>
17657             Raja R Harinath  <rharinath@novell.com>
17658
17659         Fix for #60997.
17660         * attribute.cs (Attribute.complained_before): New flag.
17661         (Attribute.ResolveType, Attribute.Resolve),
17662         (Attribute.DefinePInvokeMethod): Set it.
17663         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17664         
17665 2004-08-03  Martin Baulig  <martin@ximian.com>
17666
17667         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17668         use a user-defined operator; we still need to do numeric
17669         promotions in case one argument is a builtin type and the other
17670         one has an implicit conversion to that type.  Fixes #62322.
17671
17672 2004-08-02  Martin Baulig  <martin@ximian.com>
17673
17674         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17675         (LocalInfo.IsThis): New public property.
17676         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17677
17678 2004-08-01  Martin Baulig  <martin@ximian.com>
17679
17680         * class.cs (TypeContainer.GetClassBases): Don't set the default
17681         here since we may get called from GetPartialBases().
17682         (TypeContainer.DefineType): If GetClassBases() didn't return a
17683         parent, use the default one.
17684
17685 2004-07-30  Duncan Mak  <duncan@ximian.com>
17686
17687         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17688
17689 2004-07-30  Martin Baulig  <martin@ximian.com>
17690
17691         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17692
17693         * class.cs (SourceMethod): New public class, derive from the
17694         symbol writer's ISourceMethod.
17695         (Method): Use the new symbol writer API.
17696
17697         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17698         as argument and use the new symbol writer.
17699
17700         * location.cs
17701         (SourceFile): Implement the symbol writer's ISourceFile.
17702         (Location.SymbolDocument): Removed.
17703         (Location.SourceFile): New public property.
17704
17705         * symbolwriter.cs: Use the new symbol writer API.
17706
17707 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17708
17709         * Makefile (install-local): Remove.  Functionality moved to
17710         executable.make.
17711
17712 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17713
17714         * Makefile: Install mcs.exe.config file together with mcs.exe.
17715         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17716         correct runtime version.
17717         
17718 2004-07-25  Martin Baulig  <martin@ximian.com>
17719
17720         * class.cs
17721         (TypeContainer.RegisterOrder): Removed, this was unused.
17722         (TypeContainer, interface_order): Removed.
17723         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17724         TypeContainer as argument since we can also be called with a
17725         `PartialContainer' for a partial class/struct/interface.
17726         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17727         of checking whether we're an `Interface' - we could be a
17728         `PartialContainer'.
17729         (PartialContainer.Register): Override; call
17730         AddClass()/AddStruct()/AddInterface() on our parent.
17731
17732         * cs-parser.jay (interface_member_declaration): Add things to the
17733         `current_container', not the `current_class'.
17734
17735         * rootcontext.cs (RegisterOrder): The overloaded version which
17736         takes an `Interface' was unused, removed.
17737
17738         * typemanager.cs (TypeManager.LookupInterface): Return a
17739         `TypeContainer', not an `Interface'.
17740         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17741         contain a `PartialContainer' for an interface, so check it's
17742         `Kind' to figure out what it is.
17743
17744 2004-07-25  Martin Baulig  <martin@ximian.com>
17745
17746         * class.cs (Class.DefaultTypeAttributes): New public constant.
17747         (Struct.DefaultTypeAttributes): Likewise.
17748         (Interface.DefaultTypeAttributes): Likewise.
17749         (PartialContainer.TypeAttr): Override this and add the
17750         DefaultTypeAttributes.
17751
17752 2004-07-25  Martin Baulig  <martin@ximian.com>
17753
17754         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17755         we can just use the `Parent' field instead.
17756
17757 2004-07-25  Martin Baulig  <martin@ximian.com>
17758
17759         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17760
17761 2004-07-25  Martin Baulig  <martin@ximian.com>
17762
17763         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17764         our parts before defining any methods.
17765         (TypeContainer.VerifyImplements): Make this virtual.
17766         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17767         on our PartialContainer.
17768
17769 2004-07-25  Martin Baulig  <martin@ximian.com>
17770
17771         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17772
17773         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17774         argument, we can just use the `Parent' field instead.
17775
17776         * class.cs
17777         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17778         (MemberBase.DoDefine): Likewise.
17779
17780 2004-07-24  Martin Baulig  <martin@ximian.com>
17781
17782         * decl.cs (MemberCore.Parent): New public field.
17783         (DeclSpace.Parent): Moved to MemberCore.
17784
17785         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17786         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17787         parent's .ctor.
17788         (FieldBase, Field, Operator): Likewise.
17789         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17790         (EventField, Event): Likewise.
17791
17792 2004-07-23  Martin Baulig  <martin@ximian.com>
17793
17794         * class.cs (PartialContainer): New public class.
17795         (ClassPart): New public class.
17796         (TypeContainer): Added support for partial classes.
17797         (TypeContainer.GetClassBases): Splitted some of the functionality
17798         out into GetNormalBases() and GetPartialBases().
17799
17800         * cs-tokenizer.cs (Token.PARTIAL): New token.
17801         (Tokenizer.consume_identifier): Added some hacks to recognize
17802         `partial', but only if it's immediately followed by `class',
17803         `struct' or `interface'.
17804
17805         * cs-parser.jay: Added support for partial clases.
17806
17807 2004-07-23  Martin Baulig  <martin@ximian.com>
17808
17809         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17810         a `DeclSpace' and also made it readonly.
17811         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17812         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17813         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17814
17815         * cs-parser.jay: Pass the `current_class', not the
17816         `current_container' (at the moment, this is still the same thing)
17817         to a new Method, Property, Event, Indexer or Constructor.
17818
17819 2004-07-23  Martin Baulig  <martin@ximian.com>
17820
17821         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17822         and removed the `current_interface' one.
17823         (struct_declaration, class_declaration, interface_declaration):
17824         Set `current_class' to the newly created class/struct/interface;
17825         set their `Bases' and call Register() before parsing their body.
17826
17827 2004-07-23  Martin Baulig  <martin@ximian.com>
17828
17829         * class.cs (Kind): New public enum.
17830         (TypeContainer): Made this class abstract.
17831         (TypeContainer.Kind): New public readonly field.
17832         (TypeContainer.CheckDef): New public method; moved here from
17833         cs-parser.jay.
17834         (TypeContainer.Register): New public abstract method.
17835         (TypeContainer.GetPendingImplementations): New public abstract
17836         method.
17837         (TypeContainer.GetClassBases): Removed the `is_class' and
17838         `is_iface' parameters.
17839         (TypeContainer.DefineNestedTypes): Formerly known as
17840         DoDefineType().
17841         (ClassOrStruct): Made this class abstract.
17842
17843         * tree.cs (RootTypes): New public type. 
17844
17845 2004-07-20  Martin Baulig  <martin@ximian.com>
17846
17847         * tree.cs (Tree.RecordNamespace): Removed.
17848         (Tree.Namespaces): Removed.
17849
17850         * rootcontext.cs (RootContext.IsNamespace): Removed.
17851
17852         * cs-parser.jay (namespace_declaration): Just create a new
17853         NamespaceEntry here.
17854
17855 2004-07-20  Martin Baulig  <martin@ximian.com>
17856
17857         * statement.cs (ExceptionStatement): New abstract class.  This is
17858         now used as a base class for everyone who's using `finally'.
17859         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17860         our local variables before using them.
17861
17862         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17863         virtual method.  This is used by Yield.Resolve() to "steal" an
17864         outer block's `finally' clauses.
17865         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17866         argument.
17867
17868         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17869         version which takes an ExceptionStatement.  This version must be
17870         used to create exception branchings.
17871
17872         * iterator.cs
17873         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17874         (Iterator.EmitMoveNext): Added exception support; protect the
17875         block with a `fault' clause, properly handle 'finally' clauses.
17876         (Iterator.EmitDispose): Run all the `finally' clauses here.
17877
17878 2004-07-20  Martin Baulig  <martin@ximian.com>
17879
17880         * iterator.cs: This is the first of a set of changes in the
17881         iterator code.  Match the spec more closely: if we're an
17882         IEnumerable, then GetEnumerator() must be called.  The first time
17883         GetEnumerator() is called, it returns the current instance; all
17884         subsequent invocations (if any) must create a copy.
17885
17886 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17887
17888         * expression.cs: Resolve the constant expression before returning
17889         it. 
17890
17891 2004-07-19  Martin Baulig  <martin@ximian.com>
17892
17893         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17894         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17895         the return type of the new EmitContext.
17896
17897 2004-07-18  Martin Baulig  <martin@ximian.com>
17898
17899         * class.cs (Property.Define): Fix iterators.
17900
17901         * iterators.cs (Iterator.Define): Moved the
17902         `container.AddInterator (this)' call here from the .ctor; only do
17903         it if we resolved successfully.
17904
17905 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17906
17907         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17908         `true' for preprocessing directives that we parse.  The return
17909         value indicates whether we should return to regular tokenizing or
17910         not, not whether it was parsed successfully.
17911
17912         In the past if we were in: #if false ... #line #endif, we would
17913         resume parsing after `#line'.  See bug 61604.
17914
17915         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17916         building: IsEnumType should return true only for enums, not for
17917         enums or System.Enum itself.  This fixes #61593.
17918
17919         Likely what happened is that corlib was wrong: mcs depended on
17920         this bug in some places.  The bug got fixed, we had to add the
17921         hack, which caused bug 61593.
17922
17923         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17924         that was a workaround for the older conditions.
17925
17926 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17927
17928         * assign.cs: IAssignMethod has a new interface, as documented
17929         inline. All assignment code now uses this new api.
17930
17931         * ecore.cs, expression.cs: All classes which implement
17932         IAssignMethod now use the new interface.
17933
17934         * expression.cs (Invocation): add a hack to EmitCall so that
17935         IndexerAccess can be the target of a compound assignment without
17936         evaluating its arguments twice.
17937
17938         * statement.cs: Handle changes in Invocation api.
17939
17940 2004-07-16  Martin Baulig  <martin@ximian.com>
17941
17942         * iterators.cs: Rewrote this.  We're now using one single Proxy
17943         class for both the IEnumerable and the IEnumerator interface and
17944         `Iterator' derives from Class so we can use the high-level API.
17945
17946         * class.cs (TypeContainer.AddIterator): New method.
17947         (TypeContainer.DoDefineType): New protected virtual method, which
17948         is called from DefineType().
17949         (TypeContainer.DoDefineMembers): Call DefineType() and
17950         DefineMembers() on all our iterators.
17951         (TypeContainer.Emit): Call Emit() on all our iterators.
17952         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17953
17954         * codegen.cs (EmitContext.CurrentIterator): New public field.
17955
17956 2004-07-15  Martin Baulig  <martin@ximian.com>
17957
17958         * typemanager.cs
17959         (TypeManager.not_supported_exception_type): New type.   
17960
17961 2004-07-14  Martin Baulig  <martin@ximian.com>
17962
17963         * iterators.cs: Use real error numbers.
17964
17965 2004-07-14  Martin Baulig  <martin@ximian.com>
17966
17967         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17968         requires this to be a System.Collection.IEnumerable and not a
17969         class implementing that interface.
17970         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17971
17972 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17973
17974         * class.cs: Fixed previous fix, it broke some error tests.
17975
17976 2004-07-12  Martin Baulig  <martin@ximian.com>
17977
17978         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17979         Fixes #61293.
17980
17981 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17982
17983         * assign.cs (LocalTemporary): Add new argument: is_address,If
17984         `is_address' is true, then the value that we store is the address
17985         to the real value, and not the value itself.
17986         
17987         * ecore.cs (PropertyExpr): use the new local temporary
17988         stuff to allow us to handle X.Y += z (where X is a struct)
17989
17990 2004-07-08  Martin Baulig  <martin@ximian.com>
17991
17992         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17993         not always return, just like we're doing in Using.Resolve().
17994
17995 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17996
17997         * cs-parser.jay (fixed_statement): flag this as Pinned.
17998
17999 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
18000
18001         * typemanager.cs (TypeManager): Removed MakePinned method, this
18002         mechanism is replaced with the .NET 2.x compatible mechanism of
18003         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
18004
18005         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
18006         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
18007         `IsFixed' property which has a different meaning.
18008
18009 2004-07-02  Raja R Harinath  <rharinath@novell.com>
18010
18011         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
18012         visible from inside a nested class, not just the names of the
18013         immediately enclosing class.
18014         Fix for bug #60730.
18015
18016 2004-06-24  Raja R Harinath  <rharinath@novell.com>
18017
18018         * expression.cs (BetterConversion): Remove buggy special-case
18019         handling of "implicit constant expression conversions".  At this
18020         point, we already know that the conversion is possible -- we're
18021         only checking to see which is better.
18022
18023 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18024
18025         * cs-parser.jay: Added error CS0210 test.
18026
18027 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18028
18029         * cs-parser.jay: Added error CS0134 test.
18030
18031 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18032
18033         Fix bug #52507
18034         * cs-parser.jay: Added error CS0145 test.
18035
18036 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18037
18038         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
18039
18040 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
18041         
18042         * expression.cs (StackAlloc.Resolve): The argument may not
18043         be a constant; deal with this case.
18044         
18045 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
18046
18047         * attribute.cs (IndexerName_GetIndexerName): Renamed to
18048         GetIndexerAttributeValue.
18049         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
18050
18051         * class.cs (Indexer.Define): Added error tests for CS0415,
18052         CS0609.
18053
18054 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
18055
18056         * attribute.cs (Attribute.Resolve): Keep field code in sync with
18057         property code.
18058
18059 2004-06-23  Martin Baulig  <martin@ximian.com>
18060
18061         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
18062         neither return nor throw, reset the barrier as well.  Fixes #60457.
18063
18064 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
18065
18066         * class.cs : EventAttributes is now set to None by default.
18067           This fixes bug #60459.
18068
18069 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18070
18071         Fix bug #60219
18072         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18073         Don't throw exception but return null (it's sufficient now).
18074
18075 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18076
18077         * typemanager.cs (GetArgumentTypes): Faster implementation.
18078
18079 2004-06-18  Martin Baulig  <martin@ximian.com>
18080
18081         * attribute.cs (Attribute.Resolve): Check whether we're an
18082         EmptyCast which a Constant child.  Fixes #60333.
18083
18084 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
18085
18086         * statement.cs (EmitCollectionForeach): Account for the fact that
18087         not all valuetypes are in areas which we can take the address of.
18088         For these variables, we store to a temporary variable. Also, make
18089         sure that we dont emit a `callvirt' on a valuetype method.
18090
18091 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18092
18093         * expression.cs (StackAlloc.DoReSolve): Added test for
18094         negative parameter (CS0247).
18095
18096 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18097
18098         Fix bug #59792
18099         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
18100
18101 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18102
18103         Fix bug #59781
18104         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
18105         ulong.
18106
18107 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18108
18109         Fix bug #58254 & cs1555.cs, cs1556.cs
18110         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
18111
18112 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18113
18114         * cs-parser.jay: Added error CS1669 test for indexers.
18115
18116 2004-06-11  Martin Baulig  <martin@ximian.com>
18117
18118         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
18119         call this twice: for params and varargs methods.
18120
18121 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18122
18123         * class.cs:
18124         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
18125
18126 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18127
18128         * attribute.cs (Attribute.GetValidTargets): Made public.
18129
18130         * class.cs: 
18131         (AbstractPropertyEventMethod): New class for better code sharing.
18132         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
18133         CS1667 report.
18134         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
18135
18136 2004-06-11  Raja R Harinath  <rharinath@novell.com>
18137
18138         Fix bug #59477.
18139         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
18140         that the call to Resolve is part of a MemberAccess.
18141         (Expression.Resolve): Use it for SimpleName resolution.
18142         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
18143         Add 'intermediate' boolean argument.
18144         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
18145         error message when the SimpleName can be resolved ambiguously
18146         between an expression and a type.
18147         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
18148         public.
18149         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
18150         call on the left-side.
18151
18152 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18153
18154         * class.cs:
18155         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
18156
18157 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18158
18159         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
18160
18161 2004-06-11  Martin Baulig  <martin@ximian.com>
18162
18163         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
18164         varargs methods if applicable.
18165
18166 2004-06-11  Martin Baulig  <martin@ximian.com>
18167
18168         * expression.cs (Invocation.EmitCall): Don't use
18169         `method.CallingConvention == CallingConventions.VarArgs' since the
18170         method could also have `CallingConventions.HasThis'.
18171
18172 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18173
18174         * class.cs (Event.GetSignatureForError): Implemented.
18175         Fixed crash in error test cs3010.cs
18176
18177 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
18178
18179         * cs-tokenizer.cs: Change the way we track __arglist to be
18180         consistent with the other keywords.
18181
18182 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
18183
18184         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
18185         tomorrow.
18186
18187 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18188
18189         * codegen.cs: Check that all referenced assemblies have a strongname
18190         before strongnaming the compiled assembly. If not report error CS1577.
18191         Fix bug #56563. Patch by Jackson Harper.
18192         * typemanager.cs: Added a method to return all referenced assemblies.
18193         Fix bug #56563. Patch by Jackson Harper.
18194
18195 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18196
18197         * class.cs:
18198         (Method.ApplyAttributeBuilder): Moved and added conditional
18199         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18200
18201         * delegate.cs:
18202         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18203
18204 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18205
18206         Fixed #59640
18207         * class.cs: (EventField.attribute_targets): Changed default target.
18208
18209 2004-06-08  Martin Baulig  <martin@ximian.com>
18210
18211         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18212
18213 2004-06-08  Martin Baulig  <martin@ximian.com>
18214
18215         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18216
18217 2004-06-07  Martin Baulig  <martin@ximian.com>
18218
18219         Added support for varargs methods.
18220
18221         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18222         keyword.
18223
18224         * cs-parser.jay: Added support for `__arglist'.
18225
18226         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18227
18228         * expression.cs (Argument.AType): Added `ArgList'.
18229         (Invocation): Added support for varargs methods.
18230         (ArglistAccess): New public class.
18231         (Arglist): New public class.
18232
18233         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18234
18235         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18236         a method's top-level block if the method has varargs.
18237
18238         * support.cs (ReflectionParameters, InternalParameters): Added
18239         support for varargs methods.    
18240
18241 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18242
18243         * class.cs: Provide location in indexer error report.
18244
18245         * driver.cs: Use standard names.
18246
18247         * namespace.cs: Catch the use of using after a namespace has been
18248         declared also on using aliases.
18249
18250 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18251
18252         Bug #50820.
18253         * typemanager.cs (closure_private_ok, closure_invocation_type)
18254         (closure_qualifier_type, closure_invocation_assembly)
18255         (FilterWithClosure): Move to ...
18256         (Closure): New internal nested class.
18257         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18258         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18259         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18260         (MemberLookup, MemberLookupFailed): Use it.
18261         * expression.cs (New.DoResolve): Treat the lookup for the
18262         constructor as being qualified by the 'new'ed type.
18263         (Indexers.GetIndexersForTypeOrInterface): Update.
18264
18265 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18266
18267         * attribute.cs
18268         (GetConditionalAttributeValue): New method. Returns
18269         condition of ConditionalAttribute.
18270         (SearchMulti): New method.  Returns all attributes of type 't'.
18271         Use it when attribute is AllowMultiple = true.
18272         (IsConditionalMethodExcluded): New method.
18273
18274         * class.cs
18275         (Method.IsExcluded): Implemented. Returns true if method has conditional
18276         attribute and the conditions is not defined (method is excluded).
18277         (IMethodData): Extended interface for ConditionalAttribute support.
18278         (PropertyMethod.IsExcluded): Implemented.
18279
18280         * decl.cs
18281         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18282
18283         * expression.cs
18284         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18285         on the method.
18286
18287 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18288
18289         * expression.cs (ArrayCreationExpression): Make this just an
18290         `expression'. It can't be a statement, so the code here was
18291         dead.
18292
18293 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18294
18295         Fixed #59072
18296         * typemanager.cs (GetFullNameSignature): New method for
18297         MethodBase types.
18298
18299 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18300
18301         Fixed #56452
18302         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18303         Use this method when MethodBuilder is null.
18304         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18305         Added test for error CS0626 (MONO reports error for this situation).
18306         (IMethodData.GetSignatureForError): Extended interface.
18307
18308 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18309
18310         * attribute.cs
18311         (AttributeTester.GetObsoleteAttribute): Returns instance of
18312         ObsoleteAttribute when type is obsolete.
18313
18314         * class.cs
18315         (TypeContainer.VerifyObsoleteAttribute): Override.
18316         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18317         (MethodCode.VerifyObsoleteAttribute): Override.
18318         (MemberBase.VerifyObsoleteAttribute): Override.
18319
18320         * decl.cs
18321         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18322         and report proper error.
18323
18324         *delegate.cs
18325         Delegate.VerifyObsoleteAttribute): Override.
18326
18327         * ecore.cs
18328         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18329         and report proper error.
18330         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18331
18332         * enum.cs
18333         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18334         and enum member.
18335
18336         * expression.cs
18337         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18338         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18339         Added test for ObsoleteAttribute.
18340
18341         * statement.cs
18342         (Catch): Derived from Statement.
18343
18344 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18345  
18346         Fixed bug #59071 & cs0160.cs
18347  
18348         * statement.cs (Try.Resolve): Check here whether order of catch
18349         clauses matches their dependencies.
18350
18351 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18352
18353         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18354         caused a regression: #59343.  Referencing nested classes from an
18355         assembly stopped working.
18356
18357 2004-05-31  Martin Baulig  <martin@ximian.com>
18358
18359         MCS is now frozen for beta 2.
18360
18361 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18362
18363         * convert.cs: add a trivial cache for overload operator resolution.
18364
18365 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18366
18367         * decl.cs: If possible, use lookuptypedirect here. We can only do
18368         this if there is no `.' after the namespace. Avoids using
18369         LookupType, which does lots of slow processing.
18370         (FindNestedType) New method, does what it says :-).
18371         * namespace.cs: use LookupTypeDirect.
18372         * rootcontext.cs: use membercache, if possible.
18373         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18374
18375 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18376
18377         * expression.cs:
18378         According to the spec, 
18379
18380         In a member access of the form E.I, if E is a single identifier,
18381         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18382         field, property, localvariable, or parameter with the same type as
18383         the meaning of E as a type-name (§3.8), then both possible
18384         meanings of E are permitted.
18385
18386         We did not check that E as a simple-name had the same type as E as
18387         a type name.
18388
18389         This trivial check gives us 5-7% on bootstrap time.
18390
18391 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18392
18393         * expression.cs (Invocation.OverloadResolve): Avoid the
18394         use of hashtables and boxing here by allocating on demand.
18395
18396 2004-05-30  Martin Baulig  <martin@ximian.com>
18397
18398         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18399         we're doing a silent lookup.  Don't try to lookup nested types in
18400         TypeManager.object_type (thanks to Ben Maurer).
18401
18402 2004-05-30  Martin Baulig  <martin@ximian.com>
18403
18404         Committing a patch from Ben Maurer.
18405
18406         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18407
18408 2004-05-29  Martin Baulig  <martin@ximian.com>
18409
18410         * class.cs (IMethodData.ShouldIgnore): New method.
18411
18412         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18413         `Location' argument, we don't need it anywhere.  Use
18414         `IMethodData.ShouldIgnore ()' instead of
18415         `MethodData.GetMethodFlags ()'.
18416         (TypeManager.AddMethod): Removed.
18417         (TypeManager.AddMethod2): Renamed to AddMethod.
18418
18419 2004-05-29  Martin Baulig  <martin@ximian.com>
18420
18421         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18422
18423         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18424         converting from a class type S to an interface type and we already
18425         have an object on the stack, don't box it again.  Fixes #52578.
18426
18427 2004-05-29  Martin Baulig  <martin@ximian.com>
18428
18429         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18430         Added support for `params' parameters.  Fixes #59267.
18431
18432 2004-05-29  Martin Baulig  <martin@ximian.com>
18433
18434         * literal.cs (NullPointer): Provide a private .ctor which sets
18435         `type' to TypeManager.object_type.  Fixes #59048.
18436
18437 2004-05-29  Martin Baulig  <martin@ximian.com>
18438
18439         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18440         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18441
18442         * ecore.cs (EventExpr.instance_expr): Make the field private.
18443
18444 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18445
18446         Fixed bug #50080 & cs0214-2.cs
18447         * expression.cs (Cast.DoResolve): Check unsafe context here.
18448         
18449         * statement.cs (Resolve.DoResolve): Likewise.
18450
18451 2004-05-26  Martin Baulig  <martin@ximian.com>
18452
18453         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18454
18455         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18456         (RootContext.LookupType): Pass down the `silent' flag.
18457
18458 2004-05-25  Martin Baulig  <martin@ximian.com>
18459
18460         * expression.cs
18461         (MethodGroupExpr.IdenticalTypeName): New public property.
18462         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18463         expression actually refers to a type.
18464
18465 2004-05-25  Martin Baulig  <martin@ximian.com>
18466
18467         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18468         for #56176 and made it actually work.
18469
18470 2004-05-25  Martin Baulig  <martin@ximian.com>
18471
18472         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18473         (FieldExpr, PropertyExpr): Override and implement
18474         CacheTemporaries.  Fixes #52279.
18475
18476 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18477
18478         * location.cs: In the new compiler listing a file twice is a
18479         warning, not an error.
18480
18481 2004-05-24  Martin Baulig  <martin@ximian.com>
18482
18483         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18484         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18485
18486 2004-05-24  Martin Baulig  <martin@ximian.com>
18487
18488         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18489         walking the `using' list.  Fixes #53921.
18490
18491 2004-05-24  Martin Baulig  <martin@ximian.com>
18492
18493         * const.cs (Const.LookupConstantValue): Added support for
18494         EmptyCast's; fixes #55251.
18495
18496 2004-05-24  Martin Baulig  <martin@ximian.com>
18497
18498         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18499         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18500         which does the CS0135 check.  The reason is that we first need to
18501         check whether the variable actually exists.
18502
18503 2004-05-24  Martin Baulig  <martin@ximian.com>
18504
18505         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18506         than RootContext.LookupType() to find the explicit interface
18507         type.  Fixes #58584.
18508
18509 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18510
18511         * Makefile: Simplify.  Use executable.make.
18512         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18513
18514 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18515
18516         * decl.cs:
18517         * enum.cs:
18518         Use the invariant culture when doing String.Compare for CLS case
18519         sensitivity.
18520         
18521 2004-05-23  Martin Baulig  <martin@ximian.com>
18522
18523         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18524         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18525
18526         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18527         
18528 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18529
18530         * class.cs (MemberBase.Define): Reuse MemberType member for 
18531         resolved type. Other methods can use it too.
18532
18533 2004-05-23  Martin Baulig  <martin@ximian.com>
18534
18535         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18536         the variable also exists in the current block (otherwise, we need
18537         to report a CS0103).  Fixes #58670.
18538
18539 2004-05-23  Martin Baulig  <martin@ximian.com>
18540
18541         * flowanalysis.cs (Reachability.Reachable): Compute this
18542         on-the-fly rather than storing it as a field.
18543
18544 2004-05-23  Martin Baulig  <martin@ximian.com>
18545
18546         * flowanalysis.cs (Reachability.And): Manually compute the
18547         resulting `barrier' from the reachability.      
18548        
18549 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18550
18551         Fix bug #57835
18552         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18553         instance of ObsoleteAttribute when symbol is obsolete.
18554
18555         * class.cs
18556         (IMethodData): Extended interface for ObsoleteAttribute support.
18557
18558 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18559
18560         * attribute.cs: Fix bug #55970
18561
18562 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18563
18564         Fix bug #52705
18565         * attribute.cs
18566         (GetObsoleteAttribute): New method. Creates the instance of
18567         ObsoleteAttribute.
18568         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18569         ObsoleteAttribute when member is obsolete.
18570         (AttributeTester.Report_ObsoleteMessage): Common method for
18571         Obsolete error/warning reporting.
18572
18573         * class.cs
18574         (TypeContainer.base_classs_type): New member for storing parent type.
18575
18576         * decl.cs
18577         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18578         for this MemberCore.
18579
18580 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18581
18582         * attribute.cs, const.cs: Fix bug #58590
18583
18584 2004-05-21  Martin Baulig  <martin@ximian.com>
18585
18586         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18587         out parameters if the end of the method is unreachable.  Fixes
18588         #58098. 
18589
18590 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18591
18592         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18593         Hari was right, why extra method.
18594
18595 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18596
18597         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18598
18599 2004-05-20  Martin Baulig  <martin@ximian.com>
18600
18601         Merged this back from gmcs to keep the differences to a minumum.
18602
18603         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18604         instead of a Declspace.
18605         (Attribute.ResolveType): Likewise.
18606         (Attributes.Search): Likewise.
18607         (Attributes.Contains): Likewise.
18608         (Attributes.GetClsCompliantAttribute): Likewise.
18609
18610         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18611         argument.
18612         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18613         DeclSpace.
18614
18615 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18616
18617         Fix bug #58688 (MCS does not report error when the same attribute
18618         is assigned twice)
18619
18620         * attribute.cs (Attribute.Emit): Distinction between null and default.
18621
18622 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18623
18624         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18625         of a top-level attribute without an attribute target.
18626         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18627         Make non-static.
18628         (Attribute.Conditional_GetConditionName), 
18629         (Attribute.Obsolete_GetObsoleteMessage): Update.
18630         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18631         part of ScanForIndexerName.
18632         (Attribute.CanIgnoreInvalidAttribute): New function.
18633         (Attribute.ScanForIndexerName): Move to ...
18634         (Attributes.ScanForIndexerName): ... here.
18635         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18636         (Attributes.Search): New internal variant that can choose not to
18637         complain if types aren't resolved.  The original signature now
18638         complains.
18639         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18640         complaints suppressed.
18641         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18642         only if it not useful.
18643         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18644         top-level for attributes that are shared between the assembly
18645         and a top-level class.
18646         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18647         * class.cs: Update to reflect changes.
18648         (DefineIndexers): Fuse loops.
18649         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18650         a couple more variants of attribute names.
18651
18652 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18653
18654         Fix bug #52585 (Implemented explicit attribute declaration)
18655
18656         * attribute.cs:
18657         (Attributable.ValidAttributeTargets): New abstract method. It gets
18658         list of valid attribute targets for explicit target declaration.
18659         (Attribute.Target): It holds target itself.
18660         (AttributeSection): Removed.
18661         (Attribute.CheckTargets): New method. It checks whether attribute
18662         target is valid for the current element.
18663
18664         * class.cs:
18665         (EventProperty): New class. For events that are declared like
18666         property (with add and remove accessors).
18667         (EventField): New class. For events that are declared like field.
18668         class.cs
18669
18670         * cs-parser.jay: Implemented explicit attribute target declaration.
18671
18672         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18673         Override ValidAttributeTargets.
18674
18675         * parameter.cs:
18676         (ReturnParameter): Class for applying custom attributes on 
18677         the return type.
18678         (ParameterAtribute): New class. Class for applying custom
18679         attributes on the parameter type.
18680
18681 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18682
18683         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18684         definitions. 
18685
18686         (Method): Allow UNSAFE here.
18687
18688         * modifiers.cs: Support unsafe reporting.
18689
18690 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18691
18692         * decl.cs: Fix bug #58478.
18693
18694 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18695
18696         * statement.cs: When checking for unreachable code on an EmptyStatement,
18697         set the location. Fixes bug #58488.
18698
18699 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18700
18701         * driver.cs: Add -pkg handling.
18702
18703         From Gonzalo: UseShelLExecute=false
18704
18705 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18706
18707         * attribute.cs:
18708         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18709         for attribute.
18710         (Attribute.IsClsCompliaceRequired): Moved to base for better
18711         accesibility.
18712         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18713         when attribute is AttributeUsageAttribute.
18714         (Attribute.GetValidTargets): Simplified.
18715         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18716         attribute for this type.
18717         (Attribute.ApplyAttributes): Method renamed to Emit and make
18718         non-static.
18719         (GlobalAttributeSection): New class for special handling of global
18720         attributes (assembly, module).
18721         (AttributeSection.Emit): New method.
18722
18723         * class.cs: Implemented Attributable abstract methods.
18724         (MethodCore.LabelParameters): Moved to Parameter class.
18725         (Accessor): Is back simple class.
18726         (PropertyMethod): Implemented Attributable abstract class.
18727         (DelegateMethod): Implemented Attributable abstract class.
18728         (Event): New constructor for disctintion between normal Event
18729         and Event with accessors.
18730
18731         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18732
18733         * codegen.cs, const.cs, decl.cs, delegate.cs:
18734         (CommonAssemblyModulClass): Implemented Attributable abstract class
18735         and simplified.
18736
18737         * enum.cs: Implement IAttributeSupport interface.
18738         (EnumMember): New class for emum members. Implemented Attributable
18739         abstract class
18740
18741         * parameter.cs:
18742         (ParameterBase): Is abstract.
18743         (ReturnParameter): New class for easier [return:] attribute handling.
18744
18745         * typemanager.cs: Removed builder_to_attr.
18746
18747 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18748
18749         Fix bug #57151.
18750         * attribute.cs (Attribute.GetPositionalValue): New function.
18751         * class.cs (TypeContainer.VerifyMembers): New function.
18752         (TypeContainer.Emit): Use it.
18753         (ClassOrStruct): New base class for Class and Struct.
18754         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18755         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18756         class.
18757         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18758         then each non-static field should have a FieldOffset attribute.
18759         Otherwise, none of the fields should have a FieldOffset attribute.
18760         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18761         and FieldOffset attributes.
18762         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18763         (TypeManager.field_offset_attribute_type): New core types.
18764         (TypeManager.InitCoreTypes): Initialize them.
18765
18766 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18767
18768         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18769         Return correct type.
18770         From bug #58270.
18771
18772 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18773
18774         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18775         be implicitly converted to ulong.
18776         
18777         * expression.cs: The logic for allowing operator &, | and ^ worked
18778         was wrong, it worked before because we did not report an error in
18779         an else branch.  Fixes 57895.
18780
18781         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18782         allow volatile fields to be reference types.
18783
18784 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18785
18786         * driver.cs: Add support for /debug-
18787
18788 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18789
18790         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18791         Add a 'complain' parameter to silence errors.
18792         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18793         silently overlooked type-resolutions.
18794         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18795         to reflect changes.
18796         (Attributes.Search): New function.
18797         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18798         (Attributes.GetAttributeFullName): Remove hack.
18799         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18800         Update to reflect changes.
18801         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18802         Use Attributes.Search instead of nested loops.
18803
18804 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18805
18806         * decl.cs:
18807         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18808         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18809         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18810
18811         * report.cs: (Report.Warning): Renamed to Warning_T because of
18812         parameter collision.
18813
18814 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18815
18816         * expression.cs (MemberAccess.ResolveMemberAccess):
18817         Exit with non-zero status after Report.Error.
18818         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18819         Likewise.
18820         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18821
18822 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18823
18824         * support.cs: Don't hang when the file is empty.
18825
18826 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18827
18828         * support.cs: In SeekableStreamReader, compute the preamble size of the
18829           underlying stream. Position changes should take into account that initial
18830           count of bytes.
18831
18832 2004-05-03  Todd Berman  <tberman@sevenl.net>
18833
18834         * driver.cs: remove unused GetSysVersion function.
18835
18836 2004-05-03  Todd Berman  <tberman@sevenl.net>
18837
18838         * driver.cs: Remove the hack from saturday, as well as the hack
18839         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18840         link_paths to get that bit proper.
18841
18842 2004-05-01  Todd Berman  <tberman@sevenl.net>
18843
18844         * driver.cs: Try a LoadFrom before a Load, this checks the current
18845         path. This is currently a bug in mono that is be fixed, however, this
18846         provides a workaround for now. This will be removed when the bug
18847         is fixed.
18848
18849 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18850
18851         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18852         incomplete key pairs (#57941).
18853
18854 2004-05-01  Todd Berman  <tberman@sevenl.net>
18855
18856         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18857         from the GAC
18858
18859 2004-04-30  Jackson Harper  <jackson@ximian.com>
18860
18861         * codegen.cs: Open keys readonly.
18862         
18863 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18864
18865         * typemanager.cs: don't report cyclic struct layout when a struct
18866         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18867         which has 2 Pango.Rectangle fields.
18868
18869 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18870
18871         * expression.cs: Handle IntPtr comparisons with IL code
18872         rather than a method call.
18873
18874 2004-04-29  Martin Baulig  <martin@ximian.com>
18875
18876         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18877         the list of PropertyInfo's in class hierarchy and find the
18878         accessor.  Fixes #56013.
18879
18880 2004-04-29  Martin Baulig  <martin@ximian.com>
18881
18882         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18883
18884 2004-04-29  Martin Baulig  <martin@ximian.com>
18885
18886         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18887
18888         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18889
18890 2004-04-29  Martin Baulig  <martin@ximian.com>
18891
18892         * class.cs (ConstructorInitializer.Resolve): Check whether the
18893         parent .ctor is accessible.  Fixes #52146.
18894
18895 2004-04-29  Martin Baulig  <martin@ximian.com>
18896
18897         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18898
18899         * statement.cs (Using.EmitLocalVariableDecls): Use
18900         TypeManager.idisposable_type, not typeof (IDisposable).
18901         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18902
18903 2004-04-29  Martin Baulig  <martin@ximian.com>
18904
18905         * class.cs (Event.Define): Don't emit the field and don't set
18906         RTSpecialName and SpecialName for events on interfaces.  Fixes
18907         #57703. 
18908
18909 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18910
18911         Refactor Attribute.ApplyAttributes.
18912         * attribute.cs (Attributable): New base class for objects that can
18913         have Attributes applied on them.
18914         (Attribute): Make AttributeUsage fields public.
18915         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18916         (Attribute.IsInternalCall): New property.
18917         (Attribute.UsageAttr): Convert to a public read-only property.
18918         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18919         (Attribute.ResolveType, Attribute.Resolve)
18920         (Attribute.ScanForIndexerName): Update to reflect changes.
18921         (Attribute.CheckAttributeTarget): Re-format.
18922         (Attribute.ApplyAttributes): Refactor, to various
18923         Attributable.ApplyAttributeBuilder methods.
18924         * decl.cs (MemberCore): Make Attributable.
18925         * class.cs (Accessor): Make Attributable.
18926         (MethodData.ApplyAttributes): Use proper attribute types, not
18927         attribute names.
18928         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18929         (TypeContainer.ApplyAttributeBuilder)
18930         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18931         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18932         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18933         (Operator.ApplyAttributeBuilder): New factored-out methods.
18934         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18935         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18936         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18937         * parameter.cs (ParameterBase): New Attributable base class
18938         that can also represent Return types.
18939         (Parameter): Update to the changes.
18940
18941 2004-04-29  Jackson Harper  <jackson@ximian.com>
18942
18943         * driver.cs: Prefer the corlib system version when looking for
18944         assemblies in the GAC. This is still a hack, but its a better hack
18945         now.
18946         
18947 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18948
18949         * decl.cs, enum.cs: Improved error 3005 reporting.
18950   
18951         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18952         (related_symbols): New private member for list of symbols
18953         related to reported error/warning.
18954         
18955         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18956
18957 2004-04-29  Martin Baulig  <martin@ximian.com>
18958
18959         * ecore.cs (Expression.Constantify): If we're an enum and
18960         TypeManager.TypeToCoreType() doesn't give us another type, use
18961         t.UnderlyingSystemType.  Fixes #56178.  
18962
18963 2004-04-29  Martin Baulig  <martin@ximian.com>
18964
18965         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18966         interfaces and for each interface, only add members directly
18967         declared in that interface.  Fixes #53255.
18968
18969 2004-04-28  Martin Baulig  <martin@ximian.com>
18970
18971         * expression.cs (ConditionalLogicalOperator): Use a temporary
18972         variable for `left' to avoid that we evaluate it more than once;
18973         bug #52588.
18974
18975 2004-04-28  Martin Baulig  <martin@ximian.com>
18976
18977         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18978         `void[]' (CS1547).
18979
18980 2004-04-28  Martin Baulig  <martin@ximian.com>
18981
18982         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18983         void (CS1547).
18984
18985         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18986         whether the type is not void (CS1547).
18987
18988 2004-04-28  Martin Baulig  <martin@ximian.com>
18989
18990         * expression.cs (Unary.DoResolveLValue): Override this and report
18991         CS0131 for anything but Operator.Indirection.
18992
18993 2004-04-28  Martin Baulig  <martin@ximian.com>
18994
18995         Committing a patch from Ben Maurer; see bug #50820.
18996
18997         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18998         check for classes.
18999
19000         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19001         classes.        
19002
19003 2004-04-28  Martin Baulig  <martin@ximian.com>
19004
19005         Committing a patch from Ben Maurer; see bug #50820.
19006
19007         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19008         check for classes.
19009
19010         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19011         classes.        
19012
19013 2004-04-28  Martin Baulig  <martin@ximian.com>
19014
19015         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
19016         (Block.AddLabel): Call DoLookupLabel() to only search in the
19017         current block.
19018
19019 2004-04-28  Martin Baulig  <martin@ximian.com>
19020
19021         * cfold.cs (ConstantFold.BinaryFold): Added special support for
19022         comparing StringConstants and NullLiterals in Equality and Inequality.
19023
19024 2004-04-28  Jackson Harper  <jackson@ximian.com>
19025
19026         * driver.cs: Attempt to load referenced assemblies from the
19027         GAC. This is the quick and dirty version of this method that
19028         doesnt take into account versions and just takes the first
19029         canidate found. Will be good enough for now as we will not have more
19030         then one version installed into the GAC until I update this method.
19031
19032 2004-04-28  Martin Baulig  <martin@ximian.com>
19033
19034         * typemanager.cs (TypeManager.CheckStructCycles): New public
19035         static method to check for cycles in the struct layout.
19036
19037         * rootcontext.cs (RootContext.PopulateTypes): Call
19038         TypeManager.CheckStructCycles() for each TypeContainer.
19039         [Note: We only need to visit each type once.]
19040
19041 2004-04-28  Martin Baulig  <martin@ximian.com>
19042
19043         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
19044
19045         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
19046         success and added `out object value'.  Use a `bool resolved' field
19047         to check whether we've already been called rather than
19048         `ConstantValue != null' since this breaks for NullLiterals.
19049
19050 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19051
19052         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
19053         setting of this flag, since the 'set' method may be non-public.
19054
19055 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19056
19057         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
19058         check on current_vector.Block.
19059
19060 2004-04-27  Martin Baulig  <martin@ximian.com>
19061
19062         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
19063         a field initializer.  Fixes #56459.
19064
19065 2004-04-27  Martin Baulig  <martin@ximian.com>
19066
19067         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
19068         we're not attempting to use an indexer.  Fixes #52154.
19069
19070 2004-04-27  Martin Baulig  <martin@ximian.com>
19071
19072         * statement.cs (Return): Don't create a return label if we don't
19073         need it; reverts my change from January 20th.  Thanks to Ben
19074         Maurer for this.
19075
19076 2004-04-27  Martin Baulig  <martin@ximian.com>
19077
19078         According to the spec, `goto' can only leave a nested scope, but
19079         never enter it.
19080
19081         * statement.cs (Block.LookupLabel): Only lookup in the current
19082         block, don't recurse into parent or child blocks.
19083         (Block.AddLabel): Check in parent and child blocks, report
19084         CS0140/CS0158 if we find a duplicate.
19085         (Block): Removed this indexer for label lookups.
19086         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
19087         this already does the error reporting for us.
19088
19089         * flowanalysis.cs
19090         (FlowBranching.UsageVector.Block): New public variable; may be null.
19091         (FlowBranching.CreateSibling): Added `Block' argument.
19092         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
19093         label for the target of a `goto' and check whether we're not
19094         leaving a `finally'.
19095
19096 2004-04-27  Martin Baulig  <martin@ximian.com>
19097
19098         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
19099         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
19100         just for returns).
19101
19102 2004-04-27  Martin Baulig  <martin@ximian.com>
19103
19104         * statement.cs (Block.AddLabel): Also check for implicit blocks
19105         and added a CS0158 check.
19106
19107 2004-04-27  Martin Baulig  <martin@ximian.com>
19108
19109         * flowanalysis.cs (FlowBranchingLoop): New class.
19110         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
19111         UsageVector's instead of an ArrayList.
19112         (FlowBranching.Label): Likewise.
19113         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
19114         (FlowBranching.AddBreakVector): New method.
19115
19116 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
19117
19118         * attribute.cs: Small regression fix: only convert the type if we
19119         the type is different, fixes System.Drawing build.
19120
19121 2004-04-27  Martin Baulig  <martin@ximian.com>
19122
19123         * attribute.cs (Attribute.Resolve): If we have a constant value
19124         for a named field or property, implicity convert it to the correct
19125         type.
19126
19127 2004-04-27  Raja R Harinath  <rharinath@novell.com>
19128
19129         * statement.cs (Block.Block): Implicit blocks share
19130         'child_variable_names' fields with parent blocks.
19131         (Block.AddChildVariableNames): Remove.
19132         (Block.AddVariable): Mark variable as "used by a child block" in
19133         every surrounding block.
19134         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
19135         been used in a child block, complain about violation of "Invariant
19136         meaning in blocks" rule.
19137         * cs-parser.jay (declare_local_variables): Don't use
19138         AddChildVariableNames.
19139         (foreach_statement): Don't create an implicit block: 'foreach'
19140         introduces a scope.
19141
19142 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
19143
19144         * convert.cs (ImplicitNumericConversion): 0 is also positive when
19145         converting from 0L to ulong.  Fixes 57522.
19146
19147 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19148
19149         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
19150         derived class hides via 'new' keyword field from base class (test-242.cs).
19151         TODO: Handle this in the more general way.
19152         
19153         * class.cs (CheckBase): Ditto.
19154
19155 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19156
19157         * decl.cs (caching_flags): New member for storing cached values
19158         as bit flags.
19159         (MemberCore.Flags): New enum where bit flags for caching_flags
19160         are defined.
19161         (MemberCore.cls_compliance): Moved to caching_flags.
19162         (DeclSpace.Created): Moved to caching_flags.
19163
19164         * class.cs: Use caching_flags instead of DeclSpace.Created
19165         
19166 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
19167
19168         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
19169         if we are only a derived class, not a nested class.
19170
19171         * typemanager.cs: Same as above, but do this at the MemberLookup
19172         level (used by field and methods, properties are handled in
19173         PropertyExpr).   Allow for the qualified access if we are a nested
19174         method. 
19175
19176 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
19177
19178         * class.cs: Refactoring.
19179         (IMethodData): New inteface; Holds links to parent members
19180         to avoid member duplication (reduced memory allocation).
19181         (Method): Implemented IMethodData interface.
19182         (PropertyBase): New inner classes for get/set methods.
19183         (PropertyBase.PropertyMethod): Implemented IMethodData interface
19184         (Event): New inner classes for add/remove methods.
19185         (Event.DelegateMethod): Implemented IMethodData interface.
19186
19187         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19188         EmitContext (related to class.cs refactoring).
19189
19190 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19191
19192         * delegate.cs (Delegate.VerifyApplicability): If the number of
19193         arguments are the same as the number of parameters, first try to
19194         verify applicability ignoring  any 'params' modifier on the last
19195         parameter.
19196         Fixes #56442.
19197
19198 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19199
19200         * class.cs (TypeContainer.AddIndexer): Use
19201         'ExplicitInterfaceName' to determine if interface name was
19202         explicitly specified.  'InterfaceType' is not initialized at this time.
19203         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19204         Indexers array is already in the required order.  Initialize
19205         'IndexerName' only if there are normal indexers.
19206         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19207         (TypeContainer.Emit): Emit DefaultMember attribute only if
19208         IndexerName is initialized.
19209         Fixes #56300.
19210
19211 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19212
19213         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19214         Fixes #57007
19215
19216 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19217
19218         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19219         attributes.
19220         Fix for #56456.
19221
19222         * attribute.cs (Attribute.Resolve): Check for duplicate named
19223         attributes.
19224         Fix for #56463.
19225
19226 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19227
19228         * iterators.cs (MarkYield): track whether we are in an exception,
19229         and generate code accordingly.  Use a temporary value to store the
19230         result for our state.
19231
19232         I had ignored a bit the interaction of try/catch with iterators
19233         since their behavior was not entirely obvious, but now it is
19234         possible to verify that our behavior is the same as MS .NET 2.0
19235
19236         Fixes 54814
19237
19238 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19239
19240         * iterators.cs: Avoid creating temporaries if there is no work to
19241         do. 
19242
19243         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19244         Enumerations, use TypeManager.EnumToUnderlying and call
19245         recursively. 
19246
19247         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19248         bug #57013
19249
19250         (This.Emit): Use EmitContext.EmitThis to emit our
19251         instance variable.
19252
19253         (This.EmitAssign): Ditto.
19254
19255         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19256         codepaths, we will move all the functionality into
19257         Mono.CSharp.This 
19258
19259         (FieldExpr.EmitAssign): Ditto.
19260
19261         This fixes several hidden bugs that I uncovered while doing a code
19262         review of this today.
19263
19264         * codegen.cs (EmitThis): reworked so the semantics are more clear
19265         and also support value types "this" instances.
19266
19267         * iterators.cs: Changed so that for iterators in value types, we
19268         do not pass the value type as a parameter.  
19269
19270         Initialization of the enumerator helpers is now done in the caller
19271         instead of passing the parameters to the constructors and having
19272         the constructor set the fields.
19273
19274         The fields have now `assembly' visibility instead of private.
19275
19276 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19277
19278         * expression.cs (Argument.Resolve): Check if fields passed as ref
19279         or out are contained in a MarshalByRefObject.
19280
19281         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19282         another compiler type.
19283
19284 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19285
19286         * class.cs (Indexer.Define): use the new name checking method.
19287         Also, return false on an error.
19288         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19289         (is_identifier_[start/part]_character): make static.
19290
19291 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19292
19293         * expression.cs (Binary.ResolveOperator): Do no append strings
19294         twice: since we can be invoked more than once (array evaluation)
19295         on the same concatenation, take care of this here.  Based on a fix
19296         from Ben (bug #56454)
19297
19298 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19299
19300         * codegen.cs: Fix another case where CS1548 must be reported (when 
19301         delay-sign isn't specified and no private is available #56564). Fix
19302         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19303         error when MCS is used on the MS runtime and we need to delay-sign 
19304         (which seems unsupported by AssemblyBuilder - see #56621).
19305
19306 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19307
19308         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19309         (TypeManager.ComputeNamespaces): Faster implementation for
19310         Microsoft runtime.
19311
19312         * compiler.csproj: Updated AssemblyName to mcs.
19313
19314 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19315
19316         * rootcontext.cs: Add new types to the boot resolution.
19317
19318         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19319         MulticastDelegate is not allowed.
19320
19321         * typemanager.cs: Add new types to lookup: System.TypedReference
19322         and ArgIterator.
19323
19324         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19325         check for TypedReference or ArgIterator, they are not allowed. 
19326
19327         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19328         makes us properly catch 1510 in some conditions (see bug 56016 for
19329         details). 
19330
19331 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19332
19333         * CryptoConvert.cs: update from corlib version
19334         with endian fixes.
19335
19336 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19337
19338         * class.cs (Indexer.Define): Check indexername declaration
19339
19340 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19341
19342         * attribute.cs (IsClsCompliant): Fixed problem with handling
19343         all three states (compliant, not-compliant, undetected).
19344
19345 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19346
19347         * attribute.cs (Attribute): Location is now public.
19348         (Resolve): Store resolved arguments (pos_values) in attribute class.
19349         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19350         (GetClsCompliantAttributeValue): New method that gets
19351         CLSCompliantAttribute value.
19352         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19353         if exists else null.
19354         (AttributeTester): New class for CLS-Compliant verification routines.
19355
19356         * class.cs (Emit): Add CLS-Compliant verification.
19357         (Method.GetSignatureForError): Implemented.
19358         (Constructor.GetSignatureForError): Implemented
19359         (Constructor.HasCompliantArgs): Returns if constructor has
19360         CLS-Compliant arguments.
19361         (Constructor.Emit): Override.
19362         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19363         is needed to test only parameters.
19364         (FieldBase.GetSignatureForError): Implemented.
19365         (TypeContainer): New member for storing base interfaces.
19366         (TypeContainer.FindMembers): Search in base interfaces too.
19367
19368         * codegen.cs (GetClsComplianceAttribute): New method that gets
19369         assembly or module CLSCompliantAttribute value.
19370         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19371         for assembly.
19372         (ModuleClass.Emit): Add error 3012 test.
19373
19374         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19375
19376         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19377         state for all decl types.
19378         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19379         if CLS-Compliant tests are required.
19380         (IsClsCompliaceRequired): New method. Analyze whether code
19381         must be CLS-Compliant.
19382         (IsExposedFromAssembly): New method. Returns true when MemberCore
19383         is exposed from assembly.
19384         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19385         value or gets cached value.
19386         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19387         is explicitly marked with CLSCompliantAttribute.
19388         (IsIdentifierClsCompliant): New abstract method. This method is
19389         used to testing error 3005.
19390         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19391         for identifier and parameters CLS-Compliant testing.
19392         (VerifyClsCompliance): New method. The main virtual method for
19393         CLS-Compliant verifications.
19394         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19395         null. I don't know why is null (too many public members !).
19396         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19397         and get value of first CLSCompliantAttribute that found.
19398
19399         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19400         (VerifyClsCompliance): Override and add extra tests.
19401
19402         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19403         clscheck- disable CLS-Compliant verification event if assembly is has
19404         CLSCompliantAttribute(true).
19405
19406         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19407         ApllyAttribute is now called in emit section as in the other cases.
19408         Possible future Emit integration.
19409         (IsIdentifierClsCompliant): New override.
19410         (VerifyClsCompliance): New override.
19411         (GetEnumeratorName): Returns full enum name.
19412
19413         * parameter.cs (GetSignatureForError): Implemented.
19414
19415         * report.cs (WarningData): New struct for Warning message information.
19416         (LocationOfPreviousError): New method.
19417         (Warning): New method. Reports warning based on the warning table.
19418         (Error_T): New method. Reports error based on the error table.
19419
19420         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19421         verifications are done here.
19422
19423         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19424
19425         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19426         CLSCompliantAttribute.
19427         (all_imported_types): New member holds all imported types from other
19428         assemblies.
19429         (LoadAllImportedTypes): New method fills static table with exported types
19430         from all referenced assemblies.
19431         (Modules): New property returns all assembly modules.
19432
19433 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19434
19435         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19436         throwing a parser error.
19437
19438         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19439         which removes the hardcoded get_/set_ prefixes for properties, as
19440         IL allows for the properties to be named something else.  
19441
19442         Bug #56013
19443
19444         * expression.cs: Do not override operand before we know if it is
19445         non-null.  Fix 56207
19446
19447 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19448
19449         * typemanager.cs: support for pinned variables.
19450
19451 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19452
19453         * decl.cs, typemanager.cs: Avoid using an arraylist
19454         as a buffer if there is only one result set.
19455
19456 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19457
19458         * expression.cs: Make sure you cant call a static method
19459         with an instance expression, bug #56174.
19460
19461 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19462
19463         * class.cs (IsDuplicateImplementation): Improve error reporting to
19464         flag 663 (method only differs in parameter modifier).
19465
19466         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19467         in preprocessor directives.
19468
19469         * location.cs (LookupFile): Allow for the empty path.
19470
19471         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19472         better approach for some of that patch, but its failing with the
19473         CharSet enumeration.  For now try/catch will do.
19474
19475         * typemanager.cs: Do not crash if a struct does not have fields.
19476         Fixes 56150.
19477
19478 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19479
19480         * expression.cs: cs0213, cant fix a fixed expression.
19481         fixes 50231.
19482
19483 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19484
19485         * cs-parser.jay: detect invalid embeded statements gracefully.
19486         bug #51113.
19487
19488 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19489
19490         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19491         As a regex:
19492         s/
19493         the invocation type may not be a subclass of the tye of the item/
19494         The type of the item must be a subclass of the invocation item.
19495         /g
19496
19497         Fixes bug #50820.
19498
19499 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19500
19501         * attribute.cs: Added methods to get a string and a bool from an
19502         attribute. Required to information from AssemblyKeyFileAttribute,
19503         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19504         * codegen.cs: Modified AssemblyName creation to include support for
19505         strongnames. Catch additional exceptions to report them as CS1548.
19506         * compiler.csproj: Updated include CryptoConvert.cs.
19507         * compiler.csproj.user: Removed file - user specific configuration.
19508         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19509         Mono.Security assembly. The original class is maintained and tested in
19510         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19511         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19512         like CSC 8.0 (C# v2) supports.
19513         * Makefile: Added CryptoConvert.cs to mcs sources.
19514         * rootcontext.cs: Added new options for strongnames.
19515
19516 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19517
19518         * driver.cs: For --expect-error, report error code `2'
19519         if the program compiled with no errors, error code `1' if
19520         it compiled with an error other than the one expected.
19521
19522 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19523
19524         * compiler.csproj: Updated for Visual Studio .NET 2003.
19525         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19526         * compiler.sln: Updated for Visual Studio .NET 2003.
19527
19528 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19529
19530         * expression.cs: Fix bug #47234. We basically need to apply the
19531         rule that we prefer the conversion of null to a reference type
19532         when faced with a conversion to 'object' (csc behaviour).
19533
19534 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19535
19536         * statement.cs: Shorter form for foreach, eliminates
19537         a local variable. r=Martin.
19538
19539 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19540
19541         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19542         checks if we can use brtrue/brfalse to test for 0.
19543         * expression.cs: use the above in the test for using brtrue/brfalse.
19544         cleanup code a bit.
19545
19546 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19547
19548         * expression.cs: Rewrite string concat stuff. Benefits:
19549
19550         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19551         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19552         rather than a concat chain.
19553
19554         * typemanager.cs: Add lookups for more concat overloads.
19555
19556 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19557
19558         * expression.cs: Emit shorter il code for array init.
19559
19560         newarr
19561         dup
19562         // set 1
19563
19564         // set 2
19565
19566         newarr
19567         stloc.x
19568
19569         ldloc.x
19570         // set 1
19571
19572         ldloc.x
19573         // set 2
19574
19575 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19576
19577         * statement.cs: Before, two switch blocks would be merged if the
19578         total size of the blocks (end_item - begin_item + 1) was less than
19579         two times the combined sizes of the blocks.
19580
19581         Now, it will only merge if after the merge at least half of the
19582         slots are filled.
19583
19584         fixes 55885.
19585
19586 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19587
19588         * class.cs : csc build fix for GetMethods(). See bug #52503.
19589
19590 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19591
19592         * expression.cs: Make sure fp comparisons work with NaN.
19593         This fixes bug #54303. Mig approved this patch a long
19594         time ago, but we were not able to test b/c the runtime
19595         had a related bug.
19596
19597 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19598
19599         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19600
19601 2004-03-19  Martin Baulig  <martin@ximian.com>
19602
19603         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19604         error here and not in our caller.
19605
19606 2004-03-19  Martin Baulig  <martin@ximian.com>
19607
19608         * interface.cs: Completely killed this file.
19609         (Interface): We're now a TypeContainer and live in class.cs.
19610
19611         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19612         argument; we're now also called for interfaces.
19613         (TypeContainer.DefineMembers): Allow this method being called
19614         multiple times.
19615         (TypeContainer.GetMethods): New public method; formerly known as
19616         Interface.GetMethod().  This is used by PendingImplementation.
19617         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19618         it's now private and non-static.
19619         (Interface): Moved this here; it's now implemented similar to
19620         Class and Struct.
19621         (Method, Property, Event, Indexer): Added `bool is_interface'
19622         argument to their .ctor's.
19623         (MemberBase.IsInterface): New public field.
19624
19625         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19626         instances instead of InterfaceMethod, InterfaceProperty, etc.
19627         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19628         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19629
19630 2004-03-19  Martin Baulig  <martin@ximian.com>
19631
19632         * class.cs (MethodCore.IsDuplicateImplementation): New private
19633         method which does the CS0111 checking.
19634         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19635         Use IsDuplicateImplementation().
19636
19637 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19638
19639         * decl.cs (FindMemberToOverride): New method to find the correct
19640         method or property to override in the base class.
19641         * class.cs
19642             - Make Method/Property use the above method to find the
19643               version in the base class.
19644             - Remove the InheritableMemberSignatureCompare as it is now
19645               dead code.
19646
19647         This patch makes large code bases much faster to compile, as it is
19648         O(n) rather than O(n^2) to do this validation.
19649
19650         Also, it fixes bug 52458 which is that nested classes are not
19651         taken into account when finding the base class member.
19652
19653         Reviewed/Approved by Martin.
19654
19655 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19656
19657         * interface.cs: In all interface classes removed redundant
19658         member initialization.
19659
19660 2004-03-16  Martin Baulig  <martin@ximian.com>
19661
19662         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19663
19664 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19665
19666         * decl.cs (DefineTypeAndParents): New helper method to define a
19667         type's containers before the type itself is defined;  This is a
19668         bug exposed by the recent changes to Windows.Forms when an
19669         implemented interface was defined inside a class that had not been
19670         built yet.   
19671
19672         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19673
19674         (Check): Loop correctly to report errors modifiers
19675         (UNSAFE was not in the loop, since it was the same as TOP).
19676
19677         * interface.cs: Every interface member now takes a ModFlags,
19678         instead of a "is_new" bool, which we set on the base MemberCore. 
19679
19680         Every place where we called "UnsafeOk" in the interface, now we
19681         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19682         the unsafe settings from the member declaration instead of the
19683         container interface. 
19684
19685         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19686
19687         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19688         `set_indexer_name' to the pending bits (one per type).
19689
19690         We fixed a bug today that was picking the wrong method to
19691         override, since for properties the existing InterfaceMethod code
19692         basically ignored the method name.  Now we make sure that the
19693         method name is one of the valid indexer names.
19694
19695 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19696  
19697         * support.cs (SeekableStreamReader): Keep track of stream byte
19698         positions and don't mix them with character offsets to the buffer.
19699
19700         Patch from Gustavo Giráldez
19701
19702 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19703
19704         * interface.cs (InterfaceSetGetBase): Removed double member
19705         initialization, base class does it as well.
19706
19707 2004-03-13  Martin Baulig  <martin@ximian.com>
19708
19709         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19710         when compiling corlib.
19711
19712 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19713
19714         * convert.cs (ExplicitConversion): We were reporting an error on
19715         certain conversions (object_type source to a value type, when the
19716         expression was `null') before we had a chance to pass it through
19717         the user defined conversions.
19718
19719         * driver.cs: Replace / and \ in resource specifications to dots.
19720         Fixes 50752
19721
19722         * class.cs: Add check for duplicate operators.  Fixes 52477
19723
19724 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19725
19726         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19727         that are in the middle of the statements, not only at the end.
19728         Fixes #54987
19729
19730         * class.cs (TypeContainer.AddField): No longer set the
19731         `HaveStaticConstructor' flag, now we call it
19732         `UserDefineStaticConstructor' to diferentiate the slightly
19733         semantic difference.
19734
19735         The situation is that we were not adding BeforeFieldInit (from
19736         Modifiers.TypeAttr) to classes that could have it.
19737         BeforeFieldInit should be set to classes that have no static
19738         constructor. 
19739
19740         See:
19741
19742         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19743
19744         And most importantly Zoltan's comment:
19745
19746         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19747
19748         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19749          before its static fields are used', i.e. initialization does not need
19750          to be triggered by the first access to the type. Setting this flag
19751          helps the JIT to compile better code, since it can run the static
19752          constructor at JIT time, and does not need to generate code to call it
19753          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19754          this flag for lots of classes like String. 
19755          
19756          csc sets this flag if the type does not have an explicit static 
19757          constructor. The reasoning seems to be that if there are only static
19758          initalizers for a type, and no static constructor, then the programmer
19759          does not care when this initialization happens, so beforefieldinit
19760          can be used.
19761          
19762          This bug prevents the AOT compiler from being usable, since it 
19763          generates so many calls to mono_runtime_class_init that the AOT code
19764          is much slower than the JITted code. The JITted code is faster, 
19765          because it does not generate these calls if the vtable is type is
19766          already initialized, which is true in the majority of cases. But the
19767          AOT compiler can't do this."
19768
19769 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19770
19771         * class.cs (MethodData.Emit): Refactor the code so symbolic
19772         information is generated for destructors;  For some reasons we
19773         were taking a code path that did not generate symbolic information
19774         before. 
19775
19776 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19777
19778         * class.cs: Create a Constructor.CheckBase method that
19779         takes care of all validation type code. The method
19780         contains some code that was moved from Define.
19781
19782         It also includes new code that checks for duplicate ctors.
19783         This fixes bug #55148.
19784
19785 2004-03-09  Joshua Tauberer <tauberer@for.net>
19786
19787         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19788         a { ... }-style array creation invokes EmitStaticInitializers
19789         which is not good for reference-type arrays.  String, decimal
19790         and now null constants (NullCast) are not counted toward
19791         static initializers.
19792
19793 2004-03-05  Martin Baulig  <martin@ximian.com>
19794
19795         * location.cs (SourceFile.HasLineDirective): New public field;
19796         specifies whether the file contains or is referenced by a "#line"
19797         directive.
19798         (Location.DefineSymbolDocuments): Ignore source files which
19799         either contain or are referenced by a "#line" directive.        
19800
19801 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19802
19803         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19804         direct access to our parent, so check the method inline there.
19805
19806 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19807
19808         * expression.cs (Invocation.EmitCall): Miguel's last commit
19809         caused a regression. If you had:
19810
19811             T t = null;
19812             t.Foo ();
19813
19814         In Foo the implict this would be null.
19815
19816 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19817
19818         * expression.cs (Invocation.EmitCall): If the method is not
19819         virtual, do not emit a CallVirt to it, use Call.
19820
19821         * typemanager.cs (GetFullNameSignature): Improve the method to
19822         cope with ".ctor" and replace it with the type name.
19823
19824         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19825         as an argument the ConstructorBuilder where it is being defined,
19826         to catch the recursive constructor invocations.
19827
19828 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19829
19830         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19831         routines to check if a type is an enumerable/enumerator allow
19832         classes that implement the IEnumerable or IEnumerator interfaces.
19833
19834         * class.cs (Property, Operator): Implement IIteratorContainer, and
19835         implement SetYields.
19836
19837         (Property.Define): Do the block swapping for get_methods in the
19838         context of iterators.   We need to check if Properties also
19839         include indexers or not.
19840
19841         (Operator): Assign the Block before invoking the
19842         OperatorMethod.Define, so we can trigger the Iterator code
19843         replacement. 
19844
19845         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19846         Property and Operator classes are not created when we parse the
19847         declarator but until we have the block completed, so we use a
19848         singleton SimpleIteratorContainer.Simple to flag whether the
19849         SetYields has been invoked.
19850
19851         We propagate this setting then to the Property or the Operator to
19852         allow the `yield' to function.
19853
19854 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19855
19856         * codegen.cs: Implemented attribute support for modules.
19857         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19858         Assembly/Module functionality.
19859
19860         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19861         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19862         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19863
19864 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19865
19866         * interface.cs (FindMembers): The operation is performed on all base
19867         interfaces and not only on the first. It is required for future CLS Compliance patch.
19868
19869 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19870
19871         * statement.cs, codegen.cs:
19872         This patch deals with patterns such as:
19873
19874         public class List : IEnumerable {
19875
19876                 public MyEnumerator GetEnumerator () {
19877                         return new MyEnumerator(this);
19878                 }
19879
19880                 IEnumerator IEnumerable.GetEnumerator () {
19881                         ...
19882                 }
19883                 
19884                 public struct MyEnumerator : IEnumerator {
19885                         ...
19886                 }
19887         }
19888
19889         Before, there were a few things we did wrong:
19890         1) we would emit callvirt on a struct, which is illegal
19891         2) we emited ldarg when we needed to emit ldarga
19892         3) we would mistakenly call the interface methods on an enumerator
19893         type that derived from IEnumerator and was in another assembly. For example:
19894
19895         public class MyEnumerator : IEnumerator
19896
19897         Would have the interface methods called, even if there were public impls of the
19898         method. In a struct, this lead to invalid IL code.
19899
19900 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19901
19902         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19903           renamed to Emit.
19904
19905         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19906
19907 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19908
19909         * cs-parser.jay: Fix small regression: we were not testing V2
19910         compiler features correctly.
19911
19912         * interface.cs: If the emit context is null, then create one
19913
19914 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19915
19916         * decl.cs (GetSignatureForError): New virtual method to get full name
19917           for error messages.
19918
19919         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19920           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19921
19922         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19923           Duplicated members and code in these classes has been removed.
19924           Better encapsulation in these classes.
19925
19926 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19927
19928         * assign.cs (Assign.DoResolve): When dealing with compound
19929         assignments, there is a new rule in ECMA C# 2.4 (might have been
19930         there before, but it is documented here) that states that in:
19931
19932         a op= b;
19933
19934         If b is of type int, and the `op' is a shift-operator, then the
19935         above is evaluated as:
19936
19937         a = (int) a op b 
19938
19939         * expression.cs (Binary.ResolveOperator): Instead of testing for
19940         int/uint/long/ulong, try to implicitly convert to any of those
19941         types and use that in pointer arithmetic.
19942
19943         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19944         method to print information for from the type, not from the
19945         null-method we were given.
19946
19947 2004-02-01  Duncan Mak  <duncan@ximian.com>
19948
19949         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19950         parsing for cmd, fixes bug #53694.
19951
19952 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19953
19954         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19955         in the member name duplication tests. Property and operator name duplication
19956         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19957
19958 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19959
19960         * interface.cs (PopulateMethod): Fixed crash when interface method
19961         returns not existing type (error test cs0246-3.cs).
19962
19963 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19964
19965         * cs-parser.jay (interface_accessors): Re-write actions to also
19966         store attributes attached to get and set methods. Fix spelling
19967         while at it.
19968
19969         (inteface_property_declaration): Modify accordingly.
19970
19971         (InterfaceAccessorInfo): New helper class to store information to pass
19972         around between rules that use interface_accessors.
19973
19974         * interface.cs (Emit): Apply attributes on the get and set
19975         accessors of properties and indexers too.
19976
19977         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19978         right MethodBuilder when applying attributes to the get and set accessors.
19979
19980 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19981
19982         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19983
19984 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19985
19986         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19987
19988 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19989
19990         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19991         changes that treat `yield' specially when present before `break'
19992         or `return' tokens.
19993
19994         * cs-tokenizer.cs: yield is no longer a keyword.
19995
19996 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19997
19998         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19999         setting for default constructors.
20000         For default constructors are almost every time set wrong Modifier. The
20001         generated IL code has been alright. But inside mcs this values was
20002         wrong and this was reason why several of my CLS Compliance tests
20003         failed.
20004
20005 2004-01-22  Martin Baulig  <martin@ximian.com>
20006
20007         * cs-parser.jay (namespace_or_type_name): Return an Expression,
20008         not a QualifiedIdentifier.  This is what `type_name_expression'
20009         was previously doing.
20010         (type_name_expression): Removed; the code is now in
20011         `namespace_or_type_name'.
20012         (qualified_identifier): Removed, use `namespace_or_type_name'
20013         instead.
20014         (QualifiedIdentifier): Removed this class.      
20015
20016 2004-01-22  Martin Baulig  <martin@ximian.com>
20017
20018         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
20019         not a string as alias name.
20020
20021 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
20022
20023         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
20024         #52730 bug, and instead compute correctly the need to use a
20025         temporary variable when requesting an address based on the
20026         static/instace modified of the field and the constructor.
20027  
20028 2004-01-21  Martin Baulig  <martin@ximian.com>
20029
20030         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
20031         class and namespace before looking up aliases.  Fixes #52517.
20032
20033 2004-01-21  Martin Baulig  <martin@ximian.com>
20034
20035         * flowanalysis.cs (UsageVector.Merge): Allow variables being
20036         assinged in a 'try'; fixes exception4.cs.
20037
20038 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20039         * class.cs : Implemented parameter-less constructor for TypeContainer
20040
20041         * decl.cs: Attributes are now stored here. New property OptAttributes
20042
20043         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
20044
20045         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
20046
20047 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20048
20049         * typemanager.cs (CSharpSignature): Now reports also inner class name.
20050           (CSharpSignature): New method for indexer and property signature.
20051
20052 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20053
20054         * pending.cs (IsVirtualFilter): Faster implementation.
20055
20056 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20057
20058         * typemanager.cs: Avoid inclusion of same assembly more than once.
20059
20060 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20061
20062         * cs-parser.jay: Fixed problem where the last assembly attribute
20063           has been applied also to following declaration (class, struct, etc.)
20064           
20065 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20066
20067         * class.cs: Added error CS0538, CS0539 reporting.
20068         Fixed crash on Microsoft runtime when field type is void.
20069
20070         * cs-parser.jay: Added error CS0537 reporting.
20071
20072         * pending.cs: Added error CS0535 reporting.
20073         Improved error report for errors CS0536, CS0534.
20074
20075 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
20076
20077         Merge a few bits from the Anonymous Method MCS tree.
20078
20079         * statement.cs (ToplevelBlock): New class for toplevel methods,
20080         will hold anonymous methods, lifted variables.
20081
20082         * cs-parser.jay: Create toplevel blocks for delegates and for
20083         regular blocks of code. 
20084
20085 2004-01-20  Martin Baulig  <martin@ximian.com>
20086
20087         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
20088         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
20089         and `NeedExplicitReturn'; added `IsLastStatement'.
20090         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
20091         have a `ReturnLabel' or we're not unreachable.
20092
20093         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
20094         child's reachability; don't just override ours with it.  Fixes
20095         #58058 (lluis's example).
20096         (FlowBranching): Added public InTryOrCatch(), InCatch(),
20097         InFinally(), InLoop(), InSwitch() and
20098         BreakCrossesTryCatchBoundary() methods.
20099
20100         * statement.cs (Return): Do all error checking in Resolve().
20101         Unless we are the last statement in a top-level block, always
20102         create a return label and jump to it.
20103         (Break, Continue): Do all error checking in Resolve(); also make
20104         sure we aren't leaving a `finally'.
20105         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
20106         statement in a top-level block.
20107         (Block.Flags): Added `IsDestructor'.
20108         (Block.IsDestructor): New public property.
20109
20110 2004-01-20  Martin Baulig  <martin@ximian.com>
20111
20112         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
20113
20114 2004-01-20  Martin Baulig  <martin@ximian.com>
20115
20116         * statement.cs (Statement.ResolveUnreachable): New public method.
20117         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
20118         (Block.Resolve): Resolve unreachable statements.
20119
20120 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20121
20122         * expression.cs: We need to fix the case where we do
20123         not have a temp variable here.
20124
20125         * assign.cs: Only expression compound assignments need
20126         temporary variables.
20127
20128 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20129
20130         * flowanalysis.cs: Reduce memory allocation in a few ways:
20131           - A block with no variables should not allocate a bit
20132             vector for itself.
20133           - A method with no out parameters does not need any tracking
20134             for assignment of the parameters, so we need not allocate
20135             any data for it.
20136           - The arrays:
20137                 public readonly Type[] VariableTypes;
20138                 public readonly string[] VariableNames;
20139             Are redundant. The data is already stored in the variable
20140             map, so we need not allocate another array for it.
20141           - We need to add alot of checks for if (params | locals) == null
20142             due to the first two changes.
20143
20144 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
20145
20146         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
20147         implement IMemoryLocation, we store a copy on a local variable and
20148         take the address of it.  Patch from Benjamin Jemlich
20149
20150         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
20151         to use a special "type_name_expression" rule which reduces the
20152         number of "QualifiedIdentifier" classes created, and instead
20153         directly creates MemberAccess expressions.
20154
20155 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
20156
20157         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
20158         that fixes #52853.  Null literal assignment to ValueType
20159
20160         * class.cs (MethodData.Emit): Instead of checking the name of the
20161         method to determine if its a destructor, create a new derived
20162         class from Method called Destructor, and test for that.  
20163
20164         * cs-parser.jay: Create a Destructor object instead of a Method.  
20165
20166         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
20167
20168         Fixes: 52933
20169
20170 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
20171
20172         * expression.cs (Binary.ResolveOperator): Perform an implicit
20173         conversion from MethodGroups to their delegate types on the
20174         Addition operation.
20175
20176         * delegate.cs: Introduce a new class DelegateCreation that is the
20177         base class for `NewDelegate' and `ImplicitDelegateCreation',
20178         factor some code in here.
20179
20180         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
20181         conversion from MethodGroups to compatible delegate types. 
20182
20183         * ecore.cs (Expression.Resolve): Do not flag error 654
20184         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
20185         we allow conversions from MethodGroups to delegate types now.
20186
20187         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20188         assignments in v2 either.
20189
20190 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20191
20192         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20193         static read-only fields in ctors.
20194
20195         Applied patch from Benjamin Jemlich 
20196
20197         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20198
20199 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20200
20201         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20202         here to return true, as they can be used like this:
20203
20204                 (XXX) int.MEMBER ()
20205
20206         Fixed 49836 and all the other dups
20207
20208 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20209
20210         * driver.cs: Implement /win32res and /win32icon.
20211
20212 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20213
20214         * cs-parser.jay: Add a rule to improve error handling for the
20215         common mistake of placing modifiers after the type.
20216
20217 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20218
20219         * cs-parser.jay (interface_event_declaration): Catch
20220         initialization of events on interfaces, and report cs0068
20221
20222         * cs-parser.jay (interface_event_declaration): Catch
20223         initialization of events. 
20224
20225         * ecore.cs: Better report missing constructors.
20226
20227         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20228         the error reporting done in the wrong place.  Fix.
20229
20230         * expression.cs (Binary.ResolveOperator): Catch the 
20231         operator + (E x, E y) error earlier, and later allow for implicit
20232         conversions in operator +/- (E e, U x) from U to the underlying
20233         type of E.
20234
20235         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20236         52596, if the container class is abstract, the default constructor
20237         is protected otherwise its public (before, we were always public).
20238
20239         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20240         fixed statement.
20241
20242         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20243         Jemlich that fixes bug #52597, MCS was generating invalid code for
20244         idisposable structs.   Thanks to Ben for following up with this
20245         bug as well.
20246
20247 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20248
20249         * driver.cs: Allow assemblies without code to be generated, fixes
20250         52230.
20251
20252 2004-01-07  Nick Drochak <ndrochak@gol.com>
20253
20254         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20255
20256 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20257
20258         * cs-parser.jay: Add rules to improve error reporting if fields or
20259         methods are declared at the namespace level (error 116)
20260
20261         * Add rules to catch event add/remove
20262
20263 2004-01-04  David Sheldon <dave-mono@earth.li>
20264
20265   * expression.cs: Added matching ")" to error message for 
20266   CS0077
20267
20268 2004-01-03 Todd Berman <tberman@gentoo.org>
20269
20270         * ecore.cs, attribute.cs:
20271         Applying fix from #52429.
20272
20273 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20274
20275         * ecore.cs, expression.cs, statement.cs:
20276         Total rewrite of how we handle branching. We
20277         now handle complex boolean expressions with fewer
20278         jumps. As well if (x == 0) no longer emits a ceq.
20279
20280         if (x is Foo) is much faster now, because we generate
20281         better code.
20282
20283         Overall, we get a pretty big improvement on our benchmark
20284         tests. The code we generate is smaller and more readable.
20285
20286         I did a full two-stage bootstrap. The patch was reviewed
20287         by Martin and Miguel.
20288
20289 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20290
20291         * cs-parser.jay: Make primary_expression not take a QI.
20292         we dont need this because the member_access rule covers
20293         us here. So we replace the rule with just IDENTIFIER.
20294
20295         This has two good effects. First, we remove a s/r conflict.
20296         Second, we allocate many fewer QualifiedIdentifier objects.
20297
20298 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20299
20300         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20301         set the correct information via SRE. This prevents
20302         hanging on the MS runtime. Fixes #29374.
20303
20304 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20305
20306         * convert.cs: correctly handle conversions to value types
20307         from Enum and ValueType as unboxing conversions.
20308
20309         Fixes bug #52569. Patch by Benjamin Jemlich.
20310
20311 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20312
20313         * expression.cs (BetterConversion): Prefer int -> uint
20314         over int -> ulong (csc's behaviour). This fixed bug #52046.
20315
20316 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20317
20318         * decl.cs (MemberCache.FindMembers): now returns a
20319         MemberInfo [].
20320
20321         * typemanager.cs: In general, go with with ^^.
20322         (CopyNewMethods): take an IList.
20323         (RealMemberLookup): Only allocate an arraylist
20324         if we copy from two sets of methods.
20325
20326         This change basically does two things:
20327         1) Fewer array lists allocated due to CopyNewMethods.
20328         2) the explicit cast in MemberList costed ALOT.
20329
20330 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20331
20332         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20333         a hashtable to avoid needless string allocations when an identifier is
20334         used more than once (the common case).
20335
20336 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20337
20338         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20339         is broken, it will not return anything. So, we
20340         have to use the information we have in mcs to
20341         do the task.
20342
20343         * typemanager.cs: Add a cache for GetInterfaces,
20344         since this will now be used more often (due to ^^)
20345
20346         (GetExplicitInterfaces) New method that gets the
20347         declared, not effective, interfaces on a type
20348         builder (eg, if you have interface IFoo, interface
20349         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20350         { IBar }.
20351
20352         This patch makes MCS able to bootstrap itself on
20353         Windows again.
20354
20355 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20356
20357         * expression.cs: Remove the Nop's that Miguel put
20358         in by mistake.
20359
20360 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20361
20362         * report.cs, codegen.cs: Give the real stack trace to
20363         the error when an exception is thrown.
20364
20365 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20366
20367         * decl.cs: only allocate hashtables for ifaces if 
20368         it is an iface!
20369
20370 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20371
20372         * expression.cs: fix the error from cs0121-2.cs
20373         (a parent interface has two child interfaces that
20374         have a function with the same name and 0 params
20375         and the function is called through the parent).
20376
20377 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20378
20379         * class.cs, rootcontext.cs, typmanager.cs: do not
20380         leak pointers.
20381
20382 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20383
20384         * codegen.cs: remove stack for the ec flow branching.
20385         It is already a linked list, so no need.
20386
20387 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20388
20389         * Makefile: Allow custom profiler here.
20390
20391 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20392
20393         * typemanager.cs (LookupType):
20394           - Use a static char [], because split takes
20395             a param array for args, so it was allocating
20396             every time.
20397           - Do not store true in a hashtable, it boxes.
20398
20399 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20400
20401         * flowanalysis.cs: bytify common enums.
20402
20403 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20404
20405         * modifiers.cs: Add a new set of flags for the
20406         flags allowed on explicit interface impls.
20407         * cs-parser.jay: catch the use of modifiers in
20408         interfaces correctly.
20409         * class.cs: catch private void IFoo.Blah ().
20410
20411         All related to bug #50572.
20412
20413 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20414
20415         * decl.cs: Rewrite the consistant accessability checking.
20416         Accessability is not linear, it must be implemented in
20417         a tableish way. Fixes #49704.
20418
20419 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20420
20421         * expression.cs: Handle negation in a checked context.
20422         We must use subtraction from zero. Fixes #38674.
20423
20424 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20425
20426         * class.cs: Ignore static void main in DLLs.
20427         * rootcontext.cs: Handle the target type here,
20428         since we are have to access it from class.cs
20429         * driver.cs: account for the above.
20430
20431 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20432
20433         * report.cs: Give line numbers and files if available.
20434
20435 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20436
20437         * driver.cs: Implement /addmodule.
20438
20439         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20440         ModuleBuilders.
20441
20442 2003-12-20  Martin Baulig  <martin@ximian.com>
20443
20444         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20445         (FieldBase.IsAssigned): Removed this field.
20446         (FieldBase.SetAssigned): New public method.
20447         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20448
20449 2003-12-20  Martin Baulig  <martin@ximian.com>
20450
20451         * expression.cs (LocalVariableReference.DoResolve): Don't set
20452         `vi.Used' if we're called from DoResolveLValue().
20453
20454         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20455         returns the usage vector it just merged into the current one -
20456         pass this one to UsageWarning().
20457         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20458         of the `EmitContext', don't call this recursively on our children.
20459
20460 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20461
20462         * driver.cs: Implement /target:module.
20463
20464 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20465
20466         * support.cs (CharArrayHashtable): New helper class.
20467
20468         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20469         char arrays, not strings, so we can avoid creating a string in
20470         consume_identifier if the identifier is a keyword.
20471
20472 2003-12-16  Martin Baulig  <martin@ximian.com>
20473
20474         * statement.cs (LocalInfo.Assigned): Removed this property.
20475         (LocalInfo.Flags): Removed `Assigned'.
20476         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20477         and uses flow analysis.
20478         (Block.UsageWarning): Made this method private.
20479         (Block.Resolve): Call UsageWarning() if appropriate.
20480
20481         * expression.cs (LocalVariableReference.DoResolve): Always set
20482         LocalInfo.Used here.
20483
20484 2003-12-13  Martin Baulig  <martin@ximian.com>
20485
20486         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20487         any value here; we're now using flow analysis to figure out
20488         whether a statement/block returns a value.
20489
20490 2003-12-13  Martin Baulig  <martin@ximian.com>
20491
20492         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20493         working again.
20494         (FlowBranching.MergeFinally): Don't call
20495         `branching.CheckOutParameters()' here, this is called in
20496         MergeTopBlock().
20497         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20498         when adding the `finally' vector.       
20499
20500 2003-12-13  Martin Baulig  <martin@ximian.com>
20501
20502         * flowanalysis.cs
20503         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20504         actually work and also fix #48962.
20505
20506 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20507
20508         * decl.cs: Do not check System.Object for nested types,
20509         since we know it does not have any. Big bang for buck:
20510
20511         BEFORE:
20512            Run 1:   8.35 seconds
20513            Run 2:   8.32 seconds
20514            corlib:  17.99 seconds
20515         AFTER:
20516            Run 1:   8.17 seconds
20517            Run 2:   8.17 seconds
20518            corlib:  17.39 seconds
20519
20520 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20521
20522         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20523         time we are returning 0 members, so we save alot here.
20524
20525 2003-12-11  Martin Baulig  <martin@ximian.com>
20526
20527         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20528         `MergeChild()', also just take the `FlowBranching' as argument;
20529         call Merge() on it and return the result.
20530         (FlowBranching.Merge): We don't need to do anything if we just
20531         have one sibling.
20532
20533 2003-12-11  Martin Baulig  <martin@ximian.com>
20534
20535         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20536         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20537         Maurer for this idea.
20538
20539 2003-12-11  Martin Baulig  <martin@ximian.com>
20540
20541         * flowanalysis.cs (MergeResult): This class is now gone; we now
20542         use the `UsageVector' for this.  The reason for this is that if a
20543         branching just has one sibling, we don't need to "merge" them at
20544         all - that's the next step to do.
20545         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20546         `MergeResult'.
20547
20548 2003-12-11  Martin Baulig  <martin@ximian.com>
20549
20550         Reworked flow analyis and made it more precise and bug-free.  The
20551         most important change is that we're now using a special `Reachability'
20552         class instead of having "magic" meanings of `FlowReturns'.  I'll
20553         do some more cleanups and optimizations and also add some more
20554         documentation this week.
20555
20556         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20557         largely reworked this class.
20558         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20559         the new `Reachability' class instead of having "magic" values here.
20560         (FlowBranching): We're now using an instance of `Reachability'
20561         instead of having separate `Returns', `Breaks' etc. fields.
20562
20563         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20564         based on flow analysis; ignore the return value of block.Emit ().
20565
20566 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20567
20568         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20569         if they are private.
20570
20571 2003-12-09  Martin Baulig  <martin@ximian.com>
20572
20573         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20574         call them directly on the UsageVector.
20575
20576 2003-12-09  Martin Baulig  <martin@ximian.com>
20577
20578         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20579         Changed return type from `FlowReturns' to `Reachability'.
20580
20581 2003-12-09  Martin Baulig  <martin@ximian.com>
20582
20583         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20584         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20585         `Reachable' fields with a single `Reachability' one.
20586
20587 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20588
20589         * class.cs (FindMembers): Remove foreach's.
20590
20591         Bootstrap times:
20592
20593         BEFORE
20594                 Run 1:   8.74 seconds
20595                 Run 2:   8.71 seconds
20596
20597         AFTER
20598                 Run 1:   8.64 seconds
20599                 Run 2:   8.58 seconds
20600
20601
20602 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20603
20604         * cs-parser.jay:
20605         * gen-treedump.cs:
20606         * statement.cs:
20607         This patch does a few things:
20608                 1. EmptyStatement is now a singleton, so it is never reallocated.
20609                 2. All blah is EmptyStatement constructs have been changed to
20610                    blah == EmptyStatement.Value, which is much faster and valid
20611                    now that EmptyStatement is a singleton.
20612                 3. When resolving a block, rather than allocating a new array for
20613                    the non-empty statements, empty statements are replaced with
20614                    EmptyStatement.Value
20615                 4. Some recursive functions have been made non-recursive.
20616         Mainly the performance impact is from (3), however (1) and (2) are needed for
20617         this to work. (4) does not make a big difference in normal situations, however
20618         it makes the profile look saner.
20619
20620         Bootstrap times:
20621
20622         BEFORE
20623         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20624         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20625         Total memory allocated: 56397 KB
20626
20627         AFTER
20628         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20629         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20630         Total memory allocated: 55666 KB
20631
20632 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20633
20634         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20635         than the hashtable in a hashtable version
20636
20637         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20638         we always end up concating a string. This results in a huge perf
20639         loss, because many strings have to be tracked by the GC. In this
20640         patch, we first use a hashtable that works with two keys, so that
20641         the strings do not need to be concat'ed.
20642
20643         Bootstrap times:
20644         BEFORE
20645                 Run 1:   8.74 seconds
20646                 Run 2:   8.71 seconds
20647
20648         AFTER
20649                 Run 1:   8.65 seconds
20650                 Run 2:   8.56 seconds
20651
20652 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20653
20654         * Makefile: Add a new target `do-time' that does a quick and simple
20655         profile, leaving easy to parse output.
20656
20657 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20658
20659         * codegen.cs (Init): Create the dynamic assembly with 
20660         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20661
20662 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20663
20664         * support.cs: Make the PtrHashtable use only one
20665         instance of its comparer.
20666
20667 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20668
20669         * typemanager.cs: Fix lookup of GetNamespaces.
20670
20671 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20672
20673         * expression.cs: Removed redundant line.
20674
20675         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20676         ArrayLists, use for loops with bounds.  
20677
20678         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20679         arraylist.
20680
20681         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20682         arraylists, use for loop with bounds.
20683
20684         The above three changes give us a 0.071 second performance
20685         improvement out of 3.294 seconds down to 3.223.  On my machine
20686         the above changes reduced the memory usage by 1,387 KB during
20687         compiler bootstrap.
20688
20689         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20690         QualifiedIdentifiers.  Before we created a new string through
20691         concatenation, and mostly later on, the result would be
20692         manipulated by DecomposeQI through string manipulation.
20693
20694         This reduced the compiler memory usage for bootstrapping from
20695         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20696         compile times in 0.05 seconds.
20697
20698 2003-11-28  Dick Porter  <dick@ximian.com>
20699
20700         * support.cs: Do string compares with the Invariant culture.
20701
20702         * rootcontext.cs: 
20703         * gen-treedump.cs: 
20704         * expression.cs: 
20705         * driver.cs: 
20706         * decl.cs: 
20707         * codegen.cs: 
20708         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20709         the comparison is done with the Invariant culture.
20710
20711 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20712
20713         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20714         GetEnumerator method.
20715
20716         (ProbeCollectionType): Iterate starting at the most specific type
20717         upwards looking for a GetEnumerator
20718
20719         * expression.cs: Shift count can be up to 31 for int/uint and 63
20720         for long/ulong.
20721
20722 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20723
20724         * statement.cs (Block.LookupLabel): Also look for the label on the
20725         children blocks.  Use a hash table to keep track of visited
20726         nodes. 
20727
20728         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20729         we actually did transform the other operand, otherwise fall back
20730         to the common codepath that casts to long.
20731
20732         * cs-tokenizer.cs: Use the same code pattern as the int case.
20733         Maybe I should do the parsing myself, and avoid depending on the
20734         Parse routines to get this done.
20735
20736 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20737
20738         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20739         which fixes bug 51347.  This time test it.
20740
20741         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20742         attributes for example can not tell the difference between these.
20743         The difference was only a syntax feature of the language. 
20744
20745         * attribute.cs: Apply attributes to delegates.
20746
20747         * delegate.cs: Call the apply attributes method.
20748
20749 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20750
20751         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20752         comparing 0 vs Byte.MinValue, not the value
20753
20754         (ImplicitConversionRequired): When reporting a conversion error,
20755         use error 31 to print out the constant error instead of the
20756         simpler 29.
20757
20758         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20759         which fixes bug 51347.
20760
20761 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20762
20763         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20764         which fixes the -warnaserror command line option.
20765
20766 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20767
20768         * cfold.cs (DoNumericPromotions): During constant folding of
20769         additions on UIntConstant, special case intconstants with
20770         IntConstants like we do on the expression binary operator. 
20771
20772 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20773
20774         * convert.cs (ImplicitReferenceConversion): We were missing a case
20775         (System.Enum are not value types or class types, so we need to
20776         classify them separatedly).
20777
20778         * driver.cs: We do not support error 2007.
20779
20780 2003-11-12 Jackson Harper <jackson@ximian.com>
20781
20782         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20783         system directory. Also use the full file name so users can
20784         libraries names mscorlib-o-tron.dll in a non system dir.
20785
20786 2003-11-10  Martin Baulig  <martin@ximian.com>
20787
20788         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20789         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20790         calling `ResolveType()' on them, directly assign their `Type'.
20791
20792 2003-11-08  Martin Baulig  <martin@ximian.com>
20793
20794         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20795         return value and the `out parent' parameter.
20796         (TypeContainer.DefineType): Moved the CS0644 check into
20797         GetClassBases().  Don't pass the interface types to the
20798         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20799         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20800
20801         * ecore.cs (TypeExpr.IsAttribute): New property.
20802         (TypeExpr.GetInterfaces): New method.
20803
20804         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20805         TypeExpr instead of a Type.
20806         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20807         (Interface.DefineType): Don't pass the interface types to the
20808         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20809         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20810
20811         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20812         instead of a `Type[]'.
20813         (TypeManager.RegisterBuilder): Likewise.
20814         (TypeManager.AddUserInterface): Likewise.
20815         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20816         `Type[]' and also return a `TypeExpr[]'.
20817         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20818
20819 2003-11-08  Martin Baulig  <martin@ximian.com>
20820
20821         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20822         Expression.     
20823
20824 2003-11-08  Martin Baulig  <martin@ximian.com>
20825
20826         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20827         TypeManager.ResolveExpressionTypes().
20828
20829         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20830         instead of an Expression.
20831         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20832         (TypeExpression): New public class; formerly known as `TypeExpr'.
20833
20834         * expression.cs (ComposedCast): Derive from TypeExpr.
20835
20836         * typemanager.cs (TypeManager.system_*_expr): These are now
20837         TypExpr's instead of Expression's.
20838         (TypeManager.ResolveExpressionTypes): New public static function;
20839         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20840         of them.        
20841
20842 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20843
20844         * expression.cs (New.DoResolve): Do not dereference value that
20845         might be a null return.
20846
20847         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20848         sure that the constant value has the right type.  Fixes an
20849         unreported bug, similar to 50425.
20850
20851         * const.cs (Const.LookupConstantValue): Call
20852         ImplicitStandardConversionExists before doing a conversion to
20853         avoid havng the TypeManager.ChangeType do conversions.
20854
20855         Reduced the number of casts used
20856
20857         (Const.ChangeType): New routine to enable reuse of the constant
20858         type changing code from statement.
20859
20860         * typemanager.cs (ChangeType): Move common initialization to
20861         static global variables.
20862
20863         Fixes #50425.
20864
20865         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20866         every value type to go through, even if it was void.  Fix that. 
20867
20868         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20869         character of the define, and the is_identifier_part_character for
20870         the rest of the string.
20871
20872 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20873
20874         * expression.cs (UnaryMutator.EmitCode): When I updated
20875         LocalVariableReference.DoResolve, I overdid it, and dropped an
20876         optimization done on local variable references.
20877
20878 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20879
20880         * ecore.cs: Convert the return from Ldlen into an int.
20881
20882 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20883
20884         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20885         the accessibility, this is a special case for toplevel non-public
20886         classes (internal for instance).
20887
20888 2003-10-20  Nick Drochak <ndrochak@gol.com>
20889
20890         * ecore.cs: Fix typo and build.  Needed another right paren.
20891
20892 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20893
20894         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20895         `internal' case regular and protected, but not allowing protected
20896         to be evaluated later.  Bug 49840
20897
20898 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20899
20900         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20901         to kb.Nlast, and not the kb.nFirst to isolate the switch
20902         statement.
20903
20904         Extract the underlying type, so enumerations of long/ulong are
20905         treated like long/ulong.
20906
20907 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20908
20909         * expression.cs (New): Overload the meaning of RequestedType to
20910         track the possible creation of the NewDelegate type, since
20911         DoResolve is invoked more than once for new constructors on field
20912         initialization.
20913
20914         See bugs: #48800 and #37014
20915
20916         * cs-parser.jay (declare_local_constants): Take an arraylist
20917         instead of a single constant.
20918
20919         (local_constant_declaration): It should take a
20920         constant_declarators, not a constant_declarator.  Fixes 49487
20921
20922         * convert.cs: Fix error report.
20923
20924 2003-10-13 Jackson Harper <jackson@ximian.com>
20925
20926         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20927         bug #49611
20928
20929 2003-10-09  Martin Baulig  <martin@ximian.com>
20930
20931         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20932         to the .ctor.
20933         (MethodCore.DoDefineParameters): Removed the TypeContainer
20934         argument; use the DeclSpace which was passed to the .ctor instead.
20935         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20936         TypeContainer; we only need a DeclSpace here.
20937
20938 2003-10-09  Martin Baulig  <martin@ximian.com>
20939
20940         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20941         to the .ctor.
20942         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20943         EmitContext's .ctor.    
20944
20945 2003-10-09  Martin Baulig  <martin@ximian.com>
20946
20947         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20948         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20949         AsAccessible(), moved them as well.
20950
20951         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20952
20953 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20954
20955         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20956
20957 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20958
20959         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20960         generation for >=, as spotted by Paolo, bug 48679.  
20961         Patch from David Waite.
20962
20963         * cs-tokenizer.cs: Add handling for #pragma.
20964
20965         * cs-parser.jay: Allow for both yield and yield return in the
20966         syntax.  The anti-cobolization of C# fight will go on!
20967
20968         * class.cs (TypeBuilder.DefineType): Catch error condition here
20969         (Parent.DefineType erroring out and returning null).
20970
20971         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20972         coping with enumerations variables, we were mistakenly processing
20973         them as a regular value type instead of built-in types.  Fixes the
20974         bug #48063
20975
20976         * typemanager.cs (IsBuiltinOrEnum): New method.
20977
20978 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20979
20980         * cs-parser.jay: Upgrade: yield now needs the return clause.
20981
20982 2003-09-19  Martin Baulig  <martin@ximian.com>
20983
20984         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20985         `MemberCache parent' argument.  Normally, an interface doesn't
20986         have a parent type except System.Object, but we use this in gmcs
20987         for generic type parameters.
20988
20989 2003-09-18  Martin Baulig  <martin@ximian.com>
20990
20991         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20992         on `type.IsInterface'; don't check whether the type has a parent
20993         to determine whether it's an interface.
20994
20995 2003-09-15  Martin Baulig  <martin@ximian.com>
20996
20997         * class.cs (TypeContainer.DefineType): Added an error flag to
20998         avoid reporting duplicate CS0146's ("class definition is
20999         circular.").
21000
21001         * driver.cs (Driver.MainDriver): Abort if
21002         RootContext.ResolveTree() reported any errors.
21003
21004 2003-09-07  Martin Baulig  <martin@ximian.com>
21005
21006         * report.cs (Error, Warning): Added overloaded versions which take
21007         a `params object[] args' and call String.Format().
21008
21009 2003-09-07  Martin Baulig  <martin@ximian.com>
21010
21011         * decl.cs (DeclSpace..ctor): Don't call
21012         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
21013         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
21014         (DeclSpace.RecordDecl): New method.
21015
21016         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
21017
21018 2003-09-02  Ravi Pratap  <ravi@ximian.com>
21019
21020         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
21021         value attributes to be applied to ParameterBuilders.
21022
21023         * class.cs (MethodCore.LabelParameters): Make static and more
21024         generic so that it can be used from other places - like interface
21025         methods, for instance.
21026
21027         * interface.cs (Interface.Emit): Call LabelParameters before
21028         emitting attributes on the InterfaceMethod.
21029
21030 2003-08-26  Martin Baulig  <martin@ximian.com>
21031
21032         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
21033         resolving aliases; fixes #47927.
21034
21035 2003-08-26  Martin Baulig  <martin@ximian.com>
21036
21037         * statement.cs (Using.DoResolve): This is internally emitting a
21038         try/finally clause, so we need to set ec.NeedExplicitReturn if we
21039         do not always return.  Fixes #47681.
21040
21041 2003-08-26  Martin Baulig  <martin@ximian.com>
21042
21043         * decl.cs (MemberCore): Moved WarningNotHiding(),
21044         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
21045         into MemberBase.
21046         (AdditionResult): Make this nested in DeclSpace.
21047         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
21048         argument; call NamespaceEntry.Define() unless we're nested in a
21049         class or struct.
21050
21051         * namespace.cs (Namespace.DefineName): New public function.  This
21052         is called from DeclSpace's .ctor to add 
21053         (Namespace.Lookup): Include DeclSpaces in the lookup.
21054
21055         * class.cs (Operator): Derive from MemberBase, not MemberCore.
21056
21057         * const.cs (Const): Derive from MemberBase, not MemberCore.     
21058
21059 2003-08-25  Martin Baulig  <martin@ximian.com>
21060
21061         * convert.cs (Convert.ExplicitReferenceConversion): When
21062         converting from an interface type to a class, unbox if the target
21063         type is a struct type.  Fixes #47822.
21064
21065 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21066
21067         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
21068         #47854.
21069
21070 2003-08-22  Martin Baulig  <martin@ximian.com>
21071
21072         * class.cs (TypeManager.DefineType): When defining a nested type,
21073         call DefineType() on our parent; fixes #47801.
21074
21075 2003-08-22  Martin Baulig  <martin@ximian.com>
21076
21077         * class.cs (MethodData.Define): While checking if a method is an
21078         interface implementation, improve the test a bit more to fix #47654.
21079
21080 2003-08-22  Martin Baulig  <martin@ximian.com>
21081
21082         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
21083         correctly; fixes #47722.
21084
21085 2003-08-22  Martin Baulig  <martin@ximian.com>
21086
21087         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
21088         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
21089
21090         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
21091
21092 2003-08-22  Martin Baulig  <martin@ximian.com>
21093
21094         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
21095         can only be assigned in static constructors.  Fixes #47161.
21096
21097 2003-08-22  Martin Baulig  <martin@ximian.com>
21098
21099         Rewrote and improved the flow analysis code.
21100
21101         * flowbranching.cs (FlowBranching): Make this class abstract.
21102         (FlowBranching.CreateBranching): New static function to create a
21103         new flow branching.
21104         (FlowBranchingBlock, FlowBranchingException): New classes.
21105         (FlowBranching.UsageVector.Type): New public readonly field.
21106         (FlowBranching.UsageVector.Breaks): Removed the setter.
21107         (FlowBranching.UsageVector.Returns): Removed the setter.
21108         (FlowBranching.UsageVector): Added Break(), Return(),
21109         NeverReachable() and Throw() methods to modify the reachability.
21110         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
21111         done by FlowBranching.Merge().
21112         (FlowBranching.UsageVector.MergeChild): New method; merges the
21113         merge result into the current vector.
21114         (FlowBranching.Merge): New abstract method to merge a branching.
21115
21116 2003-08-12  Martin Baulig  <martin@ximian.com>
21117
21118         * expression.cs (Indirection.CacheTemporaries): Create the
21119         LocalTemporary with the pointer type, not its element type.
21120
21121 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
21122
21123         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
21124         token was a keyword or not.
21125
21126         Add `error' options where an IDENTIFIER was expected;  Provide
21127         CheckToken and CheckIdentifierToken convenience error reporting
21128         functions. 
21129
21130         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
21131
21132         * decl.cs: Rename `NamespaceEntry Namespace' public field into
21133         NameSpaceEntry NameSpaceEntry.
21134
21135         (LookupInterfaceOrClass): Avoid creating a full qualified name
21136         from namespace and name: avoid doing lookups when we know the
21137         namespace is non-existant.   Use new Tree.LookupByNamespace which
21138         looks up DeclSpaces based on their namespace, name pair.
21139
21140         * driver.cs: Provide a new `parser verbose' to display the
21141         exception thrown during parsing.  This is turned off by default
21142         now, so the output of a failure from mcs is more graceful.
21143
21144         * namespace.cs: Track all the namespaces defined in a hashtable
21145         for quick lookup.
21146
21147         (IsNamespace): New method
21148
21149 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
21150
21151         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
21152         we know that we need to concatenate (full typename can never be
21153         null). 
21154
21155         * class.cs: ditto.
21156
21157         * statement.cs: Use a bitfield;  Do not initialize to null things
21158         which are done by the constructor by default.
21159
21160         * cs-parser.jay: bug fix, parameter was 4, not 3.
21161
21162         * expression.cs: Just use the property;
21163
21164         * statement.cs: No need for GetVariableInfo method.
21165
21166 2003-08-08  Martin Baulig  <martin@ximian.com>
21167
21168         * flowanalysis.cs (FlowReturns): This is now nested in the
21169         `FlowBranching' class.
21170         (MyBitVector): Moved this here from statement.cs.
21171         (FlowBranching.SiblingType): New enum type.
21172         (FlowBranching.CreateSibling): Added `SiblingType' argument.
21173
21174 2003-08-07  Martin Baulig  <martin@ximian.com>
21175
21176         * flowanalysis.cs (FlowBranchingType): This is now nested in the
21177         `FlowBranching' class and called `BranchingType'.
21178
21179 2003-08-07  Martin Baulig  <martin@ximian.com>
21180
21181         * flowanalysis.cs: Moved all the control flow analysis code into
21182         its own file.
21183
21184 2003-08-07  Martin Baulig  <martin@ximian.com>
21185
21186         * assign.cs (Assign.DoResolve): `target' must either be an
21187         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21188         #37319.
21189
21190 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21191
21192         * expression.cs (BinaryMethod): This kind of expression is created by the
21193         Binary class if it determines that the operator has to be handled
21194         by a method.
21195
21196         (BinaryDelegate): This kind of expression is created if we are
21197         dealing with a + or - operator on delegates.
21198
21199         (Binary): remove method, argumetns, and DelegateOperator: when
21200         dealing with methods, 
21201
21202         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21203
21204         * statement.cs (Block): use bitfields for the three extra booleans
21205         we had in use.   Remove unused topblock parameter.
21206
21207         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21208
21209         * assign.cs: Drop extra unneeded tests.
21210
21211 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21212
21213         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21214
21215         * statement.cs (Foreach): Use VariableStorage instead of
21216         LocalBuilders.   
21217
21218         * codegen.cs (VariableStorage): New class used by clients that
21219         require a variable stored: locals or fields for variables that
21220         need to live across yield.
21221
21222         Maybe provide a convenience api for EmitThis+EmitLoad?
21223
21224         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21225         these bad boys.
21226
21227 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21228
21229         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21230         RemapParameterLValue): New methods that are used to turn a
21231         precomputed FieldInfo into an expression like this:
21232
21233                 instance.FieldInfo
21234
21235         The idea is to use this instead of making LocalVariableReference
21236         have more than one meaning.
21237
21238         * cs-parser.jay: Add error production to BASE.
21239
21240         * ecore.cs: Deal with TypeManager.GetField returning null, which
21241         is now a valid return value.
21242
21243         (FieldExprNoAddress): New expression for Fields whose address can
21244         not be taken.
21245
21246         * expression.cs (LocalVariableReference): During the resolve
21247         phases, create new expressions if we are in a remapping context.
21248         Remove code that dealt with remapping here.
21249
21250         (ParameterReference): same.
21251
21252         (ProxyInstance): New expression, like the `This' expression, but
21253         it is born fully resolved.  We know what we are doing, so remove
21254         the errors that are targeted to user-provided uses of `this'.
21255
21256         * statement.cs (Foreach): our variable is now stored as an
21257         Expression;  During resolution, follow the protocol, dont just
21258         assume it will return this.
21259
21260 2003-08-06  Martin Baulig  <martin@ximian.com>
21261
21262         * support.cs (SeekableStreamReader.cs): New public class.
21263
21264         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21265         SeekableStreamReader instead of the normal StreamReader.
21266
21267 2003-08-04  Martin Baulig  <martin@ximian.com>
21268
21269         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21270         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21271         deambiguate casts and delegate invocations.
21272         (parenthesized_expression): Use the new tokens to ensure this is
21273         not a cast of method invocation.
21274
21275         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21276         when reading a `)' and Deambiguate_CloseParens () was previously
21277         called.
21278
21279         * expression.cs (ParenthesizedExpression): New class.  This is
21280         just used for the CS0075 test.
21281         (Binary.DoResolve): Check for CS0075.   
21282
21283 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21284
21285         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21286         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21287         reference comparison.
21288
21289         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21290         examine the ReturnType for equality - this is necessary in the
21291         cases of implicit and explicit operators whose signature also
21292         includes the return type.
21293
21294 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21295
21296         * namespace.cs: Cache the result of the namespace computation,
21297         instead of computing it every time.
21298
21299 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21300
21301         * decl.cs: Use a global arraylist that we reuse over invocations
21302         to avoid excesive memory consumption.  Reduces memory usage on an
21303         mcs compile by one meg (45 average).
21304
21305         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21306         private, work around that.
21307
21308 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21309
21310         * literal.cs (IntLiteral): Define Zero and One static literals. 
21311
21312         * cs-parser.jay (integer_literal): use static literals to reduce
21313         memory usage for the most used literals (0, 1 and -1).  211kb
21314         reduced in memory usage.
21315
21316         Replace all calls to `new ArrayList' with `new
21317         ArrayList(4)' which is a good average number for most allocations,
21318         and also requires only 16 bytes of memory for its buffer by
21319         default. 
21320
21321         This reduced MCS memory usage in seven megabytes for the RSS after
21322         bootstrapping.
21323
21324 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21325
21326         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21327         handle params methods the correct way by forming only one
21328         applicable set with params and normal methods in them. Earlier we
21329         were looking at params methods only if we found no normal methods
21330         which was not the correct thing to do.
21331
21332         (Invocation.BetterFunction): Take separate arguments indicating
21333         when candidate and the best method are params methods in their
21334         expanded form.
21335
21336         This fixes bugs #43367 and #46199.
21337
21338         * attribute.cs: Documentation updates.
21339
21340         (CheckAttribute): Rename to CheckAttributeTarget.
21341         (GetValidPlaces): Rename to GetValidTargets.
21342
21343         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21344         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21345
21346         Fixes bug #44468.
21347
21348 2003-07-28  Martin Baulig  <martin@ximian.com>
21349
21350         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21351         name when looking up the base class of a nested class.  Fixes #46977.
21352
21353 2003-07-26  Martin Baulig  <martin@ximian.com>
21354
21355         * expression.cs (Indexers.Indexer): New nested struct; contains
21356         getter, setter and the indexer's type.
21357         (Indexers.Properties): This is now an ArrayList of
21358         Indexers.Indexer's.
21359         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21360         indexer doesn't have any getters.
21361
21362         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21363         for embedded property and indexer assignments.
21364
21365 2003-07-26  Martin Baulig  <martin@ximian.com>
21366
21367         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21368         preprocessor directive is not the first non-whitespace character
21369         on a line.
21370
21371 2003-07-26  Martin Baulig  <martin@ximian.com>
21372
21373         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21374         namespace parsing, follow the spec more closely.
21375
21376         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21377         NamespaceEntry.Lookup().
21378
21379 2003-07-25  Martin Baulig  <martin@ximian.com>
21380
21381         * MethodCore.cs (OverridesSomething): New public field; it's set
21382         from TypeContainer.DefineMembers if this method overrides
21383         something (which doesn't need to be a method).  Fix #39462.
21384
21385 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21386
21387         * typemanager.cs (GetMembers): Ensure that the list of members is
21388         reversed. This keeps things in sync.
21389
21390         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21391         find an AttributeUsage attribute.
21392
21393         * expression.cs (Invocation.OverloadResolve): Perform the check
21394         which disallows Invoke to be directly called on a Delegate.
21395
21396         (Error_InvokeOnDelegate): Report error cs1533.
21397
21398 2003-07-25  Martin Baulig  <martin@ximian.com>
21399
21400         * expression.cs (Indexers.GetIndexersForType): Only look in the
21401         interface hierarchy if the requested type is already an
21402         interface.  Fixes #46788 while keeping #46502 fixed.
21403
21404 2003-07-25  Martin Baulig  <martin@ximian.com>
21405
21406         * class.cs (TypeContainer.DefineMembers): Check whether all
21407         readonly fields have been assigned and report warning CS0649 if
21408         not.
21409
21410         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21411         a valuetype.
21412
21413 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21414
21415         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21416         returned from GetMethods to make things consistent with the
21417         assumptions MCS makes about ordering of methods.
21418
21419         This should comprehensively fix bug #45127 and it does :-)
21420
21421         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21422         ordering is actually reverse.
21423
21424         * Clean up some debug messages I left lying around.
21425
21426         * interface.cs (Populate*): Get rid of code which emits attributes
21427         since the stage in which we emit attributes is the 'Emit' stage,
21428         not the define stage.
21429
21430         (Emit): Move attribute emission for interface members here.
21431
21432 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21433
21434         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21435         closely: we eliminate methods in base types when we have an
21436         applicable method in a top-level type.
21437
21438         Please see section 14.5.5.1 for an exact description of what goes
21439         on. 
21440
21441         This fixes bug #45127 and a host of other related to corlib compilation.
21442
21443         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21444         array is the method corresponding to the top-level type (this is
21445         because of the changes made to icall.c) so we change this
21446         accordingly.
21447
21448         (MethodGroupExpr.Name): This too.
21449
21450         * typemanager.cs (GetElementType): New method which does the right
21451         thing when compiling corlib. 
21452
21453         * everywhere: Make use of the above in the relevant places.
21454
21455 2003-07-22  Martin Baulig  <martin@ximian.com>
21456
21457         * cs-parser.jay (invocation_expression): Moved
21458         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21459         `cast_expression', but create a InvocationOrCast which later
21460         resolves to either an Invocation or a Cast.
21461
21462         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21463         method; call this before EmitStatement() to make sure that this
21464         expression can be used as a statement.
21465
21466         * expression.cs (InvocationOrCast): New class; resolves to either
21467         an Invocation or a Cast.
21468
21469         * statement.cs (StatementExpression): Call ResolveStatement() on
21470         the ExpressionStatement before emitting it.
21471
21472 2003-07-21  Martin Baulig  <martin@ximian.com>
21473
21474         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21475         `ref' and `out' attributes match; fixes #46220.
21476         (MemberAccess.ResolveMemberAccess): You can't reference a type
21477         through an expression; fixes #33180.
21478         (Indexers.GetIndexersForType): Don't return the indexers from
21479         interfaces the class implements; fixes #46502.
21480
21481 2003-07-21  Martin Baulig  <martin@ximian.com>
21482
21483         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21484         CS0661 checks; fixes bug #30442.
21485
21486 2003-07-21  Martin Baulig  <martin@ximian.com>
21487
21488         * decl.cs (AdditionResult): Added `Error'.
21489
21490         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21491
21492         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21493         makes cs0031.cs actually work.
21494
21495 2003-07-20  Martin Baulig  <martin@ximian.com>
21496
21497         * namespace.cs: Fixed that bug which caused a crash when compiling
21498         the debugger's GUI.
21499
21500 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21501
21502         * typemanager.cs (LookupTypeReflection): Never expose types which
21503         are NotPublic, NestedPrivate, NestedAssembly, or
21504         NestedFamANDAssem.  We used to return these, and later do a check
21505         that would report a meaningful error, but the problem is that we
21506         would not get the real match, if there was a name override.
21507
21508 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21509
21510         * namespace.cs (Namespace, Name): Do not compute the namespace
21511         name dynamically, compute it in the constructor.  This reduced
21512         memory usage by 1697 KB.
21513
21514         * driver.cs: Use --pause to pause at the end.
21515
21516 2003-07-17  Peter Williams  <peter@newton.cx>
21517
21518         * Makefile: Change the name of the test target so that it doesn't
21519         conflict with the recursive test target.
21520
21521 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21522
21523         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21524         AddressOf): Do not use EmitThis, that was wrong, use the actual
21525         this pointer.
21526
21527 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21528
21529         * class.cs (MethodData.Define): While checking if a method is an
21530         interface implementation, improve the test: If we are not public
21531         (use new test here: use the computed MethodAttributes directly,
21532         instead of the parsed modifier flags) check if the `implementing'
21533         method comes from an interface or not.
21534
21535         * pending.cs (VerifyPendingMethods): Slightly better error
21536         message.
21537
21538         * makefile: add test target that does the mcs bootstrap.
21539
21540 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21541
21542         * interface.cs (Define): Do nothing here since there are no
21543         members to populate etc. Move the attribute emission out of here
21544         since this was just totally the wrong place to put it. Attribute
21545         application happens during the 'Emit' phase, not in the 'Define'
21546         phase.
21547
21548         (Emit): Add this method and move the attribute emission here
21549
21550         * rootcontext.cs (EmitCode): Call the Emit method on interface
21551         types too.
21552
21553 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21554
21555         * expression.cs (OverloadResolve): Report error only if Location
21556         is not 'Null' which means that there was a probe going on.
21557
21558 2003-07-14  Martin Baulig  <martin@ximian.com>
21559
21560         * expression.cs (ConditionalLogicalOperator): New public class to
21561         implement user defined conditional logical operators.
21562         This is section 14.11.2 in the spec and bug #40505.
21563
21564 2003-07-14  Martin Baulig  <martin@ximian.com>
21565
21566         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21567
21568 2003-07-14  Martin Baulig  <martin@ximian.com>
21569
21570         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21571
21572         * ecore.cs (IVariable.VerifyFixed): New interface method.
21573
21574         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21575         operator, check whether the variable is actually fixed.  Fixes bug
21576         #36055.  Set a variable definitely assigned when taking its
21577         address as required by the spec.
21578
21579         * statement.cs (LocalInfo.IsFixed): New field.
21580         (LocalInfo.MakePinned): Set `IsFixed' to true.
21581
21582 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21583
21584         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21585         for .ctors, ensure that we only ask for members declared in the
21586         attribute type (BindingFlags.DeclaredOnly).
21587
21588         Fixes bug #43632.
21589
21590         * expression.cs (Error_WrongNumArguments): Report error 1501
21591         correctly the way CSC does.
21592
21593 2003-07-13  Martin Baulig  <martin@ximian.com>
21594
21595         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21596         lookup on the fully qualified name, to make things like "X.X" work
21597         where "X.X" is a fully qualified type name, but we also have a
21598         namespace "X" in the using list.  Fixes #41975.
21599
21600 2003-07-13  Martin Baulig  <martin@ximian.com>
21601
21602         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21603         function. If we're a CompoundAssign, we need to create an embedded
21604         CompoundAssign, not an embedded Assign.
21605         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21606         Fixes #45854.
21607
21608 2003-07-13  Martin Baulig  <martin@ximian.com>
21609
21610         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21611         work to fix bug #46088.
21612
21613 2003-07-13  Ravi Pratap <ravi@ximian.com>
21614
21615         * class.cs (Operator.Emit): Do not emit attributes here - it is
21616         taken care of by the Method class that we delegate too. This takes
21617         care of bug #45876.
21618
21619 2003-07-10  Martin Baulig  <martin@ximian.com>
21620
21621         * expression.cs (TypeOfVoid): New class.
21622         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21623
21624 2003-07-10  Martin Baulig  <martin@ximian.com>
21625
21626         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21627         bug #35957.
21628
21629 2003-07-10  Martin Baulig  <martin@ximian.com>
21630
21631         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21632         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21633
21634         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21635
21636         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21637
21638 2003-07-10  Martin Baulig  <martin@ximian.com>
21639
21640         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21641         of decimal.  Fixes #42850.
21642
21643         NOTE: I also fixed the created byte blob, but this doesn't work on
21644         the MS runtime and csc never produces any byte blobs for decimal
21645         arrays.
21646
21647 2003-07-10  Martin Baulig  <martin@ximian.com>
21648
21649         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21650         structs; fixes #32068.
21651         (Block.AddChildVariableNames): Fixed #44302.
21652
21653 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21654
21655         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21656
21657 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21658
21659         * attribute.cs: And this test is onger needed.
21660
21661 2003-07-08  Martin Baulig  <martin@ximian.com>
21662
21663         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21664         inaccessible types.  Fixes #36313.
21665
21666         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21667
21668         * namespace.cs (NamespaceEntry): Create implicit entries for all
21669         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21670         implicit entries for N1.N2 and N1.
21671
21672 2003-07-08  Martin Baulig  <martin@ximian.com>
21673
21674         Rewrote the handling of namespaces to fix a lot of the issues
21675         wrt. `using' aliases etc.
21676
21677         * namespace.cs (Namespace): Splitted this class into a
21678         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21679
21680         * typemanager.cs (TypeManager.IsNamespace): Removed.
21681         (TypeManager.ComputeNamespaces): Only compute namespaces from
21682         loaded assemblies here, not the namespaces from the assembly we're
21683         currently compiling.
21684
21685 2003-07-08  Martin Baulig  <martin@ximian.com>
21686
21687         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21688
21689 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21690
21691         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21692         already fixed it.  
21693
21694         I thought about the memory savings here, but LookupTypeReflection
21695         is used under already very constrained scenarios.  Compiling
21696         corlib or mcs only exposes one hit, so it would not really reduce
21697         any memory consumption.
21698
21699 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21700
21701         * typemanager.cs: fixes bug #45889 by only adding public types from
21702         other assemblies to the list of known types.
21703
21704 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21705
21706         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21707         on the type we resolved.
21708
21709 2003-07-05  Martin Baulig  <martin@ximian.com>
21710
21711         * pending.cs (PendingImplementation.ParentImplements): Don't
21712         create the proxy if the parent is abstract.
21713
21714         * class.cs (TypeContainer.DefineIndexers): Process explicit
21715         interface implementations first.  Fixes #37714.
21716
21717 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21718
21719         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21720         defined recursively;  but since we modify the input parameters
21721         (left is set to `this' temporarily), we reset this value if the
21722         left_is_explicit is false, which gives the original semantics to
21723         the code.  
21724
21725         * literal.cs (NullPointer): new class used to represent a null
21726         literal in a pointer context.
21727
21728         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21729         type is a pointer, use a NullPointer object instead of a
21730         NullLiteral.   Closes 43687
21731
21732         (ExplicitConversion): Convert pointer values using
21733         the conv opcode to the proper type.
21734
21735         * ecore.cs (New): change ValueTypeVariable property into a method,
21736         that returns whether the valuetype is suitable for being used.
21737
21738         * expression.cs (Binary.DoNumericPromotions): Only return if we
21739         the int constant was a valid uint, and we can return both left and
21740         right as uints.  If not, we continue processing, to trigger the
21741         type conversion.  This fixes 39018.
21742
21743         * statement.cs (Block.EmitMeta): During constant resolution, set
21744         the CurrentBlock property on the emitcontext, so that we resolve
21745         constants propertly.
21746
21747 2003-07-02  Martin Baulig  <martin@ximian.com>
21748
21749         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21750         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21751
21752         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21753         than emitting it here.
21754
21755         * statement.cs: Fixed some more flow analysis bugs.
21756
21757 2003-07-02  Martin Baulig  <martin@ximian.com>
21758
21759         * class.cs (MethodData.Define): When implementing interface
21760         methods, set Final unless we're Virtual.
21761
21762         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21763         check work for interface methods.
21764
21765 2003-07-01  Martin Baulig  <martin@ximian.com>
21766
21767         * ecore.cs (EmitContext.This): Replaced this property with a
21768         GetThis() method which takes a Location argument.  This ensures
21769         that we get the correct error location for a CS0188.
21770
21771 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21772
21773         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21774         ImplicitStandardConversion.
21775
21776         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21777
21778 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21779
21780         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21781         optimization.
21782
21783 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21784
21785         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21786         constructors.
21787
21788         (MethodData.Define): Turn off initlocals for unsafe methods.
21789
21790 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21791
21792         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21793         complete;  Fixes #37521.
21794
21795         * delegate.cs: Use Modifiers.TypeAttr to compute the
21796         TypeAttributes, instead of rolling our own.  This makes the flags
21797         correct for the delegates.
21798
21799 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21800
21801         * class.cs (Constructor.Define): Set the private flag for static
21802         constructors as well.
21803
21804         * cs-parser.jay (statement_expression): Set the return value to
21805         null, to avoid a crash when we catch an error.
21806
21807 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21808
21809         * cs-parser.jay: Applied patch from Jackson that adds support for
21810         extern and unsafe modifiers to destructor declarations.
21811
21812         * expression.cs: Report error 21 if the user is trying to index a
21813         System.Array.
21814
21815         * driver.cs: Add an error message, suggested by the bug report.
21816
21817         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21818         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21819
21820 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21821
21822         * namespace.cs: Add some information to reduce FAQs.
21823
21824 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21825
21826         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21827         underlying enumeration types.  Fixes #43915.
21828
21829         * expression.cs: Treat ushort/short as legal values to be used in
21830         bitwise operations.
21831
21832 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21833
21834         * delegate.cs: transfer custom attributes for paramenters from
21835         the delegate declaration to Invoke and BeginInvoke.
21836
21837 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21838
21839         * attribute.cs: handle custom marshalers and emit marshal info
21840         for fields, too.
21841
21842 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21843
21844         * makefile.gnu: Added anonymous.cs to the compiler sources.
21845
21846 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21847
21848         * iterators.cs: Change the name of the proxy class to include two
21849         underscores.
21850
21851         * cs-parser.jay: Update grammar to include anonymous methods.
21852
21853         * anonymous.cs: new file.
21854
21855 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21856
21857         * class.cs (Field.Define): Add missing test for pointers and
21858         safety. 
21859
21860 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21861
21862         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21863         we use the stobj opcode.
21864
21865         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21866         since it wasn't the correct fix. 
21867
21868         It still is puzzling that we are required to use stobj for IntPtr
21869         which seems to be a ValueType.
21870
21871 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21872
21873         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21874         during regular simple name resolution.   Now, the trick is that
21875         instead of returning for processing the simplename, we do a
21876         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21877         contextual lookup type).   If a match is found, return that, if
21878         not, return for further composition.
21879
21880         This fixes long-standing 30485.
21881
21882         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21883         using the address to initialize an object, do an Stobj instead of
21884         using the regular Stelem.
21885
21886         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21887         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21888         Because if we are a BaseIndexerAccess that value will be true.
21889         Fixes 43643.
21890
21891         * statement.cs (GotoCase.Resolve): Return after reporting an
21892         error, do not attempt to continue. 
21893
21894         * expression.cs (PointerArithmetic.Emit): If our operand is a
21895         long, convert our constants to match the operand before
21896         multiplying.  Convert to I type before adding.   Fixes 43670.
21897
21898 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21899
21900         * enum.cs (ImplicitConversionExists) : Rename to
21901         ImplicitEnumConversionExists to remove ambiguity. 
21902
21903         * ecore.cs (NullCast): New type of cast expression class which
21904         basically is very similar to EmptyCast with the difference being
21905         it still is a constant since it is used only to cast a null to
21906         something else
21907         (eg. (string) null)
21908
21909         * convert.cs (ImplicitReferenceConversion): When casting a null
21910         literal, we return a NullCast.
21911
21912         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21913         should be around anymore.
21914
21915         The renaming (reported was slightly wrong). Corrections:
21916
21917         ConvertImplicitStandard -> ImplicitConversionStandard
21918         ConvertExplicitStandard -> ExplicitConversionStandard
21919
21920         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21921         before passing them in !
21922
21923         * convert.cs (ImplicitConversionStandard): When comparing for
21924         equal expr and target types, ensure that expr is not a
21925         NullLiteral.
21926
21927         In general, we must not be checking (expr_type ==
21928         target_type) in the top level conversion methods
21929         (ImplicitConversion, ExplicitConversion etc). This checking is
21930         done in the methods that they delegate to.
21931
21932 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21933
21934         * convert.cs: Move Error_CannotConvertType,
21935         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21936         ImplicitNumericConversion, ImplicitConversionExists,
21937         ImplicitUserConversionExists, StandardConversionExists,
21938         FindMostEncompassedType, FindMostSpecificSource,
21939         FindMostSpecificTarget, ImplicitUserConversion,
21940         ExplicitUserConversion, GetConversionOperators,
21941         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21942         TryImplicitIntConversion, Error_CannotConvertImplicit,
21943         ConvertImplicitRequired, ConvertNumericExplicit,
21944         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21945         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21946         its own file.
21947
21948         Perform the following renames:
21949
21950         StandardConversionExists -> ImplicitStandardConversionExists
21951         ConvertImplicit -> ImplicitConversion
21952         ConvertImplicitStandard -> ImplicitStandardConversion
21953         TryImplicitIntConversion -> ImplicitIntConversion
21954         ConvertImplicitRequired -> ImplicitConversionRequired
21955         ConvertNumericExplicit -> ExplicitNumericConversion
21956         ConvertReferenceExplicit -> ExplicitReferenceConversion
21957         ConvertExplicit -> ExplicitConversion
21958         ConvertExplicitStandard -> ExplicitStandardConversion
21959
21960 2003-05-19  Martin Baulig  <martin@ximian.com>
21961
21962         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21963         (TypeInfo): Added support for structs having structs as fields.
21964
21965         * ecore.cs (FieldExpr): Implement IVariable.
21966         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21967         VariableInfo for the field.
21968
21969 2003-05-18  Martin Baulig  <martin@ximian.com>
21970
21971         * expression.cs (This.DoResolve): Report a CS0027 if we're
21972         emitting a field initializer.
21973
21974 2003-05-18  Martin Baulig  <martin@ximian.com>
21975
21976         * expression.cs (This.ResolveBase): New public function.
21977         (This.DoResolve): Check for CS0188.
21978
21979         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21980         This.Resolve().
21981
21982         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21983         `instance_expression' to null if we don't have any non-static
21984         methods.
21985
21986 2003-05-18  Martin Baulig  <martin@ximian.com>
21987
21988         Reworked the way how local variables and parameters are handled by
21989         the flow analysis code.
21990
21991         * statement.cs (TypeInfo, VariableMap): New public classes.
21992         (VariableInfo): New public class.  This is now responsible for
21993         checking whether a variable has been assigned.  It is used for
21994         parameters and local variables.
21995         (Block.EmitMeta): Take the InternalParameters as argument; compute
21996         the layout of the flow vectors here.
21997         (Block.LocalMap, Block.ParameterMap): New public properties.
21998         (FlowBranching): The .ctor doesn't get the InternalParameters
21999         anymore since Block.EmitMeta() now computes the layout of the flow
22000         vector.
22001         (MyStructInfo): This class is now known as `StructInfo' and nested
22002         in `TypeInfo'; we don't access this directly anymore.
22003
22004         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
22005         property and removed IsAssigned(), IsFieldAssigned(),
22006         SetAssigned() and SetFieldAssigned(); we now call them on the
22007         VariableInfo so we don't need to duplicate this code everywhere.
22008
22009         * expression.cs (ParameterReference): Added `Block block' argument
22010         to the .ctor.
22011         (LocalVariableReference, ParameterReference, This): The new
22012         VariableInfo class is now responsible for all the definite
22013         assignment stuff.
22014
22015         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
22016         IsParameterAssigned, SetParameterAssigned): Removed.
22017
22018 2003-05-18  Martin Baulig  <martin@ximian.com>
22019
22020         * typemanager.cs (InitCoreTypes): Try calling
22021         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
22022         the 3-args-version.  Corlib now also needs our `void_type'.
22023         (GetMethod): Added overloaded version which takes an optional
22024         `bool report_errors' to allow lookups of optional methods.
22025
22026 2003-05-12  Martin Baulig  <martin@ximian.com>
22027
22028         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
22029         only used for locals and not for parameters.
22030
22031 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
22032
22033         * support.cs (InternalParameters.ParameterType): Return the
22034         ExternalType of the parameter.
22035
22036         * parameter.cs (Parameter.ExternalType): drop the two arguments,
22037         they were unused.
22038
22039 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
22040
22041         * class.cs (MethodData.Define): Do not set the `newslot' on
22042         interface members, if they are also flagged as "override".
22043
22044         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
22045         better code for ++i and i++.  This only works for static fields
22046         and local variables.
22047
22048         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
22049         want to pull the DeclSpace out of the builder_to_declspace instead
22050         of the TypeBuilder (like in TypeContainer.FindMembers).
22051
22052         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
22053         instead of LookupTypeContainer.  Fixes the crash on .NET for
22054         looking up interface members.
22055
22056         * const.cs: Create our own emit context during the Definition
22057         stage, so that constants are evaluated in the proper context, when
22058         a recursive definition happens.
22059
22060 2003-05-11  Martin Baulig  <martin@ximian.com>
22061
22062         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
22063         new block for a switch section.
22064         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
22065         the adding/lookup in the switch block.  Fixes #39828.
22066
22067 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
22068
22069         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
22070         functionality: I needed to convert the data after I had performed
22071         the add/sub operation into the operands type size.
22072
22073         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
22074         pass the type for the box operation, otherwise the resulting
22075         object would have been of type object.
22076
22077         (BoxedCast): Add constructor to specify the type to box as.
22078
22079 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
22080
22081         * iterators.cs: I was reusing the `count' variable inadvertently,
22082         take steps to not allow this to happen.
22083
22084 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
22085
22086         * attribute.cs (Attribute.Resolve): Params attributes are encoded
22087         by creating an array at the point where the params starts and
22088         putting all those arguments there, then adjusting the size of the
22089         array.
22090
22091 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
22092
22093         * expression.cs (New.AddressOf): Implement interface
22094         IMemoryLocation.  This is used when the `new' operator is used in
22095         the context of an invocation to a method on a value type.
22096
22097         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
22098         example. 
22099
22100         * namespace.cs: Also check the using aliases here.
22101
22102         * driver.cs: Move the test for using validity after the types have
22103         been entered, so we do a single pass that also includes the using
22104         aliases. 
22105
22106         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
22107         in the regular case.   CreateSiblingForFinally is doing extra
22108         error checking.
22109
22110         * attribute.cs (GetAttributeArgumentExpression): Store the result
22111         on an out value, and use the return value to indicate failure
22112         instead of using null (which is a valid return for Constant.GetValue).
22113
22114         * statement.cs: Perform the analysis flow for the increment
22115         portion after the statement, because this will be the real flow of
22116         execution.  Fixes #42385
22117
22118         * codegen.cs (EmitContext.EmitArgument,
22119         EmitContext.EmitStoreArgument): New helper functions when the
22120         RemapToProxy flag is set.
22121
22122         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
22123         function.
22124
22125         Add support for remapping parameters. 
22126
22127         * iterators.cs: Propagate parameter values;  Store parameter
22128         values in the proxy classes.
22129
22130 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
22131
22132         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
22133         need a proxy reference;  I do not know what I was thinking
22134
22135         * cs-parser.jay (constructor_initializer): catch another error,
22136         and display nice message.
22137
22138         (field_declaration): catch void field declaration
22139         to flag a better error. 
22140
22141         * class.cs (MemberBase.CheckBase): Report an error instead of a
22142         warning if a new protected member is declared in a struct. 
22143         (Field.Define): catch the error of readonly/volatile.
22144
22145         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
22146
22147         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
22148         volatile variable is taken
22149
22150 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
22151
22152         * statement.cs (Fixed.Resolve): Report an error if we are not in
22153         an unsafe context.
22154
22155 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
22156
22157         * typemanager.cs: reuse the code that handles type clashes for
22158         delegates and enumerations.
22159
22160         * class.cs (Report28): Always report.
22161
22162         * expression.cs (EncodeAsAttribute): Allow nulls here.
22163
22164 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
22165
22166         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
22167         the functionality for testing whether an expression is valid for
22168         an attribute here.  Also handle the case of arrays of elements
22169         being stored. 
22170
22171         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
22172         encoding a linear array into an array of objects that are suitable
22173         to be passed to an CustomAttributeBuilder.
22174
22175         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
22176
22177         * ecore.cs: (FieldExpr): Handle field remapping here.
22178
22179         * iteratators.cs: Pass the instance variable (if the method is an
22180         instance method) to the constructors, so we can access the field
22181         variables on the class.
22182
22183         TODO: Test this with structs.  I think the THIS variable on
22184         structs might have to be a pointer, and not a refenrece
22185
22186 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22187
22188         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22189         local variables to fields in a proxy class.
22190
22191         * iterators.cs (PopulateProxy): Rename our internal fields to
22192         <XXX>.  
22193         Create a <THIS> field if we are an instance method, so we can
22194         reference our parent container variables.
22195         (MapVariable): Called back from the EmitContext code to enter a
22196         new variable to field mapping into the proxy class (we just create
22197         a FieldBuilder).
22198
22199         * expression.cs
22200         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22201         for using the remapped locals to fields.
22202
22203         I placed the code here, because that gives the same semantics to
22204         local variables, and only changes the Emit code.
22205
22206         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22207         statements inside iterators.
22208         (VariableInfo): Add a FieldBuilder for the cases when we are
22209         remapping local variables to fields in a proxy class
22210
22211         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22212         current_block != null.
22213
22214         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22215         not cope with strings, as it has been moved to the
22216         TableSwitchEmit.  Fixed bug in switch generation.
22217
22218         * expression.cs (New.DoResolve): Provide more context for the user
22219         when reporting an error.
22220
22221         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22222         pointers. 
22223
22224         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22225         check the permissions for it.  Note than in a type-resolution
22226         context the check was already present in DeclSpace.ResolveType,
22227         but was missing from the MemberAccess.
22228
22229         (ArrayCreation.CheckIndices): warn if the user has
22230         more nested levels of expressions, but there are no more
22231         dimensions specified.  Avoids crash on bug 41906.
22232
22233 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22234
22235         * statement.cs (Block): replace Implicit bool, for a generic
22236         flags.   
22237         New flag: `Unchecked'.  This is used during the EmitMeta phase
22238         (which is out-of-line with the regular Resolve/Emit process for a
22239         statement, as this is done ahead of time, but still gets a chance
22240         to call constant resolve).
22241
22242         (Block.Flags): new enum for adding a new flag.
22243
22244         (Block.EmitMeta): track the state of unchecked.
22245
22246         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22247         to enable constant resolution to work there as well.
22248
22249 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22250
22251         * typemanager.cs (ienumerable_type): Also look up
22252         System.Collections.IEnumerable. 
22253
22254 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22255
22256         TODO: Test more than one conditional per method.
22257
22258         * class.cs (Indexer.Define): Report the location where the user is
22259         referencing the unsupported feature.
22260
22261         (MethodData): Overload the use of `conditionals' to
22262         minimize the creation of needless ArrayLists.   This saves roughly
22263         212kb on my machine.
22264
22265         (Method): Implement the new IIteratorContainer interface.
22266         (Method.SetYields): Implement the method by setting the ModFlags
22267         to contain METHOD_YIELDS.
22268
22269         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22270         which just got set to null.
22271
22272         * iterators.cs: New file.
22273
22274         (Yield, YieldBreak): New statements.
22275
22276         * statement.cs (Return.Resolve): Flag an error if we are used in
22277         an iterator method.
22278
22279         * codegen.cs (InIterator): New flag set if the code is being
22280         compiled in an iterator method.
22281
22282         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22283         internal modifier, and we just use it to avoid adding extra
22284         fields, as this is seldom used.  
22285
22286         * cs-parser.jay: Add yield_statement (yield and yield break).
22287
22288         * driver.cs: New flag -v2 to turn on version 2 features. 
22289
22290         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22291         hashtable when v2 is enabled.
22292
22293 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22294
22295         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22296         there is already a namespace defined with this name.
22297
22298         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22299         people upgraded their corlibs.
22300
22301         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22302         always use fully qualified types, no need to use the compiler
22303         front end.
22304
22305         (TypeManager.IsNamespace): Use binarysearch.
22306
22307         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22308         AddDelegate): I did not quite use the new IsValid API properly: I
22309         have to pass the short-name and the fullname.  I was passing only
22310         the basename instead of the fullname sometimes. 
22311
22312         (TypeContainer.DefineType): call NamespaceClash.
22313
22314         * interface.cs (Interface.DefineType): use NamespaceClash before
22315         defining the type.
22316
22317         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22318         defining the type.
22319
22320         * enum.cs: (Enum.DefineType): use NamespaceClash before
22321         defining the type.
22322
22323         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22324         speed increase.  First, use the negative_hits cache when we get a
22325         negative.  Second, add the type with its full original name
22326         instead of the new . and + encoded name (reflection uses + to
22327         separate type from a nested type).  Use LookupTypeReflection
22328         directly which bypasses the type->name hashtable (that we already
22329         know does not contain the type.
22330
22331         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22332         location/container type. 
22333
22334         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22335
22336 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22337
22338         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22339
22340         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22341         method is being referenced in the method group from a static
22342         context, and report error 120 if so.
22343
22344         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22345         Error118. 
22346
22347         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22348         is created, we create the A namespace).
22349
22350         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22351         Fixes #41591
22352
22353 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22354
22355         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22356         invocation to ModuleBuilder.GetType with the same values will
22357         return a new type instance, so we need to cache its return
22358         values. 
22359
22360         * expression.cs (Binary.ResolveOperator): Only allow the compare
22361         operators on enums if they are of the same type.
22362
22363         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22364         types of ValueType on their own case.  Before we were giving them
22365         the same treatment as objects.
22366
22367         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22368         fullname.  Short name is used to compare against container name.
22369         Fullname is used to check against defined namespace names.
22370
22371         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22372         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22373
22374         (Method.CheckBase): Call parent.
22375         (MemberBase.CheckBase): Check for protected members on sealed
22376         classes.
22377         (PropertyBase.CheckBase): Call parent.
22378         (Field.Define): Call parent.
22379
22380         * report.cs: Negative error codes are now mapped to 8000 - code,
22381         so that the display is render more nicely.
22382
22383         * typemanager.cs: Do not use try/catch, instead report a regular
22384         error. 
22385
22386         (GetPointerType, GetReferenceType): These methods provide
22387         mechanisms to obtain the T* and T& from a T.  We had the code
22388         previously scattered around the code base, and it also used
22389         TypeManager.LookupType that would go through plenty of caches.
22390         This one goes directly to the type source.
22391
22392         In some places we did the Type.GetType followed by
22393         ModuleBuilder.GetType, but not in others, so this unifies the
22394         processing as well.
22395
22396         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22397         statements now that we have namespace information.
22398
22399         * typemanager.cs (IsNamespace): New method, returns whether the
22400         string presented is a namespace or not.
22401
22402         (ComputeNamespaces): New public entry point, computes the list of
22403         available namespaces, using the GetNamespaces API call in Mono, or
22404         the slower version in MS.NET.   
22405
22406         Now before we start the semantic analysis phase, we have a
22407         complete list of namespaces including everything that the user has
22408         provided.
22409
22410         Deleted old code to cache namespaces in .nsc files.
22411
22412 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22413
22414         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22415         class/struct location definition Location for the implicit
22416         constructor location.
22417
22418         (Operator.Define): Use the location of the operator for the
22419         implicit Method definition.
22420
22421         (Constructor.Emit): use the constructor location for the implicit
22422         base initializer constructor.
22423
22424         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22425         and the Expression class now contains two new methods:
22426
22427         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22428         isolate type lookup from the rest of the resolution process.
22429
22430         Since we use Expressions to hold type definitions due to the way
22431         we parse the input we have historically overloaded Resolve to
22432         perform the Type lookups if a special flag is passed.  Now this is
22433         eliminated and two methods take their place. 
22434
22435         The differences in the two methods between xStep and xTerminal is
22436         that xStep is involved in our current lookup system that uses
22437         SimpleNames to compose a name, while xTerminal is used just to
22438         catch the case where the simplename lookup failed.
22439
22440 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22441
22442         * expression.cs (ResolveMemberAccess): Remove redundant code.
22443         TypeExpr expressions are always born fully resolved.
22444
22445         * interface.cs (PopulateMethod): Do not lookup the types twice.
22446         We were doing it once during SemanticAnalysis and once during
22447         PopulateMethod.
22448
22449         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22450         in local variable type definitions, were being returned as a
22451         SimpleName (we decomposed everything into a string), that is
22452         because primary_expression was being used instead of a type in the
22453         grammar (reduce/reduce conflicts).
22454
22455         The part that was wrong is that we converted the expression into a
22456         string (an oversimplification in one hand, compounded with primary
22457         expressions doing string concatenation).
22458
22459         So things like:
22460
22461         A.B.C [] x;
22462
22463         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22464         using clauses from working on this particular context.  And a type
22465         was being matched directly against "A.B.C[]".
22466
22467         We now use the correct approach, and allow for ComposedCast to be
22468         part of the unary expression.  So the "A.B.C []" become a composed
22469         cast of "A.B.C" (as a nested group of MemberAccess with a
22470         SimpleName at the end) plus the rank composition "[]". 
22471
22472         Also fixes 35567
22473
22474 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22475
22476         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22477         for the access level checking.
22478
22479         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22480         `TypeContainer container', because I kept getting confused when I
22481         was debugging this code.
22482
22483         * expression.cs (Indexers): Instead of tracking getters/setters,
22484         we now track them in parallel.  We create one arraylist less, but
22485         most importantly it is possible now for the LValue code to find a
22486         matching get for a set.
22487
22488         (IndexerAccess.DoResolveLValue): Update the code.
22489         GetIndexersForType has been modified already to extract all the
22490         indexers from a type.  The code assumed it did not.
22491
22492         Also make the code set the correct return type for the indexer.
22493         This was fixed a long time ago for properties, but was missing for
22494         indexers.  It used to be void_type.
22495
22496         (Binary.Emit): Test first for doubles instead of
22497         floats, as they are more common.
22498
22499         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22500         when dealing with floats and the <=, >= operators.  This fixes bug
22501         #39314 
22502
22503         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22504         to load the array value by emitting a load on the foreach variable
22505         type.  This was incorrect.  
22506
22507         We now emit the code to load an element using the the array
22508         variable type, and then we emit the conversion operator.
22509
22510         Fixed #40176
22511
22512 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22513
22514         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22515
22516 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22517
22518         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22519         test for protection before we test for signatures. 
22520
22521         (MethodSignature.ToString): implement.
22522
22523         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22524         to the case where we reduced into a LongConstant.
22525
22526         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22527         depend on whether the information is acurrate, because the
22528         Microsoft runtime will always claim that the array type is public,
22529         regardless of the real state.
22530
22531         If the type is a pointer, another problem happens: the type is
22532         reported as non-public in Microsoft.  
22533
22534         In both cases we have to call CheckAccessLevel recursively with
22535         the underlying type as the argument to be tested.
22536
22537 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22538
22539         * assign.cs (Assign.Emit): If we are dealing with a compound
22540         assignment expression, we should use the code path that stores the
22541         intermediate result in a temporary value.  This fixes #40903.
22542
22543         *expression.cs (Indirection.ToString): Provide ToString method for
22544         debugging. 
22545
22546 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22547
22548         * class.cs: Null out fields holding references to Block objects so
22549         they can be garbage collected.
22550
22551         * expression.cs (OverloadResolve): Remove unused local.
22552
22553 2003-04-07  Martin Baulig  <martin@ximian.com>
22554
22555         * codegen.cs (EmitContext.CurrentFile): New public field.
22556         (EmitContext.Mark): Use the CurrentFile to check whether the
22557         location is in the correct file.
22558         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22559
22560 2003-04-07  Martin Baulig  <martin@ximian.com>
22561
22562         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22563
22564         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22565         location.  [FIXME: The location argument which gets passed to this
22566         method is sometimes wrong!]
22567
22568 2003-04-07  Nick Drochak <ndrochak@gol.com>
22569
22570         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22571
22572 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22573
22574         * expression.cs (Indirection.EmitAssign): We were using the
22575         temporary, but returning immediately instead of continuing the
22576         EmitAssing flow.
22577
22578 2003-04-06  Martin Baulig  <martin@ximian.com>
22579
22580         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22581         if it's a nested child, but also deriving from the outer class.
22582         See test 190.cs.
22583
22584         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22585         nested child, but also deriving from the outer class.  See
22586         test-190.cs.
22587         (FilterWithClosure): We may access private members of the outer
22588         class if we're a nested child and deriving from the outer class.
22589         (RealMemberLookup): Only set `closure_private_ok' if the
22590         `original_bf' contained BindingFlags.NonPublic.
22591
22592 2003-04-05  Martin Baulig  <martin@ximian.com>
22593
22594         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22595
22596 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22597
22598         * class.cs (Event.Define): Do not allow abstract events to have
22599         initializers. 
22600
22601 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22602
22603         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22604         block in event declarations.
22605
22606         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22607         value type, get its address.
22608
22609         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22610         leaving a class on the stack instead of a boolean value (int
22611         0/1).  Change the code so we compare against null, and then the
22612         result against zero.
22613
22614         * class.cs (TypeContainer.GetClassBases): We were checking for the
22615         parent class being sealed too late.
22616
22617         * expression.cs (Binary.Emit): For <= and >= when dealing with
22618         floating point values, use cgt.un and clt.un instead of cgt and
22619         clt alone.
22620
22621 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22622
22623         * statement.cs: Apply the same optimization as MS: skip the 
22624         GetEnumerator returning an IEnumerator, and use the one returning a 
22625         CharEnumerator instead. This allows us to avoid the try-finally block 
22626         and the boxing.
22627
22628 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22629
22630         * cs-parser.jay: Attributes cannot be applied to
22631                          namespaces. Fixes #40473
22632
22633 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22634
22635         * class.cs:
22636         (Add*): check if the name is valid using the full name for constants,
22637         fields, properties and events.
22638
22639 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22640
22641         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22642         char constants to be part of the enumeration.
22643
22644         * expression.cs (Conditional.DoResolve): Add support for operator
22645         true. Implements the missing functionality from 14.12
22646
22647         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22648         operator true/false as required by the spec.
22649
22650         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22651         implicit conversion to boolean.
22652
22653         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22654         also one where the type implements `operator true'. 
22655
22656         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22657         get an expression that will invoke operator true based on an
22658         expression.  
22659
22660         (GetConversionOperators): Removed the hack that called op_True
22661         here.  
22662
22663         (Expression.ResolveBoolean): Move this from Statement.
22664
22665 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22666
22667         * ecore.cs (FieldExpr): do not allow initialization of initonly
22668         fields on derived classes
22669
22670 2003-03-13  Martin Baulig  <martin@ximian.com>
22671
22672         * statement.cs (Block.Emit): Call ig.BeginScope() and
22673         ig.EndScope() when compiling with debugging info; call
22674         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22675
22676 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22677
22678         * expression.cs (Indexers): Do not construct immediately, allow
22679         for new members to be appended as we go.  Fixes 38143
22680
22681 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22682
22683         * expression.cs: save/restore context when resolving an unchecked
22684         expression.
22685
22686 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22687
22688         * cfold.cs: Catch division by zero in modulus operator during
22689         constant folding.
22690
22691 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22692
22693         * interface.cs (Interface.DefineMembers): Avoid defining members
22694         twice. 
22695
22696 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22697
22698         * driver.cs: handle the +/- options for -noconfig
22699
22700         * statement.cs (Unckeched.Resolve): Also track the state of
22701         unchecked in the Resolve phase.
22702
22703 2003-02-27  Martin Baulig  <martin@ximian.com>
22704
22705         * ecore.cs (Expression.MemberLookup): Don't create a
22706         MethodGroupExpr for something which is not a method.  Fixes #38291.
22707
22708 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22709
22710         * class.cs (MemberBase.CheckParameters): Also check that the type
22711         is unmanaged if it is a pointer.
22712
22713         * expression.cs (SizeOf.Resolve): Add location information.
22714
22715         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22716         a managed type is declared.
22717
22718         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22719         parameter modifiers as well.  Fixes bug 38606
22720
22721         * class.cs: Very sad.  Am backing out the speed up changes
22722         introduced by the ArrayList -> Array in the TypeContainer, as they
22723         were not actually that much faster, and introduced a bug (no error
22724         reports on duplicated methods).
22725
22726         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22727         source first, this will guarantee that we have a valid expression
22728         before calling in lower levels functions that will require a
22729         resolved object.  Then use this original_source in the
22730         target.ResolveLValue instead of the original source that was
22731         passed to us.
22732
22733         Another change.  Use target.Resolve instead of LValueResolve.
22734         Although we are resolving for LValues, we will let the Assign code
22735         take care of that (it will be called again from Resolve).  This
22736         basically allows code like this:
22737
22738         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22739         class Y { void A (X x) { x [0] += o; }
22740
22741         The problem was that the indexer was trying to resolve for
22742         set_Item (idx, object o) and never finding one.  The real set_Item
22743         was set_Item (idx, X).  By delaying the process we get the right
22744         semantics. 
22745
22746         Fixes bug 36505
22747
22748 2003-02-23  Martin Baulig  <martin@ximian.com>
22749
22750         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22751         while calling DoEmit ().
22752
22753         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22754         source files; if you use the #line directive inside a method, the
22755         compiler stops emitting line numbers for the debugger until it
22756         reaches the end of the method or another #line directive which
22757         restores the original file.
22758
22759 2003-02-23  Martin Baulig  <martin@ximian.com>
22760
22761         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22762
22763 2003-02-23  Martin Baulig  <martin@ximian.com>
22764
22765         * statement.cs (Block.AddChildVariableNames): We need to call this
22766         recursively, not just for our immediate children.
22767
22768 2003-02-23  Martin Baulig  <martin@ximian.com>
22769
22770         * class.cs (Event.Define): Always make the field private, like csc does.
22771
22772         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22773         actually work, fixes bug #37521.
22774
22775 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22776
22777         * delegate.cs: When creating the various temporary "Parameters"
22778         classes, make sure that we call the ComputeAndDefineParameterTypes
22779         on those new parameters (just like we do with the formal ones), to
22780         allow them to be resolved in the context of the DeclSpace.
22781
22782         This fixes the bug that Dick observed in Bugzilla #38530.
22783
22784 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22785
22786         * expression.cs (ResolveMemberAccess): When resolving a constant,
22787         do not attempt to pull a constant if the value was not able to
22788         generate a valid constant.
22789
22790         * const.cs (LookupConstantValue): Do not report more errors than required.
22791
22792 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22793
22794         * expression.cs: fixes bug #38328.
22795
22796 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22797
22798         * class.cs: Changed all the various members that can be part of a
22799         class from being an ArrayList to be an Array of the right type.
22800         During the DefineType type_list, interface_list, delegate_list and
22801         enum_list are turned into types, interfaces, delegates and enums
22802         arrays.  
22803
22804         And during the member population, indexer_list, event_list,
22805         constant_list, field_list, instance_constructor_list, method_list,
22806         operator_list and property_list are turned into their real arrays.
22807
22808         Although we could probably perform this operation earlier, for
22809         good error reporting we need to keep the lists and remove the
22810         lists for longer than required.
22811
22812         This optimization was triggered by Paolo profiling the compiler
22813         speed on the output of `gen-sample-program.pl' perl script. 
22814
22815         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22816         not crash in methods like MemberLookupFailed that use this field.  
22817
22818         This problem arises when the compiler fails to resolve a type
22819         during interface type definition for example.
22820
22821 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22822
22823         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22824         inherit from System.Object, so we have to stop at null, not only
22825         when reaching System.Object.
22826
22827 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22828
22829         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22830         DeclaredOnly because the parent indexer might have had a different
22831         name, but did not loop until the top of the hierarchy was reached.
22832
22833         The problem this one fixes is 35492: when a class implemented an
22834         indexer from an interface, we were getting the interface method
22835         (which was abstract) and we were flagging an error (can not invoke
22836         abstract method).
22837
22838         This also keeps bug 33089 functioning, and test-148 functioning.
22839
22840         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22841         out if a method is special is to see if it is declared in a
22842         property or event, or whether it is one of the predefined operator
22843         names.   This should fix correctly #36804.
22844
22845 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22846
22847         The goal here is to remove the dependency on EmptyCast.Peel ().
22848         Killing it completely.
22849
22850         The problem is that currently in a number of places where
22851         constants are expected, we have to "probe" for an EmptyCast, and
22852         Peel, which is not the correct thing to do, as this will be
22853         repetitive and will likely lead to errors. 
22854
22855         The idea is to remove any EmptyCasts that are used in casts that
22856         can be reduced to constants, so we only have to cope with
22857         constants. 
22858
22859         This bug hunt was triggered by Bug 37363 and the desire to remove
22860         the duplicate pattern where we were "peeling" emptycasts to check
22861         whether they were constants.  Now constants will always be
22862         constants.
22863
22864         * ecore.cs: Use an enumconstant here instead of wrapping with
22865         EmptyCast.  
22866
22867         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22868         throwing me off.  By handling this we can get rid of a few hacks.
22869
22870         * statement.cs (Switch): Removed Peel() code.
22871
22872 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22873
22874         * class.cs: Location information for error 508
22875
22876         * expression.cs (New.DoResolve): Add a guard against double
22877         resolution of an expression.  
22878
22879         The New DoResolve might be called twice when initializing field
22880         expressions (see EmitFieldInitializers, the call to
22881         GetInitializerExpression will perform a resolve on the expression,
22882         and later the assign will trigger another resolution
22883
22884         This leads to bugs (#37014)
22885
22886         * delegate.cs: The signature for EndInvoke should contain any ref
22887         or out parameters as well.  We were not doing this in the past. 
22888
22889         * class.cs (Field.Define): Do not overwrite the type definition
22890         inside the `volatile' group.  Turns out that volatile enumerations
22891         were changing the type here to perform a validity test, which
22892         broke conversions. 
22893
22894 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22895
22896         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22897         and structs, we do not want to load the instance variable
22898
22899         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22900         enum_type has to be handled like an object reference (implicit
22901         conversions exists from this to object), but the regular IsClass
22902         and IsValueType tests will never return true for this one.
22903
22904         Also we use TypeManager.IsValueType instead of type.IsValueType,
22905         just for consistency with the rest of the code (this is only
22906         needed if we ever use the construct exposed by test-180.cs inside
22907         corlib, which we dont today).
22908
22909 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22910
22911         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22912         just InternalCall.
22913
22914 2003-02-09  Martin Baulig  <martin@ximian.com>
22915
22916         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22917         (Namespace.DefineNamespaces): New static public method; this is
22918         called when we're compiling with debugging to add all namespaces
22919         to the symbol file.
22920
22921         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22922         pass it to the Namespace's .ctor.
22923
22924         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22925         and MethodBase arguments; pass the namespace ID to the symwriter;
22926         pass the MethodBase instead of the token to the symwriter.
22927         (SymbolWriter.DefineNamespace): New method to add a namespace to
22928         the symbol file.
22929
22930 2003-02-09  Martin Baulig  <martin@ximian.com>
22931
22932         * symbolwriter.cs: New file.  This is a wrapper around
22933         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22934         methods here in near future.
22935
22936 2003-02-09  Martin Baulig  <martin@ximian.com>
22937
22938         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22939         ILGenerator.MarkSequencePoint() which are actually used by the
22940         symbol writer.
22941
22942 2003-02-09  Martin Baulig  <martin@ximian.com>
22943
22944         * location.cs (SourceFile): New public sealed class.  This
22945         contains the name and an index which is used in the location's token.
22946         (Location): Reserve an appropriate number of bits in the token for
22947         the source file instead of walking over that list, this gives us a
22948         really huge performance improvement when compiling with debugging.
22949
22950         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22951         `SourceFile' argument instead of a string.
22952         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22953         but don't parse/tokenize here, we need to generate the list of all
22954         source files before we do that.
22955         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22956         the files.
22957
22958         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22959         instead of a string.
22960
22961         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22962         of a string.
22963
22964 2003-02-09  Martin Baulig  <martin@ximian.com>
22965
22966         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22967         filename on `#line default'.
22968
22969 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22970
22971         * statement.cs: don't clear the pinned var when the fixed statement
22972         returns from the method (fixes bug#37752).
22973
22974 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22975
22976         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22977         to IsValueType.
22978
22979 2003-02-07  Martin Baulig  <martin@ximian.com>
22980
22981         * driver.cs: Removed the `--debug-args' command line argument.
22982
22983         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22984         automatically by the AsssemblyBuilder.
22985         (CodeGen.InitializeSymbolWriter): We don't need to call any
22986         initialization function on the symbol writer anymore.  This method
22987         doesn't take any arguments.
22988
22989 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22990
22991         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22992         from referenced assemblies as well.
22993
22994 2003-02-02  Martin Baulig  <martin@ximian.com>
22995
22996         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22997
22998 2003-02-02  Martin Baulig  <martin@ximian.com>
22999
23000         * class.cs (Constructor.Emit): Open the symbol writer before
23001         emitting the constructor initializer.
23002         (ConstructorInitializer.Emit): Call ec.Mark() to allow
23003         single-stepping through constructor initializers.
23004
23005 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
23006
23007         * class.cs: Handle error 549: do not allow virtual methods in
23008         sealed classes. 
23009
23010 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
23011
23012         * decl.cs: Check access levels when resolving types
23013
23014 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
23015
23016         * statement.cs: Add parameters and locals set in catch blocks that might 
23017         return to set vector
23018
23019 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
23020
23021         * class.cs (Operator): Set the SpecialName flags for operators.
23022
23023         * expression.cs (Invocation.DoResolve): Only block calls to
23024         accessors and operators on SpecialName methods.
23025
23026         (Cast.TryReduce): Handle conversions from char constants.
23027
23028
23029 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
23030
23031         * statement.cs: small memory and time optimization in FlowBranching.
23032
23033 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
23034
23035         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
23036         problem that the last fix but in the other sid (Set).
23037
23038         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
23039         access when there is no indexer in the hierarchy.
23040
23041 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
23042
23043         * class.cs: Combine some if statements.
23044
23045 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23046
23047         * driver.cs: fixed bug #37187.
23048
23049 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
23050
23051         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
23052         any indexer, it's needed to build a list with all the indexers in the
23053         hierarchy (AllGetters), else we have problems. Fixes #35653.
23054
23055 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
23056
23057         * class.cs (MethodData.Define): It is wrong for an interface
23058         implementation to be static in both cases: explicit and implicit.
23059         We were only handling this in one case.
23060
23061         Improve the if situation there to not have negations.
23062
23063         * class.cs (Field.Define): Turns out that we do not need to check
23064         the unsafe bit on field definition, only on usage.  Remove the test.
23065
23066 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23067
23068         * driver.cs: use assembly.Location instead of Codebase (the latest
23069         patch made mcs fail when using MS assemblies).
23070
23071 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
23072
23073         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
23074         get the path to *corlib.dll.
23075
23076 2003-01-21  Nick Drochak <ndrochak@gol.com>
23077
23078         * cs-tokenizer.cs:
23079         * pending.cs:
23080         * typemanager.cs: Remove compiler warnings
23081
23082 2003-01-20  Duncan Mak  <duncan@ximian.com>
23083
23084         * AssemblyInfo.cs: Bump the version number to 0.19.
23085
23086 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23087
23088         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
23089
23090 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
23091
23092         * class.cs (Constructor::Emit): Emit debugging info for constructors.
23093
23094 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
23095
23096         * cs-parser.jay: Small fix: we were not comparing the constructor
23097         name correctly.   Thanks to Zoltan for the initial pointer.
23098
23099 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
23100
23101         * cs-tokenizer.cs: Set file name when specified with #line
23102
23103 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
23104
23105         * cs-parser.jay: Only perform the constructor checks here if we
23106         are named like the class;  This will help provider a better
23107         error.  The constructor path is taken when a type definition is
23108         not found, but most likely the user forgot to add the type, so
23109         report that rather than the constructor error.
23110
23111 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
23112
23113         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
23114         allocations.
23115
23116 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23117
23118         * cs-parser.jay: Add cleanup call.
23119
23120 2003-01-13  Duncan Mak  <duncan@ximian.com>
23121
23122         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
23123         consistent with other methods.
23124
23125 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23126
23127         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
23128
23129 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
23130
23131         * attribute.cs: only set GuidAttr to true when we have a
23132         GuidAttribute.
23133
23134 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23135
23136         * ecore.cs:
23137         * expression.cs:
23138         * typemanager.cs: fixes to allow mcs compile corlib with the new
23139         Type.IsSubclassOf fix.
23140
23141 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
23142
23143         * expression.cs (LocalVariableReference.DoResolve): Classify a
23144         constant as a value, not as a variable.   Also, set the type for
23145         the variable.
23146
23147         * cs-parser.jay (fixed_statement): take a type instead of a
23148         pointer_type, so we can produce a better error message later.
23149
23150         * statement.cs (Fixed.Resolve): Flag types that are not pointers
23151         as an error.  
23152
23153         (For.DoEmit): Make inifinite loops have a
23154         non-conditional branch back.
23155
23156         (Fixed.DoEmit): First populate the pinned variables, then emit the
23157         statement, then clear the variables.  Before I was emitting the
23158         code once for each fixed piece.
23159
23160
23161 2003-01-08  Martin Baulig  <martin@ximian.com>
23162
23163         * statement.cs (FlowBranching.MergeChild): A break in a
23164         SWITCH_SECTION does not leave a loop.  Fixes #36155.
23165
23166 2003-01-08  Martin Baulig  <martin@ximian.com>
23167
23168         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
23169         lives in the same number space than `param_map'.  Fixes #36154.
23170
23171 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
23172
23173         * cs-parser.jay (constructor_declaration): Set the
23174         Constructor.ModFlags before probing for it.  This makes the
23175         compiler report 514, 515 and 132 (the code was there, but got
23176         broken). 
23177
23178         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
23179         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
23180         (GotoCase.Resolve): Set `Returns' to ALWAYS.
23181
23182 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
23183
23184         * enum.cs: create the enum static fields using the enum type.
23185
23186 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23187
23188         * class.cs: don't try to create the ParamBuilder for the return
23189         type if it's not needed (and handle it breaking for the ms runtime
23190         anyway).
23191
23192 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23193
23194         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23195
23196 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23197
23198         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23199         the command.   This showed up while compiling the JANET source
23200         code, which used \r as its only newline separator.
23201
23202 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23203
23204         * class.cs (Method.Define): If we are an operator (because it
23205         reuses our code), then set the SpecialName and HideBySig.  #36128
23206
23207 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23208
23209         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23210         exception, report error 120 `object reference required'.
23211
23212         * driver.cs: Add --pause option, used during to measure the size
23213         of the process as it goes with --timestamp.
23214
23215         * expression.cs (Invocation.DoResolve): Do not allow methods with
23216         SpecialName to be invoked.
23217
23218 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23219
23220         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23221         number before adding it.
23222
23223 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23224
23225         * ecore.cs (StandardImplicitConversion): When in an unsafe
23226         context, we allow conversion between void * to any other pointer
23227         type. This fixes bug #35973.
23228
23229 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23230
23231         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23232         is not thrown when extensionless outputs are used 
23233
23234 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23235
23236         * rootcontext.cs: fixed compilation of corlib.
23237
23238 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23239
23240         * attribute.cs (Attributes.Contains): Add new method.
23241
23242         * class.cs (MethodCore.LabelParameters): if the parameter is an
23243         `out' parameter, check that no attribute `[In]' has been passed.
23244
23245         * enum.cs: Handle the `value__' name in an enumeration.
23246
23247 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23248
23249         * decl.cs: Added special case to allow overrides on "protected
23250         internal" methods
23251
23252 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23253
23254         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23255         since it makes much more sense.
23256
23257         (Attributes.ctor): Don't require a Location parameter.
23258
23259         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23260
23261         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23262         since we already have that information per attribute.
23263
23264         * everywhere : make appropriate changes.
23265
23266         * class.cs (LabelParameters): Write the code which actually
23267         applies attributes to the return type. We can't do this on the MS
23268         .NET runtime so we flag a warning in the case an exception is
23269         thrown.
23270
23271 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23272
23273         * const.cs: Handle implicit null conversions here too.
23274
23275 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23276
23277         * class.cs (MethodCore.LabelParameters): Remove the extra
23278         Type [] parameter since it is completely unnecessary. Instead
23279         pass in the method's attributes so that we can extract
23280         the "return" attribute.
23281
23282 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23283
23284         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23285         of ignoring it and letting the compile continue.
23286
23287         * typemanager.cs (ChangeType): use an extra argument to return an
23288         error condition instead of throwing an exception.
23289
23290 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23291
23292         * expression.cs (Unary.TryReduce): mimic the code for the regular
23293         code path.  Perform an implicit cast in the cases where we can
23294         implicitly convert to one of the integral types, and then reduce
23295         based on that constant.   This fixes bug #35483.
23296
23297 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23298
23299         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23300
23301 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23302
23303         * namespace.cs: fixed bug #35489.
23304
23305 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23306
23307         * class.cs: Remove some dead code.
23308
23309         * cs-parser.jay: Estimate the number of methods needed
23310         (RootContext.MethodCount);
23311
23312         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23313         numbers instead of StringBuilders.
23314
23315         * support.cs (PtrHashtable): Add constructor with initial size;
23316         We can now reduce reallocations of the method table.
23317
23318 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23319
23320         * attribute.cs (ApplyAttributes): Keep track of the emitted
23321         attributes on a per-target basis. This fixes bug #35413.
23322
23323 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23324
23325         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23326         default to the Windows 1252 encoding.
23327
23328         (UnixParseOption): Support version, thanks to Alp for the missing
23329         pointer. 
23330
23331         * AssemblyInfo.cs: Add nice assembly information.
23332
23333         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23334         (bug 35169).
23335
23336         * cs-parser.jay: Allow a trailing comma before the close bracked
23337         in the attribute_section production.
23338
23339         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23340         address of the instance was being taken, I will take this out,
23341         because we take the address of the object immediately here.
23342
23343 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23344
23345         * typemanager.cs (AreMultipleAllowed): Take care of the most
23346         obvious case where attribute type is not in the current assembly -
23347         stupid me ;-)
23348
23349 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23350
23351         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23352         definitions, instead of doing that afterwards.  
23353
23354         Also we use a nice little hack, depending on the constructor, we
23355         know if we are a "composed" name or a simple name.  Hence, we
23356         avoid the IndexOf test, and we avoid 
23357
23358         * codegen.cs: Add code to assist in a bug reporter to track down
23359         the source of a compiler crash. 
23360
23361 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23362
23363         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23364         types have been emitted for a given element and flag an error
23365         if something which does not have AllowMultiple set is used more
23366         than once.
23367
23368         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23369         attribute types and their corresponding AllowMultiple properties
23370
23371         (AreMultipleAllowed): Check the property for a given type.
23372
23373         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23374         property in the case we have a TypeContainer.
23375
23376         (Attributes.AddAttribute): Detect duplicates and just skip on
23377         adding them. This trivial fix catches a pretty gross error in our
23378         attribute emission - global attributes were being emitted twice!
23379
23380         Bugzilla bug #33187 is now fixed.
23381
23382 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23383
23384         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23385         instead of pp_and).
23386
23387         * expression.cs (Binary.ResolveOperator): I can only use the
23388         Concat (string, string, string) and Concat (string, string,
23389         string, string) if the child is actually a concatenation of
23390         strings. 
23391
23392 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23393
23394         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23395         context where we need a 2-character lookahead.
23396
23397         * pending.cs (PendingImplementation): Rework so we can keep track
23398         of interface types all the time, and flag those which were
23399         implemented by parents as optional.
23400
23401 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23402
23403         * expression.cs (Binary.ResolveOperator): Use
23404         String.Concat(string,string,string) or
23405         String.Concat(string,string,string,string) when possible. 
23406
23407         * typemanager: More helper methods.
23408
23409
23410 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23411
23412         * pending.cs: remove the bogus return from GetMissingInterfaces()
23413         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23414
23415 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23416
23417         * namespace.cs: avoid duplicated 'using xxx' being added to
23418         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23419         when we get more than one 'using' statement for the same namespace.
23420         Report a CS0105 warning for it.
23421
23422 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23423
23424         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23425         of calling getChar/putback, uses internal knowledge of it.    
23426
23427         (xtoken): Reorder tokenizer so most common patterns are checked
23428         first.  This reduces the compilation time in another 5% (from 8.11s
23429         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23430
23431         The parsing time is 22% of the compilation in mcs, and from that
23432         64% is spent on the tokenization process.  
23433
23434         I tried using a binary search for keywords, but this is slower
23435         than the hashtable.  Another option would be to do a couple of
23436         things:
23437
23438                 * Not use a StringBuilder, instead use an array of chars,
23439                   with a set value.  Notice that this way we could catch
23440                   the 645 error without having to do it *afterwards*.
23441
23442                 * We could write a hand-parser to avoid the hashtable
23443                   compares altogether.
23444
23445         The identifier consumption process takes 37% of the tokenization
23446         time.  Another 15% is spent on is_number.  56% of the time spent
23447         on is_number is spent on Int64.Parse:
23448
23449                 * We could probably choose based on the string length to
23450                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23451                   computations. 
23452
23453         Another 3% is spend on wrapping `xtoken' in the `token' function.
23454
23455         Handle 0xa0 as whitespace (#34752)
23456
23457 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23458
23459         * typemanager.cs (IsCLRType): New routine to tell whether a type
23460         is one of the builtin types.  
23461
23462         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23463         typecode in more places instead of doing pointer comparissions.
23464         We could leverage some knowledge about the way the typecodes are
23465         laid out.
23466
23467         New code to cache namespaces in assemblies, it is currently not
23468         invoked, to be used soon.
23469
23470         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23471
23472         * expression.cs (Binary.ResolveOperator): specially handle
23473         strings, and do not perform user-defined operator overloading for
23474         built-in types.
23475
23476 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23477
23478         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23479         internalcall as it is a pretty simple operation;  Avoid whenever
23480         possible to call Char.IsLetter.
23481
23482         (consume_identifier): Cut by half the number of
23483         hashtable calls by merging the is_keyword and GetKeyword behavior.
23484
23485         Do not short-circuit, because if we do, we
23486         report errors (ie, #if false && true would produce an invalid
23487         directive error);
23488
23489
23490 2002-11-24  Martin Baulig  <martin@ximian.com>
23491
23492         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23493         check constant ranges and report a CS0221.  Fixes #33186.
23494
23495 2002-11-24  Martin Baulig  <martin@ximian.com>
23496
23497         * cs-parser.jay: Make this work for uninitialized variable
23498         declarations in the `for' initializer.  Fixes #32416.
23499
23500 2002-11-24  Martin Baulig  <martin@ximian.com>
23501
23502         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23503         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23504
23505 2002-11-24  Martin Baulig  <martin@ximian.com>
23506
23507         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23508         argument; if true, we also check for user-defined conversions.
23509         This is only needed if both arguments are of a user-defined type.
23510         Fixes #30443, added test-175.cs.
23511         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23512
23513         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23514
23515 2002-11-24  Martin Baulig  <martin@ximian.com>
23516
23517         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23518         function to get the store opcode.
23519         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23520         only emit the Ldelema if the store opcode is Stobj.  You must run
23521         both test-34 and test-167 to test this.  Fixes #34529.
23522
23523 2002-11-23  Martin Baulig  <martin@ximian.com>
23524
23525         * ecore.cs (Expression.MemberLookup): Added additional
23526         `qualifier_type' argument which is used when we're being called
23527         from MemberAccess.DoResolve() and null if we're called from a
23528         SimpleName lookup.
23529         (Expression.MemberLookupFailed): New method to report errors; this
23530         does the CS1540 check and reports the correct error message.
23531
23532         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23533         argument for the CS1540 check and redone the way how we're dealing
23534         with private members.  See the comment in the source code for details.
23535         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23536         `closure_start_type' to `closure_qualifier_type' and check whether
23537         it's not null.  It was not this filter being broken, it was just
23538         being called with the wrong arguments.
23539
23540         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23541         and pass it the correct `qualifier_type'; this also does the error
23542         handling for us.
23543
23544 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23545
23546         * expression.cs (Invocation.EmitParams): If the we are dealing
23547         with a non-built-in value type, load its address as well.
23548
23549         (ArrayCreation): Use a a pretty constant instead
23550         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23551         static initializers.  
23552
23553         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23554         because they are not really value types, just glorified integers. 
23555
23556         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23557
23558         * ecore.cs: Remove redundant code for enumerations, make them use
23559         the same code path as everything else, fixes the casting issue
23560         with enumerations in Windows.Forms.
23561
23562         * attribute.cs: Do only cast to string if it is a string, the
23563         validation happens later.
23564
23565         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23566         people upgrade their corlibs.
23567
23568         * ecore.cs: Oops, enumerations were not following the entire code path
23569
23570 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23571
23572         * typemanager.cs (FilterWithClosure): Commented out the test for
23573         1540 in typemanager.cs, as it has problems when accessing
23574         protected methods from a parent class (see test-174.cs). 
23575
23576         * attribute.cs (Attribute.ValidateGuid): new method.
23577         (Attribute.Resolve): Use above.
23578
23579 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23580
23581         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23582
23583         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23584         handling for enumerations, as we only needed the TypeContainer
23585         functionality to begin with (this is required for the fix below to
23586         work for enums that reference constants in a container class for
23587         example). 
23588
23589         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23590
23591         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23592         a valid TypeBuilder to perform lookups on.o
23593
23594         * class.cs (InheritableMemberSignatureCompare): Use true in the
23595         call to GetGetMethod and GetSetMethod, because we are comparing
23596         the signature, and we need to get the methods *even* if they are
23597         private. 
23598
23599         (PropertyBase.CheckBase): ditto.
23600
23601         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23602         GotoCase.Resolve): Use Peel on EmpytCasts.
23603
23604         * ecore.cs (EmptyCast): drop child, add Peel method.
23605
23606 2002-11-17  Martin Baulig  <martin@ximian.com>
23607
23608         * ecore.cs (EmptyCast.Child): New public property.
23609
23610         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23611         label resolved to an EmptyCast.  Fixes #34162.
23612         (GotoCase.Resolve): Likewise.
23613         (Block.EmitMeta): Likewise.
23614
23615 2002-11-17  Martin Baulig  <martin@ximian.com>
23616
23617         * expression.cs (Invocation.BetterConversion): Prefer int over
23618         uint; short over ushort; long over ulong for integer literals.
23619         Use ImplicitConversionExists instead of StandardConversionExists
23620         since we also need to check for user-defined implicit conversions.
23621         Fixes #34165.  Added test-173.cs.
23622
23623 2002-11-16  Martin Baulig  <martin@ximian.com>
23624
23625         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23626         with the `true' and `false' literals.  Fixes #33151.
23627
23628 2002-11-16  Martin Baulig  <martin@ximian.com>
23629
23630         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23631         October 22nd; don't do the cs1540 check for static members.
23632
23633         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23634         now using our own filter here and doing the cs1540 check again.
23635
23636 2002-11-16  Martin Baulig  <martin@ximian.com>
23637
23638         * support.cs (InternalParameters): Don't crash if we don't have
23639         any fixed parameters.  Fixes #33532.
23640
23641 2002-11-16  Martin Baulig  <martin@ximian.com>
23642
23643         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23644         when looking up static methods to make this work on Windows.
23645         Fixes #33773.
23646
23647 2002-11-16  Martin Baulig  <martin@ximian.com>
23648
23649         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23650         a setter rather than using PropertyInfo.CanWrite.
23651
23652 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23653
23654         * class.cs: Allow acces to block member by subclasses. Fixes build
23655         breaker.
23656
23657 2002-11-14  Martin Baulig  <martin@ximian.com>
23658
23659         * class.cs (Constructor.Emit): Added the extern/block check.
23660         Fixes bug #33678.
23661
23662 2002-11-14  Martin Baulig  <martin@ximian.com>
23663
23664         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23665         iteration while looking for indexers, this is needed because the
23666         indexer may have a different name in our base classes.  Fixed the
23667         error reporting (no indexers at all, not get accessor, no
23668         overloaded match).  Fixes bug #33089.
23669         (IndexerAccess.DoResolveLValue): Likewise.
23670
23671 2002-11-14  Martin Baulig  <martin@ximian.com>
23672
23673         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23674         indexers.  Fixes the first part of bug #33089.
23675         (MethodSignature.InheritableMemberSignatureCompare): Added support
23676         for properties.
23677
23678 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23679
23680         * attribute.cs (Attribute.Resolve): Catch the
23681         NullReferenceException and report it since it isn't supposed to
23682         happen. 
23683
23684 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23685
23686         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23687         LogicalOr and LogicalAnd that can benefit from recursively
23688         handling EmitBranchable.  The code now should be nice for Paolo.
23689
23690 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23691
23692         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23693         the Type lookups, as we perform quite a number of lookups on
23694         non-Types.  This can be removed once we can deterministically tell
23695         whether we have a type or a namespace in advance.
23696
23697         But this might require special hacks from our corlib.
23698
23699         * TODO: updated.
23700
23701         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23702         and double which avoids a conversion from an integer to a double.
23703
23704         * expression.cs: tiny optimization, avoid calling IsConstant,
23705         because it effectively performs the lookup twice.
23706
23707 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23708
23709         But a bogus return here to keep the semantics of the old code
23710         until the Mono runtime is fixed.
23711
23712         * pending.cs (GetMissingInterfaces): New method used to remove all
23713         the interfaces that are already implemented by our parent
23714         classes from the list of pending methods. 
23715
23716         * interface.cs: Add checks for calls after ResolveTypeExpr.
23717
23718 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23719
23720         * class.cs (Class.Emit): Report warning 67: event not used if the
23721         warning level is beyond 3.
23722
23723         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23724         being a NullLiteral.
23725
23726         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23727         specifiers. 
23728
23729         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23730         path that might fail if a type can not be resolved.
23731
23732         * expression.cs (Binary.Emit): Emit unsigned versions of the
23733         operators. 
23734
23735         * driver.cs: use error 5.
23736
23737 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23738
23739         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23740
23741 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23742
23743         * cs-parser.jay (switch_section): A beautiful patch from Martin
23744         Baulig that fixed 33094.
23745
23746 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23747
23748         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23749         Check whether the base is abstract and report an error if so.
23750
23751         * expression.cs (IndexerAccess.DoResolveLValue,
23752         IndexerAccess.DoResolve): ditto. 
23753
23754         (Invocation.DoResolve): ditto.
23755
23756         (Invocation.FullMethodDesc): Improve the report string.
23757
23758         * statement.cs (Block): Eliminate IsVariableDefined as it is
23759         basically just a wrapper for GetVariableInfo.
23760
23761         * ecore.cs (SimpleName): Use new 
23762
23763         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23764         type, as we return the actual parameter ref/unref state on a
23765         different call.
23766
23767 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23768
23769         * support.cs: Return proper flags REF/OUT fixing the previous
23770         commit.  
23771
23772         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23773         not used to mean `ref' but `ref or out' in ParameterReference
23774
23775         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23776         full type signature instead of calling TypeManger.CSharpName
23777         ourselves. 
23778
23779         * support.cs (InternalParameters.ParameterDesc): Do not compare
23780         directly to the modflags, because REF/OUT will actually be bitsets
23781         if set. 
23782
23783         * delegate.cs (VerifyMethod): Check also the modifiers.
23784
23785         * cs-tokenizer.cs: Fix bug where floating point values with an
23786         exponent where a sign was missing was ignored.
23787
23788         * driver.cs: Allow multiple assemblies to be specified in a single
23789         /r: argument
23790
23791 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23792
23793         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23794         because identifiers after a parenthesis would end up in this kind
23795         of production, and we needed to desamiguate it for having casts
23796         like:
23797
23798                 (UserDefinedType *) xxx
23799
23800 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23801
23802         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23803         we should set on the Bindingflags.NonPublic, but not turn on
23804         private_ok.  private_ok controls whether a Private member is
23805         returned (this is chekced on the filter routine), while the
23806         BindingFlags.NonPublic just controls whether private/protected
23807         will be allowed.   This fixes the problem part of the problem of
23808         private properties being allowed to be used in derived classes.
23809
23810         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23811         so we can call the children DoResolveLValue method (this will
23812         properly signal errors on lvalue assignments to base properties)
23813
23814         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23815         getter are null, and we have a property info, we know that this
23816         happened because the lookup failed, so we report an error 122 for
23817         protection level violation.
23818
23819         We also silently return if setter and getter are null in the
23820         resolve functions, this condition only happens if we have flagged
23821         the error before.  This is the other half of the problem. 
23822
23823         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23824         not have accessibility information, that is why we were returning
23825         true in the filter function in typemanager.cs.
23826
23827         To properly report 122 (property is inaccessible because of its
23828         protection level) correctly, we report this error in ResolveAccess
23829         by failing if both the setter and the getter are lacking (ie, the
23830         lookup failed). 
23831
23832         DoResolve and DoLResolve have been modified to check for both
23833         setter/getter being null and returning silently, the reason being
23834         that I did not want to put the knowledge about this error in upper
23835         layers, like:
23836
23837         int old = Report.Errors;
23838         x = new PropertyExpr (...);
23839         if (old != Report.Errors)
23840                 return null;
23841         else
23842                 return x;
23843
23844         So the property expr is returned, but it is invalid, so the error
23845         will be flagged during the resolve process. 
23846
23847         * class.cs: Remove InheritablePropertySignatureCompare from the
23848         class, as we no longer depend on the property signature to compute
23849         whether it is possible to implement a method or not.
23850
23851         The reason is that calling PropertyInfo.GetGetMethod will return
23852         null (in .NET, in Mono it works, and we should change this), in
23853         cases where the Get Method does not exist in that particular
23854         class.
23855
23856         So this code:
23857
23858         class X { public virtual int A { get { return 1; } } }
23859         class Y : X { }
23860         class Z : Y { public override int A { get { return 2; } } }
23861
23862         Would fail in Z because the parent (Y) would not have the property
23863         defined.  So we avoid this completely now (because the alternative
23864         fix was ugly and slow), and we now depend exclusively on the
23865         method names.
23866
23867         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23868         reference method, instead of using the property.
23869
23870         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23871         routines are gone now.
23872
23873         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23874         names, they were incorrectly named.
23875
23876         * cs-tokenizer.cs: Return are more gentle token on failure. 
23877
23878         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23879         had an out-of-sync index variable, which caused it to remove from
23880         the list of pending methods the wrong method sometimes.
23881
23882 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23883
23884         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23885         CanWrite, because those refer to this particular instance of the
23886         property, and do not take into account the fact that we can
23887         override single members of a property.
23888
23889         Constructor requires an EmitContext.  The resolution process does
23890         not happen here, but we need to compute the accessors before,
23891         because the resolution does not always happen for properties.
23892
23893         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23894         subclass, before we did not update this flag, but we did update
23895         bindingflags. 
23896
23897         (GetAccessors): Drop this routine, as it did not work in the
23898         presence of partially overwritten set/get methods. 
23899
23900         Notice that this broke the cs1540 detection, but that will require
23901         more thinking. 
23902
23903 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23904
23905         * class.cs:
23906         * codegen.cs:
23907         * driver.cs: issue a warning instead of an error if we don't support
23908         debugging for the platform. Also ignore a couple of errors that may
23909         arise when trying to write the symbols. Undo my previous patch.
23910
23911 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23912
23913         * driver.cs: ignore /debug switch except for Unix platforms.
23914
23915 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23916
23917         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23918
23919 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23920
23921         * driver.cs: Do not make mcs-debug conditional, so we do not break
23922         builds that use it.
23923
23924         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23925         review this patch.  But basically after all the children variables
23926         have been merged, the value of "Breaks" was not being set to
23927         new_breaks for Switch blocks.  I think that it should be set after
23928         it has executed.  Currently I set this to the value of new_breaks,
23929         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23930         conservative, but I do not understand this code very well.
23931
23932         I did not break anything in the build, so that is good ;-)
23933
23934         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23935
23936 2002-10-20  Mark Crichton  <crichton@gimp.org>
23937
23938         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23939
23940 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23941
23942         * cfold.cs: Fixed compile blocker.
23943
23944 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23945
23946         * driver.cs: I was chekcing the key, not the file.
23947
23948 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23949
23950         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23951         message that we were generating - we just need to silently return
23952         a null.
23953
23954 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23955
23956         * class.cs (Event.Define): Change my previous commit, as this
23957         breaks the debugger.  This is a temporary hack, as it seems like
23958         the compiler is generating events incorrectly to begin with.
23959
23960         * expression.cs (Binary.ResolveOperator): Added support for 
23961         "U operator - (E x, E y)"
23962
23963         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23964         y)".
23965
23966         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23967         init-only variables, but this path did not take into account that
23968         there might be also instance readonly variables.  Correct this
23969         problem. 
23970
23971         This fixes bug 32253
23972
23973         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23974         delegates as well.
23975
23976         * driver.cs: Change the extension for modules to `netmodule'
23977
23978         * cs-parser.jay: Improved slightly the location tracking for
23979         the debugger symbols.
23980
23981         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23982         modifiers that were specified instead of the hardcoded value
23983         (FamAndAssem).  This was basically ignoring the static modifier,
23984         and others.  Fixes 32429.
23985
23986         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23987         fixed a bug in the process (32476)
23988
23989         * expression.cs (ArrayAccess.EmitAssign): Patch from
23990         hwang_rob@yahoo.ca that fixes bug 31834.3
23991
23992 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23993
23994         * driver.cs: Make the module extension .netmodule.
23995
23996 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23997
23998         * driver.cs: Report an error if the resource file is not found
23999         instead of crashing.
24000
24001         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
24002         false, like Emit does.
24003
24004 2002-10-16  Nick Drochak  <ndrochak@gol.com>
24005
24006         * typemanager.cs: Remove unused private member.  Also reported mcs
24007         bug to report this as a warning like csc.
24008
24009 2002-10-15  Martin Baulig  <martin@gnome.org>
24010
24011         * statement.cs (Statement.Emit): Made this a virtual method; emits
24012         the line number info and calls DoEmit().
24013         (Statement.DoEmit): New protected abstract method, formerly knows
24014         as Statement.Emit().
24015
24016         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
24017
24018 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
24019
24020         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
24021         have fixed a remaining problem: not every AddXXXX was adding a
24022         fully qualified name.  
24023
24024         Now everyone registers a fully qualified name in the DeclSpace as
24025         being defined instead of the partial name.  
24026
24027         Downsides: we are slower than we need to be due to the excess
24028         copies and the names being registered this way.  
24029
24030         The reason for this is that we currently depend (on the corlib
24031         bootstrap for instance) that types are fully qualified, because
24032         we dump all the types in the namespace, and we should really have
24033         types inserted into the proper namespace, so we can only store the
24034         basenames in the defined_names array.
24035
24036 2002-10-10  Martin Baulig  <martin@gnome.org>
24037
24038         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
24039         from bug #31834, see the bug report for a testcase which is
24040         miscompiled.
24041
24042 2002-10-10  Martin Baulig  <martin@gnome.org>
24043
24044         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
24045         flow analysis code for this.
24046
24047         * statement.cs (Do, While, For): Tell the flow analysis code about
24048         infinite loops.
24049         (FlowBranching.UsageVector): Added support for infinite loops.
24050         (Block.Resolve): Moved the dead code elimination here and use flow
24051         analysis to do it.
24052
24053 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
24054
24055         * class.cs (Field.Define): Catch cycles on struct type
24056         definitions. 
24057
24058         * typemanager.cs (IsUnmanagedtype): Do not recursively check
24059         fields if the fields are static.  We only need to check instance
24060         fields. 
24061
24062         * expression.cs (As.DoResolve): Test for reference type.
24063
24064         * statement.cs (Using.ResolveExpression): Use
24065         ConvertImplicitRequired, not ConvertImplicit which reports an
24066         error on failture
24067         (Using.ResolveLocalVariableDecls): ditto.
24068
24069         * expression.cs (Binary.ResolveOperator): Report errors in a few
24070         places where we had to.
24071
24072         * typemanager.cs (IsUnmanagedtype): Finish implementation.
24073
24074 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
24075
24076         * expression.cs: Use StoreFromPtr instead of extracting the type
24077         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
24078
24079         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
24080         an enumeration value to a System.Enum, but System.Enum is not a
24081         value type, but an class type, so we need to box.
24082
24083         (Expression.ConvertExplicit): One codepath could return
24084         errors but not flag them.  Fix this.  Fixes #31853
24085
24086         * parameter.cs (Resolve): Do not allow void as a parameter type.
24087
24088 2002-10-06  Martin Baulig  <martin@gnome.org>
24089
24090         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
24091         if it's a class type and not a struct.  Fixes #31815.
24092
24093 2002-10-06  Martin Baulig  <martin@gnome.org>
24094
24095         * statement.cs: Reworked the flow analysis code a bit to make it
24096         usable for dead code elimination.
24097
24098 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24099
24100         * cs-parser.jay: allow empty source files. Fixes bug #31781.
24101
24102 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24103
24104         * expression.cs (ComposedCast.DoResolveType): A quick workaround
24105         to fix the test 165, will investigate deeper.
24106
24107 2002-10-04  Martin Baulig  <martin@gnome.org>
24108
24109         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
24110         finally blocks actually work.
24111         (Try.Resolve): We don't need to create a sibling for `finally' if
24112         there is no finally block.
24113
24114 2002-10-04  Martin Baulig  <martin@gnome.org>
24115
24116         * class.cs (Constructor.Define): The default accessibility for a
24117         non-default constructor is private, not public.
24118
24119 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24120
24121         * class.cs (Constructor): Make AllowedModifiers public, add
24122         EXTERN.
24123
24124         * cs-parser.jay: Perform the modifiers test here, as the
24125         constructor for the Constructor class usually receives a zero
24126         because of the way we create it (first we create, later we
24127         customize, and we were never checking the modifiers).
24128
24129         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
24130         is a version of LookupTypeReflection that includes the type-name
24131         cache.  This can be used as a fast path for functions that know
24132         the fully qualified name and are only calling into *.GetType() to
24133         obtain a composed type.
24134
24135         This is also used by TypeManager.LookupType during its type
24136         composition.
24137
24138         (LookupType): We now also track the real type name, as sometimes
24139         we can get a quey for the real type name from things like
24140         ComposedCast.  This fixes bug 31422.
24141
24142         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
24143         complete type fullname, it does not have to go through the type
24144         resolution system to obtain the composed version of the type (for
24145         obtaining arrays or pointers).
24146
24147         (Conditional.Emit): Use the EmitBoolExpression to
24148         generate nicer code, as requested by Paolo.
24149
24150         (ArrayCreation.CheckIndices): Use the patch from
24151         hwang_rob@yahoo.ca to validate the array initializers. 
24152
24153 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
24154
24155         * class.cs (ConstructorInitializer.Emit): simplify code by using
24156         Invocation.EmitCall, and at the same time, fix the bugs in calling
24157         parent constructors that took variable arguments. 
24158
24159         * ecore.cs (Expression.ConvertNumericExplicit,
24160         Expression.ImplicitNumericConversion): Remove the code that
24161         manually wrapped decimal (InternalTypeConstructor call is now gone
24162         as well).
24163
24164         * expression.cs (Cast.TryReduce): Also handle decimal types when
24165         trying to perform a constant fold on the type.
24166
24167         * typemanager.cs (IsUnmanagedtype): Partially implemented.
24168
24169         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
24170         that only turned off an error report, and did nothing else. 
24171
24172 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
24173
24174         * driver.cs: Handle and ignore /fullpaths
24175
24176 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
24177
24178         * expression.cs (Binary.ResolveOperator): Catch the case where
24179         DoNumericPromotions returns true, 
24180
24181         (Binary.DoNumericPromotions): Simplify the code, and the tests.
24182
24183 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
24184
24185         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
24186         report error 70.
24187
24188 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24189
24190         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24191         conversion exists, but it is also required that the conversion be
24192         performed.  This manifested in "(Type64Enum) 2".  
24193
24194         * class.cs (TypeManager.AddMethod): The fix is not to change
24195         AddEnum, because that one was using a fully qualified name (every
24196         DeclSpace derivative does), but to change the AddMethod routine
24197         that was using an un-namespaced name.  This now correctly reports
24198         the duplicated name.
24199
24200         Revert patch until I can properly fix it.  The issue
24201         is that we have a shared Type space across all namespaces
24202         currently, which is wrong.
24203
24204         Options include making the Namespace a DeclSpace, and merge
24205         current_namespace/current_container in the parser.
24206
24207 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24208
24209         * cs-parser.jay: Improve error reporting when we get a different
24210         kind of expression in local_variable_type and
24211         local_variable_pointer_type. 
24212
24213         Propagate this to avoid missleading errors being reported.
24214
24215         * ecore.cs (ImplicitReferenceConversion): treat
24216         TypeManager.value_type as a target just like object_type.   As
24217         code like this:
24218
24219         ValueType v = 1;
24220
24221         Is valid, and needs to result in the int 1 being boxed before it
24222         is assigned to the value type v.
24223
24224         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24225         to validate the enumeration name.
24226
24227         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24228         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24229         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24230
24231         * ecore.cs (TryImplicitIntConversion): When doing an
24232         implicit-enumeration-conversion, check if the type is 64-bits and
24233         perform a conversion before passing to EnumConstant.
24234
24235 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24236
24237         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24238         report ambiguous type references.  Unlike the MS version, we
24239         report what the ambiguity is.   Innovation at work ;-)
24240
24241         (DeclSpace.FindType): Require a location argument to
24242         display when we display an ambiguous error.
24243
24244         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24245
24246         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24247
24248         * expression.cs (EmitDynamicInitializers): Apply patch from
24249         hwang_rob@yahoo.ca that fixes the order in which we emit our
24250         initializers. 
24251
24252 2002-09-21  Martin Baulig  <martin@gnome.org>
24253
24254         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24255         delegate takes no arguments.
24256
24257 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24258
24259         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24260         from integers.
24261
24262         * expression.cs: Extract the underlying type.
24263
24264         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24265
24266         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24267
24268 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24269
24270         * class.cs (TypeContainer.DefineType): We can not use the nice
24271         PackingSize with the size set to 1 DefineType method, because it
24272         will not allow us to define the interfaces that the struct
24273         implements.
24274
24275         This completes the fixing of bug 27287
24276
24277         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24278         means also structs.  This fixes part of the problem. 
24279         (Expresion.ImplicitReferenceConversionExists): ditto.
24280
24281         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24282         error if there were no errors reported during the type lookup
24283         process, to avoid duplicates or redundant errors.  Without this
24284         you would get an ambiguous errors plus a type not found.  We have
24285         beaten the user enough with the first error.  
24286
24287         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24288         reference. 
24289
24290         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24291         during the resolution process, stop the lookup, this avoids
24292         repeated error reports (same error twice).
24293
24294         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24295
24296         * typemanager.cs (LookupType): Redo the type lookup code to match
24297         the needs of System.Reflection.  
24298
24299         The issue is that System.Reflection requires references to nested
24300         types to begin with a "+" sign instead of a dot.  So toplevel
24301         types look like: "NameSpace.TopLevelClass", and nested ones look
24302         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24303         levels. 
24304
24305 2002-09-19  Martin Baulig  <martin@gnome.org>
24306
24307         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24308         says that a method always returns or always throws an exception,
24309         don't report the CS0161.
24310
24311         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24312         set `Returns = new_returns'.
24313
24314 2002-09-19  Martin Baulig  <martin@gnome.org>
24315
24316         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24317         to an enum constant, check for a CS0176.
24318
24319 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24320
24321         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24322         for operators that must be in pairs and report errors.
24323
24324         * ecore.cs (SimpleName.DoResolveType): During the initial type
24325         resolution process, when we define types recursively, we must
24326         check first for types in our current scope before we perform
24327         lookups in the enclosing scopes.
24328
24329         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24330
24331         (Invocation.VerifyArgumentsCompat): Call
24332         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24333         I thought we were supposed to always call this, but there are a
24334         few places in the code where we dont do it.
24335
24336 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24337
24338         * driver.cs: Add support in -linkres and -resource to specify the
24339         name of the identifier.
24340
24341 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24342
24343         * ecore.cs (StandardConversionExists): Sync with the conversion
24344         code: allow anything-* to void* conversions.
24345
24346         (FindMostSpecificSource): Use an Expression argument
24347         instead of a Type, because we might be handed over a Literal which
24348         gets a few more implicit conversions that plain types do not.  So
24349         this information was being lost.
24350
24351         Also, we drop the temporary type-holder expression when not
24352         required.
24353
24354 2002-09-17  Martin Baulig  <martin@gnome.org>
24355
24356         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24357         this is an explicit interface implementation.
24358
24359 2002-09-17  Martin Baulig  <martin@gnome.org>
24360
24361         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24362         different `IndexerName' attributes.
24363
24364         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24365         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24366         virtual CommonResolve().
24367
24368 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24369
24370         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24371         and convert that to the UnderlyingType.
24372
24373         * statement.cs (Foreach.Resolve): Indexers are just like variables
24374         or PropertyAccesses.
24375
24376         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24377         inside quoted strings, we were not doing this before.
24378
24379 2002-09-16  Martin Baulig  <martin@gnome.org>
24380
24381         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24382         resolve it.  This is needed for the definite assignment check of the
24383         instance expression, fixes bug #29846.
24384         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24385
24386 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24387
24388         * parameter.cs: Fix compile error.  Cannot reference static member
24389         from an instance object.  Is this an mcs bug?
24390
24391 2002-09-14  Martin Baulig  <martin@gnome.org>
24392
24393         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24394         multiple times.  Fixes bug #30295, added test-166.cs.
24395
24396 2002-09-14  Martin Baulig  <martin@gnome.org>
24397
24398         * statement.cs (Block.Emit): Don't emit unreachable code.
24399         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24400         `break' statements.
24401         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24402
24403 2002-09-14  Martin Baulig  <martin@gnome.org>
24404
24405         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24406         is set.
24407
24408 2002-09-14  Martin Baulig  <martin@gnome.org>
24409
24410         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24411         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24412         be false on the ms runtime.
24413
24414 2002-09-13  Martin Baulig  <martin@gnome.org>
24415
24416         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24417         the CS0038 error message.
24418
24419 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24420
24421         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24422         constant inside, return it.
24423
24424 2002-09-12  Martin Baulig  <martin@gnome.org>
24425
24426         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24427         implicit conversion can be done between enum types.
24428
24429         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24430         check whether an implicit conversion to the current enum's UnderlyingType
24431         exists and report an error if not.
24432
24433         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24434         without debugging support.
24435
24436         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24437         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24438
24439 2002-09-12  Martin Baulig  <martin@gnome.org>
24440
24441         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24442
24443         * ecore.cs (IMemberExpr.DeclaringType): New property.
24444         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24445         nonstatic member of an outer type (CS0038).
24446
24447 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24448
24449         * driver.cs: Activate the using-error detector at warning level
24450         4 (at least for MS-compatible APIs).
24451
24452         * namespace.cs (VerifyUsing): Small buglett fix.
24453
24454         * pending.cs (PendingImplementation): pass the container pointer. 
24455
24456         * interface.cs (GetMethods): Allow for recursive definition.  Long
24457         term, I would like to move every type to support recursive
24458         definitions, not the current ordering mechanism that we have right
24459         now.
24460
24461         The situation is this: Attributes are handled before interfaces,
24462         so we can apply attributes to interfaces.  But some attributes
24463         implement interfaces, we will now handle the simple cases
24464         (recursive definitions will just get an error).  
24465
24466         * parameter.cs: Only invalidate types at the end if we fail to
24467         lookup all types.  
24468
24469 2002-09-09  Martin Baulig  <martin@gnome.org>
24470
24471         * ecore.cs (PropertyExpr.Emit): Also check for
24472         TypeManager.system_int_array_get_length so this'll also work when
24473         compiling corlib.  Fixes #30003.
24474
24475 2002-09-09  Martin Baulig  <martin@gnome.org>
24476
24477         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24478         and throw an exception if we can't get the type's size.  Fixed #30040,
24479         added test-165.cs.
24480
24481 2002-09-09  Martin Baulig  <martin@gnome.org>
24482
24483         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24484
24485         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24486         context.  Fixes bug #30027.
24487
24488         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24489         virtual functions.  Fixes bug #30043, added test-164.cs.
24490
24491 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24492
24493         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24494
24495 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24496
24497         * driver.cs: Use an object to get the windows codepage since it's not a
24498         static property.
24499
24500 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24501
24502         * statement.cs (For.Emit): for infinite loops (test == null)
24503         return whether there is a break inside, not always "true".
24504
24505         * namespace.cs (UsingEntry): New struct to hold the name of the
24506         using definition, the location where it is defined, and whether it
24507         has been used in a successful type lookup.
24508
24509         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24510         strings.
24511
24512         * decl.cs: ditto.
24513
24514 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24515
24516         * attribute.cs : Fix incorrect code which relied on catching
24517         a NullReferenceException to detect a null being passed in
24518         where an object was expected.
24519
24520 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24521
24522         * statement.cs (Try): flag the catch variable as assigned
24523
24524         * expression.cs (Cast): Simplified by using ResolveType instead of
24525         manually resolving.
24526
24527         * statement.cs (Catch): Fix bug by using ResolveType.
24528
24529 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24530
24531         * expression.cs (BetterConversion): Special case for when we have
24532         a NullLiteral as the argument and we have to choose between string
24533         and object types - we choose string the way csc does.
24534
24535         * attribute.cs (Attribute.Resolve): Catch the
24536         NullReferenceException and report error #182 since the Mono
24537         runtime no more has the bug and having this exception raised means
24538         we tried to select a constructor which takes an object and is
24539         passed a null.
24540
24541 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24542
24543         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24544         message (1502, 1503) when we can't locate a method after overload
24545         resolution. This is much more informative and closes the bug
24546         Miguel reported.
24547
24548         * interface.cs (PopulateMethod): Return if there are no argument
24549         types. Fixes a NullReferenceException bug.
24550
24551         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24552         expressions too. Previously we were checking only in one place for
24553         positional arguments leaving out named arguments.
24554
24555         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24556         type to the enum type is not allowed. Remove code corresponding to
24557         that.
24558
24559         (ConvertNumericExplicit): Allow explicit conversions from
24560         the underlying type to enum type. This precisely follows the spec
24561         and closes a bug filed by Gonzalo.
24562
24563 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24564
24565         * compiler.csproj:
24566         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24567
24568 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24569
24570         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24571         it was important that we stored the right value after the
24572         reduction in `converted'.
24573
24574 2002-09-04  Martin Baulig  <martin@gnome.org>
24575
24576         * location.cs (Location.SymbolDocument): Use full pathnames for the
24577         source files.
24578
24579 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24580
24581         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24582         of the expression resolve mechanism, because that will catch the
24583         SimpleName error failures.
24584
24585         (Conditional): If we can not resolve the
24586         expression, return, do not crash.
24587
24588 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24589
24590         * cs-tokenizer.cs:
24591         (location): display token name instead of its number.
24592
24593 2002-08-28  Martin Baulig  <martin@gnome.org>
24594
24595         * expression.cs (Binary.ResolveOperator): Don't silently return
24596         but return an error if an operator cannot be applied between two
24597         enum types.
24598
24599 2002-08-28  Martin Baulig  <martin@gnome.org>
24600
24601         * class.cs (Constructor.Define): Set the permission attributes
24602         correctly instead of making all constructors public.
24603
24604 2002-08-28  Martin Baulig  <martin@gnome.org>
24605
24606         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24607         for private members before reporting a CS0103; if we find anything,
24608         it's a CS0122.
24609
24610 2002-08-28  Martin Baulig  <martin@gnome.org>
24611
24612         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24613         to check whether `closure_start_type == closure_invocation_type',
24614         we also need to check whether `m.DeclaringType == closure_invocation_type'
24615         before bypassing the permission checks.  We might be accessing
24616         protected/private members from the base class.
24617         (TypeManager.RealMemberLookup): Only set private_ok if private
24618         members were requested via BindingFlags.NonPublic.
24619
24620         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24621
24622         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24623         MethodGroupExpr.IsExplicitImpl if appropriate.
24624         (Invocation.DoResolve): Don't report the CS0120 for explicit
24625         interface implementations.
24626
24627 2002-08-27  Martin Baulig  <martin@gnome.org>
24628
24629         * expression.cs (Invocation.DoResolve): If this is a static
24630         method and we don't have an InstanceExpression, we must report
24631         a CS0120.
24632
24633 2002-08-25  Martin Baulig  <martin@gnome.org>
24634
24635         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24636         `==' between a valuetype and an object.
24637
24638 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24639
24640         * ecore.cs (TypeExpr): Provide a ToString method.
24641
24642 2002-08-24  Martin Baulig  <martin@gnome.org>
24643
24644         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24645         now called proggie.dbg and it's a binary file.
24646
24647 2002-08-23  Martin Baulig  <martin@gnome.org>
24648
24649         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24650
24651 2002-08-23  Martin Baulig  <martin@gnome.org>
24652
24653         * struct.cs (MyStructInfo.ctor): Make this work with empty
24654         structs; it's not allowed to use foreach() on null.
24655
24656 2002-08-23  Martin Baulig  <martin@gnome.org>
24657
24658         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24659         writer the full pathname of the generated assembly.
24660
24661 2002-08-23  Martin Baulig  <martin@gnome.org>
24662
24663         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24664         A `finally' block never returns or breaks; improved handling of
24665         unreachable code.
24666
24667 2002-08-23  Martin Baulig  <martin@gnome.org>
24668
24669         * statement.cs (Throw.Resolve): Allow `throw null'.
24670
24671 2002-08-23  Martin Baulig  <martin@gnome.org>
24672
24673         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24674         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24675         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24676         MemberLookup would return a wrong event if this is an explicit
24677         interface implementation and the class has an event with the same
24678         name.
24679
24680 2002-08-23  Martin Baulig  <martin@gnome.org>
24681
24682         * statement.cs (Block.AddChildVariableNames): New public method.
24683         (Block.AddChildVariableName): Likewise.
24684         (Block.IsVariableNameUsedInChildBlock): Likewise.
24685         (Block.AddVariable): Check whether a variable name has already
24686         been used in a child block.
24687
24688         * cs-parser.jay (declare_local_variables): Mark all variable names
24689         from the current block as being used in a child block in the
24690         implicit block.
24691
24692 2002-08-23  Martin Baulig  <martin@gnome.org>
24693
24694         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24695         find the symbol writer.
24696
24697         * driver.cs: csc also allows the arguments to /define being
24698         separated by commas, not only by semicolons.
24699
24700 2002-08-23  Martin Baulig  <martin@gnome.org>
24701
24702         * interface.cs (Interface.GetMembers): Added static check for events.
24703
24704 2002-08-15  Martin Baulig  <martin@gnome.org>
24705
24706         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24707         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24708
24709         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24710         why the MethodData.EmitDestructor() change was necessary.
24711
24712 2002-08-20  Martin Baulig  <martin@gnome.org>
24713
24714         * class.cs (TypeContainer.FindMembers): Added static check for events.
24715
24716         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24717
24718         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24719         use Type.GetEvents(), not Type.FindMembers().
24720
24721 2002-08-20  Martin Baulig  <martin@gnome.org>
24722
24723         * decl.cs (MemberCache): Added a special method cache which will
24724         be used for method-only searched.  This ensures that a method
24725         search will return a MethodInfo with the correct ReflectedType for
24726         inherited methods.      
24727
24728 2002-08-20  Martin Baulig  <martin@gnome.org>
24729
24730         * decl.cs (DeclSpace.FindMembers): Made this public.
24731
24732 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24733
24734         * delegate.cs: fixed build on windows.
24735         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24736
24737 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24738
24739         * ecore.cs (StandardConversionExists): Return a false
24740         if we are trying to convert the void type to anything else
24741         since that is not allowed.
24742
24743         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24744         we flag error 70 in the event an event is trying to be accessed
24745         directly from outside the declaring type.
24746
24747 2002-08-20  Martin Baulig  <martin@gnome.org>
24748
24749         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24750         MemberCache from typemanager.cs to decl.cs.
24751
24752 2002-08-19  Martin Baulig  <martin@gnome.org>
24753
24754         * class.cs (TypeContainer): Implement IMemberContainer.
24755         (TypeContainer.DefineMembers): Create the MemberCache.
24756         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24757         return public members if BindingFlags.Public was given, check
24758         whether members are static.
24759
24760 2002-08-16  Martin Baulig  <martin@gnome.org>
24761
24762         * decl.cs (DeclSpace.Define): Splitted this in Define and
24763         DefineMembers.  DefineMembers is called first and initializes the
24764         MemberCache.
24765
24766         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24767         DefineMembers() on all our DeclSpaces.
24768
24769         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24770         but call DefineMembers() on all nested interfaces.  We call their
24771         Define() in our new Define() function.
24772
24773         * interface.cs (Interface): Implement IMemberContainer.
24774         (Interface.Define): Moved all code except the attribute stuf to
24775         DefineMembers().
24776         (Interface.DefineMembers): Initialize the member cache.
24777
24778         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24779         need this anymore since we can use MemberCache.FindMembers directly.
24780
24781 2002-08-19  Martin Baulig  <martin@gnome.org>
24782
24783         * typemanager.cs (MemberCache): When creating the cache for an
24784         interface type, add all inherited members.
24785         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24786         to `out bool used_cache' and documented it.
24787         (TypeManager.MemberLookup): If we already used the cache in the first
24788         iteration, we don't need to do the interfaces check.
24789
24790 2002-08-19  Martin Baulig  <martin@gnome.org>
24791
24792         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24793         here from IMemberFinder and don't implement this interface anymore.
24794         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24795
24796         * typemanager.cs (IMemberFinder): This interface is now only used by
24797         classes which actually support the member cache.
24798         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24799         since we only put DeclSpaces into this Hashtable.
24800         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24801         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24802
24803 2002-08-16  Martin Baulig  <martin@gnome.org>
24804
24805         * typemanager.cs (ICachingMemberFinder): Removed.
24806         (IMemberFinder.MemberCache): New property.
24807         (TypeManager.FindMembers): Merged this with RealFindMembers().
24808         This function will never be called from TypeManager.MemberLookup()
24809         so we can't use the cache here, just the IMemberFinder.
24810         (TypeManager.MemberLookup_FindMembers): Check whether the
24811         IMemberFinder has a MemberCache and call the cache's FindMembers
24812         function.
24813         (MemberCache): Rewrote larger parts of this yet another time and
24814         cleaned it up a bit.
24815
24816 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24817
24818         * driver.cs (LoadArgs): Support quoting.
24819
24820         (Usage): Show the CSC-like command line arguments.
24821
24822         Improved a few error messages.
24823
24824 2002-08-15  Martin Baulig  <martin@gnome.org>
24825
24826         * typemanager.cs (IMemberContainer.Type): New property.
24827         (IMemberContainer.IsInterface): New property.
24828
24829         The following changes are conditional to BROKEN_RUNTIME, which is
24830         defined at the top of the file.
24831
24832         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24833         class'es members, but add all members from TypeHandle.ObjectType
24834         if we're an interface.
24835         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24836         is the current type.
24837         (MemberCache.CacheEntry.Container): Removed this field.
24838         (TypeHandle.GetMembers): Include inherited members.
24839
24840 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24841
24842         * typemanager.cs: fixed compilation and added a comment on a field that
24843         is never used.
24844
24845 2002-08-15  Martin Baulig  <martin@gnome.org>
24846
24847         * class.cs (ConstructorInitializer.Resolve): In the
24848         Expression.MemberLookup call, use the queried_type as
24849         invocation_type.
24850
24851         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24852         declared' attribute, it's always true.
24853         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24854         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24855         temporary wrapper for FindMembers which tells MemberLookup whether
24856         members from the base classes are included in the return value.
24857         This will go away soon.
24858         (TypeManager.MemberLookup): Use this temporary hack here; once the
24859         new MemberCache is completed, we don't need to do the DeclaredOnly
24860         looping here anymore since the MemberCache will take care of this.
24861         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24862         (MemberCache): When creating the MemberCache for a class, get
24863         members from the current class and all its base classes.
24864         (MemberCache.CacheEntry.Container): New field.  This is a
24865         temporary hack until the Mono runtime is fixed to distinguish
24866         between ReflectedType and DeclaringType.  It allows us to use MCS
24867         with both the MS runtime and the unfixed Mono runtime without
24868         problems and without accecting performance.
24869         (MemberCache.SearchMembers): The DeclaredOnly looping from
24870         TypeManager.MemberLookup is now done here.      
24871
24872 2002-08-14  Martin Baulig  <martin@gnome.org>
24873
24874         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24875         Type.GetFields on dynamic types but get the fields from the
24876         corresponding TypeContainer.
24877         (MyStructInfo.GetStructInfo): Added check for enum types.
24878
24879         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24880         (MemberList.SyncRoot): Implemented.
24881         (TypeManager.FilterWithClosure): No need to check permissions if
24882         closure_start_type == closure_invocation_type, don't crash if
24883         closure_invocation_type is null.
24884
24885 2002-08-13  Martin Baulig  <martin@gnome.org>
24886
24887         Rewrote TypeContainer.FindMembers to use a member cache.  This
24888         gives us a speed increase of about 35% for the self-hosting MCS
24889         build and of about 15-20% for the class libs (both on GNU/Linux).
24890
24891         * report.cs (Timer): New class to get enhanced profiling.  This
24892         whole class is "TIMER" conditional since it remarkably slows down
24893         compilation speed.
24894
24895         * class.cs (MemberList): New class.  This is an IList wrapper
24896         which we're now using instead of passing MemberInfo[]'s around to
24897         avoid copying this array unnecessarily.
24898         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24899         (ICachingMemberFinder, IMemberContainer): New interface.
24900         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24901         has already been checked, otherwise use it for the name comparision.
24902         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24903         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24904         if possible.  Returns a MemberList, not a MemberInfo [].
24905         (TypeHandle): New class, implements IMemberContainer.  We create
24906         one instance of this class per type, it contains a MemberCache
24907         which is used to do the member lookups.
24908         (MemberCache): New class.  Each instance of this class contains
24909         all members of a type and a name-based hash table.
24910         (MemberCache.FindMembers): This is our new member lookup
24911         function.  First, it looks up all members of the requested name in
24912         the hash table.  Then, it walks this list and sorts out all
24913         applicable members and returns them.
24914
24915 2002-08-13  Martin Baulig  <martin@gnome.org>
24916
24917         In addition to a nice code cleanup, this gives us a performance
24918         increase of about 1.4% on GNU/Linux - not much, but it's already
24919         half a second for the self-hosting MCS compilation.
24920
24921         * typemanager.cs (IMemberFinder): New interface.  It is used by
24922         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24923         Enum, Delegate or Interface.
24924         (TypeManager.finder_to_member_finder): New PtrHashtable.
24925         (TypeManager.finder_to_container): Removed.
24926         (TypeManager.finder_to_delegate): Removed.
24927         (TypeManager.finder_to_interface): Removed.
24928         (TypeManager.finder_to_enum): Removed.
24929
24930         * interface.cs (Interface): Implement IMemberFinder.
24931
24932         * delegate.cs (Delegate): Implement IMemberFinder.
24933
24934         * enum.cs (Enum): Implement IMemberFinder.
24935
24936         * class.cs (TypeContainer): Implement IMemberFinder.
24937
24938 2002-08-12  Martin Baulig  <martin@gnome.org>
24939
24940         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24941
24942 2002-08-12  Martin Baulig  <martin@gnome.org>
24943
24944         * ecore.cs (ITypeExpression): New interface for expressions which
24945         resolve to a type.
24946         (TypeExpression): Renamed to TypeLookupExpression.
24947         (Expression.DoResolve): If we're doing a types-only lookup, the
24948         expression must implement the ITypeExpression interface and we
24949         call DoResolveType() on it.
24950         (SimpleName): Implement the new ITypeExpression interface.
24951         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24952         hack, the situation that we're only looking up types can't happen
24953         anymore when this method is called.  Moved the type lookup code to
24954         DoResolveType() and call it.
24955         (SimpleName.DoResolveType): This ITypeExpression interface method
24956         is now doing the types-only lookup.
24957         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24958         (ResolveFlags): Added MaskExprClass.
24959
24960         * expression.cs (MemberAccess): Implement the ITypeExpression
24961         interface.
24962         (MemberAccess.DoResolve): Added support for a types-only lookup
24963         when we're called via ITypeExpression.DoResolveType().
24964         (ComposedCast): Implement the ITypeExpression interface.
24965
24966         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24967         Expression.Resolve() with ResolveFlags.Type instead.
24968
24969 2002-08-12  Martin Baulig  <martin@gnome.org>
24970
24971         * interface.cs (Interface.Define): Apply attributes.
24972
24973         * attribute.cs (Attribute.ApplyAttributes): Added support for
24974         interface attributes.
24975
24976 2002-08-11  Martin Baulig  <martin@gnome.org>
24977
24978         * statement.cs (Block.Emit): Only check the "this" variable if we
24979         do not always throw an exception.
24980
24981         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24982         whether the property has a set accessor.
24983
24984 2002-08-11  Martin Baulig  <martin@gnome.org>
24985
24986         Added control flow analysis support for structs.
24987
24988         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24989         with control flow analysis turned off.
24990         (IVariable): New interface.
24991         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24992         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24993         (FieldExpr.DoResolve): Resolve the instance expression with flow
24994         analysis turned off and do the definite assignment check after the
24995         resolving when we know what the expression will resolve to.
24996
24997         * expression.cs (LocalVariableReference, ParameterReference):
24998         Implement the new IVariable interface, only call the flow analysis
24999         code if ec.DoFlowAnalysis is true.
25000         (This): Added constructor which takes a Block argument.  Implement
25001         the new IVariable interface.
25002         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
25003         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
25004         This does the definite assignment checks for struct members.
25005
25006         * class.cs (Constructor.Emit): If this is a non-static `struct'
25007         constructor which doesn't have any initializer, call
25008         Block.AddThisVariable() to tell the flow analysis code that all
25009         struct elements must be initialized before control returns from
25010         the constructor.
25011
25012         * statement.cs (MyStructInfo): New public class.
25013         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
25014         argument to this indexer.  If non-zero, check an individual struct
25015         member, not the whole struct.
25016         (FlowBranching.CheckOutParameters): Check struct members.
25017         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
25018         overloaded versions of these methods which take an additional
25019         `int field_idx' argument to check struct members.
25020         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
25021         overloaded versions of these methods which take an additional
25022         `string field_name' argument to check struct member.s
25023         (VariableInfo): Implement the IVariable interface.
25024         (VariableInfo.StructInfo): New public property.  Returns the
25025         MyStructInfo instance of the variable if it's a struct or null.
25026         (Block.AddThisVariable): New public method.  This is called from
25027         Constructor.Emit() for non-static `struct' constructor which do
25028         not have any initializer.  It creates a special variable for the
25029         "this" instance variable which will be checked by the flow
25030         analysis code to ensure that all of the struct's fields are
25031         initialized before control returns from the constructor.
25032         (UsageVector): Added support for struct members.  If a
25033         variable/parameter is a struct with N members, we reserve a slot
25034         in the usage vector for each member.  A struct is considered fully
25035         initialized if either the struct itself (slot 0) or all its
25036         members are initialized.
25037
25038 2002-08-08  Martin Baulig  <martin@gnome.org>
25039
25040         * driver.cs (Driver.MainDriver): Only report an error CS5001
25041         if there were no compilation errors.
25042
25043         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
25044         `UnsafeContext' property to determine whether the parent is in
25045         unsafe context rather than checking the parent's ModFlags:
25046         classes nested in an unsafe class are unsafe as well.
25047
25048 2002-08-08  Martin Baulig  <martin@gnome.org>
25049
25050         * statement.cs (UsageVector.MergeChildren): Distinguish between
25051         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
25052         we return.  Added test17() and test18() to test-154.cs.
25053
25054 2002-08-08  Martin Baulig  <martin@gnome.org>
25055
25056         * typemanager.cs (TypeManager.FilterWithClosure): If we have
25057         Family access, make sure the invoking type isn't a subclass of the
25058         queried type (that'd be a CS1540).
25059
25060         * ecore.cs (Expression.MemberLookup): Added overloaded version of
25061         this method which takes an additional `Type invocation_type'.
25062
25063         * expression.cs (BaseAccess.DoResolve): Use the base type as
25064         invocation and query type.
25065         (MemberAccess.DoResolve): If the lookup failed and we're about to
25066         report a CS0122, try a lookup with the ec.ContainerType - if this
25067         succeeds, we must report a CS1540.
25068
25069 2002-08-08  Martin Baulig  <martin@gnome.org>
25070
25071         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
25072         (MethodGroupExpr): Implement the IMemberExpr interface.
25073
25074         * expression (MemberAccess.ResolveMemberAccess): No need to have
25075         any special code for MethodGroupExprs anymore, they're now
25076         IMemberExprs.   
25077
25078 2002-08-08  Martin Baulig  <martin@gnome.org>
25079
25080         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
25081         Family, FamANDAssem and FamORAssem permissions.
25082         (TypeManager.IsSubclassOrNestedChildOf): New public method.
25083
25084 2002-08-08  Martin Baulig  <martin@gnome.org>
25085
25086         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
25087         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
25088         or loop block.
25089
25090 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
25091
25092         * driver.cs: implemented /resource option to embed managed resources.
25093
25094 2002-08-07  Martin Baulig  <martin@gnome.org>
25095
25096         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
25097         (FieldBase.HasFieldInitializer): New public property.
25098         (FieldBase.GetInitializerExpression): New public method.  Resolves and
25099         returns the field initializer and makes sure it is only resolved once.
25100         (TypeContainer.EmitFieldInitializers): Call
25101         FieldBase.GetInitializerExpression to get the initializer, this ensures
25102         that it isn't resolved multiple times.
25103
25104         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
25105         the resolving process (SimpleName/MemberLookup) that we're currently
25106         emitting a field initializer (which must not access any instance members,
25107         this is an error CS0236).
25108
25109         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
25110         argument, if the `IsFieldInitializer' flag is set, we must report and
25111         error CS0236 and not an error CS0120.   
25112
25113 2002-08-07  Martin Baulig  <martin@gnome.org>
25114
25115         * ecore.cs (IMemberExpr): New public interface.
25116         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
25117         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
25118         if the expression is an IMemberExpr.
25119
25120         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
25121         to be null, implicitly default to `this' if we're non-static in
25122         this case.  Simplified the code a lot by using the new IMemberExpr
25123         interface.  Also fixed bug #28176 here.
25124
25125 2002-08-06  Martin Baulig  <martin@gnome.org>
25126
25127         * cs-parser.jay (SimpleLookup): Removed.  We need to create
25128         ParameterReferences during semantic analysis so that we can do a
25129         type-only search when resolving Cast, TypeOf and SizeOf.
25130         (block): Pass the `current_local_parameters' to the Block's
25131         constructor.
25132
25133         * class.cs (ConstructorInitializer): Added `Parameters parameters'
25134         argument to the constructor.
25135         (ConstructorInitializer.Resolve): Create a temporary implicit
25136         block with the parameters.
25137
25138         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
25139         references here if we aren't doing a type-only search.
25140
25141         * statement.cs (Block): Added constructor which takes a
25142         `Parameters parameters' argument.
25143         (Block.Parameters): New public property.
25144
25145         * support.cs (InternalParameters.Parameters): Renamed `parameters'
25146         to `Parameters' and made it public readonly.
25147
25148 2002-08-06  Martin Baulig  <martin@gnome.org>
25149
25150         * ecore.cs (Expression.Warning): Made this public as well.
25151
25152         * report.cs (Report.Debug): Print the contents of collections.
25153
25154 2002-08-06  Martin Baulig  <martin@gnome.org>
25155
25156         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
25157         used to tell Resolve() which kinds of expressions it may return.
25158         (Expression.Resolve): Added overloaded version of this method which
25159         takes a `ResolveFlags flags' argument.  This can be used to tell
25160         Resolve() which kinds of expressions it may return.  Reports a
25161         CS0118 on error.
25162         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
25163         ResolveFlags.SimpleName.
25164         (Expression.Error118): Added overloaded version of this method which
25165         takes a `ResolveFlags flags' argument.  It uses the flags to determine
25166         which kinds of expressions are allowed.
25167
25168         * expression.cs (Argument.ResolveMethodGroup): New public method.
25169         Resolves an argument, but allows a MethodGroup to be returned.
25170         This is used when invoking a delegate.
25171
25172         * TODO: Updated a bit.
25173
25174 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25175
25176         Fixed compilation with csc.
25177
25178         * ecore.cs: Expression.Error made public. Is this correct? Should
25179         Warning be made public too?
25180
25181         * expression.cs: use ea.Location instead of ea.loc.
25182         [FIXME:  Filed as bug #28607: MCS must report these errors.]
25183
25184 2002-08-06  Martin Baulig  <martin@gnome.org>
25185
25186         * ecore.cs (Expression.loc): Moved the location here instead of
25187         duplicating it in all derived classes.
25188         (Expression.Location): New public property.
25189         (Expression.Error, Expression.Warning): Made them non-static and
25190         removed the location argument.
25191         (Expression.Warning): Added overloaded version which takes an
25192         `int level' argument.
25193         (Expression.Error118): Make this non-static and removed the
25194         expression and location arguments.
25195         (TypeExpr): Added location argument to the constructor.
25196
25197         * expression.cs (StaticCallExpr): Added location argument to
25198         the constructor.
25199         (Indirection, PointerArithmetic): Likewise.
25200         (CheckedExpr, UnCheckedExpr): Likewise.
25201         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25202         (StringPtr): Likewise.
25203
25204
25205 2002-08-05  Martin Baulig  <martin@gnome.org>
25206
25207         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25208
25209         * assign.cs (Assign.DoResolve): Check whether the source
25210         expression is a value or variable.
25211
25212         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25213         while resolving the corresponding blocks.
25214
25215         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25216         an error, don't silently return null.
25217
25218         * statement.cs (Block.AddVariable): Do the error reporting here
25219         and distinguish between CS0128 and CS0136.
25220         (Block.DoResolve): Report all unused labels (warning CS0164).
25221         (LabeledStatement): Pass the location to the constructor.
25222         (LabeledStatement.HasBeenReferenced): New property.
25223         (LabeledStatement.Resolve): Set it to true here.
25224
25225         * statement.cs (Return.Emit): Return success even after reporting
25226         a type mismatch error (CS0126 or CS0127), this is what csc does and
25227         it avoids confusing the users with any consecutive errors.
25228
25229 2002-08-05  Martin Baulig  <martin@gnome.org>
25230
25231         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25232
25233         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25234
25235         * expression.cs (MemberAccess.DoResolve): Silently return if an
25236         error has already been reported.
25237
25238         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25239         error has already been reported.
25240
25241 2002-08-05  Martin Baulig  <martin@gnome.org>
25242
25243         * statement.cs (UsageVector): Only initialize the `parameters'
25244         vector if we actually have any "out" parameters.
25245
25246 2002-08-05  Martin Baulig  <martin@gnome.org>
25247
25248         * expression.cs (Binary.ResolveOperator): When combining delegates,
25249         they must have the same type.
25250
25251 2002-08-05  Martin Baulig  <martin@gnome.org>
25252
25253         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25254         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25255         work with the ms runtime and we also don't need it: if we're a
25256         PropertyBuilder and not in the `indexer_arguments' hash, then we
25257         are a property and not an indexer.
25258
25259         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25260         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25261         since the latter one doesn't work with the ms runtime.
25262
25263 2002-08-03  Martin Baulig  <martin@gnome.org>
25264
25265         Fixed bugs #27998 and #22735.
25266
25267         * class.cs (Method.IsOperator): New public field.
25268         (Method.CheckBase): Report CS0111 if there's already a method
25269         with the same parameters in the current class.  Report CS0508 when
25270         attempting to change the return type of an inherited method.
25271         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25272         and it's not marked abstract or extern.
25273         (PropertyBase): New abstract base class for Property and Indexer.
25274         (PropertyBase.CheckBase): Moved here from Property and made it work
25275         for indexers.
25276         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25277         the same so we can reuse it there.
25278         (Property, Indexer): Derive from PropertyBase.
25279         (MethodSignature.inheritable_property_signature_filter): New delegate
25280         to find properties and indexers.
25281
25282         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25283         argument and improved error reporting.
25284
25285         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25286         EmptyReadOnlyParameters and made it a property.
25287
25288         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25289         version of this method which takes a `PropertyInfo indexer'.
25290         (TypeManager.RegisterIndexer): New method.
25291
25292         * class.cs: Added myself as author of this file :-)
25293
25294 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25295
25296         * class.cs: fixed compilation on windoze.
25297
25298 2002-08-03  Martin Baulig  <martin@gnome.org>
25299
25300         * interface.cs (Interface.GetInterfaceBases): Check whether all
25301         base interfaces are at least as accessible than the current one.
25302
25303         * class.cs (TypeContainer.GetClassBases): Check whether base types
25304         are at least as accessible than the current type.
25305         (TypeContainer.AsAccessible): Implemented and made non-static.
25306         (MemberBase.CheckParameters): Report errors if the accessibility
25307         checks fail.
25308
25309         * delegate.cs (Delegate.Delegate): The default visibility is
25310         internal for top-level types and private for nested types.
25311         (Delegate.Define): Report errors if the accessibility checks fail.
25312
25313         * enum.cs (Enum.Enum): The default visibility is internal for
25314         top-level types and private for nested types.
25315         (Enum.DefineType): Compute the correct visibility.
25316
25317         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25318         function which takes a `bool is_toplevel' instead of a TypeContainer.
25319
25320         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25321         builtin type.
25322
25323 2002-08-02  Martin Baulig  <martin@gnome.org>
25324
25325         * expression.cs (LocalVariableReferenc): Added constructor which
25326         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25327         (LocalVariableReference.IsReadOnly): New property.
25328         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25329         variable is readonly, use our own readonly flag to do this; you can
25330         use the new constructor to get a writable reference to a read-only
25331         variable.
25332
25333         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25334         reference to the local variable.
25335
25336 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25337
25338         * rootcontext.cs (ResolveCore): Also include System.Exception
25339
25340         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25341         we reach an EmptyStatement.
25342
25343         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25344         is also fine.
25345
25346         * expression.cs (Binary.ResolveOperator): Check error result in
25347         two places.
25348
25349         use brtrue/brfalse directly and avoid compares to null.
25350
25351 2002-08-02  Martin Baulig  <martin@gnome.org>
25352
25353         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25354         Fixes bug #28407, added test-155.cs.
25355
25356 2002-08-01  Martin Baulig  <martin@gnome.org>
25357
25358         * class.cs (Event.EmitDefaultMethod): Make this work with static
25359         events.  Fixes #28311, added verify-3.cs.
25360
25361 2002-08-01  Martin Baulig  <martin@gnome.org>
25362
25363         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25364         `is_disposable' fields.
25365         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25366         `hm.is_disposable' if we're using the collection pattern.
25367         (Foreach.EmitCollectionForeach): Use the correct type for the
25368         enumerator's local variable, only emit the try/finally block if
25369         necessary (fixes #27713).
25370
25371 2002-08-01  Martin Baulig  <martin@gnome.org>
25372
25373         * ecore.cs (Expression.report118): Renamed to Error118 and made
25374         it public static.
25375
25376         * statement.cs (Throw.Resolve): Check whether the expression is of
25377         the correct type (CS0118) and whether the type derives from
25378         System.Exception (CS0155).
25379         (Catch.Resolve): New method.  Do the type lookup here and check
25380         whether it derives from System.Exception (CS0155).
25381         (Catch.CatchType, Catch.IsGeneral): New public properties.
25382
25383         * typemanager.cs (TypeManager.exception_type): Added.
25384
25385 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25386
25387         * driver.cs: Updated About function.
25388
25389 2002-07-31  Martin Baulig  <martin@gnome.org>
25390
25391         Implemented Control Flow Analysis.
25392
25393         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25394         (EmitContext.CurrentBranching): Added.
25395         (EmitContext.StartFlowBranching): Added.
25396         (EmitContext.EndFlowBranching): Added.
25397         (EmitContext.KillFlowBranching): Added.
25398         (EmitContext.IsVariableAssigned): Added.
25399         (EmitContext.SetVariableAssigned): Added.
25400         (EmitContext.IsParameterAssigned): Added.
25401         (EmitContext.SetParameterAssigned): Added.
25402         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25403         Added control flow analysis stuff here.
25404
25405         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25406         resolve the expression as lvalue.
25407         (LocalVariableReference.DoResolve): Check whether the variable has
25408         already been assigned.
25409         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25410         the parameter as assigned here.
25411         (ParameterReference.DoResolve): Check whether the parameter has already
25412         been assigned.
25413         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25414         expression as lvalue.
25415
25416         * statement.cs (FlowBranching): New class for the flow analysis code.
25417         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25418         (LabeledStatement.IsDefined): New public property.
25419         (LabeledStatement.AddUsageVector): New public method to tell flow
25420         analyis that the label may be reached via a forward jump.
25421         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25422         flow analysis.
25423         (VariableInfo.Number): New public field.  This is used by flow analysis
25424         to number all locals of a block.
25425         (Block.CountVariables): New public property.  This is the number of
25426         local variables in this block (including the locals from all parent
25427         blocks).
25428         (Block.EmitMeta): Number all the variables.
25429
25430         * statement.cs: Added flow analysis support to all classes.
25431
25432 2002-07-31  Martin Baulig  <martin@gnome.org>
25433
25434         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25435         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25436         then use this argument.
25437
25438         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25439
25440         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25441         use this to specify /define options.
25442
25443 2002-07-29  Martin Baulig  <martin@gnome.org>
25444
25445         * statement.cs (Fixed): Moved all code that does variable lookups
25446         and resolvings from Emit to Resolve.
25447
25448         * statement.cs (For): Moved all code that does variable lookups
25449         and resolvings from Emit to Resolve.
25450
25451         * statement.cs (Using): Moved all code that does variable lookups
25452         and resolvings from Emit to Resolve.
25453
25454 2002-07-29  Martin Baulig  <martin@gnome.org>
25455
25456         * attribute.cs (Attribute.Resolve): Explicitly catch a
25457         System.NullReferenceException when creating the
25458         CustromAttributeBuilder and report a different warning message.
25459
25460 2002-07-29  Martin Baulig  <martin@gnome.org>
25461
25462         * support.cs (ParameterData.ParameterName): Added method to
25463         get the name of a parameter.
25464
25465         * typemanager.cs (TypeManager.IsValueType): New public method.
25466
25467 2002-07-29  Martin Baulig  <martin@gnome.org>
25468
25469         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25470         is a flag which specifies that it's either ref or out.
25471         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25472         the out parameter to `out Parameter.Modifier mod', also set the
25473         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25474
25475         * support.cs (InternalParameters.ParameterModifier): Distinguish
25476         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25477         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25478
25479         * expression.cs (Argument.GetParameterModifier): Distinguish
25480         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25481         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25482
25483 2002-07-29  Martin Baulig  <martin@gnome.org>
25484
25485         * expression.cs (ParameterReference.ParameterReference): Added
25486         `Location loc' argument to the constructor.
25487
25488         * cs-parser.jay: Pass location to ParameterReference.
25489
25490 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25491
25492         * statement.cs (Try): Initialize the location.
25493
25494         * cs-parser.jay: pass location to Try.
25495
25496         * expression.cs (Unary.Reduce): Change the prototype to return
25497         whether a constant fold could be performed or not.  The result is
25498         returned in an out parameters.  In the case of Indirection and
25499         AddressOf, we want to perform the full tests.
25500
25501 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25502
25503         * statement.cs (Statement.Emit): Flag dead code.
25504
25505 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25506
25507         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25508
25509 2002-07-27  Martin Baulig  <martin@gnome.org>
25510
25511         * class.cs (MethodData.Define): Put back call to
25512         TypeManager.AddMethod(), accidentally commented this out.
25513
25514         * report.cs (Debug): New public method to print debugging information,
25515         this is `[Conditional ("DEBUG")]'.
25516
25517 2002-07-26  Martin Baulig  <martin@gnome.org>
25518
25519         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25520         (switch_statement): Push the current_block to the switch_stack and
25521         pop it again when we're done with the switch.
25522         (switch_section): The new block is a child of the current_block.
25523         Fixes bug #24007, added test-152.cs.
25524
25525 2002-07-27  Martin Baulig  <martin@gnome.org>
25526
25527         * expression.cs (Invocation.EmitArguments): When calling a varargs
25528         function with only its fixed arguments, we need to pass an empty
25529         array.
25530
25531 2002-07-27  Martin Baulig  <martin@gnome.org>
25532
25533         Mono 0.13 has been released.
25534
25535 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25536
25537         * driver.cs: Rename --resource to --linkres, because that is what
25538         we do currently, we dont support --resource yet.
25539
25540         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25541
25542 2002-07-25  Martin Baulig  <martin@gnome.org>
25543
25544         * class.cs (MethodData): New public class.  This is a `method builder'
25545         class for a method or one accessor of a Property/Indexer/Event.
25546         (MethodData.GetMethodFlags): Moved here from MemberBase.
25547         (MethodData.ApplyAttributes): Likewise.
25548         (MethodData.ApplyObsoleteAttribute): Likewise.
25549         (MethodData.ApplyConditionalAttribute): Likewise.
25550         (MethodData.ApplyDllImportAttribute): Likewise.
25551         (MethodData.CheckAbstractAndExternal): Likewise.
25552         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25553         (MethodData.Emit): Formerly known as Method.Emit().
25554         (MemberBase): Moved everything which was specific to a single
25555         accessor/method to MethodData.
25556         (Method): Create a new MethodData and call Define() and Emit() on it.
25557         (Property, Indexer, Event): Create a new MethodData objects for each
25558         accessor and call Define() and Emit() on them.
25559
25560 2002-07-25  Martin Baulig  <martin@gnome.org>
25561
25562         Made MethodCore derive from MemberBase to reuse the code from there.
25563         MemberBase now also checks for attributes.
25564
25565         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25566         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25567         as virtual.
25568         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25569         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25570         (MemberBase.ApplyAttributes): New virtual method; applies the
25571         attributes to a method or accessor.
25572         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25573         (MemberBase.ApplyConditionalAttribute): Likewise.
25574         (MemberBase.ApplyDllImportAttribute): Likewise.
25575         (MemberBase.CheckAbstractAndExternal): Likewise.
25576         (MethodCore.ParameterTypes): This is now a property instead of a
25577         method, it's initialized from DoDefineParameters().
25578         (MethodCore.ParameterInfo): Removed the set accessor.
25579         (MethodCore.DoDefineParameters): New protected virtual method to
25580         initialize ParameterTypes and ParameterInfo.
25581         (Method.GetReturnType): We can now simply return the MemberType.
25582         (Method.GetMethodFlags): Override the MemberBase version and add
25583         the conditional flags.
25584         (Method.CheckBase): Moved some code from Define() here, call
25585         DoDefineParameters() here.
25586         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25587         here to avoid some larger code duplication.
25588         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25589         ensure that abstract and external accessors don't declare a body.
25590
25591         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25592         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25593         lookup in the attribute's parent classes, so we need to abort as soon
25594         as we found the first match.
25595         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25596         the attribute has no arguments.
25597
25598         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25599         of a Method.
25600
25601 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25602
25603         * cs-parser.jay: reverted previous patch.
25604
25605 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25606
25607         * cs-parser.jay: fixed bug #22119.
25608
25609 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25610
25611         * attribute.cs: fixed compilation. The error was:
25612         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25613         be assigned to before control leaves the current method."
25614         [FIXME:  Filed as bug #28186: MCS must report this error.]
25615
25616 2002-07-25  Martin Baulig  <martin@gnome.org>
25617
25618         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25619         method to pull the condition name ouf of a Conditional attribute.
25620         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25621         the obsolete message and error flag out of an Obsolete attribute.
25622
25623         * class.cs (Method.GetMethodFlags): New public method to get the
25624         TypeManager.MethodFlags for this method.
25625         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25626         private methods.
25627         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25628         if we're overriding a virtual function, set the new private variable
25629         `parent_method'; call the new TypeManager.AddMethod().
25630
25631         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25632         the MethodBuilder and the Method in a PtrHashtable.
25633         (TypeManager.builder_to_method): Added for this purpose.
25634         (TypeManager.MethodFlags): Added IsObsoleteError.
25635         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25636         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25637         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25638         the message from the attribute.
25639
25640 2002-07-24  Martin Baulig  <martin@gnome.org>
25641
25642         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25643         preprocessor directives, ensure that the argument to #define/#undef is
25644         exactly one identifier and that it's actually an identifier.
25645
25646         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25647         did not work ....
25648
25649 2002-07-24  Martin Baulig  <martin@gnome.org>
25650
25651         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25652         initialize it to TypeManager.object_type in the constructor.
25653         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25654         of the `hm.get_current' method if we're using the collection pattern.
25655         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25656         for the explicit conversion to make it work when we're using the collection
25657         pattern and the `Current' property has a different return type than `object'.
25658         Fixes #27713.
25659
25660 2002-07-24  Martin Baulig  <martin@gnome.org>
25661
25662         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25663         does not match, but don't report any errors.  This method is called in
25664         order for all methods in a MethodGroupExpr until a matching method is
25665         found, so we don't want to bail out if the first method doesn't match.
25666         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25667         matches, report the 123.  Fixes #28070.
25668
25669 2002-07-24  Martin Baulig  <martin@gnome.org>
25670
25671         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25672         TypeManager.TypeToCoreType() to the top of the method so the
25673         following equality checks will work.  Fixes #28107.
25674
25675 2002-07-24  Martin Baulig  <martin@gnome.org>
25676
25677         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25678         operand is of type uint, and the other operand is of type sbyte,
25679         short or int, the operands are converted to type long." -
25680         Actually do what this comment already told us.  Fixes bug #28106,
25681         added test-150.cs.
25682
25683 2002-07-24  Martin Baulig  <martin@gnome.org>
25684
25685         * class.cs (MethodBase): New abstract class.  This is now a base
25686         class for Property, Indexer and Event to avoid some code duplication
25687         in their Define() and DefineMethods() methods.
25688         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25689         generic methods for Define() and DefineMethods().
25690         (FieldBase): Derive from MemberBase, not MemberCore.
25691         (Property): Derive from MemberBase, not MemberCore.
25692         (Property.DefineMethod): Moved all the code from this method to the
25693         new MethodBase.DefineAccessor(), just call it with appropriate
25694         argumetnts.
25695         (Property.Define): Call the new Property.DoDefine(), this does some
25696         sanity checks and we don't need to duplicate the code everywhere.
25697         (Event): Derive from MemberBase, not MemberCore.
25698         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25699         accessors, this will also make them work with interface events.
25700         (Indexer): Derive from MemberBase, not MemberCore.
25701         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25702         (Indexer.Define): Use the new MethodBase functions.
25703
25704         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25705         argument to the constructor.
25706         (Interface.FindMembers): Added support for interface events.
25707         (Interface.PopluateEvent): Implemented.
25708
25709         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25710
25711 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25712
25713         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25714         but this is required to check for a method name being the same as
25715         the containing class.  
25716
25717         Handle this now.
25718
25719 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25720
25721         * interface.cs: initialize variable.
25722
25723 2002-07-23  Martin Baulig  <martin@gnome.org>
25724
25725         Implemented the IndexerName attribute in interfaces.
25726
25727         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25728         name if this is an explicit interface implementation.
25729         (Indexer.InterfaceIndexerName): New public variable.  If we're
25730         implementing an interface indexer, this is the IndexerName in that
25731         interface.  Otherwise, it's the IndexerName.
25732         (Indexer.DefineMethod): If we're implementing interface indexer,
25733         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25734         and Pending.ImplementIndexer methods.
25735         (Indexer.Define): Also define the PropertyBuilder if we're
25736         implementing an interface indexer and this is neither an explicit
25737         interface implementation nor do the IndexerName match the one in
25738         the interface.
25739
25740         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25741         If a method is defined here, then we always need to create a proxy
25742         for it.  This is used when implementing interface indexers.
25743         (Pending.IsInterfaceIndexer): New public method.
25744         (Pending.ImplementIndexer): New public method.
25745         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25746         This is used when implementing interface indexers to define a proxy
25747         if necessary.
25748         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25749         define a proxy if necessary.
25750
25751         * interface.cs (Interface.IndexerName): New public variable.
25752         (Interface.PopulateIndexer): Set the IndexerName.
25753         (Interface.DefineIndexers): New private method.  Populate all the
25754         indexers and make sure their IndexerNames match.
25755
25756         * typemanager.cs (IndexerPropertyName): Added support for interface
25757         indexers.
25758
25759 2002-07-22  Martin Baulig  <martin@gnome.org>
25760
25761         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25762         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25763         ret if HasReturnLabel.
25764         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25765         variables.
25766
25767         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25768         and set the ec.LoopBeginTryCatchLevel.
25769         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25770         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25771         the current ec.TryCatchLevel, the branch goes out of an exception
25772         block.  In this case, we need to use Leave and not Br.
25773
25774 2002-07-22  Martin Baulig  <martin@gnome.org>
25775
25776         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25777         block unless the block does not always return or it is contained in
25778         another try { ... } catch { ... } block.  Fixes bug #26506.
25779         Added verify-1.cs to the test suite.
25780
25781 2002-07-22  Martin Baulig  <martin@gnome.org>
25782
25783         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25784         then we do not always return.  Fixes bug #24985.
25785
25786 2002-07-22  Martin Baulig  <martin@gnome.org>
25787
25788         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25789         lookup on a per-class level; ie. walk up the class hierarchy until we
25790         found at least one applicable method, then choose the best among them.
25791         Fixes bug #24463 and test-29.cs.
25792
25793 2002-07-22  Martin Baulig  <martin@gnome.org>
25794
25795         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25796         return types of the methods.  The return type is not part of the
25797         signature and we must not check it to make the `new' modifier work.
25798         Fixes bug #27999, also added test-147.cs.
25799         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25800
25801         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25802         on the method's return type.
25803
25804 2002-07-21  Martin Baulig  <martin@gnome.org>
25805
25806         * assign.cs: Make this work if the rightmost source is a constant and
25807         we need to do an implicit type conversion.  Also adding a few more tests
25808         to test-38.cs which should have caught this.
25809
25810         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25811         target in the makefile for this.  The makefile.gnu is primarily intended
25812         for end-users who don't want to debug the compiler.
25813
25814 2002-07-21  Martin Baulig  <martin@gnome.org>
25815
25816         * assign.cs: Improved the Assign class so it can now handle embedded
25817         assignments (X = Y = Z = something).  As a side-effect this'll now also
25818         consume less local variables.  test-38.cs now passes with MCS, added
25819         a few new test cases to that test.
25820
25821 2002-07-20  Martin Baulig  <martin@gnome.org>
25822
25823         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25824         instructions.  Fixes bug #27977, also added test-146.cs.
25825
25826 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25827
25828         * cs-tokenizer.cs: fixed getHex ().
25829
25830 2002-07-19  Martin Baulig  <martin@gnome.org>
25831
25832         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25833         not Type.GetType() to lookup the array type.  This is needed when
25834         we're constructing an array of a user-defined type.
25835         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25836         single-dimensional arrays, but also for single-dimensial arrays of
25837         type decimal.
25838
25839 2002-07-19  Martin Baulig  <martin@gnome.org>
25840
25841         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25842         this function is called, it's not allowed to share LocalBuilders
25843         among ILGenerators.
25844
25845 2002-07-19  Martin Baulig  <martin@gnome.org>
25846
25847         * expression.cs (Argument.Resolve): Report an error 118 when trying
25848         to pass a type as argument.
25849
25850 2002-07-18  Martin Baulig  <martin@gnome.org>
25851
25852         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25853         Conv_R_Un for the signed `long' type.
25854
25855 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25856
25857         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25858         `expr' for the temporary result, as that will fail if we do
25859         multiple resolves on the same expression.
25860
25861 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25862
25863         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25864         ec.TypeContainer for looking up aliases. 
25865
25866         * class.cs (TypeContainer): Remove LookupAlias from here.
25867
25868         * decl.cs (DeclSpace); Move here.
25869
25870 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25871
25872         * class.cs (FindMembers): Only call filter if the constructor
25873         bulider is not null.
25874
25875         Also handle delegates in `NestedTypes' now.  Now we will perform
25876         type lookups using the standard resolution process.  This also
25877         fixes a bug.
25878
25879         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25880         This uses Expressions (the limited kind that can be parsed by the
25881         tree) instead of strings.
25882
25883         * expression.cs (ComposedCast.ToString): Implement, used to flag
25884         errors since now we have to render expressions.
25885
25886         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25887         FormArrayType. 
25888
25889         * ecore.cs (SimpleName.ToString): ditto.
25890
25891         * cs-parser.jay: Instead of using strings to assemble types, use
25892         Expressions to assemble the type (using SimpleName, ComposedCast,
25893         MemberAccess).  This should fix the type lookups in declarations,
25894         because we were using a different code path for this.
25895
25896         * statement.cs (Block.Resolve): Continue processing statements
25897         even when there is an error.
25898
25899 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25900
25901         * class.cs (Event.Define): Also remove the `remove' method from
25902         the list of pending items.
25903
25904         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25905         generate more compact code. 
25906
25907 2002-07-17  Martin Baulig  <martin@gnome.org>
25908
25909         * const.cs (Const.LookupConstantValue): Add support for constant
25910         `unchecked' and `checked' expressions.
25911         Also adding test case test-140.cs for this.
25912
25913 2002-07-17  Martin Baulig  <martin@gnome.org>
25914
25915         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25916         check whether mi.ReturnType implements the IEnumerator interface; the
25917         `==' and the IsAssignableFrom() will fail in this situation.
25918
25919 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25920
25921         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25922         here too.
25923
25924 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25925
25926         * expression.cs: fixed bug #27811.
25927
25928 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25929
25930         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25931         Molaro: when we are a ref, the value already contains a pointer
25932         value, do not take the address of it.
25933
25934 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25935         * removed mb-parser.jay and mb-tokenizer.cs
25936
25937 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25938
25939         * expression.cs: check against the building corlib void type.
25940
25941 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25942
25943         * ecore.cs: fix for valuetype static readonly fields: when 
25944         initializing them, we need their address, not the address of a copy.
25945
25946 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25947
25948         * typemanager.cs: register also enum_type in corlib.
25949
25950 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25951
25952         * class.cs: allow calling this (but not base) initializers in structs.
25953
25954 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25955
25956         * ecore.cs: make sure we compare against the building base types
25957         in GetTypeSize ().
25958
25959 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25960
25961         * typemanager.cs: fix TypeToCoreType() to handle void and object
25962         (corlib gets no more typerefs after this change).
25963
25964 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25965
25966         * expression.cs (ArrayCreation.EmitArrayArguments): use
25967         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25968
25969         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25970         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25971         array indexes, the runtime actually forbids them.
25972
25973         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25974         for array arguments here.
25975
25976         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25977         instead of the default for ValueTypes.
25978
25979         (New.DoEmit): Use IsValueType instead of
25980         IsSubclassOf (value_type)
25981         (New.DoResolve): ditto.
25982         (Invocation.EmitCall): ditto.
25983
25984         * assign.cs (Assign): ditto.
25985
25986         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25987         Statements *are* currently doing part of their resolution during
25988         Emit.  
25989
25990         Expressions do always resolve during resolve, but statements are
25991         only required to propagate resolution to their children.
25992
25993 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25994
25995         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25996
25997         (LoadAssembly): Do not add the dll if it is already specified
25998
25999         (MainDriver): Add the System directory to the link path at the end,
26000         after all the other -L arguments. 
26001
26002         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
26003         wrong opcode for loading bytes and bools (ldelem.i1 instead of
26004         ldelem.u1) and using the opposite for sbytes.
26005
26006         This fixes Digger, and we can finally run it.
26007
26008         * driver.cs (UnixParseOption): Move the option parsing here.  
26009         (CSCParseOption): Implement CSC-like parsing of options.
26010
26011         We now support both modes of operation, the old Unix way, and the
26012         new CSC-like way.  This should help those who wanted to make cross
26013         platform makefiles.
26014
26015         The only thing broken is that /r:, /reference: and /lib: are not
26016         implemented, because I want to make those have the same semantics
26017         as the CSC compiler has, and kill once and for all the confussion
26018         around this.   Will be doing this tomorrow.
26019
26020         * statement.cs (Unsafe.Resolve): The state is checked during
26021         resolve, not emit, so we have to set the flags for IsUnsfe here.
26022
26023 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26024
26025         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
26026         not catch the Error_ObjectRefRequired in SimpleName (as it is
26027         possible to have a class/instance variable name that later gets
26028         deambiguated), we have to check this here.      
26029
26030 2002-07-10  Ravi Pratap  <ravi@ximian.com>
26031
26032         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
26033         make static and put into Expression.
26034
26035         (Event.Define): Register the private field of the event with the 
26036         TypeManager so that GetFieldFromEvent can get at it.
26037
26038         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
26039         keep track of the private field associated with an event which
26040         has no accessors.
26041
26042         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
26043         private field.
26044
26045         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
26046
26047 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26048
26049         * expression.cs (Binary.EmitBranchable): this routine emits the
26050         Binary expression in a branchable context.  This basically means:
26051         we need to branch somewhere, not just get the value on the stack.
26052
26053         This works together with Statement.EmitBoolExpression.
26054
26055         * statement.cs (Statement.EmitBoolExpression): Use
26056         EmitBranchable. 
26057
26058 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
26059
26060         * statement.cs (For): Reduce the number of jumps in loops.
26061
26062         (For): Implement loop inversion for the For statement.
26063
26064         (Break): We can be breaking out of a Try/Catch controlled section
26065         (foreach might have an implicit try/catch clause), so we need to
26066         use Leave instead of Br.
26067
26068         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
26069         now).  If the instace expression supports IMemoryLocation, we use
26070         the AddressOf method from the IMemoryLocation to extract the
26071         address instead of emitting the instance.
26072
26073         This showed up with `This', as we were emitting the instance
26074         always (Emit) instead of the Address of This.  Particularly
26075         interesting when This is a value type, as we dont want the Emit
26076         effect (which was to load the object).
26077
26078 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
26079
26080         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
26081
26082         * statement.cs (Checked): Set the CheckedState during the resolve
26083         process too, as the ConvCast operations track the checked state on
26084         the resolve process, and not emit.
26085
26086         * cs-parser.jay (namespace_member_declaration): Flag that we have
26087         found a declaration when we do.  This is used to flag error 1529
26088
26089         * driver.cs: Report ok when we display the help only.
26090
26091 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
26092
26093         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
26094
26095 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
26096
26097         * cs-tokenizer.cs (define): We also have to track locally the
26098         defines.  AllDefines is just used for the Conditional Attribute,
26099         but we also need the local defines for the current source code. 
26100
26101 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
26102
26103         * statement.cs (While, For, Do): These loops can exit through a
26104         Break statement, use this information to tell whether the
26105         statement is the last piece of code.
26106
26107         (Break): Flag that we break.
26108
26109         * codegen.cs (EmitContexts): New `Breaks' state variable.
26110
26111 2002-07-03  Martin Baulig  <martin@gnome.org>
26112
26113         * class.cs (TypeContainer.MethodModifiersValid): Allow override
26114         modifiers in method declarations in structs.  Otherwise, you won't
26115         be able to override things like Object.Equals().
26116
26117 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26118
26119         * class.cs (Method, Property, Indexer): Do not allow the public
26120         modifier to be used in explicit interface implementations.
26121
26122         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
26123         override modifiers in method declarations in structs
26124
26125 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
26126
26127         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
26128         integer or real overflow, report an error
26129
26130 2002-07-02  Martin Baulig  <martin@gnome.org>
26131
26132         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
26133         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
26134         to tell the runtime about our newly created System.Object and
26135         System.ValueType types.
26136
26137 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26138
26139         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
26140         struct instead of Ldarg/Starg.
26141
26142 2002-07-02  Martin Baulig  <martin@gnome.org>
26143
26144         * expression.cs (Indirection.Indirection): Call
26145         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
26146
26147 2002-07-02  Martin Baulig  <martin@gnome.org>
26148
26149         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
26150         ValueType, call TypeManager.TypeToCoreType() on it.
26151         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
26152         the OpCodes.Newarr argument.
26153
26154 2002-07-02  Martin Baulig  <martin@gnome.org>
26155
26156         * expression.cs (Invocation.EmitCall): When compiling corlib,
26157         replace all calls to the system's System.Array type to calls to
26158         the newly created one.
26159
26160         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
26161         System.Array methods.
26162         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
26163         from the system's System.Array type which must be replaced.
26164
26165 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
26166
26167         * typemanager.cs: load unverifiable_code_ctor so we can build
26168         corlib using the correct type. Avoid using GetTypeCode() with
26169         TypeBuilders.
26170         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
26171         TypeManager.object_type to allow building corlib.
26172
26173 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
26174
26175         * ecore.cs: handle System.Enum separately in LoadFromPtr().
26176
26177 2002-07-01  Martin Baulig  <martin@gnome.org>
26178
26179         * class.cs: Make the last change actually work, we need to check
26180         whether `ifaces != null' to avoid a crash.
26181
26182 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26183
26184         * class.cs: when we build structs without fields that implement
26185         interfaces, we need to add the interfaces separately, since there is
26186         no API to both set the size and add the interfaces at type creation
26187         time.
26188
26189 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26190
26191         * expression.cs: the dimension arguments to the array constructors
26192         need to be converted if they are a long.
26193
26194 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26195
26196         * class.cs: don't emit ldarg.0 if there is no parent constructor
26197         (fixes showstopper for corlib).
26198
26199 2002-06-29  Martin Baulig  <martin@gnome.org>
26200
26201         MCS now compiles corlib on GNU/Linux :-)
26202
26203         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26204         ie. check for MethodImplOptions.InternalCall.
26205
26206         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26207         and TypeManager.attribute_type are null, so we must explicitly check
26208         whether parent is not null to find out whether it's an attribute type.
26209         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26210         and SetBuilder, not only if the property is neither abstract nor external.
26211         This is necessary to set the MethodImplOptions on the accessor methods.
26212         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26213         SetBuilder, see Property.Emit().
26214
26215         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26216         populate "System.Object", "System.ValueType" and "System.Attribute" since
26217         they've already been populated from BootCorlib_PopulateCoreTypes().
26218
26219 2002-06-29  Martin Baulig  <martin@gnome.org>
26220
26221         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26222         is the NullLiteral, we also need to make sure that target_type is not
26223         an enum type.   
26224
26225 2002-06-29  Martin Baulig  <martin@gnome.org>
26226
26227         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26228         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26229         before calling BootstrapCorlib_ResolveDelegate ().
26230
26231 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26232
26233         * statement.cs: fixed build-breaker. All tests passed ok.
26234
26235 2002-06-27  Martin Baulig  <martin@gnome.org>
26236
26237         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26238         for System.Decimal when compiling corlib.
26239
26240 2002-06-27  Martin Baulig  <martin@gnome.org>
26241
26242         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26243         switch blocks which contain nothing but a default clause.
26244
26245 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26246
26247        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26248
26249 2002-06-27  Martin Baulig  <martin@gnome.org>
26250
26251         * ecore.cs (PropertyExpr.PropertyExpr): Call
26252         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26253
26254         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26255         is already a TypeBuilder.
26256
26257 2002-06-27  Martin Baulig  <martin@gnome.org>
26258
26259         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26260         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26261         the "from an array-type to System.Array" case.  This makes it work
26262         when compiling corlib.
26263
26264 2002-06-27  Martin Baulig  <martin@gnome.org>
26265
26266         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26267         non-static PropertyExpr, set its InstanceExpression.  This makes
26268         the `ICollection.Count' property work in System/Array.cs.
26269
26270 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26271
26272         * driver.cs: Made error handling more consistent.  Errors now
26273         tracked by Report class, so many methods which used to return int
26274         now return void.  Main() now prints success/failure and 
26275         errors/warnings message.
26276
26277         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26278         the magic number return values (123 and 124).  Now, if the
26279         expected error occurs, the compiler exits with success (exit value
26280         0).  If the compilation completes without seeing that particular
26281         error, the compiler exits with failure (exit value 1).  The
26282         makefile in mcs/errors has been changed to handle the new behaviour.
26283
26284         * report.cs: Made 'expected error' number a property and renamed
26285         it from 'Probe' to 'ExpectedError'.
26286
26287         * genericparser.cs: Removed error handling support, since it is
26288         now all done by Report class.
26289
26290         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26291         class, so parse() no longer returns an int.
26292
26293         * namespace.cs: Use Report.Error instead of GenericParser.error
26294
26295 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26296
26297         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26298         TypeContainer.AddOperator): At the front of the list put the
26299         explicit implementations, so they get resolved/defined first. 
26300
26301 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26302
26303         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26304         interface type is implemented by this TypeContainer.  Used during
26305         explicit interface implementation.
26306
26307         (Property.Define, Indexer.Define, Method.Define): Validate that
26308         the given interface in the explicit implementation is one of the
26309         base classes for the containing type.
26310
26311         Also if we are explicitly implementing an interface, but there is
26312         no match in the pending implementation table, report an error.
26313
26314         (Property.Define): Only define the property if we are
26315         not explicitly implementing a property from an interface.  Use the
26316         correct name also for those properties (the same CSC uses,
26317         although that is really not needed).
26318
26319         (Property.Emit): Do not emit attributes for explicitly implemented
26320         properties, as there is no TypeBuilder.
26321
26322         (Indexer.Emit): ditto.
26323
26324         Hiding then means that we do not really *implement* a pending
26325         implementation, which makes code fail.
26326
26327 2002-06-22  Martin Baulig  <martin@gnome.org>
26328
26329         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26330         the return value of Object.GetType().  [FIXME: we need to do this whenever
26331         we get a type back from the reflection library].
26332
26333 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26334
26335         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26336
26337 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26338
26339         * attribute.cs: Return null if we can not look up the type.
26340
26341         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26342         the interface types found.
26343
26344         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26345         interface types found.
26346
26347         * typemanager.cs (GetInterfaces): Make this routine returns alll
26348         the interfaces and work around the lame differences between
26349         System.Type and System.Reflection.Emit.TypeBuilder in the results
26350         result for GetInterfaces.
26351
26352         (ExpandInterfaces): Given an array of interface types, expand and
26353         eliminate repeated ocurrences of an interface.  This expands in
26354         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26355         be IA, IB, IC.
26356
26357 2002-06-21  Martin Baulig  <martin@gnome.org>
26358
26359         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26360         on System.Enum.
26361
26362 2002-06-21  Martin Baulig  <martin@gnome.org>
26363
26364         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26365         and called with one of the core types, return the corresponding typebuilder for
26366         that type.
26367
26368         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26369         element type.
26370
26371 2002-06-21  Martin Baulig  <martin@gnome.org>
26372
26373         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26374         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26375         (Expression.ConvertReferenceExplicit): Likewise.
26376
26377         * expression.cs (ElementAccess.DoResolve): Likewise.
26378         (ElementAccess.DoResolveLValue): Likewise.
26379
26380 2002-06-10  Martin Baulig  <martin@gnome.org>
26381
26382         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26383         add the "value" parameter to the parameter list.
26384
26385         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26386         to our caller.
26387
26388 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26389
26390         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26391         the argument to an int, uint, long or ulong, per the spec.  Also
26392         catch negative constants in array creation.
26393
26394 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26395
26396         * class.cs: do not allow the same interface to appear twice in
26397         the definition list.
26398
26399 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26400
26401         * ecore.cs: don't use ldlen with System.Array.
26402
26403 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26404
26405         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26406
26407 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26408
26409         * modifiers.cs: produce correct field attributes for protected
26410         internal. Easy fix so miguel can work on ther harder stuff:-)
26411
26412 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26413
26414         * pending.cs: New file.  Move the code from class.cs here.
26415         Support clearning the pending flag for all methods (when not doing
26416         explicit interface implementation).
26417
26418 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26419
26420         * rootcontext.cs: added a couple more types needed to bootstrap.
26421
26422 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26423
26424         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26425         constructor in the type, instead of any constructor in the type
26426         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26427         a bug in the Mono runtime when applying the params attribute). 
26428
26429 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26430         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26431
26432 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26433
26434         * expression.cs (Unary.ResolveOperator): Use TypeManager
26435         to resolve the type.
26436
26437 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26438
26439         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26440         attached.
26441
26442         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26443         with each member too.
26444
26445         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26446         field builders too - this takes care of the enum member case.
26447
26448 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26449
26450         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26451         address-of operator on both value types and pointers.
26452
26453 2002-06-10  Martin Baulig  <martin@gnome.org>
26454
26455         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26456         PropertyBuilder to the `property_builders' list.
26457
26458         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26459         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26460         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26461         find any indexers which are inherited from an interface.
26462
26463 2002-06-09  Martin Baulig  <martin@gnome.org>
26464
26465         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26466         the same type as the constant if necessary.  There's also a test-130.cs
26467         for this.
26468
26469         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26470
26471         * typemanager.cs (TypeManager.ChangeType): Previously known as
26472         Enum.ChangeEnumType().
26473
26474 2002-06-09  Martin Baulig  <martin@gnome.org>
26475
26476         * expression.cs (Cast.TryReduce): Added support for consts.
26477
26478 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26479
26480         * class.cs (Accessor): Hold attributes information so we can pass
26481         it along.
26482
26483         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26484         Modify to pass in attributes attached to the methods.
26485
26486         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26487
26488         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26489         to handle the Accessor kind :-)
26490
26491         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26492
26493 2002-06-08  Martin Baulig  <martin@gnome.org>
26494
26495         * expression.cs (Unary.TryReduceNegative): Added support for
26496         ULongConstants.
26497
26498 2002-06-08  Martin Baulig  <martin@gnome.org>
26499
26500         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26501         name can't be found in the `defined_names' - the caller will do a
26502         MemberLookup in this case and thus find methods in System.Enum
26503         such as Enum.IsDefined().
26504
26505 2002-06-08  Martin Baulig  <martin@gnome.org>
26506
26507         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26508         Convert.ChangeType() which works with TypeBuilder created types.
26509         (Enum.LookupEnumValue, Enum.Define): Use it here.
26510
26511         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26512         `TypeBuilder.BaseType != null' check.
26513         (TypeContainer.FindMembers): Only lookup parent members if we
26514         actually have a parent.
26515         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26516         (ConstructorInitializer.Resolve): Likewise.
26517
26518         * interface.cs (Interface.FindMembers): Added
26519         `TypeBuilder.BaseType != null' check.
26520
26521         * rootcontext.cs (RootContext.ResolveCore): Added
26522         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26523         classes_second_stage.
26524
26525         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26526         debug_type and trace_type when compiling with --nostdlib.       
26527
26528 2002-06-07  Martin Baulig  <martin@gnome.org>
26529
26530         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26531         (AddField): Set it to true when adding a non-static field.
26532         (DefineType): Use `have_nonstatic_fields' to find out whether we
26533         have non-static fields, not `Fields != null'.
26534
26535 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26536
26537         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26538         dereferencing a null on the static-field code path)
26539
26540 2002-05-30  Martin Baulig  <martin@gnome.org>
26541
26542         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26543         to take command line arguments.  Use reflection to call the new
26544         custom `Initialize' function on the symbol writer and pass it the
26545         command line arguments.
26546
26547         * driver.cs (--debug-args): New command line argument to pass command
26548         line arguments to the symbol writer.
26549
26550 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26551
26552         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26553         the target type for indexers and properties.  Thanks to Joe for
26554         catching this.
26555
26556 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26557
26558         * typemanager.cs (MethodFlags): returns the method flags
26559         (Obsolete/ShouldIgnore) that control warning emission and whether
26560         the invocation should be made, or ignored. 
26561
26562         * expression.cs (Invocation.Emit): Remove previous hack, we should
26563         not do this on matching a base type, we should do this based on an attribute
26564
26565         Only emit calls to System.Diagnostics.Debug and
26566         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26567         on the command line.
26568
26569         * rootcontext.cs: Global settings for tracing and debugging.
26570
26571         * cs-tokenizer.cs (define): New utility function to track
26572         defines.   Set the global settings for TRACE and DEBUG if found.
26573
26574 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26575
26576         * interface.cs (Populate*): Pass in the TypeContainer as well as
26577         the DeclSpace as parameters so that we can create EmitContexts and
26578         then use that to apply attributes etc.
26579
26580         (PopulateMethod, PopulateEvent, PopulateProperty)
26581         (PopulateIndexer): Apply attributes everywhere.
26582
26583         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26584         etc.
26585
26586         (ApplyAttributes): Update accordingly.
26587
26588         We now apply interface attributes for all members too.
26589
26590 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26591
26592         * class.cs (Indexer.Define); Correctly check if we are explicit
26593         implementation (instead of checking the Name for a ".", we
26594         directly look up if the InterfaceType was specified).
26595
26596         Delay the creation of the PropertyBuilder.
26597
26598         Only create the PropertyBuilder if we are not an explicit
26599         interface implementation.   This means that explicit interface
26600         implementation members do not participate in regular function
26601         lookups, and hence fixes another major ambiguity problem in
26602         overload resolution (that was the visible effect).
26603
26604         (DefineMethod): Return whether we are doing an interface
26605         implementation. 
26606
26607         * typemanager.cs: Temporary hack until we get attributes in
26608         interfaces (Ravi is working on that) and we get IndexerName
26609         support in interfaces.
26610
26611         * interface.cs: Register the indexers as properties.
26612
26613         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26614         warning, I have verified that this is a bug in the .NET runtime
26615         (JavaScript suffers of the same problem).
26616
26617         * typemanager.cs (MemberLookup): When looking up members for
26618         interfaces, the parent of an interface is the implicit
26619         System.Object (so we succeed in searches of Object methods in an
26620         interface method invocation.  Example:  IEnumerable x;  x.ToString
26621         ()) 
26622
26623 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26624
26625         * class.cs (Event): Events should also register if they do
26626         implement the methods that an interface requires.
26627
26628         * typemanager.cs (MemberLookup); use the new GetInterfaces
26629         method. 
26630
26631         (GetInterfaces): The code used to lookup interfaces for a type is
26632         used in more than one place, factor it here. 
26633
26634         * driver.cs: Track the errors at the bottom of the file, we kept
26635         on going.
26636
26637         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26638         instance if the method we are calling is static!
26639
26640 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26641
26642         * attribute.cs (ApplyAttributes): Make this function filter out
26643         the IndexerName attribute (as that attribute in reality is never
26644         applied) and return the string constant for the IndexerName
26645         attribute. 
26646
26647         * class.cs (TypeContainer.Emit): Validate that all the indexers
26648         have the same IndexerName attribute, and if so, set the
26649         DefaultName attribute on the class. 
26650
26651         * typemanager.cs: The return value might contain other stuff (not
26652         only methods).  For instance, consider a method with an "Item"
26653         property and an Item method.
26654
26655         * class.cs: If there is a problem with the parameter types,
26656         return. 
26657
26658 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26659
26660         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26661         looks at user defined conversion after making a call to 
26662         StandardConversionExists - we need this for overload resolution.
26663
26664         * expression.cs : Update accordingly the various method calls.
26665
26666         This fixes 2 bugs filed against implicit user defined conversions 
26667
26668 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26669
26670         * statement.cs: Track the result of the assignment.
26671
26672 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26673
26674         * expression.cs (MemberAccess): Improved error reporting for
26675         inaccessible members.
26676
26677 2002-05-22  Martin Baulig  <martin@gnome.org>
26678
26679         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26680         itself with debugging support.
26681
26682 2002-05-22  Martin Baulig  <martin@gnome.org>
26683
26684         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26685         Removed, this isn't needed anymore.
26686
26687 2002-05-20  Martin Baulig  <martin@gnome.org>
26688
26689         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26690         be underlying type for an enum.
26691
26692 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26693
26694         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26695         that splits out the loading of just the core types.
26696
26697         * rootcontext.cs (ResolveCore): Split the struct resolution in
26698         two, so we can load the enumeration underlying types before any
26699         enums are used.
26700
26701         * expression.cs (Is): Bandaid until we fix properly Switch (see
26702         bug #24985 for details).
26703
26704         * typemanager.cs (ImplementsInterface): The hashtable will contain
26705         a null if there are no interfaces implemented.
26706
26707 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26708
26709         * cs-parser.jay (indexer_declarator): It is fine to have array
26710         parameters
26711
26712 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26713
26714         * typemanager.cs: (RegisterBuilder): New function used to register
26715         TypeBuilders that implement interfaces.  Since
26716         TypeBuilder.GetInterfaces (as usual) does not work with lame
26717         Reflection.Emit. 
26718         (AddUserType): register interfaces.
26719
26720         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26721         dealing with TypeBuilder.  Also, arrays are showing up as
26722         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26723         methods can not be invoked on them!
26724
26725         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26726         (ImplicitReferenceConversionExists): Split out from
26727         StandardConversionExists. 
26728
26729         * expression.cs (As): We were only implementing one of the three
26730         cases for the as operator.  We now implement them all.
26731         (Is): Implement the various other cases for Is as well.
26732
26733         * typemanager.cs (CACHE): New define used to control if we want or
26734         not the FindMembers cache.  Seems to have a negative impact on
26735         performance currently
26736
26737         (MemberLookup): Nested types have full acess to
26738         enclosing type members
26739
26740         Remove code that coped with instance/static returns for events, we
26741         now catch this in RealFindMembers.
26742
26743         (RealFindMembers): only perform static lookup if the instance
26744         lookup did not return a type or an event.  
26745
26746 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26747
26748         * assign.cs (CompoundAssign): We pass more semantic information
26749         now to Compound Assignments than we did before: now we have all
26750         the information at hand, and now we resolve the target *before* we
26751         do the expression expansion, which allows the "CacheValue" method
26752         to have the effect we intended (before, a [x] += 1 would generate
26753         two differen ArrayAccess expressions from the ElementAccess,
26754         during the resolution process).
26755
26756         (CompoundAssign.DoResolve): Resolve target and original_source here.
26757
26758 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26759
26760         * expression.cs (ArrayAccess): dropped debugging information. 
26761
26762         * typemanager.cs: Small bug fix: I was always returning i_members,
26763         instead of one of i_members or s_members (depending on which had
26764         the content).
26765
26766         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26767         method is invoked before any code generation takes place, and it
26768         is a mechanism to inform that the expression will be invoked more
26769         than once, and that the method should use temporary values to
26770         avoid having side effects
26771
26772         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26773
26774         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26775         implementation.
26776
26777         * expression.cs (Indirection, ArrayAccess): Add support for
26778         CacheTemporaries in these two bad boys. 
26779
26780         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26781         ldobj or ldind_ref.  
26782         (StoreFromPtr): Handle stobj as well.
26783
26784         * expression.cs (UnaryMutator): Share more code.
26785
26786         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26787         down: I was not tracking the Filter function as well, which
26788         was affecting the results of the cache.
26789
26790 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26791
26792         * attribute.cs: Remove the hack to handle the CharSet property on
26793         StructLayouts. 
26794
26795 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26796
26797         * attribute.cs (DoResolve): More uglyness, we now only try to
26798         resolve the attribute partially, to extract the CharSet
26799         information (only if we are a StructLayout attribute).  Otherwise 
26800
26801         (GetExtraTypeInfo): Add some code to conditionally kill in the
26802         future this.   I am more and more convinced that the .NET
26803         framework has special code to handle the attribute setting on
26804         certain elements.
26805
26806         * expression.cs (IsParamsMethodApplicable): Revert my previous
26807         foreach change here, it was wrong.
26808
26809 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26810
26811         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26812         (pp_expr): do not abort on unknown input, just return.
26813         (eval): abort if there are pending chars.
26814
26815         * attribute.cs (Attribute.Resolve): Positional parameters are
26816         optional.  Deal with that case.
26817
26818         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26819         the Ansi/Unicode/Auto information for the type.
26820
26821         (TypeContainer.DefineType): instantiate the EmitContext here, as
26822         we will be using it during the type definition (to resolve
26823         attributes) and during the emit phase.
26824
26825         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26826         to pull type information out of the attributes
26827
26828         (Attribute.Resolve): track the constructor builder, and allow for
26829         multiple invocations (structs and classes will use this).
26830
26831         * ecore.cs (MemberLookupFinal): new version with all the
26832         parameters customizable.
26833
26834         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26835         constructors.  Return if the result value is null (as the error
26836         would have been flagged already by MemberLookupFinal)
26837
26838         Do not allow instances of abstract classes or interfaces to be
26839         created.
26840
26841         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26842         We have to compare the assembly property here when dealing with
26843         FamANDAssem and Assembly access modifiers, because we might be
26844         creating an assembly from *modules* (that means that we are not
26845         getting TypeBuilders for types defined in other modules that are
26846         part of this assembly).
26847
26848         (Method.Emit): If the method is marked abstract and has a body,
26849         emit an error. 
26850
26851         (TypeContainer.DefineMembers): If both the defined member and the
26852         parent name match are methods, then do not emit any warnings: let
26853         the Method.Define routine take care of flagging warnings.  But if
26854         there is a mismatch (method overrides something else, or method is
26855         overriwritten by something, then emit warning).
26856
26857         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26858         set to null, this means `do not check for the return type on the
26859         signature'. 
26860
26861         (Method.Define): set the return type for the method signature to
26862         null, so that we get methods with the same name and parameters and
26863         different return types.  This is used to flag warning 114 (you are
26864         hiding a method, and you probably want to use the new/override
26865         keywords instead).
26866
26867         * typemanager.cs (MemberLookup): Implemented proper access
26868         control, closing a long standing set of bug reports.  The problem
26869         was that the Framework only has two bits: Public and NonPublic,
26870         and NonPublic includes private and protected methods, but we need
26871         to enforce the FamANDAssem, FamOrAssem and Family. 
26872
26873 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26874
26875         * statement.cs (GotoCase): Return true: Ammounts to giving up
26876         knowledge on whether we return or not, and letting the other case
26877         be responsible for it.
26878
26879 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26880
26881         * driver.cs: Do not load directories for each file processed, only
26882         do it if there is a pattern.
26883
26884         * ecore.cs: Report readonly assigns here as well, as we might have
26885         been resolved only by MemberAccess.
26886
26887         (SimpleName.SimpleNameResolve): Also be useful for LValue
26888         resolution.   We need this to propagate assign to local readonly variables
26889
26890         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26891         do not want to reuse potential criteria memory.
26892
26893         * class.cs (MyEventBuilder): Set reflected_type;
26894
26895         * ecore.cs (Constantify): Added support for constifying bools.
26896
26897         (RootContext.LookupType): Added a cache for values looked up in
26898         the declaration space.
26899
26900         * typemanager.cs (FindMembers): Now is a front-end to
26901         RealFindMembers, and provides a two-level hashtable-based cache to
26902         the request.  
26903
26904         15% performance improvement: from 22.5 to 19.2 seconds.
26905
26906         * expression.cs (IsParamsMethodApplicable): use foreach.
26907         (Invocation.DoResolve): ditto.
26908         (New.DoResolve): ditto.
26909         (ArrayCreation.DoResolve): ditto.
26910
26911         * ecore.cs (FindMostEncompassingType): use foreach.
26912
26913         * delegate.cs (NewDelegate.DoResolve): Use foreach
26914
26915         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26916         (RemoveMethods): use foreach.
26917
26918         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26919         nested foreach statements instead of for, and also break out of
26920         the inner loop once a match is found.
26921
26922         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26923
26924 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26925
26926         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26927         we actually unwrap the expression to allow for extra information
26928         to be extracted. 
26929
26930         * expression.cs: Use Shr_Un on unsigned operations. 
26931
26932 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26933
26934         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26935         applicable operators was not being considered correctly. This closes
26936         the bug Miguel reported.
26937
26938 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26939
26940         * attribute.cs: check that the type derives from System.Attribute
26941         and report the correct error in that case (moved the duplicate code to
26942         its own method, too).
26943
26944 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26945
26946         * attribute.cs: lookup attribute type name as the spec says: first the
26947         bare attribute name and then name + "Attribute" (nant compiles with
26948         mcs after this fix).
26949
26950 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26951
26952         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26953         Because of the way we parse things, we should try to see if a
26954         UIntConstant can fit in an integer.
26955
26956 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26957
26958         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26959         when we are in an explicit context.
26960
26961         (ConvertReferenceExplicit): When converting from Iface type S to Class
26962         T make sure the rules are implemented as an OR.
26963
26964         * parameter.cs (ParameterType): Make it a property for now although the
26965         purpose really isn't anything immediate.
26966
26967         * expression.cs (Is*Applicable): Do better checking on the parameter type
26968         of a ref/out parameter. The ones from the system assemblies are already 
26969         marked with the correct type so we don't need to do any correction.
26970
26971         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26972         the object type is standard too so include that.
26973
26974 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26975
26976         * ecore.cs (StandardConversionExists): Augment with missing code:
26977         deal with IntConstant, LongConstants and Enumerations.
26978
26979         * assign.cs: Report the error, instead of failing silently
26980
26981         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26982         typecontainer that they are declared, because the
26983         typecontainer/namespace will have the list of using clauses that
26984         need to be applied.
26985
26986         Assembly Attributes were escaping the normal registration
26987         mechanism. 
26988
26989         (EmitCode): Apply attributes within an EmitContext that represents
26990         the container they were declared on.
26991
26992         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26993
26994 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26995
26996         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26997         Revamp completely - make much cleaner as we now operate only
26998         on a set of Types.
26999
27000         (FindMostSpecificSource, FindMostSpecificTarget): New methods
27001         to implement the logic detailed in the spec more correctly.
27002
27003         (UserDefinedConversion): Update accordingly.
27004
27005 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27006
27007         * statement.cs: Return flow analysis information up.
27008
27009         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
27010         and the default.
27011
27012         (token): Do not consume an extra character before calling
27013         decimal_digits.
27014
27015 2002-05-06  Piers Haken <piersh@friskit.com>
27016
27017         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
27018
27019 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27020
27021         * class.cs (Constructor.Emit): Set the IsStatic flag in the
27022         EmitContext during the instance constructor initializer
27023         resolution, to stop access to instance variables.
27024
27025         This is mandated by the spec, last paragraph of the `constructor
27026         initializers' section. 
27027
27028 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
27029
27030         * cs-parser.jay, class.cs (Accessor): new class used to represent
27031         an accessor (get or set).  In the past we used `null' to represent
27032         a missing accessor.  But this is ambiguous because there was no
27033         way to tell in abstract indexers/properties if one of them was
27034         specified.
27035
27036         Now there is a way of addressing that.
27037
27038         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
27039         instead of FindMembers.
27040
27041         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
27042         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
27043
27044         * attribute.cs: Treat indexers and properties as the same in terms
27045         of applying attributes
27046
27047         * ecore.cs (FindMostEncompassedType): Use statically initialized
27048         EmptyExpressions()s like we do elsewhere to avoid creating useless
27049         objects (and we take this out of the tight loop).
27050
27051         (GetConversionOperators): Move the code to extract the actual
27052         operators to a separate routine to clean things up.
27053
27054 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
27055
27056         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
27057         events are always registered FieldBuilders.
27058
27059         * class.cs (FieldBase): New class shared by Fields 
27060
27061         * delegate.cs: If we are a toplevel delegate, use our full name.
27062         If we are a nested delegate, then only use our tail name.
27063
27064 2002-05-02  Ravi Pratap  <ravi@ximian.com>
27065
27066         * expression.cs (IsApplicable): Ensure that we add the "&" to
27067         ref/out types before comparing it with the type of the argument.
27068
27069         (IsParamsMethodApplicable): Ditto.
27070
27071         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
27072         silly me ;-)
27073
27074         * delegate.cs : Handle the case when we have more than one applicable
27075         method. Flag an error only when we finish checking all.
27076
27077 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
27078
27079         * expression.cs: Add support for boolean static initializers.
27080
27081 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
27082
27083         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
27084
27085         * parameter.cs (ComputeParameterTypes,
27086         ComputeAndDefineParameterTypes): Better error handling: now we
27087         clear the `types' cache if we fail during any of the type lookups.
27088         We also return the status code correctly to our caller
27089
27090         * delegate.cs: If we fail to define a delegate, abort the extra
27091         steps. 
27092
27093         * expression.cs (Binary.ResolveOperator): for
27094         operator==(object,object) and operator !=(object, object) we also
27095         have to verify that there is an implicit conversion from one to
27096         the other.
27097
27098         (ArrayAccess.DoResolve): Array Access can operate on
27099         non-variables. 
27100
27101 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
27102
27103         * assign.cs (CompoundAssign): A new class used as a "flag" that
27104         the assignment actually is happening as part of a compound
27105         assignment operator.
27106
27107         During compound assignment, a few new rules exist to enable things
27108         like:
27109
27110         byte b |= 1 + 2
27111
27112         From the spec:
27113
27114         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
27115         to the type of x) if y is implicitly convertible to the type of x,
27116         and the operator is a builtin operator and the return type of the
27117         operator is explicitly convertible to the type of x. 
27118
27119         * rootcontext.cs: Reset warning level to 2.  4 catches various
27120         "interesting" features in mcs, we must clean this up at some
27121         point, but currently am trying to kill other bugs ;-)
27122
27123         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
27124         in container classes as well.  
27125
27126         * expression.cs (Binary.ResolveOperator): Handle string case
27127         before anything else (as operator overloading does emit an error
27128         before doing anything else).
27129
27130         This code could go away when we move to a table driven model, but
27131         i could not come up with a good plan last night.
27132
27133 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
27134
27135         * typemanager.cs (CSharpName): reimplementation using regex.
27136         * class.cs: added null check for fields in Emit
27137         * rootcontext.cs: set warninglevel to 4
27138
27139 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
27140
27141         * typemanager.cs (CSharpName): reimplemented with Lupus
27142         suggestion.
27143
27144 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
27145
27146         * statement.cs (If): correclty implement Resolve, because we were
27147         not catching sem errors in there.  The same process is needed
27148         everywhere else. 
27149         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
27150
27151
27152         (Statement.Warning_DeadCodeFound): Factorize code.
27153         (While): Report dead code here too.
27154
27155         (Statement): Added Resolve virtual method to allow
27156         for resolution split from the emit code.
27157
27158 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27159
27160         * statement.cs (EmitBoolExpression): No longer try to resolve the
27161         expression here.    
27162         (MakeBoolean): New utility function that resolve, implicitly
27163         converts to boolean and tags the expression. 
27164
27165
27166         (If, Do): Implement dead code elimination.
27167         (While): Implement loop inversion
27168
27169         (Do, While, For, If): Resolve the expression prior to calling our
27170         code generation.
27171
27172 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
27173
27174         * class.cs:
27175           - added method Report28 (warning: program has more than one entry point)
27176           - added method IsEntryPoint, implements paragraph 10.1 of the spec
27177           - modified method Method.Define, the part at the end of the method
27178
27179         * rootcontext.cs: added static public Location EntryPointLocation;
27180           
27181         * ../errors/cs0028.cs : Add test case for the above warning.              
27182
27183         * typemanager.cs:
27184           - modified method CSharpName to allow arrays of primitive type to
27185             be printed nicely (e.g. instead of System.Int32[][] it now prints
27186             int[][])
27187           - added method CSharpSignature: returns the signature of a method
27188             in string format to be used in reporting errors, warnings, etc.
27189
27190         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27191         with String.Empty.
27192
27193 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27194
27195         * delegate.cs (Define): Fix extremely silly bug where I was
27196         setting the type of the 'object' parameter of the BeginInvoke
27197         method to System.IAsyncResult instead of System.Object ;-)
27198
27199 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27200
27201         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27202         here. 
27203
27204         (Constructor.Emit): return if we fail to initialize the
27205         constructor.  Another door closed!  
27206
27207         * expression.cs (New.DoResolve): Improve error message (from -6 to
27208         1501).  Use DeclaredOnly lookup to find the exact constructor.
27209
27210         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27211         loop.  This is useful.
27212
27213         * cs-parser.jay: Adjust the default parameters so that destructors
27214         have the proper signature.
27215
27216 2002-04-26  Martin Baulig  <martin@gnome.org>
27217
27218         * driver.cs (LoadAssembly): If `assembly' contains any characters
27219         which are only valid in path names and not in assembly names
27220         (currently slash, backslash and point), use Assembly.LoadFrom ()
27221         instead of Assembly.Load () on the `assembly' (before iteration
27222         over the link_paths).
27223
27224 2002-04-26  Martin Baulig  <martin@gnome.org>
27225
27226         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27227
27228 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27229
27230         * class.cs (Property): use the new typemanager.MemberLookup
27231
27232         (TypeContainer.MemberLookup): Implement using the
27233         TypeManager.MemberLookup now. 
27234
27235         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27236         and return MemberInfos, so that these can be used without an
27237         EmitContext (what we had before).
27238
27239 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27240
27241         * expression.cs: Fix the case where the argument to params if the
27242         type of the params.  I omitted handling this before.   Fixed
27243
27244 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27245
27246         * driver.cs: Call BootCorlib_PopulateCoreType
27247
27248         * class.cs (Property.CheckBase): Check for properties only, not
27249         for all members. 
27250
27251         * interface.cs: Temporary hack: try/catch around the
27252         CustomAttributeBuilder, because I am getting an exception that I
27253         do not understand.
27254
27255         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27256         types whose definitions are required to be there (attributes are
27257         defined before standard types).
27258
27259         Compute definitions as we boot the various types, as they are used
27260         immediately (value_type class will need object_type, but if we do
27261         not initialize object_type, we will pass a null, which will let
27262         the runtime pick the System.Object from the existing corlib, which
27263         is not what we want).
27264
27265 2002-04-22  Patrik Torstensson <totte@labs2.com>
27266
27267         * cs-tokenizer.cs: fixed a number of trim() issues.
27268
27269 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27270
27271         * expression.cs (Argument.Type): Ensure that we return the correct
27272         type when we have out or ref parameters [in which case we 
27273         append a "&"].
27274
27275 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27276
27277         * class.cs (Property, Indexer): Allow extern modifier in there. 
27278
27279         * typemanager.cs (InitBaseTypes): Initializes object_type and
27280         value_type, since those will be used early on during the bootstrap
27281         process to compile corlib.
27282
27283         (InitCoreTypes): Move code from here to InitBaseTypes.
27284
27285 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27286
27287         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27288         single-dimension arrays as using the ldlen opcode.  
27289
27290         Daniel Lewis discovered this optimization.  
27291
27292         * typemanager.cs: Add signature for System.Array::get_Length
27293
27294 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27295
27296         * statement.cs: report the error when the foreach does not apply to an
27297         array nor a collection.
27298
27299 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27300
27301         * expression.cs: Add implicit conversions to the operator ~.
27302
27303         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27304
27305         * typemanager.cs: Locate the decimal constructor.
27306
27307 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27308
27309         * attribute.cs: use the new property of TypeOf.
27310         * expression.cs: added 'get' property around typearg.
27311
27312         These changes fix a build breaker reported by NickD. Is this the
27313         correct way to fix?  If not, please, revert my changes and make it
27314         work :-).
27315
27316 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27317
27318         * attribute.cs: Add support for typeof in attribute invocations.
27319         I am not sure that this is right though.
27320
27321 2002-04-14  Duncan Mak  <duncan@ximian.com>
27322
27323         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27324         Binary.Operator.Division case.
27325
27326 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27327
27328         * class.cs (DefineType): Ensure that we do a proper check on
27329         attribute types and also register it with the TypeManager.
27330
27331         (TypeContainer.Targets): The default for attribute types is
27332         AttributeTargets.All.
27333
27334         * attribute.cs (ApplyAttributes): Registering the attribute type
27335         is done elsewhere, not when we discover we have a Usage attribute.
27336
27337 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27338
27339         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27340         and get rid of is_delegate parameter.
27341
27342         * everywhere : update.
27343
27344 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27345
27346         * cs-parser.jay (compilation_unit): Revamp completely to use
27347         some new ideas that I got from Rhys' grammar to solve the problems
27348         with assembly level attributes.
27349
27350         (outer_declaration): New grammar production.
27351
27352         (attribute_sections): Add.
27353
27354         (opt_attributes): Base on attribute_sections
27355
27356         (namespace_declaration): Allow opt_attributes to tackle the case
27357         when we have assembly level attributes - we are clever in this
27358         regard now ;-)
27359
27360         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27361         attributes in the non-global context.
27362
27363         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27364         instead of SetGlobalAttributes.
27365
27366         * class.cs, rootcontext.cs : Ensure we define and generate 
27367         attribute types before anything else.
27368
27369         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27370         and flag the new error -20 for the case when the attribute type
27371         does not have valid targets specified. csc does not catch this.
27372
27373         * ../errors/errors.txt : update for error # -20
27374
27375 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27376
27377         * support.cs (InternalParameters.ParameterModifier): Do some null
27378         checking and return sane values.
27379
27380         * class.cs (Method.Define): If we are a PInvoke method, ensure
27381         that we are static and extern. Report error # 601
27382
27383         * ../errors/cs0601.cs : Add test case for the above error.
27384
27385 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27386
27387         * rootcontext.cs (attribute_types): We need to keep type of
27388         all attribute types separately and emit code for them first.
27389
27390         (RegisterAttribute) : Implement.
27391
27392         * class.cs (DefineType): Check if the current Type is a custom
27393         attribute type and register it accordingly.
27394
27395         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27396         adding the first attribute twice and rename to
27397
27398         (SetGlobalAttributes): this.
27399
27400         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27401         lookups.
27402
27403         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27404         if we are processing global arguments. Hmm, I am unsure of this.
27405
27406 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27407
27408         * expression.cs: added static array of strings to avoid calling
27409         Enum.ToString () for Operator in Binary. Significant recover of
27410         performance.
27411
27412 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27413
27414         * class.cs (FindMembers): Allow the Builders of the various
27415         members to be null.  If they are skip them.  This only happens
27416         during the PInvoke declaration.
27417
27418 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27419
27420         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27421         failure, so we do not keep going afterwards.
27422
27423         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27424         wanted to pass `false' as the `is_delegate' argument.  If this is
27425         the case, why not use delegate_type == null to mean `is_delegate =
27426         false' and anything else as is_delegate = true.
27427
27428 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27429
27430         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27431         code for the section, not the beginning of the tests.
27432
27433 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27434
27435         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27436
27437         * expression.cs (Binary): same.  Warn about errors where we have
27438         Enum/Enum in operator + as well.
27439
27440 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27441
27442         * statement.cs:
27443                 - added support for switch(bool)
27444                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27445                 - add TableSwitchEmit() to handle table-based switch statements
27446
27447 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27448
27449         * expression.cs (Invocation.OverloadResolve): Factor out code which
27450         does parameter compatibility checking with arguments so that we can 
27451         re-use the code even from Delegate.VerifyApplicability
27452
27453         (VerifyArgumentsCompat): Move above code here.
27454
27455         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27456         and instead make a call to the above method.
27457
27458 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27459
27460         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27461         We use it to keep track of classes which are attribute types.
27462
27463 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27464
27465         * delegate.cs (Delegate.Define): Correctly define the types in the
27466         presence of fixed and array parameters.
27467
27468         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27469         doing FindMembers.
27470
27471         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27472         include NonPublic after the first iteration.
27473
27474         * class.cs (Indexer.CheckBase): Only check if both parents are
27475         non-null. 
27476
27477         * cs-parser.jay (accessor_body): If empty, set to null.
27478
27479         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27480         same code path here to resolve constants names that we did have in
27481         MemberAccess.DoResolve.  There is too much code duplicated here.
27482
27483 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27484
27485         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27486
27487         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27488         to MakeUnionSet.
27489
27490         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27491         tokens, numbers and strings.
27492
27493         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27494         parenthesis.
27495
27496         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27497         asyncronous parameters and the regular parameters.  
27498
27499         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27500         specify the target directory.
27501
27502         * expression.cs: (This.DoResolve): Simplify
27503         (As.Emit): Optimize, do not generate IsInst if the expression is
27504         always of the given type.
27505
27506         (Is.DoResolve): Bug fix, we were reporting both always/never for
27507         the is expression.
27508
27509         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27510         creating too many unnecessary arrays.
27511
27512 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27513
27514         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27515         fields instead of rolling our own initializer.   Takes care of all
27516         implicit conversions, and drops unnecessary static checks/argument.
27517
27518 2002-03-31  Dick Porter  <dick@ximian.com>
27519
27520         * driver.cs: use the GetDirectories() return values properly, and
27521         use "/" as path separator.
27522
27523 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27524
27525         * expression.cs (Unary): Optimize - - expr into expr.
27526         (Binary): Optimize a + (-b) into a -b.
27527
27528         * codegen.cs (CodeGen): Made all methods static.
27529
27530 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27531
27532         * rootcontext.cs: 
27533
27534         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27535         TypeBuilder property.
27536
27537         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27538         instead. 
27539
27540         * tree.cs: Removed the various RecordXXXX, and replaced with a
27541         single RecordDecl.  Removed all the accessor methods, and just
27542         left a single access point Type 
27543
27544         * enum.cs: Rename DefineEnum to DefineType.
27545
27546         * decl.cs: New abstract method `DefineType' used to unify the
27547         Defines for Enumerations, Interfaces, TypeContainers and
27548         Delegates.
27549
27550         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27551         LookupBaseClasses method that used to live in class.cs and
27552         interface.cs here, and renamed to FindType.
27553
27554         * delegate.cs: Implement DefineType.  Take advantage of the
27555         refactored pattern for locating the parent builder without taking
27556         the parent_builder argument (which we know does not work if we are
27557         nested, and triggering a toplevel definition).
27558
27559 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27560
27561         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27562         accessibility of a member has changed during override and report
27563         an error if so.
27564
27565         * class.cs (Method.Define, Property.Define): Only complain on
27566         overrides if the method is private, any other accessibility is
27567         fine (and since we just checked the permission is the same, we are
27568         good to go).
27569
27570         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27571         and elif are processed always.  The other pre-processing
27572         directives are only processed if we are "taking" the path
27573
27574 2002-03-29  Martin Baulig  <martin@gnome.org>
27575
27576         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27577         current location is not Null.
27578
27579         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27580         a separate method so we can profile it.
27581
27582         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27583         `span.Seconds' are just seconds, but no minutes or hours.
27584         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27585
27586 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27587
27588         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27589         Remove the gratuitous set of Final:
27590
27591                                 // If an interface implementation, then we can set Final.
27592                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27593                                     implementing.DeclaringType.IsInterface)
27594                                         flags |= MethodAttributes.Final;
27595
27596         I do not know what I was smoking when I used that.
27597
27598
27599         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27600         step into fixing the name resolution issues for delegates and
27601         unifying the toplevel name resolution.
27602
27603 2002-03-28  Martin Baulig  <martin@gnome.org>
27604
27605         * class.cs (Method.Emit): If we have a symbol writer, call its
27606         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27607         tell it about the current method.
27608
27609         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27610         writer that we're going to emit the first byte of IL code for a new
27611         statement (a new source line).
27612         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27613         EmitContext.Mark() before emitting any code.
27614
27615         * location.cs (SymbolDocument): Return null when we're Null.
27616
27617         * statement.cs (Statement): Moved the `Location loc' variable here.
27618         (Statement.EmitBoolExpression): If we have a symbol writer, call
27619         ec.Mark() before emitting any code to tell it that we're at the
27620         beginning of a new statement.
27621         (StatementExpression): Added `Location' argument to the constructor.
27622         (Block): Added public readonly variable `StartLocation' and public
27623         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27624         (Block): Added constructor which takes a start and end location.
27625         (Block.SetEndLocation): New method. This sets the end location.
27626         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27627         local variables we create.
27628         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27629         each statement and do also mark the begin and end of the block.
27630
27631         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27632         tell it the current lexer.Location, use Location.Null for the end of the
27633         block.
27634         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27635         current block, set its end location using SetEndLocation().
27636         (statement_expression): StatementExpression constructor now takes the
27637         lexer.Location as additional argument.
27638         (for_statement, declare_local_variables): Likewise.
27639         (declare_local_variables): When creating a new implicit block, use the
27640         new Block constructor and pass it the lexer.Location.
27641
27642 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27643
27644         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27645         members also on the parent interfaces recursively.
27646
27647 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27648
27649         * report.cs: Use new formats, since Gonzalo finished the missing
27650         bits. 
27651
27652         * expression.cs (Binary.ResolveOperator): added missing operator|
27653         operator& and operator^ for bool/bool.
27654
27655         * cs-parser.jay: CheckDef now takes a Location argument that is
27656         used to report errors more precisly (instead of reporting the end
27657         of a definition, we try to track something which is a lot closer
27658         to the source of the problem).
27659
27660         * cs-tokenizer.cs: Track global token use, so we can properly flag
27661         the use of #define/#undef after the first token has been seen.
27662
27663         Also, rename the reportXXXX to Error_DescriptiveName
27664
27665         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27666         TypeContainer, so that Enum and Interface can use this too.
27667
27668         * class.cs (TypeContainer.LookupInterfaceOrClass,
27669         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27670         `builder' argument.  Typically this was used to pass the parent
27671         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27672         the definition).  
27673
27674         The problem is that a nested class could trigger the definition of
27675         a toplevel class, and the builder would be obviously wrong in that
27676         case. 
27677
27678         So we drop this argument, and we compute dynamically the
27679         TypeBuilder/ModuleBuilder (the correct information was available
27680         to us anyways from DeclSpace.Parent)
27681
27682         * interface.cs (Interface.DefineInterface): Drop builder
27683         parameter cleanup like class.cs
27684
27685         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27686         like class.cs
27687
27688         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27689         values. 
27690
27691         (Try.Emit): Propagate the returns value from the statement.
27692
27693         (Return.Emit): Even if we are leavning 
27694
27695         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27696
27697         * modifiers.cs: Fix the computation of MethodAttributes flags.
27698
27699 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27700
27701         * driver.cs: allow compilation of files that start with '/'.
27702         Add a default case when checking the argument of --target.
27703
27704 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27705
27706         * interface.cs: Implement the same search algorithm for types in
27707         the interface code.
27708
27709         * delegate.cs: Do not allow multiple definition.
27710
27711         * Recovered ChangeLog that got accidentally amputated
27712
27713         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27714
27715         * rootcontext.cs: Load manually enum to allow core classes to
27716         contain enumerations.
27717
27718         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27719         Update to new static methods in TypeManager.
27720
27721         * typemanager.cs (GetMethod, GetConstructor): Use our
27722         implementation of FindMembers to find the members, since during
27723         corlib compilation, the types are TypeBuilders and GetMethod and
27724         GetConstructor do not work.
27725
27726         Make all methods in TypeManager static.
27727
27728         (InitCodeHelpers): Split the functionality from
27729         the InitCodeTypes function.
27730
27731         * driver.cs: Call InitCodeHelpers after we have populated the
27732         types. 
27733
27734         * cs-parser.jay (delegate_declaration): we did not used to compute
27735         the delegate name correctly for void delegates.
27736
27737 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27738
27739         * rootcontext.cs (RootContext): Init the interface_resolve_order
27740         and type_container_resolve_order always.
27741
27742         (ResolveCore, BootstrapCorlib_ResolveClass,
27743         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27744         compiler when compiling with --nostdlib
27745
27746         * class.cs (TypeContainer.DefineType): Check that our parent is
27747         not null.  This test is most important when we are bootstraping
27748         the core types.
27749
27750         * codegen.cs: Split out the symbol writing code.
27751
27752 2002-03-25  Martin Baulig  <martin@gnome.org>
27753
27754         * driver.cs (-g): Made -g an alias for --debug.
27755
27756 2002-03-24  Martin Baulig  <martin@gnome.org>
27757
27758         * codegen.cs (SymbolWriter): New public variable. Returns the
27759         current symbol writer.
27760         (CodeGen): Added `bool want_debugging_support' argument to the
27761          constructor. If true, tell the ModuleBuild that we want debugging
27762         support and ask it for the ISymbolWriter.
27763         (Save): If we have a symbol writer, call it's Close() method after
27764         saving the assembly.
27765
27766         * driver.c (--debug): New command line argument to create a
27767         debugger information file.
27768
27769         * location.cs (SymbolDocument): New public property. Returns an
27770         ISymbolDocumentWriter object for the current source file or null
27771         if we don't have a symbol writer.
27772
27773 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27774
27775         * driver.cs (LoadAssembly): Correctly return when all the paths
27776         have been tried and not before.
27777
27778         * statement.cs (Switch.Emit): return the actual coverage for this
27779         statement (returns/not-returns)
27780
27781         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27782         switch of the statement if we are the last switch section.  That
27783         kills two problems: try/catch problems (we used to emit an empty
27784         nop at the end) and switch statements where all branches would
27785         return. 
27786
27787 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27788
27789         * driver.cs: Add default assemblies (the equivalent to the
27790         Microsoft CSC.RSP file)
27791
27792         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27793         also update tokens_seen and set it to false.
27794
27795         * driver.cs: Implement --recurse for Mike.
27796
27797         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27798         correctly splitting out the paths.
27799
27800 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27801
27802         * interface.cs (Interface.PopulateProperty): Instead of using
27803         `parent' as the declaration space for the set parameters, use
27804         `this' 
27805
27806         * support.cs (InternalParameters): InternalParameters constructor
27807         takes a DeclSpace instead of a TypeContainer.
27808
27809         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27810         types are being initialized, load the address of it before calling
27811         the function.  
27812
27813         (New): Provide a mechanism to disable the generation of local
27814         value type temporaries when the caller will be providing us with
27815         an address to store it.
27816
27817         (ArrayCreation.EmitDynamicInitializers): Use it.
27818
27819 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27820
27821         * expression.cs (Invocation.EmitArguments): Only probe for array
27822         property if there is more than one argument.  Sorry about that.
27823
27824         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27825         empty param arrays.
27826
27827         * class.cs (Method.LabelParameters): Fix incorrect code path that
27828         prevented the `ParamArrayAttribute' from being applied to the
27829         params attribute.
27830
27831 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27832
27833         * support.cs (ReflectionParameters): Correctly compute whether the
27834         last argument is a params array.  Fixes the problem with
27835         string.Split ('a')
27836
27837         * typemanager.cs: Make the assemblies array always be non-null
27838         (empty, but non-null)
27839
27840         * tree.cs (RecordDecl): New function that abstracts the recording
27841         of names.  This reports error 101, and provides a pointer to the
27842         previous declaration.  Fixes a crash in the compiler.
27843
27844         * cs-parser.jay (constructor_declaration): Update to new grammar,
27845         and provide a constructor_body that can be empty.
27846
27847 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27848
27849         * driver.cs: Add support for --resources.
27850
27851         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27852         Make all types for the various array helper methods be integer.
27853
27854         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27855         CheckState to ConvCast.
27856
27857         (ConvCast): Now it takes a `checked' state argument, to avoid
27858         depending on the emit context for the conversion, and just using
27859         the resolve time setting.
27860
27861         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27862         instead of Invocation.EmitArguments.  We do not emit the original
27863         arguments, instead we emit those which have been converted to
27864         unsigned int expressions.
27865
27866         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27867
27868         * codegen.cs: ditto.
27869
27870         * expression.cs (LocalVariableReference): Drop the use of the
27871         Store function that depended on the variable index.
27872
27873         * statement.cs (VariableInfo): Drop the `Idx' property from this
27874         class, as this is not taking into account the indexes for
27875         temporaries tat we generate during the execution, getting the
27876         indexes wrong.
27877
27878         * class.cs: First emit class initializers, then call the parent
27879         constructor. 
27880
27881         * expression.cs (Binary): Fix opcode emision.
27882         (UnaryMutator.EmitCode): Support checked code generation
27883
27884         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27885         matches for events for both the Static and Instance scans,
27886         pointing to the same element.   Fix that.
27887
27888 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27889
27890         * rootcontext.cs (ResolveTree): Always set the
27891         interface_resolve_order, because nested interfaces will be calling
27892         into us.
27893
27894         * class.cs (GetInterfaceOrClass): Track the same resolution
27895         process used by TypeManager.LookupType.  This fixes the nested
27896         type lookups in class declarations (separate path from
27897         LookupType). 
27898
27899         (TypeContainer.DefineType): Also define nested interfaces.
27900         (TypeContainer.RegisterOrder): New public function used to
27901         register the order in which child interfaces need to be closed.
27902
27903         Nested interfaces need to be closed after their parents have been
27904         created. 
27905
27906         * interface.cs (InterfaceAttr): Put all the logic for computing
27907         the interface attribute here. 
27908
27909         (DefineInterface): Register our interface order with the
27910         RootContext or with the TypeContainer depending on the case.
27911
27912 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27913
27914         * cs-parser.jay: rework foreach statement to work with the new
27915         changes to the policy on SimpleNames.
27916
27917         * report.cs: support Stacktrace on warnings as well.
27918
27919         * makefile: drop --unsafe and /unsafe from the compile.
27920
27921 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27922
27923         * ecore.cs (StandardConversionExists): Modify to take an Expression
27924         as the first parameter. Ensure we do null -> reference type conversion
27925         checking.
27926
27927         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27928         temporary Expression objects.
27929
27930 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27931
27932         * interface.cs: workaround bug in method overloading resolution
27933         (there is already a bugzilla bug for it).
27934
27935 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27936
27937         We could also solve this problem by having a separate path for
27938         performing type lookups, instead of DoResolve, we could have a
27939         ResolveType entry point, and only participating pieces of the
27940         production (simplename, deref, array) would implement this. 
27941
27942         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27943         signal SimpleName to only resolve type names and not attempt to
27944         resolve anything else.
27945
27946         * expression.cs (Cast): Set the flag.
27947
27948         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27949
27950         * class.cs: Only report 108 if there is no `new' modifier.
27951
27952         * cs-parser.jay: rework foreach statement to work with the new
27953         changes to the policy on SimpleNames.
27954
27955         * report.cs: support Stacktrace on warnings as well.
27956
27957         * makefile: drop --unsafe and /unsafe from the compile.
27958
27959 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27960
27961         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27962         lookups here, instead of doing that at parse time.  This means
27963         that our grammar will not introduce `LocalVariableReferences' as
27964         expressions at this point.  That solves the problem of code like
27965         this:
27966
27967         class X {
27968            static void Main ()
27969            { int X = 1;
27970             { X x = null }}}
27971
27972         This is only half the fix.  The full fix requires parameters to
27973         also be handled in this way.
27974
27975         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27976         makes the use more obvious of the DeclSpace.  The
27977         ec.TypeContainer.TypeBuilder is now only used to pull the
27978         TypeBuilder for it.
27979
27980         My theory is that I can get rid of the TypeBuilder completely from
27981         the EmitContext, and have typecasts where it is used (from
27982         DeclSpace to where it matters).  
27983
27984         The only pending problem is that the code that implements Aliases
27985         is on TypeContainer, and probably should go in DeclSpace.
27986
27987         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27988         lookups here, instead of doing that at parse time.  This means
27989         that our grammar will not introduce `LocalVariableReferences' as
27990         expressions at this point.  That solves the problem of code like
27991         this:
27992
27993         class X {
27994            static void Main ()
27995            { int X = 1;
27996             { X x = null }}}
27997
27998         This is only half the fix.  The full fix requires parameters to
27999         also be handled in this way.
28000
28001         * class.cs (Property.DefineMethod): When implementing an interface
28002         method, set newslot, when implementing an abstract method, do not
28003         set the flag (before we tried never setting it, or always setting
28004         it, which is the difference).
28005         (Indexer.DefineMethod): same.
28006         (Method.DefineMethod): same.
28007
28008         * ecore.cs: Only set the status used flag if we get back a Field.
28009
28010         * attribute.cs: Temporary hack, so Paolo can keep working.
28011
28012 2002-03-08  Ravi Pratap  <ravi@ximian.com>
28013
28014         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
28015         the unmanaged type in the case we have a MarshalAs attribute.
28016
28017         (Resolve): Handle the case when we are parsing the special MarshalAs
28018         attribute [we need to store the unmanaged type to use later]
28019
28020         * typemanager.cs (marshal_as_attr_type): Built in type for the 
28021         MarshalAs Attribute.
28022
28023         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
28024         on parameters and accordingly set the marshalling info.
28025
28026 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
28027
28028         * class.cs: Optimizing slightly by removing redundant code after
28029         we switched to the `NoTypes' return value.
28030         (Property.DefineMethod): use NoTypes here too.
28031
28032         This fixes the bug I introduced in my last batch of changes.
28033
28034 2002-03-05  Ravi Pratap  <ravi@ximian.com>
28035
28036         * tree.cs (RecordEnum): Add. We now keep track of enums too.
28037
28038         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
28039         Enums since those are types too. 
28040
28041         * cs-parser.jay (enum_declaration): Record enums as we parse them.
28042
28043         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
28044         thanks to a call during the lookup process.
28045
28046 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
28047
28048         * statement.cs (Foreach): Lots of work to accomodate a particular
28049         kind of foreach statement that I had not kept in mind.  It is
28050         possible to have foreachs on classes that provide a GetEnumerator
28051         method that return objects that implement the "pattern" for using
28052         a foreach, there is no need to support GetEnumerator
28053         specifically. 
28054
28055         This is needed to compile nant.
28056
28057         * decl.cs: Only report 114 if the member is not `Finalize' and if
28058         the warning level is at least 2.
28059
28060         * class.cs: Moved the compare function from Method to
28061         MethodSignature. 
28062
28063         (MethodSignature.InheritableMemberSignatureCompare): Add new
28064         filter function that is used to extract inheritable methods from a
28065         class. 
28066
28067         (Method.Define): Use the new `inheritable_method_signature_filter'
28068         delegate
28069
28070         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
28071         command. 
28072
28073 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
28074
28075         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
28076
28077         * cs-parser.jay: Add opt_semicolon to the interface declaration.
28078
28079         * expression.cs: Pass location information to
28080         ConvertImplicitStandard. 
28081
28082         * class.cs: Added debugging code to track return values from
28083         interfaces. 
28084
28085 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
28086
28087         * expression.cs (Is.DoResolve): If either side of the `is' is an
28088         interface, do not flag the warning.
28089
28090         * ecore.cs (ImplicitReferenceConversion): We need a separate test
28091         for interfaces
28092
28093         * report.cs: Allow for --fatal to be used with --probe.
28094
28095         * typemanager.cs (NoTypes): Move the definition for the empty Type
28096         array here. 
28097
28098         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
28099         properties. 
28100         (TypeContainer.DefineProxy): New function used to proxy to parent
28101         implementations when implementing interfaces.
28102         (TypeContainer.ParentImplements): used to lookup if our parent
28103         implements a public function that is required by an interface.
28104         (TypeContainer.VerifyPendingMethods): Hook this up.
28105
28106         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
28107         `modules' and `assemblies' arraylists into arrays.  We only grow
28108         these are the very early start up of the program, so this improves
28109         the speedof LookupType (nicely measured).
28110
28111         * expression.cs (MakeByteBlob): Replaced unsafe code with
28112         BitConverter, as suggested by Paolo.
28113
28114         * cfold.cs (ConstantFold.Binary): Special case: perform constant
28115         folding of string concatenation, but if either side is a string,
28116         and the other is not, then return null, and let the runtime use
28117         the concatenation on the string plus the object (using
28118         `Object.ToString'). 
28119
28120 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
28121
28122         Constant Folding has been implemented now.
28123
28124         * expression.cs (Unary.Reduce): Do not throw an exception, catch
28125         the error instead on types that are not supported in one's
28126         complement. 
28127
28128         * constant.cs (Constant and all children): New set of functions to
28129         perform implict and explicit conversions.
28130
28131         * ecore.cs (EnumConstant): Implement the new functions to perform
28132         conversion by proxying to the child expression.
28133
28134         * codegen.cs: (ConstantCheckState): Constant evaluation has its
28135         own separate setting that can not be turned off from the command
28136         line using --unchecked or --checked and is only controlled using
28137         the checked/unchecked statements and expressions.  This setting is
28138         used by the constant folder to flag errors.
28139
28140         * expression.cs (CheckedExpr, UncheckedExpr): Set the
28141         ConstantCheckState as well.   
28142
28143         During Resolve, they also have to flag the state, because the
28144         constant folder runs completely in the Resolve phase.
28145
28146         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
28147         well.
28148
28149 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28150
28151         * cfold.cs: New file, this file contains the constant folder.
28152
28153         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
28154         argument to track whether we are using the resulting address to
28155         load or store a value and provide better error messages. 
28156
28157         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
28158         new AddressOf arguments.
28159
28160         * statement.cs (Foreach.EmitCollectionForeach): Update
28161
28162         * expression.cs (Argument.Emit): Call AddressOf with proper
28163         arguments to track usage.
28164
28165         (New.DoEmit): Call AddressOf with new arguments.
28166
28167         (Unary.Emit): Adjust AddressOf call.
28168
28169 2002-03-01  Ravi Pratap  <ravi@ximian.com>
28170
28171         * cs-parser.jay (member_access): Change the case for pre-defined types
28172         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
28173         this suggestion.
28174
28175         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
28176         a method body.
28177
28178         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
28179         essentially like methods and apply attributes like MethodImplOptions to them too.
28180
28181         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
28182         not being null.
28183
28184         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
28185         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
28186         is the DeclSpace.
28187
28188         * Update code everywhere accordingly.
28189
28190         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28191
28192         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28193
28194 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28195
28196         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28197         try performing lookups against those instead of jumping straight into using
28198         the 'using' clauses.
28199
28200         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28201
28202         (LookupType): Perform lookups in implicit parents too.
28203
28204         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28205         sequence as RootContext.LookupType. 
28206
28207         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28208         the various cases of namespace lookups into this method.
28209
28210 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28211
28212         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28213         in positional arguments)
28214
28215         * class.cs (Operator): Update the AllowedModifiers to contain
28216         extern. 
28217
28218         * cs-parser.jay: Update operator declaration to allow for the
28219         operator body to be empty.
28220
28221         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28222         values. 
28223
28224 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28225
28226         * class.cs (Method.Emit): Label parameters.
28227
28228         * driver.cs: Return 1 or 0 as the program exit code.
28229
28230 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28231
28232         * expression.cs: Special case the `null' object when trying to
28233         auto-compute the type, as anything can be explicitly converted to
28234         that. 
28235
28236         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28237         spotting this Paolo.
28238
28239         (Expression.ImplicitNumericConversion): Perform comparissions of
28240         the type using the underlying type in the case of an enumeration
28241         rather than using the enumeration type for the compare.
28242
28243         Cope with the underlying == type case, which is not possible to
28244         catch before. 
28245
28246         (Expression.ConvertNumericExplicit): Perform comparissions of
28247         the type using the underlying type in the case of an enumeration
28248         rather than using the enumeration type for the compare.
28249
28250         * driver.cs: If the user does not supply an extension, assume .exe
28251
28252         * cs-parser.jay (if_statement): Rewrote so that we can track the
28253         location for the if statement.
28254
28255         * expression.cs (Binary.ConstantFold): Only concat strings when
28256         the operation is "+", not everything ;-)
28257
28258         * statement.cs (Statement.EmitBoolExpression): Take a location
28259         argument. 
28260         (If, While, Do): Track location.
28261
28262         * expression.cs (Binary.ResolveOperator): In the object + string
28263         case, I was missing a call to ConvertImplicit
28264
28265 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28266
28267         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28268         Location arguments. Ensure we use RootContext.LookupType to do our work
28269         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28270
28271         * interface.cs (PopulateMethod): Handle the type of the parameter being
28272         null gracefully.
28273
28274         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28275         have a params method with no fixed arguments and a call is made with no
28276         arguments.
28277
28278 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28279
28280         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28281         the verbatim-string-literal
28282
28283         * support.cs (InternalParameters.ParameterModifier): handle null
28284         fixed parameters.
28285         (InternalParameters.ParameterType): ditto.
28286
28287         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28288         duplicating the name of the variable parameter.
28289         (GetParameterByName): Fix bug where we were not looking up array
28290         paramters if they were the only present (thanks Paolo!).
28291         (GetParameterInfo): We only have an empty set of types if both
28292         fixed and array are set to null.
28293         (GetParameterInfo-idx): Handle FixedParameter == null
28294
28295         * cs-parser.jay: Handle the case where there is no catch
28296         statements (missing null test).
28297
28298 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28299
28300         * driver.cs (MainDriver): Be conservative on our command line
28301         handling.
28302
28303         Catch DirectoryNotFoundException when calling GetFiles.
28304
28305         (SplitPathAndPattern): Used to split the input specification into
28306         a path and a pattern that we can feed to Directory.GetFiles.
28307
28308 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28309
28310         * statement.cs (Fixed): Implement the last case of the Fixed
28311         statement (string handling).
28312
28313         * expression.cs (StringPtr): New class used to return a char * to
28314         a string;  Used by the Fixed statement.
28315
28316         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28317
28318         * expression.cs (Binary.ResolveOperator): Remove redundant
28319         MemberLookup pn parent type.
28320         Optimize union call, we do not need a union if the types are the same.
28321         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28322         type.
28323
28324         Specialize the use of MemberLookup everywhere, instead of using
28325         the default settings. 
28326
28327         (StackAlloc): Implement stackalloc keyword.
28328
28329         * cs-parser.jay: Add rule to parse stackalloc.
28330
28331         * driver.cs: Handle /h, /help, /?
28332
28333         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28334         before we supported unsafe code.
28335
28336         * makefile: add --unsafe to the self compilation of mcs.
28337
28338 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28339
28340         * expression.cs (PointerArithmetic): New class that is used to
28341         perform pointer arithmetic.
28342         (Binary.Resolve): Handle pointer arithmetic
28343         Handle pointer comparission.
28344         (ArrayPtr): Utility expression class that is used to take the
28345         address of an array.
28346
28347         (ElementAccess): Implement array access for pointers
28348
28349         * statement.cs (Fixed): Implement fixed statement for arrays, we
28350         are missing one more case before we are done.
28351
28352         * expression.cs (Indirection): Implement EmitAssign and set the
28353         ExprClass to Variable.  This allows pointer dereferences to be
28354         treated as variables, and to have values assigned to them.
28355
28356         * ecore.cs (Expression.StoreFromPtr): New utility function to
28357         store values dereferencing.
28358
28359 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28360
28361         * expression.cs (Binary.ResolveOperator): Ensure that we are
28362         not trying to operate on a void type - this fixes the reported
28363         bug.
28364
28365         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28366         the parent implementation is sealed.
28367
28368         * ../errors/cs0239.cs : Add.
28369
28370         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28371
28372         * typemanager.cs (unverifiable_code_type): Corresponds to 
28373         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28374         which have unsafe code in them.
28375
28376         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28377         unsafe context.
28378
28379 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28380
28381         * cs-tokenizer.cs: Add support for @"litreal strings"
28382
28383         Make tokenizer accept pre-processor directives
28384         on any column (remove the old C-like limitation). 
28385
28386         * rootcontext.cs (EmitCode): Emit any global attributes.
28387         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28388
28389         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28390
28391         * cs-parser.jay: Add support for global attributes.  
28392
28393 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28394
28395         * expression.cs (Indirection): New helper class.  Unary will
28396         create Indirection classes to be able to implement the
28397         IMemoryLocation interface on it.
28398
28399 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28400
28401         * cs-parser.jay (fixed_statement): reference the right statement.
28402
28403         * statement.cs (Fixed.Emit): Finish implementing the fixed
28404         statement for the &x case.
28405
28406 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28407
28408         * class.cs (Property.Define, Method.Define): Remove newslot when
28409         `implementing'.  
28410
28411         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28412         wrong.  NewSlot should only be used if the `new' keyword is present.
28413
28414         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28415         locating our system dir.  Sorry about this.
28416
28417 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28418
28419         * driver.cs (GetSystemDir): Compute correctly the location of our
28420         system assemblies.  I was using the compiler directory instead of
28421         the library directory.
28422
28423 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28424
28425         * expression.cs (BetterFunction): Put back in what Miguel commented out
28426         since it is the correct fix. The problem is elsewhere ;-)
28427
28428         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28429         parameters of the parms method are themselves compatible or not !
28430
28431         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28432         to check that a class implements an interface before saying that an implicit
28433         conversion was allowed. Use ImplementsInterface to do the checking.
28434
28435 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28436
28437         * class.cs (Method.Define): Track whether we are an explicit
28438         implementation or not.  And only call DefineMethodOverride if we
28439         are an explicit implementation.
28440
28441         (Property.DefineMethod): Ditto.
28442
28443 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28444
28445         * expression.cs (BetterFunction): Catch hideous bug which was
28446          preventing us from detecting ambiguous calls due to implicit casts i.e
28447         cs0121.
28448
28449 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28450
28451         * support.cs (Pair): Remove un-needed method.  I figured why I was
28452         getting the error in cs-parser.jay, the variable in a foreach loop
28453         is readonly, and the compiler does not really treat this as a variable.
28454
28455         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28456         instead of EQUALS in grammar.  
28457
28458         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28459
28460         * expression.cs (Unary.DoResolve): Check whether the argument is
28461         managed or not.
28462
28463 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28464
28465         * support.cs: Api for Pair to set a value.  Despite the fact that
28466         the variables are public the MS C# compiler refuses to compile
28467         code that accesses the field if the variable is part of a foreach
28468         statement. 
28469
28470         * statement.cs (Fixed): Begin implementation of the fixed
28471         statement.
28472
28473         (Block.AddVariable): Return the VariableInfo on success and null
28474         on failure instead of true/false. 
28475
28476         * cs-parser.jay (foreach): Catch errors on variables already
28477         defined (we were ignoring this value before) and properly unwind
28478         the block hierarchy
28479
28480         (fixed_statement): grammar for the fixed statement.
28481
28482 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28483
28484         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28485         pointer types to be incretemented.
28486
28487         (SizeOf): Implement.
28488
28489         * cs-parser.jay (pointer_member_access): Implement
28490         expr->IDENTIFIER production.
28491
28492         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28493         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28494         on safe contexts.
28495
28496         (Unary): Implement indirection.
28497
28498         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28499         use in non-unsafe context).
28500
28501         (SimpleName.DoResolve): Check for pointers in field access on safe
28502         contexts. 
28503
28504         (Expression.LoadFromPtr): Factor the load-indirect code in this
28505         function.  This was duplicated in UnboxCast and ParameterReference
28506
28507 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28508
28509         * expression.cs (ComposedCast): report an error if a pointer cast
28510         is used in a safe region.
28511
28512         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28513         pointer type casts in unsafe context.
28514
28515         * codegen.cs (EmitContext): Set up IsUnsafe.
28516
28517         * cs-parser.jay (non_expression_type): Add productions for pointer
28518         casts. 
28519
28520         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28521         code.  We should not use force into static mode if the method is
28522         not virtual.  Fixes bug in MIS
28523
28524         * statement.cs (Do.Emit, While.Emit, For.Emit,
28525         Statement.EmitBoolExpression): Add support to Do and While to
28526         propagate infinite loop as `I do return' semantics.
28527
28528         Improve the For case to also test for boolean constants.
28529
28530         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28531         to the list of attributes we can add.
28532
28533         Remove `EmitContext' argument.
28534
28535         * class.cs (Method.Define): Apply parameter attributes.
28536         (Constructor.Define): Apply parameter attributes.
28537         (MethodCore.LabelParameters): Move here the core of labeling
28538         parameters. 
28539
28540         * support.cs (ReflectionParameters.ParameterModifier,
28541         InternalParameters.ParameterModifier): Use IsByRef on the type and
28542         only return the OUT bit for these parameters instead of in/out/ref
28543         flags.
28544
28545         This is because I miss-understood things.  The ParameterInfo.IsIn
28546         and IsOut represent whether the parameter has the [In] and [Out]
28547         attributes set.  
28548
28549 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28550
28551         * ecore.cs (FieldExpr.Emit): Release temporaries.
28552
28553         * assign.cs (LocalTemporary.Release): new function.
28554
28555         * codegen.cs (EmitContext.GetTemporaryStorage,
28556         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28557         temporary storage.  Now we can "put back" localbuilders when we
28558         are done with them
28559
28560 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28561
28562         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28563         need to make a copy of the variable to generate verifiable code.
28564
28565 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28566
28567         * driver.cs: Compute dynamically the system directory.
28568
28569         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28570         Slower, but more generally useful.  Used by the abstract
28571         registering implementation. 
28572
28573         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28574         the rules for the special rule on Type/instances.  First check if
28575         we have the same name, and if so, try that special static path
28576         rather than the instance path.
28577
28578 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28579
28580         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28581         for, while and if.
28582
28583         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28584         Enum, ValueType, Delegate or Array for non-corlib compiles.
28585
28586         * cs-tokenizer.cs: Catch long identifiers (645)
28587
28588         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28589         piece of code.
28590
28591         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28592         fix, we were returning too early, so we were not registering
28593         pending methods from abstract classes.
28594
28595         Do not register pending methods if the class is abstract.
28596
28597         * expression.cs (Conditional.DoResolve): Report circular implicit
28598         conversions when we neecd to compute it for conditional
28599         expressions. 
28600
28601         (Is.DoResolve): If the expression is always of the provided type,
28602         flag warning 183.  If the expression can not ever be of the
28603         provided type flag warning 184.
28604
28605         * class.cs: Catch 169 as well.
28606
28607         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28608         read. 
28609
28610 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28611
28612         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28613
28614 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28615
28616         * interface.cs: (PopulateMethod): Check for pointers being defined
28617         only if the unsafe context is active.
28618         (PopulateProperty): ditto.
28619         (PopulateIndexer): ditto.
28620
28621         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28622         specified.  If pointers are present, make sure that they are
28623         present in an unsafe context.
28624         (Constructor, Constructor.Define): ditto.
28625         (Field, Field.Define): ditto.
28626         (Property, Property.Define): ditto.
28627         (Event, Event.Define): ditto.
28628
28629         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28630         hashtable if there are classes or structs defined.
28631
28632         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28633         code, as the constant resolution moved.
28634
28635         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28636         the metadata, so we can flag error 133. 
28637
28638         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28639         pointer is being declared in an unsafe context.
28640
28641 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28642
28643         * modifiers.cs (Modifiers.Check): Require a Location argument.
28644         Report error 227 for Unsafe use.
28645
28646         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28647
28648         * statement.cs (For.Emit): If the test is null, then report that
28649         we do `return', as we wont reach anything afterwards.
28650
28651         (Switch.SwitchGoverningType): Track the expression that matched
28652         the conversion.
28653
28654         * driver.cs: Allow negative numbers as an error code to flag.
28655
28656         * cs-parser.jay: Handle 1551.
28657
28658         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28659
28660 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28661
28662         * cs-parser.jay: Report 1518 (type declaration can only contain
28663         class, struct, interface, enum or delegate)
28664
28665         (switch_label): Report 1523 (keywords `case' or `default' must
28666         preced code)
28667
28668         (opt_switch_sections): Report 1522 (empty switch)
28669
28670         * driver.cs: Report 1515 (response file specified multiple times)
28671         Report 1516 (Source file specified multiple times).
28672
28673         * expression.cs (Argument.Resolve): Signal 1510
28674
28675         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28676         access not allowed in static code)
28677
28678 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28679
28680         * typemanager.cs (IsPointerType): Utility method which we are going
28681         to need a lot.
28682
28683         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28684         the object type, so we take care of that.
28685
28686         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28687
28688         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28689         added to non-params parameters :-)
28690
28691         * typemanager.cs (CSharpName): Include 'void' type too. 
28692
28693         (void_ptr_type): Include in the set of core types.
28694
28695         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28696         duplicating code.
28697
28698         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28699         an unsafe context.
28700
28701         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28702         completely forgotten about it.
28703
28704 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28705
28706         * cs-parser.jay (pointer_type): Add. This begins our implementation
28707         of parsing rules for unsafe code.
28708
28709         (unsafe_statement): Implement.
28710
28711         (embedded_statement): Modify to include the above.
28712
28713         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28714
28715         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28716         if the current context is an unsafe one.
28717
28718         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28719         are handled differently, we need separate rules for them.
28720
28721         (local_variable_declaration): Update to use local_variable_pointer_type
28722         to allow variable declarations of unmanaged pointer types.
28723
28724         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28725         in unsafe contexts.
28726
28727         * ../errors/cs0214.cs : Add.
28728
28729 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28730
28731         * makefile: remove 'response' file when cleaning.
28732
28733 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28734
28735         * cs-parser.jay: Report 1524.
28736
28737 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28738
28739         * typemanager.cs (RegisterMethod): drop checking if we have
28740         registered this from here
28741
28742 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28743
28744         * class.cs (Method.EmitDestructor): Implement calling our base
28745         destructor. 
28746
28747         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28748         value of InFinally.
28749
28750         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28751         this routine and will wrap the call in a try/catch block.  Deal
28752         with the case.
28753
28754 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28755
28756         * ecore.cs (Expression.MemberLookup): instead of taking a
28757         parameter `same_type' that was used to tell whether we could
28758         access private members we compute our containing type from the
28759         EmitContext.
28760
28761         (FieldExpr): Added partial support for volatile fields.  This does
28762         not work for volatile fields exposed from assemblies, as I can not
28763         figure out how to extract the modreq from it.
28764
28765         Updated all the source files to use this.
28766
28767         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28768         because it is referenced by MemberLookup very often. 
28769
28770 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28771
28772         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28773         TypeBuilder.GetCustomAttributes to retrieve what we need.
28774
28775         Get rid of redundant default_member_attr_type as this is the same as
28776         default_member_type which already exists.
28777
28778         * interface.cs, attribute.cs : Update accordingly.
28779
28780 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28781
28782         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28783         work for TYpeBuilders though.  Ravi, can you please fix this?
28784
28785         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28786
28787         * expression.cs (Argument.Emit): Handle the case of ref objects
28788         being passed to ref functions;  
28789
28790         (ParameterReference.EmitLoad): Loads the content of the pointer
28791         without dereferencing.
28792
28793 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28794
28795         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28796
28797 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28798
28799         * class.cs (Indexer.DefineMethod): Incorporate the interface
28800         type in the name of the method if we are doing explicit interface
28801         implementation.
28802
28803         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28804
28805         (BetterConversion): Fix extremely trivial bug where we were referring to
28806         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28807         again !
28808
28809         * ../errors/bug16.cs : Add although we have fixed it.
28810
28811 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28812
28813         * expression.cs (BaseIndexer): Begin implementation.
28814
28815         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28816
28817         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28818         production directly to remove a shift/reduce, and implement
28819         explicit interface implementation.
28820
28821         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28822         after a floating point suffix.
28823
28824         * expression.cs (DoNumericPromotions): Improved the conversion for
28825         uint/uint.  If we have a constant, we avoid doing a typecast to a
28826         larger type.
28827
28828         * class.cs (Indexer): Implement explicit interface implementation
28829         for indexers.
28830
28831 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28832
28833         * class.cs: make the default instance constructor public and hidebysig.
28834
28835 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28836
28837         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28838         so we can call it from elsewhere.
28839
28840         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28841         we emit it internally if the class has a defined indexer; otherwise the user
28842         emits it by decorating the class definition with the DefaultMemberAttribute.
28843
28844         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28845         attribute is not used on a type which defines an indexer.
28846
28847         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28848         character when we skip whitespace.
28849
28850         * ../errors/cs0646.cs : Add.
28851
28852 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28853
28854         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28855         again. 
28856
28857         * makefile: Add practical target `mcs3.exe' which builds the third
28858         generation compiler. 
28859
28860         * expression.cs (New): Fix structures constructor calling.
28861
28862         * class.cs (Property, Method, Indexer): Emit Final flag on the
28863         method if we are an interface implementation and we are not
28864         abstract. 
28865
28866         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28867         whether this property is referencing a `base' method.
28868
28869         * expression.cs (Invocation.EmitCall): take an extra argument:
28870         is_base, this is used to determine whether the `call' or
28871         `callvirt' opcode should be used.
28872
28873
28874         * delegate.cs: update EmitCall.
28875
28876         * class.cs (Method.Define): Set NewSlot for the cases where we are
28877         not implementing an interface method.
28878
28879         (Property.Define): ditto.
28880
28881 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28882
28883         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28884         'r'.  Allows mcs to parse itself fully.
28885
28886 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28887
28888         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28889         of the number of initializers that require the InitializeArray method.
28890
28891         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28892         update the above field where necessary.
28893
28894         (MakeByteBlob): Update accordingly.
28895
28896         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28897         greater than 2.
28898
28899         (EmitDynamicInitializers): Update in accordance with the new optimization.
28900
28901         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28902         same OpCode applies.
28903
28904         * cs-parser.jay : Fix some glaring errors I introduced.
28905
28906 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28907
28908         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28909         so that we can check for name clashes there too.
28910
28911         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28912         for interface indexers.
28913
28914         * interfaces.cs (Define): Emit the default member attribute.
28915
28916         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28917         variable was being referred to while setting the value ;-)
28918
28919 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28920
28921         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28922         byte-by-byte information when we know the data is zero.
28923
28924         Make the block always a multiple of 4, because
28925         DefineInitializedData has a bug.
28926
28927         * assign.cs: Fix, we should assign from the temporary, not from
28928         the source. 
28929
28930         * expression.cs (MakeByteBlob): Fix my incorrect code.
28931
28932 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28933
28934         * typemanager.cs (EnumToUnderlying): This function is used to get
28935         the underlying type from an enumeration, because it does not
28936         always work. 
28937
28938         * constant.cs: Use the I4_S form for values between -128 and 127.
28939
28940         * statement.cs (Block.LookupLabel): Looks up a label.
28941         (Block): Drop support for labeled blocks.
28942
28943         (LabeledStatement): New kind of statement that represents a label
28944         only.
28945
28946         (Goto): Finally implement this bad boy.
28947
28948         * cs-parser.jay: Update to reflect new mechanism to implement
28949         labels.
28950
28951 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28952
28953         * codegen.cs (EmitContext.This): a codegen property that keeps the
28954         a single instance of this instead of creating many different this
28955         instances. 
28956
28957         * delegate.cs (Delegate.DoResolve): Update to use the property;
28958
28959         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28960
28961         * expression.cs (BaseAccess.DoResolve): Ditto.
28962
28963 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28964
28965         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28966         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28967
28968         (InitCoreTypes): Update accordingly.
28969
28970         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28971         so we can quickly store the state.
28972
28973         (ApplyAttributes): Set the correct implementation flags
28974         for InternalCall methods.
28975
28976 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28977
28978         * expression.cs (EmitCall): if a method is not virtual, then do
28979         not use callvirt on it.
28980
28981         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28982         user defined stuff) requires the use of stobj, which takes an
28983         address on the stack instead of an array and an index.  So emit
28984         the Ldelema operation for it.
28985
28986         (EmitStoreOpcode): Use stobj for valuetypes.
28987
28988         (UnaryMutator.EmitCode): Use the right 1 value depending on
28989         whether we are dealing with int64/uint64, float or doubles.
28990
28991         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28992         constructors that I implemented last night.
28993
28994         (Constructor.IsDefault): Fix to work properly for static
28995         constructors.
28996
28997         * cs-parser.jay (CheckDef): report method signature errors.
28998         Update error number 103 to be 132.
28999
29000         * decl.cs: New AdditionResult enumeration value: MethodExists.
29001         Although we do this check for methods later on in the semantic
29002         analysis, catching repeated default constructors is so easy that
29003         we catch these here. 
29004
29005         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
29006         promotions code.
29007
29008         (ParameterReference.EmitAssign, Emit): handle
29009         bools as bytes.
29010
29011         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
29012         (ArrayAccess.EmitStoreOpcode): ditto.
29013
29014         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
29015
29016         * expression.cs (MakeByteBlob): Complete all the missing types
29017         (uint, short, ushort, byte, sbyte)
29018
29019         * class.cs: Only init instance field initializers on instance
29020         constructors. 
29021
29022         Rename `constructors' to instance_constructors. 
29023
29024         (TypeContainer.AddConstructor): Only add constructors to the list
29025         if it is not static.
29026
29027         Make sure that we handle default_static_constructor independently
29028         everywhere where we handle instance_constructors
29029
29030 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
29031
29032         * class.cs: Do not lookup or create a base initializer for a
29033         static constructor.
29034
29035         (ConstructorInitializer.Resolve): use the proper type to lookup
29036         for constructors.
29037
29038         * cs-parser.jay: Report error 1585 (modifiers between type and name).
29039
29040         * enum.cs, interface.cs: Remove CloseType, this is taken care by
29041         in DeclSpace. 
29042
29043         * decl.cs: CloseType is now an virtual method, the default
29044         implementation just closes this type.
29045
29046 2001-12-28  Ravi Pratap  <ravi@ximian.com>
29047
29048         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
29049         to PreserveSig by default. Also emit HideBySig on such methods.
29050
29051         Basically, set the defaults to standard values.
29052
29053         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
29054         argument, if candidate is better, it can't be worse than the best !
29055
29056         (Invocation): Re-write bits to differentiate between methods being
29057         applicable in their expanded form and their normal form - for params
29058         methods of course.
29059
29060         Get rid of use_standard everywhere as only standard conversions are allowed
29061         in overload resolution. 
29062
29063         More spec conformance.
29064
29065 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29066
29067         * driver.cs: Add --timestamp, to see where the compiler spends
29068         most of its time.
29069
29070         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
29071         `this' in static code.
29072
29073         (SimpleName.DoResolve): Implement in terms of a helper function
29074         that allows static-references to be passed upstream to
29075         MemberAccess.
29076
29077         (Expression.ResolveWithSimpleName): Resolve specially simple
29078         names when called by MemberAccess to implement the special
29079         semantics. 
29080
29081         (Expression.ImplicitReferenceConversion): Handle conversions from
29082         Null to reference types before others, as Null's type is
29083         System.Object. 
29084
29085         * expression.cs (Invocation.EmitCall): Handle the special case of
29086         calling methods declared on a reference type from a ValueType
29087         (Base classes System.Object and System.Enum)
29088
29089         (MemberAccess.Resolve): Only perform lookups on Enumerations if
29090         the left hand side is a TypeExpr, not on every enumeration. 
29091
29092         (Binary.Resolve): If types are reference types, then do a cast to
29093         object on operators != and == of both arguments.
29094
29095         * typemanager.cs (FindMembers): Extract instance and static
29096         members if requested.
29097
29098         * interface.cs (PopulateProperty): Use void_type instead of null
29099         as the return type for the setter method.
29100
29101         (PopulateIndexer): ditto.
29102
29103 2001-12-27  Ravi Pratap  <ravi@ximian.com>
29104
29105         * support.cs (ReflectionParameters): Fix minor bug where we
29106         were examining the wrong parameter for the ParamArray attribute.
29107
29108         Cope with requests for the type of the parameter at position
29109         greater than the params parameter's. We now return the element
29110         type of the params array as that makes more sense.
29111
29112         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
29113         accordingly as we no longer have to extract the element type
29114         ourselves.
29115
29116         (Invocation.OverloadResolve): Update.
29117
29118 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29119
29120         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
29121         against IEnumerator, test whether the return value is a descendant
29122         of the IEnumerator interface.
29123
29124         * class.cs (Indexer.Define): Use an auxiliary method to implement
29125         the other bits of the method definition.  Begin support for
29126         explicit interface implementation.
29127
29128         (Property.DefineMethod): Use TypeManager.void_type instead of null
29129         for an empty return value.
29130
29131 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
29132
29133         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
29134         dealing with a FieldExpr which is composed of a FieldBuilder, in
29135         the code path we did extract the constant, but we should have
29136         obtained the underlying value to be able to cast it (otherwise we
29137         end up in an infinite loop, this is what Ravi was running into).
29138
29139         (ArrayCreation.UpdateIndices): Arrays might be empty.
29140
29141         (MemberAccess.ResolveMemberAccess): Add support for section
29142         14.5.4.1 that deals with the special case of E.I when E is a type
29143         and something else, that I can be a reference to a static member.
29144
29145         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
29146         handle a particular array type to create byte blobs, it is just
29147         something we dont generate byteblobs for.
29148
29149         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
29150         arguments. 
29151
29152         * location.cs (Push): remove the key from the hashtable that we
29153         are about to add.   This happens for empty files.
29154
29155         * driver.cs: Dispose files after we have parsed them.
29156
29157         (tokenize): new function that only runs the tokenizer on its
29158         input, for speed testing.
29159
29160 2001-12-26  Ravi Pratap  <ravi@ximian.com>
29161
29162         * class.cs (Event.Define): Define the private field only if there
29163         are no accessors defined.
29164
29165         * expression.cs (ResolveMemberAccess): If there is no associated
29166         field with the event, that means we have an event defined with its
29167         own accessors and we should flag error cs0070 since transforming
29168         ourselves into a field is not valid in that case.
29169
29170         * ecore.cs (SimpleName.DoResolve): Same as above.
29171
29172         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
29173         and charset to sane values.
29174
29175 2001-12-25  Ravi Pratap  <ravi@ximian.com>
29176
29177         * assign.cs (DoResolve): Perform check on events only if they 
29178         are being accessed outside the declaring type.
29179
29180         * cs-parser.jay (event_declarations): Update rules to correctly
29181         set the type of the implicit parameter etc.
29182
29183         (add_accessor, remove_accessor): Set current local parameters.
29184
29185         * expression.cs (Binary): For delegate addition and subtraction,
29186         cast the return value from the method into the appropriate delegate
29187         type.
29188
29189 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29190
29191         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29192         of these as the workaround is unnecessary.
29193
29194         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29195         delegate data - none of that is needed at all.
29196
29197         Re-write bits to extract the instance expression and the delegate method
29198         correctly.
29199
29200         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29201         on delegates too.
29202
29203         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29204         of attaching attributes instead of duplicating code everywhere.
29205
29206         * everywhere : Update code to do attribute emission using the above method.
29207
29208 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29209
29210         * expression.cs (IsParamsMethodApplicable): if there are not
29211         parameters, return immediately.
29212
29213         * ecore.cs: The 0 literal can be implicity converted to an enum
29214         type. 
29215
29216         (SimpleName.DoResolve): First lookup the type, then lookup the
29217         members. 
29218
29219         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29220         want to get its address.  If the InstanceExpression is not
29221         addressable, store the result in a temporary variable, then get
29222         the address of it.
29223
29224         * codegen.cs: Only display 219 errors on warning level or above. 
29225
29226         * expression.cs (ArrayAccess): Make it implement the
29227         IMemoryLocation interface.
29228
29229         (Binary.DoResolve): handle the operator == (object a, object b)
29230         and operator != (object a, object b) without incurring into a
29231         BoxedCast (because 5 != o should never be performed).
29232
29233         Handle binary enumerator operators.
29234
29235         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29236         value type, otherwise use Ldelem_ref.
29237
29238         Use precomputed names;
29239
29240         (AddressOf): Implement address of
29241
29242         * cs-parser.jay (labeled_statement): Fix recursive block
29243         addition by reworking the production.
29244
29245         * expression.cs (New.DoEmit): New has a special case:
29246                 
29247                  If we are dealing with a ValueType, we have a few
29248                  situations to deal with:
29249                 
29250                     * The target of New is a ValueType variable, that is
29251                       easy, we just pass this as the variable reference
29252                 
29253                     * The target of New is being passed as an argument,
29254                       to a boxing operation or a function that takes a
29255                       ValueType.
29256                 
29257                       In this case, we need to create a temporary variable
29258                       that is the argument of New.
29259
29260
29261 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29262
29263         * rootcontext.cs (LookupType): Check that current_type is not null before
29264         going about looking at nested types.
29265
29266         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29267         not implement the IAssignMethod interface any more.
29268
29269         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29270         where we tranform them into FieldExprs if they are being resolved from within
29271         the declaring type.
29272
29273         * ecore.cs (SimpleName.DoResolve): Do the same here.
29274
29275         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29276
29277         * ../errors/bug10.cs : Add.
29278
29279         * ../errors/cs0070.cs : Add.
29280
29281         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29282
29283         * assign.cs : Get rid of EventIsLocal everywhere.
29284
29285 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29286
29287         * ecore.cs (ConvertIntLiteral): finished the implementation.
29288
29289         * statement.cs (SwitchLabel): Convert the value we are using as a
29290         key before looking up the table.
29291
29292 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29293
29294         * codegen.cs (EmitTopBlock): Require a Location argument now.
29295
29296         * cs-parser.jay (constructor_declarator): We need to setup
29297         current_local_parameters before we parse the
29298         opt_constructor_initializer, to allow the variables to be bound
29299         to the constructor arguments.
29300
29301         * rootcontext.cs (LookupType): First lookup nested classes in our
29302         class and our parents before we go looking outside our class.
29303
29304         * expression.cs (ConstantFold): Extract/debox the values at the
29305         beginnning. 
29306
29307         * rootcontext.cs (EmitCode): Resolve the constants first before we
29308         resolve the types.  This is not really needed, but it helps debugging.
29309
29310         * statement.cs: report location.
29311
29312         * cs-parser.jay: pass location to throw statement.
29313
29314         * driver.cs: Small bug fix.
29315
29316         * report.cs: Updated format to be 4-zero filled digits.
29317
29318 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29319
29320         * expression.cs (CheckIndices): Fix minor bug where the wrong
29321         variable was being referred to ;-)
29322
29323         (DoEmit): Do not call EmitStaticInitializers when the 
29324         underlying type is System.Object.
29325
29326 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29327
29328         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29329         and do the usual workaround for SRE.
29330
29331         * class.cs (MyEventBuilder.EventType): New member to get at the type
29332         of the event, quickly.
29333
29334         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29335
29336         * assign.cs (Assign.DoResolve): Handle the case when the target
29337         is an EventExpr and perform the necessary checks.
29338
29339         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29340         interface.
29341
29342         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29343
29344         (EventExpr): Set the type in the constructor itself since we 
29345         are meant to be born fully resolved.
29346
29347         (EventExpr.Define): Revert code I wrote earlier.
29348                 
29349         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29350         instance expression is null. The instance expression is a This in that case
29351         or a null, depending on whether it is a static method or not.
29352
29353         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29354         refers to more than one method.
29355
29356         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29357         and accordingly flag errors.
29358
29359 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29360
29361         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29362
29363 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29364
29365         * location.cs (ToString): Provide useful rutine.
29366
29367 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29368
29369         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29370         objects, return the actual integral boxed.
29371
29372         * statement.cs (SwitchLabel): define an ILLabel for each
29373         SwitchLabel. 
29374
29375         (Switch.CheckSwitch): If the value is a Literal, extract
29376         the underlying literal.
29377
29378         Also in the unused hashtable we had, add the SwitchLabel so we can
29379         quickly look this value up.
29380
29381         * constant.cs: Implement a bunch of new constants.  Rewrite
29382         Literal based on this.  Made changes everywhere to adapt to this.
29383
29384         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29385         dereferencing array only once, and also copes with enumrations.
29386
29387         bytes are two bytes wide, not one.
29388
29389         (Cast): Perform constant conversions.
29390
29391         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29392         wrappers to the literals here.
29393
29394         * expression.cs (DoNumericPromotions): long literals can converted
29395         to ulong implicity (this is taken care of elsewhere, but I was
29396         missing this spot).
29397
29398         * ecore.cs (Expression.Literalize): Make the return type Literal,
29399         to improve type checking.
29400
29401         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29402
29403 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29404
29405         * literal.cs: Revert code from ravi that checked the bounds.  The
29406         bounds are sane by the definition of the type itself. 
29407
29408         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29409         need to actually look up in our parent hierarchy for interfaces
29410         implemented. 
29411
29412         * const.cs: Use the underlying type for enumerations
29413
29414         * delegate.cs: Compute the basename for the delegate creation,
29415         that should fix the delegate test case, and restore the correct
29416         Type Lookup semantics in rootcontext
29417
29418         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29419         referencing a nested type with the Reflection API is using the "+"
29420         sign. 
29421
29422         * cs-parser.jay: Do not require EOF token at the end.
29423
29424 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29425
29426         * rootcontext.cs (LookupType): Concatenate type names with
29427         a '.' instead of a '+' The test suite passes again.
29428
29429         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29430         field of the enumeration.
29431
29432         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29433         the case when the member is an EventExpr.
29434
29435         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29436         static has an associated instance expression.
29437
29438         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29439
29440         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29441
29442         * class.cs (Event.Define): Register event and perform appropriate checks
29443         for error #111.
29444
29445         We define the Add and Remove methods even if the use provides none because
29446         in that case, we provide default implementations ourselves.
29447
29448         Define a private field of the type of the event. This is done by the CSC compiler
29449         and we should be doing it too ;-)
29450
29451         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29452         More methods we use in code we generate.
29453
29454         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29455         is important.
29456
29457         (InitCoreTypes): Update accordingly for the above.
29458
29459         * class.cs (Event.Emit): Generate code for default accessors that we provide
29460
29461         (EmitDefaultMethod): Do the job in the above.
29462
29463         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29464         appropriate place.
29465
29466 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29467
29468         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29469         builders even if we were missing one.
29470
29471         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29472         pass the Basename as our class name instead of the Name.  The
29473         basename will be correctly composed for us.
29474
29475         * parameter.cs (Paramters): Now takes a Location argument.
29476
29477         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29478         make all the code call directly LookupType in RootContext and take
29479         this chance to pass the Location information everywhere.
29480
29481         * Everywhere: pass Location information.
29482
29483 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29484
29485         * class.cs (Constructor.Define): Updated way of detecting the
29486         length of the parameters.
29487
29488         (TypeContainer.DefineType): Use basename as the type name for
29489         nested types.
29490
29491         (TypeContainer.Define): Do not recursively define types here, as
29492         definition is taken care in order by the RootContext.
29493
29494         * tree.cs: Keep track of namespaces in a per-file basis.
29495
29496         * parameter.cs (Parameter.ComputeSignature): Update to use
29497         DeclSpace. 
29498
29499         (Parameters.GetSignature): ditto.
29500
29501         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29502         instead of a TypeContainer.
29503
29504         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29505         resolve names.  Because we need to be resolve in our context, not
29506         our parents.
29507
29508         * driver.cs: Implement response files.
29509
29510         * class.cs (TypeContainer.DefineType): If we are defined, do not
29511         redefine ourselves.
29512
29513         (Event.Emit): Emit the code for add/remove handlers.
29514         (Event.Define): Save the MethodBuilders for add/remove.
29515
29516         * typemanager.cs: Use pair here too.
29517
29518         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29519         DictionaryEntry requires the first argument to be non-null.  
29520
29521         (enum_declaration): Compute full name for registering the
29522         enumeration.
29523
29524         (delegate_declaration): Instead of using
29525         formal_parameter_list, use opt_formal_parameter_list as the list
29526         can be empty.
29527
29528         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29529         (EventParsing): New property that controls whether `add' and
29530         `remove' are returned as tokens or identifiers (for events);
29531
29532 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29533
29534         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29535         use MyEventBuilder only and let it wrap the real builder for us.
29536
29537         (MyEventBuilder): Revamp constructor etc.
29538
29539         Implement all operations that we perform on EventBuilder in precisely the same
29540         way here too.
29541
29542         (FindMembers): Update to use the EventBuilder member.
29543
29544         (Event.Emit): Update accordingly.
29545
29546 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29547
29548         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29549         by calling the appropriate methods.
29550
29551         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29552         useful.
29553
29554         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29555
29556 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29557
29558         * delegate.cs (Delegate.Populate): Check that the return type
29559         and various parameters types are indeed accessible.
29560
29561         * class.cs (Constructor.Define): Same here.
29562
29563         (Field.Define): Ditto.
29564
29565         (Event.Define): Ditto.
29566
29567         (Operator.Define): Check that the underlying Method defined itself
29568         correctly - so it's MethodBuilder should not be null.
29569
29570         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29571         expression happens to be null.
29572
29573         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29574         members but as of now we don't seem to be able to do anything really useful with it.
29575
29576         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29577         not the EventBuilder.
29578
29579 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29580
29581         * cs-tokenizer.cs: Add support for defines.
29582         Add support for #if, #elif, #else, #endif
29583
29584         (eval_var): evaluates a variable.
29585         (eval): stubbed for evaluating functions.
29586
29587         * cs-parser.jay: Pass the defines information
29588
29589         * driver.cs: Add --define command line option.
29590
29591         * decl.cs: Move MemberCore here.
29592
29593         Make it the base class for DeclSpace.  This allows us to catch and
29594         report 108 and 109 for everything now.
29595
29596         * class.cs (TypeContainer.Define): Extract all the members
29597         before populating and emit the warning 108 (new keyword required
29598         to override) instead of having each member implement this.
29599
29600         (MemberCore.Define): New abstract method, we will be using this in
29601         the warning reporting engine in Populate.
29602
29603         (Operator.Define): Adjust to new MemberCore protocol. 
29604
29605         * const.cs (Const): This does not derive from Expression, it is a
29606         temporary object we use to create fields, it is a MemberCore. 
29607
29608         * class.cs (Method.Define): Allow the entry point to be in a
29609         specific class.
29610
29611         * driver.cs: Rewrite the argument handler to clean it up a bit.
29612
29613         * rootcontext.cs: Made it just an auxiliary namespace feature by
29614         making everything static.
29615
29616         * driver.cs: Adapt code to use RootContext type name instead of
29617         instance variable.
29618
29619         * delegate.cs: Remove RootContext argument.
29620
29621         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29622         argument. 
29623
29624         * class.cs (Event.Define): The lookup can fail.
29625
29626         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29627
29628         * expression.cs: Resolve the this instance before invoking the code.
29629
29630 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29631
29632         * cs-parser.jay: Add a production in element_access that allows
29633         the thing to become a "type" reference.  This way we can parse
29634         things like "(string [])" as a type.
29635
29636         Note that this still does not handle the more complex rules of
29637         casts. 
29638
29639
29640         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29641
29642         * ecore.cs: (CopyNewMethods): new utility function used to
29643         assemble the list of methods from running FindMembers.
29644
29645         (MemberLookup): Rework FindMembers so that 
29646
29647 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29648
29649         * class.cs (TypeContainer): Remove Delegates who fail to be
29650         defined.
29651
29652         * delegate.cs (Populate): Verify that we dont get null return
29653         values.   TODO: Check for AsAccessible.
29654
29655         * cs-parser.jay: Use basename to emit error 574 (destructor should
29656         have the same name as container class), not the full name.
29657
29658         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29659         possible representation.  
29660
29661         Also implements integer type suffixes U and L.
29662
29663 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29664
29665         * expression.cs (ArrayCreation.DoResolve): We need to do the
29666         argument resolution *always*.
29667
29668         * decl.cs: Make this hold the namespace.  Hold the root context as
29669         well.
29670         (LookupType): Move here.
29671
29672         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29673
29674         * location.cs (Row, Name): Fixed the code, it was always returning
29675         references to the first file.
29676
29677         * interface.cs: Register properties defined through interfaces.
29678
29679         * driver.cs: Add support for globbing on the command line
29680
29681         * class.cs (Field): Make it derive from MemberCore as well.
29682         (Event): ditto.
29683
29684 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29685
29686         * class.cs (Event::Define): Check that the type of the event is a delegate
29687         type else flag error #66.
29688
29689         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29690         same.
29691
29692         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29693         values of EntryPoint, CharSet etc etc.
29694
29695         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29696
29697         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29698         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29699         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29700         which needs this to do its work.
29701
29702         * ../errors/cs0066.cs : Add.
29703
29704 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29705
29706         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29707         helper functions.
29708
29709         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29710         clears out the parameters field.
29711         (MemberSignatureCompare): Cleanup
29712
29713         (MemberCore): New base class used to share code between MethodCore
29714         and Property.
29715
29716         (RegisterRequiredImplementations) BindingFlags.Public requires
29717         either BindingFlags.Instace or Static.  Use instance here.
29718
29719         (Property): Refactored code to cope better with the full spec.
29720
29721         * parameter.cs (GetParameterInfo): Return an empty array instead
29722         of null on error.
29723
29724         * class.cs (Property): Abstract or extern properties have no bodies.
29725
29726         * parameter.cs (GetParameterInfo): return a zero-sized array.
29727
29728         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29729         method modifier validation to the typecontainer so we can reuse
29730         this on properties.
29731
29732         (MethodCore.ParameterTypes): return an empty sized array of types.
29733
29734         (Property.Define): Test property modifier validity.
29735
29736         Add tests for sealed/override too.
29737
29738         (Method.Emit): abstract or extern methods have no bodies.
29739
29740 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29741
29742         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29743         thing.
29744
29745         (Method::Define, ::Emit): Modify accordingly.
29746
29747         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29748
29749         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29750
29751         * makefile: Pass in /unsafe.
29752
29753 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29754
29755         * class.cs (MakeKey): Kill routine.
29756
29757         * class.cs (TypeContainer.Define): Correctly define explicit
29758         method implementations (they require the full interface name plus
29759         the method name).
29760
29761         * typemanager.cs: Deply the PtrHashtable here and stop using the
29762         lame keys.  Things work so much better.
29763
29764         This of course broke everyone who depended on `RegisterMethod' to
29765         do the `test for existance' test.  This has to be done elsewhere.
29766
29767         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29768         the object stupid Equals method (because, that like fails all over
29769         the place).  We still do not use it.
29770
29771         * class.cs (TypeContainer.SetRequiredInterface,
29772         TypeContainer.RequireMethods): Killed these two routines and moved
29773         all the functionality to RegisterRequiredImplementations.
29774
29775         (TypeContainer.RegisterRequiredImplementations): This routine now
29776         registers all the implementations required in an array for the
29777         interfaces and abstract methods.  We use an array of structures
29778         which can be computed ahead of time to reduce memory usage and we
29779         also assume that lookups are cheap as most classes will not
29780         implement too many interfaces.
29781
29782         We also avoid creating too many MethodSignatures.
29783
29784         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29785         clear the "pending" bit if we find that there are problems with
29786         the declaration.
29787
29788         (TypeContainer.VerifyPendingMethods): Update to report errors of
29789         methods that look like implementations but are not.
29790
29791         (TypeContainer.Define): Add support for explicit interface method
29792         implementation. 
29793
29794 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29795
29796         * typemanager.cs: Keep track of the parameters here instead of
29797         being a feature of the TypeContainer.
29798
29799         * class.cs: Drop the registration of parameters here, as
29800         InterfaceMethods are also interface declarations.
29801
29802         * delegate.cs: Register methods with the TypeManager not only with
29803         the TypeContainer.  This code was buggy.
29804
29805         * interface.cs: Full registation here.
29806
29807 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29808
29809         * expression.cs: Remove reducer for binary expressions, it can not
29810         be done this way.
29811
29812         * const.cs: Put here the code that used to go into constant.cs
29813
29814         * constant.cs: Put here the code for constants, this is a new base
29815         class for Literals.
29816
29817         * literal.cs: Make Literal derive from Constant.
29818
29819 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29820
29821         * statement.cs (Return.Emit): Report error 157 if the user
29822         attempts to return from a finally block.
29823
29824         (Return.Emit): Instead of emitting a return, jump to the end of
29825         the function.
29826
29827         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29828         LocalBuilder to store the result of the function.  ReturnLabel is
29829         the target where we jump.
29830
29831
29832 2001-12-09  Radek Doulik  <rodo@ximian.com>
29833
29834         * cs-parser.jay: remember alias in current namespace
29835
29836         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29837         namespaces
29838
29839         * class.cs (LookupAlias): lookup alias in my_namespace
29840
29841         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29842         aliases hashtable
29843         (LookupAlias): lookup alias in this and if needed in parent
29844         namespaces
29845
29846 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29847
29848         * support.cs: 
29849
29850         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29851         making things static.  I need this to avoid passing the
29852         TypeContainer when calling ParameterType.
29853
29854         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29855         that did string manipulation to compute the type and then call
29856         GetType.  Use Parameter.ParameterType instead.
29857
29858         * cs-tokenizer.cs: Consume the suffix for floating values.
29859
29860         * expression.cs (ParameterReference): figure out whether this is a
29861         reference parameter or not.  Kill an extra variable by computing
29862         the arg_idx during emission.
29863
29864         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29865         function that returns whether a parameter is an out/ref value or not.
29866
29867         (Parameter.ParameterType): The type of the parameter (base,
29868         without ref/out applied).
29869
29870         (Parameter.Resolve): Perform resolution here.
29871         (Parameter.ExternalType): The full type (with ref/out applied).
29872
29873         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29874         support for expressions on the using statement.
29875
29876 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29877
29878         * statement.cs (Using.EmitLocalVariableDecls): Split the
29879         localvariable handling of the using statement.
29880
29881         (Block.EmitMeta): Keep track of variable count across blocks.  We
29882         were reusing slots on separate branches of blocks.
29883
29884         (Try.Emit): Emit the general code block, we were not emitting it. 
29885
29886         Check the type of the declaration to be an IDisposable or
29887         something that can be implicity converted to it. 
29888
29889         Emit conversions if required.
29890
29891         * ecore.cs (EmptyExpression): New utility class.
29892         (Expression.ImplicitConversionExists): New utility function.
29893
29894 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29895
29896         * statement.cs (Using): Implement.
29897
29898         * expression.cs (LocalVariableReference): Support read only variables.
29899
29900         * statement.cs: Remove the explicit emit for the Leave opcode.
29901         (VariableInfo): Add a readonly field.
29902
29903 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29904
29905         * ecore.cs (ConvCast): new class used to encapsulate the various
29906         explicit integer conversions that works in both checked and
29907         unchecked contexts.
29908
29909         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29910         properly generate the overflow opcodes.
29911
29912 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29913
29914         * statement.cs: The correct type for the EmptyExpression is the
29915         element_type, not the variable type.  Ravi pointed this out.
29916
29917 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29918
29919         * class.cs (Method::Define): Handle PInvoke methods specially
29920         by using DefinePInvokeMethod instead of the usual one.
29921
29922         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29923         above to do the task of extracting information and defining the method.
29924
29925 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29926
29927         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29928         of the condition for string type.
29929
29930         (Emit): Move that here. 
29931
29932         (ArrayCreation::CheckIndices): Keep string literals in their expression
29933         form.
29934
29935         (EmitDynamicInitializers): Handle strings appropriately.
29936
29937 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29938
29939         * codegen.cs (EmitContext): Replace multiple variables with a
29940         single pointer to the current Switch statement.
29941
29942         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29943         EmitContext.
29944
29945 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29946
29947         * statement.cs 
29948
29949         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29950         default'.
29951
29952         (Foreach.Emit): Foreach on arrays was not setting
29953         up the loop variables (for break/continue).
29954
29955         (GotoCase): Semi-implented.
29956
29957 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29958
29959         * attribute.cs (CheckAttribute): Handle system attributes by using
29960         Attribute.GetAttributes to examine information we need.
29961
29962         (GetValidPlaces): Same here.
29963
29964         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29965
29966         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29967
29968         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29969
29970         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29971
29972         (Method::Emit): Handle the case when we are a PInvoke method.
29973
29974 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29975
29976         * expression.cs: Use ResolveWithSimpleName on compound names.
29977
29978 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29979
29980         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29981         before trying to reduce it.
29982
29983         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29984
29985         * constant.cs (LookupConstantValue): Implement.
29986
29987         (EmitConstant): Use the above in emitting the constant.
29988
29989         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29990         that are user-defined by doing a LookupConstantValue on them.
29991
29992         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29993         too, like above.
29994
29995 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29996
29997         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29998
29999         (BaseAccess.DoResolve): Implement.
30000
30001         (MemberAccess.DoResolve): Split this routine into a
30002         ResolveMemberAccess routine that can be used independently
30003
30004 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
30005
30006         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
30007         As that share bits of the implementation.  Is returns a boolean,
30008         while As returns the Type that is being probed.
30009
30010 2001-12-01  Ravi Pratap  <ravi@ximian.com>
30011
30012         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
30013         instead of a Literal - much easier.
30014
30015         (EnumInTransit): Remove - utterly useless :-)
30016
30017         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
30018
30019         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
30020
30021         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
30022         chain when we have no associated expression.
30023
30024 2001-11-30  Ravi Pratap  <ravi@ximian.com>
30025
30026         * constant.cs (Define): Use Location while reporting the errror.
30027
30028         Also emit a warning when 'new' is used and there is no inherited
30029         member to hide.
30030
30031         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
30032         populated.
30033
30034         (LookupEnumValue): Implement to lookup an enum member's value and define it
30035         if necessary.
30036
30037         (Populate): Re-write accordingly to use the above routine.
30038
30039 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
30040
30041         * expression.cs (This): Fix prototype for DoResolveLValue to
30042         override the base class DoResolveLValue.
30043
30044         * cs-parser.cs: Report errors cs574 and cs575 (destructor
30045         declarations) 
30046
30047         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
30048         (we need to load the address of the field here).  This fixes
30049         test-22. 
30050
30051         (FieldExpr.DoResolveLValue): Call the DoResolve
30052         function to initialize the Instance expression.
30053
30054         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
30055         correctly the GetEnumerator operation on a value type.
30056
30057         * cs-parser.jay: Add more simple parsing error catches.
30058
30059         * statement.cs (Switch): Add support for string switches.
30060         Handle null specially.
30061
30062         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
30063
30064 2001-11-28  Ravi Pratap  <ravi@ximian.com>
30065
30066         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
30067
30068         (declare_local_constant): New helper function.
30069
30070         * statement.cs (AddConstant): Keep a separate record of constants
30071
30072         (IsConstant): Implement to determine if a variable is a constant.
30073
30074         (GetConstantExpression): Implement.
30075
30076         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
30077
30078         * statement.cs (IsVariableDefined): Re-write.
30079
30080 2001-11-27  Ravi Pratap  <ravi@ximian.com>
30081
30082         * class.cs (TypeContainer::FindMembers): Look for constants
30083         in the case when we are looking for MemberTypes.Field
30084
30085         * expression.cs (MemberAccess::DoResolve): Check that in the
30086         case we are a FieldExpr and a Literal, we are not being accessed
30087         by an instance reference.
30088
30089         * cs-parser.jay (local_constant_declaration): Implement.
30090
30091         (declaration_statement): Implement for constant declarations.
30092
30093 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
30094
30095         * statement.cs (Switch): Catch double defaults.
30096
30097         (Switch): More work on the switch() statement
30098         implementation.  It works for integral values now, need to finish
30099         string support.
30100
30101
30102 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30103
30104         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
30105         integer literals into other integer literals.  To be used by
30106         switch. 
30107
30108 2001-11-24  Ravi Pratap  <ravi@ximian.com>
30109
30110         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
30111         some memory.
30112
30113         (EmitDynamicInitializers): Cope with the above since we extract data
30114         directly from ArrayData now.
30115
30116         (ExpectInitializers): Keep track of whether initializers are mandatory
30117         or not.
30118
30119         (Bounds): Make it a hashtable to prevent the same dimension being 
30120         recorded for every element in that dimension.
30121
30122         (EmitDynamicInitializers): Fix bug which prevented the Set array method
30123         from being found.
30124
30125         Also fix bug which was causing the indices to be emitted in the reverse
30126         order.
30127
30128 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30129
30130         * expression.cs (ArrayCreation): Implement the bits that Ravi left
30131         unfinished.  They do not work, because the underlying code is
30132         sloppy.
30133
30134 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30135
30136         * cs-parser.jay: Remove bogus fixme.
30137
30138         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
30139         on Switch statement.
30140
30141 2001-11-23  Ravi Pratap  <ravi@ximian.com>
30142
30143         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
30144         the same. 
30145
30146         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
30147         parameter. Apparently, any expression is allowed. 
30148
30149         (ValidateInitializers): Update accordingly.
30150
30151         (CheckIndices): Fix some tricky bugs thanks to recursion.
30152
30153         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
30154         I was being completely brain-dead.
30155
30156         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
30157         and re-write acordingly.
30158
30159         (DelegateInvocation): Re-write accordingly.
30160
30161         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
30162
30163         (MakeByteBlob): Handle types more correctly.
30164
30165         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
30166         initialization from expressions but it is incomplete because I am a complete
30167         Dodo :-|
30168
30169 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30170
30171         * statement.cs (If.Emit): Fix a bug that generated incorrect code
30172         on If.  Basically, we have to return `true' (ie, we do return to
30173         our caller) only if both branches of the if return.
30174
30175         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
30176         short-circuit operators, handle them as short circuit operators. 
30177
30178         (Cast.DoResolve): Resolve type.
30179         (Cast.Cast): Take an expression as the target type.
30180
30181         * cs-parser.jay (cast_expression): Remove old hack that only
30182         allowed a limited set of types to be handled.  Now we take a
30183         unary_expression and we resolve to a type during semantic
30184         analysis.
30185
30186         Use the grammar productions from Rhys to handle casts (this is
30187         not complete like Rhys syntax yet, we fail to handle that corner
30188         case that C# has regarding (-x), but we will get there.
30189
30190 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30191
30192         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30193         field which is an array type.
30194
30195         * cs-parser.jay (declare_local_variables): Support array initialization too.
30196
30197         * typemanager.cs (MakeKey): Implement.
30198
30199         (everywhere): Use the above appropriately.
30200
30201         * cs-parser.jay (for_statement): Update for array initialization while
30202         declaring variables.
30203
30204         * ecore.cs : The error message was correct, it's the variable's names that
30205         were misleading ;-) Make the code more readable.
30206
30207         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30208         the correct type etc.
30209
30210         (ConvertExplicit): Handle Enum types by examining the underlying type.
30211
30212 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30213
30214         * parameter.cs (GetCallingConvention): Always return
30215         CallingConventions.Standard for now.
30216
30217 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30218
30219         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30220         and `r' after calling DoNumericPromotions.
30221
30222         * ecore.cs: Fix error message (the types were in the wrong order).
30223
30224         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30225         BindingFlags.Instance as well 
30226
30227         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30228         implicit int literal conversion in an empty cast so that we
30229         propagate the right type upstream.
30230
30231         (UnboxCast): new class used to unbox value types.
30232         (Expression.ConvertExplicit): Add explicit type conversions done
30233         by unboxing.
30234
30235         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30236         the target type before applying the implicit LongLiterals to ULong
30237         literal cast.
30238
30239 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30240
30241         * cs-parser.jay (for_statement): Reworked the way For works: now
30242         we declare manually any variables that are introduced in
30243         for_initializer to solve the problem of having out-of-band code
30244         emition (that is what got for broken).
30245
30246         (declaration_statement): Perform the actual variable declaration
30247         that used to be done in local_variable_declaration here.
30248
30249         (local_variable_declaration): Do not declare anything, just pass
30250         the information on a DictionaryEntry
30251
30252 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30253
30254         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30255         re-write of the logic to now make it recursive.
30256
30257         (UpdateIndices): Re-write accordingly.
30258
30259         Store element data in a separate ArrayData list in the above methods.
30260
30261         (MakeByteBlob): Implement to dump the array data into a byte array.
30262
30263 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30264
30265         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30266         into CheckIndices.
30267
30268         * constant.cs (Define): Implement.
30269
30270         (EmitConstant): Re-write fully.
30271
30272         Pass in location info.
30273
30274         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30275         respectively.
30276
30277         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30278         DictionaryEntry since we need location info too.
30279
30280         (constant_declaration): Update accordingly.
30281
30282         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30283         code into another method : UpdateIndices.
30284
30285 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30286
30287         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30288         some type checking etc.
30289
30290 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30291
30292         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30293         bits to provide dimension info if the user skips doing that.
30294
30295         Update second constructor to store the rank correctly.
30296
30297 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30298
30299         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30300         and try to implement.
30301
30302         * ../errors/cs0150.cs : Add.
30303
30304         * ../errors/cs0178.cs : Add.
30305
30306 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30307
30308         * statement.cs: Implement foreach on multi-dimensional arrays. 
30309
30310         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30311         name of the params argument.
30312
30313         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30314         initializing the array.
30315
30316         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30317         we can use this elsewhere.
30318
30319         * statement.cs: Finish implementation of foreach for single
30320         dimension arrays.
30321
30322         * cs-parser.jay: Use an out-of-band stack to pass information
30323         around, I wonder why I need this.
30324
30325         foreach_block: Make the new foreach_block the current_block.
30326
30327         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30328         function used to return a static Parameters structure.  Used for
30329         empty parameters, as those are created very frequently.
30330
30331         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30332
30333 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30334
30335         * interface.cs : Default modifier is private, not public. The
30336         make verify test passes again.
30337
30338 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30339
30340         * support.cs (ReflectionParameters): Fix logic to determine
30341         whether the last parameter is a params one. Test 9 passes again.
30342
30343         * delegate.cs (Populate): Register the builders we define with
30344         RegisterParameterForBuilder. Test 19 passes again.
30345
30346         * cs-parser.jay (property_declaration): Reference $6 instead
30347         of $$ to get at the location.
30348
30349         (indexer_declaration): Similar stuff.
30350
30351         (attribute): Ditto.
30352
30353         * class.cs (Property): Register parameters for the Get and Set methods
30354         if they exist. Test 23 passes again.
30355
30356         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30357         call to EmitArguments as we are sure there aren't any params arguments. 
30358         Test 32 passes again.
30359
30360         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30361         IndexOutOfRangeException. 
30362
30363         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30364         Test 33 now passes again.
30365
30366 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30367
30368         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30369         broke a bunch of things.  Will have to come up with a better way
30370         of tracking locations.
30371
30372         * statement.cs: Implemented foreach for single dimension arrays.
30373
30374 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30375
30376         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30377         an error.  This removes the lookup from the critical path.
30378
30379         * cs-parser.jay: Removed use of temporary_loc, which is completely
30380         broken. 
30381
30382 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30383
30384         * support.cs (ReflectionParameters.ParameterModifier): Report
30385         whether the argument is a PARAMS argument or not.
30386
30387         * class.cs: Set the attribute `ParamArrayAttribute' on the
30388         parameter argument.
30389
30390         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30391         and cons_param_array_attribute (ConstructorInfo for
30392         ParamArrayAttribute)., 
30393
30394         * codegen.cs: Emit the return using the `Return' statement, that
30395         way we can report the error correctly for missing return values. 
30396
30397         * class.cs (Method.Emit): Clean up.
30398
30399         * expression.cs (Argument.Resolve): Take another argument: the
30400         location where this argument is used.  Notice that this is not
30401         part of the "Argument" class as to reduce the size of the
30402         structure (we know the approximate location anyways).
30403
30404         Test if the argument is a variable-reference, if not, then
30405         complain with a 206.
30406
30407         (Argument.Emit): Emit addresses of variables.
30408
30409         (Argument.FullDesc): Simplify.
30410
30411         (Invocation.DoResolve): Update for Argument.Resolve.
30412
30413         (ElementAccess.DoResolve): ditto.
30414
30415         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30416         method should be virtual, as this method is always virtual.
30417
30418         (NewDelegate.DoResolve): Update for Argument.Resolve.
30419
30420         * class.cs (ConstructorInitializer.DoResolve): ditto.
30421
30422         * attribute.cs (Attribute.Resolve): ditto.
30423
30424 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30425
30426         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30427
30428         * expression.cs (ParameterReference): Drop IStackStorage and implement
30429         IAssignMethod instead. 
30430
30431         (LocalVariableReference): ditto.
30432
30433         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30434         IAssignMethod instead. 
30435
30436 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30437
30438         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30439         enumerations that are used in heavily used structures derive from
30440         byte in a laughable and pathetic attempt to reduce memory usage.
30441         This is the kind of pre-optimzations that you should not do at
30442         home without adult supervision.
30443
30444         * expression.cs (UnaryMutator): New class, used to handle ++ and
30445         -- separatedly from the other unary operators.  Cleans up the
30446         code, and kills the ExpressionStatement dependency in Unary.
30447
30448         (Unary): Removed `method' and `Arguments' from this class, making
30449         it smaller, and moving it all to SimpleCall, so I can reuse this
30450         code in other locations and avoid creating a lot of transient data
30451         strucutres when not required.
30452
30453         * cs-parser.jay: Adjust for new changes.
30454
30455 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30456
30457         * enum.cs (Enum.Populate): If there is a failure during
30458         definition, return
30459
30460         * cs-parser.jay (opt_enum_base): we used to catch type errors
30461         here, but this is really incorrect.  The type error should be
30462         catched during semantic analysis.
30463
30464 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30465
30466         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30467         current_local_parameters as expected since I, in my stupidity, had forgotten
30468         to do this :-)
30469
30470         * attribute.cs (GetValidPlaces): Fix stupid bug.
30471
30472         * class.cs (Method::Emit): Perform check on applicability of attributes.
30473
30474         (Constructor::Emit): Ditto.
30475
30476         (Field::Emit): Ditto.
30477
30478         (Field.Location): Store location information.
30479
30480         (Property, Event, Indexer, Operator): Ditto.
30481
30482         * cs-parser.jay (field_declaration): Pass in location for each field.
30483
30484         * ../errors/cs0592.cs : Add.
30485
30486 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30487
30488         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30489
30490         (InitCoreTypes): Update accordingly.
30491
30492         (RegisterAttrType, LookupAttr): Implement.
30493
30494         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30495         info about the same.
30496
30497         (Resolve): Update to populate the above as necessary.
30498
30499         (Error592): Helper.
30500
30501         (GetValidPlaces): Helper to the above.
30502
30503         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30504
30505         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30506
30507 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30508
30509         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30510
30511         * ../errors/cs0617.cs : Add.
30512
30513 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30514
30515         * enum.cs (Emit): Rename to Populate to be more consistent with what
30516         we expect it to do and when exactly it is called.
30517
30518         * class.cs, rootcontext.cs : Update accordingly.
30519
30520         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30521         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30522
30523         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30524
30525         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30526         of a fieldinfo using the above, when dealing with a FieldBuilder.
30527
30528 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30529
30530         * ../errors/cs0031.cs : Add.
30531
30532         * ../errors/cs1008.cs : Add.
30533
30534         * ../errrors/cs0543.cs : Add.
30535
30536         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30537         enum type.
30538
30539         (FindMembers): Implement.
30540
30541         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30542         enums and delegates too.
30543
30544         (enum_types): Rename to builder_to_enum.
30545
30546         (delegate_types): Rename to builder_to_delegate.
30547
30548         * delegate.cs (FindMembers): Implement.
30549
30550 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30551
30552         * typemanager.cs (IsEnumType): Implement.
30553
30554         * enum.cs (Emit): Re-write parts to account for the underlying type
30555         better and perform checking etc.
30556
30557         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30558         of the underlying type.
30559
30560         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30561         value
30562
30563         * enum.cs (error31): Helper to report error #31.
30564
30565         * cs-parser.jay (enum_declaration): Store location of each member too.
30566
30567         * enum.cs (member_to_location): New hashtable. 
30568
30569         (AddEnumMember): Update location hashtable.
30570
30571         (Emit): Use the location of each member while reporting errors.
30572
30573 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30574
30575         * cs-parser.jay: A for_initializer if is a
30576         local_variable_declaration really ammount to have an implicit
30577         block with the variable declaration and no initializer for for.
30578
30579         * statement.cs (For.Emit): Cope with null initializers.
30580
30581         This fixes the infinite loop on for initializers.
30582
30583 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30584
30585         * enum.cs: More cleanup.
30586
30587         * ecore.cs: Remove dead code.
30588
30589         * class.cs (Property.Emit): More simplification.
30590         (Event.Emit): ditto.
30591
30592         Reworked to have less levels of indentation.
30593
30594 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30595
30596         * class.cs (Property): Emit attributes.
30597
30598         (Field): Ditto.
30599
30600         (Event): Ditto.
30601
30602         (Indexer): Ditto.
30603
30604         (Operator): Ditto.
30605
30606         * enum.cs (Emit): Ditto.
30607
30608         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30609         Enums too.
30610
30611         * class.cs (Field, Event, etc.): Move attribute generation into the
30612         Emit method everywhere.
30613
30614         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30615         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30616         as we had no way of defining nested enums !
30617
30618         * rootcontext.cs : Adjust code accordingly.
30619
30620         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30621
30622 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30623
30624         * expression.cs (EvalConstantExpression): Move into ecore.cs
30625
30626         * enum.cs (Enum): Rename some members and make them public and readonly
30627         according to our convention.
30628
30629         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30630         nothing else.
30631
30632         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30633
30634         (Enum::Emit): Write a simple version for now which doesn't try to compute
30635         expressions. I shall modify this to be more robust in just a while.
30636
30637         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30638
30639         (TypeContainer::CloseType): Create the Enum types too.
30640
30641         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30642
30643         * expression.cs (EvalConstantExpression): Get rid of completely.
30644
30645         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30646         user-defined values and other cases.
30647
30648         (IsValidEnumLiteral): Helper function.
30649
30650         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30651         out there in the case we had a literal FieldExpr.
30652
30653         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30654
30655         (Literalize): Revamp a bit to take two arguments.
30656
30657         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30658
30659 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30660
30661         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30662
30663         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30664
30665         (Resolve): Use the above to ensure we have proper initializers.
30666
30667 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30668
30669         * expression.cs (Expression::EvalConstantExpression): New method to 
30670         evaluate constant expressions.
30671
30672         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30673
30674 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30675
30676         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30677         in an array.
30678
30679         (Binary.ResolveOperator): Handle operator != (object a, object b)
30680         and operator == (object a, object b);
30681
30682         (Binary.DoNumericPromotions): Indicate whether the numeric
30683         promotion was possible.
30684
30685         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30686         Implement.  
30687
30688         Made the ArrayAccess implement interface IAssignMethod instead of
30689         IStackStore as the order in which arguments are passed reflects
30690         this.
30691
30692         * assign.cs: Instead of using expr.ExprClass to select the way of
30693         assinging, probe for the IStackStore/IAssignMethod interfaces.
30694
30695         * typemanager.cs: Load InitializeArray definition.
30696
30697         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30698         static data that can be used to initialize arrays. 
30699
30700 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30701
30702         * expression.cs: Handle operator== and operator!= for booleans.
30703
30704         (Conditioal.Reduce): Implement reducer for the ?: operator.
30705
30706         (Conditional.Resolve): Implement dead code elimination.
30707
30708         (Binary.Resolve): Catch string literals and return a new
30709         concatenated string.
30710
30711         (Unary.Reduce): Implement reduction of unary expressions.
30712
30713         * ecore.cs: Split out the expression core handling here.
30714
30715         (Expression.Reduce): New method used to perform constant folding
30716         and CSE.  This is needed to support constant-expressions. 
30717
30718         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30719         targets, and optimize for !x.
30720
30721 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30722
30723         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30724         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30725         set custom atttributes.
30726
30727         * literal.cs (Literal::GetValue): New abstract method to return the actual
30728         value of the literal, cast as an object.
30729
30730         (*Literal): Implement GetValue method.
30731
30732         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30733         expressions to the arraylist but objects of type Argument.
30734
30735         * class.cs (TypeContainer::Emit): Emit our attributes too.
30736
30737         (Method::Emit, Constructor::Emit): Ditto.
30738
30739         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30740         to be ignoring earlier.
30741
30742 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30743
30744         * attribute.cs (AttributeSection::Define): Implement to do the business
30745         of constructing a CustomAttributeBuilder.
30746
30747         (Attribute): New trivial class. Increases readability of code.  
30748
30749         * cs-parser.jay : Update accordingly.
30750
30751         (positional_argument_list, named_argument_list, named_argument): New rules
30752
30753         (attribute_arguments): Use the above so that we are more correct.
30754
30755 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30756
30757         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30758         to perform all checks for a method with a params parameter.
30759
30760         (Invocation::OverloadResolve): Update to use the above method and therefore
30761         cope correctly with params method invocations.
30762
30763         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30764         params too.
30765
30766         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30767         constructors in our parent too because we can't afford to miss out on 
30768         protected ones ;-)
30769
30770         * attribute.cs (AttributeSection): New name for the class Attribute
30771
30772         Other trivial changes to improve readability.
30773
30774         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30775         use the new class names.
30776
30777 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30778
30779         * class.cs (Method::Define): Complete definition for params types too
30780
30781         (Indexer::Define): Ditto.
30782
30783         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30784         Cope everywhere with a request for info about the array parameter.
30785
30786 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30787
30788         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30789
30790         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30791         local_variable_type to extract the string corresponding to the type.
30792
30793         (local_variable_type): Fixup the action to use the new helper method.
30794
30795         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30796         go.
30797
30798         * expression.cs : Clean out code which uses the above.
30799
30800 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30801
30802         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30803         and bale out if necessary by returning a false.
30804
30805         (RegisterProperty): Ditto.
30806
30807         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30808         and print out appropriate error messages.
30809
30810         * interface.cs (everywhere): Ditto.
30811
30812         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30813         location to constructor.
30814
30815         * class.cs (Property, Event, Indexer): Update accordingly.
30816
30817         * ../errors/cs111.cs : Added.
30818
30819         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30820         of a method, as laid down by the spec.
30821
30822         (Invocation::OverloadResolve): Use the above method.
30823
30824 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30825
30826         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30827         now take a TypeContainer and a Parameters object.
30828
30829         (ParameterData): Modify return type of ParameterModifier method to be 
30830         Parameter.Modifier and not a string.
30831
30832         (ReflectionParameters, InternalParameters): Update accordingly.
30833
30834         * expression.cs (Argument::GetParameterModifier): Same here.
30835
30836         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30837         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30838         symbol in it at all so maybe this is only for now.
30839
30840 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30841
30842         * support.cs (InternalParameters): Constructor now takes an extra argument 
30843         which is the actual Parameters class.
30844
30845         (ParameterDesc): Update to provide info on ref/out modifiers.
30846
30847         * class.cs (everywhere): Update call to InternalParameters to pass in
30848         the second argument too.
30849
30850         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30851         to return the modifier info [ref/out etc]
30852
30853         (InternalParameters, ReflectionParameters): Implement the above.
30854
30855         * expression.cs (Argument::ParameterModifier): Similar function to return
30856         info about the argument's modifiers.
30857
30858         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30859         too.
30860
30861         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30862         a new SetFormalParameters object which we pass to InternalParameters.
30863
30864 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30865
30866         * expression.cs (NewArray): Merge into the ArrayCreation class.
30867
30868 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30869
30870         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30871         NewUserdefinedArray into one as there wasn't much of a use in having
30872         two separate ones.
30873
30874         * expression.cs (Argument): Change field's name to ArgType from Type.
30875
30876         (Type): New readonly property which returns the proper type, taking into 
30877         account ref/out modifiers.
30878
30879         (everywhere): Adjust code accordingly for the above.
30880
30881         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30882         whether we are emitting for a ref or out parameter.
30883
30884         * expression.cs (Argument::Emit): Use the above field to set the state.
30885
30886         (LocalVariableReference::Emit): Update to honour the flag and emit the
30887         right stuff.
30888
30889         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30890
30891         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30892
30893         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30894
30895         (ReflectionParameters, InternalParameters): Implement the above method.
30896
30897         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30898         reporting errors.
30899
30900         (Invocation::FullMethodDesc): Ditto. 
30901
30902 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30903
30904         * cs-parser.jay: Add extra production for the second form of array
30905         creation. 
30906
30907         * expression.cs (ArrayCreation): Update to reflect the above
30908         change. 
30909
30910         * Small changes to prepare for Array initialization.
30911
30912 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30913
30914         * typemanager.cs (ImplementsInterface): interface might be null;
30915         Deal with this problem;
30916
30917         Also, we do store negative hits on the cache (null values), so use
30918         this instead of calling t.GetInterfaces on the type everytime.
30919
30920 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30921
30922         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30923
30924         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30925         split functionality out into different classes.
30926
30927         (New::FormArrayType): Move into NewBuiltinArray.
30928
30929         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30930         quite useless.
30931
30932         (NewBuiltinArray): New class to handle creation of built-in arrays.
30933
30934         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30935         account creation of one-dimensional arrays.
30936
30937         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30938
30939         (NewUserdefinedArray::DoResolve): Implement.
30940
30941         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30942
30943         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30944         we maintain inside the TypeManager. This is necessary to perform lookups on the
30945         module builder.
30946
30947         (LookupType): Update to perform GetType on the module builders too.     
30948
30949         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30950
30951         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30952
30953 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30954
30955         * expression.cs (New::DoResolve): Implement guts of array creation.
30956
30957         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30958
30959 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30960
30961         * expression.cs: Fix bug I introduced lsat night that broke
30962         Delegates. 
30963
30964         (Expression.Resolve): Report a 246 error (can not resolve name)
30965         if we find a SimpleName in the stream.
30966
30967         (Expression.ResolveLValue): Ditto.
30968
30969         (Expression.ResolveWithSimpleName): This function is a variant of
30970         ResolveName, this one allows SimpleNames to be returned without a
30971         warning.  The only consumer of SimpleNames is MemberAccess
30972
30973 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30974
30975         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30976         might arrive here.  I have my doubts that this is correct.
30977
30978         * statement.cs (Lock): Implement lock statement.
30979
30980         * cs-parser.jay: Small fixes to support `lock' and `using'
30981
30982         * cs-tokenizer.cs: Remove extra space
30983
30984         * driver.cs: New flag --checked, allows to turn on integer math
30985         checking. 
30986
30987         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30988         Threading.Monitor.Exit 
30989
30990 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30991
30992         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30993         Expression Class to be IndexerAccess.
30994
30995         Notice that Indexer::DoResolve sets the eclass to Value.
30996
30997 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30998
30999         * class.cs (TypeContainer::Emit): Emit code for indexers.
31000
31001         * assign.cs (IAssignMethod): New interface implemented by Indexers
31002         and Properties for handling assignment.
31003
31004         (Assign::Emit): Simplify and reuse code. 
31005
31006         * expression.cs (IndexerAccess, PropertyExpr): Implement
31007         IAssignMethod, clean up old code. 
31008
31009 2001-10-22  Ravi Pratap  <ravi@ximian.com>
31010
31011         * typemanager.cs (ImplementsInterface): New method to determine if a type
31012         implements a given interface. Provides a nice cache too.
31013
31014         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
31015         method.
31016
31017         (ConvertReferenceExplicit): Ditto.
31018
31019         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
31020         various methods, with correct names etc.
31021
31022         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
31023         Operator.UnaryNegation.
31024
31025         * cs-parser.jay (operator_declarator): Be a little clever in the case where
31026         we have a unary plus or minus operator.
31027
31028         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
31029         UnaryMinus.
31030
31031         * everywhere : update accordingly.
31032
31033         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
31034         respectively.
31035
31036         * class.cs (Method::Define): For the case where we are implementing a method
31037         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
31038         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
31039
31040 2001-10-21  Ravi Pratap  <ravi@ximian.com>
31041
31042         * interface.cs (FindMembers): Implement to work around S.R.E
31043         lameness.
31044
31045         * typemanager.cs (IsInterfaceType): Implement.
31046
31047         (FindMembers): Update to handle interface types too.
31048
31049         * expression.cs (ImplicitReferenceConversion): Re-write bits which
31050         use IsAssignableFrom as that is not correct - it doesn't work.
31051
31052         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
31053         and accordingly override EmitStatement.
31054
31055         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
31056         using the correct logic :-)
31057
31058 2001-10-19  Ravi Pratap  <ravi@ximian.com>
31059
31060         * ../errors/cs-11.cs : Add to demonstrate error -11 
31061
31062 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
31063
31064         * assign.cs (Assign::Resolve): Resolve right hand side first, and
31065         then pass this as a hint to ResolveLValue.
31066
31067         * expression.cs (FieldExpr): Add Location information
31068
31069         (FieldExpr::LValueResolve): Report assignment to readonly
31070         variable. 
31071
31072         (Expression::ExprClassFromMemberInfo): Pass location information.
31073
31074         (Expression::ResolveLValue): Add new method that resolves an
31075         LValue. 
31076
31077         (Expression::DoResolveLValue): Default invocation calls
31078         DoResolve. 
31079
31080         (Indexers): New class used to keep track of indexers in a given
31081         Type. 
31082
31083         (IStackStore): Renamed from LValue, as it did not really describe
31084         what this did.  Also ResolveLValue is gone from this interface and
31085         now is part of Expression.
31086
31087         (ElementAccess): Depending on the element access type
31088
31089         * typemanager.cs: Add `indexer_name_type' as a Core type
31090         (System.Runtime.CompilerServices.IndexerNameAttribute)
31091
31092         * statement.cs (Goto): Take a location.
31093
31094 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31095
31096         * delegate.cs (Delegate::VerifyDelegate): New method to verify
31097         if two delegates are compatible.
31098
31099         (NewDelegate::DoResolve): Update to take care of the case when
31100         we instantiate a delegate from another delegate.
31101
31102         * typemanager.cs (FindMembers): Don't even try to look up members
31103         of Delegate types for now.
31104
31105 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31106
31107         * delegate.cs (NewDelegate): New class to take care of delegate
31108         instantiation.
31109
31110         * expression.cs (New): Split the delegate related code out into 
31111         the NewDelegate class.
31112
31113         * delegate.cs (DelegateInvocation): New class to handle delegate 
31114         invocation.
31115
31116         * expression.cs (Invocation): Split out delegate related code into
31117         the DelegateInvocation class.
31118
31119 2001-10-17  Ravi Pratap  <ravi@ximian.com>
31120
31121         * expression.cs (New::DoResolve): Implement delegate creation fully
31122         and according to the spec.
31123
31124         (New::DoEmit): Update to handle delegates differently.
31125
31126         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
31127         because of which we were printing out arguments in reverse order !
31128
31129         * delegate.cs (VerifyMethod): Implement to check if the given method
31130         matches the delegate.
31131
31132         (FullDelegateDesc): Implement.
31133
31134         (VerifyApplicability): Implement.
31135
31136         * expression.cs (Invocation::DoResolve): Update to accordingly handle
31137         delegate invocations too.
31138
31139         (Invocation::Emit): Ditto.
31140
31141         * ../errors/cs1593.cs : Added.
31142
31143         * ../errors/cs1594.cs : Added.
31144
31145         * delegate.cs (InstanceExpression, TargetMethod): New properties.
31146
31147 2001-10-16  Ravi Pratap  <ravi@ximian.com>
31148
31149         * typemanager.cs (intptr_type): Core type for System.IntPtr
31150
31151         (InitCoreTypes): Update for the same.
31152
31153         (iasyncresult_type, asynccallback_type): Ditto.
31154
31155         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
31156         correct.
31157
31158         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
31159         too.
31160
31161         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
31162         the builders for the 4 members of a delegate type :-)
31163
31164         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
31165         type.
31166
31167         * expression.cs (New::DoResolve): Implement guts for delegate creation.
31168
31169         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
31170
31171 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
31172
31173         * statement.cs (Break::Emit): Implement.   
31174         (Continue::Emit): Implement.
31175
31176         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31177         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31178         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31179         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
31180         end loop
31181
31182         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
31183         properties that track the label for the current loop (begin of the
31184         loop and end of the loop).
31185
31186 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31187
31188         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31189         use of emitting anything at all.
31190
31191         * class.cs, rootcontext.cs : Get rid of calls to the same.
31192
31193         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31194
31195         (Populate): Define the constructor correctly and set the implementation
31196         attributes.
31197
31198         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31199         have been defined.
31200
31201         (AddDelegateType): Implement.
31202
31203         (IsDelegateType): Implement helper method.
31204
31205         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31206
31207         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31208         and accordingly handle it.
31209
31210         * delegate.cs (Populate): Take TypeContainer argument.
31211         Implement bits to define the Invoke method. However, I still haven't figured out
31212         how to take care of the native int bit :-(
31213
31214         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31215         Qualify the name of the delegate, not its return type !
31216
31217         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31218         conversion.
31219
31220         (StandardConversionExists): Checking for array types turns out to be recursive.
31221
31222         (ConvertReferenceExplicit): Implement array conversion.
31223
31224         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31225
31226 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31227
31228         * cs-parser.jay (delegate_declaration): Store the fully qualified
31229         name as it is a type declaration.
31230
31231         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31232         readonly.
31233
31234         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31235         as TypeContainer::DefineType.
31236
31237         (Populate): Method in which all the definition of the various methods (Invoke)
31238         etc is done.
31239
31240         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31241         see.
31242
31243         (CloseDelegate): Finally creates the delegate.
31244
31245         * class.cs (TypeContainer::DefineType): Update to define delegates.
31246         (Populate, Emit and CloseType): Do the same thing here too.
31247
31248         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31249         delegates in all these operations.
31250
31251 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31252
31253         * expression.cs: LocalTemporary: a new expression used to
31254         reference a temporary that has been created.
31255
31256         * assign.cs: Handle PropertyAccess back here, so that we can
31257         provide the proper semantic access to properties.
31258
31259         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31260         a few more explicit conversions. 
31261
31262         * modifiers.cs: `NEW' modifier maps to HideBySig.
31263
31264         * expression.cs (PropertyExpr): Make this into an
31265         ExpressionStatement, and support the EmitStatement code path. 
31266
31267         Perform get/set error checking, clean up the interface.
31268
31269         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31270         them into toplevel access objects.
31271
31272 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31273
31274         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31275         SRE.
31276
31277         * typemanager.cs: Keep track here of our PropertyBuilders again to
31278         work around lameness in SRE.
31279
31280 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31281
31282         * expression.cs (LValue::LValueResolve): New method in the
31283         interface, used to perform a second resolution pass for LValues. 
31284
31285         (This::DoResolve): Catch the use of this in static methods.
31286
31287         (This::LValueResolve): Implement.
31288
31289         (This::Store): Remove warning, assigning to `this' in structures
31290         is 
31291
31292         (Invocation::Emit): Deal with invocation of
31293         methods on value types.  We need to pass the address to structure
31294         methods rather than the object itself.  (The equivalent code to
31295         emit "this" for structures leaves the entire structure on the
31296         stack instead of a pointer to it). 
31297
31298         (ParameterReference::DoResolve): Compute the real index for the
31299         argument based on whether the method takes or not a `this' pointer
31300         (ie, the method is static).
31301
31302         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31303         value types returned from functions when we need to invoke a
31304         method on the sturcture.
31305
31306
31307 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31308
31309         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31310         defining the type in the Modulebuilder or Typebuilder. This is to take
31311         care of nested types which need to be defined on the TypeBuilder using
31312         DefineNestedMethod.
31313
31314         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31315         methods in RootContext, only ported to be part of TypeContainer.
31316
31317         (TypeContainer::GetInterfaceOrClass): Ditto.
31318
31319         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31320
31321         * interface.cs (Interface::DefineInterface): New method. Does exactly
31322         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31323         too.
31324
31325         (Interface::GetInterfaces): Move from RootContext here and port.
31326
31327         (Interface::GetInterfaceByName): Same here.
31328
31329         * rootcontext.cs (ResolveTree): Re-write.
31330
31331         (PopulateTypes): Re-write.
31332
31333         * class.cs (TypeContainer::Populate): Populate nested types too.
31334         (TypeContainer::Emit): Emit nested members too.
31335
31336         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31337         instead just use the name argument passed in as it is already fully
31338         qualified.
31339
31340         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31341         to TypeContainer mapping to see if a type is user-defined.
31342
31343         * class.cs (TypeContainer::CloseType): Implement. 
31344
31345         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31346         the default constructor.
31347
31348         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31349         twice.
31350
31351         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31352
31353         * interface.cs (CloseType): Create the type here.
31354
31355         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31356         the hierarchy.
31357
31358         Remove all the methods which are now in TypeContainer.
31359
31360 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31361
31362         * delegate.cs (Define): Re-write bits to define the delegate
31363         correctly.
31364
31365 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31366
31367         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31368
31369         * expression.cs (ImplicitReferenceConversion): handle null as well
31370         as a source to convert to any reference type.
31371
31372         * statement.cs (Return): Perform any implicit conversions to
31373         expected return type.  
31374
31375         Validate use of return statement.  
31376
31377         * codegen.cs (EmitContext): Pass the expected return type here.
31378
31379         * class.cs (Method, Constructor, Property): Pass expected return
31380         type to EmitContext.
31381
31382 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31383
31384         * expression.cs: Make DoResolve take an EmitContext instead of a
31385         TypeContainer.
31386
31387         Replaced `l' and `location' for `loc', for consistency.
31388
31389         (Error, Warning): Remove unneeded Tc argument.
31390
31391         * assign.cs, literal.cs, constant.cs: Update to new calling
31392         convention. 
31393
31394         * codegen.cs: EmitContext now contains a flag indicating whether
31395         code is being generated in a static method or not.
31396
31397         * cs-parser.jay: DecomposeQI, new function that replaces the old
31398         QualifiedIdentifier.  Now we always decompose the assembled
31399         strings from qualified_identifier productions into a group of
31400         memberaccesses.
31401
31402 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31403
31404         * rootcontext.cs: Deal with field-less struct types correctly now
31405         by passing the size option to Define Type.
31406
31407         * class.cs: Removed hack that created one static field. 
31408
31409 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31410
31411         * statement.cs: Moved most of the code generation here. 
31412
31413 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31414
31415         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31416         seem very right.
31417
31418         (ElementAccess): Remove useless bits for now - keep checks as the spec
31419         says.
31420
31421 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31422
31423         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31424         and start performing checks according to the spec.
31425
31426 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31427
31428         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31429         rank_specifiers instead.
31430
31431         (rank_specifiers): Change the order in which the rank specifiers are stored
31432
31433         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31434
31435         * expression.cs (ElementAccess): Implement the LValue interface too.
31436
31437 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31438
31439         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31440         except that user defined conversions are not included.
31441
31442         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31443         perform the conversion of the return type, if necessary.
31444
31445         (New::DoResolve): Check whether we are creating an array or an object
31446         and accordingly do the needful.
31447
31448         (New::Emit): Same here.
31449
31450         (New::DoResolve): Implement guts of array creation.
31451
31452         (New::FormLookupType): Helper function.
31453
31454 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31455
31456         * codegen.cs: Removed most of the code generation here, and move the
31457         corresponding code generation bits to the statement classes. 
31458
31459         Added support for try/catch/finalize and throw.
31460
31461         * cs-parser.jay: Added support for try/catch/finalize.
31462
31463         * class.cs: Catch static methods having the flags override,
31464         virtual or abstract.
31465
31466         * expression.cs (UserCast): This user cast was not really doing
31467         what it was supposed to do.  Which is to be born in fully resolved
31468         state.  Parts of the resolution were being performed at Emit time! 
31469
31470         Fixed this code.
31471
31472 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31473
31474         * expression.cs: Implicity convert the result from UserCast.
31475
31476 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31477
31478         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31479         prevented it from working correctly. 
31480
31481         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31482         merely ConvertImplicit.
31483
31484 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31485
31486         * typemanager.cs: Make the LookupTypeContainer function static,
31487         and not per-instance.  
31488
31489         * class.cs: Make static FindMembers (the one that takes a Type
31490         argument). 
31491
31492         * codegen.cs: Add EmitForeach here.
31493
31494         * cs-parser.jay: Make foreach a toplevel object instead of the
31495         inline expansion, as we need to perform semantic analysis on it. 
31496
31497 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31498
31499         * expression.cs (Expression::ImplicitUserConversion): Rename to
31500         UserDefinedConversion.
31501
31502         (Expression::UserDefinedConversion): Take an extra argument specifying 
31503         whether we look for explicit user conversions too.
31504
31505         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31506
31507         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31508
31509         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31510         with the appropriate arguments.
31511
31512         * cs-parser.jay (cast_expression): Record location too.
31513
31514         * expression.cs (Cast): Record location info.
31515
31516         (Expression::ConvertExplicit): Take location argument.
31517
31518         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31519         to determine if we are doing explicit conversions.
31520
31521         (UserCast::Emit): Update accordingly.
31522
31523         (Expression::ConvertExplicit): Report an error if everything fails.
31524
31525         * ../errors/cs0030.cs : Add.
31526
31527 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31528
31529         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31530         virtual and newslot bits. 
31531
31532         * class.cs (TypeContainer::RegisterRequiredImplementations):
31533         Record methods we need.
31534
31535         (TypeContainer::MakeKey): Helper function to make keys for
31536         MethodBases, since the Methodbase key is useless.
31537
31538         (TypeContainer::Populate): Call RegisterRequiredImplementations
31539         before defining the methods.   
31540
31541         Create a mapping for method_builders_to_methods ahead of time
31542         instead of inside a tight loop.
31543
31544         (::RequireMethods):  Accept an object as the data to set into the
31545         hashtable so we can report interface vs abstract method mismatch.
31546
31547 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31548
31549         * report.cs: Make all of it static.
31550
31551         * rootcontext.cs: Drop object_type and value_type computations, as
31552         we have those in the TypeManager anyways.
31553
31554         Drop report instance variable too, now it is a global.
31555
31556         * driver.cs: Use try/catch on command line handling.
31557
31558         Add --probe option to debug the error reporting system with a test
31559         suite. 
31560
31561         * report.cs: Add support for exiting program when a probe
31562         condition is reached.
31563
31564 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31565
31566         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31567         we do a forcible conversion regardless of type, to check if 
31568         ForceConversion returns a null.
31569
31570         (Binary::error19): Use location to report error.
31571
31572         (Unary::error23): Use location here too.
31573
31574         * ../errors/cs0019.cs : Check in.
31575
31576         * ../errors/cs0023.cs : Check in.
31577
31578         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31579         case of a non-null MethodInfo object with a length of 0 !
31580
31581         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31582         an applicable member - according to the spec :-)
31583         Also fix logic to find members in base types.
31584
31585         (Unary::ResolveOperator): Same here.
31586
31587         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31588         as I was getting thoroughly confused between this and error19 :-)
31589
31590         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31591         (::FindMostEncompassedType): Implement.
31592         (::FindMostEncompassingType): Implement.
31593         (::StandardConversionExists): Implement.
31594
31595         (UserImplicitCast): Re-vamp. We now need info about most specific
31596         source and target types so that we can do the necessary conversions.
31597
31598         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31599         mathematical union with no duplicates.
31600
31601 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31602
31603         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31604         in order from base classes to child classes, so that we can in
31605         child classes look up in our parent for method names and
31606         attributes (required for handling abstract, virtual, new, override
31607         constructs: we need to instrospect our base class, and if we dont
31608         populate the classes in order, the introspection might be
31609         incorrect.  For example, a method could query its parent before
31610         the parent has any methods and would determine that the parent has
31611         no abstract methods (while it could have had them)).
31612
31613         (RootContext::CreateType): Record the order in which we define the
31614         classes.
31615
31616 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31617
31618         * class.cs (TypeContainer::Populate): Also method definitions can
31619         fail now, keep track of this.
31620
31621         (TypeContainer::FindMembers): Implement support for
31622         DeclaredOnly/noDeclaredOnly flag.
31623
31624         (Constructor::Emit) Return the ConstructorBuilder.
31625
31626         (Method::Emit) Return the MethodBuilder. 
31627         Check for abstract or virtual methods to be public.
31628
31629         * rootcontext.cs (RootContext::CreateType): Register all the
31630         abstract methods required for the class to be complete and the
31631         interface methods that must be implemented. 
31632
31633         * cs-parser.jay: Report error 501 (method requires body if it is
31634         not marked abstract or extern).
31635
31636         * expression.cs (TypeOf::Emit): Implement.
31637
31638         * typemanager.cs: runtime_handle_type, new global type.
31639
31640         * class.cs (Property::Emit): Generate code for properties.
31641
31642 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31643
31644         * expression.cs (Unary::ResolveOperator): Find operators on base type
31645         too - we now conform exactly to the spec.
31646
31647         (Binary::ResolveOperator): Same here.
31648
31649         * class.cs (Operator::Define): Fix minor quirk in the tests.
31650
31651         * ../errors/cs0215.cs : Added.
31652
31653         * ../errors/cs0556.cs : Added.
31654
31655         * ../errors/cs0555.cs : Added.
31656
31657 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31658
31659         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31660         single integer which is really efficient
31661
31662 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31663
31664         *  expression.cs (Expression::ImplicitUserConversion): Use location
31665         even in the case when we are examining True operators.
31666  
31667         * class.cs (Operator::Define): Perform extensive checks to conform
31668         with the rules for operator overloading in the spec.
31669
31670         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31671         some of the other conversions mentioned in the spec.
31672
31673         * typemanager.cs (array_type): New static member for the System.Array built-in
31674         type.
31675
31676         (cloneable_interface): For System.ICloneable interface.
31677
31678         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31679         we start resolving the tree and populating types.
31680
31681         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31682  
31683 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31684
31685         * expression.cs (Expression::ExprClassFromMemberInfo,
31686         Expression::Literalize): Create literal expressions from
31687         FieldInfos which are literals.
31688
31689         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31690         type casts, because they were wrong.  The test suite in tests
31691         caught these ones.
31692
31693         (ImplicitNumericConversion): ushort to ulong requires a widening
31694         cast. 
31695
31696         Int32 constant to long requires widening cast as well.
31697
31698         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31699         for integers because the type on the stack is not i4.
31700
31701 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31702
31703         * expression.cs (report118): require location argument. 
31704
31705         * parameter.cs: Do not dereference potential null value.
31706
31707         * class.cs: Catch methods that lack the `new' keyword when
31708         overriding a name.  Report warnings when `new' is used without
31709         anything being there to override.
31710
31711         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31712
31713         * class.cs: Only add constructor to hashtable if it is non-null
31714         (as now constructors can fail on define).
31715
31716         (TypeManager, Class, Struct): Take location arguments.
31717
31718         Catch field instance initialization in structs as errors.
31719
31720         accepting_filter: a new filter for FindMembers that is static so
31721         that we dont create an instance per invocation.
31722
31723         (Constructor::Define): Catch errors where a struct constructor is
31724         parameterless 
31725
31726         * cs-parser.jay: Pass location information for various new
31727         constructs. 
31728
31729         * delegate.cs (Delegate): take a location argument.
31730
31731         * driver.cs: Do not call EmitCode if there were problesm in the
31732         Definition of the types, as many Builders wont be there. 
31733
31734         * decl.cs (Decl::Decl): Require a location argument.
31735
31736         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31737         into integers, and find the most appropiate integer for it.
31738
31739         * literal.cs: Implement ULongLiteral.
31740
31741         * rootcontext.cs: Provide better information about the location of
31742         failure when CreateType fails.
31743
31744 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31745
31746         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31747         as well.
31748
31749         * expression.cs (Binary::CheckShiftArguments): Add missing type
31750         computation.
31751         (Binary::ResolveOperator): Add type to the logical and and logical
31752         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31753         before.
31754
31755         (Binary::DoNumericPromotions): In the case where either argument
31756         is ulong (and most signed types combined with ulong cause an
31757         error) perform implicit integer constant conversions as well.
31758
31759 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31760
31761         * expression.cs (UserImplicitCast): Method should always be
31762         non-null. 
31763         (Invocation::BetterConversion): Simplified test for IntLiteral.
31764
31765         (Expression::ImplicitNumericConversion): Split this routine out.
31766         Put the code that performs implicit constant integer conversions
31767         here. 
31768
31769         (Expression::Resolve): Become a wrapper around DoResolve so we can
31770         check eclass and type being set after resolve.
31771
31772         (Invocation::Badness): Remove this dead function
31773
31774         (Binary::ResolveOperator): Do not compute the expensive argumnets
31775         unless we have a union for it.
31776
31777         (Probe::Emit): Is needs to do an isinst and then
31778         compare against null.
31779
31780         (::CanConvert): Added Location argument.  If the Location argument
31781         is null (Location.Null), then we do not report errors.  This is
31782         used by the `probe' mechanism of the Explicit conversion.  We do
31783         not want to generate an error for something that the user
31784         explicitly requested to be casted.  But the pipeline for an
31785         explicit cast first tests for potential implicit casts.
31786
31787         So for now, if the Location is null, it means `Probe only' to
31788         avoid adding another argument.   Might have to revise this
31789         strategy later.
31790
31791         (ClassCast): New class used to type cast objects into arbitrary
31792         classes (used in Explicit Reference Conversions).
31793
31794         Implement `as' as well.
31795
31796         Reverted all the patches from Ravi below: they were broken:
31797
31798                 * The use of `level' as a mechanism to stop recursive
31799                   invocations is wrong.  That was there just to catch the
31800                   bug with a strack trace but not as a way of addressing
31801                   the problem.
31802
31803                   To fix the problem we have to *understand* what is going
31804                   on and the interactions and come up with a plan, not
31805                   just get things going.
31806
31807                 * The use of the type conversion cache that I proposed
31808                   last night had an open topic: How does this work across
31809                   protection domains.  A user defined conversion might not
31810                   be public in the location where we are applying the
31811                   conversion, a different conversion might be selected
31812                   (ie, private A->B (better) but public B->A (worse),
31813                   inside A, A->B applies, but outside it, B->A will
31814                   apply).
31815
31816                 * On top of that (ie, even if the above is solved),
31817                   conversions in a cache need to be abstract.  Ie, `To
31818                   convert from an Int to a Short use an OpcodeCast', not
31819                   `To convert from an Int to a Short use the OpcodeCast on
31820                   the variable 5' (which is what this patch was doing).
31821
31822 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31823
31824         * expression.cs (Invocation::ConversionExists): Re-write to use
31825         the conversion cache
31826
31827         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31828         cache all conversions done, not just user-defined ones.
31829
31830         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31831         to determine if a conversion exists instead of acutually trying to 
31832         perform the conversion. It's faster too.
31833
31834         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31835         and only then attempt the implicit conversion.
31836
31837 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31838
31839         * expression.cs (ConvertImplicit): Use a cache for conversions
31840         already found. Check level of recursion and bail out if necessary.
31841
31842 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31843
31844         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31845         Export standard methods that we expect for string operations.
31846
31847         * statement.cs (Block::UsageWarning): Track usage of variables and
31848         report the errors for not used variables.
31849
31850         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31851         operator. 
31852
31853 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31854
31855         * codegen.cs: remove unnneded code 
31856
31857         * expression.cs: Removed BuiltinTypeAccess class
31858
31859         Fix the order in which implicit conversions are
31860         done.  
31861
31862         The previous fixed dropped support for boxed conversions (adding a
31863         test to the test suite now)
31864
31865         (UserImplicitCast::CanConvert): Remove test for source being null,
31866         that code is broken.  We should not feed a null to begin with, if
31867         we do, then we should track the bug where the problem originates
31868         and not try to cover it up here.
31869
31870         Return a resolved expression of type UserImplicitCast on success
31871         rather than true/false.  Ravi: this is what I was talking about,
31872         the pattern is to use a static method as a "constructor" for
31873         objects. 
31874
31875         Also, do not create arguments until the very last minute,
31876         otherwise we always create the arguments even for lookups that
31877         will never be performed. 
31878
31879         (UserImplicitCast::Resolve): Eliminate, objects of type
31880         UserImplicitCast are born in a fully resolved state. 
31881
31882         * typemanager.cs (InitCoreTypes): Init also value_type
31883         (System.ValueType). 
31884
31885         * expression.cs (Cast::Resolve): First resolve the child expression.
31886
31887         (LValue): Add new method AddressOf to be used by
31888         the `&' operator.  
31889
31890         Change the argument of Store to take an EmitContext instead of an
31891         ILGenerator, because things like FieldExpr need to be able to call
31892         their children expression to generate the instance code. 
31893
31894         (Expression::Error, Expression::Warning): Sugar functions for
31895         reporting errors.
31896
31897         (Expression::MemberLookup): Accept a TypeContainer instead of a
31898         Report as the first argument.
31899
31900         (Expression::ResolvePrimary): Killed.  I still want to improve
31901         this as currently the code is just not right.
31902
31903         (Expression::ResolveMemberAccess): Simplify, but it is still
31904         wrong. 
31905
31906         (Unary::Resolve): Catch errors in AddressOf operators.
31907
31908         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31909         index to a byte for the short-version, or the compiler will choose
31910         the wrong Emit call, which generates the wrong data.
31911
31912         (ParameterReference::Emit, ::Store): same.
31913
31914         (FieldExpr::AddressOf): Implement.
31915
31916         * typemanager.cs: TypeManager: made public variable instead of
31917         property.
31918
31919         * driver.cs: document --fatal.
31920
31921         * report.cs (ErrorMessage, WarningMessage): new names for the old
31922         Error and Warning classes.
31923
31924         * cs-parser.jay (member_access): Turn built-in access to types
31925         into a normal simplename
31926
31927 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31928
31929         * expression.cs (Invocation::BetterConversion): Fix to cope
31930         with q being null, since this was introducing a bug.
31931
31932         * expression.cs (ConvertImplicit): Do built-in conversions first.
31933
31934 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31935
31936         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31937
31938 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31939
31940         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31941         I had introduced long ago (what's new ?).
31942
31943         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31944         the work of all the checking. 
31945         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31946         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31947
31948         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31949         that is the right way. 
31950
31951         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31952         overloading resolution. Use everywhere instead of cutting and pasting code.
31953
31954         (Binary::ResolveOperator): Use MakeUnionSet.
31955
31956         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31957         we have to convert to bool types. Not complete yet.
31958
31959 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31960
31961         * typemanager.cs (TypeManager::CSharpName): support ushort.
31962
31963         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31964         to provide an expression that performsn an implicit constant int
31965         conversion (section 6.1.6).
31966         (Expression::ConvertImplicitRequired): Reworked to include
31967         implicit constant expression conversions.
31968
31969         (Expression::ConvertNumericExplicit): Finished.
31970
31971         (Invocation::Emit): If InstanceExpression is null, then it means
31972         that we perform a call on this.
31973
31974 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31975
31976         * expression.cs (Unary::Emit): Remove some dead code.
31977         (Probe): Implement Resolve and Emit for `is'.
31978         (Expression::ConvertImplicitRequired): Attempt to do constant
31979         expression conversions here.  Maybe should be moved to
31980         ConvertImplicit, but I am not sure.
31981         (Expression::ImplicitLongConstantConversionPossible,
31982         Expression::ImplicitIntConstantConversionPossible): New functions
31983         that tell whether is it possible to apply an implicit constant
31984         expression conversion.
31985
31986         (ConvertNumericExplicit): Started work on explicit numeric
31987         conversions.
31988
31989         * cs-parser.jay: Update operator constants.
31990
31991         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31992         (Parameters::GetSignature): Hook up VerifyArgs here.
31993         (Parameters::VerifyArgs): Verifies that no two arguments have the
31994         same name. 
31995
31996         * class.cs (Operator): Update the operator names to reflect the
31997         ones that the spec expects (as we are just stringizing the
31998         operator names).
31999
32000         * expression.cs (Unary::ResolveOperator): Fix bug: Use
32001         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
32002         previous usage did only work for our methods.
32003         (Expression::ConvertImplicit): Handle decimal implicit numeric
32004         conversions as well.
32005         (Expression::InternalTypeConstructor): Used to invoke constructors
32006         on internal types for default promotions.
32007
32008         (Unary::Emit): Implement special handling for the pre/post
32009         increment/decrement for overloaded operators, as they need to have
32010         the same semantics as the other operators.
32011
32012         (Binary::ResolveOperator): ditto.
32013         (Invocation::ConversionExists): ditto.
32014         (UserImplicitCast::Resolve): ditto.
32015
32016 2001-09-26  Ravi Pratap  <ravi@ximian.com>
32017
32018         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
32019         operator, return after emitting body. Regression tests pass again !
32020
32021         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
32022         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
32023         (Invocation::OverloadResolve): Ditto.
32024         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
32025
32026         * everywhere : update calls to the above methods accordingly.
32027
32028 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32029
32030         * assign.cs (Assign): Make it inherit from ExpressionStatement.
32031
32032         * expression.cs (ExpressionStatement): New base class used for
32033         expressions that can appear in statements, so that we can provide
32034         an alternate path to generate expression that do not leave a value
32035         on the stack.
32036
32037         (Expression::Emit, and all the derivatives): We no longer return
32038         whether a value is left on the stack or not.  Every expression
32039         after being emitted leaves a single value on the stack.
32040
32041         * codegen.cs (EmitContext::EmitStatementExpression): Use the
32042         facilties of ExpressionStatement if possible.
32043
32044         * cs-parser.jay: Update statement_expression.
32045
32046 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
32047
32048         * driver.cs: Change the wording of message
32049
32050 2001-09-25  Ravi Pratap  <ravi@ximian.com>
32051
32052         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
32053         the type of the expression to the return type of the method if
32054         we have an overloaded operator match ! The regression tests pass again !
32055         (Unary::ResolveOperator): Ditto.
32056
32057         * expression.cs (Invocation::ConversionExists): Correct the member lookup
32058         to find "op_Implicit", not "implicit" ;-)
32059         (UserImplicitCast): New class to take care of user-defined implicit conversions.
32060         (ConvertImplicit, ForceConversion): Take TypeContainer argument
32061
32062         * everywhere : Correct calls to the above accordingly.
32063
32064         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
32065         (ConvertImplicit): Do user-defined conversion if it exists.
32066
32067 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
32068
32069         * assign.cs: track location.
32070         (Resolve): Use implicit conversions on assignment.
32071
32072         * literal.cs: Oops.  Not good, Emit of short access values should
32073         pass (Bytes) or the wrong argument will be selected.
32074
32075         * expression.cs (Unary::Emit): Emit code for -expr.
32076
32077         (Unary::ResolveOperator): Handle `Substract' for non-constants
32078         (substract from zero from the non-constants).
32079         Deal with Doubles as well. 
32080
32081         (Expression::ConvertImplicitRequired): New routine that reports an
32082         error if no implicit conversion exists. 
32083
32084         (Invocation::OverloadResolve): Store the converted implicit
32085         expressions if we make them
32086
32087 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32088
32089         * class.cs (ConstructorInitializer): Take a Location argument.
32090         (ConstructorBaseInitializer): Same here.
32091         (ConstructorThisInitializer): Same here.
32092
32093         * cs-parser.jay : Update all calls accordingly.
32094
32095         * expression.cs (Unary, Binary, New): Take location argument.
32096         Update accordingly everywhere.
32097
32098         * cs-parser.jay : Update all calls to the above to take a location
32099         argument.
32100
32101         * class.cs : Ditto.
32102
32103 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32104
32105         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
32106         (Invocation::BetterConversion): Same here
32107         (Invocation::ConversionExists): Ditto.
32108
32109         (Invocation::ConversionExists): Implement.
32110
32111 2001-09-22  Ravi Pratap  <ravi@ximian.com>
32112
32113         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
32114         Also take an additional TypeContainer argument.
32115
32116         * All over : Pass in TypeContainer as argument to OverloadResolve.
32117
32118         * typemanager.cs (CSharpName): Update to check for the string type and return
32119         that too.
32120
32121         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
32122         a given method.
32123
32124 2001-09-21  Ravi Pratap  <ravi@ximian.com>
32125
32126         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
32127         (Invocation::BetterFunction): Implement.
32128         (Invocation::BetterConversion): Implement.
32129         (Invocation::ConversionExists): Skeleton, no implementation yet.
32130
32131         Okay, things work fine !
32132
32133 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
32134
32135         * typemanager.cs: declare and load enum_type, delegate_type and
32136         void_type. 
32137
32138         * expression.cs (Expression::Emit): Now emit returns a value that
32139         tells whether a value is left on the stack or not.  This strategy
32140         might be reveted tomorrow with a mechanism that would address
32141         multiple assignments.
32142         (Expression::report118): Utility routine to report mismatches on
32143         the ExprClass.
32144
32145         (Unary::Report23): Report impossible type/operator combination
32146         utility function.
32147
32148         (Unary::IsIncrementableNumber): Whether the type can be
32149         incremented or decremented with add.
32150         (Unary::ResolveOperator): Also allow enumerations to be bitwise
32151         complemented. 
32152         (Unary::ResolveOperator): Implement ++, !, ~,
32153
32154         (Invocation::Emit): Deal with new Emit convetion.
32155
32156         * All Expression derivatives: Updated their Emit method to return
32157         whether they leave values on the stack or not.
32158
32159         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
32160         stack for expressions that are statements. 
32161
32162 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32163
32164         * expression.cs (LValue): New interface.  Must be implemented by
32165         LValue objects.
32166         (LocalVariableReference, ParameterReference, FieldExpr): Implement
32167         LValue interface.
32168
32169         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
32170         interface for generating code, simplifies the code.
32171
32172 2001-09-20  Ravi Pratap  <ravi@ximian.com>
32173
32174         * expression.cs (everywhere): Comment out return statements in ::Resolve
32175         methods to avoid the warnings.
32176
32177 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32178
32179         * driver.cs (parse): Report error 2001 if we can not open the
32180         source file.
32181
32182         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
32183         not resolve it.
32184
32185         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
32186         object. 
32187
32188         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32189         otherwise nested blocks end up with the same index.
32190
32191         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32192
32193         * expression.cs:  Instead of having FIXMEs in the Resolve
32194         functions, throw exceptions so it is obvious that we are facing a
32195         bug. 
32196
32197         * cs-parser.jay (invocation_expression): Pass Location information.
32198
32199         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32200         Use a basename for those routines because .NET does not like paths
32201         on them. 
32202
32203         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32204         already defined.
32205
32206 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32207
32208         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32209         are loading the correct data types (throws an exception if not).
32210         (TypeManager::InitCoreTypes): Use CoreLookupType
32211
32212         * expression.cs (Unary::ResolveOperator): return the child
32213         expression for expressions which are just +expr.
32214         (Unary::ResolveOperator): Return negative literals for -LITERAL
32215         expressions (otherwise they are Unary {Literal}).
32216         (Invocation::Badness): Take into account `Implicit constant
32217         expression conversions'.
32218
32219         * literal.cs (LongLiteral): Implement long literal class.
32220         (IntLiteral): export the `Value' of the intliteral. 
32221
32222 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32223
32224         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32225
32226         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32227         instead of 'Operator'
32228
32229         * expression.cs (Binary::ResolveOperator): Update accordingly.
32230         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32231         and 'Minus'
32232
32233         * cs-parser.jay (unary_expression): Update to use the new names.
32234
32235         * gen-treedump.cs (GetUnary): Same here.
32236
32237         * expression.cs (Unary::Resolve): Implement.
32238         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32239         operators are found instead of making noise ;-)
32240         (Unary::ResolveOperator): New method to do precisely the same thing which
32241         Binary::ResolveOperator does for Binary expressions.
32242         (Unary.method, .Arguments): Add.
32243         (Unary::OperName): Implement.   
32244         (Unary::ForceConversion): Copy and Paste !
32245
32246         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32247         a unary operator.
32248
32249         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32250         for the inbuilt operators. Only overloading works for now ;-)
32251
32252 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32253
32254         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32255         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32256
32257         * expression.cs (This::Emit): Implement. 
32258         (This::Resolve): Implement.
32259         (TypeOf:Resolve): Implement.
32260         (Expression::ResolveSimpleName): Add an implicit this to instance
32261         field references. 
32262         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32263         Bind instance variable to Field expressions.
32264         (FieldExpr::Instance): New field used to track the expression that
32265         represents the object instance.
32266         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32267         binding 
32268         (FieldExpr::Emit): Implement.
32269
32270         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32271         the last instruction contains a return opcode to avoid generating
32272         the last `ret' instruction (this generates correct code, and it is
32273         nice to pass the peverify output).
32274
32275         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32276         initializer for static and instance variables.
32277         (Constructor::Emit): Allow initializer to be null in the case of
32278         static constructors.  Only emit initializer for instance
32279         constructors. 
32280
32281         (TypeContainer::FindMembers): Return a null array if there are no
32282         matches.
32283
32284         Also fix the code for the MemberTypes.Method branch, as it was not
32285         scanning that for operators (or tried to access null variables before).
32286
32287         * assign.cs (Assign::Emit): Handle instance and static fields. 
32288
32289         * TODO: Updated.
32290
32291         * driver.cs: Stop compilation if there are parse errors.
32292
32293         * cs-parser.jay (constructor_declaration): Provide default base
32294         initializer for non-static constructors.
32295         (constructor_declarator): Do not provide a default base
32296         initializers if none was specified.
32297         Catch the fact that constructors should not have parameters.
32298
32299         * class.cs: Do not emit parent class initializers for static
32300         constructors, that should be flagged as an error.
32301
32302 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32303
32304         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32305         Move back code into TypeContainer::Populate.
32306
32307 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32308
32309         * class.cs (TypeContainer::AddConstructor): Fix the check to
32310         compare against Name, not Basename. 
32311         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32312
32313         * cs-parser.jay : Update accordingly.
32314
32315         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32316         for methods, don't forget to look into the operators too.
32317         (RegisterMethodBuilder): Helper method to take care of this for
32318         methods, constructors and operators.
32319         (Operator::Define): Completely revamp.
32320         (Operator.OperatorMethod, MethodName): New fields.
32321         (TypeContainer::Populate): Move the registering of builders into
32322         RegisterMethodBuilder.
32323         (Operator::Emit): Re-write.
32324
32325         * expression.cs (Binary::Emit): Comment out code path to emit method
32326         invocation stuff for the case when we have a user defined operator. I am
32327         just not able to get it right !
32328
32329 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32330
32331         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32332         argument. 
32333
32334         (Expression::MemberLookup): Provide a version that allows to
32335         specify the MemberTypes and BindingFlags. 
32336
32337         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32338         so it was not fetching variable information from outer blocks.
32339
32340         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32341         Beforefieldinit as it was buggy.
32342
32343         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32344         that Ravi put here.  
32345
32346         * class.cs (Constructor::Emit): Only emit if block is not null.
32347         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32348         deal with this by semantically definining it as if the user had
32349         done it.
32350
32351         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32352         constructors as we now "emit" them at a higher level.
32353
32354         (TypeContainer::DefineDefaultConstructor): Used to define the
32355         default constructors if none was provided.
32356
32357         (ConstructorInitializer): Add methods Resolve and Emit. 
32358
32359         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32360
32361 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32362
32363         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32364         the default constructor builder with our hashtable for methodbuilders
32365         to methodcores.
32366
32367         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32368         and argument_count is 0 in which case we have a match.
32369         (Binary::ResolveOperator): More null checking and miscellaneous coding
32370         style cleanup.
32371
32372 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32373
32374         * rootcontext.cs (IsNameSpace): Compare against null.
32375
32376         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32377
32378         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32379         and Unary::Operator.
32380
32381         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32382         accordingly.
32383
32384         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32385         we have overloaded operators.
32386         (Binary::ResolveOperator): Implement the part which does the operator overload
32387         resolution.
32388
32389         * class.cs (Operator::Emit): Implement.
32390         (TypeContainer::Emit): Emit the operators we have too.
32391
32392         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32393         the case when we have a user-defined operator.
32394
32395 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32396
32397         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32398
32399 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32400
32401         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32402         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32403         (Constructor::Emit): Implement.
32404         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32405         if we have no work to do. 
32406         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32407         Emit method.
32408
32409         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32410         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32411
32412         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32413         of parent.parent.
32414
32415 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32416
32417         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32418         in the source.
32419         (Tree::RecordNamespace): Method to do what the name says ;-)
32420         (Tree::Namespaces): Property to get at the namespaces hashtable.
32421
32422         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32423         keep track.
32424
32425         * rootcontext.cs (IsNamespace): Fixed it :-)
32426
32427 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32428
32429         * class.cs (TypeContainer::FindMembers): Add support for
32430         constructors. 
32431         (MethodCore): New class that encapsulates both the shared aspects
32432         of a Constructor and a Method.  
32433         (Method, Constructor): Factored pieces into MethodCore.
32434
32435         * driver.cs: Added --fatal which makes errors throw exceptions.
32436         Load System assembly as well as part of the standard library.
32437
32438         * report.cs: Allow throwing exceptions on errors for debugging.
32439
32440         * modifiers.cs: Do not use `parent', instead use the real type
32441         container to evaluate permission settings.
32442
32443         * class.cs: Put Ravi's patch back in.  He is right, and we will
32444         have to cope with the
32445
32446 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32447
32448         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32449         FamORAssem, not FamANDAssem.
32450
32451 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32452
32453         * driver.cs: Added --parse option that only parses its input files
32454         and terminates.
32455
32456         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32457         incorrect.  IsTopLevel is not used to tell whether an object is
32458         root_types or not (that can be achieved by testing this ==
32459         root_types).  But to see if this is a top-level *class* (not
32460         necessarly our "toplevel" container). 
32461
32462 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32463
32464         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32465         parent instead of a direct call to GetType.
32466
32467 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32468
32469         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32470         Modifiers.TypeAttr. This should just be a call to that method.
32471
32472         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32473         object so that we can determine if we are top-level or not.
32474
32475         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32476         TypeContainer too.
32477
32478         * enum.cs (Enum::Define): Ditto.
32479
32480         * modifiers.cs (FieldAttr): Re-write.
32481
32482         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32483         (TypeContainer::HaveStaticConstructor): New property to provide access
32484         to precisely that info.
32485
32486         * modifiers.cs (MethodAttr): Re-write.
32487         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32488
32489         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32490         of top-level types as claimed.
32491
32492 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32493
32494         * expression.cs (MemberLookup): Fruitless attempt to lookup
32495         constructors.  Maybe I need to emit default constructors?  That
32496         might be it (currently .NET emits this for me automatically).
32497         (Invocation::OverloadResolve): Cope with Arguments == null.
32498         (Invocation::EmitArguments): new function, shared by the new
32499         constructor and us.
32500         (Invocation::Emit): Handle static and instance methods.  Emit
32501         proper call instruction for virtual or non-virtual invocations.
32502         (New::Emit): Implement.
32503         (New::Resolve): Implement.
32504         (MemberAccess:Resolve): Implement.
32505         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32506         to track instances.
32507         (FieldExpr::Resolve): Set type.
32508
32509         * support.cs: Handle empty arguments.
32510                 
32511         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32512         SimpleLookup): Auxiliary routines to help parse a qualifier
32513         identifier.  
32514
32515         Update qualifier_identifier rule.
32516
32517         * codegen.cs: Removed debugging messages.
32518
32519         * class.cs: Make this a global thing, this acts just as a "key" to
32520         objects that we might have around.
32521
32522         (Populate): Only initialize method_builders_to_methods once.
32523
32524         * expression.cs (PropertyExpr): Initialize type from the
32525         PropertyType. 
32526
32527         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32528         Resolve pattern.  Attempt to implicitly convert value to boolean.
32529         Emit code.
32530
32531         * expression.cs: Set the type for the int32/int32 argument case.
32532         (Binary::ResolveOperator): Set the return type to boolean for
32533         comparission operators
32534
32535         * typemanager.cs: Remove debugging print code.
32536
32537         (Invocation::Resolve): resolve type.
32538
32539         * class.cs: Allocate a MemberInfo of the correct size, as the code
32540         elsewhere depends on the test to reflect the correct contents.
32541
32542         (Method::) Keep track of parameters, due to System.Reflection holes
32543
32544         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32545         mapping here.
32546
32547         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32548         of the exact size and return that.
32549
32550         (Class::LookupMethodByBuilder): New function that maps
32551         MethodBuilders to its methods.  Required to locate the information
32552         on methods because System.Reflection bit us again.
32553
32554         * support.cs: New file, contains an interface ParameterData and
32555         two implementations: ReflectionParameters and InternalParameters
32556         used to access Parameter information.  We will need to grow this
32557         as required.
32558
32559         * expression.cs (Invocation::GetParameterData): implement a cache
32560         and a wrapper around the ParameterData creation for methods. 
32561         (Invocation::OverloadResolve): Use new code.
32562
32563 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32564
32565         * class.cs (TypeContainer::EmitField): Remove and move into 
32566         (Field::Define): here and modify accordingly.
32567         (Field.FieldBuilder): New member.
32568         (TypeContainer::Populate): Update accordingly.
32569         (TypeContainer::FindMembers): Implement.
32570
32571 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32572
32573         * statement.cs: (VariableInfo::VariableType): New field to be
32574         initialized with the full type once it is resolved. 
32575
32576 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32577
32578         * parameter.cs (GetParameterInfo): Use a type cache to compute
32579         things only once, and to reuse this information
32580
32581         * expression.cs (LocalVariableReference::Emit): Implement.
32582         (OpcodeCast::Emit): fix.
32583
32584         (ParameterReference::Resolve): Implement.
32585         (ParameterReference::Emit): Implement.
32586
32587         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32588         that are expressions need to stay as Expressions.
32589
32590         * typemanager.cs (CSharpName): Returns the C# name of a type if
32591         possible. 
32592
32593         * expression.cs (Expression::ConvertImplicit): New function that
32594         implements implicit type conversions.
32595
32596         (Expression::ImplicitReferenceConversion): Implements implicit
32597         reference conversions.
32598
32599         (EmptyCast): New type for transparent casts.
32600
32601         (OpcodeCast): New type for casts of types that are performed with
32602         a sequence of bytecodes.
32603
32604         (BoxedCast): New type used for casting value types into reference
32605         types.  Emits a box opcode.
32606
32607         (Binary::DoNumericPromotions): Implements numeric promotions of
32608         and computation of the Binary::Type.
32609
32610         (Binary::EmitBranchable): Optimization.
32611
32612         (Binary::Emit): Implement code emission for expressions.
32613
32614         * typemanager.cs (TypeManager): Added two new core types: sbyte
32615         and byte.
32616
32617 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32618
32619         * class.cs (TypeContainer::FindMembers): Method which does exactly
32620         what Type.FindMembers does, only we don't have to use reflection. No
32621         implementation yet.
32622
32623         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32624         typecontainer objects as we need to get at them.
32625         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32626
32627         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32628         typecontainer object.
32629
32630         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32631         of just a Report object.
32632
32633 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32634
32635         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32636         "remove_"
32637         (TypeContainer::Populate): Now define the delegates of the type too.
32638         (TypeContainer.Delegates): Property to access the list of delegates defined
32639         in the type.
32640
32641         * delegates.cs (Delegate::Define): Implement partially.
32642
32643         * modifiers.cs (TypeAttr): Handle more flags.
32644
32645 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32646
32647         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32648         and not <=
32649         (Operator::Define): Re-write logic to get types by using the LookupType method
32650         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32651         (Indexer::Define): Ditto.
32652         (Event::Define): Ditto.
32653         (Property::Define): Ditto.
32654
32655 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32656
32657         * class.cs (TypeContainer::Populate): Now define operators too. 
32658         (TypeContainer.Operators): New property to access the list of operators
32659         in a type.
32660         (Operator.OperatorMethodBuilder): New member to hold the method builder
32661         for the operator we are defining.
32662         (Operator::Define): Implement.
32663
32664 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32665
32666         * class.cs (Event::Define): Make the prefixes of the accessor methods
32667         addOn_ and removeOn_ 
32668
32669         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32670         of the location being passed in too. Ideally, this should go later since all
32671         error reporting should be done through the Report object.
32672
32673         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32674         (Populate): Iterate thru the indexers we have and define them too.
32675         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32676         for the get and set accessors.
32677         (Indexer::Define): Implement.
32678
32679 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32680
32681         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32682         my previous implementation, did not work.
32683
32684         * typemanager.cs: Add a couple of missing types (the longs).
32685
32686         * literal.cs: Use TypeManager.bool_type instead of getting it.
32687
32688         * expression.cs (EventExpr): New kind of expressions.
32689         (Expressio::ExprClassFromMemberInfo): finish
32690
32691 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32692
32693         * assign.cs: Emit stores to static fields differently.
32694
32695 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32696
32697         * Merge in changes and adjust code to tackle conflicts. Backed out my
32698         code in Assign::Resolve ;-) 
32699
32700 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32701
32702         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32703         instead Report.Error and also pass in the location.
32704         (CSharpParser::Lexer): New readonly property to return the reference
32705         to the Tokenizer object.
32706         (declare_local_variables): Use Report.Error with location instead of plain 
32707         old error.
32708         (CheckDef): Ditto.
32709
32710         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32711         (Operator.CheckBinaryOperator): Ditto.
32712
32713         * cs-parser.jay (operator_declarator): Update accordingly.
32714
32715         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32716         (CheckBinaryOperator): Same here.
32717
32718         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32719         on the name without any prefixes of namespace names etc. This is because we
32720         already might have something already fully qualified like 
32721         'System.Console.WriteLine'
32722
32723         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32724
32725 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32726
32727         * cs-tokenizer.cs (location): Return a string which also contains
32728         the file name.
32729
32730         * expression.cs (ElementAccess): New class for expressions of the
32731         type 'element access.'
32732         (BaseAccess): New class for expressions of the type 'base access.'
32733         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32734         respectively.
32735
32736         * cs-parser.jay (element_access): Implement action.
32737         (base_access): Implement actions.
32738         (checked_expression, unchecked_expression): Implement.
32739
32740         * cs-parser.jay (local_variable_type): Correct and implement.
32741         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32742
32743         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32744
32745         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32746         name and the specifiers.
32747
32748         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32749
32750         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32751         making them all public ;-)
32752
32753         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32754         class anyways.
32755
32756 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32757
32758         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32759         PropertyExprs.
32760         (FieldExpr, PropertyExprs): New resolved expressions.
32761         (SimpleName::MemberStaticCheck): Perform static checks for access
32762         to non-static fields on static methods. Maybe this should be
32763         generalized for MemberAccesses. 
32764         (SimpleName::ResolveSimpleName): More work on simple name
32765         resolution. 
32766
32767         * cs-parser.jay (primary_expression/qualified_identifier): track
32768         the parameter index.
32769
32770         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32771         (EmitContext::EmitBoolExpression): Chain to expression generation
32772         instead of temporary hack.
32773         (::EmitStatementExpression): Put generic expression code generation.
32774
32775         * assign.cs (Assign::Emit): Implement variable assignments to
32776         local variables, parameters and fields.
32777
32778 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32779
32780         * statement.cs (Block::GetVariableInfo): New method, returns the
32781         VariableInfo for a variable name in a block.
32782         (Block::GetVariableType): Implement in terms of GetVariableInfo
32783
32784         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32785         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32786
32787 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32788
32789         * cs-parser.jay (operator_declaration): Continue on my quest : update
32790         to take attributes argument.
32791         (event_declaration): Ditto.
32792         (enum_declaration): Ditto.
32793         (indexer_declaration): Ditto.
32794
32795         * class.cs (Operator::Operator): Update constructor accordingly.
32796         (Event::Event): Ditto.
32797
32798         * delegate.cs (Delegate::Delegate): Same here.
32799
32800         * enum.cs (Enum::Enum): Same here.
32801
32802 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32803
32804         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32805
32806         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32807
32808         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32809         being passed around as an arraylist.
32810         (Attributes::AddAttribute): Method to add attribute sections.
32811
32812         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32813         (struct_declaration): Update accordingly.
32814         (constant_declaration): Update.
32815         (field_declaration): Update.
32816         (method_header): Update.
32817         (fixed_parameter): Update.
32818         (parameter_array): Ditto.
32819         (property_declaration): Ditto.
32820         (destructor_declaration): Ditto.
32821
32822         * class.cs (Struct::Struct): Update constructors accordingly.
32823         (Class::Class): Ditto.
32824         (Field::Field): Ditto.
32825         (Method::Method): Ditto.
32826         (Property::Property): Ditto.
32827         (TypeContainer::OptAttribute): update property's return type.
32828
32829         * interface.cs (Interface.opt_attributes): New member.
32830         (Interface::Interface): Update to take the extra Attributes argument.
32831
32832         * parameter.cs (Parameter::Parameter): Ditto.
32833
32834         * constant.cs (Constant::Constant): Ditto.
32835
32836         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32837         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32838         the attributes as a parameter.
32839         (InterfaceProperty): Update constructor call.
32840         (InterfaceEvent): Ditto.
32841         (InterfaceMethod): Ditto.
32842         (InterfaceIndexer): Ditto.
32843
32844         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32845         pass the attributes too.
32846         (interface_event_declaration): Ditto.
32847         (interface_property_declaration): Ditto.
32848         (interface_method_declaration): Ditto.
32849         (interface_declaration): Ditto.
32850
32851 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32852
32853         * class.cs (Method::Define): Track the "static Main" definition to
32854         create an entry point. 
32855
32856         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32857         EntryPoint if we find it. 
32858
32859         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32860         (EmitContext::ig): Make this variable public.
32861
32862         * driver.cs: Make the default output file be the first file name
32863         with the .exe extension.  
32864
32865         Detect empty compilations
32866
32867         Handle various kinds of output targets.  Handle --target and
32868         rename -t to --dumper.
32869
32870         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32871         methods inherited from Expression return now an Expression.  This
32872         will is used during the tree rewriting as we resolve them during
32873         semantic analysis.
32874
32875         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32876         the spec.  Missing entirely is the information about
32877         accessability of elements of it.
32878
32879         (Expression::ExprClassFromMemberInfo): New constructor for
32880         Expressions that creates a fully initialized Expression based on
32881         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32882         a Type.
32883
32884         (Invocation::Resolve): Begin implementing resolution of invocations.
32885
32886         * literal.cs (StringLiteral):  Implement Emit.
32887
32888 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32889
32890         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32891         member.
32892
32893 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32894
32895         * cs-parser.jay (attribute_arguments): Implement actions.
32896         (attribute): Fix bug in production. Implement action.
32897         (attribute_list): Implement.
32898         (attribute_target): Implement.
32899         (attribute_target_specifier, opt_target_specifier): Implement
32900         (CheckAttributeTarget): New method to check if the attribute target
32901         is valid.
32902         (attribute_section): Implement.
32903         (opt_attributes): Implement.
32904
32905         * attribute.cs : New file to handle attributes.
32906         (Attribute): Class to hold attribute info.
32907
32908         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32909         (attribute_section): Modify production to use 2 different rules to 
32910         achieve the same thing. 1 s/r conflict down !
32911         Clean out commented, useless, non-reducing dimension_separator rules.
32912
32913         * class.cs (TypeContainer.attributes): New member to hold list
32914         of attributes for a type.
32915         (Struct::Struct): Modify to take one more argument, the attribute list.
32916         (Class::Class): Ditto.
32917         (Field::Field): Ditto.
32918         (Method::Method): Ditto.
32919         (Property::Property): Ditto.
32920
32921         * cs-parser.jay (struct_declaration): Update constructor call to
32922         pass in the attributes too.
32923         (class_declaration): Ditto.
32924         (constant_declaration): Ditto.
32925         (field_declaration): Ditto.
32926         (method_header): Ditto.
32927         (fixed_parameter): Ditto.
32928         (parameter_array): Ditto.
32929         (property_declaration): Ditto.
32930
32931         * constant.cs (Constant::Constant): Update constructor similarly.
32932         Use System.Collections.
32933
32934         * parameter.cs (Parameter::Parameter): Update as above.
32935
32936 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32937
32938         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32939         (TypeContainer.delegates): New member to hold list of delegates.
32940
32941         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32942         this time as I seem to be on crack ;-)
32943
32944 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32945
32946         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32947         tell whether an identifier represents a namespace.
32948
32949         * expression.cs (NamespaceExpr): A namespace expression, used only
32950         temporarly during expression resolution.
32951         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32952         utility functions to resolve names on expressions.
32953
32954 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32955
32956         * codegen.cs: Add hook for StatementExpressions. 
32957
32958         * class.cs: Fix inverted test for static flag in methods.
32959
32960 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32961
32962         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32963         to make it coincide with MS' number.
32964         (Operator::CheckBinaryOperator): Ditto.
32965
32966         * ../errors/errors.txt : Remove error numbers added earlier.
32967
32968         * ../errors/cs1019.cs : Test case for error # 1019
32969
32970         * ../errros/cs1020.cs : Test case for error # 1020
32971
32972         * cs-parser.jay : Clean out commented cruft.
32973         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32974         used anywhere - non-reducing rule.
32975         (namespace_declarations): Non-reducing rule - comment out.
32976
32977         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32978         with TypeContainer::AddEnum.
32979
32980         * delegate.cs : New file for delegate handling classes.
32981         (Delegate): Class for declaring delegates.
32982
32983         * makefile : Update.
32984
32985         * cs-parser.jay (delegate_declaration): Implement.
32986
32987 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32988
32989         * class.cs (Event::Define): Implement.
32990         (Event.EventBuilder): New member.
32991
32992         * class.cs (TypeContainer::Populate): Update to define all enums and events
32993         we have.
32994         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32995         readonly fields for all these cases ?
32996
32997 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32998
32999         * class.cs (Property): Revamp to use the convention of making fields readonly.
33000         Accordingly modify code elsewhere.
33001
33002         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
33003         the Define method of the Property class.
33004
33005         * class.cs : Clean up applied patch and update references to variables etc. Fix 
33006         trivial bug.
33007         (TypeContainer::Populate): Update to define all the properties we have. Also
33008         define all enumerations.
33009
33010         * enum.cs (Define): Implement.
33011
33012 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33013
33014         * cs-parser.jay (overloadable_operator): The semantic value is an
33015         enum of the Operator class.
33016         (operator_declarator): Implement actions.
33017         (operator_declaration): Implement.
33018
33019         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
33020         validity of definitions.
33021         (Operator::CheckBinaryOperator): Static method to check for binary operators
33022         (TypeContainer::AddOperator): New method to add an operator to a type.
33023
33024         * cs-parser.jay (indexer_declaration): Added line to actually call the
33025         AddIndexer method so it gets added ;-)
33026
33027         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
33028         already taken care of by the MS compiler ?  
33029
33030 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33031
33032         * class.cs (Operator): New class for operator declarations.
33033         (Operator::OpType): Enum for the various operators.
33034
33035 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33036
33037         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
33038         ostensibly handle this in semantic analysis.
33039
33040         * cs-parser.jay (general_catch_clause): Comment out
33041         (specific_catch_clauses, specific_catch_clause): Ditto.
33042         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
33043         (catch_args, opt_catch_args): New productions.
33044         (catch_clause): Rewrite to use the new productions above
33045         (catch_clauses): Modify accordingly.
33046         (opt_catch_clauses): New production to use in try_statement
33047         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
33048         and re-write the code in the actions to extract the specific and
33049         general catch clauses by being a little smart ;-)
33050
33051         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
33052         Hooray, try and catch statements parse fine !
33053
33054 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33055
33056         * statement.cs (Block::GetVariableType): Fix logic to extract the type
33057         string from the hashtable of variables.
33058
33059         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
33060         I end up making that mistake ;-)
33061         (catch_clauses): Fixed gross error which made Key and Value of the 
33062         DictionaryEntry the same : $1 !!
33063
33064 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33065
33066         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
33067
33068         * cs-parser.jay (event_declaration): Correct to remove the semicolon
33069         when the add and remove accessors are specified. 
33070
33071 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33072
33073         * cs-parser.jay (IndexerDeclaration): New helper class to hold
33074         information about indexer_declarator.
33075         (indexer_declarator): Implement actions.
33076         (parsing_indexer): New local boolean used to keep track of whether
33077         we are parsing indexers or properties. This is necessary because 
33078         implicit_parameters come into picture even for the get accessor in the 
33079         case of an indexer.
33080         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
33081
33082         * class.cs (Indexer): New class for indexer declarations.
33083         (TypeContainer::AddIndexer): New method to add an indexer to a type.
33084         (TypeContainer::indexers): New member to hold list of indexers for the
33085         type.
33086
33087 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33088
33089         * cs-parser.jay (add_accessor_declaration): Implement action.
33090         (remove_accessor_declaration): Implement action.
33091         (event_accessors_declaration): Implement
33092         (variable_declarators): swap statements for first rule - trivial.
33093
33094         * class.cs (Event): New class to hold information about event
33095         declarations.
33096         (TypeContainer::AddEvent): New method to add an event to a type
33097         (TypeContainer::events): New member to hold list of events.
33098
33099         * cs-parser.jay (event_declaration): Implement actions.
33100
33101 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33102
33103         * cs-parser.jay (dim_separators): Implement. Make it a string
33104         concatenating all the commas together, just as they appear.
33105         (opt_dim_separators): Modify accordingly
33106         (rank_specifiers): Update accordingly. Basically do the same
33107         thing - instead, collect the brackets here.
33108         (opt_rank_sepcifiers): Modify accordingly.
33109         (array_type): Modify to actually return the complete type string
33110         instead of ignoring the rank_specifiers.
33111         (expression_list): Implement to collect the expressions
33112         (variable_initializer): Implement. We make it a list of expressions
33113         essentially so that we can handle the array_initializer case neatly too.
33114         (variable_initializer_list): Implement.
33115         (array_initializer): Make it a list of variable_initializers
33116         (opt_array_initializer): Modify accordingly.
33117
33118         * expression.cs (New::NType): Add enumeration to help us
33119         keep track of whether we have an object/delegate creation
33120         or an array creation.
33121         (New:NewType, New::Rank, New::Indices, New::Initializers): New
33122         members to hold data about array creation.
33123         (New:New): Modify to update NewType
33124         (New:New): New Overloaded contructor for the array creation
33125         case.
33126
33127         * cs-parser.jay (array_creation_expression): Implement to call
33128         the overloaded New constructor.
33129
33130 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
33131
33132         * class.cs (TypeContainer::Constructors): Return member
33133         constructors instead of returning null.
33134
33135 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
33136
33137         * typemanager.cs (InitCoreTypes): Initialize the various core
33138         types after we have populated the type manager with the user
33139         defined types (this distinction will be important later while
33140         compiling corlib.dll)
33141
33142         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
33143         on Expression Classification.  Now all expressions have a method
33144         `Resolve' and a method `Emit'.
33145
33146         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
33147         generation from working.     Also add some temporary debugging
33148         code. 
33149
33150 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
33151
33152         * codegen.cs: Lots of code generation pieces.  This is only the
33153         beginning, will continue tomorrow with more touches of polish.  We
33154         handle the fundamentals of if, while, do, for, return.  Others are
33155         trickier and I need to start working on invocations soon.
33156
33157         * gen-treedump.cs: Bug fix, use s.Increment here instead of
33158         s.InitStatement. 
33159
33160         * codegen.cs (EmitContext): New struct, used during code
33161         emission to keep a context.   Most of the code generation will be
33162         here. 
33163
33164         * cs-parser.jay: Add embedded blocks to the list of statements of
33165         this block.  So code generation proceeds in a top down fashion.
33166
33167 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
33168
33169         * statement.cs: Add support for multiple child blocks.
33170
33171 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
33172
33173         * codegen.cs (EmitCode): New function, will emit the code for a
33174         Block of code given a TypeContainer and its ILGenerator. 
33175
33176         * statement.cs (Block): Standard public readonly optimization.
33177         (Block::Block constructors): Link children. 
33178         (Block::Child): Child Linker.
33179         (Block::EmitVariables): Emits IL variable declarations.
33180
33181         * class.cs: Drop support for MethodGroups here, delay until
33182         Semantic Analysis.
33183         (Method::): Applied the same simplification that I did before, and
33184         move from Properties to public readonly fields.
33185         (Method::ParameterTypes): Returns the parameter types for the
33186         function, and implements a cache that will be useful later when I
33187         do error checking and the semantic analysis on the methods is
33188         performed.
33189         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33190         and made a method, optional argument tells whether this is a class
33191         or a structure to apply the `has-this' bit.
33192         (Method::GetCallingConvention): Implement, returns the calling
33193         convention. 
33194         (Method::Define): Defines the type, a second pass is performed
33195         later to populate the methods.
33196
33197         (Constructor::ParameterTypes): implement a cache similar to the
33198         one on Method::ParameterTypes, useful later when we do semantic
33199         analysis. 
33200
33201         (TypeContainer::EmitMethod):  New method.  Emits methods.
33202
33203         * expression.cs: Removed MethodGroup class from here.
33204
33205         * parameter.cs (Parameters::GetCallingConvention): new method.
33206
33207 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33208
33209         * class.cs (TypeContainer::Populate): Drop RootContext from the
33210         argument. 
33211
33212         (Constructor::CallingConvention): Returns the calling convention.
33213         (Constructor::ParameterTypes): Returns the constructor parameter
33214         types. 
33215
33216         (TypeContainer::AddConstructor): Keep track of default constructor
33217         and the default static constructor.
33218
33219         (Constructor::) Another class that starts using `public readonly'
33220         instead of properties. 
33221
33222         (Constructor::IsDefault): Whether this is a default constructor. 
33223
33224         (Field::) use readonly public fields instead of properties also.
33225
33226         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33227         track of static constructors;  If none is used, turn on
33228         BeforeFieldInit in the TypeAttributes. 
33229
33230         * cs-parser.jay (opt_argument_list): now the return can be null
33231         for the cases where there are no arguments. 
33232
33233         (constructor_declarator): If there is no implicit `base' or
33234         `this', then invoke the default parent constructor. 
33235
33236         * modifiers.cs (MethodAttr): New static function maps a set of
33237         modifiers flags into a MethodAttributes enum
33238         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33239         MethodAttr, TypeAttr to represent the various mappings where the
33240         modifiers are used.
33241         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33242
33243 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33244
33245         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33246         method arguments.
33247
33248         * interface.cs (PopulateIndexer): Implemented the code generator
33249         for interface indexers.
33250
33251 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33252
33253         * interface.cs (InterfaceMemberBase): Now we track the new status
33254         here.  
33255
33256         (PopulateProperty): Implement property population.  Woohoo!  Got
33257         Methods and Properties going today. 
33258
33259         Removed all the properties for interfaces, and replaced them with
33260         `public readonly' fields. 
33261
33262 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33263
33264         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33265         initialize their hashtables/arraylists only when they are needed
33266         instead of doing this always.
33267
33268         * parameter.cs: Handle refs and out parameters.
33269
33270         * cs-parser.jay: Use an ArrayList to construct the arguments
33271         instead of the ParameterCollection, and then cast that to a
33272         Parameter[] array.
33273
33274         * parameter.cs: Drop the use of ParameterCollection and use
33275         instead arrays of Parameters.
33276
33277         (GetParameterInfo): Use the Type, not the Name when resolving
33278         types. 
33279
33280 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33281
33282         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33283         and instead use public readonly fields.
33284
33285         * class.cs: Put back walking code for type containers.
33286
33287 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33288
33289         * class.cs (MakeConstant): Code to define constants.
33290
33291         * rootcontext.cs (LookupType): New function.  Used to locate types 
33292
33293
33294 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33295
33296         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33297         this System.Reflection code is.  Kudos to Microsoft
33298
33299         * typemanager.cs: Implement a type cache and avoid loading all
33300         types at boot time.  Wrap in LookupType the internals.  This made
33301         the compiler so much faster.  Wow.  I rule!
33302
33303         * driver.cs: Make sure we always load mscorlib first (for
33304         debugging purposes, nothing really important).
33305
33306         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33307         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33308
33309         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33310         on namespaces that have been imported using the `using' keyword.
33311
33312         * class.cs (TypeContainer::TypeAttr): Virtualize.
33313         (Class::TypeAttr): Return attributes suitable for this bad boy.
33314         (Struct::TypeAttr): ditto.
33315         Handle nested classes.
33316         (TypeContainer::) Remove all the type visiting code, it is now
33317         replaced with the rootcontext.cs code
33318
33319         * rootcontext.cs (GetClassBases): Added support for structs. 
33320
33321 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33322
33323         * interface.cs, statement.cs, class.cs, parameter.cs,
33324         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33325         Drop use of TypeRefs, and use strings instead.
33326
33327 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33328
33329         * rootcontext.cs: 
33330
33331         * class.cs (Struct::Struct): set the SEALED flags after
33332         checking the modifiers.
33333         (TypeContainer::TypeAttr): new property, returns the
33334         TypeAttributes for a class.  
33335
33336         * cs-parser.jay (type_list): Oops, list production was creating a
33337         new list of base types.
33338
33339         * rootcontext.cs (StdLib): New property.
33340         (GetInterfaceTypeByName): returns an interface by type name, and
33341         encapsulates error handling here.
33342         (GetInterfaces): simplified.
33343         (ResolveTree): Encapsulated all the tree resolution here.
33344         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33345         types. 
33346
33347         * driver.cs: Add support for --nostdlib, to avoid loading the
33348         default assemblies.
33349         (Main): Do not put tree resolution here. 
33350
33351         * rootcontext.cs: Beginning of the class resolution.
33352
33353 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33354
33355         * rootcontext.cs: Provide better error reporting. 
33356
33357         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33358
33359         * rootcontext.cs (CreateInterface): Handle the case where there
33360         are no parent interfaces.
33361
33362         (CloseTypes): Routine to flush types at the end.
33363         (CreateInterface): Track types.
33364         (GetInterfaces): Returns an array of Types from the list of
33365         defined interfaces.
33366
33367         * typemanager.c (AddUserType): Mechanism to track user types (puts
33368         the type on the global type hash, and allows us to close it at the
33369         end). 
33370
33371 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33372
33373         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33374         RecordInterface instead.
33375
33376         * cs-parser.jay: Updated to reflect changes above.
33377
33378         * decl.cs (Definition): Keep track of the TypeBuilder type that
33379         represents this type here.  Not sure we will use it in the long
33380         run, but wont hurt for now.
33381
33382         * driver.cs: Smaller changes to accomodate the new code.
33383
33384         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33385         when done. 
33386
33387         * rootcontext.cs (CreateInterface):  New method, used to create
33388         the System.TypeBuilder type for interfaces.
33389         (ResolveInterfaces): new entry point to resolve the interface
33390         hierarchy. 
33391         (CodeGen): Property, used to keep track of the code generator.
33392
33393 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33394
33395         * cs-parser.jay: Add a second production for delegate_declaration
33396         with `VOID'.
33397
33398         (enum_body): Put an opt_comma here instead of putting it on
33399         enum_body or enum_member_declarations so we can handle trailing
33400         commas on enumeration members.  Gets rid of a shift/reduce.
33401
33402         (type_list): Need a COMMA in the middle.
33403
33404         (indexer_declaration): Tell tokenizer to recognize get/set
33405
33406         * Remove old targets.
33407
33408         * Re-add the parser target.
33409
33410 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33411
33412         * cs-parser.jay: Add precendence rules for a number of operators
33413         ot reduce the number of shift/reduce conflicts in the grammar.
33414
33415 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33416
33417         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33418         and put it here.
33419
33420         Get rid of old crufty code.
33421
33422         * rootcontext.cs: Use this to keep track of the parsed
33423         representation and the defined types available to the program. 
33424
33425         * gen-treedump.cs: adjust for new convention.
33426
33427         * type.cs: Split out the type manager, and the assembly builder
33428         from here. 
33429
33430         * typemanager.cs: the type manager will live here now.
33431
33432         * cil-codegen.cs: And the code generator here. 
33433
33434 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33435
33436         * makefile: Fixed up for easy making.
33437
33438 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33439
33440         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33441         the 
33442
33443         (unary_expression): Expand pre_increment_expression and
33444         post_decrement_expression to reduce a shift/reduce.
33445
33446 2001-07-11  Simon Cozens
33447
33448         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33449
33450         Improve allow_keyword_as_indent name.
33451
33452 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33453
33454         * Adjustments for Beta2. 
33455
33456 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33457
33458         * decl.cs: Added `Define' abstract method.
33459         (InTransit): new property, used to catch recursive definitions. 
33460
33461         * interface.cs: Implement `Define'. 
33462
33463         * modifiers.cs: Map Modifiers.constants to
33464         System.Reflection.TypeAttribute flags.
33465
33466         * class.cs: Keep track of types and user-defined types.
33467         (BuilderInit): New method for creating an assembly
33468         (ResolveType): New function to launch the resolution process, only
33469         used by interfaces for now.
33470
33471         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33472         that are inserted into the name space. 
33473
33474 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33475
33476         * ARGH.  I have screwed up my tree so many times due to the use of
33477         rsync rather than using CVS.  Going to fix this at once. 
33478
33479         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33480         load types.
33481
33482 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33483
33484         * Experiment successful: Use System.Type rather that our own
33485         version of Type.  
33486
33487 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33488
33489         * cs-parser.jay: Removed nsAliases from here.
33490
33491         Use new namespaces, handle `using XXX;' 
33492
33493         * namespace.cs: Reimplemented namespace handling, use a recursive
33494         definition of the class.  Now we can keep track of using clauses
33495         and catch invalid using clauses.
33496
33497 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33498
33499         * gen-treedump.cs: Adapted for all the renaming.
33500
33501         * expression.cs (Expression): this class now has a Type property
33502         which returns an expression Type.
33503
33504         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33505         `Type', as this has a different meaning now in the base
33506
33507 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33508
33509         * interface.cs, class.cs: Removed from all the sources the
33510         references to signature computation, as we can not do method
33511         signature computation during the parsing time, as we are not
33512         trying to solve at that point distinguishing:
33513
33514         class X {
33515                 void a (Blah x) {}
33516                 void a (NS.Blah x) {}
33517         }
33518
33519         Which depending on the context might be valid or not, as we do not
33520         know if Blah is the same thing as NS.Blah at that point.
33521
33522         * Redid everything so the code uses TypeRefs now instead of
33523         Types.  TypeRefs are just temporary type placeholders, that need
33524         to be resolved.  They initially have a pointer to a string and the
33525         current scope in which they are used.  This is used later by the
33526         compiler to resolve the reference to an actual Type. 
33527
33528         * DeclSpace is no longer a CIR.Type, and neither are
33529         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33530         are all DeclSpaces, but no Types. 
33531
33532         * type.cs (TypeRefManager): This implements the TypeRef manager,
33533         which keeps track of all the types that need to be resolved after
33534         the parsing has finished. 
33535
33536 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33537
33538         * ARGH.  We are going to have to store `foreach' as a class rather
33539         than resolving it, as we need to verify error 1579 after name
33540         resolution.   *OR* we could keep a flag that says `This request to
33541         IEnumerator comes from a foreach statement' which we can then use
33542         to generate the error.
33543
33544 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33545
33546         * class.cs (TypeContainer.AddMethod): we now add methods to the
33547         MethodGroup instead of the method hashtable.  
33548
33549         * expression.cs: Add MethodGroup abstraction, which gets us one
33550         step closer to the specification in the way we handle method
33551         declarations.  
33552
33553         * cs-parser.jay (primary_expression): qualified_identifier now
33554         tried to match up an identifier to a local variable reference or
33555         to a parameter reference.
33556
33557         current_local_parameters is now a parser global variable that
33558         points to the current parameters for the block, used during name
33559         lookup.
33560
33561         (property_declaration): Now creates an implicit `value' argument to
33562         the set accessor.
33563
33564 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33565
33566         * parameter.cs: Do not use `param' arguments as part of the
33567         signature, per the spec.
33568
33569 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33570
33571         * decl.cs: Base class for classes, structs and interfaces.  This
33572         is the "Declaration Space" 
33573
33574         * cs-parser.jay: Use CheckDef for checking declaration errors
33575         instead of having one on each function.
33576
33577         * class.cs: Factor out some code for handling error handling in
33578         accordance to the "Declarations" section in the "Basic Concepts"
33579         chapter in the ECMA C# spec.
33580
33581         * interface.cs: Make all interface member classes derive from
33582         InterfaceMemberBase.
33583
33584 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33585
33586         * Many things: all interfaces are parsed and generated in
33587         gen-treedump.  Support for member variables, constructors,
33588         destructors, properties, constants is there.
33589
33590         Beginning of the IL backend, but very little done, just there for
33591         testing purposes. 
33592
33593 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33594
33595         * cs-parser.jay: Fix labeled statement.
33596
33597         * cs-tokenizer.cs (escape): Escape " and ' always.
33598         ref_line, ref_name: keep track of the line/filename as instructed
33599         by #line by the compiler.
33600         Parse #line.
33601
33602 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33603
33604         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33605         to match the values in System.CodeDOM.
33606
33607         Divid renamed to Divide.
33608
33609         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33610         statements. 
33611         (Statements.set): remove.
33612
33613         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33614         statements. 
33615
33616         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33617         falseStatements always have valid values. 
33618
33619         * cs-parser.jay: Use System.CodeDOM now.
33620