2009-12-01 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2009-12-01  Marek Safar  <marek.safar@gmail.com>
2
3         A fix for bug #360455
4         * class.cs: Never report a unused warning for generic events to
5         workaround wrong expression type.
6
7 2009-11-30  Marek Safar  <marek.safar@gmail.com>
8
9         A fix for bug #558305
10         * decl.cs, class.cs: Check partial method definitions using correct
11         flag.
12
13 2009-11-30  Marek Safar  <marek.safar@gmail.com>
14
15         * argument.cs: Don't cache rarely used dynamic flag.
16
17 2009-11-27  Marek Safar  <marek.safar@gmail.com>
18
19         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
20
21 2009-11-27  Marek Safar  <marek.safar@gmail.com>
22
23         * ecore.cs (SimpleName): Removed no longer needed in_transit as
24         Resolve is now non-reentrant (saves ~0.6MB for corlib).
25
26 2009-11-26  Marek Safar  <marek.safar@gmail.com>
27
28         A fix for bug #545081
29         * decl.cs: Check private nested types of nested types recursively.
30
31 2009-11-26  Marek Safar  <marek.safar@gmail.com>
32
33         A fix for bug #558305
34         * location.cs: Ignore self referencing #line directive
35
36 2009-11-26  Marek Safar  <marek.safar@gmail.com>
37
38         A fix for bug #558292
39         * class.cs: Allow single unsafe fixed buffer fields.
40
41 2009-11-26  Marek Safar  <marek.safar@gmail.com>
42
43         * expression: Optimize few more zero-based operations.
44
45 2009-11-26  Marek Safar  <marek.safar@gmail.com>
46
47         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
48         avoids boxing of literal values.
49
50 2009-11-26  Marek Safar  <marek.safar@gmail.com>
51
52         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
53         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
54         codegen.cs: LocatedToken redesing to avoid excessive allocation and
55         boxing (saves ~7MB for corlib). Also fixes presise token location.
56
57 2009-11-25  Marek Safar  <marek.safar@gmail.com>
58
59         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
60         common data buckers.
61
62 2009-11-24  Marek Safar  <marek.safar@gmail.com>
63
64         * expression.cs: Lower static array initializer barrier.
65         
66         * support.cs, driver.cs: Share reader buffer.
67
68 2009-11-23  Marek Safar  <marek.safar@gmail.com>
69
70         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
71
72 2009-11-23  Marek Safar  <marek.safar@gmail.com>
73
74         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
75         cleanup some obsolete code.
76
77 2009-11-20  Marek Safar  <marek.safar@gmail.com>
78
79         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
80         Expression.Resolve.
81
82 2009-11-20  Marek Safar  <marek.safar@gmail.com>
83
84         * *.cs: Resolved expressions are never resolved again, this helps to
85         uncover some not easy to find bugs and improve the performance.
86
87 2009-11-19  Marek Safar  <marek.safar@gmail.com>
88
89         * *.cs: Made constant expressions fully compatible with any other
90         expression.
91
92 2009-11-19  Marek Safar  <marek.safar@gmail.com>
93
94         * *.cs: DoResolve is a worker method and has to be protected.
95
96 2009-11-18  Marek Safar  <marek.safar@gmail.com>
97
98         * *.cs: More context specific handling.
99
100 2009-11-17  Marek Safar  <marek.safar@gmail.com>
101
102         * *.cs: More context specific handling.
103
104 2009-11-16  Marek Safar  <marek.safar@gmail.com>
105
106         * dynamic.cs, class.cs: Removed few fixed user types conversions.
107         
108         * symbolwriter.cs: Uses public ILOffset.
109
110 2009-11-13  Marek Safar  <marek.safar@gmail.com>
111
112         A fix for bug #553650
113         * generic.cs: Another missing TypeToCoreType, still too many to fix.
114
115 2009-11-13  Marek Safar  <marek.safar@gmail.com>
116
117         A fix for bug #555170
118
119         * class.cs, delegate.cs, enum.cs: Constants have to be available
120         for parameters resolve.
121
122 2009-11-12  Marek Safar  <marek.safar@gmail.com>
123
124         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
125         arrays.
126
127 2009-11-12  Marek Safar  <marek.safar@gmail.com>
128
129         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
130         with a statically known candidate set.
131
132 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
133
134         * generic.cs: Made type inflation for generic constraint checks
135         recursive. This fixes BGO #553655.
136
137 2009-11-11  Marek Safar  <marek.safar@gmail.com>
138
139         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
140         checks.
141
142 2009-11-10  Marek Safar  <marek.safar@gmail.com>
143
144         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
145         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
146         attribute.cs: Add some dynamic error checking.
147
148 2009-11-07  Marek Safar  <marek.safar@gmail.com>
149
150         A fix for bug #553465
151
152         * expression.cs: Fixed mixed version of expression tree anonymous
153         type.
154
155 2009-11-06  Marek Safar  <marek.safar@gmail.com>
156
157         A fix for bug #553031
158
159         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
160         expression tree version of anonymous type with members declaration.
161
162 2009-11-05  Marek Safar  <marek.safar@gmail.com>
163
164         * parameter.cs: Handle nullable parameter default expression.
165         
166         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
167         class.cs, attribute.cs: Check for wrong dynamic arguments.
168
169 2009-11-05  Marek Safar  <marek.safar@gmail.com>
170
171         * statement.cs: Dynamic statements.
172
173 2009-11-04  Marek Safar  <marek.safar@gmail.com>
174
175         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
176         Compound assignments over dynamic type.
177
178 2009-11-03  Marek Safar  <marek.safar@gmail.com>
179
180         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
181         constructor arguments.
182
183 2009-10-30  Marek Safar  <marek.safar@gmail.com>
184
185         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
186         codegen.cs: Unary mutator on dynamic member access expression.
187
188 2009-10-29  Marek Safar  <marek.safar@gmail.com>
189
190         A fix for bug #550580   
191         * convert.cs: Don't eliminate explicit precission casts.
192
193 2009-10-28  Marek Safar  <marek.safar@gmail.com>
194
195         A fix for bug #550404
196         
197         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
198         expression.cs, statement.cs, ecore.cs: Quote any nested expression
199         tree.
200
201 2009-10-27  Marek Safar  <marek.safar@gmail.com>
202
203         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
204         constant.
205         
206         * class.cs: Allow nullable binary user operators.
207
208 2009-10-26  Marek Safar  <marek.safar@gmail.com>
209
210         * expression.cs: Move binary expression optimization at the end of
211         resolve.
212
213 2009-10-23  Marek Safar  <marek.safar@gmail.com>
214
215         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
216         Separate NullConstant from NullLiteral.
217
218 2009-10-23  Marek Safar  <marek.safar@gmail.com>
219
220         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
221         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
222         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
223         ModuleContainer. Add common unclosed member check routine.
224
225 2009-10-22  Marek Safar  <marek.safar@gmail.com>
226
227         * argument.cs: Use literal flag for real literals only.
228
229         * dynamic.cs: Use correct return type for custom delegates.
230
231 2009-10-22  Marek Safar  <marek.safar@gmail.com>
232
233         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
234         resolver.
235
236 2009-10-22  Marek Safar  <marek.safar@gmail.com>
237
238         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
239
240 2009-10-21  Marek Safar  <marek.safar@gmail.com>
241
242         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
243         conversion.
244
245 2009-10-21  Marek Safar  <marek.safar@gmail.com>
246
247         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
248         binder flags.
249
250 2009-10-20  Marek Safar  <marek.safar@gmail.com>
251
252         * argument.cs, dynamic.cs, expression.cs: Latest API update.
253
254 2009-10-19  Marek Safar  <marek.safar@gmail.com>
255
256         * typemanager.cs, expression.cs: Dynamic array initializer.
257
258 2009-10-16  Marek Safar  <marek.safar@gmail.com>
259
260         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
261         is imported.
262
263 2009-10-16  Marek Safar  <marek.safar@gmail.com>
264
265         A fix for bug #493523, #507067
266         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
267         standard nullable conversion using underlying standard conversion
268         and not full conversion.
269
270 2009-10-15  Marek Safar  <marek.safar@gmail.com>
271
272         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
273         type in VerifyArgumentsCompat.
274
275 2009-10-15  Marek Safar  <marek.safar@gmail.com>
276
277         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
278         Reject variable used with type arguments.
279
280 2009-10-14  Marek Safar  <marek.safar@gmail.com>
281
282         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
283         Implement dynamic expressions assignment.
284
285 2009-10-14  Marek Safar  <marek.safar@gmail.com>
286
287         * expression.cs: Build underlying expression when resolving unary
288         mutators.
289
290 2009-10-14  Marek Safar  <marek.safar@gmail.com>
291
292         * expression.cs: Emit enum array initializer using binary blob.
293
294 2009-10-08  Marek Safar  <marek.safar@gmail.com>
295
296         * typemanager.cs, constant.cs: Optimize decimal constants which fit
297         to long range.
298
299 2009-10-07  Marek Safar  <marek.safar@gmail.com>
300
301         * typemanager.cs: Reset object_type.
302         
303         * assign: Made SimpleAssign public.
304
305 2009-10-06  Marek Safar  <marek.safar@gmail.com>
306
307         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
308         invocation assembly to IsThisOrFriendAssembly.
309
310 2009-10-05  Marek Safar  <marek.safar@gmail.com>
311
312         * expression.cs: Equality comparison of generic parameter with
313         class constraint.
314
315 2009-10-05  Marek Safar  <marek.safar@gmail.com>
316
317         A fix for bug #543570
318         * generic.cs: Import predefined constraints correctly.
319
320 2009-10-02  Marek Safar  <marek.safar@gmail.com>
321
322         * ecore.cs: Don't crash on overloads with optional paremeters where
323         arguments count overflows.
324         
325         * parameter.cs: Import optional parameter constants using optional
326         value type.
327
328 2009-10-01  Marek Safar  <marek.safar@gmail.com>
329
330         * Makefile: Default is gmcs compiler.
331
332 2009-10-01  Marek Safar  <marek.safar@gmail.com>
333
334         * cs-parser.jay: Fixed few NRE.
335
336 2009-10-01  Marek Safar  <marek.safar@gmail.com>
337
338         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
339
340 2009-09-30  Marek Safar  <marek.safar@gmail.com>
341
342         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
343         ShimExpression, ImplicitCast.
344
345 2009-09-30  Marek Safar  <marek.safar@gmail.com>
346
347         A fix for bug #542959
348         * delegate.cs: Emit correct delegate instance variable when there
349         are static and non-static overloads.
350
351 2009-09-29  Marek Safar  <marek.safar@gmail.com>
352
353         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
354         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
355
356 2009-09-28  Marek Safar  <marek.safar@gmail.com>
357
358         A fix for bug #542487
359         * ecore.cs: Resolve extension methods hidden by properties.
360
361 2009-09-25  Marek Safar  <marek.safar@gmail.com>
362
363         * expression.cs, ecore.cs: More dynamic binary expressions.
364
365 2009-09-22  Marek Safar  <marek.safar@gmail.com>
366
367         * nullable.cs, expression.cs: Fixed null lifted conversion for
368         bitwise enum operations.
369
370 2009-09-22  Marek Safar  <marek.safar@gmail.com>
371
372         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
373         values in checked context.
374
375 2009-09-22  Marek Safar  <marek.safar@gmail.com>
376
377         * expression.cs, ecore.cs: Fixed array index constant conversion.
378
379 2009-09-20  Miguel de Icaza  <miguel@novell.com>
380
381         * expression.cs: Do not crash when MemberLookup returns something
382         that is not a MemberExpr here.   Report error 582 instead. 
383
384         Fixes #499988.
385
386 2009-09-18  Marek Safar  <marek.safar@gmail.com>
387
388         * decl.cs, class.cs: Check protected property accessors.
389
390 2009-09-18  Marek Safar  <marek.safar@gmail.com>
391
392         * dynamic.cs, assign.cs: Dynamic compound assignment.
393
394 2009-09-17  Marek Safar  <marek.safar@gmail.com>
395
396         * expression.cs: Fixed compound assignment explicit conversion.
397
398 2009-09-17  Marek Safar  <marek.safar@gmail.com>
399
400         * expression.cs, ecore.cs: Cannot infer variables from method group.
401
402 2009-09-16  Marek Safar  <marek.safar@gmail.com>
403
404         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
405         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
406         codegen.cs: Dynamic binary operations scaffolding.
407
408 2009-09-15  Marek Safar  <marek.safar@gmail.com>
409
410         * expression.cs: Fixes nullable promotion for enum type variables.
411
412 2009-09-11  Marek Safar  <marek.safar@gmail.com>
413
414         * driver.cs, dynamic.cs: Reset more static variables.
415
416 2009-09-11  Marek Safar  <marek.safar@gmail.com>
417
418         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
419         driver.cs: Introduced Expression::MakeExpression.
420
421 2009-09-11  Marek Safar  <marek.safar@gmail.com>
422
423         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
424
425 2009-09-09  Marek Safar  <marek.safar@gmail.com>
426
427         * eval.cs, report.cs: Use Console.Out for all eval error or warning
428         output.
429
430 2009-09-09  Marek Safar  <marek.safar@gmail.com>
431
432         A fix for bug #518707
433         * expression.cs (Is): Optimize only generic parameter type
434         expression probing value type generic parameter.
435
436 2009-09-09  Marek Safar  <marek.safar@gmail.com>
437
438         A fix for bug #532571
439         * ecore.cs: Check for simple name type arguments used with
440         non-generic type.
441
442 2009-09-08  Marek Safar  <marek.safar@gmail.com>
443
444         A fix for bug #497421
445         * generic.cs (CheckConstraint): Don't use buildin types to check for
446         parameterless constructor.
447
448 2009-09-08  Marek Safar  <marek.safar@gmail.com>
449
450         A fix for bug #537402
451         * generic.cs (CheckConstraint): Correctly inflate generic type
452         arguments when checking generic method. 
453
454 2009-09-08  Marek Safar  <marek.safar@gmail.com>
455
456         A fix for bug #536463
457         * decl.cs (AddToContainer): Don't report collision between explicit
458         and parameterless non-explicit members.
459
460 2009-09-08  Marek Safar  <marek.safar@gmail.com>
461
462         * eval.cs: Reset more static stuff.
463
464 2009-09-07  Marek Safar  <marek.safar@gmail.com>
465
466         A fix for bug #324625
467         * expression.cs, ecore.cs: Create nested generic type expression
468         using declaring and not current type.
469
470 2009-09-07  Marek Safar  <marek.safar@gmail.com>
471
472         * *.cs: Changed Report class to accept various output printers and
473         be an instance class. An expression resolver can now use different
474         message reporter for each call and Report.Error can safely throw
475         an exception. Part of ongoing work to turn mcs into proper library.
476
477 2009-09-04  Marek Safar  <marek.safar@gmail.com>
478
479         * statement.cs, ecore.cs: Removed error reporting from emit code.
480
481 2009-09-04  Marek Safar  <marek.safar@gmail.com>
482
483         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
484
485 2009-09-03  Marek Safar  <marek.safar@gmail.com>
486
487         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
488         parser checks out of constructors.
489
490 2009-09-02  Marek Safar  <marek.safar@gmail.com>
491
492         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
493
494 2009-09-02  Marek Safar  <marek.safar@gmail.com>
495
496         A fix for bug #535448
497         * anonymous.cs, class.cs: Copy return label between all contexts.
498
499 2009-09-02  Marek Safar  <marek.safar@gmail.com>
500
501         A fix for bug #535395
502         * namespace.cs: Resolve context can be null.
503
504 2009-08-25  Marek Safar  <marek.safar@gmail.com>
505
506         A fix for bug #533912
507         * generic.cs: Use correct context for constraints resolving.
508
509 2009-08-25  Marek Safar  <marek.safar@gmail.com>
510
511         A fix for bug #532630
512         * driver.cs: Trim conditional symbols.
513
514 2009-08-25  Marek Safar  <marek.safar@gmail.com>
515
516         * context.cs: New file.
517         
518         * *.exe.sources, *.csproj: Updated.
519
520 2009-08-25  Marek Safar  <marek.safar@gmail.com>
521
522         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
523         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
524         IMembercontext, some small cleanups.
525
526 2009-08-24  Marek Safar  <marek.safar@gmail.com>
527
528         * *.cs: Split ResolveContext and EmitContext.
529
530 2009-08-24  Marek Safar  <marek.safar@gmail.com>
531
532         * *.cs: Only ResolveContext implements IMemberContext.
533
534 2009-08-21  Marek Safar  <marek.safar@gmail.com>
535
536         * *.cs: Renamed IResolveContext to IMemberContext.
537
538 2009-08-21  Marek Safar  <marek.safar@gmail.com>
539
540         * *.cs: Detached ResolveContext from EmitContext.
541
542 2009-08-21  Marek Safar  <marek.safar@gmail.com>
543
544         * codegen.cs: Moved flow-analysis to BlockContext.
545
546 2009-08-21  Marek Safar  <marek.safar@gmail.com>
547
548         * *.cs: Detached BlockContext from EmitContext.
549
550 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
551
552         * statement.cs: avoid nullref when the return value of GetEnumerator()
553         does not contain any MoveNext() method.
554
555 2009-08-19  Marek Safar  <marek.safar@gmail.com>
556
557         * *.cs: Removed IResolveContext::GenericDeclContainer.
558
559 2009-08-19  Marek Safar  <marek.safar@gmail.com>
560
561         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
562
563 2009-08-19  Marek Safar  <marek.safar@gmail.com>
564
565         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
566         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
567
568 2009-08-18  Marek Safar  <marek.safar@gmail.com>
569
570         * *.cs: Removed boolean fields from EmitContext.
571
572 2009-08-18  Marek Safar  <marek.safar@gmail.com>
573
574         * *.cs: Add IResolveContext::IsStatic.
575
576 2009-08-18  Marek Safar  <marek.safar@gmail.com>
577
578         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
579
580 2009-08-17  Marek Safar  <marek.safar@gmail.com>
581
582         * *.cs: Removed DeclContainer from EmitContext.
583
584 2009-08-17  Marek Safar  <marek.safar@gmail.com>
585
586         * *.cs: Add IResolveContext::CurrentTypeParameters.
587
588 2009-08-14  Marek Safar  <marek.safar@gmail.com>
589
590         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
591
592 2009-08-14  Marek Safar  <marek.safar@gmail.com>
593
594         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
595         codegen.cs: Add IResolveContext::LookupExtensionMethod.
596
597 2009-08-13  Marek Safar  <marek.safar@gmail.com>
598
599         * decl.cs: Look in PartialContainer for parent type parameters.
600
601 2009-08-13  Marek Safar  <marek.safar@gmail.com>
602
603         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
604         codegen.cs: Add IResolveContext::LookupTypeParameter.
605
606 2009-08-13  Marek Safar  <marek.safar@gmail.com>
607
608         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
609         Moved resolved logic from Emit to Resolve.
610
611 2009-08-13  Marek Safar  <marek.safar@gmail.com>
612
613         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
614         codegen.cs: Reworked atttributes handling of ResolveContext.
615
616 2009-08-12  Marek Safar  <marek.safar@gmail.com>
617
618         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
619         LookupNamespaceOrType to ResolveContext.
620
621 2009-08-12  Marek Safar  <marek.safar@gmail.com>
622
623         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
624         class.cs: Removed unused parameters and methods.
625
626 2009-08-11  Marek Safar  <marek.safar@gmail.com>
627
628         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
629         codegen.cs: Finding the best common type of a set of expressions for
630         lambda statements.
631
632 2009-08-07  Marek Safar  <marek.safar@gmail.com>
633
634         * dynamic.cs, expression.cs: More dynamic conversions.
635
636 2009-08-06  Miguel de Icaza  <miguel@novell.com>
637
638         * generic.cs: This loop was incorrect, it was increment ii, but
639         checking for `i'.  This was a change introduced to fix #327497,
640         now we fix #424012.
641  
642         * class.cs: Catch another case for cs0533 error, fixes #324782.
643
644 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
645
646         * typemanager.cs (GetGenericArguments): SRE returns null for
647         generic methods on type builder instances if they are not generic
648         themselves. For example, for Foo<int>::Bar() it returns null, but
649         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
650
651 2009-08-05  Marek Safar  <marek.safar@gmail.com>
652
653         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
654         delegate.cs: Work on dynamic binding.
655
656 2009-08-04  Marek Safar  <marek.safar@gmail.com>
657
658         A second fix for bug #525342
659         * class.cs: Attach partial method attributes to method
660         implementation.
661
662 2009-08-03  Marek Safar  <marek.safar@gmail.com>
663
664         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
665         restrictions.
666         
667         * rootcontext.cs: Default to langversion v4.
668
669 2009-08-03  Marek Safar  <marek.safar@gmail.com>
670
671         * pending.cs: Check return type before member info is set.
672
673 2009-08-03  Marek Safar  <marek.safar@gmail.com>
674
675         * anonymous.cs: Fully initialize generic hoisted field expression.
676
677 2009-08-02  Miguel de Icaza  <miguel@novell.com>
678
679         * cs-parser.jay: Flag variables declared on the interactive shell
680         as used to prevent the 168 warning about local variable not being
681         used. 
682
683 2009-07-31  Marek Safar  <marek.safar@gmail.com>
684
685         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
686         attribute.cs: Emit dynamic export attribute.
687
688 2009-07-30  Marek Safar  <marek.safar@gmail.com>
689
690         * expression.cs: More verifier work.
691
692 2009-07-29  Marek Safar  <marek.safar@gmail.com>
693
694         * nullable.cs: Fixed SRE crash during corlib compilation.
695
696 2009-07-29  Marek Safar  <marek.safar@gmail.com>
697
698         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
699         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
700         More TypeManager.TypeToCoreType needed.
701
702 2009-07-29  Marek Safar  <marek.safar@gmail.com>
703
704         * anonymous.cs: Update after recent SRE fixes.
705
706 2009-07-28  Marek Safar  <marek.safar@gmail.com>
707
708         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
709         version of GetFieldHandle for fields of generic types.
710
711 2009-07-27  Marek Safar  <marek.safar@gmail.com>
712
713         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
714         ecore.cs: Add TypeManager.IsDynamicType,
715         PredefinedAttributes.Dynamic.
716
717 2009-07-27  Marek Safar  <marek.safar@gmail.com>
718
719         A fix for bug #415375
720         * expression.cs: Fixed object and reference type parameter
721         comparison.
722
723 2009-07-27  Marek Safar  <marek.safar@gmail.com>
724
725         A fix for bug #525342
726         * class.cs: Attach partial method attributes to method
727         implementation.
728
729 2009-07-24  Marek Safar  <marek.safar@gmail.com>
730
731         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
732         Dynamic arguments.
733
734 2009-07-24  Marek Safar  <marek.safar@gmail.com>
735
736         * anonymous.cs (MutateField): Add imported types handling.
737
738 2009-07-23  Marek Safar  <marek.safar@gmail.com>
739
740         * expression.cs, delegate.cs: Moved arguments resolve into their
741         counterparts expressions. Removed argument resolve from
742         CollectionElementInitializer.
743
744 2009-07-23  Marek Safar  <marek.safar@gmail.com>
745
746         A fix for bug #523683
747         * convert.cs, delegate.cs: Use common overload mechanism for method
748         group conversion check.
749
750 2009-07-22  Marek Safar  <marek.safar@gmail.com>
751
752         A fix for bug #523899
753         * generics.cs: Exact type inference with other bound types.
754
755 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
756
757         Don't complain when the same type is implemented by the output
758         assembly as well as multiple referenced assemblies
759         * namespace.cs (RootNamespace.LookupTypeReflection): Add
760         'must_be_unique' flag.
761         (GlobalRootNamespace): Update to changes.
762         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
763         already have a type in hand.
764
765 2009-07-22  Marek Safar  <marek.safar@gmail.com>
766
767         * expression.cs: More verifier instrumentation.
768         
769         * statement.cs: Do proper throw expression conversion.
770
771 2009-07-22  Marek Safar  <marek.safar@gmail.com>
772
773         A fix for bug #522789
774         * expression.cs: Mutate invocation return type.
775
776 2009-07-16  Marek Safar  <marek.safar@gmail.com>
777
778         * anonymous.cs: Split assignable and readonly generated variable
779         references.
780
781 2009-07-16  Marek Safar  <marek.safar@gmail.com>
782
783         A fix for bug #521671
784         * statement.cs: Fixed crash when checking missing type.
785
786 2009-07-16  Marek Safar  <marek.safar@gmail.com>
787
788         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
789         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
790         class.cs, driver.cs: Work on dynamic binding.
791
792         * dynamic.cs: New file.
793
794         * *.sources, *.proj: Updated.
795
796 2009-07-15  Marek Safar  <marek.safar@gmail.com>
797
798         * expression.cs (Conditional): Avoid double Resolve.
799
800 2009-07-13  Marcus Griep  <marcus@griep.us>
801
802         * ecore.cs: Fix obscure bug with resolving members of interfaces
803         that hide parent interface members. Fixes bug #444388 and corrects
804         bug #323096
805
806 2009-07-13  Marek Safar  <marek.safar@gmail.com>
807
808         * expression.cs (LocalVariableReference): Bounce resolve.
809
810 2009-07-10  Marek Safar  <marek.safar@gmail.com>
811
812         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
813         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
814         types to new class.
815         
816         * support.cs: New dynamic type wrapper.
817
818 2009-07-08  Marek Safar  <marek.safar@gmail.com>
819
820         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
821         typed local variable.
822
823 2009-07-06  Marek Safar  <marek.safar@gmail.com>
824
825         A fix for bug #519005
826         * anonymous.cs: Use null_type as no return type placeholder.
827
828 2009-07-02  Marek Safar  <marek.safar@gmail.com>
829
830         * generic.cs: Handle type inference of identical type parameters
831         with different bounds.
832
833 2009-07-01  Marek Safar  <marek.safar@gmail.com>
834
835         * expression.cs, class.cs: Events variance.
836         
837         * cs-parser.jay: Interface events error messages.
838
839 2009-07-01  Marek Safar  <marek.safar@gmail.com>
840
841         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
842
843 2009-06-29  Marek Safar  <marek.safar@gmail.com>
844
845         * parameter.cs, convert.cs, expression.cs, class.cs: Default
846         parameter expression can be value-type New.
847
848         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
849
850 2009-06-26  Marek Safar  <marek.safar@gmail.com>
851
852         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
853         Implemented C# 4.0 named arguments.
854
855 2009-06-24  Marek Safar  <marek.safar@gmail.com>
856
857         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
858         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
859         parameter modifier. Also fixes bug #515497.
860
861 2009-06-24  Marek Safar  <marek.safar@gmail.com>
862
863         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
864         arguments expression to be implemented.
865         
866         *.sources: Add argument.cs
867
868 2009-06-23  Marek Safar  <marek.safar@gmail.com>
869
870         * parameter.cs: Moved GetParameterIndexByName to base class.
871         
872         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
873         unused AType. Use argument's version of GetExpressionTree.
874
875 2009-06-22  Marek Safar  <marek.safar@gmail.com>
876
877         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
878         arguments grammar.
879
880 2009-06-17  Marek Safar  <marek.safar@gmail.com>
881
882         A fix for bug #514096
883         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
884
885 2009-06-17  Marek Safar  <marek.safar@gmail.com>
886
887         * expression.cs: The first multi-dimensional array nested array
888         initializers was not checked.
889         
890         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
891
892 2009-06-17  Marek Safar  <marek.safar@gmail.com>
893
894         A fix for bug #513400
895         * nullable.cs (EmitEquality): Operands emit could be simplified for
896         built-in types when we now emit user operators differently.
897
898 2009-06-16  Marek Safar  <marek.safar@gmail.com>
899
900         * ecore.cs: Report inaccessible delegate methods correctly.
901
902 2009-06-16  Marek Safar  <marek.safar@gmail.com>
903
904         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
905         cs-parser.jay: Implemented C# 4.0 optional parameters.
906
907 2009-06-16  Marek Safar  <marek.safar@gmail.com>
908
909         * driver.cs: Removed broken DefineManifestResource.
910
911 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
912
913         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
914         Use $(BOOTSTRAP_PROFILE) instead.
915
916 2009-06-12  Jb Evain  <jbevain@novell.com>
917
918         * rootcontext.cs: add a Platform field.
919         * driver.cs: handle /platform.
920         * codegen.cs: pass the proper flags according to
921         the platform when saving the assembly.
922
923 2009-06-11  Marek Safar  <marek.safar@gmail.com>
924
925         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
926         Add optional parameters grammar.
927
928 2009-06-10  Marek Safar  <marek.safar@gmail.com>
929
930         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
931         driver.cs: Split lang version and metadata version.
932
933 2009-06-10  Marek Safar  <marek.safar@gmail.com>
934
935         * decl.cs: Better overload ctor collision error message.
936
937 2009-06-05  Jb Evain  <jbevain@novell.com>
938
939         * driver.cs (EmbededResource): avoid using an internal method
940         in gmcs to embed manifest resources.
941
942 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
943
944         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
945         the compiler from older mono versions (like moon's bots)
946
947 2009-06-04  Marek Safar  <marek.safar@gmail.com>
948
949         * namespace.cs (LookupTypeReflection): Ignore collisions between
950         forwarded types.
951
952 2009-06-04  Marek Safar  <marek.safar@gmail.com>
953
954         * codegen.cs: Enabled generic type forwarders.
955
956 2009-06-04  Marek Safar  <marek.safar@gmail.com>
957
958         * dmcs.*: Add another version of SRE compiler.
959
960 2009-06-03  Marek Safar  <marek.safar@gmail.com>
961
962         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
963         generic-mcs.cs: Fixed variant type conversions.
964
965 2009-06-02  Marek Safar  <marek.safar@gmail.com>
966
967         A fix for bug #507863
968         * codegen.cs: Fixes a crash on invalid string value attribute.
969
970 2009-06-01  Marek Safar  <marek.safar@gmail.com>
971
972         A fix for bug #508334
973         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
974         cs-parser.jay: Fully import __arglist modifier.
975
976 2009-05-29  Marek Safar  <marek.safar@gmail.com>
977
978         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
979         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
980         actually work with closed generic types.
981
982 2009-05-27  Alan McGovern  <amcgovern@novell.com>
983
984         * class.cs, decl.cs, delegate.cs, parameter.cs: 
985         Fix the build by replacing the use of 'var' with the actual type.
986
987 2009-05-27  Marek Safar  <marek.safar@gmail.com>
988
989         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
990     cs-parser.jay, generic-mcs.cs: Report wrong variant types
991         declarations.
992           
993         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
994         filter.
995
996 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
997                         Marek Safar  <marek.safar@gmail.com>
998
999         A fix for bug #377509
1000         * parameter.cs: Use predefined and not empty name for implicit
1001         setters.
1002
1003 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1004
1005         * class.cs: Don't report wrong warnings for event fields.
1006
1007 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1008
1009         A fix for bug #504667
1010         * class.cs: Check for static class using parent container instead of
1011         parent type.
1012
1013 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1014
1015         A fix for bug #496922
1016         * expression.cs: Always use temporary variable when using object
1017         initializer.
1018
1019 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1020
1021         A fix for bug #495112
1022         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1023         local cache.
1024
1025 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1026
1027         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1028
1029 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1030
1031         * complete.cs: No idea how gonzalo got a null in the list, but
1032         avoid crashing.
1033
1034 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1035
1036         * complete.cs (CompletionElementInitializer): New completion class
1037         to support completing inside a C# 3 element initializer, so this
1038         allows completion for Silverlight situations where it is very
1039         common to do:
1040
1041         new TextBlock () { Fo<TAB>
1042
1043         (CompletionSimpleName): Expose the prefix that was
1044         passed to the simple name.
1045
1046         * cs-parser.jay (object_or_collection_initializer): Add support
1047         for element_initializers.
1048
1049         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1050         special case completion expressions as this method aggressively
1051         collects data before it operates, and errors were being thrown
1052         earlier than we were able to complete.
1053
1054 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1055
1056         * eval.cs: Make getcompletions silent and enable debugging output
1057         if the -v option is passed.
1058
1059         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1060         Consider looking up the namespace that matches the prefix being
1061         used. 
1062
1063         This is part of the support for allowing completions like:
1064         `System.Co<TAB>' to complete to System.Console.
1065
1066         * complete.cs (CompletionSimpleName.AppendResults): Make this
1067         routine reusable.
1068
1069 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1070
1071         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1072         COMPLETE_COMPLETION as internal.
1073
1074 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1075
1076         * complete.cs: Include namespace resolution in simple names as
1077         well as global types and types in the using scope in the
1078         resolution. 
1079
1080         * namespace.cs: Supporting infrastrcture to provide completions
1081         based on the current using scope. 
1082
1083         * eval.cs: Introduce an entry point that allows for initialization
1084         to return a list of the files passed on the command line.
1085
1086 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1087
1088         A fix for bug #494243
1089         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1090
1091 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1092
1093         A fix for bug #493887
1094         * statement.cs: Don't skip string multi-section with default or
1095         null label when populating string hashtable.
1096
1097 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1098
1099         A fix for bug #492329
1100         * expression.cs (New): Load variable when assigning type parameter
1101         to ref variable.
1102
1103 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1104
1105         A fix for bug #488960
1106         * decl.cs: Compare MVAR types using non-null values.
1107
1108 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1109
1110         * typemanager.cs, expression.cs: Removed unused nullable checks.
1111
1112 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1113
1114         * *.cs: Removed some gmcs conditionals.
1115
1116 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1117
1118         * generic.cs, support.cs: Moved generics stuff out of support.cs
1119
1120 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1121
1122         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1123         DeclaringType.
1124
1125 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1126
1127         * attribute.cs: Consider all members for error reporting when
1128         checking named arguments.
1129
1130 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1131
1132         A fix for bug #487625
1133         * namespace.cs: Use a warning for all predefined type conflicts.
1134
1135 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1136
1137         A fix for bug #485706
1138         * statement.cs: Explicitly type catch type argument to pass verifier
1139         check.
1140
1141 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1142
1143         Initial support to provide code completion facilities to consumers
1144         of the evaluator API.
1145         
1146         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1147         support the completion engine.   When we reach the end of the
1148         input stream instead of returning EOF, when this flag is true the
1149         tokenizer instead produces:
1150
1151                 One GENERATE_COMPLETION token: this token then must be
1152                 handled in the grammar at every point where the user
1153                 would likely request a completion.
1154
1155                 As many COMPLETE_COMPLETION tokens as necessary.   These
1156                 tokens are generated to assist the parser in unwinding and
1157                 producing a valid parse tree.    
1158
1159         The parser rules do not have to be perfect, the parser needs to be
1160         augmented with judicious use of GENERATE_COMPLETION tokens to
1161         improve the areas where we can provide completion and the parser
1162         needs to add support for COMPLETE_COMPLETION tokens in productions
1163         to make them work.
1164
1165         It is common to not have enough support for COMPLETE_COMPLETION
1166         under certain rules and that even if we generated the
1167         GENERATE_COMPLETION token that the resulting tree will be invalid
1168         due to the missing rules that support COMPLETE_COMPLETION.
1169
1170         The final EOF token is produced by having the parser notify the
1171         tokenizer when it reaches the root production that the next token
1172         should be EOF.
1173
1174         * support.cs (CompletionResult): New Exception.   This exception
1175         is thrown to return the completion results when one of the special
1176         completion expressions is reached.
1177
1178         This exception is thrown by the completing ExpressionStatements
1179         classes that live in complete.cs
1180
1181         * complete.cs (CompletingExpression): a new base class for
1182         completing expressions.   This derives from the
1183         ExpressionStatement class and not from Expression as it allows
1184         completion to happen not only where expressions are expected in
1185         the grammar, but also where statements are expected.
1186
1187         (CompletionSimpleName): A new class used to provide completions
1188         for SimpleNames.     This currently only resolves to local
1189         variables from the evaluator context (GetVars call).
1190
1191         (CompletionMemberAccess): Implements support for completing member
1192         access patterns. 
1193
1194         * cs-parser.jay: Add support for completion in a few places. 
1195
1196         * eval.cs (GetCompletions): New public API for the evaluator that
1197         returns a list of possible completions given the input.   The
1198         return value is an array of completions 
1199
1200         * anonymous.cs (Compatible): If the exception thrown from the
1201         resolved expression is a CompletionResult exception let that one
1202         through instead of printing a diagnostic error in the try/catch. 
1203 <       
1204 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1205
1206         * 
1207
1208         * driver.cs (Main): Use Environment.Exit to quit quickly and
1209         prevent the compiler from doing the usual wait for helper thread
1210         to terminate.  
1211
1212         This is to prevent a slowdown that was reported by Gonzalo on
1213         ASP.NET 
1214
1215 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1216
1217         * ecore.cs: Load build-in types directly instead of accessing
1218         an internal field.
1219
1220 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1221
1222         * ecore.cs: Always use unbox.any when available.
1223
1224 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1225
1226         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1227
1228 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1229
1230         * generic.cs: Removed obsolete version of type inference.
1231
1232 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1233
1234         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1235         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1236         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1237         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1238
1239 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1240
1241         A fix for bug #482996
1242         * anonymous.cs: Make sure we are not infering return type when
1243         checking type compatibility.
1244
1245 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1246
1247         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
1248         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
1249         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
1250         attributes in their own structure. Needed when accessing their
1251         properties before they are resolved.
1252
1253 2009-03-09  Marek Safar  <marek.safar@gmail.com>
1254
1255         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
1256         hashtable (~10x faster).
1257         
1258         * driver.cs: Removed wrong Reset.
1259
1260 2009-03-08  Marek Safar  <marek.safar@gmail.com>
1261
1262         * class.cs: Use correct common base type for unmanaged delayed
1263         check.
1264
1265         * rootcontext.cs: Wrap unhandled exception.
1266
1267 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
1268
1269         Make SeekableStreamReader self-tuning and arbitrarily seekable
1270         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
1271         the buffer.
1272         (SeekableStreamReader.Position.set): Use it.  Simplify logic
1273         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
1274         buffer size when the stream needs to be re-read from the beginning.
1275
1276 2009-03-05  Marek Safar  <marek.safar@gmail.com>
1277
1278         A fix for bug #480100
1279         * parameter.cs: A parameter is not hoisted when used directly as ET.
1280
1281 2009-03-04  Marek Safar  <marek.safar@gmail.com>
1282
1283         * statement.cs: Fixed an issue when using variable is of interface
1284         type.
1285
1286 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1287
1288         A fix for bug #480319
1289         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
1290
1291 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1292
1293         A fix for bug #480867
1294         * typemanager.cs, expression.cs, ecore.cs: Changed method group
1295         expression to have no valid type.
1296
1297 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1298
1299         A fix for bug #481258
1300         * class.cs: Set extension method flag in partial container.
1301
1302 2009-03-03  Marek Safar  <marek.safar@gmail.com>
1303
1304         * statement.cs, typemanager.cs: Use expression for StringEmitter.
1305         
1306         * attribute.cs: Add sanity check.
1307
1308 2009-02-27  Marek Safar  <marek.safar@gmail.com>
1309
1310         * class.cs: Add external constructor error.
1311
1312 2009-02-26  Marek Safar  <marek.safar@gmail.com>
1313
1314         A fix for bug #475354
1315         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
1316         correctly user defined nullable equality operators.
1317
1318 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1319
1320         A fix for bug #479532
1321         * expression.cs: Implement NewInitialize::AddressOf.
1322
1323 2009-02-25  Marek Safar  <marek.safar@gmail.com>
1324
1325         A fix for bug #413633
1326         * expression.cs: Iterate all base class-constraint types.
1327
1328 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1329
1330         A fix for bug #479209
1331         * literal.cs: Mutate null underlying type.
1332
1333 2009-02-24  Marek Safar  <marek.safar@gmail.com>
1334
1335         A fix for bug #476295
1336         * convert.cs: Avoid wrapping implicitly convertible reference type.
1337
1338 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1339
1340         * iterators.cs: Create MemberName correctly.
1341
1342 2009-02-23  Marek Safar  <marek.safar@gmail.com>
1343
1344         A fix for bug #478655
1345         * literal.cs: Check also underlying null type conversion.
1346
1347 2009-02-21  Marek Safar  <marek.safar@gmail.com>
1348
1349         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
1350
1351 2009-02-20  Marek Safar  <marek.safar@gmail.com>
1352
1353         A fix for bug #477447
1354         * statement.cs: Add reference to correct parent storey when this
1355         is accessible from deep children storey (more than 1 level).
1356
1357 2009-02-19  Marek Safar  <marek.safar@gmail.com>
1358
1359         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
1360         * class.cs: Define base type members before setting up member cache.
1361
1362 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1363
1364         A fix for bug #477378
1365         * nullable.cs, expression.cs, statement.cs: More precise null type
1366         sanity checks.
1367
1368 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1369
1370         A fix for bug #472805
1371         * typemanager.cs, namespace.cs: Import only visible extension method
1372         types.
1373
1374 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1375
1376         A fix for bug #476895
1377         * attribute.cs: Use correct resolve context for attribute type.
1378
1379 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1380
1381         A fix for bug #476266
1382         * anonymous.cs: Mutate multi-dimensional arrays.
1383
1384 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1385
1386         A fix for bug #476400
1387         * statement.cs, expression.cs: Removed wrong Dispose optimization.
1388
1389 2009-02-18  Marek Safar  <marek.safar@gmail.com>
1390
1391         A fix for bug #476811
1392         * generics.cs: Fixed null-literal check.
1393
1394 2009-02-17  Marek Safar  <marek.safar@gmail.com>
1395
1396         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
1397         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
1398         messing with static variables.
1399
1400 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1401
1402         A fix for bug #475965
1403         * generics.cs: Check generic parameter type after extracting from
1404         Expression<T>.
1405
1406 2009-02-16  Marek Safar  <marek.safar@gmail.com>
1407
1408         A fix for bug #475823
1409         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
1410         typed-null support.
1411
1412 2009-02-14  Marek Safar  <marek.safar@gmail.com>
1413
1414         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
1415         Simplified event field definition using backing field and not
1416         field builder directly.
1417
1418         * expression.cs (EmitLdArg): Optimize fast paths.
1419
1420 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1421
1422         A fix for bug #475327
1423         * expression.cs (ArrayCreation): Don't mutate values optimized away.
1424
1425 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1426
1427         A fix for bug #475342
1428         * cs-parser.jay: Using 'super' instead of 'base' to call base
1429         constructor crashes compiler.
1430
1431 2009-02-13  Marek Safar  <marek.safar@gmail.com>
1432
1433         A fix for bug #475354
1434         * expression.cs (Constantify): Add nullable types.
1435         
1436         * const.cs (EmitDecimalConstant): Avoid explicit cast.
1437
1438 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1439
1440         A fix for bug #475246
1441         * expression.cs: More broken flowanalysis hacking needed.
1442
1443 2009-02-12  Marek Safar  <marek.safar@gmail.com>
1444
1445         * attribute.cs: Compare only ref/out array modifiers. 
1446
1447 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1448
1449         * statement.cs: Use member cache when looking for foreach members.
1450
1451 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1452
1453         * expression.cs: Don't expose internal initializer types.
1454         
1455         * statement.cs: Check also explicit conversions for goto case.
1456
1457 2009-02-11  Marek Safar  <marek.safar@gmail.com>
1458
1459         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
1460
1461 2009-02-10  Marek Safar  <marek.safar@gmail.com>
1462
1463         * *.cs: Replace null-type with NullLiteral where appropriate.
1464
1465 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1466
1467         * expression.cs: Initializer of reference argument use temporary
1468         variable to be verifiable.
1469         
1470         * parameter.cs: Share EmitLdArg.
1471
1472 2009-02-09  Marek Safar  <marek.safar@gmail.com>
1473
1474         A fix for bug #473559
1475         * class.cs: Fixed: Not reporting error about nested class with the
1476         same name.
1477
1478 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
1479
1480         Contributed under the MIT/X11 license.
1481
1482         * generic.cs: Added VerifyVariantTypeParameters which performs new
1483         variance verification logic. The old logic, based on the spec, was
1484         wrong because the spec is full of LIES!
1485
1486         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
1487
1488         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
1489
1490         * class.cs:
1491         * ecore.cs: Added calls to the new variance verification logic.
1492
1493         * parameter.cs:
1494         * delegate.cs: Removed calls to the old variance verification logic.
1495
1496 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1497
1498         * delegate.cs: Use cached Invoke method directly.
1499
1500 2009-02-06  Marek Safar  <marek.safar@gmail.com>
1501
1502         * expression.cs: Emit expression tree for hoisted variable access.
1503
1504 2009-02-04  Marek Safar  <marek.safar@gmail.com>
1505
1506         * namespace.cs: Add better extension class check.
1507
1508 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
1509
1510         * generic.cs: Fixed typeo (TypeParameter.Variacne).
1511
1512 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
1513
1514         This patch adds initial generic variance support to the compiler.
1515         It is contributed under the MIT/X11 license.
1516
1517         * typemanager.cs: Modified ImplementsInterface to check variance.
1518         Added VerifyVariantTypeParameters which checks the specified type to see
1519         if it uses a variant type parameter as a type argument (which is not
1520         allowed). Added IsVariantOf which determins if the first type is a
1521         variant of the second. NOTE: This only supports reference types at
1522         the moment to conform with the current level of VM support. When the
1523         VM supports value types, this will follow step.
1524
1525         * generic.cs: Added the Variance enum. Added a Variance property to
1526         TypeParameter and added variance support to definition phase. Added a
1527         Variance property to TypeParameterName. Also check to make sure that
1528         no variant types appear in generic method parameters.
1529
1530         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
1531         keywords if the langversion supports it.
1532
1533         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
1534         that variant types are only used in legal positions. Also added
1535         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
1536         parameters.
1537
1538         * decl.cs: Construct TypeParameter with the variance information.
1539
1540         * convert.cs: Checks variance in ImplicitReferenceConversionExists
1541         and ImplicitConversionStandard.
1542
1543         * rootcontext.cs: Added new "Future" language version.
1544
1545         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
1546         type parameters are not used as type arguments in interface inheritance.
1547         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
1548         parameters are not used as method return types. In MemberBase.
1549         ResolveMemberType, ensure that variant type parameters are not used
1550         as type arguments. Also call VerifyNoVariantTypeParameters on every
1551         set of parameters which are resolved.
1552
1553         * delegate.cs: Modified Delegate.Define to ensure that variant
1554         parameters are not used as type arguments and that a contravariant
1555         parameter is not used as the return type. Also call
1556         VerifyNoVariantTypeParameters on the delegate parameters.
1557
1558         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
1559         to specify generic variance.
1560
1561         * driver.cs: Added support for LanguageVersion.Future in the form of
1562         "-langversion:future".
1563
1564         * generic-mcs.cs: Stubbed out new members in generic.cs.
1565
1566 2009-02-03  Marek Safar  <marek.safar@gmail.com>
1567
1568         * class.cs, generic.cs: Emit type parameter constraints for nested
1569         types.
1570
1571 2009-02-02  Marek Safar  <marek.safar@gmail.com>
1572
1573         A fix for bug #471213
1574         * class.cs: Avoid emitting backing field for abstract event fields.
1575
1576 2009-02-01  Marek Safar  <marek.safar@gmail.com>
1577
1578         A fix for bug #359731
1579         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
1580         expressions.
1581
1582 2009-01-30  Marek Safar  <marek.safar@gmail.com>
1583
1584         A fix for bug #470767
1585         * statement.cs: Introduced BlockScopeExpression, needed when 
1586         expression tree conversion has to emit scope variables.
1587
1588 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1589
1590         * class.cs: Remove duplicate CallingConvention.
1591
1592 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1593
1594         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
1595         when I finally found the right naming convention.
1596
1597 2009-01-29  Marek Safar  <marek.safar@gmail.com>
1598
1599         * cs-tokenizer.cs: Put back different open parens optimization.
1600
1601 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1602
1603         A fix for bug #470227
1604         * cs-tokenizer.cs: Remove too agressive parser optimization.
1605
1606 2009-01-28  Marek Safar  <marek.safar@gmail.com>
1607
1608         A fix for bug #324319
1609         * class.cs: Remove too early base type resolve.
1610
1611 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1612
1613         A fix for bug #324319
1614         * ecore.cs: Explicitly type null when assigning to type argument to
1615         make pass verifier check.
1616
1617 2009-01-27  Marek Safar  <marek.safar@gmail.com>
1618
1619         * anonymous.cs: Fixed recent regression when initializing captured 
1620         this.
1621
1622 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1623
1624         A fix for bug #469019
1625         * anonymous.cs: Use all parent type parameters when instantiating
1626         nested generic storey.
1627
1628 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1629
1630         * expression.cs: Check for null instance methodgroup expression.
1631
1632 2009-01-26  Marek Safar  <marek.safar@gmail.com>
1633
1634         A fix for bug #469244
1635         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
1636         instance inside a conditional expression.
1637
1638 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1639
1640         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
1641         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
1642         GetElementType and HasElementType. IsValueType clean up.
1643
1644 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1645
1646         * nullable.cs: Use common EmitCall.
1647         
1648         * expression.cs: Emit constraint. for virtual calls only.
1649
1650 2009-01-23  Marek Safar  <marek.safar@gmail.com>
1651
1652         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
1653         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
1654         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
1655         checks.
1656
1657 2009-01-22  Jb Evain  <jbevain@novell.com>
1658
1659         * anonymous.cs: make anonymous types' ToString implementation
1660         match what csc outputs.
1661
1662 2009-01-21  Marek Safar  <marek.safar@gmail.com>
1663
1664         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
1665         up.
1666
1667 2009-01-17  Marek Safar  <marek.safar@gmail.com>
1668
1669         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
1670         verifier checks.
1671
1672 2009-01-16  Marek Safar  <marek.safar@gmail.com>
1673
1674         * nullable.cs (LiftedBinaryOperator): Check for all possible null
1675         expressions.
1676
1677 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1678
1679         A fix for bug #466634
1680         * statement.cs: Add reference for nested storey when only this
1681         is captured.
1682
1683 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1684
1685         A fix for bug #466474
1686         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
1687         was specified.
1688
1689 2009-01-15  Marek Safar  <marek.safar@gmail.com>
1690
1691         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
1692         Fixed nested stories parent referencing process. Also fixes #463985.
1693
1694 2009-01-06  Marek Safar  <marek.safar@gmail.com>
1695
1696         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
1697         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
1698         implementation. Also fixes #463108.
1699
1700 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1701
1702         A fix for bug #416109
1703         * decl.cs: Issue correct CLSAttribute warning location.
1704
1705 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1706
1707         A fix for bug #456775
1708         * attribute.cs: Use attribute owner scope when resolving attribute
1709         arguments.
1710
1711 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1712
1713         A fix for bug #457257
1714         * decl.cs: Fixed incorrect member declaring type comparison.
1715
1716 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1717
1718         A fix for bug #460896
1719         * driver.cs: Handle /RES resources as embeddable.
1720
1721 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1722
1723         A fix for bug #462515
1724         * ecore.cs: Report inacessible members upwards.
1725
1726 2009-01-05  Marek Safar  <marek.safar@gmail.com>
1727
1728         A fix for bug #463190, #463192
1729         * decl.cs, namespace.cs: Also import internal extension classes.
1730
1731 2009-01-04  Marek Safar  <marek.safar@gmail.com>
1732
1733         A fix for bug #463415
1734         * generic.cs: Use right index for RemoveDependentTypes.
1735
1736 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1737
1738         A fix for bug #463196
1739         * expression.cs: Fixed enum to null comparison.
1740
1741 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1742
1743         A fix for bug #463121
1744         * nullable.cs: Fixed nullable user equality operator comparison.
1745
1746 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1747
1748         A fix for bug #462950
1749         * class.cs, decl.cs: Use full explicit name when defining automatic
1750         property backing field.
1751
1752 2009-01-02  Marek Safar  <marek.safar@gmail.com>
1753
1754         A fix for bug #462592
1755         * pending.cs: Emit type arguments for generic proxy method.
1756
1757 2008-12-30  Marek Safar  <marek.safar@gmail.com>
1758
1759         * expression.cs (As): Mutate all type arguments.
1760
1761 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1762
1763         A fix for bug #462622
1764         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
1765         context.
1766
1767 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1768
1769         A fix for bug #450782
1770         * ecore.cs: Consider more variables of form V.I to be fixed.
1771
1772 2008-12-29  Marek Safar  <marek.safar@gmail.com>
1773
1774         A fix for bug #460712
1775         * typemanager.cs: Core types could be imported.
1776
1777 2008-12-28  Marek Safar  <marek.safar@gmail.com>
1778
1779         A fix for bugs #460847, #460772, #458049, #457339, #447807
1780         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
1781         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
1782         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
1783         user lambdas used inside query clauses.
1784
1785 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1786
1787         A fix for bug #460229
1788         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
1789
1790 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1791
1792         A fix for bug #459952
1793         * decl.cs, namespace.cs: Use common CheckAccessLevel.
1794
1795 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1796
1797         A fix for bug #459630
1798         * convert.cs: Enum to valuetype conversion is not allowed.
1799
1800 2008-12-18  Marek Safar  <marek.safar@gmail.com>
1801
1802         A fix for bug #457087
1803         * generic.cs: Don't crash when constraint comes from type
1804         declaration.
1805
1806 2008-12-16  Marek Safar  <marek.safar@gmail.com>
1807
1808         A fix for bug #459221
1809         * anonymous.cs, statement.cs: Delay only captured this
1810         initialization.
1811
1812 2008-12-12  Marek Safar  <marek.safar@gmail.com>
1813
1814         A fix for bug #457489
1815         * anonymous.cs, statement.cs: Split anonymous storey instantiation
1816         and initialization to capture scope initializers correctly.
1817
1818 2008-12-11  Marek Safar  <marek.safar@gmail.com>
1819
1820         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
1821         ParameterReference refactoring.
1822
1823 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1824
1825         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
1826         to be imported from any assembly.
1827
1828 2008-12-03  Marek Safar  <marek.safar@gmail.com>
1829
1830         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
1831         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
1832         from anonymous method and lambda expression.
1833
1834 2008-12-01  Marek Safar  <marek.safar@gmail.com>
1835
1836         A fix for bug #448560
1837         * expression.cs (As): Box any generic type arguments to be
1838         verifiable.
1839
1840 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1841
1842         Add tripwire for implicit conversion bugs
1843         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
1844         for CS1501 error.
1845         (MethodGroupExpr.OverloadResolve): Add sanity check between
1846         IsApplicable and VerifyArgumentsCompat.
1847         (VerifyArgumentsCompat): Report CS1501 where appropriate.
1848
1849 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
1850
1851         Fix build break in System.Data_test
1852         * convert.cs (ImplicitConversionExists): Move NullLiteral
1853         conversions ...
1854         (ImplicitStandardConversionExists): ... here.
1855
1856 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1857
1858         * literal.cs: Emit correctly explicit null to nullable cast.
1859
1860 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1861
1862         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
1863         resolve.
1864
1865 2008-11-28  Marek Safar  <marek.safar@gmail.com>
1866
1867         A fix for bug #449005
1868         * convert.cs, nullable.cs: Use only one implicit nullable
1869         conversion.
1870
1871 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1872
1873         * convert.cs, literal.cs: More Convert cleanup is needed.
1874
1875 2008-11-27  Marek Safar  <marek.safar@gmail.com>
1876
1877         * decl.cs, class.cs: Fixed misleading error message.
1878
1879 2008-11-26  Marek Safar  <marek.safar@gmail.com>
1880
1881         A fix for bug #449005
1882         * nullable.cs (EmitEquality): Disable optimization for user operator
1883         operands.
1884
1885 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1886
1887         A fix for bug #447027
1888         * anonymous.cs (HoistedVariable): Cache also outer access to deal
1889         with context variables stored as expression instances.
1890
1891 2008-11-25  Marek Safar  <marek.safar@gmail.com>
1892
1893         A fix for bug #447027
1894         * delegate.cs: Fixed delegate VerifyMethod logic.
1895
1896 2008-11-24  Marek Safar  <marek.safar@gmail.com>
1897
1898         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
1899         but not verifiable.
1900
1901 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1902
1903         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
1904         member type resolve to follow normal flow, instead of random
1905         property access.
1906
1907 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1908
1909         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
1910         type.
1911
1912 2008-11-21  Marek Safar  <marek.safar@gmail.com>
1913
1914         * const.cs: Emit decimal array constant as literal.
1915
1916 2008-11-20  Marek Safar  <marek.safar@gmail.com>
1917
1918         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
1919
1920 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1921
1922         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
1923         into real property (saves 8 MB for corlib compilation).
1924
1925 2008-11-19  Marek Safar  <marek.safar@gmail.com>
1926
1927         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
1928         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
1929         generic-mcs.cs: Small cleanup of TypeArguments.
1930
1931 2008-11-18  Marek Safar  <marek.safar@gmail.com>
1932
1933         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
1934         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
1935         of ConstructedType expression, renamed to GenericTypeExpr.
1936
1937 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1938
1939         A fix for bug #445303
1940         * location.cs (IsConditionalDefined): Handle undefined global
1941         defines.
1942
1943 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1944
1945         A fix for bug #444678
1946         * expression.cs (TryReduceConstant): Always create new constant
1947         instance.
1948
1949 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1950
1951         A fix for bug #444673
1952         * ecore.cs: Ignore open generic types when used as generic type
1953         instance fields.
1954
1955 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1956
1957         A fix for bug #445458
1958         * expression.cs, cs-parser.jay: Don't crash when an expression
1959         statement is null.
1960
1961 2008-11-17  Marek Safar  <marek.safar@gmail.com>
1962
1963         A fix for bug #445464
1964         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
1965         inside unbound type.
1966
1967 2008-11-14  Jb Evain  <jbevain@novell.com>
1968
1969         * driver.cs: ignore empty -nowarn argument such as
1970         the one in -nowarn:12,13,,.
1971
1972 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1973
1974         A fix for bug #444271
1975         * anonymous.cs: Rescan parent storeys when best candidate was
1976         undone.
1977
1978 2008-11-13  Marek Safar  <marek.safar@gmail.com>
1979
1980         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
1981         useless UnboundTypeExpression.
1982         
1983         * attribute.cs: Do check obsolete attribute on generic types.
1984
1985 2008-11-12  Marek Safar  <marek.safar@gmail.com>
1986
1987         A fix for bugs #425680, #400139
1988         * ecore.cs, expression.cs: Trying to do some almost_matched_members
1989         refactoring.
1990
1991 2008-11-11  Marek Safar  <marek.safar@gmail.com>
1992
1993         A fix for bug #435747
1994         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
1995         compound value types assignment. Few micro optimizations added.
1996
1997 2008-11-10  Marek Safar  <marek.safar@gmail.com>
1998
1999         A fix for bug #442610
2000         * anonymous.cs (MutateConstructor): More SRE hacking.
2001
2002 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2003
2004         A fix for bug #442579
2005         * ecore.cs: Also initialize expanded form of a method with 1 params
2006         parameter.
2007
2008 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2009
2010         * expression.cs (UnaryMutator): Do early l-side check.
2011
2012 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2013
2014         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2015         Init, otherwise we would crash later on when checking for friend
2016         assemblies. 
2017
2018         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2019         Otherwise we never get any meaningful information as to what
2020         failed. 
2021
2022 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2023
2024         A fix for bug #436318
2025         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2026
2027 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2028
2029         * namespace.cs: Turns out that it was a really bad idea to hide
2030         the errors for namespaces not found here in eval mode.    
2031
2032         * eval.cs: When we process using clauses, only enter those into
2033         the list of valid using clauses after they have been validated.   
2034
2035         The above change gives the proper semantics: it does not
2036         senselessly report the same errors with broken using statements by
2037         never storing them in the first place when they are invalid.
2038
2039 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2040
2041         A fix for bug #421839
2042         * cs-parser.jay: Remove expression from coalesce rule to force lower
2043         priority than the assignment operator.
2044
2045 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2046
2047         A fix for bug #437875
2048         * nullable.cs: Compile correctly method group operand used with null
2049         coalescing operator.
2050
2051 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2052
2053         A fix for bug #434589
2054         * expression.cs (Binary): Ignore lifted conversions when at least
2055         one operand is of reference type.
2056
2057 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2058
2059         * cs-parser.jay: Better syntax error report.
2060
2061 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2062
2063         A fix for bug #436792
2064         * cs-parser.jay: Use GetLocation to access location.
2065
2066 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2067
2068         A fix for bug #440774
2069         * cs-parser.jay: Also set current_array_type when parsing local
2070         variables types.
2071
2072 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2073
2074         A fix for bug #440785
2075         * expression.cs (As): Don't resolve self modifing expression
2076         multiple times.
2077
2078 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2079
2080         A fix for bug #439447
2081         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2082
2083 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2084
2085         A fix for bug #437571
2086         * cs-parser.jay: Fixes internal error for invalid expression
2087         statements.
2088
2089 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2090
2091         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2092
2093 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2094
2095         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2096
2097 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2098
2099         * cs-tokenizer.cs: More precise cast parsing.
2100
2101 2008-10-16  Martin Baulig  <martin@ximian.com>
2102
2103         * anonymous.cs (AnonymousMethodStorey): Put back the
2104         `hoisted_locals' hashtable and use it in EmitType().
2105
2106 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2107
2108         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2109         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2110         ~5MB for corlib.
2111
2112 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2113
2114         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2115
2116 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2117
2118         * statement.cs: Mutate scope initializers.
2119
2120 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2121
2122         * expression.cs: Use typeless value for This constant.
2123         
2124         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2125
2126 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2127
2128         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2129         tokenizer.
2130
2131 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2132
2133         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2134         type to type cast.
2135
2136 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2137
2138         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2139         parser and tokenizer. Fixes many ambiguities including #433258.
2140
2141 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2142
2143         * cs-parser.jay: Fixed missing accessor recovery.
2144
2145 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2146
2147         A fix for bug #433701
2148         * expression.cs: Better error message.
2149
2150 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2151
2152         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2153         
2154         * Makefile: Disabled unused debug symbols.
2155
2156         Also fixes: #320556, #321097, #321656, #321876, #351316
2157
2158 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2159
2160         * eval.cs: rename "<interactive>" to "{interactive}", to work
2161         around a requirement in the compiler that this be a valid
2162         filename, and in Windows it is not (433886).
2163
2164 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2165
2166         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2167
2168 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2169
2170         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2171         cs-parser.jay: Generic type declaration and type arguments cleanup.
2172
2173 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2174
2175         * cs-parser.jay: Allow parsing weird array creation construct.
2176
2177 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2178
2179         * cs-parser.jay: Conflicts reduction.
2180
2181 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2182
2183         * cs-parser.jay: Conflicts reduction.
2184
2185 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2186
2187         Fix #398325
2188         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2189         property.  Add a 'count' hint about the use of the shared vector.
2190         Ensure that we don't leak out dirty bits.
2191         (UsageVector.MergeChild): Throw away information about variables
2192         in child vectors.
2193         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2194
2195 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2196
2197         A fix for bug #431746
2198         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2199         parameters when iterator is created.
2200
2201 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2202
2203         A fix for bug #431827
2204         * expression.cs: Fixed right based pointer arithmetic operations
2205         emit.
2206
2207 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2208
2209         A fix for bug #353779
2210         * assign.cs, expression.cs: Fixed compound assignment conversions.
2211
2212 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2213
2214         A fix for bug #375262
2215         * statement.cs: Refactor ArrayForeach to be usable with string
2216         indexer. Optimized single dimentional arrays foreach.
2217
2218 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2219
2220         A fix for bug #431255
2221         * anonymous.cs, expression.cs: Removed broken optimization.
2222
2223 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2224
2225         * anonymous.cs: Use full type parameters of parent generic
2226         containers. Removed unnecessary AddParentStoreyReference call.
2227
2228 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2229
2230         A fix for bug #324702
2231         * class.cs: Use better shorter names for explicit interface member
2232         implementations.
2233
2234         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2235
2236 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2237         
2238         * expression.cs: Use new interface to check fixed expression.
2239
2240 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2241
2242         A fix for bug #421101
2243         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2244         interface to check for fixed fixed-buffers.
2245
2246 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2247
2248         A fix for bug #429264
2249         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
2250         
2251         * delegate.cs: Removed unnecessary casts.
2252
2253 2008-09-30  Marek Safar  <marek.safar@gmail.com>
2254
2255         A fix for bug #352151
2256         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
2257         class.cs: Fixed already defined explicit interface members check.
2258
2259 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
2260
2261         cs-tokenizer.cs: Fix typo.
2262
2263 2008-09-28  Miguel de Icaza  <miguel@novell.com>
2264
2265         * eval.cs (InteractiveBase): The quit command now just sets a
2266         flag, instead of calling Environment.Exit(), it is milder on
2267         embedded hosts. 
2268
2269         CompiledMethod is now in Mono.CSharp, not nested inside
2270         the Evaluator, it was inconvenient to use.
2271
2272 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2273
2274         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
2275         code to be invoked without having to reparse.
2276
2277 2008-09-27  Miguel de Icaza  <miguel@novell.com>
2278
2279         * ecore.cs: The recent changes to FieldExpr broke this as well.
2280         Fixes LINQ queries in the interactive shell.
2281
2282         * Multiple files: indentation fixing for the Mono coding
2283         guidelines for the switch statement.
2284
2285         * eval.cs: Make the Evaluator API thread safe.
2286
2287 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2288
2289         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
2290         constructor parsing.
2291
2292 2008-09-26  Marek Safar  <marek.safar@gmail.com>
2293
2294         A fix for bug #325326
2295         * statement.cs: Check possible mistaken empty statement using
2296         explicit blocks only.
2297
2298 2008-09-25  Miguel de Icaza  <miguel@novell.com>
2299
2300         * eval.cs (LoadAssembly, ReferenceAssembly): Call
2301         RootNamespace.ComputeNamespaces to update the internal list of
2302         namespaces, this is no longer done for us.
2303
2304         (InteractiveBase): Use the Evaluator APIs instead of calling into
2305         Driver directly
2306
2307 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2308
2309         A fix for bug #429264
2310         * expression.cs: Missing mutator for access to multidimensional
2311         arrays.
2312
2313 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2314
2315         * class.cs, statement: Emit DebuggerHidden attribute for iterator
2316         entry wrapper.
2317         
2318         * driver.cs: Missing input argument check.
2319
2320 2008-09-25  Marek Safar  <marek.safar@gmail.com>
2321
2322         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
2323         expression.cs, statement.cs, rootcontext.cs, class.cs, 
2324         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
2325         DefineMembers.
2326
2327 2008-09-24  Miguel de Icaza  <miguel@novell.com>
2328
2329         * ecore.cs (FieldExpr): Only initialize eclass when we return a
2330         fully constructed FieldExpr, fixes the regression introduced in
2331         the last commit.
2332         
2333         * ecore.cs, expression.cs: Plug back the eclass initialization as
2334         otherwise it regresses `csharp'. 
2335
2336 2008-09-24  Marek Safar  <marek.safar@gmail.com>
2337
2338         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
2339         ecore.cs, attribute.cs: Moved obsolete method checks from emit
2340         phase to resolve phase. It resolves problems with expression trees
2341         and fixes bugs #323796, #325156.
2342
2343 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2344
2345         * codegen.cs: Report better error when symbol writer is missing.
2346
2347 2008-09-23  Marek Safar  <marek.safar@gmail.com>
2348
2349         * codegen.cs: Set .NET symbol writer.
2350         
2351         * decl.cs: Guard against null generic arguments.
2352         
2353         * report.cs: Don't report exactly same additional details.
2354
2355 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2356
2357         A fix for bug #324917
2358         * cs-parser.jay: Add missing multidimensional non-expression type
2359         ranks.
2360         
2361 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2362
2363         A fix for bug #428191
2364         * anonymous.cs: Create an outer generic fields also for non-storey
2365         anonymous methods.
2366
2367 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2368
2369         A fix for bug #378294
2370         * class.cs: Make fixed size buffers gmcs feature only.
2371
2372 2008-09-22  Marek Safar  <marek.safar@gmail.com>
2373
2374         A fix for bug #355622, #324993
2375         * assign.cs, const.cs, class.cs: Create new EmitContext for each
2376         field initializer.
2377
2378 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2379
2380         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
2381         error reporting.
2382
2383 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2384
2385         A fix for bug #416110
2386         * generic.cs: Struct constraint results in default ctor and
2387         ValueType base type constraint to be set.
2388
2389 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2390
2391         A fix for bug #423791
2392         * generic.cs: Fixed params output type type-inference.
2393
2394 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2395
2396         * cs-parser.jay, expression.cs: Fixed few expression crashes.
2397         
2398 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2399
2400         * cs-tokenizer.cs: Don't break on extra partial modifier.
2401
2402 2008-09-19  Marek Safar  <marek.safar@gmail.com>
2403
2404         A fix for bug #427592
2405         * generic.cs: Use common parameter resolve method.
2406
2407 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2408
2409         A fix for bug #414758
2410         * expression.cs, ecore.cs: Fixed crash when accessing non-static
2411         property.
2412
2413 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2414
2415         * driver.cs, namespace.cs: Read types and namespaces after all
2416         requested assemblies are loaded, fixes issues with System.Core
2417         auto-reference, and #419888.
2418
2419 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2420
2421         A fix for bug #417705
2422         * cs-parser.jay: Fixed as/is operator expression split.
2423
2424 2008-09-18  Marek Safar  <marek.safar@gmail.com>
2425
2426         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
2427         Fixed expression tree representation of empty new expression and
2428         new initializer expression.
2429
2430 2008-09-18  Miguel de Icaza  <miguel@novell.com>
2431
2432         * eval.cs: Remove warning, keep reference to driver around.
2433
2434         * Hide fields that do not need to be public.
2435
2436 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2437
2438         A fix for bug #426385
2439         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
2440         conversion for array elements.
2441
2442 2008-09-17  Marek Safar  <marek.safar@gmail.com>
2443
2444         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
2445         void parsing conflicts.
2446
2447 2008-09-15  Marek Safar  <marek.safar@gmail.com>
2448
2449         A fix for bug #425601
2450         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
2451         System.Core only when there is no custom ExtensionAttribute
2452         implementation.
2453
2454 2008-09-15  Miguel de Icaza  <miguel@novell.com>
2455
2456         * namespace.cs: Do not report CS0246 (name
2457
2458 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2459
2460         A fix for bug #425669
2461         * generic.cs: Don't cache generic static anonymous method 
2462         containers.
2463
2464 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2465
2466         * generic.cs, class.cs, delegate.cs: Check recursive inherited
2467         conflicting constraints.
2468
2469 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
2470
2471         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
2472         mcs too.
2473
2474 2008-09-12  Marek Safar  <marek.safar@gmail.com>
2475
2476         * literal.cs, convert.cs, expression.cs, statement.cs: More null
2477         to null pointer conversion fixes.
2478
2479 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2480
2481         * cs-parser.jay, expression.cs: An implicitly typed local variable
2482         declarator cannot use an array initializer.
2483
2484 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2485
2486         * cs-parser.jay: Reduced number of printed tokens, add sorting.
2487
2488 2008-09-11  Marek Safar  <marek.safar@gmail.com>
2489
2490         * generic.cs (InflatedConstraints): Don't crash when constraints
2491         are different.
2492         
2493         * cs-parser.jay: const_declarator is a block.
2494
2495         * constant.cs: Check for not allowed NaN conversions.
2496
2497 2008-09-10  Miguel de Icaza  <miguel@novell.com>
2498
2499         * driver.cs: Drop --shell argument, the compiler is no longer a
2500         REPL. 
2501
2502         * eval.cs: Move most of the code that deals with evaluation into
2503         this file and document the public API from repl.cs
2504
2505         * repl.cs: Remove from here.
2506         
2507 2008-09-10  Marek Safar  <marek.safar@gmail.com>
2508
2509         A fix for bug #424684
2510         * generic.cs: Generic class constraints must come first.
2511
2512 2008-09-09  Miguel de Icaza  <miguel@novell.com>
2513
2514         * cs-parser.jay: Improve error reporting for syntax errors in
2515         statements and expressions, we now report the expected tokens
2516         instead of reporting the useless "; expected".
2517
2518         Drop the strings from the token declaration, it turns out that
2519         they did not do what I thought they did.  Instead they were adding
2520         two sets of tokens to the tables.
2521
2522 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2523
2524         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
2525         delegate.cs: Share special type check.
2526
2527 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2528
2529         A fix for bug #423981
2530         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
2531
2532 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2533
2534         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
2535         ConvertImplicitly.
2536
2537 2008-09-09  Marek Safar  <marek.safar@gmail.com>
2538
2539         A fix for bugs: #324750, #335946
2540         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
2541         lookup rule to determine ?-based tokens.
2542
2543 2008-09-08  Miguel de Icaza  <miguel@novell.com>
2544
2545         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
2546         expressions (like event adding or removing) end up here, so we
2547         need to treat those as statements.
2548
2549         Add LoadAssembly method.
2550
2551 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2552
2553         * repl.cs: Add Time method.
2554
2555 2008-09-05  Marek Safar  <marek.safar@gmail.com>
2556
2557         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
2558
2559 2008-09-05  Miguel de Icaza  <miguel@novell.com>
2560
2561         * repl.cs: Add workaround for old compilers.
2562
2563 2008-09-04  Jb Evain  <jbevain@novell.com>
2564
2565         * repl.cs (PrettyPrint): pretty print everything that
2566         implements IDictionary, as well as IEnumerables. Also,
2567         add a quit helper property.
2568
2569 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2570
2571         * constant.cs: Better error reporting for decimal literals.
2572         
2573         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
2574         field attributes.
2575         
2576 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2577                         Miguel de Icaza  <miguel@novell.com>
2578
2579         A fix for bug #422951
2580         * assign.cs (Assign.DoResolve): Perform the type conversions
2581         checks before we attempt to initialize `New' initializers. 
2582
2583 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2584
2585         A fix for bug #422853
2586         * delegate.cs (DelegateCreation): Add special handling for
2587         EmptyExpression.Null instance expression which is just another
2588         hack for undecided member instance exression.
2589
2590 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2591
2592         * expression.cs, ecore.cs: Emit full expression tree for reduced
2593         binary expressions.
2594
2595 2008-09-04  Marek Safar  <marek.safar@gmail.com>
2596
2597         * expression.cs (This): Guard against multi-resolving.
2598         
2599         * ecore.cs, statement.cs (Throw): Simplified.
2600         
2601         * flowanalysis.cs: Also verify event fields.
2602
2603 2008-09-04  Miguel de Icaza  <miguel@novell.com>
2604
2605         * assign.cs (Assign.DoResolve): Perform the type conversions
2606         checks before we attempt to initialize `New' initializers. 
2607
2608         * repl.cs (PrettyPrint): Add Hashtable prettyprint
2609
2610         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
2611         public. 
2612
2613         * repl.cs: Update help.
2614
2615 2008-09-03  Miguel de Icaza  <miguel@novell.com>
2616
2617         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
2618         handling of the default config handling, including the special
2619         treatment of System.Core assembly. 
2620
2621         Fixes the REPL processing for LINQ.
2622
2623 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2624
2625         A fix for bug #422507
2626         * expression.cs (UnboxCast): Add missing child expression mutator.
2627
2628 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2629
2630         * driver.cs: Don't self reference System.Core assembly.
2631
2632 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2633
2634         A fix for bug #422507
2635         * expression.cs (StringConcat): Add missing type mutator.
2636
2637 2008-09-03  Marek Safar  <marek.safar@gmail.com>
2638
2639         * generic.cs (TypeInferenceContext): Follow equality rule for
2640         constructed type lower bound type inference.
2641
2642 2008-09-02  Miguel de Icaza  <miguel@novell.com>
2643
2644         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
2645         <dblank@cs.brynmawr.edu> which updates the cursor position on
2646         refresh.
2647         
2648 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2649
2650         A fix for bug #367145
2651         * driver.cs: Fixed import of extension methods when using -noconfig
2652         option.
2653
2654 2008-09-02  Marek Safar  <marek.safar@gmail.com>
2655
2656         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
2657         version from non-generic implementation instead.
2658
2659 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2660
2661         A fix for bug #418908
2662         * class.cs: Use AddScopeStatement for field initializers.
2663
2664 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2665
2666         A fix for bug #415385
2667         * ecore.cs, convert.cs: Do method group conversion for equal group types.
2668
2669 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2670
2671         A fix for bug #421736
2672         * iterators.cs: Don't crash on unreachable iterators.
2673
2674 2008-09-01  Marek Safar  <marek.safar@gmail.com>
2675
2676         A fix for bug #421628
2677         * parameter.cs, attribute.cs: Clone also parameter attributes.
2678
2679 2008-08-30  Miguel de Icaza  <miguel@novell.com>
2680
2681         * namespace.cs (LookupType): In EvalMode, try to replace
2682         the TypeBuilder from our cache with a Type as Reflection.Emit does
2683         not  like to mix code from older assemblies emitted and new
2684         assemblies emitted. 
2685
2686         This sounds like a serious Mono bug that prevents multiple
2687         assemblies to be generated and consumed at the same time.
2688
2689         * cs-parser.jay (push_current_class): Do not make interactive
2690         classes internal or private, make them public as we currently
2691         generate each new class in a new assembly.   
2692
2693 2008-08-29  Miguel de Icaza  <miguel@novell.com>
2694
2695         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
2696         remove types that are entered into the global namespace during
2697         parsing so that we can remove them on failure.
2698  
2699         * cs-parser.jay: Parsing: we now keep track of types that are
2700         entered into global variables and queue those in case the parsing
2701         or resolution fail.
2702  
2703         This happens in a few situations: during partial-input, we invoke
2704         the parser repeatedly for example with the string "class X", this
2705         would cause X to be registed, and we need to remove this
2706         registration so that another parse attempt later with say "class X {"
2707         would actually work.
2708  
2709         Additionally, if there is an error in the resolution phase, for
2710         example: "class X : NonExistant {}" th
2711         
2712         * cs-parser.jay: Be more precise with the errors being raised,
2713         instead of flagging all exceptions during parsing to be attributed
2714         to the parsing process, distinguish those from errors happening in
2715         the actions and hint that using -v would produce the actual
2716         exception. 
2717
2718         * repl.cs: Do not load all compiler references on each reset,
2719         doing the partial reset takes care of this.
2720         
2721 2008-08-28  Miguel de Icaza  <miguel@novell.com>
2722
2723         * repl.cs: Add support for loading all the files from
2724         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
2725         as shell libraries.
2726
2727         Introduce a micro-parser that is able to deambiguate on its input
2728         whether we are dealing with a compilation unit (namespace, class,
2729         interface, struct, delegate) declaration or a statement.   This
2730         allows both declarations and statements to be entered. 
2731
2732         Set history size by default to 300 lines.
2733
2734         Instead of distinguishing based on the parser.InteractiveResult,
2735         have only two cases: statements were parsed, or a compilation unit
2736         was.   Always pull the Using statement additions from the
2737         compilation unit parse.
2738         
2739         * cs-tokenizer.cs: Rename tokens to better describe their intent
2740         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
2741         
2742         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
2743         EvalMode is used to trigger the lookup of global variables while
2744         StatementMode is used turn variable declarations into static
2745         fields.
2746
2747         * getline.cs: Allow history size to be set.
2748         
2749 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2750
2751         A fix for bug #360755
2752         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
2753
2754 2008-08-29  Marek Safar  <marek.safar@gmail.com>
2755
2756         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
2757         
2758         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
2759         member name, it is too confusing
2760         
2761         * decl.cs, class.cs: Don't report unused fields with attached attribute.
2762         
2763         * rootcontext.cs: Finally default to warning level 4.
2764
2765 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2766
2767         * class.cs (CheckBase): Ignore overloaded operators.
2768
2769 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2770
2771         A fix for bug #420830
2772         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
2773
2774 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2775
2776         A fix for bug #420832
2777         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
2778
2779 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2780
2781         A fix for bug #420386
2782         * nullables.cs: Fixed logic of nullable user comparison operators involving
2783         null values.
2784
2785 2008-08-28  Marek Safar  <marek.safar@gmail.com>
2786         
2787         * attribute (IsClsCompliant): Use FALSE value for pointer types.
2788
2789 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2790
2791         * repl.cs: Add support for aborting the running code with C-c. 
2792
2793 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
2794
2795         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
2796
2797 2008-08-27  Miguel de Icaza  <miguel@novell.com>
2798
2799         * cs-parser.jay (interactive_statement_list): A new set of rules
2800         for hosting statements that uses the "interactive_" prefix.   
2801
2802         * repl.cs: Add support for parsing `using' as a statement or as a
2803         directive.  Deambiguating before passing this to the parser.
2804
2805         We need to distinguish statement_expressions that occur at the
2806         toplevel vs those that occur embedded into expressions.
2807
2808         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
2809         that fixes the cursor key handling, and a history bug.
2810         
2811 2008-08-26  Miguel de Icaza  <miguel@novell.com>
2812
2813         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
2814         limitations in Console, instead the 2.0 bootstrap libraries now
2815         include the Console bits.
2816
2817         Also, remove the use of Nullables from getline.cs
2818
2819         ------------
2820         
2821         Interactive support for the C# compiler.   Use gmcs --shell to
2822         enter a read-eval-print loop shell.
2823
2824         Docs: http://www.mono-project.com/CsharpRepl
2825         
2826         * sources: include repl.cs here and getline.cs for gmcs.exe,
2827         everything else is getline.cs impaired.
2828
2829         * Makefile: when bootstrapping pass a special flag
2830         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
2831         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
2832         This distinguishes those two cases.
2833
2834         * repl.cs: Support for a read-eval-print loop.   Will be soon
2835         refactored into eval support and then REPL on top of it.
2836
2837         * ecore.cs: If a simplename lookup fails, before erroring out,
2838         if we are in EvalMode to resolve the name to a declaration in the
2839         Eval-land.    
2840
2841         This means that variable declarations that happened in previous
2842         classes (as repl puts every statement in a separate class) are
2843         made visible in this way.
2844
2845         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
2846         triggered an error due to the end of file being reached.   This is
2847         used to do multi-line input, and notify the caller that the user
2848         needs to provide more text before a successful parse.
2849
2850         Add new grammar rules after the INTERACTIVE_PARSER token is seen
2851         to drive the evaluation with a custom wrapper. 
2852
2853         * driver.cs: Add support for --shell, and refactor some code to be
2854         reused from repl.cs
2855         
2856         * namespace.cs: Add support for serializing the contents of the
2857         namespaces and reloading them.  
2858
2859         * getline.cs: A managed implementation of ReadLine under
2860         X11/Apache2 license terms.  Easy to embed in other applications as
2861         well.
2862
2863         * namespace.cs: Add some functions to save and restore the
2864         namespace state.
2865
2866         * rootcontext.cs: New public field.
2867
2868         * cs-tokenizer.cs: Add support for one of the possible characters
2869         we introduce into the token stream.  
2870
2871         This patch does not affect the regular tokenization process, the
2872         only performance hit would happen if there is an invalid character
2873         on the input string.
2874
2875         * support.cs: Move isatty helper routine here.
2876
2877         * codegen.cs: Small cleanup, and add a mechanism to initialize the
2878         code generator for in-memory assemblies.
2879
2880 2008-08-26  Marek Safar  <marek.safar@gmail.com>
2881
2882         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
2883         parameter cannot be always used as a type.
2884
2885 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2886
2887         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
2888
2889 2008-08-21  Marek Safar  <marek.safar@gmail.com>
2890
2891         * convert.cs: Implement explicit array to IList<T> conversion.
2892
2893 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2894
2895         A fix for bug #362740
2896         * cs-tokenizer.cs: Handle UTF-16 surrogates.
2897
2898 2008-08-20  Marek Safar  <marek.safar@gmail.com>
2899         
2900         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
2901         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
2902         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
2903         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
2904         handling to use just one type of infrastructure and deal with generics
2905         more effectivelly.
2906
2907 2008-07-23  Martin Baulig  <martin@ximian.com>
2908
2909         *** Merged this from trunk revision 108527 ***
2910
2911         * statement.cs
2912         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
2913         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
2914         scope variable.
2915
2916 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2917         
2918         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
2919         error checks.
2920
2921 2008-08-15  Marek Safar  <marek.safar@gmail.com>
2922         
2923         * delegate.cs: Fixed compiler crash when creating delegate using partial
2924         method.
2925         
2926         * typemanager.cs: MulticastDelegate is not a delegate.
2927
2928 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2929         
2930         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
2931         checks.
2932
2933 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
2934
2935         * cs-parser.jay (type): Allow 'var' in mcs too.
2936         (local_variable_type): Likewise.
2937
2938 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2939         
2940         * driver.cs: Removed broken -noconfig variants.
2941
2942 2008-08-14  Marek Safar  <marek.safar@gmail.com>
2943         
2944         A fix for bug #417078
2945         * expression.cs: Emit correctly left side pointer operators.
2946
2947 2008-08-13  Marek Safar  <marek.safar@gmail.com>
2948
2949         * generic.cs, lambda.cs: Inflate method generic arguments only.
2950
2951 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2952
2953         * class.cs: Fixed struct layout check regression.
2954
2955 2008-08-12  Marek Safar  <marek.safar@gmail.com>
2956
2957         * cs-parser.jay, enum.cs: Simplified enum parsing.
2958         
2959         * decl.cs: Check all type parameters conflicts.
2960         
2961         * expression.cs, statement.cs, attribute.cs: More expression checks.
2962
2963 2008-08-11  Marek Safar  <marek.safar@gmail.com>
2964
2965         * generic.cs: Add type inference types restriction.
2966         
2967         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
2968         anonymous.cs, expression.cs: Allocate less accessor parameters.
2969
2970 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2971
2972         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
2973         classes.
2974
2975 2008-08-08  Marek Safar  <marek.safar@gmail.com>
2976
2977         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
2978
2979 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2980
2981         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
2982         Also fixes #362146 and #381592.
2983
2984 2008-08-07  Marek Safar  <marek.safar@gmail.com>
2985
2986         * ecore.cs: Reduced constant cannot be used as an attribute value.
2987         
2988         * cs-parser.jay: Base expression has to be a type.
2989         
2990         * expression.cs (Conditional): Uses ReducedExpression.
2991
2992 2008-08-06  Marek Safar  <marek.safar@gmail.com>
2993
2994         A fix for bug #376826
2995         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
2996         address of hoisted local variable or parameter cannot be taken.
2997
2998 2008-08-05  Marek Safar  <marek.safar@gmail.com>
2999
3000         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3001         anonymous method inside checked/unchecked expression.
3002
3003 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3004
3005         * typemanager.cs (IsEqual): Guard against null.
3006         
3007         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3008         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3009         routine. Fixed few misleading conversion errors.
3010
3011 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3012
3013         * class.cs: Consider generics when checking cycles in struct layout.
3014
3015 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3016
3017         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3018
3019 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3020
3021         A fix for bug #414165
3022         * anonymous.cs: Use same anonymous implementation method for all anonymous
3023         method emits.
3024
3025 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3026
3027         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3028         constraints.
3029
3030 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3031
3032         * cs-parser.jay: Typeof argument has to be a type expression.
3033         
3034         * namespace.cs: Check alias and namespace definitions collisions.
3035         
3036         * class.cs, pending.cs: Moved explicit interface accessor implementation
3037         check.
3038         
3039         * delegate.cs, expression.cs: Verify special name invocations.
3040         
3041 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3042
3043         * cs-parser.jay: Don't choke on empty generic type arguments.
3044         
3045         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3046         
3047         * expression.cs, ecore.cs: Minor expressions bugs.
3048
3049 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3050
3051         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3052         and added more error handling.
3053         
3054         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3055         
3056         *  modifiers.cs, enum.cs: Fixed.
3057
3058 2008-07-31  Jb Evain  <jbevain@novell.com>
3059
3060         * driver.cs: remove -pkg ability of smcs.
3061
3062 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3063
3064         * statement.cs (Switch): Correctly set empty default target for single
3065         blocks.
3066
3067 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3068
3069         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3070         string switch statement implementation to use string dictionary which
3071         significantly (2-8x) improves performance of generated code.
3072
3073 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3074
3075         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3076         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3077         
3078 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3079
3080         A fix for bug #412595
3081         * typemanager.cs, convert.cs, expression.cs: Some types are never
3082         convertible to each other.
3083
3084 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3085
3086         * nullable.cs (CreateNullConstant): An error messages update.
3087
3088 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3089
3090         A fix for bug #412595
3091         * cfold.cs: Don't cast undefined bool constant.
3092
3093 2008-07-29  Martin Baulig  <martin@ximian.com>
3094
3095         * symbolwriter.cs
3096         (SymbolWriter.Reset): New public static method.
3097
3098         * driver.cs
3099         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3100
3101 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3102
3103         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3104         
3105         * expression.cs (ElementAccess): Exact size allocation.
3106
3107 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3108
3109         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3110
3111 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3112
3113         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3114         
3115         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3116         flow analysis.
3117
3118 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3119
3120         A fix for bug #412217
3121         * assign.cs: Mutate also assignment type.
3122
3123 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3124
3125         A fix for bug #323644
3126         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3127         indexers.
3128
3129 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3130
3131         A fix for bug #412134
3132         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3133         non-enumerable operands when overloading equality or bitwise operators.
3134
3135 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3136
3137         * anonymous.cs: Cache closed generic anonymous method delegates.
3138
3139 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3140
3141         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3142         anonymous.cs, statement.cs: Always emit anonymous method as static method
3143         when is instance free. Use nesting for nested anynomous methods blocks.
3144         
3145 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3146
3147         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3148         types.
3149
3150 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3151
3152         * expression.cs: Removed MakeSimpleCall.
3153
3154 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3155
3156         A fix for bug #323012
3157         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3158         Base method implementing interface has to be public.
3159
3160 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3161
3162         * cs-parser.jay: Don't break on missing argument.
3163
3164 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3165
3166         A fix for bug #320993
3167         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3168           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3169
3170 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3171
3172         A fix for bug #320748
3173         * convert.cs: Implicit user operators cannot convert to interfaces
3174
3175 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3176
3177         A fix for bug #312686
3178         * driver.cs: Ignore empty assembly references.
3179
3180 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3181
3182         A fix for bug #387040
3183         * ecore.cs: Skip constrains check for an explicit implementation.
3184
3185 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3186
3187         A fix for bug #409045
3188         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3189           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3190           identifiers are file specific unless passed as input arguments.
3191
3192 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3193
3194          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3195          to emit UnmanagedMarshal data under 2.0 profile.
3196
3197 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3198
3199         A fix for bug #410369
3200         * parameter.cs: Clone correctly ParamsParameter.
3201
3202 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3203
3204         * expression.cs (Argument): Always report type for type based expressions
3205         errors.
3206
3207 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3208
3209         A fix for bug #410666
3210         * anonymous.cs: Correctly initialize generic storey reference.
3211
3212 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3213
3214         * convert.cs: Don't box same type arguments.
3215
3216 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3217
3218         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3219         Finished missing generic type mutators.
3220
3221 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3222
3223         * iterators.cs, statement.cs: Finished statements CloneTo.
3224
3225 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3226
3227         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3228         
3229         * expression.cs: Emit optimized default value expressions in expression tree
3230         array initializer.
3231
3232 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3233
3234         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3235
3236 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3237
3238         A fix for bug #367536
3239         * cs-parser.jay: Check static constructor of generic types for an access
3240         modifier.
3241
3242 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3243
3244         A fix for bug #353800
3245         * lambda.cs: Emit ret for contextual statements.
3246         
3247         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
3248         up emitting redundant ret for all anonymous methods with return.
3249
3250 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3251
3252         A fix for bug #365188
3253         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
3254         create anonymous method storey in unreachable block.
3255
3256 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3257
3258         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
3259         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
3260         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
3261         statement.cs: Fixed relevant defects found by Gendarme.
3262
3263 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3264
3265         A fix for bug #325291
3266         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
3267         statement.cs: Replaced IAnonymousHost with top level block flag.
3268
3269 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3270
3271         * cs-parser.jay: Clean up unused open_parens.
3272
3273 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3274
3275         * ecore.cs: Custom error message for a range variable assignment.
3276
3277 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3278
3279         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
3280         load.
3281
3282 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3283
3284         * literal.cs: Null literal is of object type.
3285
3286 2008-07-16  Marek Safar  <marek.safar@gmail.com>
3287
3288         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
3289         expression of nullable equality comparison.
3290
3291 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3292
3293         * expression.cs(PointerArithmetic): Removed redundant assignment.
3294
3295 2008-07-15  Marek Safar  <marek.safar@gmail.com>
3296
3297         * decl.cs (GetSignatureForError): Report full namespace name for containers.
3298
3299 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3300
3301         A fix for bug #408361
3302         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
3303         they are replaced by GetMethod.
3304
3305 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3306
3307         A fix for bug #408721 by jeremie.laval@gmail.com
3308         * expression.cs (Indirection): Implemented CloneTo.
3309
3310 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3311
3312         * statement.cs (AssignableSlots): Temporary disabled variable initialization
3313         assert check.
3314
3315 2008-07-14  Marek Safar  <marek.safar@gmail.com>
3316
3317         * report.cs (EnableReporting): Don't reinitialize 0-based values.
3318
3319 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3320
3321         * linq.cs: Reset tranparent parameter counter in probing mode.
3322
3323 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3324
3325         * anonymous.cs: Mutate anonymous method type.
3326
3327 2008-07-11  Marek Safar  <marek.safar@gmail.com>
3328
3329         * ecore.cs, anonymous.cs: Mutate field expressions.
3330
3331 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3332
3333         A fix for bug #369670
3334         * linq.cs, statement.cs: Use explicit block for query expressions variables.
3335
3336 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3337
3338         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
3339
3340 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
3341
3342         Fix bug #314902
3343         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
3344         only one '>', and finds a '>>', abort the generic lookahead.
3345
3346 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3347
3348         A fix for bug #319902
3349         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
3350
3351 2008-07-10  Marek Safar  <marek.safar@gmail.com>
3352
3353         A fix for bug #406371
3354         * statement.cs: Moved EmitSymbolInfo to Block.
3355
3356 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3357
3358         * ecore.cs: Report better error for extension method overload failures.
3359
3360 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3361
3362         * expression.cs (Is): No need to box reference values.
3363
3364 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3365
3366         * class.cs: Use event resolve context when initializing CreateEmitContext.
3367
3368 2008-07-09  Marek Safar  <marek.safar@gmail.com>
3369
3370         A fix for bug #394436
3371         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
3372         method used inside expression trees. Added more LINQ to expression tree
3373         conversions.
3374
3375 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3376
3377         A fix for bug #378189, #370577
3378         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
3379         from expression.
3380
3381 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3382
3383         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
3384         hierarchically.
3385
3386 2008-07-08  Marek Safar  <marek.safar@gmail.com>
3387
3388         A fix for bug #406702
3389         * anonymous.cs: Always park anonymous method in the nearest parent storey.
3390
3391 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3392
3393         A fix for bug #406648
3394         * cs-parser.jay: Report nullable use in mcs for some cases.
3395
3396 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3397
3398         * ecore.cs: Improved argument mismatch error messages.
3399
3400 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3401
3402         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
3403
3404 2008-07-07  Marek Safar  <marek.safar@gmail.com>
3405
3406         * expression.cs (TypeOf): Mutate type argument.
3407
3408 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3409
3410         * class.cs: Report missing partial modifier for correct type.
3411
3412 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3413
3414         * ecore.cs, expression.cs (VariableReference): Variable property is 
3415         protected.
3416
3417 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3418
3419         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
3420         
3421 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3422
3423         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
3424         method delegates.
3425
3426 2008-07-04  Marek Safar  <marek.safar@gmail.com>
3427
3428         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
3429         anonymous method storey to an instance method when only "this" is hoisted.
3430
3431 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3432
3433         A fix for bug #321615
3434         * expression.cs: Pointer comparisons use unsigned operator.
3435
3436 2008-07-03  Marek Safar  <marek.safar@gmail.com>
3437
3438         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
3439
3440 2008-07-02  Marek Safar  <marek.safar@gmail.com>
3441
3442         A fix for bug #404905
3443         * class.cs: Always initialize local unsafe variables.
3444
3445 2008-06-30  Marek Safar  <marek.safar@gmail.com>
3446
3447         A fix for bug #396987
3448         * expression.cs (NewInitialize): Clear local temporary variable for next run
3449
3450 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3451
3452         A fix for bug #401020
3453         * ecore.cs: Both types and modifiers have to match for ref and out arguments
3454
3455 2008-06-27  Marek Safar  <marek.safar@gmail.com>
3456
3457         A fix for bug #398319
3458         * cs-parser.jay: Implemented undocumented base access expression inside
3459         anonymous types.
3460
3461 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3462
3463         A fix for bug #404227
3464         * cs-parser.jay: Parse namespace declaration using qualified identifier.
3465
3466 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3467
3468         A fix for bug #404227
3469         * convert.cs: Fixed explicit array to interface cast.
3470
3471 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3472
3473         A fix for bug #403894
3474         * delegate.cs: Mutate DelegateInvocation type.
3475
3476 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3477
3478         A fix for bug #379348
3479         * delegate.cs: Box a load of generic parameters.
3480
3481 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3482
3483         * expression.cs: Add an array creation arguments mutate.
3484
3485 2008-06-26  Marek Safar  <marek.safar@gmail.com>
3486
3487         A fix for bug #386068
3488         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
3489         parameter.
3490
3491 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3492
3493         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
3494         CloneTo.
3495
3496 2008-06-25  Marek Safar  <marek.safar@gmail.com>
3497
3498         A fix for bug #403518
3499         * delegate.cs: Type correctly anonymous method new invocation.
3500
3501 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3502
3503         A fix for bug #394826
3504         * anonymous.cs: Fully qualify members when resolving anonymous type internal
3505         calls.
3506
3507 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3508
3509         A fix for bug #394826
3510         * anonymous.cs, iterators.cs: Construct generic storey only when is really
3511         needed.
3512
3513 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3514
3515         * class.cs: Clone indexer parameters for localized capturing.
3516
3517 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3518
3519         A fix for bug #402379
3520         * expression.cs: Don't crash when an object initializer resolve fails.
3521
3522 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3523
3524         A fix for bug #402888
3525         * expression.cs: Mutate conditional expression.
3526
3527 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3528
3529         A fix for bug #401012
3530         * class.cs: Keep StructLayout in shared container.
3531
3532 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3533
3534         A fix for bug #400438
3535         * decl.cs, class.cs: Only properties can be automatically implemented.
3536
3537 2008-06-24  Marek Safar  <marek.safar@gmail.com>
3538
3539         * statement.cs (ChangeToIterator): Copy also labels.
3540
3541 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3542
3543         * ecore.cs: Pass type argument details to parent extension method.
3544
3545 2008-06-23  Marek Safar  <marek.safar@gmail.com>
3546
3547         A fix for bug #375966
3548         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
3549
3550 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
3551
3552         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
3553
3554 2008-06-22  Marek Safar  <marek.safar@gmail.com>
3555
3556         A fix for bug #394347
3557         * anonymous.cs: Cache compatible delegates as compatibility check produces
3558         a new method every time.
3559
3560 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3561
3562         * anonymous.cs: Propagate storey reference for single references.
3563
3564 2008-06-20  Marek Safar  <marek.safar@gmail.com>
3565
3566         A fix for bug #387615
3567         * assign.cs, expression.cs: Correctly clone compound assignment.
3568
3569 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3570
3571         A fix for bug #359611, #359604
3572         * anonymous.cs: Mutate all types of hoisted parameters.
3573
3574 2008-06-19  Marek Safar  <marek.safar@gmail.com>
3575
3576         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
3577         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
3578         expression.cs, codegen.cs, statement.cs
3579         
3580         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
3581         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
3582         
3583         ** Anonymous methods, lambda expressions rewrite **
3584         
3585         Anonymous expressions are now resolved when an explicit block is resolved 
3586         and they don't require any registration procedure anymore. Further,
3587         anonymous methods are defined when explicit block is emitted which allows
3588         better control of whole process and opens possibilities for more
3589         optimizations as well as alternative to reverse whole process.
3590         
3591         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
3592         process consistent and to correctly emit hoisted generic methods when they
3593         have at least 1 hoisted variable.
3594         
3595 2008-06-17  Martin Baulig  <martin@ximian.com>
3596
3597         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
3598         iterator method.
3599         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
3600         virtual property; check it in Emit().
3601         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
3602         an iterator.
3603         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
3604         an iterator.
3605         (Indexer.Define): Likewise.
3606
3607 2008-06-17  Marek Safar  <marek.safar@gmail.com>
3608
3609         * convert.cs: Don't use IsInterface on type arguments.
3610         
3611         * delegate.cs: DelegateInvocation uses MethodInfo.
3612         
3613         * parameter.cs: Removed IsTypeParameter.
3614         
3615         * generic-mcs.cs: More missing stuff.
3616
3617 2008-06-16  Martin Baulig  <martin@ximian.com>
3618
3619         * modifiers.cs
3620         (Modifiers.DEBUGGER_HIDDEN): New public const.
3621
3622         * typemanager.cs
3623         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
3624
3625         * class.cs
3626         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
3627         (AbstractPropertyEventMethod): Likewise.
3628         (Constructor.Emit): Likewise.
3629         (SourceMethod.SetCompilerGenerated): Removed.
3630
3631         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
3632         on MoveNext().
3633
3634         * anonymous.cs
3635         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
3636         if we're an `IteratorHost'.
3637         (AnonymousMethodMethod..ctor): Don't set
3638         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
3639         not on the method.
3640
3641 2008-06-16  Marek Safar  <marek.safar@gmail.com>
3642
3643         * statement.cs: Clean-up foreach statements.
3644
3645 2008-06-12  Marek Safar  <marek.safar@gmail.com>
3646
3647         * class.cs: Stop using public method which should not exist
3648         (MethodBuilder.SetGenericMethodSignature).
3649
3650 2008-06-11  Martin Baulig  <martin@ximian.com>
3651
3652         * location.cs
3653         (Location.LookupFile): Add `CompilationUnit' argument; when given
3654         a relative file name, make it relative to the directory the .cs
3655         file is located in instead of using the current directory.
3656
3657 2008-06-11  Martin Baulig  <martin@ximian.com>
3658
3659         * class.cs
3660         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
3661         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
3662         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
3663         (SourceMethod.SetCompilerGenerated): Likewise.
3664
3665 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3666
3667         * codegen.cs, driver: Only write symbol file when it's asked for.
3668
3669 2008-06-11  Marek Safar  <marek.safar@gmail.com>
3670
3671         * codegen.cs: Don't use assembly writer error handling for symbol writer.
3672
3673 2008-06-10  Martin Baulig  <martin@ximian.com>
3674
3675         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
3676
3677 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3678
3679         A fix for bug #316290
3680         * expression.cs: Include decimal operators in predefined table.
3681         
3682         * parameters.cs: More readonlyness.
3683
3684 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3685
3686         A fix for bug #397213
3687         * cs-parser.jay: One more missing current_local_parameters reset.
3688
3689 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3690
3691         A fix for bug #396633
3692         * class.cs: Host backing field in partial container.
3693
3694 2008-06-09  Marek Safar  <marek.safar@gmail.com>
3695
3696         A fix for bug #397068
3697         * expression.cs: Check both operand types when predefined operator is used.
3698
3699 2008-06-05  Martin Baulig  <martin@ximian.com>
3700
3701         Merged the `debugger-kahalo' branch.
3702
3703         * class.cs
3704         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
3705         we're an iterator method.
3706         (SourceMethod): Reflect latest symbol writer changes;
3707         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
3708         now `start_row' and `end_row'.
3709         (Constructor.Emit): Fix the logic whether to emit symbol information.
3710
3711         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
3712         generated methods.
3713
3714         * location.cs
3715         (CompilationUnit): New public class; derives from `SourceFile'.
3716         (SourceFileEntry.DefineSymbolInfo): New public method.
3717         (SourceFileEntry.SetChecksum): New public method.
3718         (Location): Encode hidden line numbers by using `column == 255';
3719         the .ctor now accepts `column == -1' to mark a hidden line number.
3720         (Location.Hidden): New public property.
3721         (Location.CheckPoint): Add `CompilationUnit'.
3722         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
3723         (Location.Push): Add `CompilationUnit compile_unit' argument.
3724         (Location.CompilationUnit): New public property.
3725
3726         * statement.cs
3727         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
3728
3729         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
3730
3731         * driver.cs: `SourceFile' -> `CompilationUnit'.
3732
3733         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
3734
3735         * namespace.cs: `SourceFile' -> `CompilationUnit'.
3736
3737         * cs-tokenizer.cs: Add support for `#pragma checksum' and
3738         `#line hidden'.
3739
3740         * symbolwriter.cs
3741         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
3742         new symbol writer API to also pass the file.
3743
3744 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3745
3746         * statement.cs: Emit catch variable assignment using variable expression.
3747         
3748 2008-06-05  Marek Safar  <marek.safar@gmail.com>
3749
3750         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
3751         with other variable types.
3752
3753 2008-06-04  Marek Safar  <marek.safar@gmail.com>
3754
3755         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
3756         GetLength method emit, it breaks resolve rules.
3757         
3758 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
3759             Marek Safar  <marek.safar@gmail.com>
3760                         
3761         A fix for bug #395542
3762         * cs-parser.jay: The trailing comma is allowed in anonymous type member
3763         declaration.
3764         
3765 2008-06-02  Marek Safar  <marek.safar@gmail.com>
3766
3767         A fix for bug #395287
3768         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
3769
3770 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3771
3772         A fix for bug #395845
3773         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
3774         non-nullable parameter type.
3775         
3776 2008-05-31  Marek Safar  <marek.safar@gmail.com>
3777
3778         * class.cs: Handle contructor initializer as a statement in top-level block.
3779
3780 2008-05-30  Marek Safar  <marek.safar@gmail.com>
3781
3782         * attribute.cs: Don't mix old and new corlib types when emitting corlib
3783         security attributes.
3784
3785 2008-05-24  Marek Safar  <marek.safar@gmail.com>
3786
3787         * ecore.cs, expression.cs: Small IVariable refactoring.
3788
3789 2008-05-22  Marek Safar  <marek.safar@gmail.com>
3790
3791         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
3792
3793 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3794
3795         * cs-parser.jay: Removed redundant catch type check.
3796
3797 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3798
3799         A fix for bug #390372
3800         * nullable.cs: Set correct return type.
3801
3802 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3803
3804         A fix for bug #391062
3805         * typemanager.cs: Fixed crash when comparing null types.
3806
3807 2008-05-21  Marek Safar  <marek.safar@gmail.com>
3808
3809         A fix for bug #391871
3810         * cs-parser.jay: Better error handling for invalid catch type.
3811
3812 2008-05-20  Marek Safar  <marek.safar@gmail.com>
3813
3814         A fix for bug #392155
3815         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
3816
3817 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3818
3819         A fix for bug #390666
3820         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
3821         expressions.
3822
3823 2008-05-15  Marek Safar  <marek.safar@gmail.com>
3824
3825         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
3826         in getter.
3827
3828 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3829
3830         A fix for bug #389625
3831         * delegate.cs, generic.cs: Some progress on method group return type
3832         inference.
3833
3834 2008-05-13  Marek Safar  <marek.safar@gmail.com>
3835
3836         A fix for bug #378419
3837         * namespace.cs: Inspect also parent namespaces not only namespace entries.
3838
3839 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3840
3841         * class.cs (Constructor): Added IsCompilerGenerated.
3842
3843 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3844
3845         * expression.cs: Enum binary operators can accept non-enum operand only when
3846         is implicitly convertible to underlying type.
3847
3848 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3849
3850         A fix for bug #389272
3851         * support.cs: Workaround System.InvalidOperationException for enums.
3852
3853 2008-05-12  Marek Safar  <marek.safar@gmail.com>
3854
3855         A fix for bug #389073
3856         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
3857
3858 2008-05-10  Marek Safar  <marek.safar@gmail.com>
3859
3860         * driver.cs: Split Parse.
3861         
3862         * location.cs (LookupFile): Uses string.Empty.
3863
3864 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3865
3866         * expression.cs, parameter.cs: Small ParameterReference clean up.
3867
3868 2008-05-07  Marek Safar  <marek.safar@gmail.com>
3869
3870         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
3871         hack. Fixes #387502.
3872
3873 2008-05-06  Martin Baulig  <martin@ximian.com>
3874
3875         * class.cs (Constructor.Emit): Fix the logic whether to emit
3876         symbol information.
3877
3878 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
3879
3880         Fix #385503
3881         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
3882         InvalidOperationException when the iterator is before the start or
3883         after the end.
3884
3885 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3886
3887         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
3888         when left is nullable type.
3889
3890 2008-05-06  Marek Safar  <marek.safar@gmail.com>
3891
3892         A fix for bug #386628
3893         * expression.cs (LocalVariableReference): Continue in resolving when
3894         variable is not assigned.
3895
3896 2008-05-05  Marek Safar  <marek.safar@gmail.com>
3897
3898         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
3899         nullable operations.
3900
3901 2008-05-04  Marek Safar  <marek.safar@gmail.com>
3902
3903         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
3904         it saves many redundant temporary variables for nullable operations.
3905
3906 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3907
3908         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
3909         
3910         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
3911         method.
3912         
3913         * nullable.cs: Constant coalescing operator optimizations.
3914
3915 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3916
3917         * constant.cs: Use unsigned conversion for values which are unsigned only.
3918
3919 2008-05-03  Marek Safar  <marek.safar@gmail.com>
3920
3921         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
3922         coalescing operator as it should be.
3923
3924 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3925
3926         A fix for bug #371016
3927         * expression.cs: All predefined delegate operators require implicit method
3928         group conversion.
3929         
3930 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3931
3932         * constant.cs: Emit long constant as uint when fits the range.
3933         
3934         * convert.cs, expression.cs: Fixed few unsafe conversions.
3935
3936 2008-05-02  Marek Safar  <marek.safar@gmail.com>
3937
3938         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
3939
3940 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
3941
3942         Fix #385758
3943         * convert.cs (ImplicitNumericConversion): Don't modify the type of
3944         'expr'.
3945         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
3946
3947 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3948
3949         * constant.cs, literal.cs: IsLiteral property for error reporting.
3950         
3951         * ecore.cs, expression.cs: Implemented Property expression.
3952
3953 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3954
3955         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
3956         
3957         * nullable.cs: Implemented nullable coalescing null operator.
3958
3959         * ecore.cs, expression.cs: Expression trees work.
3960
3961 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3962
3963         * ecore.cs: CreateExpressionTree is finally abstract.
3964
3965         * expression.cs, linq.cs: Updated.
3966
3967 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3968
3969         * expression.cs, ecore.cs: Block base access expression inside expression
3970         tree.
3971
3972 2008-05-01  Marek Safar  <marek.safar@gmail.com>
3973
3974         A fix for bug #385058
3975         * expression.cs: User-defined operator implementations always take
3976         precedence over predefined operator implementations.
3977
3978 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3979
3980         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
3981         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
3982         expression tree conversions.
3983         
3984 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3985
3986         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
3987         operators method details to Operator class.
3988
3989 2008-04-30  Marek Safar  <marek.safar@gmail.com>
3990
3991         * anonymous.cs: Pass unsafe flags to anonymous container.
3992         
3993         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
3994         inside expression tree.
3995
3996 2008-04-29  Martin Baulig  <martin@ximian.com>
3997
3998         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
3999         (Tokenizer.PopPosition): Also restore the `line'.
4000
4001 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4002
4003         * delegate.cs: Implemented Invoke expression.
4004
4005 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4006
4007         * expression.cs: Fixed equality reference comparison regression.
4008
4009 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4010
4011         * ecore.cs: Clean up EmptyCast hack.
4012         
4013         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4014         using correct conversion rules. Also fixes #383993.
4015
4016 2008-04-28  Martin Baulig  <martin@ximian.com>
4017
4018         * class.cs (Constructor.Emit): Don't emit debugging information
4019         for generated default .ctor's.
4020
4021 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4022
4023         * convert.cs: Empty-cast ushort to int conversion.
4024
4025 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4026
4027         A fix for bug #384191
4028         * ecore.cs, expression.cs: Fixed expression cloning.
4029
4030 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4031
4032         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4033
4034 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4035
4036         Fix #381559, test-638.cs, test-639.cs
4037         * assign.cs (CompoundAssign.Helper): New wrapper.
4038         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4039         access.
4040         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4041         Pass unconverted expressions to the params array creation expression.
4042         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4043         (PropertyExpr.EmitAssign): Likewise.
4044         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4045         element if it is of kind CompoundAssign.Helper.
4046         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4047         first before anything else.
4048         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4049         (ArrayAccess.LoadArrayAndArguments): Simplify.
4050
4051 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4052
4053         * expression.cs: Fixed cloning of typeof(void).
4054
4055 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4056
4057         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4058         (Assign.Emit): Likewise.  Move it to ...
4059         (CompoundAssign.DoResolve): ... here and ...
4060         (CompoundAssign.Emit): ... here.
4061         (EventAddOrRemove): New helper to handle += and -= on events, and
4062         avoid the use of BinaryDelegates.
4063         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4064         (EventExpr.EmitAddOrRemove): Improve.
4065         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4066
4067         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4068         create VarExprs for 'foo.bar.var'.
4069         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4070         is a highly inappropriate name for its functionality.
4071
4072 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4073
4074         Simplify handling of multiple assignments
4075         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4076         inheritable-only.
4077         (SimpleAssign): New.  Class to be used for normal assignments.
4078         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4079         * expression.cs, parameter.cs, statement.cs: Likewise.
4080
4081 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4082
4083         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4084         for incompatible underlying types, more to come, uff.
4085
4086 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4087
4088         Fix gtest-388.cs
4089         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4090         Handle 'leave_copy'.
4091
4092 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4093
4094         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4095
4096 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4097
4098         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4099         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4100         * statement.cs (While, Do, For): Allow test to have side effects.
4101         (For.DoEmit): Always emit InitStatement.
4102
4103         Fix test-635.cs
4104         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4105         Always create SideEffectConstant.
4106         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4107         of type EnumConstant.
4108
4109         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4110         Handle 'right' being SideEffectConstant of type 'bool'.
4111
4112         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4113         Use left.EmitBranchable instead of open coding it, so as to
4114         improve optimization opportunities.
4115
4116         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4117
4118         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4119         assumptions.
4120         (Expression.EmitSideEffect): Document.
4121
4122 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4123
4124         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4125
4126 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4127
4128         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4129
4130 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4131
4132         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4133         conversion to expression tree.
4134
4135 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4136
4137         * ecore.cs: Removed unused expression.
4138
4139 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4140
4141         * expression.cs: Implemented NegateChecked and New expressions.
4142
4143 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4144
4145         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4146
4147 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4148
4149         Fix #351102
4150         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4151         needing final 'ret' instruction.
4152
4153 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4154
4155         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4156
4157 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4158
4159         * expression.cs: Emit ldnull and not null expression as an instance argument
4160          of static method expression calls.
4161
4162 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4163
4164         A fix for bug #378200
4165         * expression.cs: Fixed crash when creating parameterless expression tree
4166         method call.
4167
4168 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4169
4170         A fix for bug #375297
4171         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4172         method.
4173
4174 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4175
4176         A fix for bug #377596
4177         * decl.cs, class.cs: Emit delegate type argument attributes.
4178
4179 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4180
4181         A fix for bug #365314
4182         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4183         
4184 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4185
4186         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4187         only.
4188
4189 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4190
4191         * generic.cs (TypeParameter): Removed redundant location.
4192
4193 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4194
4195         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4196         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4197         FullNamedExpression in all declaration type expression, statements will come
4198         later.
4199
4200 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4201
4202         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4203         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4204
4205 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4206
4207         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4208         code.
4209
4210 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4211
4212         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4213         constraints.
4214
4215 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4216
4217         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4218         name expressions.
4219         Also fixes #340463.
4220
4221 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4222
4223         Hook up 'EmitSideEffect'
4224         * constant.cs (Constant.EmitSideEffect): New.
4225         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4226         (SideEffectConstant.EmitSideEffect): New.
4227         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4228         unconditional branch in EmitBranchable.
4229         (FieldExpr.EmitBranchable): New.
4230         * expression.cs (Unary.EmitSideEffect): New.
4231         (Binary.EmitSideEffect): New.
4232         (VariableReference.EmitSideEffect): New.  Do nothing.
4233
4234 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4235
4236         Introduce 'EmitSideEffect'
4237         * ecore.cs (Expression.EmitSideEffect): New.
4238         (TypeCast): Rename from EmptyCast.
4239         (EmptyCast): New.
4240         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4241         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4242         * convert.cs, nullable.cs: Update to changes.
4243
4244 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4245
4246         * class.cs, cs-parser.jay: Early check for base types expression.
4247
4248 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4249
4250         * decl.cs (MemberName): Declare PrettyName as obsolete.
4251
4252 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4253
4254         * namespace.cs: Use MemberName comparison.
4255
4256 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4257
4258         Fix build break
4259         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
4260         FullName.
4261         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
4262         (MemberName.FullyQualifiedName): New.  Provides the functionality
4263         that users assume FullName would have.
4264         * ecore.cs, namespace.cs: Update to changes.
4265
4266         * statement.cs (Using.assign): Make into ExpressionStatement.
4267         (Using.EmitPreTryBody): Simplify.
4268
4269 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4270
4271         * report.cs: ColorFormat is protected.
4272         
4273         * rootcontext.cs: Unused fields clean-up.
4274         
4275         * namespace.cs: Made UsingEntry name private.
4276
4277 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4278
4279         * cs-tokenizer.cs, location.cs: Removed unused field.
4280
4281 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
4282             Raja R Harinath  <harinath@hurrynot.org>
4283
4284         Fix #379822
4285         * constant.cs (SideEffectConstant.value): Rename from 'left'.
4286         (SideEffectConstant.side_effect): Rename from 'right'.
4287         (SideEffectConstant..ctor): Normalize 'side_effect'.
4288         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
4289         value of this constant.
4290         * cfold.cs: Update to changes.
4291
4292 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4293
4294         * cs-paser.jay: Removed unused variable.
4295         
4296         * driver.cs: Made Compile instance method.
4297
4298 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
4299
4300         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
4301
4302 2008-04-15  Marek Safar  <marek.safar@gmail.com>
4303
4304         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
4305
4306 2008-04-13  Jb Evain  <jbevain@novell.com>
4307
4308         * namespace.cs: update the System.Core fullname for 2.1
4309         * driver.cs: update the list of required assemblies for 2.1.
4310         Merged from the Moonlight 2 branch.
4311
4312 2008-04-11  Marek Safar  <marek.safar@gmail.com>
4313
4314         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
4315         types and user defined operators. User operators arguments has to be checked
4316         for null value before invocation, which also means no operator is called
4317         when any argument is not convertible to unwrapped nullable type.
4318         
4319 2008-04-09  Marek Safar  <marek.safar@gmail.com>
4320
4321         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
4322         of Unary expressions to follow operator overloading rules precisely.
4323         Also fixes #321794, #323794
4324         
4325 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4326
4327         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
4328         expression.
4329         
4330 2008-04-08  Marek Safar  <marek.safar@gmail.com>
4331
4332         * expression.cs, ecore.cs: Implemented MemberInit expression.
4333         
4334 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
4335
4336         Fix mono/tests/exception4.cs
4337         * statement.cs (ExceptionStatement, TryCatch): Revert to using
4338         ec.NeedReturnLabel () rather emitting a 'nop'.
4339
4340         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
4341         simple heuristic.
4342         (TryCatch.SomeCodeFollows): Likewise.
4343         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
4344         for 'break', 'continue' and 'return' statements inside a try.
4345         We're fairly sure that the generated IL stream will have more
4346         instructions textually following the try.
4347         (FlowBranchingTryCatch): Likewise.
4348
4349         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
4350         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
4351         overrides.
4352
4353         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
4354         wrapper -- forward everything to CollectionForeach.
4355         (CollectionForeach.NonDisposableWrapper): New.
4356         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
4357         instead of a pop + branch to end.
4358
4359 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4360
4361         A fix for bug #377485
4362         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
4363         Propagate location for extension method groups. Report conversion failure at
4364         right place.
4365
4366 2008-04-07  Marek Safar  <marek.safar@gmail.com>
4367
4368         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
4369         ListInit and Field expressions.
4370
4371 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
4372
4373         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
4374         Since $PC is always -1 inside the body of MoveNext, the fault
4375         handler is a no-op.
4376         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
4377         * statement.cs (ExceptionStatement.emit_finally): Likewise.
4378         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
4379
4380         The denouement!  Fix #324708
4381         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
4382         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
4383         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
4384         'finally' inside the finally clause.
4385
4386         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
4387         inside an iterator.  Don't emit the body of the 'finally' inside
4388         the finally clause yet.
4389
4390         Use the ResumableStatement infrastructure for MoveNext ()
4391         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
4392         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
4393         'old_resume_points'.  Move dispatcher upfront.
4394         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
4395         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
4396         in an enumerator.  This encodes the main fix in this patch series
4397         -- we can only jump into the first instruction of a try from the
4398         outside, but we want to emit try/finally regions in iterators and
4399         resume in the middle of them.
4400
4401 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
4402
4403         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
4404         of NeedReturnLabel here.
4405
4406         Introduce a common point for emitting try/finally to IL
4407         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
4408         features of the various subclasses, which are now driven by ...
4409         (ExceptionStatement.EmitPreTryBody): ... this and ...
4410         (ExceptionStatement.EmitTryBody): ... this and the original
4411         EmitFinallyBody.
4412         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
4413         Remove DoEmit and update to follow above protocol.
4414
4415         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
4416         of the dispatcher are the same, skip emitting the 'switch'.
4417         * iterator.cs (Iterator.EmitDispose): Update to changes.
4418
4419         Clean up handling of 'using' statement
4420         * statement.cs (UsingTemporary): New.  Carved out of ...
4421         (Using): ... this.  Simplify drastically.  Handle exactly
4422         one variable.
4423         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
4424         or Using as appropriate.  If there are multiple variable declared,
4425         create nested Using statements.
4426         (resource_acquisition): Kill.
4427
4428         * statement.cs (ExceptionStatement.EmitForDispose): Use
4429         EmitFinallyBody, not EmitFinally.
4430
4431         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
4432         * iterator.cs: Update to changes.
4433
4434         Start using the ResumableStatement infrastructure
4435         * statement.cs (ResumeableStatement.PrepareForDispose): New.
4436         (ResumableStatement.EmitForDispose): New.
4437         (ExceptionStatement): Override them.
4438         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
4439         EmitForDispose to create the body of the Dispose method.  Don't
4440         use OldResumePoint.
4441
4442         * iterator.cs (Iterator.AddResumePoint): Move here from ...
4443         * statement.cs (Toplevel.AddResumePoint): ... here.
4444         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
4445         * flowanalysis.cs (FlowBranchingIterator): New.
4446         * codegen.cs (EmitContext): Update to changes.
4447
4448         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
4449         (Iterator.old_resume_points): Rename from 'resume_points'.
4450         (Iterator.MoveNextStatement): Remove unused class.
4451
4452         New infrastructure for try/finally in iterators (still unused)
4453         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
4454         (FlowBranchingToplevel.AddResumePoint): Hook into
4455         ToplevelBlock.AddResumePoint.
4456         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
4457         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
4458         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
4459         resume points and assign program-counter values.
4460         (ExceptionBlock.AddResumePoint): Collect resume points for
4461         de-muxer at the top of try block.
4462         * iterators.cs (Yield.CheckContext): Simplify.
4463         (Yield.Resolve): Use FlowBranching.AddResumePoint.
4464
4465 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
4466
4467         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
4468         argument to an ExitStatement.
4469         (FlowBranchingException): Refactor saved origins code.
4470         * statement.cs (ExitStatement): Update to cahges.
4471         * iterator.cs (YieldBreak): Likewise.
4472
4473         * statement.cs (ResumableStatement): New.  Common base class for
4474         YieldReturn and ExceptionStatement.
4475         (ExitStatement): New.  Common base class for Return and YieldBreak.
4476         (Return): Update to changes.
4477         * iterator.cs (YieldBreak): Likewise.
4478         * lambda.cs (ContextualReturn): Likewise.
4479
4480         Fix #377028
4481         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
4482         emit a meaningful error message.
4483
4484         Fix #324765, #319508
4485         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
4486         (VariableInfo.SetAssigned): Set it.
4487         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
4488         determine if CS0219 or CS0168 is appropriate.  Don't use
4489         flow-analysis information.
4490         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
4491         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
4492         (EmitContext.EndFlowBranching): ... this.
4493
4494 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4495
4496         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
4497
4498 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4499
4500         A fix for bug #376508
4501         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
4502         ImplicitConversionExists.
4503
4504 2008-04-03  Marek Safar  <marek.safar@gmail.com>
4505
4506         * expression.cs (Binary): Added remaining binary operators to expression
4507         tree builder.
4508
4509         * nullable.cs: Optimize shift with null argument.
4510
4511 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
4512
4513         Fix minor IL regression
4514         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
4515         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
4516         * cs-parser.jay (try_statement): Update to changes.
4517
4518         * statement.cs (TryFinally.need_exc_block): Delete.
4519         (TryFinally): Update to changes.
4520
4521         Now all ExceptionStatements are unconditional
4522         * statement.cs (CollectionForeach.DisposableWrapper): New.
4523         Extract out the try/finally code into a new wrapper.
4524         (CollectionForeach.Resolve): Use it to simplify the code.
4525
4526 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
4527
4528         Start at simplifying ExceptionStatement semantics a bit
4529         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
4530         * cs-parser.jay (try_statement): Update to changes.
4531         (opt_catch_clauses): Remove.
4532         * flowanalysis.cs: Update to changes.
4533         (FlowBranching.BranchingType.TryCatch): New.
4534         (FlowBranchingTryCatch): New.
4535
4536         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
4537         (FlowBranching.CreateBranching): Update to changes.
4538         (FlowBranchingBlock.AddSibling): Add sanity check.
4539         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
4540         Update to changes.
4541
4542         * iterators.cs (Iterator.MarkFinally): Remove.
4543         * statement.cs (ExceptionStatement): Update to changes.
4544
4545         Add support for skipping over finally blocks at runtime.  First
4546         in a series to fix #324708
4547         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
4548         (Iterator.EmitMoveNext): Initialize it.
4549         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
4550         branch over the body of the 'finally' clause.
4551
4552 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
4553
4554         Avoid lopsided use of Foo/DoFoo names
4555         * statement.cs (ExpressionStatement.EmitFinallyBody):
4556         Rename from EmitFinally.
4557         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
4558         * iterator.cs: Update to changes.
4559
4560 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4561
4562         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
4563         based on UserOperatorCall. More binary nullable operators clean up.
4564
4565 2008-04-02  Martin Baulig  <martin@ximian.com>
4566
4567         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
4568
4569 2008-04-02  Marek Safar  <marek.safar@gmail.com>
4570
4571         * nullable.cs: Merge user and empty conversions when lifting expression
4572         trees.
4573         
4574         * expression.cs (StringConcat): Implemented expression tree representation.
4575
4576 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4577
4578         * nullable.cs: When lifting null literal and a user operator exists, no call 
4579         is made.
4580         
4581 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4582
4583         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
4584         null.
4585
4586 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4587
4588         * nullable.cs, expression.cs: Use namespace instead heavily nested
4589         monster abstract class.
4590
4591 2008-04-01  Marek Safar  <marek.safar@gmail.com>
4592
4593         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
4594         lifting of null literal and user operators. Clean up of some temporary
4595         nullable hacks.
4596
4597 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
4598
4599         Fix #368224, test-629.cs
4600         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
4601         if it crossed an unwind-protect boundary.
4602         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
4603         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
4604         inside an unwind-protected region.
4605         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
4606         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
4607         'leave' instead of a 'br' if unwind-protected.
4608         (Iterator.EmitYieldBreak): Likewise.
4609
4610 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
4611
4612         * driver.cs: Only define versioninfo resources if no win32 resource
4613         file was specified.
4614
4615 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4616
4617         A fix for bug #372375
4618         * convert.cs: Fixed boxing of nullable types.
4619
4620 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4621
4622         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
4623         type.
4624
4625 2008-03-28  Marek Safar  <marek.safar@gmail.com>
4626
4627         A fix for bug #374619
4628         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
4629         
4630 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4631
4632         * lambda.cs: Check return type only for invocation.
4633         
4634 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4635
4636         A fix for bug #374214
4637         * ecore.cs: Correctly report argument type mismatch.
4638
4639 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4640
4641         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
4642         and not rely on broken IsEnum.
4643
4644 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4645
4646         * nullable.cs: New file, extracted from generic.cs.
4647         
4648         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
4649
4650 2008-03-27  Marek Safar  <marek.safar@gmail.com>
4651
4652         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
4653         predefined comparison operators and null literals.
4654         
4655         * report.cs: New warning ID.
4656         
4657 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4658
4659         A fix for bug #370577
4660         * lambda.cs: Check return type too.
4661
4662 2008-03-25  Marek Safar  <marek.safar@gmail.com>
4663
4664         A fix for bug #372846
4665         * class.cs: Automatic properties can be declared as unsafe.
4666
4667 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4668
4669         * location.cs: Use string based concatenation.
4670         
4671         * expression.cs: LiftedBinaryOperator is gmcs only.
4672         
4673 2008-03-20  Marek Safar  <marek.safar@gmail.com>
4674
4675         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
4676         conversions rules and expression trees.
4677
4678 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4679
4680         * delegate.cs: Use extension method source as delegate target.
4681
4682 2008-03-19  Marek Safar  <marek.safar@gmail.com>
4683
4684         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
4685         binary operations to be purely based on binary operations and optimized
4686         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
4687         and other ET refactoring.
4688         
4689         * typemanager.cs: Fixed warning.
4690         
4691 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4692
4693         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
4694         
4695         * symbolwriter.cs: Fixed.
4696
4697 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4698
4699         * anonymous.cs, driver.cs: Reset anonymous types counters.
4700
4701 2008-03-17  Marek Safar  <marek.safar@gmail.com>
4702
4703         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
4704         
4705         * class.cs: Use fullname for all type member definitions.
4706         
4707 2008-02-19  Martin Baulig  <martin@ximian.com>
4708
4709         * class.cs
4710         (IMethodData.EmitExtraSymbolInfo): New interface method.
4711         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
4712         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
4713         interface method here as an empty public virtual method.
4714
4715         * anonymous.cs
4716         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
4717         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
4718         CodeGen.SymbolWriter.SetRealMethodName().       
4719
4720 2008-02-18  Martin Baulig  <martin@ximian.com>
4721
4722         * anonymous.cs
4723         (ScopeInfo.EmitType): Override this and emit debugging
4724         information for captured variables.
4725         (RootScopeInfo.EmitType): Override this and emit symbol
4726         information for a captured `this'.
4727
4728 2008-02-15  Martin Baulig  <martin@ximian.com>
4729
4730         * iterators.cs: Emit debugging info.
4731
4732         * codegen.cs
4733         (EmitContext.Flags): Add `OmitDebuggingInfo'.
4734         (EmitContext.OmitDebuggingInfo): New public property.
4735
4736         * statement.cs
4737         (While): Override Emit() and don't emit symbol info there; do it
4738         inside DoEmit() instead.
4739         (Block.Emit): Omit symbol information while emitting the scope
4740         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
4741         block logic.
4742         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
4743         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
4744         .ctor to make `IsIterator' work.
4745
4746 2008-03-14  Martin Baulig  <martin@ximian.com>
4747
4748         * symbolwriter.cs: Added the new symbol writer function from the
4749         debugger's `terrania' branch; temporarily enclose them inside
4750         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
4751         my vacations.
4752
4753 2008-03-14  Martin Baulig  <martin@ximian.com>
4754
4755         * symbolwriter.cs
4756         (SymbolWriter): Make this a public static class.
4757
4758         * codegen.cs
4759         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
4760         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
4761
4762 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4763
4764         A fix for bug #370577
4765         * statement.cs, lambda.cs: Added extra limitations when dealing with void
4766         return type.
4767         
4768 2008-03-14  Marek Safar  <marek.safar@gmail.com>
4769
4770         * typemanager.cs (CSharpName): Made 250 times faster.
4771
4772 2008-03-13  Marek Safar  <marek.safar@gmail.com>
4773
4774         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
4775         
4776 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4777
4778         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
4779         crash when predefined field does not exist.
4780         
4781 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4782
4783         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
4784         
4785 2008-03-12  Marek Safar  <marek.safar@gmail.com>
4786
4787         * class.cs (FixedField): Don't crash when contructors are missing.
4788
4789 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4790
4791         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
4792         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
4793         check internal types accessibility for internal and external types.
4794         Replaced EnumToUnderlying by GetEnumUnderlyingType.
4795
4796 2008-03-11  Marek Safar  <marek.safar@gmail.com>
4797
4798         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
4799         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
4800         attribute.cs, statement: Use corect instance of predefined types (work
4801         related to #364674).
4802
4803 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4804
4805         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
4806         
4807 2008-03-07  Marek Safar  <marek.safar@gmail.com>
4808
4809         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
4810         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
4811         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
4812         predefined types clean up, delayed predefined types members initialization
4813         (work related to #364674).
4814
4815 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4816
4817         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
4818         
4819 2008-03-05  Marek Safar  <marek.safar@gmail.com>
4820
4821         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
4822         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
4823         predefined types clean up (work related to #364674).
4824
4825 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4826
4827         * ecore.cs: Print an error message instead of throwing exception.
4828         
4829 2008-03-04  Marek Safar  <marek.safar@gmail.com>
4830
4831         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
4832         expression.cs, statement.cs: Unififed null literal representation.
4833
4834 2008-03-03  Marek Safar  <marek.safar@gmail.com>
4835
4836         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
4837         expression.cs: Refactored binary operators resolve phase and improved speed.
4838         The nullable code is still missing and won't work correctly, more fixes
4839         required.
4840
4841         It also fixes #323726, #324312, #324248, and many other unreported issues.
4842
4843 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
4844
4845         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
4846         instead of 'gmcs'.
4847
4848 2008-02-27  Marek Safar  <marek.safar@gmail.com>
4849
4850         * ecore.cs: Clean-up and split BetterConversion.
4851         
4852 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
4853
4854         Fix #363791
4855         * enum.cs (EnumMember.Value): Only access 'value' if
4856         ResolveValue says it's ok.
4857         (EnumMember.DoResolveValue): Don't set prev_member.value.
4858         (Enum.GetDefinition): Reverse arguments of Equals --
4859         EnumMember.Value can return 'null'.
4860
4861         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
4862
4863 2008-02-22  Marek Safar  <marek.safar@gmail.com>
4864
4865         * generic.cs, expression.cs: More ongoing work on expression trees.
4866         
4867 2008-02-21  Marek Safar  <marek.safar@gmail.com>
4868
4869         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
4870         handle missing matches when mutiple operators exist.
4871         
4872 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4873
4874         A fix for bug #363218
4875         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
4876         initializers.
4877         
4878 2008-02-20  Marek Safar  <marek.safar@gmail.com>
4879
4880         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
4881         update. This time to deal correctly with SideEffectConstant expression used
4882         as an argument for another constant folding.
4883
4884 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
4885
4886         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
4887         MethodBuilder.
4888
4889 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4890
4891         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
4892
4893 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4894
4895         A fix for bug #328136
4896         * expression.cs: Do not fold immediately LogicalAnd operators when the left
4897         side is a false constant, because we still need to evaluate the right-hand
4898         side.
4899
4900         * statement.cs (If): Emit two types of boolean constants (simple constant,
4901         side-effect constant).
4902
4903 2008-02-19  Marek Safar  <marek.safar@gmail.com>
4904
4905         * constant.cs (SideEffectConstant): Don't emit boolean constant.
4906
4907         * expression.cs: Fold immediately LogicalAnd operators when both sides are
4908         constants.
4909
4910 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4911
4912         A fix for bug #361457
4913         * ecore.cs (IsApplicable): Params methods have lower priority.
4914
4915         * support.cs: Return correct parameter modifier for params types.
4916
4917 2008-02-18  Marek Safar  <marek.safar@gmail.com>
4918
4919         * generic.cs (TypeParameter): Cache attribute target name.
4920
4921         * support.cs: Removed unused variable.
4922
4923         * typemanager.cs: Removed debugging leftover.
4924
4925         * ecore.cs: Use local type instead of a property;
4926
4927         * class.cs (VerifyMembers): Consider also parent to test whether type member
4928         is local or public.
4929
4930         * expression.cs (FullMethodDesc): Removed.
4931
4932         * attribute.cs (IsValidArgumentType): Made static.
4933
4934 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
4935
4936         Cleanup to be more readable.
4937         * Makefile (GMCS_PROFILE): Remove.
4938         (COMPILER_NAME): New helper.
4939
4940 2008-02-15  Miguel de Icaza  <miguel@novell.com>
4941
4942         * cs-tokenizer.cs: if a conditional expression happens inside a
4943         (...) this also means that we do not need to de-ambiguate between
4944         an parenthesized expression and a cast.
4945
4946         Fixes 346484.
4947
4948         * constant.cs (SideEffectConstant): a constant value that happens
4949         to have a side effect.
4950
4951         Fixes the build regressions introduced by the fix for #359789
4952
4953 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
4954
4955         * expression.cs (Conditional.Emit): when emitting the ternary
4956         operator, use local variables to generate code verifiable code.
4957
4958         The verifier cannot infer that the type on stack before the
4959         stloc.0 is executed is of type ParentB. This happens because the
4960         stack merge algorithm uses only parent types when deciding which
4961         is the common type.  This is described in Part III 1.8.1.3 of ECMA
4962         335.
4963
4964         This code compiled with mcs is not verifiable under MS. The MS
4965         verifier picks the first common interface of Foo and Bar, which is
4966         wrong, but doesn't use a full join type of the 2 interfaces.
4967
4968         CSC uses a clever hack to compile such code in a verifiable
4969         way. It stores the intermediate values in a local variable with
4970         the expected type.
4971
4972         Fixes: #358102
4973
4974 2008-02-14  Miguel de Icaza  <miguel@novell.com>
4975
4976         * expression.cs: Do not fold BitwiseAnd operators when the left
4977         side is a false constant, because we still need to evaluate the
4978         right-hand side.
4979
4980         Fixes #359789
4981
4982         * support.cs: Instead of throwing an InternalErrorException when
4983         the position of the stream is outside the boundary of our buffer,
4984         reset the state of the reader, and restart the reading from the
4985         beginning of the file.
4986
4987 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4988
4989         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
4990
4991 2008-02-14  Marek Safar  <marek.safar@gmail.com>
4992
4993         A fix for bug #361686
4994         * decl.cs: A protected types used inside a private class which parents
4995         derives from the protected class are accessible.
4996
4997 2008-02-13  Marek Safar  <marek.safar@gmail.com>
4998
4999         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5000         the parameterless constructor.
5001
5002 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5003
5004         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5005         lookup methods to use standard member cache when doing member lookup.
5006
5007 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5008
5009         * driver.cs: Don't report full path for referenced module as assembly error.
5010
5011 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5012
5013         * Makefile: Fixed `qh' target to work on all machines.
5014
5015         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5016         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5017         and HasElementType with TypeManager implementation.
5018
5019 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5020
5021         A fix for bugs #325134, #359749
5022         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5023         first binds point to non-method member expression.
5024
5025 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5026
5027         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5028
5029 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5030
5031         A fix for bugs #321394, #323028
5032         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5033         Reworked naive IsAccessibleAs implementation to handle nested types.
5034
5035 2008-02-05  Jb Evain  <jbevain@novell.com>
5036
5037         * class.cs: use generic type comparison for parameters
5038         as well.
5039
5040 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5041
5042         A fix for bug #325372
5043         * class.cs: Use generic type comparison when testing method signatures.
5044
5045 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5046
5047         A fix for bug #357047
5048         * ecore.cs: Applied C# 3.0 changes to better conversion.
5049
5050 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5051
5052         A fix for bug #358374
5053         * cs-parser.jay: Correctly set modifiers for all constructor types.
5054
5055 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5056
5057         A fix for bug #355251
5058         * generic.cs: Added base class constraint based type inference.
5059
5060 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5061
5062         A fix for bug #357255
5063         * decl.cs: One more missing visibility check.
5064
5065 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5066
5067         * support.cs: Fixed broken return.
5068
5069 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5070
5071         * report.cs: Correctly reset warnings count after probing.
5072
5073 2008-01-25  Martin Baulig  <martin@ximian.com>
5074
5075         * namespace.cs
5076         (NamespaceEntry.SymbolFileID): Make this work again after
5077         MemberName.ToString() is gone.
5078
5079 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5080
5081         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5082         expressions.
5083
5084 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5085
5086         * generic.cs: Use full implicit conversion for type inference fixing.
5087
5088 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5089
5090         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5091         Fixed user operator conversions.
5092
5093 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5094
5095         * generic.cs: Do nullable type to null comparison optimization during
5096         resolve phase.
5097
5098 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5099
5100         A fix for bug #355163
5101         * generic.cs: Enabled l-value resolve on nullable expressions.
5102
5103 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5104
5105         A fix for bug #353986
5106         * class.cs: Ingore static ctors with parameters for any further checks.
5107
5108 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5109
5110         A fix for bug #354310
5111         * namespace.cs: Removed redundant check.
5112
5113 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5114
5115         A fix for bug #354928
5116         * expression.cs: ElementInitializers can be resolved only once.
5117
5118 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5119
5120         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5121         Condition expressions.
5122
5123 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5124
5125         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5126
5127 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5128
5129         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5130         not allowed.
5131
5132         * generic.cs: Implemented coalesce expression.
5133
5134 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5135
5136         A fix for bug #355145
5137         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5138         expression tree type inference.
5139
5140 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5141
5142         Fix #354663
5143         * expression.cs (Binary.IsUnsignedType): Fix typo.
5144
5145 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5146
5147         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5148
5149 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5150
5151         A fix for bug #355161
5152         * ecore.cs, expression.cs: Wider range of extension method supported
5153         expressions.
5154
5155 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5156
5157         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5158         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5159         bug #354970.
5160
5161 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5162
5163         A fix for bug #355148
5164         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5165
5166 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5167
5168         * expression.cs (CreateExpressionTree): Add support for or and
5169         logical or, and indent following the coding conventions.
5170
5171         * typemanager.cs (LinqExpression): renamed from
5172         ExpressionTreeManager, for a shorter name.
5173
5174         Use TypeManager.CoreLookupType to lookup types from our core
5175         assemblies and turn those into "Type" variables.
5176
5177         Consumers that previously used "Namespace" and "Type" from this
5178         class should instead use the TypeExpression which is a type that
5179         is fully resolved (without involving the regular C# resolution
5180         rules). 
5181
5182         This typically looks like this:
5183
5184         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5185         new MemberAccess (texpr, name, type_arguments, loc)
5186
5187         This avoids the problem in: #355178
5188
5189 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5190
5191         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5192         feature in parser only as we do in other cases.
5193         
5194 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5195
5196         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5197         typemanager.cs: A refactoring of params arguments to reuse existing
5198         expressions (params -> array initializer) to emit params argument instead
5199         of specialized handling.
5200         It was required by expression tree implementation and it has other benefits
5201         as well, we now apply same optimization for params arguments as we do for
5202         array initializers.
5203         
5204 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5205
5206         A fix for bug #353526
5207         * generic.cs: A type inference of params arguments may not required any
5208         temporary array creation.
5209         
5210 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5211
5212         A fix for bug #353534
5213         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5214         supported for delegates only.
5215         
5216 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5217
5218         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5219         type for more than 1 candidates.
5220         
5221 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5222
5223         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5224         expressions.
5225         
5226 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5227
5228         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5229         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5230         operator) expressions. 
5231                 
5232 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5233
5234         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5235         not accessed from the generated IL.
5236
5237 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5238
5239         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5240         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5241         statement.cs: The first expression tree implementation drop, mostly
5242         infrastructure work.
5243
5244 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5245
5246         * ecore.cs (IsNestedChild): Refactored.
5247
5248 2008-01-11  Marek Safar  <marek.safar@gmail.com>
5249
5250         * lambda.cs: Don't use a cast on unknown expression statement.
5251
5252 2008-01-10  Geoff Norton  <gnorton@novell.com>
5253
5254         * cs-tokenizer.cs: One more token to distinguish between method and lambda
5255         arguments
5256
5257 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5258
5259         * doc.cs: Report better /doc crash details.
5260         
5261 2008-01-09  Marek Safar  <marek.safar@gmail.com>
5262
5263         A fix for bug #352536
5264         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
5265
5266 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5267
5268         A fix for bug #352287
5269         * ecore.cs, expression.cs: Do `this' access checking in all member access
5270         expressions.
5271         
5272 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5273
5274         * rootcontext.cs, driver.cs: Switch to linq mode by default.
5275         
5276         * report.cs: Reset message stacks.
5277         
5278 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5279
5280         * generic.cs (InferInPhases): Correctly calculate params position.
5281         
5282 2008-01-08  Marek Safar  <marek.safar@gmail.com>
5283
5284         * cs-tokenizer.cs: No need to parse full string when parsing lambda
5285         arguments.
5286
5287 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5288
5289         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
5290         
5291         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
5292         
5293         * driver.cs: Updated --help option.
5294         
5295 2008-01-07  Marek Safar  <marek.safar@gmail.com>
5296
5297         * generic.cs (InferParamsTypeArguments): Removed.
5298         (InferInPhases): Add params type inference.
5299         (LowerBoundInference): Fixed scoring mechanism.
5300         
5301         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
5302         
5303 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
5304
5305         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
5306         byte array for unsigned "baked" assemblies.
5307
5308 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
5309
5310         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
5311         array for assemblies that are not strongnamed.
5312
5313 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5314
5315         A fix for bug #351481
5316         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
5317         declaring type for nested generic types.
5318         
5319 2008-01-04  Marek Safar  <marek.safar@gmail.com>
5320
5321         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
5322         instead of ToString.
5323         
5324 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5325
5326         A fix for bug #351047
5327         * expression.cs (Binary.ResolveOperator): Allow equality operators between
5328         null and structs only when equality and inequality operators are defined
5329         either as an user-operators or predefined operators.
5330         
5331 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5332
5333         A fix for bug #351047
5334         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
5335         
5336 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5337
5338         A fix for bug #351257
5339         * cs-tokenizer.cs: Advance line number for '\r' correctly.
5340         
5341 2008-01-03  Marek Safar  <marek.safar@gmail.com>
5342
5343         A fix for bug #351157
5344         * class.cs (Using): Fixed yet another broken cloning.
5345         
5346         (Block): Put back more sensible default value for statements.
5347         
5348 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
5349
5350         * codegen.cs: Allow AssemblyVersion with only major version component.
5351         Fixes bug #351055.
5352
5353 2007-12-29  Marek Safar  <marek.safar@gmail.com>
5354
5355         A fix for bug #324654
5356         * class.cs: Use FullName property as member name.
5357
5358 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5359
5360         A fix for bug #342117
5361         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
5362         constructor constraint.
5363
5364 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5365
5366         A fix for bug #338273
5367         * class.cs (ProbertyBase): Access modifier checks are required for overrides
5368         only.
5369
5370 2007-12-28  Marek Safar  <marek.safar@gmail.com>
5371
5372         A fix for bug #350839
5373         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
5374
5375 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5376
5377         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5378         GHOP:
5379         
5380         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5381
5382         * statement.cs: Changed some Hashtables to use HybridDictionaries
5383         instead. It was observed that some HashTables only contained a few
5384         items in the vast majority of cases. Since HybridDictionary is
5385         more efficient on small sets (<10 elements), "known_variables"
5386         from class ExplicitBlock as well as "labels" and "constants " from
5387         class Block were changed to HybridDictionaries. 
5388
5389         Atsai results: (56216kb->54987kb)
5390
5391         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
5392
5393
5394 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
5395
5396         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
5397         GHOP:
5398         
5399         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
5400         
5401         * expression.cs: foreach loop to for loop, saved on allocation of
5402         enumerator (59333kb->59141kb)
5403
5404         * statement.cs. Changed foreach loops to for loops, saved on
5405         allocation of enumerator (59141kb->59006kb)
5406
5407         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
5408         when constructed with no specified capacity. This was causing a
5409         few ArrayLists to allocate more memory than they would potentially
5410         need in the Block class and MemberCache class. Setting the
5411         ArrayLists to construct with a capacity of 1 saves some
5412         memory. (56216kb->55585kb)
5413
5414 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5415
5416         A fix for bug #347189 (2nd issue)
5417         * expression.cs (MemberAccess): Nested type can be found in base non-generic
5418         type.
5419
5420 2007-12-27  Miguel de Icaza  <miguel@novell.com>
5421         
5422         * report.cs: Do not use colors if stdout and stderr are not a
5423         terminal.
5424
5425 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5426
5427         A fix for bug #346998
5428         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
5429         overloads.
5430
5431 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5432
5433         A fix for bug #343465
5434         * class.cs: Explicit method name for nested types uses dots only.
5435
5436 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5437
5438         A fix for bug #343707
5439         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
5440
5441 2007-12-27  Marek Safar  <marek.safar@gmail.com>
5442
5443         * ecore.cs: Report type inference errors only when arguments count matches
5444         parameter count.
5445         
5446         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
5447         
5448         * expression.cs, report.cs: New warning.
5449         
5450         * typemanager.cs: Catch anonymous method type too.
5451
5452 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5453
5454         A fix for bug #346379
5455         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
5456
5457 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5458
5459         A fix for bug #347359
5460         * expression.cs (Invocation): Don't resolve already resolved expression.
5461
5462 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5463
5464         A fix for bug #347189
5465         * class.cs (FixedField): Use non-dependent code only in the define phase.
5466
5467 2007-12-23  Marek Safar  <marek.safar@gmail.com>
5468
5469         A fix for bug #348076
5470         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
5471
5472 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5473
5474         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
5475         discovered extension methods.
5476
5477 2007-12-22  Marek Safar  <marek.safar@gmail.com>
5478
5479         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
5480         method.
5481
5482 2007-12-21  Miguel de Icaza  <miguel@novell.com>
5483
5484         * report.cs (ErrorMessage): Add support for using colors on
5485         terminals that support it. 
5486
5487 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5488
5489         * ecore.cs: Use information about expanded params for error reporting.
5490
5491 2007-12-21  Marek Safar  <marek.safar@gmail.com>
5492
5493         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
5494         and logic for params overloads.
5495         
5496 2007-12-15  Miguel de Icaza  <miguel@novell.com>
5497
5498         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
5499         as this is also created from the parser.  Fixes #349034
5500
5501 2007-12-12  Miguel de Icaza  <miguel@novell.com>
5502
5503         * statement.cs (Throw.CloneTo): it is valid to have empty
5504         expressions for throw. 
5505
5506 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5507
5508         * cs-parser.jay: Set delegate constraint parsing region correctly.
5509
5510 2007-12-03  Marek Safar  <marek.safar@gmail.com>
5511
5512         A fix for bug #345467
5513         * typemanager.cs (IsEqual): Compare generic parameters position only.
5514         
5515 2007-11-28  Marek Safar  <marek.safar@gmail.com>
5516
5517         * expression.cs (BaseAccess): Type arguments can be null.
5518
5519 2007-11-27  Raja R Harinath  <harinath@gmail.com>
5520
5521         * statement.cs (Block.Resolve): Ensure flow-branching tree is
5522         consistent even when an error has occured.
5523         (Switch.Resolve): Likewise.
5524
5525 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5526
5527         A fix for bug #334505
5528         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
5529         overrides.
5530         
5531 2007-11-22  Marek Safar  <marek.safar@gmail.com>
5532
5533         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
5534         refactorings required to resolve extension methods correctly when mixing
5535         generics and non-generics members.
5536         
5537 2007-11-20  Marek Safar  <marek.safar@gmail.com>
5538
5539         A fix for bug #342584
5540         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
5541         conversion.
5542         
5543 2007-11-19  Marek Safar  <marek.safar@gmail.com>
5544
5545         A fix for bug #342512
5546         * delegate.cs: Use delegate argument expression when is available. Don't
5547         emit virtual call when class is sealed.
5548         
5549 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5550
5551         A fix for bug #325423
5552         * assign.cs (FieldInitializer): Use resolved expression for emit.
5553         
5554         * class.cs: Print less confusing error message.
5555         
5556 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5557
5558         * cs-tokenizer.cs: Removed GMCS ifdefs.
5559         
5560         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
5561         mcs.
5562         
5563         * cs-parser.jay: Disabled nullable check.
5564         
5565         * generic-mcs: Copied more generic stuff.
5566                 
5567 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5568
5569         * gcs-parser.jay: Merged to cs-parser.jay.
5570         
5571         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
5572         * *.csproj, *.sources: Updated to use only jay parser file.
5573
5574 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5575
5576         * gcs-parser.jay: Added nullable and default expression feature checks.
5577         
5578 2007-11-16  Marek Safar  <marek.safar@gmail.com>
5579
5580         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
5581         it fixes many TODOs and hidden bugs.
5582         
5583         * expression: Removed duplicate error check.
5584
5585 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5586
5587         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
5588         implicitly type local variable only when it is used in a declaration.
5589
5590 2007-11-15  Marek Safar  <marek.safar@gmail.com>
5591
5592         * attribute.cs: Use CS0612 for empty strings.
5593
5594 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5595
5596         * lambda.cs, statement.cs: Contextual return may act as a statement.
5597
5598 2007-11-14  Marek Safar  <marek.safar@gmail.com>
5599
5600         A fix for a regression cause by #324222
5601         * class.cs: Don't report unused even when it implements an interface.
5602         
5603 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5604
5605         A fix for bug #341205
5606         * ecore.cs, expression.cs: Method group expression cannot do static
5607         method access with an instance reference check before overloading takes
5608         a place.
5609         
5610 2007-11-13  Marek Safar  <marek.safar@gmail.com>
5611
5612         A fix for bug #325359
5613         * class.cs: Use predictable name for automatically generated property.
5614         
5615 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5616
5617         A fix for bug #324996
5618         * expression.cs (Is): Handle case where D is nullable and T is not
5619         correctly.
5620         
5621         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
5622         
5623 2007-11-12  Marek Safar  <marek.safar@gmail.com>
5624
5625         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
5626         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
5627         Flush small error reporting changes.
5628         
5629 2007-11-09  Marek Safar  <marek.safar@gmail.com>
5630
5631         A fix for bug #324996
5632         * expression.cs: Rewrote Is expression implementation to work with
5633         generics, nullable types, anonymous method. A const result expression 
5634         uses existing infrastructure instead of custom not fully-featured one.
5635         
5636 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5637
5638         A fix for bug #340202
5639         * class.cs: Consider generics for volatile field.
5640
5641 2007-11-08  Marek Safar  <marek.safar@gmail.com>
5642
5643         A fix for bug #335594
5644         * expression.cs: Use conversion rules when handling string addition.
5645         
5646 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5647
5648         A fix for bug #336651
5649         * expression.cs: Fixed a crash when probing is on.
5650         
5651 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5652
5653         A fix for bug #324242
5654         * covert.cs: Added a conversion from any nullable-type with an 
5655         underlying enum-type to the type System.Enum.
5656         
5657 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5658
5659         A fix for bug #324222
5660         * class.cs: Report all non-used event fields.
5661         
5662 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5663
5664         A fix for bug #325161
5665         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
5666         qualifier for generic types.
5667         
5668 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5669
5670         A fix for bug #322971
5671         * expression.cs, ecore.cs: Added intermediate result value check for
5672         indexers. 
5673         
5674 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5675
5676         A fix for bug #324754
5677         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
5678         when it was requested.
5679
5680 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5681
5682         A fix for bug #325101
5683         * expression.cs: Do type not value comparison for `is' expression.
5684
5685 2007-11-07  Marek Safar  <marek.safar@gmail.com>
5686
5687         A fix for bug #320236
5688         * convert.cs: Don't apply user conversion on underlying target type.
5689
5690 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5691
5692         * expression.cs: Don't use unresolved expression for error reporting.
5693  
5694 2007-11-06  Marek Safar  <marek.safar@gmail.com>
5695
5696         A fix for bugs #337712, #324490
5697         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
5698         overloading resolution too.
5699         
5700         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
5701         the process consistent and more robust.
5702         
5703         * expression.cs, linq.cs, report.cs: Update.
5704
5705 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5706
5707         A fix for bug #332909
5708         * attribute.cs: Resolve attributes in correct context using error
5709         handling procedure.
5710         
5711         * rootcontext.cs: Define Obsolete attribute members as core members.
5712         
5713 2007-11-02  Marek Safar  <marek.safar@gmail.com>
5714
5715         * statement.cs: Removed unused methods.
5716         
5717 2007-10-31  Wade Berrier  <wberrier@novell.com>
5718
5719         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
5720         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
5721         during 'make dist')
5722
5723 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5724
5725         A fix for bug #338102
5726         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
5727         methods registered as non-generics.
5728         
5729 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5730
5731         A fix for bugs #337712, #324490
5732         * delegate.cs: Delegate covariance and contravariance is not allowed for
5733         value types.
5734         
5735 2007-10-31  Marek Safar  <marek.safar@gmail.com>
5736
5737         A fix for bug #337719 
5738         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
5739         `from' keyword.
5740         
5741 2007-10-30  Marek Safar  <marek.safar@gmail.com>
5742  
5743         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
5744
5745 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5746  
5747         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
5748         query expressions.
5749
5750 2007-10-29  Raja R Harinath  <rharinath@novell.com>
5751
5752         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
5753
5754 2007-10-29  Marek Safar  <marek.safar@gmail.com>
5755  
5756         A fix for bug #334652
5757         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
5758         extension methods when we have not found the best candidate in normal
5759         container.
5760
5761 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5762
5763         * AssemblyInfo.cs: Keep up-to-date.
5764
5765 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5766
5767         * Makefile: Fixed generics compiler name.
5768         
5769 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5770
5771         * lambda.test: removed, lambda parsing is done differently.
5772         
5773         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
5774
5775 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
5776
5777         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
5778
5779 2007-10-27  Marek Safar  <marek.safar@gmail.com>
5780
5781         * Makefile, *.sources : All C# compilers are in mcs folder.
5782         
5783         * *.cs: Use existing 2_1 define for smcs.
5784
5785 2007-10-26  Marek Safar  <marek.safar@gmail.com>
5786
5787         A fix for bug #335847
5788         * assign.cs, expression.cs: Couple of changes to avoid creating a
5789         temporary variable for each object initializer assignment statement. It
5790         simplifies struct initialization too, otherwise two temporary variables
5791         would be required.
5792         Implemented optimization of redundant default element initializers.
5793         
5794 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5795
5796         A fix for bug #336766
5797         * expression.cs (Class.CheckBase): Use generic name when method is
5798         generic.
5799         
5800 2007-10-25  Marek Safar  <marek.safar@gmail.com>
5801
5802         A fix for bug #334737
5803         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
5804         variable and not variable argument for prepared copies.
5805
5806 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5807
5808         A fix for bug #325110
5809         * class.cs, expression.cs, attribute.cs: Use open generic method when
5810         checking conditional attribute.
5811         
5812 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5813
5814         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
5815         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
5816         FeatureIsNotAvailable.
5817
5818 2007-10-24  Marek Safar  <marek.safar@gmail.com>
5819
5820         ** C# 3.0 Partial methods
5821         
5822         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
5823         methods support. Because of member cache issue with generics only
5824         non-generics partial methods are fully supported.
5825         
5826 2007-10-23  Marek Safar  <marek.safar@gmail.com>
5827         
5828         * class.cs, decl.cs: Rewrote member overloads check to cope with 
5829         generics and to use member cache for member checking. It also improves
5830         performance and fixes remaining overloads issues.
5831         
5832 2007-10-20  Marek Safar  <marek.safar@gmail.com>
5833         
5834         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
5835         roottypes.cs, typemanager.cs:
5836                 
5837         A member cache creation logic changed to add members immediately and
5838         not rely on fallback. The member cache is now only prefered way
5839         how to access and find type declaration members. It saves 5 MB of memory
5840         during MWF compilation and makes code ready for more optimizations and
5841         clean-ups, it's also a pre-requirement for partial methods.
5842         
5843 2007-10-18  Raja R Harinath  <harinath@gmail.com>
5844
5845         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
5846         handling for generic parameters.
5847
5848 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5849         
5850         * class.cs (FixedField): Removed redundant volatile check.
5851         
5852 2007-10-15  Marek Safar  <marek.safar@gmail.com>
5853         
5854         * class.cs, decl.cs: Fixed overload members verification to do only one
5855         check per possible collision.
5856         
5857 2007-10-13  Marek Safar  <marek.safar@gmail.com>
5858         
5859         A fix for bug #325478
5860         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
5861         and create only one disposable flags container.
5862         
5863 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5864         
5865         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
5866         * statement.cs (Fixed): Fixed variables cloning.
5867         
5868 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5869         
5870         A fix for bug #333342
5871         * class.cs (EventField): Don't mark value type event as synchronized. 
5872         
5873 2007-10-12  Marek Safar  <marek.safar@gmail.com>
5874         
5875         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
5876         inference to identify best candidate method correctly.
5877         (ProperyExpr): A range variable is read only and cannot be modified.
5878         
5879 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5880         
5881         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
5882         logic to identify best candidate method correctly.
5883         
5884 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5885         
5886         * location.cs (Equals, GetHashCode): Removed.
5887         
5888 2007-10-11  Marek Safar  <marek.safar@gmail.com>
5889         
5890         * report.cs: Implemented message recorder. It is used mainly for lambda
5891         expressions to capture otherwise swallowed error messages.
5892         
5893         * anonymous.cs, lambda.cs.cs: Do full parameters check.
5894
5895         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
5896         and not at the top.
5897         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
5898                 
5899         * expression.cs (MemberAccess): Always report lookup failure.
5900         
5901         * location.cs: Implemented Equals, GetHashCode.
5902         
5903         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
5904         
5905 2007-10-10  Jb Evain  <jbevain@novell.com>
5906
5907         * codegen.cs: re-enable assembly version check.
5908
5909 2007-10-09  Marek Safar  <marek.safar@gmail.com>
5910         
5911         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
5912         checks.
5913         
5914         * namespace.cs (UsingAlias): Do correct version check.
5915         
5916 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5917         
5918         * expresison.cs, ecore.cs: Issue extension method error message when
5919         appropriate.
5920         
5921         * rootcontext.cs: Added ISO_2 compiler mode option.
5922
5923 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5924         
5925         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
5926          message.
5927         
5928 2007-10-08  Marek Safar  <marek.safar@gmail.com>
5929         
5930         * attribute.cs (GetString, GetBoolean): Work with both literal and
5931         constant.
5932         
5933         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
5934         Moved method overload specific methods to MethodGroupExpr.
5935         
5936         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
5937         it should be less memory consuming.
5938         
5939 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
5940
5941         * codegen.cs: remove the assembly version check until the buildbot is
5942         fixed.
5943
5944 2007-10-07  Jb Evain  <jbevain@novell.com>
5945
5946         * attribute.cs (Attribute.GetString): if the value
5947         expression is a StringConstant, return its string value.
5948
5949 2007-10-07  Jb Evain  <jbevain@novell.com>
5950
5951         * typemanager.cs: add `assembly_version_attribute_type`.
5952         * codegen.cs: on attribute emission, check that the
5953         AssemblyVersionAttribute doesn't overflow.
5954
5955 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5956         
5957         A fix for bug #324677
5958         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
5959         parent container of a scope container with currently resolved one. 
5960         
5961 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5962         
5963         A fix for bug #325534
5964         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
5965         only.
5966         
5967 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5968         
5969         A fix for bug #327504
5970         * class.cs (Operator.Define): Refactored implicit and explicit user
5971         operator conversion rules.
5972         
5973 2007-10-05  Marek Safar  <marek.safar@gmail.com>
5974         
5975         A fix for bug #327520
5976         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
5977         
5978 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5979         
5980         A fix for bug #328022
5981         * class.cs (MethodData.Define): Use correct method to check whether
5982         a method implementents an accessor.
5983         
5984 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5985         
5986         A fix for bug #330069
5987         * statement.cs (Fixed.Resolve): Read the first array element only when
5988         an array is instantiated. 
5989         
5990 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5991         
5992         * expression.cs, assign.cs, generics.cs: Print correct operator when
5993         compound assignment is used.
5994         
5995 2007-10-04  Marek Safar  <marek.safar@gmail.com>
5996         
5997         A fix for bug #325841
5998         * expression.cs (ArrayAccess): Use full argument cloning only for
5999         string compound concatenation.
6000         
6001 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6002         
6003         A fix for bug #328774
6004         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6005         assignment.
6006         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6007         assignment.
6008
6009 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6010
6011         Fix #328490
6012         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6013         Event accessibility checks here.  Remove some bogus code that
6014         accidently made GenericMethods work.
6015         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6016
6017 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6018         
6019         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6020         
6021         * statement.cs (Block): Refactored AddVariable to allow error handling
6022         customization.
6023         
6024         * generic.cs: New stub.
6025         
6026 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6027         
6028         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6029         flag.
6030         
6031 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6032
6033         * class.cs: Use partial container to record whether any partial part
6034         contains static field initializer and therefore default contructor has
6035         to be defined.
6036         
6037 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6038
6039         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6040         mono-list when only one of two partial parts has defined accessibility
6041         modifier.
6042         
6043 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6044
6045         A fix for bug #82845
6046         
6047         * class.cs (TypeContainer): Set correct resolve context for all field
6048         initializers.
6049         
6050 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6051
6052         * assign.cs: Fixed a crash when field is resolved twice with an error.
6053         
6054         * codegen.cs: Changed InFieldInitializer to be flag.
6055         
6056         * anonymous.cs, ecore.cs, expression.cs: Update after
6057         IsInFieldInitializer rename.
6058         
6059         * const.cs: Removed unused parameter.
6060         
6061         * class.cs: Changed the way how we resolve and emit field initializers.
6062         The field initilizers have to have access to contructor block to emit
6063         compiler generated code.
6064
6065 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6066
6067         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6068         generics use TypeContainer instead.
6069         
6070 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6071         
6072         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6073
6074         * lambda.cs (ResolveParameters): Use more powerful
6075         InflateGenericArgument.
6076         
6077         * parameters.cs: Better exception message.
6078                 
6079 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6080
6081         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6082         correct expression block type. 
6083         
6084         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6085         
6086         * expression.cs (Invocation): Extracted method group resolve to
6087         DoResolveOverload.
6088         
6089 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6090
6091         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6092         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6093         
6094         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6095         generic extension methods.
6096
6097 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6098
6099         A fix for bug #82676 (Do I get it right now?)
6100         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6101         object before a standard conversion is applied.
6102         
6103 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6104
6105         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6106         #82676.
6107         
6108 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6109
6110         A fix for bug #82676
6111         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6112         non-generic interface types.
6113         
6114 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6115
6116         A fix for bug #82690
6117         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6118         
6119 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6120
6121         A fix for bug #82571
6122         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6123         modifier for container based methods.
6124         
6125 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6126
6127         A fix for bug #82676
6128         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6129         any interface-type T means to any of interface type T.
6130
6131 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6132
6133         * namespace.cs: We have 2 versions of System.Core assembly.
6134
6135 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6136
6137         A fix for bug #82652
6138         * class.cs (Class.GetClassBases): Compare types and not expressions.
6139
6140 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6141
6142         A fix for bug #82620
6143         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6144         actually never worked before.
6145         (IndexerAccess): Emit prepared arguments before they are modified.
6146         
6147 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6148
6149         A fix for bug #82563
6150         * assign.cs: Revert wrong fix.
6151         
6152         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6153         correctly.
6154         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6155         Instead of ldelema/stdind we have to use temporary variables to handle
6156         cases like String.Concat (params string[]).
6157         
6158 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6159
6160         * class.cs: EmitAttributes to Emit rename.
6161         
6162         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6163         null.
6164         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6165         GetClsCompliantAttributeValue execution.
6166         
6167 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6168
6169         * anonymous.cs: Use shorter type prefix.
6170         
6171         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6172         when exist.
6173         
6174         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6175         variables when probing is on.
6176         
6177         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6178         unresolved variables.
6179         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6180         handle transparent identifiers.
6181         
6182 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6183
6184         * attribute.cs (IsClsCompliant): Add nullable types test.
6185         
6186 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6187
6188         * doc.cs : catch other types of exception than XmlException to
6189           report CS1570. Fixed bug #82565.
6190
6191 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6192
6193         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6194         The number of delegate parameters has to match.
6195         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6196         arrays.
6197
6198 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6199
6200         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6201         to fix problem with private arguments.
6202
6203 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6204
6205         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6206         
6207         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6208         
6209         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6210         empty. Add cloning suport.
6211         
6212         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6213
6214 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6215
6216         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6217         to create EmptyCast. It handles EmptyConstantCast specialization for
6218         constants.
6219         
6220 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6221
6222         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6223         (EmitArrayArgument): One routine for array arguments.
6224         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6225         
6226 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6227
6228         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6229
6230 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6231
6232         * anonymous.cs: MemberLookupFinal update.
6233
6234         * class.cs (ConstructorInitializer): Is expression based.
6235         
6236         * delegate.cs: MethodGroupExpr update.
6237         
6238         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6239         messages.
6240         (Error_MemberLookupFailed): Customizable error override.
6241         (MethodGroupExpr): Keep queried type for later usage.
6242         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6243         resolve.
6244         
6245         * expression.cs: Error_MemberLookupFailed refactoring.
6246         (New.DoResolve): Resolve as much as possible.
6247         (ElementInitializer.Error_MemberLookupFailed): Object initializer
6248         customization for invalid member types.
6249
6250         * statement.cs: MethodGroupExpr update.
6251         
6252 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6253
6254         * modifier.cs (Check): Check all modifiers and not only accessibility
6255         ones.
6256
6257 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6258
6259         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
6260         type and not an expression.
6261
6262 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6263
6264         * statement.cs (Catch.Clone): Type and variable can be null.
6265
6266 2007-08-16  Marek Safar  <marek.safar@gmail.com>
6267
6268         A fix for bug #81979
6269         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
6270         I am really not sure whether this is the best fix.
6271         
6272         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
6273         only once.
6274         
6275 2007-08-14  Marek Safar  <marek.safar@gmail.com>
6276
6277         ** C# 3.0 Object and collection initializers (major re-write)
6278         
6279         * assign.cs (DoResolve): Initializers are not assign related.
6280         
6281         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
6282         used during collection or object initialization.
6283         
6284         * expression.cs (Error_InvalidArguments): Add initializers specific
6285         messages. More will come later because it requires some general
6286         refactoring.
6287         (New.DoResolve): Better error handling for unsafe types.
6288         (EmptyExpressionStatement): New class.
6289         (ElementInitializer): An object initializer expression.
6290         (CollectionElementInitializer): A collection initializer expression.
6291         (CollectionOrObjectInitializers): A block of object or collection
6292         initializers.
6293         (NewInitialize): New expression with element/object initializers.
6294         
6295         * statement.cs: Reverted object/collection initializer hacks.
6296         
6297         * typemanager.cs (CSharpName): Filter __arglist type.
6298         
6299 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6300
6301         ** C# 3.0 Anonymous Types (update to the latest standard)
6302         
6303         * expression.cs (Binary.ResolveOperator): Threat all null based types
6304         same.
6305         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
6306         (AnonymousTypeParameter): Updated.
6307         
6308         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
6309         (AnonymousTypeClass): New anonymous type container.
6310         
6311         * class.cs (AddField): Return operation result.
6312         
6313         * generic.cs: Another empty TypeArguments overload.
6314         
6315         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
6316         are stored at top of normal hierarchy.
6317         
6318         * typemanager.cs (CSharpName): Filter anonymous types.
6319         
6320 2007-08-09  Marek Safar  <marek.safar@gmail.com>
6321
6322         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
6323         as single Concat call. How could we miss that :-(
6324         
6325 2007-08-08  Marek Safar  <marek.safar@gmail.com>
6326
6327         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
6328         
6329 2007-08-07  Miguel de Icaza  <miguel@novell.com>
6330
6331         * expression.cs: Fix the previous commit, the creation of the
6332         arguments array list needs also to be conditional on the arguments
6333         not being null.
6334
6335         * class.cs: Add a little bit of help to help narrow down problems.
6336
6337         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
6338         not try to copy in that case. 
6339
6340         * driver.cs: When building SMCS, include a new different set of
6341         default assemblies here.   Do this here so we can control whether
6342         to include the default assemblies with /noconfig.
6343
6344 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6345
6346         A fix for bug #81979
6347         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
6348         only.
6349
6350 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6351
6352         A fix for bug #82300
6353
6354         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
6355         we are in probing scope.
6356
6357 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6358
6359         A fix for bug #82301
6360
6361         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
6362         (Statement.CloneTo): Clone and not map children blocks.
6363
6364 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6365
6366         A fix for bug #82299
6367
6368         * expression.cs (LocalVariableReference.CloneTo): Remap local info
6369         variable too.
6370         
6371         * statement.cs (Statement.CloneTo): Clone variables before statements
6372         to allow remaping of local variables.
6373
6374 2007-08-03  Marek Safar  <marek.safar@gmail.com>
6375
6376         A fix for bug #82296
6377
6378         * anonymous.cs,
6379         * report.cs: Log crash details for future clone problems.
6380         
6381         * statement.cs (Return.Clone): Don't clone non-existent expression.
6382
6383 2007-08-03  Raja R Harinath  <harinath@gmail.com>
6384
6385         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
6386         (Class.AddBasesForPart): Move CS0537 check here from ...
6387         * cs-parser.jay (class_declaration): ... here.  Move calling of
6388         'AddBasesForPart' to ...
6389         (class_bases): ... here.
6390         (struct_declaration, interface_declaration): Update to changes.
6391
6392 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6393
6394         A fix for bug #81923
6395
6396         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
6397         conversion is allowed.
6398
6399 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6400
6401         A fix for bug #81564
6402
6403         * ecore.cs (EventExpr): Add IsBase handling.
6404
6405         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
6406         too.    
6407         
6408 2007-08-02  Raja R Harinath  <harinath@gmail.com>
6409
6410         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
6411         * cs-parser.jay: Some whitespace cleanups.
6412         (current_delegate): New.
6413         (type_name): New.
6414         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
6415         a dummy code block, and use 'type_name' instead of 'member_name'.
6416         (interface_declaration, class_declaration): Likewise.
6417         (delegate_declaration): Likewise.  Rearrange slightly and use
6418         'current_delegate'.
6419         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
6420         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
6421
6422 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6423
6424         A fix for bug #82039
6425
6426         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
6427         available.
6428
6429         * typemanager.cs (CSharpName): Split to string overload.
6430
6431 2007-08-02  Marek Safar  <marek.safar@gmail.com>
6432
6433         * expression.cs,
6434         * report.cs: Updated warning CS0472.
6435
6436 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6437
6438         A fix for bug #82181
6439         * cs-parser.jay,
6440         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
6441
6442 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6443
6444         A fix for bug #82277
6445         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
6446
6447 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6448
6449         ** C# 3.0 Type Inference (major bits are working)
6450         
6451         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
6452         (.ImplicitStandardConversionExists): Uses compatible.
6453         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
6454         (.InferReturnType): New method.
6455         (.Compatible): Refactored.
6456         (.ResolveParameters): Uses factory to create resolved parameters.
6457         (.CompatibleMethod): Add probing mode support.
6458         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
6459         clearly distinguish between 2 different operations.
6460         (LambdaMethod): Moved to lambda.cs.
6461         (AnonymousMethod): Removed unused fields and methods.
6462         (AnonymousDelegate): Simplified.
6463         
6464         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
6465         
6466         * convert. cs (ImplicitConversionStandard): Compatible works differently.
6467         
6468         * delegate.cs (Delegate): New mehods to reduce code duplication.
6469         (.GetConstructor): New method.
6470         (.GetInvokeMethod): New method.
6471         (DelegateCreation): Updated.
6472         
6473         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
6474         does not exist.
6475         (OverloadResolve): Made probing little bit faster.
6476         
6477         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
6478         when probing is on.
6479         
6480         * generic.cs (TypeInferenceContext): Dummy implementation.
6481         
6482         * iterators.cs: Updated after Resolve/Define rename.
6483         
6484         * lambda.cs (LambdaExpression)
6485         (.ResolveParameters): Handles both type of arguments and type inference too.
6486         
6487         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
6488         (InflateTypes): Updated.
6489         
6490         * support.cs (InflateTypes): Changed signature and updated.
6491         
6492         * typemanager.cs (LookupMemberCache): Better dynamic type check.
6493         (MemberLookup_FindMembers): More MS tricks.
6494         (GetParameterData): Ditto.
6495         (GetDelegateParameters): Uses quick path for dynamic types.
6496         
6497 2007-08-01  Marek Safar  <marek.safar@gmail.com>
6498
6499         * class.cs (MethodData.Define): EmitContext is required for generic stuff
6500         only.
6501
6502 2007-07-31  Marek Safar  <marek.safar@gmail.com>
6503
6504         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
6505         syntax.
6506         
6507 2007-07-26  Jb Evain  <jbevain@novell.com>
6508
6509         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
6510         which takes a boolean 'report_errors', similar to the GetMethod.
6511         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
6512         in .net 2.1, do not report errors here.
6513
6514         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
6515         System.Runtime.CompilerServices.RequiredAttributeAttribute and
6516         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
6517         in .net 2.1.
6518
6519         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
6520         of the type InternalsVisibleToAttribute before the first call
6521         to CoreLookupType which is allowed to fail (third boolean parameter
6522         to true). Because, during the resolution for a type that is not
6523         immediately found, we try to check if the type is not defined in
6524         a friend assembly, and to do so, we need the
6525         InternalVisibleToAttribute.
6526
6527 2007-07-23  Miguel de Icaza  <miguel@novell.com>
6528
6529         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
6530         feature that allows structs to be compared against null and inline
6531         the result as true or false.
6532
6533         Notice that the same code is not permitted inside a generic block
6534         of code that would do:
6535
6536         class Foo<T> where T : struct {
6537             bool Eval (T x)
6538             {
6539                  return x == null;
6540             }
6541         }
6542
6543         It is only allowed if the type of T is not bound (no where
6544         clause).   In my opinion, this CSC 2 behavior is broken but people
6545         seem to be using it (IronRuby does, a few bug reports on bugzilla
6546         have it and some people have complained about it).
6547
6548         All of the users that depend on this behavior have code that is
6549         very likely broken. 
6550         
6551         * report.cs (Warning, Error): make these take object arguments,
6552         not strings, as that allows us to take advantage of Format.
6553
6554 2007-07-20  William Holmes  <billholmes54@gmail.com>
6555
6556         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
6557           Left member variable for the Count.
6558         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
6559           MemberName.CountTypeArguments to avoid a NRE. 
6560
6561         This code is contributed under the MIT X11 license
6562
6563 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6564
6565         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
6566
6567 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6568
6569         * doc.cs : generic method arguments are written as ``x while generic
6570           type arguments are `x. Combined with the previous change, fixed bug
6571           #79706.
6572
6573 2007-07-18  Raja R Harinath  <rharinath@novell.com>
6574
6575         Fix #82120
6576         * expression.cs (Binary.ResolveOperator): When converting
6577         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
6578
6579 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
6580
6581         * doc.cs : when T: or whatever x: is specified, it does not really
6582           check the doc comment's syntax correctness. Fixed bug #82006.
6583
6584 2007-07-18  Marek Safar  <marek.safar@gmail.com>
6585
6586         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
6587         LambdaExpression better.
6588         
6589         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
6590         
6591         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
6592         
6593         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
6594         as it can be generated.
6595         
6596         * expression.cs (Invocation.Error_InvalidArguments): Show correct
6597         modifiers.
6598         
6599         * lambda.cs (LambdaExpression): Refactored to share same code with
6600         AnonymousMethodExpression.
6601         
6602 2007-07-17  Marek Safar  <marek.safar@gmail.com>
6603
6604         * anonymous.cs (MakeName): Include host name for easier debugging.
6605         (LambdaMethod): New class for lambda spcecific stuff.
6606         
6607         * attribute.cs: Set EmitContext return type.
6608
6609         * class.cs: Set EmitContext return type.
6610         
6611         * codegen.cs (EmitContext): Return type cannot be null to stop messing
6612         with null/void meaning.
6613         
6614         * iterators.cs (ContainerType): Implemented.
6615         
6616         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
6617         
6618         * statement.cs (Return): Updated to lambda expressions.
6619         (Block.CloneTo): Parent can be null.
6620                 
6621 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6622
6623         A fix for bug #81917
6624         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
6625         
6626         * class.cs (FixedField): Check whether field is in unsafe scope.
6627
6628         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
6629         (FieldExpr.Emit): Fixed buffers cannot be volatile.
6630
6631         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
6632         FieldExpr.
6633         
6634         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
6635                 
6636 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6637
6638         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
6639         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
6640         from Report class.
6641
6642 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6643
6644         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
6645         
6646 2007-07-13  Marek Safar  <marek.safar@gmail.com>
6647
6648         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
6649         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
6650         
6651         * codegen.cs(EmitContext): Add ProbingMode flag.
6652         
6653         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
6654         
6655         * driver.cs: For now set both warning values.
6656         
6657         * ecore.cs (SimpleName): Name is readonly.
6658         (MethodGroup.OverloadResolve): One quick path for probing.
6659         
6660         * expression.cs (Unary): Set Oper r/o.
6661         (Binary): Set Oper r/o.
6662         (ParameterReference): Set few instance variables as r/o.
6663         (ParameterReference.DoResolveBase): Don't capture aruments when 
6664         the probing is on.
6665         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
6666         (Arglist): arguments are private.
6667         (SizeOf): type is private and r/o.
6668         (MemberAccess): arguments are private.
6669
6670         * report.cs: Enhanced reporting on/off capabilities.
6671         
6672         * lambda.cs: Uses ec.IsInProbingMode.
6673         (ContextualReturn): Derives from return.
6674         
6675         * rootcontext.cs: For now set both warning values.
6676         
6677         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
6678         copy if one exists.
6679         (Return.Resolve): Don't die immediately.
6680         (Block.Resolve): Speed-up probing.
6681         (Block.CloneTo): Clone only child blocks.
6682
6683 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
6684
6685         * iterators.cs: reverted Miguel's latest change (r81925) as it
6686         breaks the build in System.
6687
6688 2007-07-13  Miguel de Icaza  <miguel@novell.com>
6689
6690         * iterators.cs (Yield.CheckContext): Check for the iterator type
6691         also here as we can call into Yield even in codepaths that are not
6692         directly checked by
6693         (MethodOrOperator is the only path that was checked).
6694
6695         In addition to the standard check, use a more specific check for
6696         constructors to report a more verbose error. 
6697
6698 2007-07-12  Miguel de Icaza  <miguel@novell.com>
6699
6700         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
6701         report the warning and continue 
6702
6703         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
6704         values on the stack on the call to Emit.   Use EmitStatement if
6705         possible, or using Emit + Pop if not possible.   Fixes #82064
6706
6707 2007-07-12  Raja R Harinath  <rharinath@novell.com>
6708
6709         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
6710         avoid try...finally in some cases.
6711
6712 2007-07-10  Marek Safar  <marek.safar@gmail.com>
6713
6714         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
6715         
6716         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
6717         instead of method. Re-use standard error handling.
6718         (ConstructorInitializer.Emit): Simplified.
6719         
6720         * delegate.cs: Updated after Invocation.EmitCall change.
6721         
6722         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
6723         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
6724         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
6725         method and don't permanently changing input arguments.
6726         (MethodGroupExpr): Introduced resolved best_candidate, when method group
6727         is resolved it has one of the candidates is the best one which is later
6728         used to emit. Removed a few unused method.
6729         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
6730
6731         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
6732         (Binary.ResolveOperator): Ditto.
6733         (ConditionalLogicalOperator.DoResolve): Ditto.
6734         (Invocation): Uses method group.
6735         (Invocation.DoResolve): Simplified.
6736         (Invocation.EmitCall): Removed useless is_static.
6737         (Invocation.Emit): Delegate to method group.
6738         (Invocation.EmitStatement): Simplified.
6739         (New): Uses method group.
6740         (MemberAccess.DoResolve): Don't destroy original expression.
6741         
6742         * statement.cs (ForEach.Resolve): Use null for no method arguments.
6743         
6744 2007-07-04  Marek Safar  <marek.safar@gmail.com>
6745
6746         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
6747         
6748         * anonymous.cs,
6749         * lambda.cs: Add custom error message type.
6750
6751 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6752
6753         * lambda.cs: Simplified little bit.
6754         
6755         * parameter.cs: Introduced ImplicitLambdaParameter.
6756         (Parameters.CreateFullyResolved): New factory instead of ctor.
6757         
6758         * anonymous.cs,
6759         * class.cs,
6760         * delegate.cs: Updated parameter creation.
6761         
6762 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6763
6764         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
6765         arguments.
6766         
6767         * generic.cs: Synchronized with gmcs.
6768         
6769 2007-07-03  Marek Safar  <marek.safar@gmail.com>
6770
6771         * class.cs (Indexer): Check return type as soon as possible.
6772         
6773         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
6774         members too.
6775         
6776         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
6777         
6778         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
6779         
6780         * parameter.cs (Parameter): Use expression type when it is available.
6781         
6782         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
6783         method modifier for the first parameter only.
6784
6785 2007-06-24  Marek Safar  <marek.safar@gmail.com>
6786
6787         A fix for bug #81938
6788         * typemanager.cs (ChangeType): Fixed couple of char conversions.
6789         
6790         * constant.cs: Tide up an exception message.
6791
6792 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6793
6794         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
6795         an uninitialized variable is used.
6796         
6797         * expression.cs (LocalVariableReference.DoResolve): Ditto.
6798
6799 2007-06-22  Marek Safar  <marek.safar@gmail.com>
6800
6801         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
6802         not found error handling.
6803
6804         * expression.cs (ArrayCreation): Removed redundant fields and little bit
6805         simplified.
6806         (ArrayCreation.ResolveArrayElement): To be ready to customization.
6807         (ArrayCreation.DoResolve): Simplified.
6808         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
6809         its own resolve process.
6810         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
6811
6812 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6813
6814         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
6815         more error details.
6816         
6817 2007-06-20  Marek Safar  <marek.safar@gmail.com>
6818
6819         * cs-tokenizer.cs: Removed var related stuff.
6820         
6821         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
6822         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
6823         a type and a keyword at same time.
6824         
6825         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
6826         matches to "var".
6827         
6828         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
6829         implicitly typed arrays, more changes will follow.
6830         
6831         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
6832         
6833 2007-06-19  Marek Safar  <marek.safar@gmail.com>
6834
6835         * ecore.cs (VarExpr): Removed Handled field.
6836         
6837         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
6838         build-in assign functionality.
6839         (ForEach.Resolve): Removed all implicitly typed local variable code and
6840         simplified.
6841         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
6842         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
6843
6844 2007-06-18  Marek Safar  <marek.safar@gmail.com>
6845
6846         * assign.cs: Removed implicitly typed local variable check.
6847         
6848         * expression.cs (LocalVariableReference.DoResolve): Add check for self
6849         referencing implicitly typed local variable.
6850         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
6851         variable here.
6852         
6853         * statement.cs (Fixed): Removed unsupported implicitly typed local
6854         variable code.
6855
6856 2007-06-15  Marek Safar  <marek.safar@gmail.com>
6857
6858         * decl.cs (MemberName): Moved all Unbound stuff to parser.
6859
6860 2007-06-14  Marek Safar  <marek.safar@gmail.com>
6861
6862         A fix for bugs #81855 and #76274
6863         * attribute.cs (AttachTo): Always set owner for global attributes to
6864         prefined owner.
6865         
6866         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
6867         usefull too.
6868         
6869         * cs-parser.jay: Assembly and module attributes must precede all other
6870         elements except using clauses and extern alias declarations.
6871
6872 2007-06-13  Marek Safar  <marek.safar@gmail.com>
6873
6874         A fix for bug #81748
6875         * cs-tokenizer.cs,
6876         * expression.cs: More checks for non ISO-1 features.
6877
6878 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6879
6880         A fix for bug #81807
6881         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
6882         present inside switch statement and it is required by nullable check.
6883
6884 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6885
6886         A fix for bug #81840
6887         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
6888         when type matching fails.
6889         
6890         * namespace.cs: Tiny error message change.
6891
6892 2007-06-12  Marek Safar  <marek.safar@gmail.com>
6893
6894         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
6895         reporting. Added automatic property check.
6896         
6897         * class.cs: Updated after CheckAbstractAndExtern relocation.
6898         (AEventPropertyAccessor.GetSignatureForError): Customized.
6899         
6900 2007-06-11  Marek Safar  <marek.safar@gmail.com>
6901
6902         * class.cs (DefineBaseTypes): Base type can be undefined.
6903         
6904         * ecore.cs (TypeLookup): Minor refactoring.
6905         (DoResolveAsTypeStep): Removed redundant check.
6906
6907         * namespace.cs (Lookup): Removed redundant check.
6908                 
6909         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
6910         ResolveAsTypeTerminal step.
6911         (BootstrapCorlib_*): Simplified.
6912         (PopulateCoreType): Core types can be now external.
6913
6914 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6915
6916         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
6917          verification only.
6918          (InferTypeArguments): Infers anonymous expression type arguments.
6919          (Compatible): Split to Compatible and InferTypeArguments. 
6920         
6921         * lambda.cs: Updated.
6922
6923 2007-06-08  Marek Safar  <marek.safar@gmail.com>
6924
6925         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
6926
6927 2007-06-07  Raja R Harinath  <harinath@gmail.com>
6928
6929         Fix #80477, cs0135-2.cs, cs0135-3.cs
6930         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
6931         names to the "known" variables list.
6932         (Block.CheckInvariantMeaningInBlock): Handle the fact the
6933         parameter names are also "known".
6934         (Block.CheckError136): Remove.
6935         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
6936         null.
6937
6938 2007-06-07  Marek Safar  <marek.safar@gmail.com>
6939
6940         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
6941
6942 2007-06-06  Marek Safar  <marek.safar@gmail.com>
6943
6944         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
6945         internal error not an user error.
6946          
6947         * expression.cs (IsApplicable): Refactored to make debugging easier.
6948
6949         * support.cs: More tricks for non-mono runtimes.
6950         
6951         * typemanager.cs (CoreLookupType): Made public.
6952         (InitSystemCore): All linq specific stuff moved to linq.cs
6953
6954 2007-06-05  Marek Safar  <marek.safar@gmail.com>
6955
6956         * typemanager.cs (CSharpSignature): One more missing build-in types
6957         replacement.
6958         More tricks for non-mono runtime.
6959
6960 2007-06-05  Raja R Harinath  <harinath@gmail.com>
6961
6962         * statement.cs (Block.CheckError136_InParents): Remove.
6963         (Block.AddVariable): Use GetParameterInfo instead.
6964         (ToplevelBlock.ProcessArguments): Likewise.
6965
6966 2007-06-04  Raja R Harinath  <rharinath@novell.com>
6967
6968         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
6969         information too.
6970         (ToplevelBlock.GetParameterInfo): Split out of ...
6971         (ToplevelBlock.GetParameterRefernce): ... this.
6972         (ToplevelBlock.ParameterMap): Remove.
6973         * expression.cs (ParameterReference): Update to use
6974         ToplevelParameterInfo.
6975
6976         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
6977         regression.
6978
6979         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
6980         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
6981
6982         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
6983         (ToplevelBlock.ProcessParameters) ... here.
6984         (ToplevelBlock..ctor): Invoke it.
6985
6986         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
6987         new parameters.
6988
6989         * statement.cs (IKnownVariable): New interface.
6990         (LocalInfo): Implement it.
6991         (ToplevelParameterInfo): New class.
6992         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
6993         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
6994         GetKnownVariableInfo.
6995
6996 2007-06-03  Raja R Harinath  <harinath@gmail.com>
6997
6998         Partly speed up CS0136 error checks.
6999         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7000         'recurse' parameter.
7001         (Block.DoCheckError136): Only check errors in parameters.  Move
7002         local variable checks ...
7003         (Block.AddVariable): ... here, and ...
7004         (ToplevelBlock.ResolveMeta): ... here.
7005
7006 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7007
7008         * statement.cs (Block.IsChildOf): Remove.
7009
7010         * statement.cs (Statement.Clone): Move special case code ...
7011         (Block.CloneTo): ... here.
7012
7013 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7014
7015         * statement.cs (ToplevelBlock.container): Remove field.  It's
7016         redundant with 'Parent'.
7017         (ToplevelBlock.ContainerBlock): Remove accessor.
7018         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7019         child with parent here, ...
7020         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7021         current_block.
7022         (start_anonymous): Don't save current_block.
7023         (top_current_block): Remove.
7024
7025         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7026         (Block.Resolve): Update to changes.
7027         (Block..ctor): Move setting of "correct" 'Toplevel'
7028         and 'Explicit' fields to ...
7029         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7030
7031 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7032
7033         Kill Block.Implicit
7034         * statement.cs (Block.Implicit): Remove.
7035         (Block): Update to changes.
7036         * flowanalysis.cs: Likewise.
7037
7038         Mildly speed up CheckInvariantMeaningInBlock
7039         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7040         Recursively call AddKnownVariable to all enclosing blocks.
7041         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7042         Remove recursive calls.
7043         (Block): Update to changes.
7044
7045         New ExplicitBlock invariants
7046         * statement.cs (Block.Explicit): New field.  It points to the
7047         immediately enclosing non-implicit block.
7048         (Block..ctor): Maintain the invariant.
7049         * cs-parser.jay: Take advantage of invariant.
7050
7051         Introduce ExplicitBlock
7052         * statement.cs (ExplicitBlock): New.
7053         (ToplevelBlock): Derive from it.
7054         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7055         sense of flag.
7056         (Block.Implicit): Update to changes.
7057         * cs-parser.jay: Update to changes.
7058
7059         Remove unused field
7060         * codegen.cs (EmitContext.IsLastStatement): Remove.
7061         * statement.cs (Block.DoEmit): Update to changes.
7062
7063 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7064
7065         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7066         modifying current_block directly.
7067
7068 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7069         
7070         * class.cs: Implemented automatic properties (C# 3.0)
7071           Thanks to Marek for the help.
7072
7073 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7074
7075         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7076         variable as assigned, note also that all its components are
7077         assigned too.
7078         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7079
7080 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7081
7082         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7083         member is marked as compiler generated.
7084         
7085         * decl.cs (MemberCore): Refactored ModFlags into property.
7086
7087         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7088         (Check): Check only accessibility modifiers.
7089
7090 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7091
7092         Track all assignable slots in one bit array
7093         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7094         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7095         logic from VariableMap constructor here.  Use the same 'offset'
7096         variable that's later used for computing offsets of local
7097         variables.
7098         * flowanalysis.cs (UsageVector.parameters): Remove.
7099         (UsageVector): Update to changes.
7100         (VariableMap): Remove.
7101
7102         Avoid creating ParameterMap in every block
7103         * statement.cs (Block.ParameterMap): Move ...
7104         (ToplevelBlock.ParameterMap): ... here.
7105         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7106         only once.
7107         * flowanalysis.cs (FlowBranching.param_map): Remove.
7108         (FlowBranching.UsageVector): Update to changes.
7109         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7110
7111         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7112
7113         * expression.cs (ParameterReference): Distinguish between block
7114         where parameter was referenced and declared.
7115
7116 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7117
7118         * flowanalysis.cs, statement.cs: Put back improved error handling.
7119
7120 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7121         
7122         * assign.cs:
7123         * expression.cs:
7124           Imporved object and collection initialization (C# 3.0).
7125
7126 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7127
7128         A fix for bug #81380
7129         * expression.cs (Is.DoResolve): Only value types have constant `is'
7130         behaviour.
7131
7132 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7133
7134         * statement.cs (ToplevelBlock.child): Remove.
7135
7136 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7137
7138         Rationalize ResolveMeta: refactoring
7139         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7140         out constant handling code into ...
7141         (Block.DoResolveConstants): ... this.
7142
7143         Rationalize ResolveMeta: kill local_map
7144         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7145         (Block.AssignableSlots): New.
7146         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7147         for locals -- move code from VariableMap here.  Avoid unnecessary
7148         allocations.
7149         * flowanalysis.cs (FlowBranching.local_map): Remove.
7150         (FlowBranching..ctor): Use Block.AssignableSlots.
7151         (VariableMap): Remove unused constructors.
7152
7153 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7154
7155         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7156
7157 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7158
7159         * typemanager.cs (IsFriendAssembly): Should not be called for building
7160         assembly.
7161
7162 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7163
7164         * literal.cs (NullConstant): Print null in all cases.
7165         
7166         * expression.cs (Binary.ResolveOperator): Implemented delegate
7167          comparison based on C# 2.0 changes.
7168
7169 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7170
7171         This code is contributed under the MIT X11 license
7172         
7173         The following enables support for several C# 3.0 language features:
7174         
7175         * cs-tokenizer.cs: Added support for the "var" keyword.
7176         
7177         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7178           Added VarExpr class to facilitate type inferencing.
7179         
7180         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7181           to support anonymous types.
7182         
7183         * assign.cs: Added support for type inferencing and initialization.
7184         
7185         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7186         
7187         * expression.cs: Added implicit array support to ArrayCreation.
7188           Added 5 types and 1 interface:
7189           
7190           IInitializable                Implementing classes can inject initializing
7191                                         statements after object instantiation.
7192           
7193           Initializer                   Stores data for object initialization.
7194           
7195           AnonymousType                 An expression for anonymous types.
7196           
7197           AnonymousTypeParameter        Stores data about an anonymous type's field.
7198           
7199           NewInitialize                 An expression for object initialization.
7200           
7201           CollectionInitialize          An expression for collection initialization.
7202         
7203         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7204           statements.
7205
7206 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7207
7208         A fix for bug #81500
7209         * cs-tokenizer.cs: Add special handling for coalescing operator.
7210
7211 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7212
7213         A fix for bug #81529
7214         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7215         its value from base class until it is redefined.
7216
7217 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7218
7219         Fix regression in cs0631-3.cs
7220         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7221         fallback.  Make error fallback catch more cases.
7222
7223 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7224
7225         * cs-parser.jay: Allow parameters in operator declarations to have
7226         attributes. 
7227
7228 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7229
7230         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7231         exists. 
7232
7233         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7234         inside the ContextualReturn, it does not have to be an
7235         ExpressionStatement. 
7236
7237 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7238
7239         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7240         set, set it.
7241
7242 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7243
7244         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7245         method in two methods: ResolveNoDefine and Resolve.
7246
7247         ResolveNoDefine will stop just after ResolveTopBlock has been
7248         called.   
7249
7250         Resolve will then continue by creating a method and issuing the
7251         call to method.Define ().
7252
7253         (AnonymousMethod): Split and implement the new Resolve and
7254         ResolveNoDefine as well.
7255
7256         * lambda.cs (LambdaExpression): Split the anonymous method
7257         resolution code into a separate routine (CoreCompatibilityTest)
7258         from DoCompatibleTest.
7259
7260         (LambdaExpression.TryBuild): New method, this method tries to
7261         build the LambdaExpression with the given set of types to be used
7262         as the types for the various parameters of the lambda expression. 
7263
7264         If the compilation succeed with the given types, the infered type
7265         of the Anonymous method is returned, otherwise null is returned.
7266
7267 2007-04-23  Marek Safar  <marek.safar@gmail.com>
7268
7269         A fix for bug #81414
7270         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
7271
7272 2007-04-22  Miguel de Icaza  <miguel@novell.com>
7273
7274         * cs-tokenizer.cs: Change various identifiers here from the
7275         camelCasing to the recommended Linux-like style for instance
7276         variables from the Coding Guidelines. 
7277
7278 2007-04-19  Martin Baulig  <martin@ximian.com>
7279
7280         * convert.cs
7281         (Convert.ImplicitReferenceConversionCore): Allow conversions from
7282         System.Enum to System.ValueType.
7283
7284 2007-04-13  Martin Baulig  <martin@ximian.com>
7285
7286         Rewrote implicit reference conversions.  We need to distinguish
7287         between implicit reference conversions (13.1.4) and implicit
7288         boxing conversions (13.1.5).
7289
7290         According to the spec, there's an an implicit conversion
7291         "From a one-dimensional array-type S[] to IList<T> and base
7292         interfaces of this interface, provided there is an implicit
7293         reference conversion from S to T."  Note that this does not
7294         include boxing conversions.
7295
7296         * convert.cs
7297         (Convert.ImplicitTypeParameterBoxingConversion): New method.
7298         (Convert.ImplicitReferenceConversion): Split into
7299         ImplicitReferenceConversionCore() and
7300         ImplicitBoxingConversionExist().
7301         (Convert.ImplicitReferenceConversionExists): Use the new
7302         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
7303
7304 2007-04-12  Martin Baulig  <martin@ximian.com>
7305
7306         * convert.cs (Convert.ImplicitReferenceConversion): Move the
7307         `TypeManager.null_type' checks up to the top of the method.
7308
7309 2007-04-11  Marek Safar  <marek.safar@gmail.com>
7310
7311         A fix for bug #81350
7312         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
7313         extension methods.
7314
7315 2007-04-11  Martin Baulig  <martin@ximian.com>
7316
7317         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
7318         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
7319         to make this work for generic classes; fixes #79561.
7320
7321 2007-04-11  Martin Baulig  <martin@ximian.com>
7322
7323         * expression.cs (As): Add support for nullable types; fixes #79371.
7324
7325 2007-04-11  Martin Baulig  <martin@ximian.com>
7326
7327         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
7328         `type.FullName' is null; fixes #80243.
7329
7330 2007-04-11  Martin Baulig  <martin@ximian.com>
7331
7332         * expression.cs (Invocation.IsApplicable): Don't modify the method
7333         if type inference succeeded, but the method was not applicable.
7334         Fixes #81250.
7335
7336 2007-04-10  Marek Safar  <marek.safar@gmail.com>
7337
7338         A fix for bug #81324
7339         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
7340         internal and external namespaces containers.
7341
7342 2007-04-10  Martin Baulig  <martin@ximian.com>
7343
7344         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
7345         TypeManager.DropGenericMethodArguments() so we also call
7346         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
7347
7348 2007-04-10  Martin Baulig  <martin@ximian.com>
7349
7350         * iterators.cs (Iterator.CreateIterator): Don't crash if
7351         `method.ReturnType' is null.  This happens if something went wrong
7352         while resolving that typ (we already reported an error in this case).
7353
7354 2007-04-10  Martin Baulig  <martin@ximian.com>
7355
7356         * expression.cs (New.DoResolve): Don't call CheckComImport() on
7357         generic interfaces; report the CS0144 directly.
7358
7359 2007-04-10  Martin Baulig  <martin@ximian.com>
7360
7361         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
7362         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
7363
7364 2007-04-10  Martin Baulig  <martin@ximian.com>
7365
7366         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
7367
7368 2007-04-09  Raja R Harinath  <rharinath@novell.com>
7369
7370         A better fix
7371         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
7372         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
7373
7374         Fix #81338
7375         * statement.cs (For.Resolve): If resolution fails, use
7376         KillFlowBranching.
7377
7378 2007-04-08  Marek Safar  <marek.safar@gmail.com>
7379
7380         * anonymous.cs (MakeName): Make faster and zero-based.
7381         (VerifyExplicitParameterCompatibility): Back to mode where generic
7382         parameter is ignored.
7383         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
7384
7385         * class.cs (EmitType): Method can emit another new method.
7386
7387         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
7388
7389         * driver.cs: Updated.
7390
7391         * lambda.cs: Reuse predefined empty parameters.
7392
7393         * parameter.cs: Updated
7394
7395         * support.cs: Implemented InflateTypes.
7396
7397         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
7398         (InitSystemCore): Introduced to isolate 3.0 dependencies.
7399
7400 2007-04-03  Martin Baulig  <martin@ximian.com>
7401
7402         Fix #80632.
7403
7404         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
7405         version of TypeManager.IsOverride() which also works with generic
7406         types.  
7407
7408 2007-04-03  Martin Baulig  <martin@ximian.com>
7409
7410         Fix #81044.
7411
7412         * convert.cs
7413         (Convert.ExplicitReferenceConversion): We need to cast when
7414         converting from IList<T> to S[].
7415
7416 2007-04-01  Marek Safar  <marek.safar@gmail.com>
7417
7418         * decl.cs (FindExtensionMethods): Consider all candidates with same name
7419         at this level.
7420         
7421         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
7422
7423 2007-03-31  Marek Safar  <marek.safar@gmail.com>
7424
7425         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
7426         argument and return type inferring.
7427
7428         * codegen.cs (InferReturnType): Flag whether return can be inferred.
7429         (ReturnType): Turned to property.
7430
7431         * statement.cs (Return): Implemented return type inferring.
7432
7433         * support.cs (ReflectionParameters): Use local types if possible.
7434
7435 2007-03-30  Raja R Harinath  <rharinath@novell.com>
7436
7437         * flowanalysis.cs (FlowBranching.Reachability): Remove.
7438         (FlowBranching.UsageVector): Update to changes.
7439
7440         Prepare to kill 'Reachability'
7441         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
7442         argument of constructor.
7443
7444 2007-03-29  Raja R Harinath  <rharinath@novell.com>
7445
7446         Prepare to kill 'Reachability'
7447         * flowanalysis.cs (UsageVector.is_unreachable): New.
7448         (UsageVector): Update to maintain 'is_unreachable' in parallel to
7449         'reachability', and verify they're consistent.
7450
7451         Fix #81121
7452         * expression.cs (New.EmitStatement): Handle type parameters here too.
7453
7454 2007-03-29  Martin Baulig  <martin@ximian.com>
7455
7456         Fix #79148.
7457
7458         * anonymous.cs
7459         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
7460         CompilerGeneratedClass.
7461         (ScopeInfo.EmitScopeInstance): Make this protected.
7462         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
7463         `ec.CurrentAnonymousMethod.Scope == Scope'.
7464
7465         * statement.cs (Block.ScopeInfo): Make this a property.
7466
7467 2007-03-27  Raja R Harinath  <harinath@gmail.com>
7468
7469         Prepare to kill 'Reachability'
7470         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
7471         (FlowBranching.UsageVector.Reachability): Remove property.
7472         (FlowBranching.UsageVector.IsUnreachable): New property.
7473         (FlowBranching.UsageVector.ResetBarrier): New.
7474         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
7475         * codegen.cs, statement.cs: Update to changes.
7476
7477 2007-03-27  Martin Baulig  <martin@ximian.com>
7478
7479         Fix #81209.
7480
7481         * decl.cs
7482         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
7483         generic types.
7484
7485 2007-03-26  Raja R Harinath  <rharinath@novell.com>
7486
7487         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
7488         instead of TriState.  Remove all mention of TriState.
7489
7490         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
7491         replaced by a boolean.  Add boolean 'is_unreachable' field, check
7492         and maintain invariants.
7493
7494 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7495
7496         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
7497
7498 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7499
7500         * expression.cs: Stop using obsolete 2.0 opcodes.
7501
7502 2007-03-25  Marek Safar  <marek.safar@gmail.com>
7503
7504         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
7505         one of the latests Martin's fixes.
7506
7507 2007-03-23  Miguel de Icaza  <miguel@novell.com>
7508
7509         * expression.cs: On BigEndian systems, swap the bytes, temporary
7510         solution until we get a new bitconverter class.
7511
7512 2007-03-23  Martin Baulig  <martin@ximian.com>
7513
7514         Fix #81158.
7515
7516         * decl.cs (MemberCache.AddMembers): Add generic methods both as
7517         "Method" and "Method`1".  Normally, a cache lookup is done on the
7518         "Method" form (ie. without the generic arity), but this one makes
7519         lookups on the full form work as well.
7520
7521 2007-03-22  Raja R Harinath  <rharinath@novell.com>
7522
7523         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
7524         unused properties.
7525
7526 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
7527         * class.cs: 
7528         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
7529         ordered_member_list, to TypeBuilder to store members to be defined
7530         in the order they were parsed in.
7531         - ordered_explicit_member_list contains all properties indexers
7532           and methods that are defined as explicit implementation of an
7533           interface or base class.
7534         - ordered_member_list contains all properties indexers and methods
7535           that are not defined as explicit implementation of an interface
7536           or base class.
7537
7538         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
7539         functionality in these removed classes has been replaced with 
7540         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
7541         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
7542
7543         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
7544         to CheckForDuplications inside GetMethod and SetMethod Define Method
7545         to handle method property and indexer name conflicts.
7546
7547         Fixes #79434
7548
7549         All code is contributed under the MIT/X11 license.
7550
7551 2007-03-20  Martin Baulig  <martin@ximian.com>
7552
7553         * class.cs (TypeContainer.Interfaces): Removed; they're now
7554         included in `TypeContainer.Types'.
7555
7556 2007-03-20  Martin Baulig  <martin@ximian.com>
7557
7558         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
7559
7560         * class.cs (TypeContainer.CreateType): New public method.  This is
7561         now called before DefineType() to create the TypeBuilders.
7562         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
7563         has already been created by CreateType().
7564         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
7565         don't resolve our base classes here; this has been moved into
7566         DefineBaseTypes().  We're now called from CreateType().
7567         (TypeContainer.DefineBaseTypes): New private method; resolve our
7568         base classes here.  We're now called from DefineType().
7569
7570         * rootcontext.cs
7571         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
7572         our types first to create all the TypeBuilders.  After that, call
7573         TypeContainer.DefineType() on all the types which'll resolve their
7574         base classes and setup the resolve order.
7575
7576 2007-03-20  Martin Baulig  <martin@ximian.com>
7577
7578         * class.cs (TypeContainer.Enums): Removed; they're now included in
7579         `TypeContainer.Types'.  
7580
7581 2007-03-20  Martin Baulig  <martin@ximian.com>
7582
7583         * class.cs
7584         (TypeContainer.DefineType): Don't call ResolveMembers() here.
7585         (TypeContainer.DoResolveMembers): Call DefineType() on our
7586         `compiler_generated' classes; moved here from DefineNestedTypes().
7587
7588         * rootcontext.cs
7589         (RootContext.ResolveTree): Call ResolveMembers() on all
7590         TypeContainer's in the `type_container_resolve_order'.
7591
7592 2007-03-19  Marek Safar  <marek.safar@gmail.com>
7593
7594         * class.cs: Use corlib to handle InternalMethodImplAttribute.
7595
7596 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7597
7598         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
7599         implementation flags.
7600
7601 2007-03-17  Marek Safar  <marek.safar@gmail.com>
7602
7603         * class.cs: More optimizations for type parameters.
7604
7605 2007-03-15  Marek Safar  <marek.safar@gmail.com>
7606
7607         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
7608
7609         * ecore.cs, parameter.cs: More common code for both corlibs.
7610
7611         * typemanager.cs (IsGenericMethod): Simplified.
7612
7613 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7614
7615         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7616         'returns'.
7617         * statement.cs, iterators.cs, lambda.cs: Update to changes.
7618
7619         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
7620         unconditionally.  Simplify explanation.
7621         (Try.Resolve, Using.Resolve): Likewise.
7622
7623 2007-03-15  Martin Baulig  <martin@ximian.com>
7624
7625         Fix #80731.
7626
7627         * decl.cs (DeclSpace): If we're a partial class, use our
7628         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
7629
7630 2007-03-15  Raja R Harinath  <rharinath@novell.com>
7631
7632         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
7633         'throws'.
7634         (FlowBranching.UsageVector): Update to changes.
7635         (FlowBranching.MergeSiblings): Likewise.
7636         * statement.cs: Likewise.
7637
7638 2007-03-15  Martin Baulig  <martin@ximian.com>
7639
7640         Fix #79302.
7641
7642         * decl.cs
7643         (MemberCache): Added a special .ctor for type parameters.
7644
7645         * typemanager.cs
7646         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
7647         `MemberCache'.  
7648
7649 2007-03-09  Martin Baulig  <martin@ximian.com>
7650
7651         * enum.cs (Enum): Make this a TypeContainer.
7652         (EnumMember): Derive from `Const'.
7653
7654         * const.cs
7655         (Const.DoResolveValue): New protected virtual method; move most of
7656         the functionality of ResolveValue() here so we can override it in
7657         `EnumMember'.
7658         (Const.CreateConstantReference): Make this virtual.
7659
7660         * class.cs (Kind): Add `Kind.Enum'.
7661         (TypeContainer.Emit): Don't emit the enums here; they're already
7662         in the `RootContext.typecontainer_resolve_order'.
7663
7664         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
7665         here; they're already in the `typecontainer_resolve_order'.
7666
7667         * ecore.cs (EnumConstant.ConvertImplicitly): Add
7668         TypeManager.DropGenericTypeArguments().
7669
7670         * typemanager.cs
7671         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
7672         (TypeManager.IsEnumType): Likewise.
7673         (TypeManager.EnumToUnderlying): Likewise.
7674         (TypeManager.IsEqual): Add support for enums.
7675
7676 2007-03-12  Raja R Harinath  <rharinath@novell.com>
7677
7678         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
7679         DefaultParameterValueAttribute to be undefined, say if System.dll
7680         is not referenced.
7681
7682 2007-03-11  Marek Safar  <marek.safar@gmail.com>
7683
7684         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
7685         any mscorlib.
7686
7687 2007-03-10  Marek Safar  <marek.safar@gmail.com>
7688
7689         * class.cs, parameter.cs: Unified parameters verification.
7690
7691 2007-03-08  Martin Baulig  <martin@ximian.com>
7692
7693         * cs-parser.jay (constructor_header): Pass the location to the
7694         newly created TopLevelBlock.
7695
7696 2007-03-07  Martin Baulig  <martin@ximian.com>
7697
7698         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
7699
7700 2007-03-06  Miguel de Icaza  <miguel@novell.com>
7701
7702         * convert.cs (ExplicitReferenceConversionExists): Sync this method
7703         with the changes from David, fixes the build.
7704
7705 2007-03-05  David Mitchell  <dmitchell@logos.com>
7706
7707         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
7708         and its base interfaces to a one-dimensional array type S[],
7709         provided there is an implicit or explicit reference conversion
7710         from S to T.
7711
7712 2007-03-03  Marek Safar  <marek.safar@gmail.com>
7713
7714         * cs-tokenizer.cs: Implemented basic linq grammar.
7715
7716         * driver.cs: Set linq lang version on demand.
7717
7718 2007-02-26  Marek Safar  <marek.safar@gmail.com>
7719
7720         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
7721
7722 2007-02-25  Marek Safar  <marek.safar@gmail.com>
7723
7724         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
7725         (Fixes #80455)
7726
7727         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
7728         here.
7729         Check property and event extern attributes.
7730
7731         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
7732         charset.
7733
7734 2007-02-24  Marek Safar  <marek.safar@gmail.com>
7735
7736         A fix for bug #80407
7737         * ecore.cs: Don't report ambiguity error when methods have same parent.
7738
7739 2007-02-23  Marek Safar  <marek.safar@gmail.com>
7740
7741         A fix for bug #80878
7742         * class.cs, cs-parser.jay: Event property can host anonymous methods.
7743
7744 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7745
7746         * attribute.cs: Enable ExtensionAttribute presence test.
7747
7748 2007-02-22  Marek Safar  <marek.safar@gmail.com>
7749
7750         * class.cs: Warn about missing GetHashCode only when Equals is override.
7751
7752         * decl.cs: Check accessibility of type arguments.
7753
7754         * typemanager.cs: Correctly report nullable array.
7755
7756 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7757
7758         * class.cs, report.cs: Capture more details when things go wrong.
7759
7760 2007-02-20  Marek Safar  <marek.safar@gmail.com>
7761
7762         A fix for bug #80650
7763         * cs-parser.jay: Anonymous container starts at constructor declaration
7764         and not at block beginning because it has to be usable in constructor
7765         initializer.
7766
7767         * statement.cs: Use context location and not block one for error reporting.
7768
7769 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7770
7771         A fix for bug #78712
7772         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
7773         too.
7774
7775 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7776
7777         A fix for bug #80493 by Atsushi Enomoto
7778         * cs-parser.jay: Ignore invalid attribute target.
7779
7780 2007-02-18  Marek Safar  <marek.safar@gmail.com>
7781  
7782         * cs-tokenizer.cs: Ignore '\0' as white space character.
7783
7784 2007-02-17  Miguel de Icaza  <miguel@novell.com>
7785
7786         * cs-parser.jay: Add support for lambda expressions to the mcs
7787         compiler as well.
7788
7789         * lambda.cs: Only clone when we are probing, not on the final call
7790         (Compatible is the final call). 
7791
7792         * statement.cs (CloneContext): Introduce class to provide block
7793         remapping during clone.
7794
7795         All statements Clone themselves now.
7796
7797         (Clone): special handling for blocks, when we clone a block, we
7798         register the block inside this routine, as children of the block
7799         might trigger a lookup. 
7800         
7801         * expression.cs: Add support for CloneContext in all expressions. 
7802         
7803 2007-02-17  Marek Safar  <marek.safar@gmail.com>
7804  
7805         A fix for bug #80493
7806         * statement.cs: Report ambiguous warning when interfaces are not related.
7807
7808 2007-02-15  Marek Safar  <marek.safar@gmail.com>
7809
7810         C# 3.0 extension methods.
7811
7812         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
7813         cannot be used directly.
7814
7815         * class.cs (Class.Emit): Emit extension attribute if any class method
7816         is extension method.
7817         (Method.Define): Add basic extension method validation conditions.
7818         (Method.Emit): Emit extension attribute for method.
7819
7820         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
7821         extension method exists. Currently we follow same approach as Microsoft
7822         does, emit even if a method or a class are private but this can change
7823         later.
7824
7825         * cs-parser.jay: Add handling of `this' keyword in method parameters
7826         context.
7827
7828         * decl.cs (DeclSpace.IsStaticClass): New property.
7829         (MemberCache.FindExtensionMethods): Looks for extension methods with
7830         defined name and extension type.
7831
7832         * doc.cs: Updated after OverloadResolve changes.
7833
7834         * driver.cs: Add new soft reference to System.Core.dll.
7835
7836         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
7837         (ExtensionMethodGroupExpr): Represents group of extension methods.
7838
7839         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
7840         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
7841         to MethodGroupExpr and made non-static for easier customization.
7842         (Invocation.DoResolve): Add extension method lookup when no standard
7843         method was found.
7844         (MemberAccess.DoResolve): Try extension methods if no member exists.
7845
7846         * modifiers.cs: Add METHOD_EXTENSION modifier.
7847
7848         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
7849         as well as candidate extension type.
7850         (ComputeNamespaces): When assembly constains extension methods registers
7851         them.
7852         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
7853         extension method lookup.
7854         (Namespace.LookupExtensionMethod): Looks for extension method in this
7855         namespace.
7856         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
7857         find a method which matches name and extensionType.
7858
7859         * parameter.cs (Parameter): Add This modifer.
7860         (HasExtensionMethodModifier): New property.
7861         (Resolve): Add extension parameter check.
7862         (ModFlags): turned to property to exclude this modifier as it is not real
7863         parameter modifier.
7864         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
7865
7866         * support.cs (ParameterData): Add ExtensionMethodType.
7867         (ReflectionParameters): Implemented ExtensionMethodType interface property.
7868
7869         * typemanager.cs: Add type and ctor extension attribute type.
7870
7871 2007-02-15  Miguel de Icaza  <miguel@novell.com>
7872
7873         * report.cs (DisableErrors, EnableErrors): used to prevent error
7874         output when we are "trying" to compile various methods with
7875         different types. 
7876
7877         * ecore.cs (Expression): Add Clone method that calls the virtual
7878         CloneTo method.  The current CloneTo method in Expression throws
7879         an exception so we can track down all the places where this must
7880         be implemented (not using abstract, because that would be a lot of
7881         up-front-work before we can start testing the implementation
7882         idea). 
7883
7884         Important: we only need Clone capabilities for expressions created
7885         by the parser, as the expressions we will be cloning are
7886         expressions in the pre-resolved state.   This vastly simplifies
7887         the work required. 
7888         
7889         (SimpleName): Add CloneTo that does nothing.
7890         (EmptyCast): Add CloneTo.
7891         
7892         * expression.cs (Binary): Implement CloneTo.
7893         (Invocation.IsApplicable): Store the current ec in
7894         EmitContext.TempEc and restore it on return.  This is used so we
7895         do not have to sprinkle hundres of methods with an extra
7896         EmitContext, we know that the only user is the lambda expression
7897         ImplicitConversionExists code. 
7898         
7899         (Argument): Add Cloning capabilities.
7900         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
7901         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
7902         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
7903         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
7904         IndexerAccess): Add Clone capability.
7905
7906         (LocalVariableReference, This): TODO: needs cloned Block mapping.
7907
7908         (Argument): Add cloning capability.
7909
7910         * assign.cs (Assign): Implement CloneTo.
7911
7912         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
7913         
7914         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
7915         version by calling Convert with the EmitContext (that we are
7916         currently storing in ec, this is not great, but will do for now,
7917         to avoid passing EmitContext parameters to hundreds of functions
7918         that do not need them now).
7919
7920         (SetExpression): Remove, it is not needed.
7921         
7922         (ContextualReturn): Implement CloneTo.
7923
7924         * statement.cs (Statement): Implement cloning infrastructure,
7925         similar to expressions.
7926
7927         (Block): Partial implementation of Clone for statements.
7928
7929         (Return): Implement clone.
7930         
7931         * constant.cs (Constant.CloneTo): New method, does nothing.
7932
7933         * codegen.cs (TempEc): Add a static EmitContext as a temporary
7934         solution, until we decide how to exactly do this.  
7935         
7936 2007-02-14  Marek Safar  <marek.safar@gmail.com>
7937  
7938         A fix for bug #80493
7939         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
7940         a property is override we need to use second accessor.
7941
7942 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7943  
7944         A fix for bug #80418
7945         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
7946         methods.
7947
7948 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7949
7950         Another fix for bug #80749
7951         * pending.cs: Abstract class has priority over interfaces.
7952
7953 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7954
7955         Another fix for bug #80749
7956         * pending.cs: Abstract class has priority over interfaces.
7957
7958 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7959
7960         Another fix for bug #80749
7961         * pending.cs: Abstract class has priority over interfaces.
7962
7963 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7964
7965         Another fix for bug #80749
7966         * pending.cs: Abstract class has priority over interfaces.
7967
7968 2007-02-13  Marek Safar  <marek.safar@gmail.com>
7969
7970         * class.cs Better error message.
7971
7972         * driver.cs: Add shorter versions of -optimize option.
7973
7974 2007-02-13  Martin Baulig  <martin@ximian.com>
7975
7976         * class.cs (Constructor.Emit): Check the return value of
7977         ec.ResolveTopBlock() and return on error.
7978
7979 2007-02-13  Raja R Harinath  <rharinath@novell.com>
7980
7981         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
7982         message to fix error message regression.
7983
7984 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7985
7986         * delegate.cs: Delegate creation expression cannot be of Nullable type.
7987
7988 2007-02-12  Marek Safar  <marek.safar@gmail.com>
7989
7990         A fix for bug #80749
7991         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
7992         its parent container.
7993
7994         * class.cs (DefineFieldInitializers): Each initializer can has different
7995         resolve context.
7996
7997         * const.cs: Updated.
7998
7999 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8000
8001         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8002         now all the heavy lifting to check that embedded statements or
8003         expressions have the right form is done in the ContextualReturn.
8004
8005         (ContextualReturn): New class.  
8006
8007         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8008         method that can be invoked to report 201, so we do not replicate
8009         this everywhere.
8010
8011         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8012         
8013         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8014         treating tabs as spaces. 
8015
8016 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8017
8018         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8019         * assign.cs: Use full implicit conversion for right side check.
8020
8021 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8022
8023         * statement.cs (Switch): Switch over boolean type is not standardized.
8024
8025 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8026
8027         A fix for bug #80755
8028         * decl.cs (FindBaseEvent): Don't use method cache for events.
8029
8030 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8031
8032         * cs-parser.jay: Better syntax error handling.
8033
8034         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8035         instead of underlying type value.
8036
8037 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8038
8039         * driver.cs: Check define identifier before is registered.
8040
8041         * namespace.cs: Use existing error message.
8042
8043         * report.cs: New warning.
8044
8045 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8046
8047         A fix for bug #80742
8048         * expression.cs: Delegate Invoke method can be called directly.
8049
8050 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8051
8052         A fix for bug #80676
8053         * class.cs (IsEntryPoint): The Main method can have params modifier.
8054
8055 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8056
8057         * parameter.cs (Parameter, Parameters): Add Clone method.
8058
8059         * anonymous.cs (Compatible): Turn method into virtual method, so
8060         LambdaExpression can implement a different behavior.
8061
8062         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8063         out the basic checking here, so it can be used by
8064         LambdaExpressions.
8065         
8066         * lambda.cs: Introduce "Compatible" function that will do the
8067         heavy lifting.
8068
8069 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8070
8071         * attribute.cs: Unified one error message.
8072
8073         * class.cs (Class): Use type attributes and not properties to test static
8074         class.
8075         (IsEntryPoint): Don's pass local variable.
8076
8077         * convert.cs: Removed duplicate check.
8078
8079         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8080
8081         * driver.cs: Don't crash when soft reference does not exist.
8082
8083         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8084         (UsingEntry): Removed redundant allocation.
8085
8086         * parameter.cs: Add fast path for type parameters.
8087
8088         * support.cs: Don't allocate attribute when it's not used.
8089
8090 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8091
8092         * anonymous.cs
8093         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8094         this into a virtual method, so we can override it in LambdaExpression.
8095
8096         * driver.cs: Improve diagnostics in case of failure. 
8097
8098         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8099         write a function that is slightly more complex and that parses:
8100
8101         type identifier [, type identifier]* )
8102
8103         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8104         this expression:
8105
8106                 (canEmpty ? i >= 0 : i > 0)
8107
8108 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8109
8110         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8111         exception on possibly valid code.
8112
8113 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8114
8115         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8116         Push/PopPosition.
8117         (parse_opt_type_arguments): Remove.  It's almost the same as
8118         parse_less_than.
8119         (parse_namespace_or_typename): Use parse_less_than.
8120
8121 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8122
8123         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8124         this bug took a few hours to find, because the state saved and
8125         restored by PushPosition and PopPosition was ignoring the state of
8126         parse_generic_less_than.
8127
8128         I can also now remove the handling of OP_LT and OP_GT, this solves
8129         the big mistery.
8130         
8131         * cs-tokenizer.cs: store the location for the ARROW token, we use
8132         that in the parser.
8133
8134         (PushPosition, PopPosition): save/restore also `current_token',
8135         restore `parse_generic_less_than' (was missing).
8136
8137         (parse_opt_type_arguments): use parse_type, not
8138         parse_namespace_or_typename to parse types.
8139
8140         * lambda.cs: Empty new file, will eventually have the lambda
8141         expression implementation.
8142
8143         * lambda.test: used to test the internal tokenizer. 
8144
8145         * report.cs (FeatureIsNotISO1): Rename from
8146         FeatureIsNotStandardized, because it was about the language level
8147         (1 vs 2) it was not about standarization.
8148
8149         (FeatureRequiresLINQ): New.
8150
8151         * support.cs (SeekableStreamReader): Only require that the reader
8152         is a TextReader, not a StreamReader, so we can plug StringReader. 
8153
8154         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8155         given position in the input stream the following tokens can be
8156         parsed as a type followed by an identifier.
8157
8158         (is_punct): after a '(' if parse_type_and_parameter returns true,
8159         then return a special token OPEN_PARENS_LAMBDA which is used to
8160         avoid reduce/reduce errors in the grammar for the
8161         lambda_expression rules.
8162
8163         (parse_type): implement a type parser inside the
8164         tokenizer, the parser only returns true or false depending on
8165         whether the input at a given position can be parsed as a type.
8166
8167         (peek_token): new method used during type parsing.
8168
8169 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8170
8171         Fix #80531
8172         * anonymous.cs (ScopeInfo.InflateParameters): New.
8173         (AnonymousContainer.Resolve): Use it to redirect types of
8174         delegate parameters.
8175
8176 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8177
8178         Fix #80530
8179         * expression.cs (Error_InvalidArguments): Don't use two different
8180         messages for CS1503.  Use ExtraInformation and
8181         SymbolRelatedToPreviousError instead.
8182
8183         Fix #80358
8184         * decl.cs (DeclSpace.initialize_type_params): Don't access
8185         'type_params' of a partial class directly.
8186
8187 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8188
8189         * constant.cs: Removed a handful of out-of-range checks that were
8190         not necessary. 
8191
8192 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8193
8194         * expression.cs (CheckUselessComparison): Add additional check for char
8195         constants.
8196
8197         * namespace.cs: Fixed typo.
8198
8199 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8200
8201         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8202         gone, instead we inline the test, preventing the needless casts to
8203         longs, ulongs and doubles for the parameters, avoiding calls to
8204         methods that overchecked stuff, and instead inlined things
8205         nicely. 
8206
8207 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8208
8209         * cs-parser.jay: Better parameter error handling.
8210
8211 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8212
8213         A fix for bug #80368, #80522
8214         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8215         whether array initializer contains constants only.
8216         (ArrayCreation.Emit): Use better formula to decide when
8217         are array initializers for static initialization.
8218         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8219         have to emit even constants otherwise they are pre-initialized.
8220
8221 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8222             Raja R Harinath  <rharinath@novell.com>
8223
8224         Fix emit order of 'get' vs. 'set'.
8225         * support.cs (Accessors): New.
8226         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8227         Note the order in which accessors are declared in the source.
8228         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8229         Refactored from Property.Define and Indexer.Define.
8230         (PropertyBase.DefineAccessors): New helper that calls the above in
8231         appropriate order as noted by the parser.
8232         (Property.Define, Indexer.Define): Update to changes.
8233         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8234
8235 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8236
8237         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8238         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8239         there's an implicit conversion from the current type to the target
8240         type before converting the underlying constant.
8241
8242 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8243
8244         * const.cs (ResolveValue): Updated after constant conversion was made more
8245         generic.
8246
8247         * constant.cs (GetAttributableValue): constant to object conversion is
8248         used for attributes only.
8249         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
8250         constant conversions.
8251         (LongConstant.ConvertImplicitly): Ditto.
8252
8253         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
8254         (ImplicitConversionStandard): Handle constant conversion as extra step.
8255         It solves the issue when constant conversion was called indirectly like
8256         inside array initializer and constant folding was skipped.
8257
8258         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
8259         this change.
8260
8261         * statement.cs(ImplicitConversionStandard): Updated after constant
8262         conversion was made more generic.
8263
8264 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
8265
8266         * expression.cs (As.DoResolve): Use GenericConstraints instead of
8267         Constraints, solves the problem where the compiler incorrectly
8268         reported that a type parameter was not constrained to a class (Bug
8269         80518)
8270
8271 2007-01-14  Marek Habersack  <grendello@gmail.com>
8272
8273         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
8274
8275 2007-01-14  Marek Safar  <marek.safar@gmail.com>
8276
8277         A fix for bug #80368
8278         * assign.cs (FieldInitializer): New class implements field
8279         initializer statement.
8280
8281         * attribute.cs: Update after FieldMember rename.
8282
8283         * class.cs (PropertyBasedMember): New common class for property based
8284         types.
8285         (InterfaceMemberBase): New base class for all members which can be used as
8286         an interface members.
8287         (MethodCore): Moved really common code to InterfaceMemberBase.
8288         (Method.Define): Equal and GetHasCode detection is relevant for methods
8289         only.
8290         (MethodData.Define): Don't assume that public event implements an
8291         interface automatically.
8292         (MethodData.DefineMethodBuilder): Issue an error even if only extern
8293         modifier is used.
8294         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
8295         (FieldMember): Merged with FieldBase.
8296         (EventProperty.AEventPropertyAccessor): New specialization to check whether
8297         event extern modifier can be used.
8298         (EventField.EventFieldAccessor): Moved event field specific code here.
8299         (Event.AllowedModifiers): Even event can be extern.
8300         (Event.FindOutBaseMethod): New override specific to events.
8301         (Indexer.parameters): Reintroduce parameters because base class holds
8302         only properties common data.
8303         (Indexer.CheckForDuplications): Indexers are threated as methods so we
8304         need do extra parameters check.
8305
8306         * const.cs: Update after FieldMember rename.
8307
8308         * decl.cs (MemberCache.FindBaseEvent): New method.
8309
8310         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
8311         to reflect that indexer is now derived from PropertyBased.
8312
8313         * ecore.cs (GetMemberType): Made public.
8314         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
8315         obsolete event.
8316
8317         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
8318         
8319         * typemanager.cs (CSharpSignature): Correctly print event accessors.
8320         (RegisterEvent): Removed.
8321         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
8322         (GetPrivateFieldOfEvent): Renamed to GetEventField.
8323
8324 2007-01-11  Raja R Harinath  <rharinath@novell.com>
8325
8326         Fix #80249
8327         * statement.cs (CollectionForeach.TryType): Prefer generic
8328         GetEnumerator over non-generic variant.  Fix code to follow comments.
8329
8330 2007-01-09  Raja R Harinath  <rharinath@novell.com>
8331
8332         Fix #80446
8333         * support.cs (ReflectionParameter): Don't use an invalid index on
8334         the generic parameter data.
8335
8336 2007-01-08  Miguel de Icaza  <miguel@novell.com>
8337
8338         * driver.cs: Just add a tiny bit of infrastructure.
8339
8340 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8341
8342         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
8343         where field type is struct from current assembly.
8344         
8345         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
8346         it is possible.
8347
8348 2007-01-02  Marek Safar  <marek.safar@gmail.com>
8349
8350         A fix for bug #80381
8351         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
8352         the core types.
8353
8354         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
8355         messages.
8356         (Namespace.LookupType): Always use core types from corlib when speficied.
8357
8358         * report.cs: A new warning.
8359
8360         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
8361         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
8362         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
8363
8364         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
8365         (InitCoreTypes): Set expression type of object_type and value_type
8366         immediately after lookup.
8367
8368 2007-01-01  Miguel de Icaza  <miguel@novell.com>
8369
8370         * cs-tokenizer.cs: Accept Pc class characters (Connector
8371         Punctuation) as valid identifiers.  Fixes #78259
8372
8373         * expression.cs (Invocation.DoResolve): Moved the check for the
8374         use of `this' for doing method calls to the Invocation resolution
8375         step, after overload resolution has taken place instead of doing
8376         the check at the low-level `This.DoResolve' level.
8377
8378         The `This.DoResolve'(appens before overload resolution, so it has
8379         no way of knowing if the method that will be called will be
8380         instace or static, triggering an erroneous report for cs0188 (Bug
8381         78113).
8382
8383         We now do the check for instance method invocations after we know
8384         what method will be called.
8385
8386         (This.CheckThisUsage): Move the actual use of this structure
8387         checking into its own method and expose it. 
8388
8389         * Everywhere that called Error_ValueCannotBeConverted: pass a new
8390         EmitContext.
8391
8392         Exceptions: Null.ConvertImplicitly,
8393         Constant.ImplicitConversionRequired as there are too many call
8394         sites for passing the ec. 
8395
8396         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
8397         EmitContext, if the value is null, then we do not try to provide
8398         the extra information from the error (If a userdefined conversion
8399         exists, as UserDefinedConversion requires a non null-EmitContext).
8400
8401         Fixes: #80347
8402
8403 2006-12-30  Raja R Harinath  <rharinath@novell.com>
8404
8405         * flowanalysis.cs (MyBitVector): Document some invariants.
8406         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
8407         introduced below, and add a couple of others, 
8408
8409 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8410
8411         * attribute.cs (GetMethodObsoleteAttribute): Uses new
8412         GetPropertyFromAccessor and GetEventFromAccessor.
8413         
8414         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
8415         overrides non-obsolete one.
8416         (Indexer.Define): Error message has been moved to the parser.
8417
8418         * cs-parser.jay: Better syntax errors handling.
8419
8420         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
8421         when an invocation has no arguments.
8422
8423         * ecore.cs: Removed not used caching.
8424
8425         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
8426         implementation.
8427
8428         * report.cs: Add a new warning.
8429
8430         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
8431
8432         * typemanager.cs (enumeration_type): Removed.
8433         (CSharpSignature): Reuses IsSpecialMethod.
8434         (IsEqual): Hack for MS BCL.
8435         (GetPropertyFromAccessor): New method.
8436         (GetEventFromAccessor): New method.
8437         (IsSpecialMethod): Fixed to handle more cases.
8438
8439 2006-12-30  Marek Safar  <marek.safar@gmail.com>
8440
8441         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
8442         Made white spaces array static.
8443
8444         * ecore.cs (RemoveGenericArity): Optimized.
8445
8446         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
8447         10 times faster).
8448         (MyBitVector.initialize_vector): Simplified.
8449
8450 2006-12-22  Miguel de Icaza  <miguel@novell.com>
8451
8452         * ecore.cs: Am not entirely happy with this hack, but it seems to
8453         address the issue in 80257 (a small test case for
8454         CreativeDocs.NET). 
8455
8456         I set the MethodGroupExpr.Type to an internal compiler type
8457         (itself in this case) to force the resolution to take place.   Why
8458         it does not take place with a null is beyond me.
8459
8460 2006-12-20  Marek Safar  <marek.safar@gmail.com>
8461
8462         A fix for bug #80288
8463         * expression.cs (ResolveOperator): Consider user defined conversion for
8464         logical and operator too.
8465         (EmitBranchable): Optimization for logical and when full constant folding
8466         could not be applied but one operand is constant.
8467
8468 2006-12-19  Marek Safar  <marek.safar@gmail.com>
8469
8470         * class.cs (GetClassBases): Write 5 times every day, will never use
8471         FullName for error reporting.
8472
8473         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
8474
8475 2006-12-19  Martin Baulig  <martin@ximian.com>
8476
8477         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
8478         the symbol file info here.
8479
8480 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8481
8482         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
8483         of `elseif' is taking then following sections are not taking.
8484         Fixes an issue reported on mono mailing list.
8485
8486 2006-12-18  Marek Safar  <marek.safar@gmail.com>
8487
8488         A fix for bug #80300
8489         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
8490         a caller is not taking.
8491
8492 2006-12-18  Raja R Harinath  <rharinath@novell.com>
8493
8494         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
8495         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
8496         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
8497         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
8498         * class.cs: Update to changes.
8499
8500 2006-12-17  Marek Safar  <marek.safar@gmail.com>
8501
8502         A fix for bug #79934
8503         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
8504         partial container.
8505
8506         * class.cs (ResolveMembers): Register an iterator in current container and
8507         not in shared one.
8508
8509 2006-12-16  Raja R Harinath  <rharinath@novell.com>
8510
8511         Fix test-543.cs
8512         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
8513         satisfy a params annotated parameter.
8514
8515 2006-12-16  Marek Safar  <marek.safar@gmail.com>
8516
8517         A fix for bug #77014
8518         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
8519         paramters correctly and not rely on hacks in Parameters class.
8520         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
8521         at any possition.
8522         (Invocation.VerifyArgumentsCompat): Ditto.
8523         (Invocation.EmitArguments): Changed to correctly emit params arguments at
8524         any possition.
8525
8526         * parameter.cs (HasParams): Don't assume that params is the last one.
8527
8528         * support.cs (ReflectionParameters.ctor): Look for params attribute
8529         correctly.
8530         (ReflectionParameters.ParameterType): Removed hack when we returned last
8531         parameter for out of range parameters.
8532         (ParameterName, ParameterModifier): Ditto.
8533
8534 2006-12-14  Marek Safar  <marek.safar@gmail.com>
8535
8536         A fix for bug #79987
8537         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
8538         when assembly is not CLS compliant but type is. I have no idea why is this
8539         allowed.
8540
8541         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
8542
8543 2006-12-13  Miguel de Icaza  <miguel@novell.com>
8544
8545         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
8546         in struct constructors, they are basically no-ops.
8547
8548 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8549
8550         * cs-tokenizer.cs (Position): Save preprocessor status too.
8551
8552 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8553
8554         A fix for bug #77794
8555         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
8556
8557 2006-12-12  Marek Safar  <marek.safar@gmail.com>
8558
8559         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
8560         Fixes #69299.
8561         (pp_expr): Report error for an invalid expression.
8562         (handle_preprocessing_directive): Simplified; add more error checking.
8563
8564 2006-12-11  Marek Safar  <marek.safar@gmail.com>
8565
8566         A fix for bug #74939
8567         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
8568         directives handling.
8569
8570 2006-12-10  Marek Safar  <marek.safar@gmail.com>
8571
8572         A fix for bugs #80093, and #75984
8573         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
8574         logic, it seems to me as it worked before "by coincidence".
8575         (xtoken): Simplified to use reworked handle_preprocessing_directive.
8576         (cleanup): Enabled endif check.
8577
8578 2006-12-09  Marek Safar  <marek.safar@gmail.com>
8579
8580         A fix for bug #80162
8581         * statement.cs (CollectionForeach.TryType): Generics and non-generics
8582         enumerators are never ambiguous.
8583
8584 2006-12-08  Raja R Harinath  <rharinath@novell.com>
8585
8586         Fix #80060
8587         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
8588
8589 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8590
8591         A fix for bug #80144
8592         * class.cs (EventProperty.Define): Explicit implementation means
8593         that an even is used.
8594
8595 2006-12-06  Marek Safar  <marek.safar@gmail.com>
8596
8597         Fixes the operators implementation (part II)
8598
8599         * cfold.cs (DoConstantNumericPromotions): Renamed to
8600         DoBinaryNumericPromotions and simplified.
8601         (BinaryFold): Couple of conversion fixes; simplified.
8602
8603         * constant.cs, ecore.cs, literal.cs
8604         (ToType): Renamed to ConvertImplicitly.
8605         (Reduce): Renamed to ConvertExplicitly.
8606
8607         * class.cs, convert.cs: Updated.
8608
8609         * expression.cs: TryReduce doesn't throw an exception.
8610
8611 2006-12-01  Marek Safar  <marek.safar@gmail.com>
8612
8613         A fix for bug #80108
8614         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
8615         compatible.
8616
8617 2006-11-30  Marek Safar  <marek.safar@gmail.com>
8618
8619         Fixes unary operators implementation (part I)
8620         Also fixes #80026
8621
8622         * cfold.cs (Error_CompileTimeOverflow): Made internal
8623
8624         * const.cs (IConstant): Changed to use reference to constant and
8625         not constant itself.
8626         Updated IConstant implementations.
8627
8628         * constant.cs (CreateConstant): New factory method.
8629         Updated IConstant implementation.
8630
8631         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
8632
8633         * ecore.cs: Updated to use CreateConstantReference.
8634
8635         * enum.cs: Reflects IConstant changes.
8636
8637         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
8638
8639         * literal.cs (NullConstant): Change to be independently usable.
8640
8641 2006-11-29  Martin Baulig  <martin@ximian.com>
8642
8643         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
8644         we need to emit the scope initializer before calling the base .ctor.
8645
8646         * anonymous.cs: Merged back from the new anonymous methods branch.
8647         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
8648
8649         * expression.cs (ParameterReference.DoResolveBase): Create a
8650         "normal" ScopeInfo when capturing parameters rather than using the
8651         root scope; this makes things work with anonymous methods having
8652         parameters.
8653
8654         * statement.cs
8655         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
8656
8657 2006-11-22  Marek Safar  <marek.safar@gmail.com>
8658
8659         A fix for bug #79987
8660         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
8661         check to a base class.
8662         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
8663         only when assembly has missing attribute.
8664         * report.cs: Update.
8665
8666 2006-11-21  Marek Safar  <marek.safar@gmail.com>
8667
8668         * cs-tokenizer.cs: Merged with gmcs version.
8669
8670 2006-11-20  Marek Safar  <marek.safar@gmail.com>
8671
8672         * cs-tokenizer.cs,
8673         * cs-parser.jay: Better error message when partial keyword is misplaced.
8674
8675 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
8676
8677         A fix for bug #79810
8678         report.cs: CS1058 only applies to 2.0 profile (gmcs).
8679         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
8680         a RuntimeWrappedException by default.
8681
8682 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8683
8684         A fix for bug #79843
8685         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
8686         implementation.
8687         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
8688
8689 2006-11-18  Marek Safar  <marek.safar@gmail.com>
8690
8691         * driver.cs, namespace.cs: Uses faster IndexOf version.
8692
8693 2006-11-17  Marek Safar  <marek.safar@gmail.com>
8694
8695         A fix for bug #79941
8696         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
8697         operators.
8698         (Operator.Define): Implicit/Explicit operator of same type is duplicate
8699         even if internal name is different.
8700         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
8701         (UserDefinedConversion): Simplified as the operators cannot be internal.
8702         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
8703         conversions.
8704         (MethodLookup): Replaced EmitContext with parentType.
8705         * expression.cs: Updated.
8706
8707 2006-11-09  Raja R Harinath  <rharinath@novell.com>
8708
8709         * driver.cs (BadAssembly): Handle all the ugliness of
8710         DefineDynamicAssembly.
8711
8712 2006-11-08  Raja R Harinath  <rharinath@novell.com>
8713
8714         Address parts of #58244 -- most of what's left is in the runtime
8715         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
8716         CS1509 error checks, and handle them for all assembly loads, not
8717         just the first invocation.
8718         (LoadModule): Likewise.  Move handling of 'adder_method' ...
8719         * codegen.cs (AssemblyClass.AddModule): ... here.
8720
8721 2006-11-02  Marek Safar  <marek.safar@gmail.com>
8722
8723         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
8724         IEnumerable<T> is ambiguous.
8725
8726 2006-10-31  Marek Safar  <marek.safar@gmail.com>
8727
8728         A fix for bug #67689
8729         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
8730         GetEnumerator is ambiguous.
8731
8732         * report.cs: Add new warning.
8733
8734 2006-10-29  Marek Safar  <marek.safar@gmail.com>
8735
8736         A fix for bug #78602
8737         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8738         to protected member can be nested type.
8739
8740 2006-10-28  Marek Safar  <marek.safar@gmail.com>
8741
8742         A fix for bug #78965
8743         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
8744         to protected member must derive from current type.
8745
8746 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8747
8748         assign.cs: Reuses error method.
8749
8750         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
8751         instead of type for constants.
8752         (Expression.Error_ValueAssignment): Common error method.
8753
8754         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
8755         for any assignment.
8756
8757 2006-10-27  Marek Safar  <marek.safar@gmail.com>
8758
8759         A fix for bug #79081
8760         * expression.cs (MemberAccess.DoResolve): Check nested type
8761         accessibility.
8762
8763 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
8764
8765         * doc.cs : nested delegates were not handled. Fixed bug #79754.
8766
8767 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8768
8769         A fix for bug #76591
8770         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
8771
8772 2006-10-26  Marek Safar  <marek.safar@gmail.com>
8773
8774         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
8775         type forwarder of the same type multiple times.
8776
8777 2006-10-26  Raja R Harinath  <rharinath@novell.com>
8778
8779         Fix #78820
8780         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
8781         instance as an rvalue, even when we later resolve as an lvalue.
8782
8783 2006-10-25  Martin Baulig  <martin@ximian.com>
8784
8785         * anonymous.cs: Fix #79673.
8786
8787 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
8788
8789         A fix for bug #79666
8790         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
8791         ignored when is optimized (= default value) as its value is already set.
8792
8793 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8794
8795         A fix for bug #79724
8796         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
8797         TypeContainer for type lookup.
8798
8799 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
8800
8801         A fix for bug #79231
8802         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
8803         * expression.cs (OverloadResolve): Always convert type name for
8804         an error message.
8805         (ResolveNamespaceOrType): Don't confuse a nested type with any 
8806         other member.
8807
8808 2006-10-18  Martin Baulig <martin@ximian.com>
8809
8810         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
8811
8812 2006-10-17  Miguel de Icaza  <miguel@novell.com>
8813
8814         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
8815         an int32, but requesting an int64 from the conversion
8816
8817 2006-10-12  Martin Baulig  <martin@ximian.com>
8818
8819         * anonymous.cs
8820         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
8821         
8822 2006-10-12  Martin Baulig  <martin@ximian.com>
8823
8824         * statement.cs
8825         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
8826
8827 2006-10-11  Miguel de Icaza  <miguel@novell.com>
8828
8829         * convert.cs: Remove broken code: I was doing the "Existance"
8830         tests for Implicit conversions.
8831
8832 2006-10-10  Miguel de Icaza  <miguel@novell.com>
8833
8834         * convert.cs: Added one missing case in
8835         ImplicitStandardConversionExists uint64 to intptr.
8836
8837         Fixes #59800
8838         
8839         * typemanager.cs (uintptr_type): another core known type.   
8840
8841         * ecore.cs (OperatorCast): routine used to do cast operations that
8842         depend on op_Explicit.  We could change some of the Decimal
8843         conversions to use this.
8844
8845         This one has a probe mechanism that checks both types for an op_
8846         which it coudl be used to eliminate two classes: CastToDecimal
8847         and CastFromDecimal.
8848
8849         * convert.cs: Implement the conversions documented in #59800
8850         
8851 2006-10-10  Martin Baulig  <martin@ximian.com>
8852
8853         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
8854         before RootScope.ResolveMembers().
8855
8856         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
8857         `CurrentType' if appropriate.
8858
8859 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
8860
8861         A fix for bug #78568
8862         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
8863         when contains binary operators.
8864         * cs-parser.jay: Updated.
8865
8866 2006-10-09  Martin Baulig  <martin@ximian.com>
8867
8868         * delegate.cs
8869         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
8870         moved that into Define() and also do the other type parameter
8871         checks there.  Fixes #79094.  Added gtest-292.cs.
8872
8873         * expression.cs
8874         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
8875         since that doesn't include type parameters; don't use `Ldelema'
8876         for type parameters.  Fixes #78980.  Added gtest-293.cs.
8877
8878 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
8879
8880         A fix for #77796
8881         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
8882         conversion is allowed.
8883
8884 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8885
8886         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
8887         error reporting when no error occurs.
8888
8889 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
8890
8891         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
8892         does not exist.
8893
8894 2006-10-06  Raja R Harinath  <rharinath@novell.com>
8895
8896         Fix #79584
8897         * class.cs (DefineTypeBuilder): Check circular dependencies before
8898         setting the parent of the TypeBuilder.
8899         (CheckRecursiveDefinition): Don't use 'BaseType', since
8900         it may not be valid until after DefineTypeBuilder.  Use
8901         'base_type' instead.
8902
8903 2006-10-04  Martin Baulig  <martin@ximian.com>
8904
8905         Merged the Anonymous Methods patch.
8906
8907         * anonymous.cs, iterators.cs: The new anonymous methods code.
8908
8909         * statement.cs (Variable): New public abstract class.
8910         (LocalInfo.Variable): New public property.
8911         (LocalInfo.ResolveVariable): New public method.
8912         (Block.Flags): Add `IsIterator'.
8913         (Block.AddVariable): Improved the CS0136 check.
8914         (Block.AnonymousChildren): New public property.
8915         (Block.AddAnonymousChild): New public method.
8916         (ToplevelBlock): Update to use the new anonymous method framework.
8917         (ToplevelBlock.ctor): `container' is now a `Block' and not a
8918         `ToplevelBlock'; this is required to correctly implement the
8919         CS0136 check.
8920         (Fixed, Using): Use `TemporaryVariable' instead of directly
8921         creating the `LocalBuilder'.
8922
8923         * parameter.cs (Parameter.ResolveVariable): New public method.
8924         (Parameters.ResolveVariable): Likewise.
8925
8926         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
8927
8928         * class.cs (TypeContainer): Replaced the `iterators' list and
8929         corresponding methods with a list of `CompilerGeneratedClass'es.
8930         (TypeContainer.ResolveMembers): New public method.
8931         (Method): `IIteratorContainer' has been replaced by
8932         `IAnonymousHost'.
8933
8934         * expression.cs (VariableReference): New public abstract base
8935         class for `LocalVariableReference', `ParameterReference' and
8936         `This'.
8937
8938         * codegen.cs (EmitContext): Removed `capture_context',
8939         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
8940         (EmitContext.EmitThis): Removed.
8941
8942         * cs-parser.jay: Replace `iterator_container' with
8943         `anonymous_host'.       
8944
8945 2006-10-04  Martin Baulig  <martin@ximian.com>
8946
8947         * generic.cs (GenericMethod): Don't make this abstract.
8948         (Constraints.Clone): Added dummy implementation.
8949
8950 2006-10-04  Raja R Harinath  <harinath@gmail.com>
8951
8952         Fix #79577
8953         * namespace.cs (LookForAnyGenericType): Avoid nullref on
8954         'declspaces'.  Avoid allocating arrays willy-nilly.
8955
8956         Fix #79553
8957         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
8958         cases out of the switch.
8959
8960 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8961
8962         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
8963         message when non-generic type is used with the type arguments.
8964         * expression.cs: Updated.
8965
8966 2006-09-28  Raja R Harinath  <rharinath@novell.com>
8967
8968         Fix #79013
8969         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
8970         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
8971         Change semantics slightly.  Don't insist on having only one
8972         temporary EmptyExpression -- just throttle the creation of new ones.
8973
8974         Fix #79451
8975         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
8976         non-interfaces too.  If no methods are found, don't try to create
8977         a MethodGroupExpr.
8978
8979 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
8980
8981         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
8982         generic type.
8983
8984         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
8985         us produce better error message.
8986
8987 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
8988
8989         * expression.cs (Binary.ResolveOperator): Warn about a side effect
8990         of the `|' operator.
8991
8992         * report.cs: A new warning added.
8993
8994 2006-09-27  Martin Baulig  <martin@ximian.com>
8995
8996         * generic.cs (GenericMethod): Don't make this abstract.
8997
8998 2006-09-27  Martin Baulig  <martin@ximian.com>
8999
9000         * report.cs
9001         (InternalErrorException): Added overloaded ctor taking a params array.
9002
9003 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9004
9005         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9006         Fixed the cases when same error was reported twice.
9007
9008         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9009         now report symbol information.
9010
9011 2006-09-25  Martin Baulig  <martin@ximian.com>
9012
9013         * class.cs: Completely unified with the gmcs version.
9014
9015 2006-09-25  Martin Baulig  <martin@ximian.com>
9016
9017         * typemanager.cs (TypeManager.IsNullableType): New public function.
9018         (TypeManager.IsNullableTypeOf): Likewise.
9019         (TypeManager.IsNullableValueType): Likewise.
9020
9021         * class.cs (MethodCore): Added the `GenericMethod' argument from
9022         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9023
9024 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9025
9026         * convert.cs: Unify with gmcs version.
9027
9028 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9029
9030         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9031         verify them as well.
9032
9033         * report.cs: New warning.
9034
9035 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9036
9037         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9038         for anonymous block with out argument.
9039
9040 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9041
9042         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9043         not used private events only.
9044
9045 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9046
9047         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9048
9049         * const.cs (Const.Define): Check for constant type.
9050         (Const.IsConstantTypeValid): Looks for valid constant types.
9051
9052         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9053
9054         * ecore.cs (EmptyConstantCast): New common class for all constant based
9055         EmptyCast(s).
9056
9057         * expression.cs (Is.DoResolve): Handle null constant especially.
9058         (New.DoResolve): Check for new void().
9059         (MemberAccess.DoResolve): Cope with all kind of nulls.
9060
9061         * literal.cs (NullConstant): Uses EmptyConstantCast.
9062         (NullDefault): Based on EmptyConstantCast.
9063         (NullLiteral): Uses EmptyConstantCast.
9064
9065         * statement.cs (Block.ResolveMeta): Check for constant type.
9066
9067 2006-09-22  Martin Baulig  <martin@ximian.com>
9068
9069         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9070
9071 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9072
9073         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9074         not the null type.
9075
9076         Fix part of #79451
9077         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9078         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9079         code slightly.
9080
9081 2006-09-22  Martin Baulig  <martin@ximian.com>
9082
9083         * ecore.cs: Merged with the gmcs version.
9084
9085         * generic.cs (ConstructedType): New dummy class.
9086         (TypeArguments): Don't make this abstract.
9087
9088         * typemanager.cs
9089         (TypeManager.IsGenericTypeDefinition): New method.
9090         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9091
9092 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9093
9094         * expression.cs (ComposedCast): Check for arrays of TypedReference
9095         before creating the type, not after.
9096
9097 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9098
9099         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9100         after ToType change.
9101
9102         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9103         when constant must be implicitly convertible.
9104
9105         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9106
9107         * ecore.cs (NullCast): Derives from NullConstant.
9108
9109         * expression.cs (Is.DoResolve): Removed useless variables.
9110         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9111         (New.Constantify): Add enum support.
9112         (MemberAccess.DoResolve): Add warning when accessing null constant or
9113         variable.
9114
9115         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9116         property.
9117
9118         * literal.cs (NullConstant): New abstract class with common
9119         functionality for all null specializations.
9120         (NullDefault): Represents default(X) when result can be
9121         reduced to null.
9122         (NullLiteral): Updated.
9123
9124         * report.cs: Add new warning.
9125
9126 2006-09-21  Martin Baulig  <martin@ximian.com>
9127
9128         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9129
9130 2006-09-21  Martin Baulig  <martin@ximian.com>
9131
9132         * generic.cs (GenericConstraints): New dummy class.
9133         (Constraints): Likewise.
9134         (TypeParameter): Likewise.
9135         (TypeParameterName): Likewise.
9136         (GenericMethod): Likewise.
9137
9138         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9139
9140         * decl.cs: Merged with the gmcs version.
9141
9142 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9143
9144         * generic.cs (TypeParameter): Implement IMemberContainer.
9145         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9146
9147         * rootcontext.cs: Unify with gmcs version.
9148
9149         * report.cs: Unify with gmcs version.
9150         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9151         from gmcs/generics.cs.
9152         * generics.cs (TypeParameter): New dummy class.
9153
9154         * support.cs: Unify with gmcs version.
9155
9156 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9157
9158         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9159         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9160
9161         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9162         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9163         * mcs.exe.sources: Add generic.cs.
9164
9165         * codegen.cs: Unify with gmcs version.
9166
9167         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9168         (EmitContext): Add GenericDeclContainer implementation.
9169         * decl.cs (MemberCore, DeclSpace): Likewise.
9170         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9171
9172         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9173         MCS TypeManager has a corresponding dummy method.
9174
9175 2006-09-19  Martin Baulig  <martin@ximian.com>
9176
9177         * expression.cs: Completely merged with the gmcs version.
9178
9179 2006-09-19  Martin Baulig  <martin@ximian.com>
9180
9181         * expression.cs (Invocation): Merged with the gmcs version.
9182         (ArrayAccess.GetStoreOpcode): Likewise.
9183
9184 2006-09-19  Martin Baulig  <martin@ximian.com>
9185
9186         * typemanager.cs
9187         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9188         (TypeManager.IsGenericMethodDefinition): Likewise.
9189
9190 2006-09-19  Martin Baulig  <martin@ximian.com>
9191
9192         * typemanager.cs
9193         (TypeManager.IsEqual): Moved the gmcs implementation here.
9194         (TypeManager.DropGenericTypeArguments): Likewise.
9195         (TypeManager.DropGenericMethodArguments): Likewise.
9196         (TypeManager.GetTypeArguments): Moved here from gmcs.
9197         (TypeManager.HasGenericArguments): Likewise.
9198
9199 2006-09-19  Martin Baulig  <martin@ximian.com>
9200
9201         * expression.cs (Binary): Merged with the gmcs version.
9202
9203 2006-09-19  Martin Baulig  <martin@ximian.com>
9204
9205         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9206
9207 2006-09-19  Martin Baulig  <martin@ximian.com>
9208
9209         * typemanager.cs: Merged with the gmcs version.
9210
9211 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9212
9213         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9214         * driver.cs: Likewise.
9215
9216 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9217
9218         A fix for #79401
9219         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9220         only if parent type is class.
9221         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9222         update.
9223
9224 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9225
9226         * cs-parser.jay,
9227         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9228         keywords are used.
9229         * typemanager.cs(CSharpName): Converts NullType to null.
9230
9231 2006-09-15  Martin Baulig  <martin@ximian.com>
9232
9233         * typemanager.cs
9234         (TypeManager.GetMethodName): Added mcs implementation.
9235         (TypeManager.IsEqual): Likewise.
9236
9237         * ecore.cs
9238         (SimpleName.RemoveGenericArity): Added dummy implementation.
9239
9240         * pending.cs: Merged with the gmcs version.     
9241
9242 2006-09-15  Martin Baulig  <martin@ximian.com>
9243
9244         * statement.cs: Merge with the gmcs version.
9245
9246 2006-09-15  Martin Baulig  <martin@ximian.com>
9247
9248         * statement.cs (Switch): Merge with the gmcs implementation
9249         (without nullables), which is newer.
9250
9251 2006-09-15  Martin Baulig  <martin@ximian.com>
9252
9253         * statement.cs (Block.Variables): Make this public.
9254         (ToplevelBlock.Parameters): Make this a property.
9255         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
9256
9257 2006-09-15  Martin Baulig  <martin@ximian.com>
9258
9259         * namespace.cs: Merge with the gmcs version.
9260
9261 2006-09-15  Martin Baulig  <martin@ximian.com>
9262
9263         * decl.cs (MemberName): Minor code cleanups.
9264
9265 2006-09-15  Martin Baulig  <martin@ximian.com>
9266
9267         * parameter.cs: Merge with the gmcs version.
9268
9269 2006-09-15  Martin Baulig  <martin@ximian.com>
9270
9271         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
9272         and an error in mcs.
9273
9274 2006-09-15  Martin Baulig  <martin@ximian.com>
9275
9276         * flowanalysis.cs: Merged from GMCS; added the generics code into
9277         a `GMCS_SOURCE' conditional so we can share this file.
9278
9279 2006-09-08  Martin Baulig  <martin@ximian.com>
9280
9281         * typemanager.cs (TypeManager.interlocked_type): New public field.
9282         (TypeManager.int_interlocked_compare-exchange): New public field.
9283         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
9284         enumerator types here and call InitGenericCoreTypes().
9285         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
9286         after calling InitEnumUnderlyingTypes().
9287
9288         * rootcontext.cs
9289         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
9290         `classes_second_stage'. 
9291
9292 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
9293
9294         * assign.cs, ecore.cs, expression.cs: Share error message text.
9295         * class.cs (FieldMember.Define): Check for varible of static type.
9296         * driver.cs (LoadAssembly): Uses error output for errors.
9297         * statement.cs: Updated.
9298
9299 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
9300
9301         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
9302         type instance.
9303
9304 2006-09-07  Martin Baulig  <martin@ximian.com>
9305
9306         * driver.cs
9307         (MainDriver): Revert r62663 from Marek; see #70506 for details.
9308
9309 2006-08-29  Miguel de Icaza  <miguel@novell.com>
9310
9311         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
9312         
9313 2006-08-17  Miguel de Icaza  <miguel@novell.com>
9314
9315         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
9316         #52019 and #79064, the use of the \uXXXX sequence in source code
9317         to represent unicode characters.
9318
9319 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
9320
9321         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
9322         support.
9323         * class.cs, ecore.cs, statement.cs: Merged to one error message.
9324
9325 2006-08-13  Miguel de Icaza  <miguel@novell.com>
9326
9327         * assign.cs: Catch attempts to assign to a method groups in += and
9328         report as 1656
9329
9330 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
9331
9332         A fix for #79056
9333         * cs-parser.jay: Don't destroy current array type by typeof of array's.
9334
9335 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
9336
9337         * class.cs (Method.Define): Issue a warning when generic method looks like
9338         an entry point.
9339         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
9340         as well.
9341
9342 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
9343  
9344         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
9345         looking for ctor.
9346         * decl.cs (MemberCache.FindMembers): When container is interface we need to
9347         search all base interfaces as a member can be ambiguous.
9348         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
9349         Constructor member type filter. 
9350         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
9351         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
9352         reporting for returned memberinfos.
9353         * report.cs: Updated.
9354         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
9355         version to work on all runtimes.
9356         (TypeManager.RealMemberLookup): Removed members filtering.
9357
9358 2006-08-08  Raja R Harinath  <rharinath@novell.com>
9359
9360         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
9361         (PropertyExpr.EmitAssign): Likewise.
9362         * expression.cs (Indirection.EmitAssign): Likewise.
9363         (LocalVariableReference.EmitAssign): Likewise.
9364         (ParameterReference.EmitAssign): Likewise.
9365         (Invocation.EmitArguments): Likewise.
9366         (ArrayAccess.EmitAssign): Likewise.
9367         (IndexerAccess.EmitAssign): Likewise.
9368         (This.EmitAssign): Likewise.
9369         (ConditionalLogicalOperator.Emit): Likewise.
9370
9371         Fix #79026
9372         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
9373         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
9374         leave it in after returning it.
9375         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
9376
9377 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
9378
9379         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
9380         message.
9381
9382 2006-08-03  Raja R Harinath  <rharinath@novell.com>
9383
9384         Fix cs0146-3.cs and cs0146-4.cs.
9385         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
9386         enclosing types don't depend on the current type.
9387
9388 2006-08-02  Raja R Harinath  <rharinath@novell.com>
9389
9390         Fix #77963
9391         * class.cs (TypeContainer.DoDefineMembers): Use
9392         FindBaseMemberWithSameName on Parent, since we're interested in
9393         whether we hide inherited members or not.
9394         (FindBaseMemberWithSameName): Make slightly more robust.
9395
9396         Fix the non-generic testcase from #77396
9397         * decl.cs (DeclSpace.DeclContainer): Remove override.
9398
9399         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
9400         declspaces for doppelgangers too.
9401         (UsingEntry): Implement IResolveContext.
9402         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
9403         'this' as the resolve context.
9404         (LocalAliasEntry): Likewise.
9405
9406         Implement parts of #77403
9407         * roottypes.cs (RootDeclSpace): New.  Used to represent the
9408         toplevel declaration space.  Each namespace declaration introduces
9409         a "partial" root declaretion space.
9410         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
9411         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
9412         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
9413         from 'current_namespace.SlaveDeclSpace'.
9414         (namespace_declaration): Likewise.
9415         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
9416         check.  It can't happen now.
9417         * decl.cs (DeclSpace.LookupType): Likewise.
9418         * driver.cs (MainDriver): Sanity check.
9419
9420 2006-08-01  Raja R Harinath  <rharinath@novell.com>
9421
9422         * decl.cs (DeclSpace.FindNestedType): Remove.
9423         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
9424         LookupTypeContainer to get the container of the nested type.
9425         * class.cs (TypeContainer.FindNestedType): Make non-override.
9426
9427 2006-07-31  Raja R Harinath  <rharinath@novell.com>
9428
9429         * decl.cs (DeclSpace.PartialContainer): Move field from ...
9430         * class.cs (TypeContainer.PartialContainer): ... here.
9431         (TypeContainer.AddBasesForPart): New helper.
9432         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
9433         instead.
9434         * cs-parser.jay (current_class): Convert to DeclSpace.
9435         (struct_declaration, interface_declaration, class_declaration):
9436         Use AddBasesForPart instead of .Bases directly.
9437         * const.cs, iterators.cs: Update to changes.
9438
9439 2006-07-28  Raja R Harinath  <rharinath@novell.com>
9440
9441         * class.cs (TypeContainer.AddMemberType): Rename from
9442         AddToTypeContainer.
9443         (TypeContainer.AddMember): Rename from AddToMemberContainer.
9444         (AddTypeContainer): New.  Combine AddClassOrStruct and
9445         AddInterface.
9446         (AddPartial): Update.  Add 'is_partial' argument.
9447         * roottypes.cs: Update to changes.
9448         * cs-parser.jay (push_current_class): New helper for handling
9449         current_container and current_class.
9450         (struct_declaration, interface_declaration, class_declaration):
9451         Use it.
9452
9453 2006-07-26  Raja R Harinath  <rharinath@novell.com>
9454
9455         * roottypes.cs: Rename from tree.cs.
9456
9457         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
9458         * tree.cs (Tree, ITreeDump): Remove types.
9459         * rootcontext.cs (tree, Tree): Remove fields.
9460         (root, ToplevelTypes): New.
9461         * *.cs: Update to rename.
9462
9463         * tree.cs (Tree.RecordDecl): Remove.
9464         (RootTypes.AddToTypeContainer): Record the toplevel type in its
9465         namespace here.
9466         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
9467
9468 2006-07-23  Raja R Harinath  <harinath@gmail.com>
9469
9470         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
9471         DoFlowAnalysis and OmitStructFlowAnalysis here.
9472         (ec.With): Rename from WithUnsafe and generalize.
9473         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
9474         (ec.WithFlowAnalyis): New.
9475         * ecore.cs, expression.cs, statement.cs: Update.
9476
9477 2006-07-22  Raja R Harinath  <harinath@gmail.com>
9478
9479         * statement.cs (Block.ResolveMeta): Simplify slightly.
9480
9481         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
9482         multiple boolean fields.  Convert InUnsafe, constant_check_state,
9483         check_state to flags.
9484         (CheckState, ConstantCheckState): Update.
9485         (InUnsafe): New read-only property.
9486         (FlagsHandle): Rename from CheckStateHandle and convert to handle
9487         arbitrary flags.
9488         (WithUnsafe): New helper similar to WithCheckState.
9489         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
9490         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
9491
9492 2006-07-21  Raja R Harinath  <rharinath@novell.com>
9493
9494         Make comparisons use the same IL irrespective of whether they're
9495         in a 'checked' or 'unchecked' context: one of the issues in #78899
9496         * codegen.cs (EmitContext.CheckState): Make read-only property.
9497         (EmitContext.ConstantCheckState): Likewise.
9498         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
9499         helper that implement a save/restore stack for CheckState
9500         values.  This is the only way to change check-state.
9501         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
9502         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
9503         (CheckedExpr.EmitBranchable): New forwarding method.
9504         (UnCheckedExpr): Likewise.
9505         * statement.cs (Block.ResolveMeta): Use WithCheckState.
9506         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
9507         (Checked.Resolve, checked.DoEmit): Likewise.
9508
9509 2006-07-20  Miguel de Icaza  <miguel@novell.com>
9510
9511         * anonymous.cs: Cache the resolved anonymous delegate, and return
9512         this so that the ResolveTopBlock is only triggered once, not
9513         twice.
9514
9515         Currently we trigger ResolvetopBlock twice due to a first pass of
9516         argument check compatibility, and a second pass that does the
9517         actual resolution.   
9518         
9519 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9520
9521         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
9522         modifiers.
9523         * rootcontext.cs (Reset): Add helper_classes.
9524
9525 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
9526
9527         A fix for #78860
9528         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
9529         correctly.
9530
9531 2006-07-13  Miguel de Icaza  <miguel@novell.com>
9532
9533         * statement.cs (Lock): Handle expressions of type
9534         TypeManager.null_type specially.  Fixes #78770
9535
9536 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9537
9538         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
9539         to an event.
9540
9541 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
9542
9543         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
9544         for accessors as well.
9545         * ecore.cs (EventExpr): Add AccessorTable.
9546
9547 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
9548
9549         A fix for #78738
9550         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
9551         for CS0122 where appropriate.
9552         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
9553         level attributes.
9554         (Filter): Assembly can be null in the case of top level attributes.
9555
9556 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
9557
9558         A fix for #78690
9559
9560         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
9561         is done at global level.
9562
9563 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9564
9565         A fix for #77002, Implemented TypeForwarder support.
9566
9567         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
9568         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
9569         * typemanager.cs (): Add type_forwarder_attr_type.
9570
9571 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
9572
9573         * report.cs: Add CS0469 warning.
9574
9575 2006-06-21  Martin Baulig  <martin@ximian.com>
9576
9577         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
9578         the `try'-block, so we also report CS0016 etc. there.
9579
9580 2006-06-21  Martin Baulig  <martin@ximian.com>
9581
9582         * delegate.cs
9583         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
9584
9585 2006-06-21  Martin Baulig  <martin@ximian.com>
9586
9587         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
9588         also report CS1686 for parameters.
9589
9590 2006-06-21  Martin Baulig  <martin@ximian.com>
9591
9592         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
9593         instead of an error if the value is not implicitly convertible to
9594         the switch types; fixes #77964.
9595
9596 2006-06-21  Raja R Harinath  <rharinath@novell.com>
9597
9598         Fix #78673
9599         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
9600         FieldBuilder is null.
9601
9602         Fix #78662
9603         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
9604         'left' and 'right' before error-checking.
9605
9606 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
9607
9608         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
9609         Fixed bug #78601.
9610         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
9611         (FieldExpr.DoResolve): likewise.
9612         (PropertyExpr.InstanceResolve): likewise.
9613         (EventExpr.InstanceResolve): likewise. 
9614
9615 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
9616
9617         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
9618         attribute applicable tests for attribute argument.
9619
9620 2006-06-02  Raja R Harinath  <rharinath@novell.com>
9621
9622         Fix #78079
9623         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
9624         (Binary.OverloadResolve_PredefinedIntegral): New.
9625         (Binary.OverloadResolve_PredefinedFloating): New.
9626         (Binary.OverloadResolve_PredefinedString): New.
9627         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
9628         Follow the standard more closely, and treat numeric promotions in
9629         terms of overload resolution.
9630         (Binary.CheckShiftArguments): Simplify.
9631
9632 2006-06-01  Raja R Harinath  <rharinath@novell.com>
9633
9634         * flowanalysis.cs (MyBitVector): Simplify representation.
9635         (MyBitVector.Clone): Avoid allocating BitArray.
9636         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
9637         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
9638         (*): Update.  Change all references to MyBitVector.And and
9639         MyBitVector.Or to &= and |=.
9640
9641 2006-05-29  Raja R Harinath  <rharinath@novell.com>
9642
9643         Fix cs0231-[34].cs.
9644         * cs-parser.jay (formal_parameter_list): Extend the pattern below
9645         to param arguments too.
9646
9647 2006-05-26  Miguel de Icaza  <miguel@novell.com>
9648
9649         * cs-parser.jay: Catch another parsing form for arglist being
9650         followed by other arguments.  Fixes #78313.
9651
9652 2006-05-24  Raja R Harinath  <rharinath@novell.com>
9653
9654         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
9655         checking of out parameters to ...
9656         (FlowBranchingToplevel.Merge): ... here.
9657         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
9658         set, propagate the origin upward, and only complain if there was
9659         no other error.
9660         (FlowBranchingException.AddContinueOrigin): Likewise.
9661         (FlowBranchingException.AddReturnOrigin): Likewise.
9662         (FlowBranchingException.AddGotoOrigin): Likewise.       
9663
9664 2006-05-23  Raja R Harinath  <rharinath@novell.com>
9665
9666         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
9667         unreachable, skip it.
9668         (FlowBranchingException.Merge): Always propagate jumps, even if
9669         the finally block renders subsequent code unreachable.
9670
9671 2006-05-18  Raja R Harinath  <rharinath@novell.com>
9672
9673         Fix #77601
9674         * statement.cs (Goto.Resolve): Move responsibility for resolving
9675         'goto' to FlowBranching.AddGotoOrigin.
9676         (Goto.SetResolvedTarget): New.  Callback to set the
9677         LabeledStatement that's the target of the goto.
9678         (Goto.DoEmit): Use Leave instead of Br when crossing an
9679         unwind-protect boundary.
9680         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
9681         LookupLabel and adjust to new semantics.
9682         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
9683         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
9684         Goto.SetResolvedTarget to update target.
9685         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
9686         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
9687         AddBreakOrigin & co.  Delay propagation until ...
9688         (FlowBranchingException.Merge): ... this.
9689
9690         * statement.cs (Block.Resolve): Always depend on flow-branching to
9691         determine unreachability.  Kill workaround that originally emitted
9692         only one statement after an "unreachable" label (see infloop in
9693         test-515.cs).
9694
9695         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
9696         This is still "wrong", but anything better would probably need a
9697         multi-pass algorithm.
9698         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
9699         usage vector.  Force current usage vector to be reachable, to
9700         optimistically signify backward jumps.
9701         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
9702         detected.
9703         (FlowBranchingLabeled.Merge): New.  If no backward jump was
9704         detected, return the original salted-away usage vector instead,
9705         updated with appropriate changes.  Print unreachable warning if
9706         necessary.
9707         * statement.cs (Block.Resolve): Don't print unreachable warning on
9708         a labeled statement.
9709
9710 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
9711
9712         * driver.cs: Pass filename without path to AssemblyBuilder's 
9713         AddResourceFile. Fixes bug #78407.
9714
9715 2006-05-17  Raja R Harinath  <rharinath@novell.com>
9716
9717         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
9718         * flowanalysis.cs (FlowBranchingLabeled): ... here.
9719         (FlowBranching.MergeChild): Overwrite
9720         reachability information from Labeled branchings too.
9721
9722 2006-05-16  Raja R Harinath  <rharinath@novell.com>
9723
9724         * statement.cs (Goto.Resolve): Merge jump origins here ...
9725         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
9726
9727         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
9728         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
9729         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
9730         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
9731         here, ...
9732         * statement.cs (Goto.Resolve): ... not here.
9733         (Goto.Emit): Remove CS1632 check.
9734
9735 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
9736
9737         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
9738         error message.
9739
9740 2006-05-11  Raja R Harinath  <rharinath@novell.com>
9741
9742         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
9743         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
9744         (FlowBranchingException.Label): Likewise.
9745
9746         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
9747         given value.
9748         (MyBitVector.Or): Use it to avoid losing information (Count).
9749         (FlowBranching.MergeOrigins): Likewise.
9750
9751         * flowanalysis.cs (UsageVector.IsDirty): Remove.
9752         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
9753         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
9754         (UsageVector.ToString): Simplify.
9755         (UsageVector.MergeSiblings): Move here from ...
9756         (FlowBranching.Merge): ... here.
9757         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
9758         not a MyBitVector.
9759
9760 2006-05-10  Raja R Harinath  <rharinath@novell.com>
9761
9762         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
9763         null bitvector is treated as all-true.
9764
9765         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
9766         (MyBitVector): Rationalize invariants.  'vector != null' implies
9767         that we have our own copy of the bitvector.  Otherwise,
9768         'InheritsFrom == null' implies all inherited bits are true.
9769
9770 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
9771
9772         * statement.cs (LocalInfo): Add IsConstant.
9773         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
9774         local variable for constants.
9775
9776 2006-05-09  Raja R Harinath  <rharinath@novell.com>
9777
9778         * flowanalysis.cs (MyBitVector.Empty): New.
9779         (MyBitVector): Don't allow InheritedFrom to be null.
9780         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
9781         (UsageVector, FlowBranching): Update to changes.
9782
9783         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
9784         recursion.  The 'Parent == null' condition isn't sufficient for
9785         anonymous methods.
9786         (FlowBranching.AddBreakOrigin): Likewise.
9787         (FlowBranching.AddContinueOrigin): Likewise.
9788         (FlowBranching.AddReturnOrigin): Likewise.
9789         (FlowBranching.StealFinallyClauses): Likewise.
9790         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
9791         (FlowBranching.CheckOutParameters): Likewise.
9792         (FlowBranchingToplevel): Terminate all the above recursions here.
9793         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
9794         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
9795
9796         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
9797         toplevel block.
9798         (FlowBranchingToplevel): New.  Empty for now.
9799         (FlowBranching.MergeTopBlock): Update.
9800         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
9801         branching for the anonymous delegate.
9802         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
9803
9804         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
9805         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
9806         information at the start of the merge.  Reorganize.
9807
9808 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9809
9810         * class.cs (MethodData.Define): Method cannot implement interface accessor.
9811
9812 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9813
9814         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
9815         to newly introduced ctor.
9816
9817         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
9818         message to one place.
9819         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
9820         global namespace.
9821
9822 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
9823
9824         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
9825
9826         * ecore.cs (Expression.ResolveAsConstant): Updated.
9827
9828         * statement.cs (ResolveMeta): Updated.
9829
9830 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9831
9832         * cs-parser.jay: __arglist cannot be used in initializer.
9833
9834 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
9835
9836         A fix for #77879
9837         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
9838         private types.
9839
9840 2006-05-05  Raja R Harinath  <rharinath@novell.com>
9841
9842         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
9843         (LabeledStatement): Add 'name' parameter.
9844         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
9845         (Block.AddLabel): Update to changes.
9846         * cs-parser.jay (labeled_statement): Likewise.
9847
9848         * flowanalysis.cs (BranchingType.Labeled): New.
9849         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
9850         (FlowBranchingLabeled): New.  Does nothing for now, but will
9851         eventually handle 'goto' flows.
9852         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
9853         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
9854         that's terminated ...
9855         (Block.Resolve): ... here.
9856
9857         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
9858         (UsageVector.MergeFinallyOrigins): Likewise.
9859         (FlowBranching.InTryOrCatch): Likewise.
9860         (FlowBranching.AddFinallyVector): Likewise.
9861         (FlowBranchingException): Update to changes.
9862
9863         Fix #78290
9864         * statement.cs (Return.Resolve): Move error checking to ...
9865         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
9866         (FlowBranchingException): Handle return origins like break and
9867         continue origins.
9868         (FlowBranching.UsageVector.CheckOutParameters): Remove.
9869
9870 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9871
9872         A fix for #76122
9873         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
9874         filter.
9875
9876 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
9877
9878         A fix for #77543
9879         * class.cs (MethodData.Define): Do public accessor check only when method
9880         implements an interface.
9881
9882 2006-05-04  Raja R Harinath  <rharinath@novell.com>
9883
9884         Remove special handling of 'break'
9885         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
9886         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
9887         (UsageVector.Break): Remove.
9888         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
9889         reachability.
9890         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
9891
9892         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
9893         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
9894
9895 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9896
9897         A fix for #75726
9898         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
9899         be the interface member.
9900
9901 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
9902
9903         A fix for #60069
9904         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
9905         for emitting small (int) values.
9906
9907 2006-05-03  Raja R Harinath  <rharinath@novell.com>
9908
9909         Fix #59427
9910         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
9911         control-flow passes through the 'finally' after merging-in all the
9912         control-flows from 'try' and the 'catch' clauses.
9913
9914         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
9915         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
9916         always true at the only non-recursive entry point.
9917         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
9918         FlowBranchingBreakable.
9919         (FlowBranchingLoop): Remove.
9920         * statement.cs (Return.DoResolve): Update to changes.
9921
9922         Fix #76471, #76665
9923         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
9924         (FlowBranching.CreateBranching): Handle it: create a
9925         FlowBranchingContinuable.
9926         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
9927         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
9928         except that it handles the 'continue' command.
9929         (FlowBranching.UsageVector.MergeOrigins): Rename from
9930         MergeBreakOrigins.
9931         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
9932         except that it overrides AddContinueOrigin.
9933         (FlowBranchingException): Override AddContinueOrigin, similar to
9934         AddBreakOrigin.
9935         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
9936         Create a new branching around the embedded statement.
9937         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
9938         control flow after the embedded statement.
9939         (Continue.Resolve): Move all error checking to AddContinueOrigin.
9940
9941         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
9942         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
9943         FlowBranchingBreakable.
9944         (FlowBranchingSwitch): Remove.
9945
9946         Fix test-503.cs
9947         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
9948         error reporting to ...
9949         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
9950         Rename from 'AddBreakVector'.  Add new location argument.  Return
9951         a bool indicating whether the 'break' crosses an unwind-protect.
9952         (FlowBranchingException.AddBreakOrigin): Add.
9953         (FlowBranchingException.Merge): Propagate 'break's to surrounding
9954         flowbranching after updating with the effects of the 'finally'
9955         clause.
9956         (FlowBranchingBreakable): New common base class for
9957         FlowBranchingLoop and FlowBranchingSwitch.
9958
9959         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
9960         embedded statement.
9961         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
9962
9963 2006-05-02  Raja R Harinath  <rharinath@novell.com>
9964
9965         * statement.cs (Do.Resolve): If the loop is infinite, set the
9966         barrier.
9967         (While.Resolve, For.Resolve): Set a barrier after the embedded
9968         statement.  There's no direct control flow that goes from the end
9969         of the embedded statement to the end of the loop.
9970         * flowanalysis.cs (FlowBranching.Infinite): Remove.
9971         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
9972         above ensure that the reachability is correctly computed.
9973
9974         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
9975         (UsageVector.MergeBreakOrigins): If the current path is
9976         unreachable, treat it as if all parameters/locals are initialized.
9977         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
9978         infinite loops before merging-in break origins.
9979
9980         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
9981         (Reachability.Reachable): Split part into ...
9982         (Reachability.Unreachable): ... this.  Simplify.
9983         (Reachability.IsUnreachable): Use 'Unreachable' instead.
9984
9985         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
9986         (Reachability.SetThrowsSometimes): Likewise.
9987         (FlowBranchingBlock.MergeTopBlock): Don't compare against
9988         TriState.Always, use corresponding property.
9989         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
9990         (Block.Resolve): Likewise.  Remove some redundant checks.
9991
9992 2006-05-02  Raja R Harinath  <harinath@gmail.com>
9993
9994         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
9995         (Reachability.Meet): Don't bother checking AlwaysThrows --
9996         barrier is always set.
9997         (FlowBranchingBlock.Merge): Likewise.
9998
9999 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10000
10001         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10002         checks for unreachable.
10003
10004 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10005
10006         A fix for #77980
10007         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10008
10009         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10010         whether field is really assigned.
10011
10012 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10013
10014         * flowanalysis.cs (Reachability): Make 4-argument constructor
10015         private.
10016         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10017         (Reachability.Always): Rename from the highly misleading
10018         'Reachability.Never'.
10019         (FlowBranching.Merge): Update to changes.  Mark an impossible
10020         situation with a 'throw'.
10021         (*): Update to changes.
10022
10023 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10024
10025         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10026         Remove 'Undefined'.
10027         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10028         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10029         (*): Update to changes.
10030         * statement.cs: Update to changes.
10031
10032 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10033
10034         A fix for #78049
10035         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10036
10037 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10038
10039         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10040         dummy UsageVector.
10041
10042         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10043         argument to two arguments: an usage-vector and a bool.  Move call
10044         to FlowBranching.Merge () ...
10045         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10046
10047         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10048         handling of loop and switch reachability to ...
10049         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10050
10051 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10052
10053         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10054         handling to FlowBranchingLoop.InLoop.
10055         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10056
10057 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10058
10059         A fix for #78115
10060         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10061         anonymous method is allowed from AnonymousContainer here.
10062
10063         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10064
10065 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10066
10067         Fix #78156
10068         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10069
10070 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10071
10072         A fix for #49011.
10073         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10074         (DoubleConstant.Reduce): Ditto.
10075
10076 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10077
10078         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10079         Remove 'lvalue_right_side' argument.  Move parts to ...
10080         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10081         (LocalVariable.DoResolveLValue): ... these.
10082
10083 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10084
10085         Fix cs1655.cs
10086         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10087         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10088         (LocalVariableReference.DoResolveBase): Use it to implement new
10089         CS1655 check.
10090         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10091         (Argument.Resolve): Simplify.  Move CS1510 check ...
10092         * ecore.cs (Expression.ResolveLValue): ... here.
10093         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10094         (PropertyExpr.DoResolveLValue): Likewise.
10095         (FieldExpr.Report_AssignToReadonly): Likewise.
10096         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10097         LValueMemberAccess or LValueMemberOutAccess on instance depending
10098         on it.
10099         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10100         DoResolve as appropriate.
10101
10102 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10103
10104         Fix #75800
10105         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10106         implicit conversions on 'out' and 'ref' arguments.
10107
10108         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10109         improve clarity.  Remove dead code.
10110
10111         Fix #66031
10112         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10113         (Catch.Resolve): Resolve VarBlock if it exists.
10114
10115 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10116
10117         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10118         twice, this was some residual code, the enumerator was emitted
10119         properly in the two branche of if later.
10120
10121 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10122
10123         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10124         cast is never an lvalue.
10125         (Cast.DoResolve, Cast.ResolveRest): Combine.
10126         (Argument.Emit): Simplify slightly.  Move 'Expr is
10127         IMemoryLocation' check ...
10128         (Argument.Resolve): ... here.
10129         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10130
10131         Simplifications.  Fix cs0191-2.cs
10132         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10133         CS1649 and CS1651 to ...
10134         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10135         the actual selection of the error code and message to a lookup
10136         table.  Add a dummy return value to simplify callsites.
10137         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10138         readonly fields of other instances of the same type.  Move CS0197
10139         warning from ...
10140         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10141         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10142         resolution of an out or ref argument.  The code simplification
10143         above uses this invariant.
10144
10145 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10146
10147         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10148         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10149         CheckMarshallByRefAccess.  Drop parameter.
10150         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10151         warning.
10152         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10153         InstanceExpression.
10154         * report.cs (AllWarnings): Add CS1690.
10155         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10156         for ref access too.
10157         (LocalVariableReference.DoResolveBase): Update.
10158
10159 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10160
10161         * class.cs (MethodOrOperator): Moved common parts from method class.
10162         detect obsolete attributes.
10163         (Method.Define): Simplified as it reuses code from base.
10164         (Constructor.ValidAttributeTargets): Fixed issue found during
10165         refactoring.
10166         (Destructor.ValidAttributeTargets): Fixed issue found during
10167         refactoring.
10168         (Operator): Finished refactoring set off by #78020. Operator class is now
10169         ordinary method class.
10170
10171         * anonymous.cs: Updated.
10172
10173         * decl.cs (DeclSpace): Add IsGeneric
10174
10175 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10176
10177         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10178
10179 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10180
10181         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10182         detect obsolete attributes.
10183         (Method.CreateEmitContext): Moved to MethodOrOperator.
10184
10185 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10186
10187         A fix for #78048.
10188         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10189         customized exception to make crash detection easier.
10190         (MethodOrOperator): Started to work on new base class for methods and
10191         operators.
10192         (Method): Derives from MethodOrOperator.
10193         (Constructor.Emit): Emits its own attributes.
10194         (AbstractPropertyEventMethod.Emit): Ditto.
10195         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10196         patch.
10197         (Operator.Emit): It's temporary more tricky than should be.
10198         
10199         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10200
10201         * report.cs (InternalErrorException): Add ctor with inner exception.
10202
10203 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10204
10205         A fix for #76744.
10206         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10207         only not visible.
10208
10209 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10210
10211         A fix for #77916.
10212         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10213         array.
10214
10215 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10216
10217         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10218         attribute is present and Guid not.
10219         (Interface.ApplyAttributeBuilder): Ditto.
10220
10221         * attribute.cs: Add error message.
10222
10223 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10224
10225         A fix for #78020.
10226
10227         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10228         sources (it's composite) so hold them in extra array as they are used in
10229         Emit phase only. It worked in the previous versions by mistake.
10230         (Attribute.Emit): Emit attribute for more owners when exist.
10231
10232         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10233         it has now different behaviour.
10234
10235 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10236
10237         * constant.cs (Constant.IsDefaultInitializer): New method.
10238
10239         * class.cs: Updated.
10240
10241         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10242         re-initialize default values. It saves KBs almost for every assembly.
10243         Thanks Zoltan for the idea.
10244         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10245         (ArrayCreation.DoResolve): Resolve only once.
10246         (ArrayCreation.Emit): Emit static initializer only when it is faster.
10247         (ArrayCreation.GetAttributableValue): Cope with optimized values.
10248
10249 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
10250
10251         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
10252         From #77961.
10253
10254 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10255
10256         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
10257         in an embedded statement too.
10258
10259 2006-04-01  Raja R Harinath  <rharinath@novell.com>
10260
10261         Fix #77958
10262         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
10263
10264 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
10265
10266         A fix for #77966.
10267
10268         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
10269         was not specified.
10270
10271         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
10272
10273 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
10274
10275         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
10276         phase.
10277
10278         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
10279         LocalTemporary change.
10280
10281         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
10282         TypeContainer.
10283         (ClassOrStruct.DefineFieldInitializers): Implemented static field
10284         initializers optimization.
10285         (ClassOrStruct.TypeAttr): Moved from modifiers.
10286         (Constructor.CheckBase): Don't crash when static ctor has parameters.
10287         (FieldBase.ResolveInitializer): Resolves initializer.
10288         (FieldBase.HasDefaultInitializer): New property.
10289
10290         * cs-parser.jay: Removed message.
10291
10292         * expression.cs (CompilerGeneratedThis): New specialization.
10293
10294         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
10295
10296 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
10297
10298         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
10299
10300 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10301
10302         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
10303         be now EnumConstants only.
10304
10305 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
10306
10307         * attribute.cs, driver.cs: Reset more caches.
10308
10309 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10310
10311         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
10312
10313 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10314
10315         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
10316         for easier reuse. Updated all overrides.
10317         (IntegralConstant): New base class for all integral constants.
10318         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
10319         of the constant range, report custom error.
10320         (UIntConstant.Reduce): Fixed uint conversion.
10321
10322         * ecore.cs, literal.cs: Reduce updates.
10323
10324 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10325
10326         A fix for #75813.
10327
10328         * class.cs (Constructor.Define): Removed extra if for default ctors.
10329         A patch from Atsushi Enomoto.
10330
10331 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
10332
10333         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
10334         GetAttributableValue.
10335
10336         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
10337         when required.
10338
10339         * convert.cs (ImplicitConversionRequired): Error message moved to
10340         DoubleLiteral.
10341
10342         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
10343         automatic implicit conversion of an output value.
10344         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
10345
10346         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
10347         conversion.
10348         (TypeOf.GetAttributableValue): Add extra handling for object type.
10349
10350         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
10351         special error message.
10352
10353 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
10354
10355         * class.cs (Constructor.Emit): Don't crash when struct ctor is
10356         InternalCall.
10357         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
10358         compatible with MS runtime.
10359
10360 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
10361
10362         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
10363         attribute arguments here.
10364
10365         * class.cs (Indexer.Define): The check was moved to attribute class.
10366
10367 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
10368
10369         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
10370         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
10371         easier.
10372
10373 2006-03-22  Raja R Harinath  <rharinath@novell.com>
10374
10375         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
10376         mcs to keep code differences small.
10377         * attribute.cs (Attribute.GetParameterDefaultValue): New.
10378         * typemanager.cs (parameter_default_value_attribute_type): New.
10379         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
10380         CS1908 check.
10381
10382 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10383
10384         * expression.cs (StringConcat.Append): Reverted back to no warning state.
10385
10386 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
10387
10388         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
10389
10390         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
10391         the blocks too.
10392
10393 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
10394
10395         * doc-bootstrap.cs : fix build.
10396
10397 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10398
10399         * expression.cs (StringConcat.Append): Issue a warning when empty string
10400         is going to append.
10401
10402 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
10403
10404         * assign.cs (CompoundAssign.ResolveSource): Removed.
10405
10406         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
10407         clean up.
10408
10409         * class.cs (TypeContainer.FindMethods): Removed.
10410         (TypeContainer.CheckMemberUsage): Made static.
10411
10412         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
10413
10414         * constant.cs (CheckRange): Removed unused type argument.
10415         (CheckUnsigned): Removed unused type argument.
10416
10417         * cs-parser.jay: Updated after MemberAccess clean up.
10418         Uses Length for empty string test.
10419
10420         * cs-tokenizer.cs: Uses Length for empty string test.
10421         (IsCastToken): Made static.
10422         (is_hex): Made static.
10423         (real_type_suffix): Made static.
10424
10425         * decl.cs (SetupCache): Made static.
10426         (OnGenerateDocComment): Removed unused ds argument.
10427
10428         * delegate.cs (VerifyDelegate): Removed unused argument.
10429
10430         * doc.cs: Uses Length for empty string test.
10431
10432         * driver.cs: Uses Length for empty string test.
10433
10434         * enum.cs (IsValidEnumType): Made static
10435
10436         * expression.cs (EnumLiftUp): Removed unused argument.
10437         (ResolveMethodGroup): Ditto.
10438         (BetterConversion): Ditto.
10439         (GetVarargsTypes): Ditto.
10440         (UpdateIndices): Ditto.
10441         (ValidateInitializers): Ditto.
10442         (MemberAccess.ctor): Ditto.
10443         (GetIndexersForType): Ditto.
10444
10445         * flowanalysis.cs: (MergeFinally): Removed unused argument.
10446
10447         * iterators.cs: Updated after MemberAccess clean up.
10448
10449         * location.cs: Uses Length for empty string test.
10450
10451         * namespace.cs: Uses Length for empty string test.
10452
10453          * report.cs (CheckWarningCode): Made static.
10454
10455         * statement.cs (LabeledStatement): Removed unused argument.
10456
10457         * typemanager.cs (FilterNone): Removed.
10458
10459 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10460
10461         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
10462         obsolete.
10463
10464         * class.cs: Updated.
10465
10466 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10467
10468         * cs-parser.jay.cs: __arglist is not allowed for delegates.
10469
10470 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10471
10472         A fix for #77822.
10473
10474         * expression.cs (VerifyArgumentsCompat): Reverted to double error
10475         reporting, it's more tricky than I thought.
10476
10477 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
10478
10479         A fix for #77816.
10480
10481         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
10482         host container.
10483         (AnonymousMethod.ImplicitStandardConversionExists): New method.
10484         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
10485         Add more error reporting; Fixed issue with params.
10486
10487         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
10488
10489         * cs-parser.jay: AnonymousMethod requires host container.
10490
10491         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
10492
10493 2006-03-18  Raja R Harinath  <harinath@gmail.com>
10494
10495         * class.cs: Change 'TypeContainer ds' constructor argument to
10496         'DeclSpace parent'.  Some classes were missed below due to
10497         different naming convention.
10498
10499         * class.cs (MemberCore.Parent): Delete.  This makes the
10500         ParentContainer changes below enforceable by the compiler.
10501
10502         Treat pointers to enclosing declaration space as 'DeclSpace', not
10503         'TypeContainer'.
10504         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
10505         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
10506
10507         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
10508         of TypeContainer.
10509         (Block.AddThisVariable): Likewise.
10510         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
10511         (AbstractPropertyEventMethod.Emit): Likewise.
10512         (AbstractPropertyEventMethod.EmitMethod): Likewise.
10513         (GetMethod.Define, SetMethod.Define): Likewise.
10514         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
10515         (DelegateMethod.EmitMethod): Likewise.
10516
10517         Fix regression test-partial-13.cs.
10518         Rationalize use of PartialContainer.  Ensure that the partial
10519         class semantics can be tied to type-correctness, i.e., any
10520         violation will cause a compile error.
10521         * class.cs, const.cs: Access all fields that belong to class
10522         TypeContainer via ParentContainer.  Arguments of EmitContexts and
10523         Resolve()-like functions still use 'Parent'.
10524
10525         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
10526         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
10527         (PropertyMethod.CheckModifiers): Remove unused argument.
10528         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
10529         DeclSpace.
10530
10531 2006-03-17  Raja R Harinath  <harinath@gmail.com>
10532
10533         Make semantics of PartialContainer simpler.
10534         * decl.cs (DeclSpace.IsPartial): Remove.
10535         * class.cs (TypeContainer.IsPartial): Likewise.
10536         (TypeContainer..ctor): Set PartialContainer to point to self.
10537         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
10538         (TypeContainer.FindNestedType): Likewise.
10539         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
10540
10541 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
10542
10543         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
10544
10545 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10546
10547         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
10548         classes.
10549
10550 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
10551
10552         * class.cs (Operator.Define): An error for base conversion was not
10553         reported correctly.
10554
10555 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
10556
10557         * iterator.cs : yield break is allowed in try statement which has
10558           catch clauses. Fixed bug #77767.
10559
10560 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
10561
10562         A fix for #77593, #77574.
10563
10564         * class.cs (MethodCore.CheckBase): Another if for operator.
10565
10566 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
10567
10568         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
10569         were not resolved
10570
10571         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
10572         (DelegateCreation.ImplicitStandardConversionExists): New method for just
10573         conversion test.
10574         
10575         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
10576         not needed.
10577
10578         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
10579         Updated after another emitcontext usage was clean up. It should help us to
10580         synchronize with gmcs easier.
10581
10582 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
10583
10584         A fix for #77353.
10585
10586         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
10587         (Event.Define): ditto
10588         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
10589
10590         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
10591         Removed redundant code and set NewSlot for Invoke method too.
10592
10593         * parameter.cs (Parameters.ctor): Add custom, type ctor.
10594         (Parameters.MergeGenerated): New method. Use this method when you merge
10595         compiler generated argument with user arguments.
10596
10597 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
10598
10599         * attribute.cs (ResolveAsTypeTerminal): Removed.
10600
10601         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
10602         specialization for predefined types; 30% speed up.
10603         Finally placed obsolete check to right place.
10604         (Expression.ResolveType): Removed.
10605
10606         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
10607         Updated after ResolveType was removed.
10608
10609         * expression.cs (Cast.ctor): Check void cast.
10610         (Binary.ResolveAsTypeTerminal): Is never type.
10611         (Conditional.ResolveAsTypeTerminal): Is never type.
10612
10613         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
10614
10615 2006-03-01  Raja R Harinath  <rharinath@novell.com>
10616
10617         Fix #77679.
10618         * expression.cs (ParameterReference.DoResolveBase): Change return
10619         type to bool.
10620         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
10621         Update.
10622
10623         Fix #77628.
10624         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
10625
10626         Fix #77642.
10627         * typemanager.cs (GetFullNameSignature): Don't nullref on
10628         protected accessors.
10629
10630 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
10631
10632         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
10633         these two separated members to simplify the code.
10634         (Attribute.Resolve): Refactored to use new fields and methods.
10635         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
10636         implemented obsolete attribute checking.
10637         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
10638         implemented obsolete checking again. It look line never ending quest ;-)
10639         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
10640
10641         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
10642
10643         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
10644
10645         *class.cs (Property.Define): Add RegisterProperty call.
10646
10647         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
10648         argument groups (only 2).
10649
10650         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
10651         encoding expression to arguments.
10652         (Expression.ExprClassToResolveFlags): Just turned to property.
10653
10654         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
10655         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
10656         optimized as well as implemented support for zero-length attributes.
10657
10658         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
10659         Add caching of PropertyInfo's.
10660
10661 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10662
10663         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
10664         error multiple times.
10665
10666 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
10667
10668         New partial class implementation.
10669         A fix for #77027, #77029, #77403
10670
10671         * attribute.cs (Attributable): Made attributes protected.
10672
10673         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
10674         the replacements of ClassPart and PartialContainer.
10675         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
10676         (TypeContainer.AddInterface): Ditto.
10677         (TypeContainer.AddPartial): The main method for partial classes. It checks
10678         for errors and merges ModFlags and attributes. At the end class is added to
10679         partial_parts list.
10680         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
10681         required here.
10682         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
10683         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
10684         from the rest of partial classes.
10685         (TypeContainer.GetClassBases): Simplified.
10686         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
10687         DefineType.
10688         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
10689         (TypeContainer.HasExplicitLayout): Uses Flags now.
10690         (PartialContainer): Removed.
10691         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
10692         (StaticClass): Was merged with Class.
10693         (Class.GetClassBases): class and static class bases are verified here.
10694         (Class.TypeAttr): Added static attributes when class is static.
10695         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
10696         (MemberBase): In some cases we need to call parent container for partial
10697         class. It should be eliminated but it's not easy now.
10698
10699         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
10700
10701         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
10702         partial classed to accumulate class comments.
10703         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
10704
10705         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
10706
10707         * driver.cs (MainDriver): Tree.GetDecl was removed.
10708
10709         * modifiers.cs (Modifiers): Add partial modifier.
10710
10711         * tree.cs (Tree.decl): Removed.
10712         (RootTypes): Started to use this class more often for root types
10713         specializations.
10714
10715 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10716
10717         A fix for #77615
10718
10719         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
10720         external interface does not have an attribute.
10721
10722 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
10723
10724         Another prerequisites for new partial classs implementation.
10725         
10726         * attribute.cs (Attribute.Equal): Implemented.
10727         (Attribute.Emit): Changed as attributes can be applied more than twice.
10728         (Attributes.Emit): Check for duplicate attributes here.
10729
10730         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
10731         as a parameter, clean-up.
10732
10733 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10734
10735         A fix for #77485
10736
10737         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
10738         contains obsolete attribute check which can in some cases look for base
10739         type of current class which is not initialized yet.
10740         (TypeContainer.BaseType): Replacement of ptype.
10741
10742         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
10743
10744 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
10745
10746         First of prerequisites for new partial classs implemention.
10747         
10748         * attribute.cs (Attributable): Extended by ResolveContext;
10749         Attributes finally have correct context for resolving in all cases.
10750         (AttachTo): Attribute owner is assigned here.
10751
10752         * codegen.cs (IResolveContext): Introduce new interface to hold
10753         all information needed in resolving phase.
10754         (EmitContext): Implements IResolveContext; more clean-up needed here.
10755         
10756         * decl.cs (MemberCore): Implemented IResolveContext.
10757
10758         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
10759         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
10760         parameter.cs, statement.cs, tree.cs, typemanager.cs:
10761         Refactored to use new IResolveContext instead of EmitContext; cleanup
10762
10763 2006-02-06  Miguel de Icaza  <miguel@novell.com>
10764
10765         * codegen.cs (EmitScopeInitFromBlock): check here the
10766         capture_context, there is no need to make two calls to the
10767         EmitContext. 
10768
10769         * anonymous.cs: Add some debugging messages that might help me
10770         track other instances of this problem in the future (the
10771         regression of test 467).
10772
10773         * cs-parser.jay: track the variable block, as we need to initalize
10774         any captured variables declared in this block for the "catch"
10775         portion of the "Try" statement.
10776
10777         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
10778         scope initialization for captured variables. 
10779
10780         Also, move the emit for the variables after the block location has
10781         been marked.
10782
10783 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
10784
10785         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
10786
10787 2006-02-02  Miguel de Icaza  <miguel@novell.com>
10788
10789         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
10790         commit yesterday, the initialization for the roots is necessary.
10791         What is not necessary is the scope activation.
10792
10793 2006-02-02  Raja R Harinath  <rharinath@novell.com>
10794
10795         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
10796         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
10797         CS0206 checks.
10798         (Argument.Resolve): Remove CS0206 checks.
10799
10800 2006-02-01  Miguel de Icaza  <miguel@novell.com>
10801
10802         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
10803         scopes for all the roots, the scopes will now be emitted when the
10804         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
10805
10806         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
10807         code.  This reduces a lot of existing cruft.
10808         
10809         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
10810         that the ScopeInfo is generated as we enter the scope, not at the
10811         time of use, which is what we used to do before.
10812
10813         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
10814         every time a Block is about to be emitted if we have a
10815         CaptureContext. 
10816
10817 2006-02-01  Raja R Harinath  <rharinath@novell.com>
10818
10819         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
10820         (Reset): Update.
10821         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
10822
10823         * typemanager.cs (cons_param_array_attribute): Make private.
10824         (Reset): Set it to null.
10825         (InitCoreHelpers): Don't initialize it.
10826         (ConsParamArrayAttribute): New.  Initialize it as needed.
10827         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
10828
10829 2006-01-31  Miguel de Icaza  <miguel@novell.com>
10830
10831         * expression.cs: There might be errors reported during the
10832         selection of applicable methods.  If there are errors, do not
10833         continue execution as it will lead the compiler to crash.
10834
10835 2006-01-30  Miguel de Icaza  <miguel@novell.com>
10836
10837         * expression.cs: Member access is not allowed on anonymous
10838         methods.  Fixes #77402.
10839
10840 2006-01-30  Raja R Harinath  <rharinath@novell.com>
10841
10842         Fix #77401
10843         * cs-parser.jay (VariableDeclaration): Don't set
10844         current_array_type to null.
10845         (field_declaration, event_declaration, declaration_statement):
10846         Set it to null here.
10847
10848 2006-01-28  Raja R Harinath  <harinath@gmail.com>
10849
10850         * typemanager.cs (GenericParameterPosition): New.
10851         * doc.cs: Use it.
10852
10853 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
10854
10855         * doc.cs : To process "include" elements, first we should create
10856           another list than XmlNodeList, because it could result in node
10857           removal, which could result in that the XmlNodeList gives up
10858           yielding next node.
10859
10860           (Also made code identical to gmcs again.)
10861
10862 2006-01-25  Miguel de Icaza  <miguel@novell.com>
10863
10864         * ecore.cs: Introduce an error report that we were not catching
10865         before, if not silent, we must report the error.  Gonzalo ran into
10866         it.
10867
10868 2006-01-23  Miguel de Icaza  <miguel@novell.com>
10869
10870         A fix for bug: #76957
10871         
10872         * iterators.cs (MoveNextMethod.CreateMethodHost): call
10873         ComputeMethodHost before creating the method, this is a new
10874         requirement. 
10875
10876         * anonymous.cs (AnonymousContainer): Now we track all the scopes
10877         that this method references (RegisterScope).  The actual scope
10878         where the method is hosted is computed with the ComputeMethodHost
10879         before we create the method.
10880
10881         Moved the Deepest routine here.
10882
10883         (AnonymousContainer.ComputeMethodHost): New routine used to
10884         compute the proper ScopeInfo that will host the anonymous method.
10885
10886         (ScopeInfo): Deal with multiple roots.  The problem was that we
10887         did not have a unique root where all ScopeInfos could be hanged
10888         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
10889         of roots.  
10890
10891         Remove AdjustMethodScope which is now computed at the end.  Remove
10892         LinkScope which did a partial link, instead link all ScopeInfos
10893         before code generation from the new "LinkScopes" routine. 
10894
10895         Simplify all the Add* routines as they no longer need to maintain
10896         the tree, they just need to record that they are using variables
10897         from a ScopeInfo.
10898
10899         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
10900         routines to produce the forest of ScopeInfo trees.
10901
10902         * class.cs (TypeContainer.AppendMethod): This is just like
10903         AddMethod, but ensures that an interface implementation method
10904         (IEnumerable.XXX) is not inserted at the beginning of the queue of
10905         methods, but at the end.
10906
10907         We use this functionality to ensure that the generated MoveNext
10908         method in the iterator class is resolved/emitted before the
10909         enumerator methods created.   
10910
10911         This is required because the MoveNext method computes the right
10912         ScopeInfo for the method.  And the other methods will eventually
10913         need to resolve and fetch information computed from the anonymous
10914         method. 
10915
10916 2006-01-21  Raja R Harinath  <harinath@gmail.com>
10917             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
10918
10919         Fix rest of #76995.
10920         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
10921         the 'aliases' hash.
10922         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
10923         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
10924
10925 2006-01-18  Raja R Harinath  <rharinath@novell.com>
10926
10927         Fix #76656, cs0231-2.cs.
10928         * cs-parser.jay (formal_parameter_list): Make error case catch
10929         more issues.
10930         (parenthesized_expression_0): Add CS1026 check.
10931         (invocation_expression): Remove unused { $$ = lexer.Location }.
10932
10933 2006-01-17  Raja R Harinath  <rharinath@novell.com>
10934
10935         Fix #76824.
10936         * cs-parser.jay (statement_expression): Don't list out the
10937         individual statement-expressions.  Convert syntax error into
10938         CS0201 check.
10939
10940 2006-01-16  Raja R Harinath  <rharinath@novell.com>
10941
10942         Fix #76874.
10943         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
10944         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
10945         CheckIntermediateModification.
10946         (FieldExpr.DoResolve): Add new two-argument version that
10947         allows us to resolve the InstanceExpression as an lvalue.
10948         The one-argument variant is now just a wrapper.
10949         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
10950         Resolve the lhs as an lvalue if the it has a value type.
10951         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
10952         from Assign.DoResolve.
10953         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
10954         resolved as an lvalue.
10955         (PropertyExpr.DoResolve): Update.
10956         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
10957         has a value type.  Move CS1612 check here from
10958         CheckIntermediateModification.
10959         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
10960         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
10961         'right_side' of a ResolveLValue on an 'out' argument.
10962         (EmptyExpression.LValueMemberAccess): New.  Used as the
10963         'right_side' of a propagated ResolveLValue on a value type.
10964         (LocalVariableReference.DoResolveBase): Recognize
10965         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
10966         Add CS1654 check.
10967         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
10968         EmptyExpression.Null.
10969
10970 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
10971
10972         * typemanager.cs : added IsGenericParameter(). In mcs it always
10973           return false.
10974         * doc.cs : for generic parameters, use GenericParameterPosition,
10975           not FullName.
10976
10977 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
10978
10979         * expression.cs: Fix Console.WriteLine ((this = x).foo);
10980
10981 2006-01-12  Miguel de Icaza  <miguel@novell.com>
10982
10983         This fixes the problem where we used ldfld instead of ldflda to
10984         load the "THIS" pointer on captured parameters, when THIS is a
10985         value type.  See bug #77205.
10986         
10987         * iterators.cs (CapturedThisReference.Emit): Pass false to
10988         EmitThis (we do not need the address).
10989
10990         * codegen.cs (EmitThis): it needs to know whether we need the
10991         address of `this' or not.  This is used by value types.  
10992
10993         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
10994         every other call passes false.
10995
10996 2006-01-12  Raja R Harinath  <rharinath@novell.com>
10997
10998         Fix #77221.
10999         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11000         GetOverride.
11001         * expression.cs (Invocation.OverloadResolve): Update.
11002         (Invocation.DoResolve): Avoid double resolution of invocation.
11003
11004 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11005
11006         Fix #77180.
11007         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11008         unary negation of floating point types as 0-expr; negation cannot
11009         overflow in floating point types.
11010
11011         Fix #77204.
11012         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11013         on operands of 'void' type.
11014
11015         Fix #77200.
11016         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11017         and ExclusiveOr for boolean constants too.
11018
11019 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11020
11021         Fix #75636.
11022         * expression.cs (Invocation.OverloadResolve): Replace reflected
11023         override methods with their base virtual methods, rather than
11024         skipping over them.
11025         * typemanager.cs (TypeManager.GetOverride): New.
11026
11027 2006-01-05  Jb Evain  <jbevain@gmail.com>
11028
11029         * class.cs (Property.Define, Indexer.Define): do not tag the
11030         properties as SpecialName | RTSpecialName.
11031
11032 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11033
11034         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11035         doing a low-level comparission of parameter types.  It was lacking
11036         a check for __argslist. 
11037
11038 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11039
11040         * expression.cs (ParameterReference.DoResolveBase): Allow
11041         reference parameters if they are local to this block. 
11042
11043         This allows the ref and out parameters of a delegate to be used in
11044         an anonymous method, for example:
11045
11046         delegate void set (out int x);
11047
11048         set s = delegate (out int x){
11049                 x = 0;
11050         };
11051
11052         This is used by functionality introduced late in the C# language.
11053         
11054         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11055         method that take ref and out parameters. 
11056
11057         Fixes #77119 which was a late change in the spec.
11058
11059 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11060
11061         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11062         parent if its the same scope.  Fixes #77060.
11063
11064 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11065
11066         * driver.cs: Report the case of no source files and no -out:
11067         argument provided.
11068
11069 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11070
11071         Fix #77035.
11072         * expression.cs (ComposedCast.GetSignatureForError): Define.
11073
11074 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11075
11076         Fix #76995
11077
11078         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11079         ListDictionary, to contain the ExternAliasEntry entries (in
11080         addition to the NamespaceEntry.aliases hashtable). This field is
11081         shared between the original entry and its doppelganger (bodyless 
11082         copy of it).
11083         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11084         extern_aliases field.
11085         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11086         lookup in extern_aliases.
11087
11088 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11089
11090         Fix #77006.
11091         * class.cs (TypeContainer.Mark_HasEquals): New.
11092         (TypeContainer.Mark_HasGetHashCode): New.
11093         (ClassPart): Override them.
11094         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11095
11096         Fix #77008.
11097         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11098         'parent' argument to the base constructor.
11099
11100         Remove all mention of TypeContainer from decl.cs.
11101         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11102         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11103         (DeclSpace.DeclSpace): Likewise.
11104         (DeclSpace.DefineMembers): Remove unused argument.
11105         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11106         debugging check -- we don't care if the debug code throws an
11107         InvalidCastException instead of an InternalErrorException.
11108         * class.cs (TypeContainer.DefineMembers): Update to changes.
11109         (TypeContainer.DoDefineMembers): Likewise.
11110         (TypeContainer.GetMethods): Likewise.
11111         (PropertyMember.Define): Likewise.
11112         (MemberBase.Parent): New property that forwards to
11113         MemberCore.Parent, but ensures that we get a TypeContainer.
11114         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11115         (RootContext.PopulateTypes): Likewise.  Remove special case code
11116         for !RootContext.StdLib: DefineMembers is idempotent.
11117
11118 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11119
11120         * convert.cs (ExplicitConversionCore): Check the return value from
11121         ExplicitConversionCore which can return null on failure.  Fixes #76914
11122
11123 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11124
11125         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11126
11127 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11128
11129         * doc.cs : The search for referenced namespace was insufficient to
11130           get global one as it used to do. Fixed bug #76965.
11131
11132 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11133
11134         * doc.cs : check name in cref in the last phase that whether it is
11135           namespace or not.
11136
11137 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11138
11139         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11140           Mono.C5.
11141
11142 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11143
11144         * doc.cs : so it turned out that we cannot skip override check for 
11145           interface members. Fixed bug #76954.
11146
11147 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11148
11149         * cs-tokenizer.cs : fixed bug #75984:
11150           - #warning and #error should not be handled when the source line
11151             is disabled.
11152           - #line is not checked strictly when the source line is disabled.
11153           - #define and #undef is on the other hand checked strictly at any
11154             state.
11155
11156 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11157
11158         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11159           CS1027 report.
11160
11161 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11162
11163         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11164
11165         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11166         event initializers.
11167         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11168         (FieldBase.Initializer): Initializer is now optional.
11169         (EventField.Define): Only event field can have initializer.
11170
11171         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11172
11173         * const.cs (Const): Reuse initializer.
11174
11175         * cs-parser.jay: Updated after FieldBase changes.
11176         Added current_array_type to simplify array initializers.
11177
11178         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11179
11180         * expression.cs, iterators.cs: Updated.
11181
11182         * namespace.cs (NamespaceEntry): Made UsingFound private.
11183
11184 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11185
11186         * parameterCollection.cs: Obsolete, removed.
11187         * parser.cs: Obsolete, removed.
11188
11189 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11190
11191         Fix #76849.
11192         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11193
11194         * enum.cs (Enum.Define): Set obsolete context here.
11195
11196 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11197
11198         * doc.cs :
11199           - FindDocumentedMember() now expects 1) paramList as null
11200             when "we don't have to check the number of parameters" and
11201             2) Type.EmptyTypes when "there is no arguments".
11202           - Introduced FoundMember struct to hold the exact type which was
11203             used to find the documented member (the above change broke
11204             test-xml-044; it might be better just to use DeclaringType than
11205             what MS does, like this change does, but it depends on usage.)
11206
11207 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11208
11209         * doc.cs : documented member might be from DeclaringType for nested
11210           types. Fixed bug #76782.
11211
11212 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11213
11214         * anonymous.cs: Have the param code handle leaving copies on the
11215         stack etc. Allows anonymous params to take part in the assignment
11216         code (++, +=, etc). Fixes bug #76550
11217
11218         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11219         it down to the anon code.
11220
11221         * iterators.cs: Use dummy var here
11222
11223         * codegen.cs: Handle new vars
11224
11225 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11226
11227         Fix #76849.
11228         * class.cs (MethodData.Define): Set proper Obsolete context.
11229
11230         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11231         obsolete context.
11232         (FieldExpr.DoResolve): Ditto.
11233
11234 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11235
11236         Fix #76849.
11237         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11238         parent is not obsolete.
11239
11240 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11241
11242         * doc.cs : (FindDocumentedMember) find parameterless members first
11243           and get CS0419 in the early stage. Fixed first case of bug #76727.
11244
11245 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
11246
11247         Fix #76859.
11248         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
11249         no error was reported.
11250
11251         *expression.cs (Binary.DoResolve): left can be null.
11252
11253 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
11254
11255         Fix #76783.
11256         * class.cs (MethodData.Emit): Parameters should be labeled first.
11257
11258 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
11259
11260         Fix #76761.
11261         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
11262
11263 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
11264
11265         * attribute.cs (AreParametersCompliant): Moved to Parameter.
11266
11267         * class.cs (MethodCore): Parameter clean up.
11268         (IMethodData): Added ParameterInfo.
11269         (MethodData): Parameter clean up.
11270         (Indexer.Define): Parameter clean up.
11271
11272         * anonymous.cs,
11273         * codegen.cs,
11274         * cs-parser.jay,
11275         * decl.cs,
11276         * doc.cs,
11277         * ecore.cs,
11278         * flowanalysis.cs,
11279         * iterators.cs,
11280         * pending.cs,
11281         * statement.cs,
11282         * typemanager.cs: Parameter clean up.
11283
11284         * delegate.cs (Define): Get rid of duplicated code.
11285
11286         * expression.cs (ParameterReference): Removed useless parameters
11287         and simplified.
11288         (Invocation): Ditto.
11289
11290         * parameter.cs (ParamsParameter): New class, params specialization.
11291         (ArglistParameter): Attemp to separate arglist.
11292         (Parameter): Refactored to be reusable and faster.
11293         (Parameter.Modifier): Made understandable.
11294         (Parameters): Changed to be used as a class for `this' assembly
11295         parameters. Refactored to use new specialized classes.
11296
11297         * support.cs (ParameterData): Added Types property.
11298         (InternalParameters): Deleted.
11299
11300 2005-08-20  Martin Baulig  <martin@ximian.com>
11301
11302         Merging this patch from GMCS to fix #75867.
11303
11304         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
11305         scope if we don't already have it.
11306
11307 2005-11-17  Martin Baulig  <martin@ximian.com>
11308
11309         * anonymous.cs
11310         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
11311         inherit the scope from our parent.  Fixes #76653.
11312
11313 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11314
11315         * doc.cs : the previous patch does not actually fix the bug.
11316           PropertyInfo override check is now implemented and really fixed it.
11317         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
11318
11319 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11320
11321         * doc.cs : apply "override filter" also to properties.
11322           Fixed bug #76730.
11323
11324 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
11325
11326         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
11327           no need to check overrides. For classes, omit those results from 
11328           interfaces since they must exist in the class. Fixed bug #76726.
11329
11330 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11331
11332         * typemanager.cs : (GetFullNameSignature) differentiate indexers
11333           with different parameters. Fixed the second problem in #76685.
11334
11335 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11336
11337         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
11338           get expected 'protected' access in CheckValidFamilyAccess()).
11339           Fixed bug #76692.
11340
11341 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
11342
11343         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
11344           Fixed bug #76705.  CS1569 was incorrectly commented out.
11345
11346 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11347
11348         * doc.cs : use Invocation.IsOverride() to do real override check.
11349         * expression.cs : made Invocation.IsOverride() internal.
11350
11351 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
11352
11353         * doc.cs : use TypeManager.FindMembers() instead of (possible)
11354           TypeBuilder.FindMembers() and filter overriden base members out.
11355           Fixed bug #76990.
11356
11357 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11358
11359         * doc.cs : ref/out parameters are represented as '@' (instead of
11360           '&' in type FullName). Fixed bug #76630 (additionally crefs).
11361
11362 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11363
11364         * doc.cs : when there was no '.' in cref to methods in doc comment,
11365           then parameters were missing in the output. Fixed bug #76691.
11366
11367 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11368
11369         * driver.cs : don't output docs when there is an error.
11370           Fixed bug #76693.
11371
11372 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11373
11374         * doc.cs :
11375           Now it should detect indexers. Fixed primary concern in bug #76685.
11376           Fixed CS0419 message to not show the identical member signature in
11377           the message.
11378
11379 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
11380
11381         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
11382           instead of Type.FindMembers() since it does not handle events.
11383           Fixed bug #71604.
11384
11385 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
11386
11387         * codegen.cs: Fixed typo (speficied -> specified).
11388
11389 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11390
11391         Fix #76369.
11392         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
11393
11394 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
11395
11396         * attribute.cs: Changed error message.
11397
11398         * cs-tokenizer.cs: One more check.
11399
11400 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11401
11402         * statement.cs (Block.Resolve): Ignore empty statement.
11403
11404 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
11405
11406         * report.cs: Made error/warning methods more strict to avoid
11407         their misuse.
11408
11409         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
11410         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
11411         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
11412         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
11413
11414 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
11415
11416         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
11417         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
11418
11419         * class.cs (TypeContainer.IsComImport): New property.
11420         (Constructor.Define): Create proper ctor for ComImport types.
11421
11422         * expression.cs (New.CheckComImport): Fixed.
11423
11424 2005-11-07  Miguel de Icaza  <miguel@novell.com>
11425
11426         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
11427         that a parameter has been captured does not mean that we do not
11428         have to do the rest of the processing.  This fixes the second part
11429         of #76592.  If there was another anonymous method capturing
11430         values in the past, the Scope would never be set for the second
11431         method that captured the same parameter.
11432
11433         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
11434         properly manipulate the stack.   Second part of fix for #76592.
11435
11436         * expression.cs (New): Add support for invoking "new" on
11437         interfaces that have been flagged with the ComImport attribute and
11438         the CoClass.  Fixes #76637 
11439
11440         * statement.cs (Try.DoEmit): When a variable is captured, do not
11441         try to emit the vi.LocalBuilder variable as it has been captured.
11442         Create a temporary variable and store the results on the
11443         FieldBuilder.  Fixes #76642
11444
11445 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
11446
11447         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
11448
11449         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
11450
11451         * expression.cs (Binary.DoResolve): Added && optimalization.
11452     
11453         * typemanager.cs (AddUserType): Removed useless argument.
11454
11455 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
11456
11457         * statement.cs (Block.variables): Uses ListDictionary.
11458
11459 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11460
11461         Fix #75969.
11462         * class.cs (PartialContainer.EmitType): Customized to emit
11463         security attributes.
11464         (ClassPart.ApplyAttributeBuilder): Transform security attribute
11465         for partial classes.
11466
11467 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
11468
11469         Fix #76599.
11470         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
11471         access has to be fixed.
11472         
11473         * typemanager.cs (IsUnmanagedType): Wrong common field type.
11474
11475 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
11476
11477         Fix #76590.
11478         * ecore.cs (NullCast.Reduce): Implemented.
11479
11480         * expression.cs (ArrayCreation.CheckIndices): Correcly check
11481         constant type.
11482         
11483         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
11484         properly.
11485         (Foreach.Resolve): Catch null properly.
11486
11487 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11488  
11489         * cs-tokenizer.cs: Warning text fix.
11490
11491         * driver.cs: AllWarningNumbers exposed on public interface.
11492
11493         * report.cs (): Reviewed warning numbers.
11494         (IsValidWarning): Use binary search.
11495
11496 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
11497  
11498         * driver.cs: Implemeted resource visibility.
11499         (Resources): New class for code sharing between /res: and
11500         /linkres:
11501  
11502 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
11503
11504         Fix #76568.
11505         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
11506         folding.
11507         
11508         * convert (Convert.ImplicitReferenceConversion): NullCast holds
11509         contants only.
11510         
11511         * ecore.cs (NullCast): Child is contant only.
11512         
11513         * literal.cs (NullLiteral.Reduce): null can be converted to any
11514         reference type.
11515
11516 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
11517
11518         * driver.cs: Use Encoding.Default as default code page instead
11519           of ISO-28591.
11520
11521 2005-10-27  Raja R Harinath  <rharinath@novell.com>
11522
11523         Fix #76085.
11524         * expression.cs (Invocation.Error_InvalidArguments): Handle
11525         __arglist parameters.
11526         (Invocation.VerifyArgumentsCompat): Likewise.
11527         * support.cs (ReflectionParameters.GetSignatureForError): Print
11528         __arglist parameters.
11529         (InternalParamters.GetSignatureForError): Likewise.
11530         * parameter.cs (Parameters.GetSignatureForError): Likewise.
11531
11532 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
11533
11534         * attribute.cs (GetPropertyValue): Made public.
11535
11536         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
11537         Resolve.
11538         Add new property WrapNonExceptionThrows to handle 2.0 assembly
11539         attribute.
11540         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
11541         is not defined.
11542         
11543         * driver.cs: Reflect method name change.
11544         
11545         * statement.cs (Try.Resolve): Warn when try has both general
11546         exception handlers.
11547         
11548         * typemanager.cs: runtime_compatibility_attr_type new predefined
11549         type.
11550
11551 2005-10-26  Raja R Harinath  <harinath@gmail.com>
11552
11553         Fix #76419.
11554         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
11555         treat it as an empty parameter list.
11556
11557 2005-10-26  Raja R Harinath  <rharinath@novell.com>
11558
11559         Fix #76271.     
11560         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
11561         ResolveAsTypeStep silent.
11562         * statement.cs (Block.AddConstant): Mark block as used.
11563         (Block.ResolveMeta): Avoid piling on error messages
11564         if a constant initializer resolution fails.
11565
11566 2005-10-25  Raja R Harinath  <rharinath@novell.com>
11567
11568         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
11569         Remove.
11570         (NamespaceEntry.VerifyAllUsing): New.
11571         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
11572         behaviour.  Delegates actual resolution of alias to ...
11573         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
11574         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
11575         Update.
11576         * driver.cs (Driver.MainDriver): Update.
11577         
11578         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
11579         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
11580         property.
11581         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
11582         Remove.
11583         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
11584         RootNamespace.DefineNamespacesForAll.
11585
11586 2005-10-24  Raja R Harinath  <harinath@gmail.com>
11587
11588         * typemanager.cs (assemblies, external_aliases, modules)
11589         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
11590         (ComputeNamespaces, GetRootNamespace): Remove extra staging
11591         overhead.  Move resposibility ...
11592         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
11593         * driver.cs, attribute.cs, codegen.cs: Update to changes.
11594
11595 2005-10-23  Raja R Harinath  <harinath@gmail.com>
11596
11597         * namespace.cs (RootNamespace.all_namespaces): Renamed from
11598         cached_namespaces.  Improve usage.
11599         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
11600         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
11601         Move from GlobalRootNamespace and simplify.
11602         (RootNamespace.Global): Make instance variable.
11603         (RootNamespace.RootNamespace): Add "alias name" parameter.
11604         (GlobalRootNamespace): Simplify drastically.
11605         (Namespace.Lookup): Don't use GetNamespace.
11606         * typemanager.cs (GetRootNamespace): Rename from
11607         ComputeNamespaceForAlias.
11608         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
11609
11610 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11611
11612         * anonymous.cs (AnonymousContainer): Don't crash when container
11613         doesn't exist.
11614
11615 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11616
11617         * expression.cs (Binary.DoResolve): Warn when comparing same
11618         values.
11619
11620 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
11621
11622         Fix #76486.
11623         * expression.cs (Binary.DoResolve): It looks like there are no
11624         convetsion rules in enum context.
11625
11626 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
11627
11628         Add support for extern alias qualifiers.
11629         * typemanager.cs: Move some LookupTypeReflection code
11630         to namespace.cs, to have cleaner code. Added some methods
11631         to help us keep track of the extern aliased references.
11632         * driver.cs: Add suport for extern alias assemblies on command
11633         line and check for their warnings/errors. Also keep track of the
11634         extern aliased assemblies.
11635         * namespace.cs: Move the global functionality of Namespace
11636         to GlobalRootNamespace/RootNamespace. Now the global namespace
11637         is GlobalRootNamespace.Globa. Also the code moved from 
11638         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
11639         Finally added LocalAliasEntry (AliasEntry before) and
11640         ExternAliasEntry, to handle alias statements.
11641         * cs-parser.jay: Add support in the grammar for extern alias
11642         statement.
11643         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
11644         Update callings to Namespace (now in GlobalRootNamespace).
11645
11646 2005-10-18  Raja R Harinath  <rharinath@novell.com>
11647
11648         Fix #76371.
11649         * class.cs (TypeContainer.DefineType): Move updating of
11650         topological sort earlier in the code.
11651         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
11652
11653 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
11654
11655         Fix #76273.
11656         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
11657         
11658         * constant.cs (Constant.TryReduce): Moved from Cast class.
11659         (Reduce): Made little bit more OO and fixed missing conversions.
11660         
11661         * ecore.cs (Reduce): Implemented.
11662         (Binary.EnumLiftUp): New method to upgrade values to enum values.
11663         
11664         * literal.cs (Reduce): Implemented.
11665         
11666         * class.cs: Reverted Miguel's wrong commit.
11667
11668 2005-10-14  Miguel de Icaza  <miguel@novell.com>
11669
11670         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
11671
11672 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
11673
11674         * cs-parser.jay, expression.cs : CS0214 was missing error location
11675           for constants. Fixed bug #76404.
11676
11677 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
11678
11679         Fix #76370.
11680         * convert.cs (ExplicitConversionCore): Fixed object->enum
11681         conversion.
11682
11683 2005-10-10  Raja R Harinath  <rharinath@novell.com>
11684
11685         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
11686         InstanceExpression.
11687         (PropertyExpr.EmitCall): Likewise.
11688         * expression.cs (Invocation.EmitArguments): Handle case where
11689         arguments == null.
11690         (Invocation.EmitCall): Avoid allocating temporary variable if
11691         there are no arguments.
11692
11693 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11694
11695         Fix #76323.
11696         * convert.cs (ImplicitConversionStandard): Move conversion of
11697         void* to arbitrary pointer types ...
11698         (ExplicitConversionStandard): .. here.
11699         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
11700         error to always print typenames.
11701
11702 2005-10-07  Raja R Harinath  <rharinath@novell.com>
11703
11704         * convert.cs (GetConversionOperator): Rename from
11705         GetConversionOperators.  Move operator selection code from ...
11706         (UserDefinedConversion): ... here.
11707
11708 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
11709
11710         * convert.cs (ExplicitConversionCore): Removed duplicate enum
11711         conversion.
11712
11713 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
11714
11715         * assign.cs (Assign.DoResolve): Error method changed.
11716
11717         * cfold.cs (DoConstantNumericPromotions): Error method changed.
11718         
11719         * const.cs (ResolveValue): Reset in_transit immediately.
11720         
11721         * constant.cs: Error method changed.
11722         
11723         * convert.cs: Removed useless location parameter.
11724         (ExplicitNumericConversion): Don't do double enum check.
11725         (ExplicitConversionCore): Renamed from ExplicitConversion.
11726         (ExplicitUnsafe): Extracted from ExplicitConversion.
11727         (ExplicitConversion): Uses for error reporting.
11728         
11729         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
11730         error messages.
11731         (ResolveBoolean): Uses common error method.
11732         (CastToDecimal): Get rid of ec.
11733         (CastFromDecimal): Optimized.
11734         (ConvCast): Get rid of ec.
11735         
11736         * enum.cs (ResolveValue): Reset in_transit immediately.
11737         (Emit): Return after first error.
11738         
11739         * expression.cs: Convert changes.
11740         
11741         * literal.cs: Error method changed.
11742         
11743         * statement.cs: Error method changed.
11744
11745 2005-10-03  Raja R Harinath  <rharinath@novell.com>
11746
11747         * support.cs (SeekableStreamReader.Position): Don't error out when
11748         the requested position is just beyond the end of the current
11749         buffered data.
11750
11751 2005-09-28  Raja R Harinath  <rharinath@novell.com>
11752
11753         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
11754         try to keep in sync with the byte count of the underlying Stream.
11755         However, this limits us to a window size of 2048 characters: i.e.,
11756         the maximum lookahead of our lexer/parser can be 2048 characters.
11757
11758 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
11759
11760         Fix #76255.
11761         * driver.cs: Fix compilation files with full root path.
11762
11763 2005-09-25  Miguel de Icaza  <miguel@novell.com>
11764
11765         * report.cs (SymbolRelatedToPreviousError): Format the output so
11766         it does not use an open parenthesis that is never closed. 
11767
11768         * driver.cs: Follow coding guidelines
11769
11770 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11771
11772         Fix #72930.
11773         * const.cs (Const.ResolveValue): Check for assigning non-null
11774         value to reference type.
11775
11776 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
11777
11778         * anonymous.cs: Implemented ExprClassName.
11779         
11780         * assign.cs (Assign.DoResolve): Don't chrash when type is not
11781         delegate.
11782         
11783         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
11784         check.
11785         
11786         * class.cs (StaticClass.DefineContainerMembers): Report protected
11787         members as error.
11788         
11789         * codegen.cs: if(ed) PRODUCTION.
11790         
11791         * convert.cs (Error_CannotImplicitConversion): Better error
11792         distinction.
11793         
11794         * cs-parser.jay: More error checks.
11795         
11796         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
11797         
11798         * driver.cs (CSCParseOption): Enabled wrong option check.
11799         
11800         * ecore.cs (Expression.ExprClassName): Turned to property.
11801         (MemberExpr.CheckIntermediateModification): For checking boxed
11802         value types     modification.
11803         
11804         * statement.cs (Fixed.Resolve): Expression type must be
11805         convertible to fixed type.
11806         (CollectionForeach.GetEnumeratorFilter,TryType):
11807         Small refactoring for easier error checking.
11808
11809 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
11810
11811         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
11812         attributes.
11813         
11814         * class.cs (GeneratedBaseInitializer): New class for customization
11815         compiler generated initializers.
11816         (MemberBase.DoDefine): Check Obsolete attribute here.
11817         (FieldMember.DoDefine): Ditto.
11818         
11819         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
11820         constants.
11821         
11822         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
11823         (MemberCore.GetObsoleteAttribute): Removed argument.
11824         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
11825         (MemberCore.CheckObsoleteType): New helper.
11826         
11827         * delegate.cs,
11828         * enum.cs,
11829         * statement.cs: Updates after MemberCore changes.
11830         
11831         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
11832         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
11833         
11834         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
11835         obsolete attribute for compiler construct.
11836         (As.DoResolve): Cache result.
11837         
11838         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
11839
11840 2005-09-26  Raja R Harinath  <rharinath@novell.com>
11841
11842         Fix #76133.
11843         * expression.cs (This.VerifyFixed): In a value type T, the type of
11844         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
11845         value type R, 'this' is treated as a value parameter.
11846
11847 2005-09-22  Miguel de Icaza  <miguel@novell.com>
11848
11849         * statement.cs (Lock): Use the TemporaryVariable class instead of
11850         manually using local variables as those do not work when variables
11851         are captured.
11852
11853         * ecore.cs: Moved the TemporaryVariable class from being a nested
11854         class inside Foreach to be a public class that can be employed in
11855         other places. 
11856
11857 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
11858
11859         * cs-parser.jay: interface_accessors replaced by
11860         accessor_declarations.
11861
11862         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
11863         location.
11864         
11865         * statement.cs (GotoCase.Resolve): Convert null constant to
11866         null case.
11867         (SwitchLabel.ResolveAndReduce): Ditto.
11868         (SwitchLabel.NullStringCase): Custom null stamp.
11869         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
11870         
11871         typemanager.cs (CSharpSignature): Don't skip first argument
11872         for full names.
11873
11874 2005-09-18  Miguel de Icaza  <miguel@novell.com>
11875
11876         * driver.cs: Set InEmacs based on the environment variable EMACS. 
11877
11878         * location.cs (InEmacs): in this mode, do not report column
11879         location as it confuses Emacs.
11880
11881 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
11882
11883         * cfold.cs, constant.cs, convert.cs, ecore.cs,
11884         expression.cs, iterators.cs, literal.cs: Store constants and
11885         literals location.
11886         
11887         * class.cs (MemberBase.ShortName): Pass location.
11888         
11889         * cs-parser.jay: Some location fixes.
11890         
11891         * ecore.cs (Expression.Location): Made virtual.
11892
11893 2005-09-05  Miguel de Icaza  <miguel@novell.com>
11894
11895         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
11896         if the underlying types are the same, otherwise we need to produce
11897         code that will do the proper cast.
11898
11899         This was exposed by Marek's constant rewrite which produced
11900         invalid code for the call site:
11901
11902         enum X : long { a }
11903         void Method (X v) {}
11904
11905         Method ((X) 5)
11906
11907         This fixes test-49.cs
11908
11909 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11910
11911         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
11912           Type/Object should be allowed as well. Fixed bug #75968.
11913
11914 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
11915
11916         * expression.cs : (Binary.DoResolve): when one is enum constant and
11917           another is constant 0, then return enum one *as enum type*.
11918           Fixed bug 74846.
11919
11920 2005-09-02  Raja R Harinath  <rharinath@novell.com>
11921
11922         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
11923         internal.
11924
11925         Fix #75941.
11926         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
11927         flow-branching for LocalVariableReferences in case we were invoked
11928         from a MemberAccess.
11929         * expression.cs (LocalVariableReference.VerifyAssigned): New.
11930         Carved out of ...
11931         (LocalVariableReference.DoResolveBase): ... this.
11932         (MemberAccess.Resolve): Do the check that was disabled during
11933         SimpleNameResolve.
11934
11935 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11936
11937         * class.cs :
11938           (PartialContainer.Create): check abstract/sealed/static strictly
11939           but abstract/sealed can exist only at one side. Fixed bug #75883.
11940
11941 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
11942
11943         Fix #75945.
11944         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
11945         specified, don't default to UnmanagedType.I4.
11946
11947 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
11948
11949         * expression.cs : conditional operator should check possibly
11950           incorrect assign expression. Fixed bug #75946.
11951
11952 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11953
11954         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
11955           Reverting the change. gmcs is much complex than mcs on this matter.
11956
11957 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
11958
11959         * cs-tokenizer.cs : To read another token ahead of the actual 
11960           consumption, use new SavedToken and cache token instead of moving
11961           back the stream with SeekableStreamReader (it seemed problematic).
11962         * cs-parser.jay,
11963           driver.cs : Thus use StreamReader directly.
11964         * support.cs : Thus removed SeekableStreamReader.
11965
11966 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11967
11968         Fix #75934.
11969         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
11970         (ScopeInfo.EmitScopeType): Use it to construct field names from
11971         names of captured locals.
11972
11973         Fix #75929.
11974         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
11975         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
11976         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
11977         (ExplicitConversion): Remove enum cases already handled by
11978         implicit conversion.  Move implicit conversion check to the beginning.
11979         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
11980         * expression.cs (ArrayCreation.EmitDynamicInitializers):
11981         Don't treat System.Enum as a struct.
11982
11983 2005-08-30  Jb Evain  <jbevain@gmail.com>
11984
11985         * attribute.cs: handles as expression in parameters.
11986
11987 2005-08-30  Raja R Harinath  <rharinath@novell.com>
11988
11989         Fix #75802.
11990         * class.cs (TypeContainer.VerifyClsName): Don't use a
11991         PartialContainer when verifying CLS compliance.
11992         (AbstractPropertyEventMethod): Set Parent here, ...
11993         (PropertyMethod): ... not here.
11994
11995 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
11996
11997         * attribute.cs : escaped attribute name should not be allowed to be
11998           resolved (e.g. @class as classAttribute). Fixed bug #75930.
11999
12000 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12001
12002         Fix #75927.
12003         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12004         when converting a long constant to unsigned long.
12005         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12006         detect where IsApplicable and VerifyArgumentsCompat disagree.
12007
12008 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12009         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12010
12011         Fix #75848.
12012         * class.cs (TypeContainer.CanElideInitializer): New helper.
12013         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12014         can safely emitting the initializer of a field.
12015
12016 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12017
12018         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12019           allowed inside a switch (without loop). Fixed bug #75433.
12020
12021 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12022
12023         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12024         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12025
12026 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12027
12028         * driver.cs : kinda reverting the default encoding changes (not exact 
12029           revert since I noticed that "codepage:reset" might not work fine).
12030
12031 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12032
12033         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12034           Location. Now getter and setter store location correctly.
12035           (errors/cs0111-12.cs now reports the expected location.)
12036
12037 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12038
12039         * driver.cs : Use default encoding on the environment.
12040           Removed (now that) extra parameter for SeekableStreamReader.
12041         * support.cs : (SeekableStreamReader) third .ctor() argument for
12042           StreamReader is not required (always true). preamble size could
12043           be acquired in simpler and safe way.
12044
12045 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12046
12047         * cs-parser.jay: report CS0642 at warning level 3
12048           and report CS0642 for an if else statement also
12049           fixes bug #74745. Patch by John Luke (and a bit
12050           modified by me).
12051           Removed extra CS0642 warning check for "while",
12052           "for" and "fixed".
12053         * statement.cs: In Block.Resolve(), CS0642 check
12054           is reimplemented to check a sequence of an empty
12055           statement and a block.
12056
12057           Both fix bug #66777.
12058
12059 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12060
12061         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12062         detection until I fix it.
12063         
12064         * cs-tokenizer.cs: Changed error message.
12065         
12066         * cs-parser.jay: Fixed 2 error locations.
12067         
12068         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12069         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12070         properties.
12071         
12072         * enum.cs (GetSignatureForError): Fixed.
12073         
12074         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12075         method detection.
12076         
12077         * class.cs,
12078         * typemanager.cs (RegisterProperty): Removed.
12079         
12080         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12081
12082 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12083
12084         Fix #75874.
12085         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12086         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12087
12088 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12089
12090         * expression.cs : tiny fix is required for not warning positive ulong.
12091           See test-441.cs.
12092
12093 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12094
12095         * expression.cs : add CS0652 check for constant and integral
12096           expression. Fixed bug #53974.
12097
12098 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12099
12100         * expression.cs : in DoNumericPromotions(), check if there is implicit
12101           conversion overload for string (to check CS0034). Fixed bug #52492.
12102
12103 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12104
12105         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12106
12107 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12108
12109         * ecore.cs : report location when it is *not* Null.
12110
12111 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12112
12113         * codegen.cs,
12114           ecore.cs,
12115           flowanalysis.cs,
12116           expression.cs:
12117           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12118           correctly. Fixed bug #75721.
12119
12120 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12121
12122         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12123         loop that performs 'min (pos, char_count)'.
12124
12125         Fix #75862.
12126         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12127         converted value in Operator.OnesComplement.
12128
12129 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12130
12131         * anonymous.cs: If the anon method is pulled into a helper class,
12132         it needs to be `internal' not `private'. Fixes runtime behavior on
12133         msft. bug #75704
12134
12135 2005-08-20  Martin Baulig  <martin@ximian.com>
12136
12137         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12138         scope if we don't already have it.
12139
12140         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12141         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12142         fixes #75867.
12143
12144 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12145
12146         Fix #75803
12147         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12148         is a partial class.
12149
12150 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12151
12152         The big constants rewrite
12153         Fix #75746, #75685 and more
12154         As a side effect saved 1MB for MWF ;-)
12155         
12156         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12157         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12158         enum based for corlib compilation.
12159         
12160         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12161         subtractions.
12162         
12163         * class.cs (FixedField.Define): Use ResolveAsConstant.
12164         
12165         * const.cs (IConstant): Interface constants and enums.
12166         (Const.ResolveValue): New method for constant resolvning.
12167         (ExternalConstant): Constants from imported assemblies.
12168         
12169         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12170         conversion; like enums.
12171         (Constant.ToType): Converts this constant to different type.
12172         (Constant.Increment): Adds 1.
12173         
12174         * convert.cs (ImplicitConversionRequired): Simplified.
12175         
12176         * cs-parser.jay: Create EnumMember directly.
12177         
12178         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12179         
12180         * doc.cs (GenerateEnumDocComment): Removed.
12181         
12182         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12183         (ConvertIntLiteral): Removed.
12184         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12185         
12186         * enum.cs (EnumMember): Implement IConstant.
12187         (Enum.IsValidEnumConstant): Removed.
12188         (Enum.GetNextDefaultValue): Removed.
12189         (Enum.FindMembers): Updated.
12190         (Enum.GenerateDocComment): Iterate enum members.
12191         
12192         * expression.cs (Cast.TryReduce): Handle enums correctly.
12193         (New.Constantify): Made public.
12194         (MemberAccess.DoResolve): Removed contant specific if(s).
12195         
12196         * literal.cs (NullLiteral): Implement new abstract methods.
12197         
12198         * statement.cs (GotoCase.Resolve): Use new constant methods.
12199         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12200         
12201         * typemanager.cs (LookupEnum): Removed.
12202         (IsEnumType): Fixed to work with corlib.
12203         (RegisterConstant): Removed.
12204         (LookupConstant): Removed.
12205         (GetConstant): Changed to work with IConstant.
12206
12207 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12208
12209         * location.cs : Fixed overflown (>255) column number.
12210
12211 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12212
12213         First cut of the qualified-alias-member feature.
12214         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12215         token.
12216         * cs-parser.jay (DOUBLE_COLON): New token.
12217         (namespace_or_type_name): Add rule for recognizing
12218         qualified-alias-members.
12219         (primary_expression): Likewise.
12220         (element_access): Allow QualifiedAliasMember as a possible
12221         type-bearing expression.
12222         (local_variable_type, local_variable_pointer_type): Likewise.
12223         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12224         aliases in the current and enclosing namespace declarations.
12225         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12226         * decl.cs (MemberName.is_double_colon): New.
12227         (MemberName.MemberName): Add new constructor for alias-member.
12228         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12229         * expression.cs (QualifiedAliasMember): New expression type.
12230
12231 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12232
12233         * location.cs : it borked when no argument was specified.
12234
12235 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12236
12237         * location.cs : tiny ToString() format fix.
12238
12239 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12240
12241         * statement.cs : oops, it was missing.
12242
12243 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12244
12245         A set of fixes for precise line/column location.
12246
12247         * location.cs :
12248           "token" field now holds a file/line "delta", a line number offset 
12249           from the segment, and a column number. See also:
12250           http://lists.ximian.com/pipermail/mono-devel-list/2004-
12251           December/009508.html
12252           Removed static IsNull. Use instance IsNull property instead.
12253         * cs-tokenizer.cs :
12254           For some tokens it stores Location. For Identifier it stores
12255           LocatedToken which is a pair of string name and location.
12256           Column numbers are adjusted only at getChar().
12257         * report.cs :
12258           Use Location.ToString() for reporting (it now contains column).
12259         * cs-parser.jay :
12260           Largely modified to use LocatedToken instead of
12261           string (IDENTIFIER), and to acquire Location from some tokens.
12262         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
12263           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
12264           codegen.cs :
12265           Now MemberName holds Location. DeclSpace.ctor() receives Location
12266           as a parameter. Removed extra parameters to all derived classes.
12267           Replaced Location.IsNull() with instance property.
12268         * assign.cs, expression.cs :
12269           Added .ctor() overload that omits Location.
12270         * attribute.cs :
12271           Added "nameEscaped" flag that indicates the identifier was escaped
12272           in the source file. This fixes bug #57047.
12273
12274 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
12275
12276         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
12277         New method, looking for lo-case imported cls type.
12278
12279         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
12280         here.
12281
12282         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
12283
12284         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
12285
12286         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
12287         all_imported_types.
12288         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
12289
12290         Optimized to save 3.5 MB for SWF compilation.
12291
12292 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12293
12294         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
12295         (PartialContainer.Create): Moved logic AddToContainer.
12296         (PartialContainer.MarkForDuplicationCheck): Shares name.
12297         
12298         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
12299         place.
12300         
12301         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
12302         initialization.
12303         (Namespace.GetSignatureForError): New method.
12304         
12305         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
12306         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
12307
12308 2005-08-01  Raja R Harinath  <rharinath@novell.com>
12309
12310         Fix #75669.
12311         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
12312         member lookup rather than qualifier_type, since qualifier_type can
12313         be null.
12314
12315 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
12316
12317         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
12318         enum member.
12319
12320 2005-07-31  Miguel de Icaza  <miguel@novell.com>
12321
12322         * statement.cs: Copy the local exception into the exception
12323         captured local.  Fixes 75674
12324
12325 2005-07-31  Raja R Harinath  <harinath@gmail.com>
12326
12327         Fix #75658.
12328         * expression.cs (Invocation.OverloadResolve): Don't report error
12329         CS1501 if error CS1502 has been reported.
12330         (New.DoResolve): Delegate CS1501 reporting to
12331         Invocation.OverloadResolve.
12332
12333         Fix #75656.
12334         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
12335         invariant-meaning-in-block property in an enclosing block if
12336         necessary.
12337
12338 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
12339
12340         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
12341         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
12342         (Switch.CheckSwitch): Just save 50kb for SWF.
12343
12344 2005-07-27  Martin Baulig  <martin@ximian.com>
12345
12346         * anonymous.cs (CaptureContext.AddField): Added
12347         `AnonymousContainer am' argument; compute its toplevel scope if
12348         it's not already computed.  Fixes #75649.
12349
12350 2005-07-26  Raja R Harinath  <rharinath@novell.com>
12351
12352         Fix #75628.
12353         * class.cs (Constructor.Emit): Reset block to null if the block
12354         resolve fails.
12355
12356 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12357
12358         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
12359
12360 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
12361
12362         * class.cs (MethodData.Define): Check whether accessor implementing
12363         interface is public.
12364
12365         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
12366
12367 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
12368
12369         Fix #57245
12370         * namespace.cs (LookupType): Moved same type check to...
12371         
12372         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
12373         with the same name.
12374
12375 2005-07-21  Raja R Harinath  <rharinath@novell.com>
12376
12377         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
12378         already found a typebuilder.
12379         * class.cs (MethodCore.IsDuplicateImplementation): Compare
12380         MemberNames, not strings.
12381
12382         * const.cs (Error_ExpressionMustBeConst): 
12383         Rename from Error_EpressionMustBeConst.
12384         * const.cs, class.cs, statement.cd: Update.
12385
12386 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
12387
12388         Fix #65573
12389
12390         * const.cs (Const.LookupConstantValue): Report missing contant expression
12391         everytime.
12392         (Error_EpressionMustBeConstant): Only one error method.
12393
12394         * class.cs, statement.c: Updated.
12395
12396 2005-07-20  Raja R Harinath  <rharinath@novell.com>
12397
12398         * statement.cs (Block.Flags): Add back HasVarargs.
12399         (Block.flags): Make protected.
12400         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
12401
12402         * typemanager.cs (types, typecontainers, user_types): Remove.
12403         (UserTypes, TypeContainers): Likewise.
12404         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
12405         (CleanUp, Reset): Update.
12406         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
12407         (GetNestedType): Use Type.GetNestedType.
12408         (CoreLookupType): Take two arguments, the namespace and the
12409         basename of the type.  Update to use the Namespace.Lookup
12410         mechanism.
12411         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
12412         (RealMemberLookup): Use IsNestedChildOf instead of playing with
12413         string concatenation and substring matches.
12414         * class.cs, enum.cs, delegate.cs: Update to changes.
12415
12416 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
12417
12418         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
12419         Expression and made virtual.
12420
12421         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
12422         (ImplicitStandardConversionExists): Fixed `byte' typo ?
12423
12424         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
12425
12426         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
12427         error message.
12428
12429         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
12430         change.
12431
12432 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
12433
12434         Fix #57707
12435         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
12436         AssemblyCultureAttribute is not used on executable.
12437
12438         * rootcontext.cs,
12439         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
12440
12441 2005-07-16  Raja R Harinath  <rharinath@novell.com>
12442
12443         Fix #60638.
12444         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
12445         New.  Reports CS0252/CS0253.
12446         Mostly taken from preliminary patch by Duncak Mak.
12447         (Binary.DoResolveOperator): Store results of operator lookup.
12448         Use them to detect if we need to warn about unintended reference
12449         comparisons.
12450
12451 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12452
12453         Fix #72969.
12454         * namespace.cs (Namespace.Lookup): Add back location parameter.
12455         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
12456         * delegate.cs, ecore.cs, expression.cs: Update to changes.
12457
12458         * codegen.cs (EmitContext.DeclSpace): Make readonly.
12459         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
12460         (Namespace.LookupType): ... this.
12461         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
12462         of namespaces.
12463         * typemanager.cs (LookupTypeReflection): Remove buggy code that
12464         purported to handle pointers.
12465         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
12466         CoreLookupType.
12467
12468 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
12469
12470         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
12471         type as namespace.
12472
12473 2005-07-15  Raja R Harinath  <rharinath@novell.com>
12474
12475         * namespace.cs (Namespace.Lookup): Drop location parameter.
12476         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
12477         (NamespaceEntry.Lookup): ... this.
12478         (NamespaceEntry.Error_AmbiguousTypeReference):
12479         Move here from DeclSpace.
12480         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
12481         names ...
12482         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
12483         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
12484         Move to NamespaceEntry.
12485         * delegate.cs, expression.cs: Update to changes.
12486
12487 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
12488
12489         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
12490         CheckAttributeType and refactored.
12491         (Attribute.ResolvePossibleAttributeType): Changed to reuse
12492         ResolveAsTypeTerminal error handling.
12493         (ResolveAsTypeTerminal): Introduced because of global attributes extra
12494         handling.
12495         (GetSignatureForError): Print errors in same way.
12496
12497         * class.cs,
12498         * codegen.cs: Reflect attribute GetSignatureForError change.
12499
12500         * ecore.cs,
12501         * expression.cs: Add silent parameter to ResolveAsTypeStep.
12502
12503         * namespace.cs (UsingEntry): Refactored to make fields private.
12504
12505         * assign.cs,
12506         statement.cs: Error_UnexpectedKind has extra parameter.
12507
12508 2005-07-14  Raja R Harinath  <rharinath@novell.com>
12509
12510         * ecore.cs (IAlias): Remove.
12511         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
12512         that implement the interface.
12513         * namespace.cs (Namespace): Likewise.
12514         (Namespace.declspaces): Renamed from 'defined_names'.
12515         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
12516         DeclSpace instead of an IAlias.
12517         * tree.cs (Tree.AddDecl): Update.
12518
12519 2005-07-12  Raja R Harinath  <rharinath@novell.com>
12520
12521         * statement.cs (Block.Flags); Remove HasVarargs.
12522         (Block.HasVarargs): Move to ToplevelBlock.
12523         (Block.ThisVariable, Block.AddThisVariable): Likewise.
12524         (Block.Variables): Make protected.  Initialize variable hashtable
12525         if necessary.
12526         (Block.AddVariable): Update.
12527         (Block.Resolve): Update to changes.
12528         (ToplevelBlock.HasVarargs): New boolean.
12529         (ToplevelBlock.ThisVariable): Move here from Block.
12530         (ToplevelBlock.AddThisVariable): Likewise.
12531         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
12532         * expression.cs (This.ResolveBase): Update to changes.
12533         (ArglistAccess.DoResolve): Likewise.
12534
12535 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12536
12537         Fix #75321
12538         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
12539
12540         * class.cs (TypeContainer.VerifyMembers): Distinguish between
12541         not used and not used & assigned.
12542         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
12543
12544 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
12545
12546         Fix #75053
12547         * expression.cs (Is.DoResolve): null is never provided type.
12548
12549 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
12550
12551         Fix #52496
12552         * cs-parser.jay: Less strict event error rule to catch more errors.
12553
12554 2005-07-08  Martin Baulig  <martin@ximian.com>
12555
12556         Fix test-iter-10.cs - distinguish whether we `yield' in a property
12557         gettter (allowed) or setter (not allowed).
12558
12559         * class.cs (Accessor): Implement IIteratorContainer.
12560         (Accessor.Yields): New public field.
12561         (PropertyBase.PropertyMethod.Define): Handle iterators on a
12562         per-accessor basis.
12563
12564         * cs-parser.jay
12565         (get_accessor_declaration, set_accessor_declaration): Set the
12566         `yields' flag on the accessor, not the property.
12567         (property_declaration): Do the iterators check on a per-accessor
12568         basis and not for the whole property.
12569
12570 2005-07-08  Martin Baulig  <martin@ximian.com>
12571
12572         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
12573         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
12574
12575 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
12576
12577         Fix #74975
12578         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
12579         (ExtractSecurityPermissionSet): Cope with self referencing security
12580         attributes properly.
12581
12582         * driver.cs (SetOutputFile): Made public property OutputFile.
12583
12584 2005-07-07  Raja R Harinath  <rharinath@novell.com>
12585
12586         Fix #75486.
12587         * class.cs (TypeContainer.first_nonstatic_field): Rename from
12588         has_nonstatic_fields.  Make into a FieldBase pointer.
12589         (TypeContainer.AddField): Add CS0282 check.
12590         (TypeContainer.EmitType): Update.
12591
12592 2005-07-06  Miguel de Icaza  <miguel@novell.com>
12593
12594         * cs-tokenizer.cs (consume_identifier): Do not create strings to
12595         compare if they start with __.
12596
12597 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12598
12599         * statement.cs (Switch.SwitchGoverningType): Only look at
12600         UserCasts that don't need implicit standard conversions to one of
12601         the allowed switch types (Fixes test-322.cs).
12602         (LocalInfo.Resolve): Re-enable sanity-test.
12603
12604 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
12605
12606         * cs-tokenizer.cs (consume_identifier): Detect double undescores
12607         
12608         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
12609         
12610         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
12611
12612 2005-07-06  Raja R Harinath  <rharinath@novell.com>
12613
12614         Fix #75472.
12615         * ecore.cs (SimpleName.GetSignatureForError): Add.
12616         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
12617         (MemberAccess.GetSignatureForError): Add.
12618
12619 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
12620  
12621         The big error and warning messages review.
12622         
12623         * anonymous.cs,
12624         * assign.cs,
12625         * attribute.cs,
12626         * class.cs,
12627         * codegen.cs,
12628         * convert.cs,
12629         * cs-parser.jay,
12630         * cs-tokenizer.cs,
12631         * decl.cs,
12632         * delegate.cs,
12633         * doc.cs,
12634         * driver.cs,
12635         * ecore.cs,
12636         * enum.cs,
12637         * expression.cs,
12638         * flowanalysis.cs,
12639         * iterators.cs,
12640         * literal.cs,
12641         * location.cs,
12642         * modifiers.cs,
12643         * namespace.cs,
12644         * parameter.cs,
12645         * pending.cs,
12646         * report.cs,
12647         * rootcontext.cs,
12648         * statement.cs,
12649         * support.cs,
12650         * tree.cs,
12651         * typemanager.cs: Updated.
12652         
12653         * class.cs: (MethodCore.SetYields): Moved here to share.
12654         (PropertyMethod.Define): Moved iterator setup here.
12655         
12656         * iterators.cs: Add orig_method to have full access to parent
12657         container.
12658
12659 2005-07-05  Raja R Harinath  <rharinath@novell.com>
12660
12661         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
12662         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
12663         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
12664         variable of struct type.
12665         * expression.cs (Unary.ResolveOperator): Update to change.
12666         (Indirection.VerifyFixed): Likewise.
12667         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
12668         (ParameterReference.VerifyFixed): Value parameters are fixed.
12669         (This.VerifyFixed): Treat 'this' as a value parameter.
12670         * statement.cs (LocalInfo.IsFixed): Remove.
12671
12672 2005-07-01  Martin Baulig  <martin@ximian.com>
12673
12674         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
12675         `ec.EmitThis ()' to get the correct scope.
12676
12677 2005-07-01  Martin Baulig  <martin@ximian.com>
12678
12679         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
12680         instance is a ParameterReference; fixes #75299.
12681
12682 2005-07-01  Martin Baulig  <martin@ximian.com>
12683
12684         Reverted Marek's latest patch (r46725):
12685         - it contains structural changes which are neither mentioned in
12686           the ChangeLog nor explained anywhere; for example the additional
12687           argument of EmitContext's and Iterator's .ctor's and the
12688           TypeContainer.DefineMembers() change.
12689         - structural changes like this should go in in seperate patches
12690           and not be hidden in a huge patch which just seems to affect
12691           warnings and errors.
12692           a big and hard to understand patch.
12693         - it breaks iterators and causes regressions, for instance in
12694           test-iter-03.cs.      
12695
12696 2005-06-30  Raja R Harinath  <rharinath@novell.com>
12697
12698         Fix #75412.
12699         * expression.cs (Indexers.map): Remove.
12700         (Indexers.Append): Filter out inaccessible setters and getters.
12701         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
12702
12703         Fix #75283.
12704         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
12705         Refactored from ...
12706         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
12707         (FieldExpr.Emit, PropertyExpr.Emit): Update.
12708         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
12709         * expression.cs (Invocation.EmitCall): Add CS0120 check.
12710
12711 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
12712
12713         Fix #75322
12714         * class.cs (FieldBase.GetInitializerExpression): One more field
12715         for backup.
12716
12717 2005-06-28  Miguel de Icaza  <miguel@novell.com>
12718
12719         * pending.cs: Do not define a proxy if the base method is virtual,
12720         it will be picked up by the runtime (bug 75270).
12721
12722 2005-06-08  Martin Baulig  <martin@ximian.com>
12723
12724         The big Iterators rewrite :-)
12725
12726         * iterators.cs: Rewrite this to use the anonymous methods framework.
12727
12728         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
12729         before the TypeContainers; see 2test-21.cs.
12730
12731         * class.cs
12732         (TypeContainer.DefineType): Don't create a new EmitContext if we
12733         already have one (this only happens if we're an Iterator).
12734         (TypeContainer.Define): Also call Define() on all our iterators.
12735         (Method.CreateEmitContext): Added support for iterators.
12736
12737         * anonymous.cs
12738         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
12739         (AnonymousContainer.CreateMethodHost): Moved here from
12740         AnonymousMethod and made abstract.
12741         (AnonymousContainer.CreateScopeType): New abstract method.
12742         (AnonymousContainer.IsIterator): New public property.
12743         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
12744         get the ScopeTypeBuilder rather than manually defining it here. 
12745         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
12746         iterators here.
12747
12748         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
12749         before RootContext.DefineTypes().
12750
12751         * codegen.cs (EmitContext.RemapToProxy): Removed.
12752         (EmitContext.CurrentAnonymousMethod): Changed type from
12753         AnonymousMethod -> AnonymousContainer.
12754         (EmitContext.ResolveTopBlock): Protect from being called twice.
12755         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
12756         (EmitContext.EmitThis): Removed the iterators hacks; use the
12757         anonymous methods framework for that.
12758
12759         * statement.cs
12760         (ToplevelBlock.Container): Make this a property, not a field.
12761         (ToplevelBlock.ReParent): New public method; move the
12762         ToplevelBlock into a new container.
12763         (Foreach.TemporaryVariable): Simplify.
12764
12765 2005-06-05  Martin Baulig  <martin@ximian.com>
12766
12767         * statement.cs (LocalInfo.CompilerGenerated): New flag.
12768         (Block.AddTemporaryVariable): New public method; creates a new
12769         `LocalInfo' for a temporary variable.
12770         (Block.EmitMeta): Create the LocalBuilders for all the temporary
12771         variables here.
12772         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
12773         non-iterator variables.
12774
12775 2005-06-05  Martin Baulig  <martin@ximian.com>
12776
12777         * statement.cs (Foreach.TemporaryVariable): Create the
12778         LocalBuilder in the Emit phase and not in Resolve since in some
12779         situations, we don't have an ILGenerator during Resolve; see
12780         2test-19.cs for an example.
12781
12782 2005-06-04  Martin Baulig  <martin@ximian.com>
12783
12784         **** Merged r45395 from GCS ****
12785
12786         The big Foreach rewrite - Part II.
12787
12788         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
12789         with `PropertyInfo ienumerator_getcurrent'.
12790
12791         * codegen.cs (VariableStorage): Removed.
12792
12793         * statement.cs
12794         (Foreach): Derive from Statement, not ExceptionStatement.
12795         (Foreach.CollectionForeach): New nested class.  Moved all the code
12796         dealing with collection foreach here.
12797         (Foreach.ForeachHelperMethods): Removed.
12798         (Foreach.TemporaryVariable): Implement IMemoryLocation.
12799
12800 2005-05-23  Martin Baulig  <martin@ximian.com>
12801
12802         * statement.cs (Try.DoResolve): Don't create a `finally' if we
12803         don't need to.  Fix #75014.
12804
12805 2005-05-20  Martin Baulig  <martin@ximian.com>
12806
12807         Merged r44808 from GMCS.
12808
12809         * class.cs (TypeContainer.CircularDepException): Removed.
12810         (TypeContainer.DefineType): Removed the `InTransit' stuff.
12811         (TypeContainer.CheckRecursiveDefinition): Check for circular class
12812         (CS0146) and interface (CS0529) dependencies here.
12813
12814 2005-06-21  Raja R Harinath  <rharinath@novell.com>
12815
12816         * expression.cs (Invocation.EmitCall): Fix initialization
12817         'this_call' to reflect current behaviour.  Fix indentation.
12818
12819         * convert.cs (FindMostEncompassedType): Add two trivial special
12820         cases (number_of_types == 0 || number_of_types == 1).
12821         (FindMostEncompasingType): Likewise.
12822
12823 2005-06-17  Raja R Harinath  <rharinath@novell.com>
12824
12825         Some cleanups preparing for the fix of #75283.
12826         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
12827         error testing.
12828         (EventExpr.InstanceResolve): Likewise.
12829         (EventExpr.DoResolve): Remove redundant checks.
12830
12831 2005-06-10  Duncan Mak  <duncan@novell.com>
12832
12833         * cs-tokenizer.cs (process_directives): New flag for controlling
12834         the processing of preprocessor directives.
12835         (x_token): After seeing a '#', return Token.NONE instead of going
12836         to handle_preprocessing_directive() when not processing
12837         directives. This avoids unnecessary processing during the token peek in
12838         is_punct().
12839
12840         This fixes #74939.
12841
12842         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
12843         the existing error reporting methods instead of Report.Error.
12844
12845         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
12846         after Raja's rewrite.
12847
12848 2005-06-08  Miguel de Icaza  <miguel@novell.com>
12849
12850         * class.cs: Small fix.
12851
12852 2005-06-08  Raja R Harinath  <rharinath@novell.com>
12853
12854         Fix #75160.
12855         * class.cs (GetPartialBases): Fix return value check of
12856         part.GetClassBases.
12857
12858 2005-06-07  Raja R Harinath  <rharinath@novell.com>
12859
12860         Ensure that partial classes are registered in their enclosing
12861         namespace.  Initial part of fix of #75160.
12862         * tree.cs (Tree.RecordDecl): Add new namespace argument.
12863         Register declspace with namespace here, not in
12864         DeclSpace.RecordDecl.
12865         * cs-parser.jay: Pass namespace to RecordDecl.
12866         * class.cs (PartialContainer.Create): Likewise.
12867         (ClassPart.DefineType): New sanity-check.  Throws an exception if
12868         called.
12869         * decl.cs (Declspace.RecordDecl): Remove.
12870         * namespace.cs (NamespaceEntry.DefineName): Remove.
12871
12872 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
12873
12874         * rootcontext.cs: Reset TargetExt as well.
12875
12876 2005-06-03  Raja R Harinath  <rharinath@novell.com>
12877
12878         * ecore.cs (Expression.Resolve): Emit CS0654 error when
12879         -langversion:ISO-1.
12880
12881 2005-06-02  Raja R Harinath  <rharinath@novell.com>
12882
12883         Fix #75080, cs0119.cs.
12884         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
12885         of ...
12886         (Expression.Resolve): ... this.  Use it.  Remove bogus code
12887         allowing ExprClass.Type and ExprClass.Namespace for
12888         ResolveFlags.VariableOrValue.
12889         (Expression.Resolve) [1-argument variant]: Change default resolve
12890         flags based on language version.
12891         (Expression.Error_UnexpectedKind): Use a simple string array
12892         rather than an ArrayList.
12893         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
12894         not ExprClass.Type.
12895         (TypeOfVoid.DoResolve): Likewise.
12896         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
12897         flags argument -- it always has the same value.
12898
12899 2005-05-31  Raja R Harinath  <rharinath@novell.com>
12900
12901         Fix #75081.
12902         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
12903         Use it in the error message.
12904         * assign.cs, expression.cs, statement.cs: Update.
12905
12906 2005-05-30  Raja R Harinath  <rharinath@novell.com>
12907
12908         Fix #75088.
12909         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
12910         the "almostMatchedMember" case too.
12911         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
12912         that failed the accessibility checks to 'almost_match'.
12913
12914 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
12915
12916         * attribute.cs: Use internal MethodBuilder methods to set
12917         ExactSpelling and SetLastError on PInvoke methods, instead
12918         of passing them via charset.  Fixes #75060.
12919
12920 2005-05-27  Raja R Harinath  <rharinath@novell.com>
12921
12922         * parameter.cs (Parameter): Remove TODO comment.
12923         (Parameter.DefineParameter): Remove Location parameter.
12924         (Parameters.LabelParameters): Likewise.
12925         * class.cs (Constructor.Emit): Update to change.
12926         (MethodData.Emit): Likewise.
12927         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
12928         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
12929
12930 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
12931
12932         * parameter.cs,
12933           Removed Parameters.Location and added Parameter.Location instead.
12934           Removed Location parameter from Emit() and GetSignature().
12935         * anonymous.cs,
12936           class.cs,
12937           cs-parser.jay,
12938           delegate.cs,
12939           iterators.cs,
12940           statement.cs :
12941           Modified all related calls.
12942
12943 2005-05-26  Raja R Harinath  <rharinath@novell.com>
12944
12945         Improve user-defined conversion handling.
12946         * convert.cs (GetConversionOperators): Rewrite.  Return only the
12947         applicable operators.
12948         (AddConversionOperators): New.  Helper for GetConversionOperators.
12949         (FindMostEncompassedType, FindMostEncompassingType): Verify that
12950         there is only one most encompassed/encompassing type.
12951         (FindMostSpecificSource, FindMostSpecificTarget): Remove
12952         "applicable operator" handling.
12953         (UserConversion): Move cache here from GetConversionOperators.
12954         Directly cache the chosen operator, rather than the whole
12955         MethodGroup.
12956         (ExplicitNumericConversion): Fix buggy implementation of Decimal
12957         case.  Allow conversion of decimal to sbyte and byte too.
12958         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
12959         New static methods.  Used to avoid allocating EmptyExpressions in
12960         convert.cs.
12961
12962 2005-05-24  Duncan Mak  <duncan@novell.com>
12963
12964         * ecore.cs (CastFromDecimal): New class for casting a decimal to
12965         another class, used in Convert.ExplicitNumericConversion.
12966         (CastToDecimal): New class, similar to above, but casts to
12967         System.Decimal, used in Convert.ImplicitNumericConversion and also
12968         in explicit convesion from double/float to decimal.
12969
12970         * convert.cs (ImplicitNumericConversion): Handle implicit
12971         conversions to System.Decimal.
12972         (ExplicitNumericConversion): handle explicit conversions to
12973         System.Decimal.
12974
12975         This fixes #68711.
12976         
12977 2005-05-20  Miguel de Icaza  <miguel@novell.com>
12978
12979         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
12980         know the type at this stage, just break through.   Fixes #75008 
12981
12982 2005-05-19  Martin Baulig  <martin@ximian.com>
12983
12984         * delegate.cs
12985         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
12986         to disable error reporting.
12987
12988         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
12989         here since we don't want to report an error; see the new test-336.cs.
12990
12991 2005-05-19  Raja R Harinath  <rharinath@novell.com>
12992
12993         * statement.cs (ToplevelBlock.GetParameterReference)
12994         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
12995         Move here from class Block.
12996         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
12997         * expression.cs (ParameterReference.DoResolveBase): Likewise.
12998
12999 2005-05-18  Martin Baulig  <martin@ximian.com>
13000
13001         Fix #74978.
13002
13003         * flowanalysis.cs
13004         (FlowBranching.Reachability): Add non-static public And() and Or()
13005         methods.
13006         (FlowBranchingSwitch): New class; do the `break_origins' thing
13007         like in FlowBranchingLoop.
13008         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13009         reachability, not just locals and parameters.
13010         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13011         switch; MergeBreakOrigins() now takes care of that.
13012
13013 2005-05-18  Martin Baulig  <martin@ximian.com>
13014
13015         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13016         a loop and may leave it, reset the barrier; fixes #74974.
13017
13018 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13019         
13020         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13021         is back.
13022         
13023         * cs-parser.jay: Catch more lexical errors.
13024         
13025         * report.cs: Add one more Error method.
13026         
13027         * rootcontext.cs,
13028         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13029
13030 2005-05-17  Martin Baulig  <martin@ximian.com>
13031
13032         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13033         #70970. 
13034
13035 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13036
13037         Fix test-382.cs.  Emit values of decimal constants.
13038         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13039         Carved out of ...
13040         (TypeContainer.AddField): ... this.
13041         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13042         with initializers to include 'Const's.
13043         (ClassPart.RegisterFieldForInitialization): Forward to
13044         PartialContainer.
13045         * const.cs (Const.Const): Pass initializer to base class.
13046         (Const.Define): In case of decimal constants, register them for
13047         initialization in a static constructor.
13048
13049 2005-05-14  Martin Baulig  <martin@ximian.com>
13050
13051         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13052         do not call ResolveUnreachable() on unreachable statements in
13053         here, see the comment in the source code.
13054
13055 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13056
13057         Fix #74934.
13058         * expression.cs (BinaryResolveOperator): If one of the operands of
13059         an equality comparison is 'null' and the other is a pointer type,
13060         convert the null to a NullPointer.
13061         * convert.cs (ImplicitReferenceConversion): If the expression is a
13062         NullLiteral and the target type is a pointer type, return a
13063         NullPointer instead.
13064         (ImplicitConversionStandard): Likewise.
13065
13066 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13067         
13068         * cs-parser.jay: Set readonly context based on special constructs.
13069         
13070         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13071         readonly variable error handling.
13072         
13073         * rootcontext.cs (EmitCode): Don't verify members when error
13074         occurred.
13075         
13076         * statement.cs (LocalInfo): Add reaodnly context information.
13077         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13078
13079 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13080
13081         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13082         for #74041 to initialize 'resolved' to false only for explicit
13083         blocks.  Fixes #74873.
13084
13085 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13086
13087         Fix #74920.
13088         * typemanager.cs (unmanaged_enclosing_types): New.
13089         (IsUnmanagedType): Avoid infloops by using
13090         'unmanaged_enclosing_types' to talk with recursive invocations.
13091
13092 2005-05-13  Martin Baulig  <martin@ximian.com>
13093
13094         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13095         instance variable, not a local.  Fix #74873.
13096         (Block.ResolveUnreachable): Set it to true here.
13097
13098 2005-05-11  Duncan Mak  <duncan@novell.com>
13099
13100         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13101         continuing to process for 'arg'.
13102         (handle_preprocessing_directive): Check the argument of the #endif
13103         directive and report error CS1025 if there are any trailing
13104         characters.
13105
13106         According to the C# spec, having even whitespace after the #endif
13107         directive is illegal; however, because we call arg.TrimEnd ()
13108         beforehand, we have the same behavior as csc, allowing whitespace
13109         after the directive.
13110
13111         Fixes #74892.
13112
13113 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13114
13115         Fix #74863.
13116         
13117         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13118         (Constructor.GetObsoleteAttribute): Implemented correctly.
13119
13120 2005-05-10  Martin Baulig  <martin@ximian.com>
13121
13122         * support.cs (ReflectionParameters.ParameterModifier): Use
13123         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13124         and `ParameterAttributes.In'.  Fixes #74884.
13125
13126 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13127
13128         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13129         
13130         * expression.cs (Argument.GetParameterModifier): Turned to property.
13131         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13132         
13133         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13134         its C# equivalent.
13135         
13136 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13137
13138         Fix #74852.
13139         * decl.cs (MemberCache.AddMethods): Register override methods,
13140         rather than non-override methods.
13141         * typemanager.cs (RegisterOverride): New.
13142         (IsOverride): Update.
13143
13144 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13145
13146         Fix #73105.
13147         
13148         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13149         recursive declaration.
13150         
13151         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13152         
13153 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13154
13155         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13156         
13157         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13158
13159 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13160
13161         Fix #74797.
13162         * decl.cs (DeclSpace.FamilyAccessible): 
13163         Use TypeManager.IsNestedFamilyAccessible.
13164
13165         Fix reopened #64812.
13166         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13167         internal'.
13168
13169 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13170             Abin Thomas  <projectmonokochi@rediffmail.com>
13171             Anoob V E  <projectmonokochi@rediffmail.com>
13172             Harilal P R  <projectmonokochi@rediffmail.com>
13173
13174         Fix #64812.
13175         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13176         allow access to all static members.
13177
13178 2005-05-04  Martin Baulig  <martin@ximian.com>
13179
13180         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13181
13182 2005-05-04  Martin Baulig  <martin@ximian.com>
13183
13184         Fix #74655.
13185
13186         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13187         section at the end; make things work if `default' is not the last
13188         section.        
13189
13190 2005-05-04  Martin Baulig  <martin@ximian.com>
13191
13192         Fix #70400.
13193
13194         * statement.cs (Switch): Replaced the `got_default' field with a
13195         `default_section' one.
13196         (Switch.CheckSwitch): Set `default_section' here.
13197         (Switch.Resolve): If we're a constant switch and the constant is
13198         not found, use the default section.
13199
13200 2005-05-03  Martin Baulig  <martin@ximian.com>
13201
13202         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13203
13204         * statement.cs (Foreach.ArrayForeach): New nested class.
13205         (Foreach.TemporaryVariable): New nested class.
13206         (Foreach.EmitArrayForeach): Removed; this is now in the new
13207         ArrayForeach class.
13208
13209 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13210
13211         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13212         more conservative.
13213         (VerifyPendingMethods): Revert change below.
13214
13215         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13216         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13217         that used to trigger warning -28.  Remove warning -28.
13218         * expression.cs (Invocation.OverloadResolve): Use
13219         TypeManager.IsOverride to distinguish override methods.
13220
13221         Fix #74773.
13222         * pending.cs (VerifyPendingMethods): If a base type implements the
13223         requested interface, don't bother checking individual methods of
13224         the base type.  As a side-effect, this prevents the creation of
13225         unnecessary proxies.
13226
13227 2005-05-02  Martin Baulig  <martin@ximian.com>
13228
13229         Fix #70182.
13230
13231         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13232         Also `And' the locals if the old vector is null.
13233         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13234         null; in this case we basically reset all the variables.        
13235
13236 2005-05-02  Martin Baulig  <martin@ximian.com>
13237
13238         Fix #74529.
13239
13240         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13241         Added `FlowBranching branching' argument; always `and' the
13242         variables instead of `or'ing them unless we're an infinite loop.
13243
13244         * statement.cs (While.Resolve): Create a new sibling unless we're
13245         infinite.       
13246
13247 2005-05-02  Martin Baulig  <martin@ximian.com>
13248
13249         Fix #70140.
13250
13251         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
13252         arguments; use it instead of creating a new TopLevelBlock.
13253         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
13254         our ConstructorInitializer.
13255
13256         * statement.cs
13257         (TopLevelBlock.TopLevelBranching): New public property.
13258         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
13259         and create our `TopLevelBranching'.
13260
13261         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
13262         anonymous method host, use `block.TopLevelBranching' rather than
13263         creating a new branching.
13264
13265 2005-04-20  Miguel de Icaza  <miguel@novell.com>
13266
13267         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
13268         a ScopeInfo, if any of the current children is a child of the new
13269         entry, move those children there.
13270
13271 2005-04-30  Martin Baulig  <martin@ximian.com>
13272
13273         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
13274         at the beginning of a SwitchSection.  Fix #73335.
13275
13276 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
13277
13278         Fix #74378
13279         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
13280         
13281         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
13282         (FieldExpr.DoResolve): Obsolete members are ignored for field
13283         initializers.
13284         
13285 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
13286
13287         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
13288         of arrays detection.
13289
13290         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
13291         verification.
13292         (Field.VerifyClsCompliance): Volatile fields are not compliant.
13293
13294         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
13295         arrays report.
13296
13297 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
13298
13299         * cs-parser.jay: Use the prefered version of -unsafe in error
13300         message.
13301
13302 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
13303
13304         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
13305         circumstances.
13306
13307 2005-04-20  John Luke  <john.luke@gmail.com>
13308
13309         * driver.cs: fix typo in error message, --outout to --output
13310
13311 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
13312
13313         * codegen.cs (InRefOutArgumentResolving): New field.
13314         
13315         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
13316         fields outside contructor.
13317         
13318         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
13319         
13320 2005-04-19  Miguel de Icaza  <miguel@novell.com>
13321
13322         * anonymous.cs (CaptureContext.EmitParameterInstance): The
13323         parameter code was not completed ever, so it was not as up-to-date
13324         as local variables.  Must finish it.
13325
13326         The bug fix was to compare the Toplevel of the block, not the
13327         current block.  Thanks for Ben for pointing this out. 
13328
13329 2005-04-19  Raja R Harinath  <rharinath@novell.com>
13330
13331         * decl.cs (AddMethods): Use the declaring type of the problem
13332         method to determine if we want to squash a warning.
13333
13334 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
13335
13336         * attribute.cs: Removed debug output.
13337
13338         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
13339         
13340         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
13341         Report.Stderr.
13342         
13343 2005-04-18  Raja R Harinath  <rharinath@novell.com>
13344
13345         Fix #74481.
13346         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
13347         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
13348         all null comparisons against reference types.
13349
13350 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
13351
13352         Fix# 74565
13353         * class.cs (TypeContainer.CircularDepException) New nested
13354         exception class.
13355         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
13356         (TypeContainer.DefineType): Removed error, reset InTransit before
13357         exit.
13358         (Class.DefineType): Throw exception when is in Transit.
13359         Catch exception and report error.
13360         (Struct.DefineType): Throw exception when is in Transit.
13361         Catch exception and report error.
13362         (Interface.DefineType): Throw exception when is in Transit.
13363         Catch exception and report error.
13364
13365         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
13366         handle nested exception handlers.
13367
13368         * flowanalysis.cs (InTryWithCatch): New method, search for try with
13369         a catch.
13370
13371         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
13372         InFinally and InCatch storage.
13373
13374         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
13375         (Catch.Resolve): Set and Restore ec.InCatch.
13376         (Try.Resolve): Set and Restore ec.InFinally.
13377         (Try.HasCatch): True when try has catch.
13378
13379 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
13380
13381         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
13382           for the same event member, so exclude such cases from warning 419.
13383           Fixed bug #74633.
13384
13385 2005-04-16  Miguel de Icaza  <miguel@novell.com>
13386
13387         * expression.cs (Binary.ResolveOperator): Apply patch from John
13388         Luke to fix bug 59864: operators &, | and ^ on enumerations
13389         require that the same enum type on both sides.
13390
13391         * driver.cs: Add warnings to old flag usage, this is to assist
13392         people who produce Makefiles and hope that the Makefiles will be
13393         used on Windows.
13394
13395         * class.cs (TypeContainer.EmitType): Moved the definition of the
13396         special $PRIVATE$ field from the resolve phase to the Emit phase.
13397         During resolve we do not know if we are a struct with
13398         HasExplicitLayout, we know this only after the attributes for the
13399         type are emitted.
13400
13401         Set the FieldOffset to zero on the dummy field that we create for
13402         the class.   Fixes 74590.
13403
13404 2005-04-16  Raja R Harinath  <rharinath@novell.com>
13405
13406         Fix #73834.
13407         * ecore.cs (PropertyExpr.resolved): New.
13408         (DoResolve): Use it to handle a case of double resolution here.
13409         Handle a case of identical-name-and-type-name.
13410         * expression.cs (ArrayCreation.CheckIndices): Avoid double
13411         resolution by storing the results of expression resolution back
13412         into the "probes" array.
13413
13414 2005-04-15  Raja R Harinath  <rharinath@novell.com>
13415
13416         Fix cs0208-7.cs and cs0208-8.cs.
13417         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
13418         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
13419         error reporting to point out the reason a struct is not unmanaged.
13420
13421 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13422
13423         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
13424           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
13425
13426 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13427
13428         Fix #74528.
13429         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
13430         IdenticalNameAndTypeName here.
13431         (EventExpr.InstanceResolve): Likewise.
13432
13433 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
13434
13435         C# 2.0 DefaultCharSetAttribute implementation
13436         
13437         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
13438         which allows us to set GlobalNamespace for every resolve.
13439         (Attribute.ResolveArguments): Cut from Resolve.
13440         (Attribute.GetCharSetValue): Returns CharSet named argument.
13441         (Attribute.DefinePInvokeMethod): Gets default charset from
13442         module settings.
13443         (GlobalAttribute.ResolveAsTypeStep): Override.
13444         (GlobalAttribute.ResolveArguments): Override.
13445         
13446         * class.cs (TypeAttr): Is protected.
13447         
13448         * codegen.cs (ModuleClass.DefaultCharSet): New member.
13449         (ModuleClass.DefaultCharSetType): New memeber.
13450         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
13451         
13452         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
13453         charset from module.
13454         
13455         * delegate.cs (TypeAttr): Override.
13456         (Delegate.DefineType): Use this TypeAttr.
13457         
13458         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
13459         at very early stage (before types are defined) to resolve model
13460         module attributes. It will probably not work with corlib but it
13461         should be ok.
13462         
13463         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
13464         charset from module.
13465         
13466         * typemanager.cs (default_charset_type): New type.
13467
13468 2005-04-13  Raja R Harinath  <rharinath@novell.com>
13469
13470         * decl.cs (MemberCache.AddMethods): Don't warn if
13471         System.Object.Finalize has buggy MethodAttributes.
13472
13473         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
13474         removed below.
13475
13476 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13477
13478         * doc.cs : detect ambiguous reference to overloaded members.
13479           Fixed bug #71603. MS 1.1 csc does not detect it.
13480
13481 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
13482
13483         * doc.cs : delegates must not be referenced with parameters.
13484           Fixed bug #71605.
13485
13486 2005-04-12  Miguel de Icaza  <miguel@novell.com>
13487
13488         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
13489
13490 2005-04-10  Miguel de Icaza  <miguel@novell.com>
13491
13492         * driver.cs (MainDriver): Stop processing if the CLS stage found
13493         errors. 
13494
13495         (CompilerCallableEntryPoint.InvokeCompiler): Always
13496         reset after execution;   Take a TextWriter argument for the
13497         output.
13498
13499         * report.cs: Use the error stream instead of hardcoding stderr. 
13500
13501 2005-04-09  Miguel de Icaza  <miguel@novell.com>
13502
13503         * class.cs: Reduce code paths to test, too small of an
13504         optimization to make it worth the extra testing.  Always perform
13505         it. 
13506
13507 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13508
13509         Fix #74510.
13510         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
13511         operators that had errors reported on them.
13512
13513 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
13514
13515         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
13516         argument types.
13517         (Attribute.Resolve): Add named argument type checking.
13518         
13519         * class.cs (FixedField.Define): Use IsPrimitiveType
13520         
13521         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
13522         
13523         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
13524         unsafe parameter types.
13525         
13526         * statement.cs (Using.ResolveExpression): Add better error description.
13527         
13528         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
13529         
13530 2005-04-08  Raja R Harinath  <rharinath@novell.com>
13531
13532         Fix #74484.
13533         * attribute.cs (Attribute.GetAttributeUsage): Resolve
13534         AttributeUsageAttribute in the emitcontext of the attribute class,
13535         not in the emitcontext of the attributable entity it was attached to.
13536         * cs-parser.jay: Use 'current_class', not 'current_container',
13537         when creating a GlobalAttribute.
13538
13539 2005-04-08  Alp Toker  <alp@atoker.com>
13540
13541         * pending.cs: The fix to #58413 failed to compile methods implementing
13542         interfaces with/without params modifiers and vice versa, even though
13543         params modifiers aren't part of the signature. Make the modifier check
13544         less strict as in csc.
13545
13546 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
13547             Anoob V E  <projectmonokochi@rediffmail.com>
13548             Harilal P R  <projectmonokochi@rediffmail.com>
13549
13550         Fix #58413.
13551         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
13552         modifiers of pending methods.
13553         (PendingImplementation.PendingImplementation): Initialize it.
13554         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
13555         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
13556         with ParameterData.  Add check for modifiers.
13557         * class.cs (MethodData.Define): Update to changes.
13558
13559 2005-04-07  Raja R Harinath  <rharinath@novell.com>
13560
13561         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
13562
13563 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
13564
13565         * class.cs (PropertyMethod.Define): Check private accessor in abstract
13566         property.
13567         
13568         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
13569         
13570         * rootcontext.cs,
13571         * typemanager.cs: Registered RequiredAttributeAttribute.
13572         
13573 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
13574
13575         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
13576         Warning CS0169 is back at level 3.
13577         (IMethodData.SetMemberIsUsed): New method.
13578         
13579         * decl.cs (IsUsed): New value; moved from FieldBase.Status
13580         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
13581         
13582         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
13583
13584         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
13585         contants.
13586         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
13587         is used.
13588         
13589         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
13590         is used.
13591         
13592         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
13593         to avoid the problems with nested types.
13594
13595 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
13596             Anoob V.E  <projectmonokochi@rediffmail.com>
13597             Harilal P.R  <projectmonokochi@rediffmail.com>
13598             Raja R Harinath  <rharinath@novell.com>
13599
13600         Fix #73820.
13601         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
13602         attribute.
13603         * typemanager (GetConstructor): Make public.
13604
13605 2005-04-05  John Luke  <john.luke@gmail.com>
13606             Raja R Harinath  <rharinath@novell.com>
13607
13608         Fix #62232.
13609         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
13610         struct too.  Return false quicker in a few cases.
13611         (VerifyUnManaged): Use it.
13612
13613 2005-04-05  Raja R Harinath  <rharinath@novell.com>
13614
13615         Fix #74041.
13616         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
13617         not 'unreachable_seen'.
13618
13619 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
13620
13621         * attribute.cs (Attribute.GetValue): Removed unused.
13622         
13623         * codegen.cs (CodeGen.TrimExt): Removed unused.
13624         
13625         * cs-parser.jay (output): Removed unused.
13626         
13627         * cs-tokenizer.cs (hex_digits): Removed unused.
13628         
13629         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
13630         
13631         * expression.cs (Indirection.LoadExprValue): Removed unused.
13632         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
13633         
13634         * iterators.cs (Iterator.param_types): Removed unused.
13635         
13636         * statement.cs (Goto.block): Removed unused.
13637         (ToplevelBlock.did): Removed unused.
13638         (Switch.ResolveConstantSwitch): Removed unused.
13639
13640 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
13641
13642         * rootcontext.cs: Allow mcs to bootstrap with the compilation
13643         resetting thingy.
13644
13645 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13646
13647         Fix #74232 and cs0208-3.cs.
13648         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
13649         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
13650         unmanaged type.  Don't use FieldBuilders when 't' is a
13651         TypeBuilder.  Use ModFlags and MemberType fields.
13652         * class.cs (MemberBase.member_type): Rename from MemberType.
13653         (MemberBase.MemberType): New property.  Determines member_type on
13654         demand.
13655         (MemberBase.DoDefine): Don't initialize MemberType here.
13656         (FieldMember.Define): Likewise.
13657
13658 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
13659
13660         Fix #74241
13661         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
13662         Attributes are emitted there.
13663         
13664 2005-04-01  Raja R Harinath  <rharinath@novell.com>
13665
13666         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
13667         keyword in 'partial enum' too.
13668         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
13669         is not allowed).
13670         Report from Kamil Skalski <nazgul@omega.pl>.
13671
13672         Fix #74309.
13673         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
13674         have partial containers too.
13675
13676         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
13677         in block' checks to Block.CheckInvariantMeaningInBlock.
13678         * statement.cs (Block.GetKnownVariableInfo): Make private.
13679         (Block.IsVariableUsedInChildBlock): Remove.
13680         (Block.IsVariableUsedInBlock): Likewise.
13681         (Block.CheckInvariantMeaningInBlock): New.  Show location of
13682         conflicting declaration.
13683         (Block.AddVariable): Make error messages less long-winded and more
13684         specific.  Show location of conflicting declaration.
13685         * parameter.cs (Parameters.Location): New readonly property.
13686
13687 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13688
13689         Clean up semantics of invoking ResolveMemberAccess.
13690         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
13691         can have an instance, ensure that we pass in a non-TypeExpression
13692         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
13693         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
13694         argument.  Update to changes and simplify.
13695         (FieldExpr.Emitinstance): Remove CS0120 check.
13696         (PropertyExpr.EmitInstance): Likewise.
13697         * expression.cs (Argument.Resolve): Likewise.
13698         (Invocation.DoResolve): Update to changes in semantics of
13699         InstanceExpression.
13700
13701 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
13702
13703         Fix #74241
13704         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
13705         customization.
13706         
13707         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
13708
13709 2005-03-31  Raja R Harinath  <rharinath@novell.com>
13710
13711         Fix difference in behaviour with commandline invocation.
13712         * driver.cs (Driver.Reset): New.
13713         (CompilerCallableEntryPoint): Call it.
13714
13715         * statement.cs (If.Resolve): Avoid spurious "uninitialized
13716         variable" warnings if the boolean expression failed to resolve.
13717
13718 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
13719
13720         * attribute.cs: Fix the union of several permissions when some of them
13721         are unrestricted (so the result isn't an unrestricted permission set).
13722         Fix #74036.
13723
13724 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13725
13726         * ecore.cs (MemberExpr): New class.  Convert from interface
13727         IMemberExpr.
13728         (MemberExpr.ResolveMemberAccess): Refactor and move here from
13729         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
13730         error checks.
13731         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
13732         (MethodGroupExpr.IsExplicitImpl): Remove.
13733         (Expression.GetFieldFromEvent): Remove.
13734         (SimpleName.MemberStaticCheck): Remove.
13735         (SimpleName.DoSimpleNameResolve): Update to changes.
13736         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
13737         (MemberAccess.IdenticalNameAndTypeName): Remove.
13738         (MemberAccess.error176): Move to MemberExpr.
13739         (MemberAccess.DoResolve): Update to changes.
13740         (BaseAccess.DoResolve): Likewise.
13741
13742 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
13743
13744         C# 2.0 Conditional attribute class implementation
13745         
13746         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
13747         Analyzes class whether it has attribute which has ConditionalAttribute
13748         and its condition is not defined.
13749         
13750         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
13751         (Class.IsExcluded): New method. Search for at least one defined
13752         condition in ConditionalAttribute of attribute class.
13753
13754 2005-03-30  Raja R Harinath  <rharinath@novell.com>
13755
13756         * ecore.cs (PropertyExpr): Derive from Expression, not
13757         ExpressionStatement.
13758         (PropertyExpr.EmitStatement): Remove.
13759
13760 2005-03-29  Raja R Harinath  <rharinath@novell.com>
13761
13762         Fix #74060.
13763         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
13764         internal field "value__" of an enum be private.  The examples for
13765         "value__" that I found on MSDN all used FieldAttributes.Private.
13766
13767         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
13768         Don't mention IL method attribute names.
13769
13770         Fix #47991.  Remove a TODO.
13771         * statement.cs (Block.Toplevel): Make into a field.
13772         (Block.Parameters): Move into ToplevelBlock.
13773         (Block.known_variables): Rename from child_variable_names.
13774         (Block.Block): Remove variants that take Parameters.  Initialize
13775         'Toplevel' with the immediately surrounding toplevel block.
13776         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
13777         LocalInfo parameter.
13778         (Block.GetKnownVariableInfo): New.
13779         (Block.IsVariableNameUsedInChildBlock): Update.
13780         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
13781         the block, even though it may not be in scope.
13782         (Block.AddVariable): Remove Parameters parameter.  Use
13783         Toplevel.Parameters instead.
13784         (Block.AddConstant): Remove Parameters parameter.
13785         (Block.GetParameterReference): Update to use Toplevel.Parameters.
13786         (Block.IsParamaterReference): Likewise.
13787         (Block.IsLocalParameter): Likewise.  Simplify a lot.
13788         (ToplevelBlock.Parameters): New.  Moved from Block.
13789         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
13790         initialize Parameters to a non-null value.
13791         * cs-parser.jay: Update to changes.
13792         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
13793         simple names that mean different things in the same block.  Use
13794         Block.IsVariableNameUsedInBlock.
13795
13796 2005-03-28  Raja R Harinath  <rharinath@novell.com>
13797
13798         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
13799         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
13800         GetTypeHandle.  It is possible for a reflected type to derive from
13801         a TypeBuilder (e.g., int[] derives from the TypeBuilder
13802         System.Array during mscorlib compilation).
13803         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
13804         contain a method_hash, don't create one either.  Don't create a
13805         deep copy of the base cache's method_hash.
13806         (MemberCache.SetupCache): Rename back from DeepCopy.
13807         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
13808         already initialized.  If we see an override function, add its
13809         underlying base virtual function to the member_hash too.
13810
13811         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
13812
13813 2005-03-26  Raja R Harinath  <harinath@acm.org>
13814
13815         Fix #73038.
13816         * assign.cs (Assign.DoResolve): When the RHS of an assignment
13817         fails to resolve, ensure that the LHS is still resolved as an
13818         lvalue.
13819
13820 2005-03-25  Raja R Harinath  <harinath@acm.org>
13821
13822         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
13823         ec.ContainerType.
13824         (Enum.current_ec): Remove.
13825         (Enum.LookupEnumValue): Remove EmitContext argument.
13826         Just uses the one created during DefineType.
13827         (Enum.FindMembers): Update.
13828         * expression.cs (MemberAccess.DoResolve): Update.
13829
13830 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
13831
13832         * assign.cs (Assign.DoResolve): Check for CS1717 when
13833         source and target are same (uses Equals).
13834
13835         * expression.cs (LocalVariableReference, ParameterReference,
13836         This): Implemented Equals, GetHashCode.
13837
13838         * statement.cs (Block.GetParameterReference): Removed useless
13839         local variable.
13840
13841 2005-03-22  Raja R Harinath  <rharinath@novell.com>
13842
13843         Fix cs0128.cs
13844         * statement.cs (Block.AddVariable): Ensure that we skip implicit
13845         blocks before deciding whether the error is cs0136 or cs0128.
13846
13847         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
13848         (using_alias_directive, using_namespace_directive): Pass
13849         MemberName, not an expression to Namespace.UsingAlias and
13850         Namespace.Using.
13851         (MakeName): Use the MemberName of the namespace.
13852         * namespace.cs (Namespace.MemberName): New.
13853         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
13854         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
13855         Likewise.
13856         * decl.cs (MemberName.Name): Make readonly.
13857         (MemberName.FromDotted): New "constructor".
13858         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
13859         (MemberCore.Name): Compute from MemberName on demand.
13860         (MemberCore.SetMemberName): Provide a way to change the
13861         MemberName.
13862         (MemberCore.AddToContainer): Don't take a fullname parameter.
13863         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
13864         fully qualified name of the container to the member name.
13865         (TypeContainer.AddToTypeContainer): Use a fully qualified name
13866         only if the type is a member of the root container.
13867         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
13868         MemberName.Left rather than searching for an embedded ".".
13869         (PartialContainer.CreatePart): Update to changes in RootContext.
13870         (MemberBase.ShortName): Turn into a property.  Use
13871         MemberCore.SetMemberName.
13872         (MemberBase.ExplicitInterfaceName): Remove.
13873         (MemberBase.UpdateMemberName): Remove.
13874         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
13875         (PropertyBase.SetMemberName): New override.
13876         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
13877         (Tree.GetDecl): New.
13878         (Tree.AllDecls): Rename from Decls.
13879         * attribute.cs, enum.cs, report.cs: Update to changes.
13880         * driver.cs (MainDriver): Use MemberName.FromDotted on
13881         RootContext.MainClass.
13882
13883 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
13884
13885         * class.cs (FixedField.Define): Check for CS1664 and more sanity
13886         checks.
13887
13888         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
13889
13890 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
13891
13892         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
13893         property accessor modifiers.
13894
13895         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
13896         fixed buffer attribute (CS1716).
13897         (PropertyMethod.HasCustomAccessModifier): When property accessor
13898         has custom modifier.
13899
13900         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
13901         modifiers.
13902         (PropertyExpr.DoResolveLValue): Add CS0272.
13903
13904 2005-03-17  Miguel de Icaza  <miguel@novell.com>
13905
13906         * convert.cs: When converting to a pointer, use the proper Conv.U
13907         or Conv.I depending on the source data type.
13908
13909         * cs-tokenizer.cs: Make the size for large decimal constants,
13910         fixes #72957.
13911
13912 2005-03-17  Martin Baulig  <martin@ximian.com>
13913
13914         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
13915         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
13916
13917 2005-03-17  Martin Baulig  <martin@ximian.com>
13918
13919         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
13920         to bool so we can return an error condition.
13921         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
13922         returned an error.
13923
13924 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
13925
13926         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
13927         attributes.
13928
13929 2005-03-16  Raja R Harinath  <rharinath@novell.com>
13930
13931         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
13932         Refactor to avoid traversing the list of assemblies, and to avoid
13933         string concatenation.
13934         * typemanager.cs (guid_attr_type): Remove.
13935         (negative_hits, pointers, references): Remove hashes.
13936         (type_hash): New.
13937         (GetConstructedType): New.  Uses type_hash to handle constructed
13938         types (arrays, references, pointers).
13939         (GetReferenceType, GetPointerType): Use it.
13940         (GetNestedType): New.  Uses type_hash to handle nested types of
13941         reflected types.
13942         (LookupType, LookupTypeDirect): Remove.
13943         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
13944         'types' hash and LookupTypeReflection directly.
13945         (params_string, params_object): Use GetConstructedType.
13946         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
13947         top-level types.
13948         (Namespace.Lookup): Use cached_types.
13949         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
13950         provided by old TypeManager.LookupType.
13951         * rootcontext.cs (MakeFQN): Remove.
13952         * decl.cs (DeclSpace.MakeFQN): Likewise.
13953         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
13954         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
13955         TypeManager.GetConstructedType.
13956         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
13957
13958 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
13959
13960         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
13961         indexers.
13962
13963         * cs-parser.jay: Reports CS1527 for any namespace element.
13964
13965         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
13966         Added CS0407.
13967
13968         * expression.cs (ParameterReference.IsAssigned): Changed error to
13969         CS0269.
13970         (Error_WrongNumArguments): Moved CS0245 detection here.
13971
13972         * statement.cs (Return.Resolve): Add CS1622 report.
13973
13974 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
13975
13976         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
13977
13978 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
13979
13980         * attribute.cs expression.cs: Get rid of some allocations.
13981
13982 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
13983
13984         * doc.cs : just eliminate the latest change.
13985
13986 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13987
13988         * doc.cs : commented out the latest change. It breaks xml-030.cs
13989
13990 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13991
13992         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
13993           fail. So invoke CreateType() in FindDocumentedType().
13994
13995 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
13996
13997         * cs-tokenizer.cs : added IsKeyword().
13998         * doc.cs : Detect keyword incorrectly used as identifier.
13999           Allow identifiers prefixed by @.
14000
14001 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14002
14003         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14004         It caused exception in namespace resolving (again!).
14005         
14006         * class.cs (Class.ctor): Removed exit.
14007         (PropertyMethod.ctor): ditto.
14008         
14009         * codegen.cs (Codegen.Reset): Reset static data.
14010         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14011         
14012         * cs-tokenizer.cs (Cleanup): Removed.
14013         
14014         * driver.cs (GetSystemDir): Rewrote to one line command.
14015         It caused problem with unloaded dynamic modules.
14016         (UnixParseOption): Removed Exit.
14017         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14018         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14019         Now can be mcs used as library.
14020         
14021         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14022         empty location.
14023         
14024         * location.cs (Reset): Reset static data.
14025         
14026         * namespace.cs (Reset): Reset static data.
14027         
14028         * report.cs (Report.Reset): Reset static data.
14029         
14030         * rootcontext.cs (RootContext.Reset): Reset static data.
14031         
14032         * tree.cs (RootTypes.ctor): Use Location.Null
14033         
14034         * typemanager.cs (TypeManager.Reset): Reset static data.
14035         (CoreLookupType): Removed Exit.
14036         (TypeHandle.Reset): Reset static data.
14037         
14038 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14039
14040         Fix #73516.
14041         * typemanager.cs (ComputeNamespaces): Import namespaces from
14042         referenced modules too.
14043
14044 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14045
14046         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14047         than '.'.
14048
14049 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14050
14051         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14052         enclosing DeclSpace.  This ensures that a name-lookup populates
14053         more caches and there are fewer 'TypeExpression's.  Carve out
14054         nested type lookup into ...
14055         (LookupNestedTypeInHierarchy): ... this.
14056
14057 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14058
14059         Clean up a few partial-class semantics.  
14060         Fixes test-357.cs and cs1618-2.cs.
14061         * cs-parser.jay (struct_declaration): Use 'current_class' as
14062         parent of newly-created struct.  Remove call to Register ().
14063         Use 'pop_current_class' to complete handing the current struct.
14064         (interface_declaration): Likewise.
14065         (class_declaration): Likewise.
14066         (enum_declaration): Use 'current_class' as parent of newly created
14067         enum.
14068         (delegate_declaration): Likewise.
14069         (pop_current_class): New function.  This is used to handle closing
14070         up the 'current_class' and 'current_container', and pointing them
14071         to the enclosing class/container.
14072         (CSharpParser): Initialize 'current_class' too.
14073         * decl.cs (MemberCore): Add check for invariant: a partial
14074         container is not a parsed entity, and thus does not enclose any
14075         parsed members.
14076         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14077         (DeclSpace.BaseTypeExpr): Use it.
14078         (DeclSpace.LookupType): Add check for invariant.
14079         * class.cs (TypeContainer): Add check for invariant: a nested
14080         class should have the same NamespaceEntry as its enclosing class.
14081         (TypeContainer.EmitFieldInitializers): Make virtual.
14082         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14083         MemberCore.
14084         (TypeContainer.Register): Remove.
14085         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14086         null.  Use TypeResolveEmitContext for resolving base types and
14087         interfaces.  Move initialization of Parts.TypeBuilder here from
14088         ...
14089         (TypeContainer.DefineNestedTypes): ... here.
14090         (PartialContainer): Take a Namespace not a NamespaceEntry.
14091         (PartialContainer.Create): Don't use Register.  Call the
14092         appropriate Add... function directly.
14093         (ClassPart): Take both the PartialContainer and the enclosing
14094         class as constructor arguments.
14095         (ClassPart.EmitFieldInitializers): Override.
14096         (ClassPart.PartFindNestedTypes): Remove.
14097         (FieldBase.GetInitializerExpression): Resolve the initializer
14098         expression in the emit context of the enclosing class.
14099         * tree.cs (RootTypes): Remove Register ().
14100         
14101 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14102
14103         * cs-parser.jay: Removed CS0134.
14104         
14105         * driver.cs: Removed CS1901.
14106         
14107         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14108         for predefined types.
14109
14110 2005-03-07  Duncan Mak  <duncan@novell.com>
14111
14112         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14113         well. Fixes bug #73454.
14114
14115 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14116
14117         * cs-tokenizer.cs (xtoken): Add CS1035.
14118         
14119         * class.cs (MethodData.Define): Add CS0683.
14120         (FieldMember.ctor): Add CS0681.
14121
14122 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14123
14124         * ecore.cs (SimpleName.DoResolve): Rename from
14125         SimpleName.DoResolveAllowStatic.
14126         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14127         Pass 'intermediate' flag to MemberStaticCheck.
14128         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14129         of "intermediate" lookups via MemberAccess.
14130         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14131         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14132
14133 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14134
14135         Fix #73394.
14136         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14137         slipped in because of variable names that are identical to a
14138         builtin type's BCL equivalent ('string String;', 'int Int32;').
14139         (PropertyExpr.EmitInstance): Likewise.
14140
14141 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14142
14143         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14144         
14145         * report.cs (warning_ignore_table): Made public.
14146
14147 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14148
14149         Fix #73282.
14150         * class.cs (MethodData.Emit): Pass 'container' to
14151         container.GetObsoleteAttribute instead of 'container.Parent'.
14152
14153 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14154
14155         * cs-parser.jay: Add 1534 error test.
14156
14157         * iterators.cs (Yield.CheckContext): Add error 1629.
14158         (Iterator.ctor): Save unsafe modifier.
14159         (MoveNextMethod.DoEmit): Restore unsafe context.
14160
14161         * namespace.cs (UsingAlias): Better error message.
14162
14163 2005-03-03  Dan Winship  <danw@novell.com>
14164
14165         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14166         the warning message [#73219]
14167
14168 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14169
14170         Fix compile with MCS 1.0.0.0.
14171         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14172         w_restore to not depend on string constant folding.
14173
14174 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14175
14176         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14177         CS0246 check to users who passed 'silent = false'.
14178         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14179         check.
14180         (SimpleName.SimpleNameResolve): Update.
14181         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14182         (MemberAccess.IdenticalNameAndTypeName): Update.
14183         * doc.cs (FindDocumentedTypeNonArray): Update.
14184
14185 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14186
14187         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14188         * parameters.cs (ComputeAndDefineParameters): Remove.
14189         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14190         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14191         Use GetParameterInfo.
14192
14193 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14194
14195         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14196
14197 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14198
14199         Unify DeclSpace.LookupType and DeclSpace.FindType.
14200         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14201         is in charge of defining nested types on demand.
14202         (DeclSpace.LookupType): Use it when the current_type is a
14203         TypeBuilder.  Use LookupTypeDirect for reflected types.
14204         (DeclSpace.FindType): Remove.
14205         (DeclSpace.LookupInterfaceOrClass): Likewise.
14206         (DeclSpace.DefineTypeAndParents): Likewise.
14207         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14208         DeclSpace.LookupType.
14209         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14210         * typemanager.cs (LookupType): Simplify.
14211         (AddUserType): Remove type from negative_hits.
14212         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14213         * class.cs (TypeContainer.FindMembers): Move handling of nested
14214         types ...
14215         (TypeContainer.FindMembers_NestedTypes): ... here.
14216         (TypeContainer.FindNestedType): Implement override.
14217         (ClassPart.FindNestedType): Delegate to PartialContainer.
14218         (ClassPart.PartFindNestedType): Looks up the nested types of the
14219         part alone.
14220
14221 2005-03-02  Martin Baulig  <martin@ximian.com>
14222
14223         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14224         static constructor in static classes.
14225
14226 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14227
14228         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14229         sizeParamIndex is not specified.
14230
14231 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14232
14233         Fix #73117
14234         * report.cs (WarningMessage.IsEnabled): Missing null check.
14235
14236 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14237
14238         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14239         in the fields and not in the properties.
14240
14241 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14242
14243         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14244         fields as well.
14245
14246 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14247
14248         * attribute.cs: Small refactoring (improved robustness).
14249         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
14250         (ValidateGuid): Removed.
14251         (Resolve): Removed referenced to above mentioned.
14252         (GetAttributeUsage): Made private and changed to work without
14253         class assistance.
14254         (GetIndexerAttributeValue): Don't crash.
14255         (GetConditionalAttributeValue): Ditto.
14256         (GetClsCompliantAttributeValue): Ditto.
14257         (ExtractSecurityPermissionSet): All attributes exceptions are
14258         error 648.
14259         (GetPropertyValue): New helper.
14260         (GetMethodImplOptions): New method.
14261         (DefinePInvokeMethod): Reuse common code. Implemented handling of
14262         some missing properties.
14263         
14264         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
14265         (Method.ApplyAttributeBuilder): Updated.
14266         
14267         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
14268         exception.
14269
14270 2005-02-28  Raja R Harinath  <rharinath@novell.com>
14271
14272         Fix #73052.
14273         * report.cs (Report.SymbolRelatedToPreviousError): Handle
14274         non-simple types (array, pointer, reference).
14275
14276 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14277
14278         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
14279
14280         * class.cs (MethodCore.IsDuplicateImplementation): Special error
14281         for operators.
14282         (Method.CheckBase): Catch wrong destructor here.
14283         (MethodData.Define): Add errors 550, 668.
14284
14285         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
14286
14287         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
14288
14289         * pending.cs (VerifyPendingMethods): Add error 551.
14290
14291         * typemanager.cs (CSharpName): Next error report helper.
14292
14293 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
14294
14295         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
14296         attributes. Removed useless attribute double check.
14297         It saves almost 2MBs for corlib.
14298
14299 2005-02-25  Raja R Harinath  <rharinath@novell.com>
14300
14301         Fix #72924.
14302         * statement.cs (ExpressionStatement.Resolve): Make robust to being
14303         called twice in case of error.
14304
14305 2005-02-23  Chris Toshok  <toshok@ximian.com>
14306
14307         Fix compiler portions of #72827.
14308         * statement.cs (Block.Emit): call Begin/EndScope on the
14309         EmitContext instead of the ILGenerator.
14310
14311         * codegen.cs (EmitContext.BeginScope): new method, call
14312         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
14313         we have one.)
14314         (EmitContext.BeginScope): same, but EndScope and CloseScope
14315
14316         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
14317         offset and call the superclass's OpenScope(int) with it.
14318         (SymbolWriter.CloseScope): get the current il
14319         offset and call superclass's CloseScope(int) with it.
14320
14321 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
14322
14323         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
14324         CS1677 for out and ref as well.
14325
14326         * class.cs (Method.Define): Add error CS1599 detection.
14327         
14328         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
14329         
14330         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
14331         
14332         * delegate.cs (Delegate.Define): Add error CS1599 detection.
14333         
14334         * support.cs.cs (ModifierDesc): New helper method.
14335
14336 2005-02-23  Raja R Harinath  <rharinath@novell.com>
14337             Abin Thomas  <projectmonokochi@rediffmail.com>
14338             Anoob V E  <projectmonokochi@rediffmail.com>
14339             Harilal P R  <projectmonokochi@rediffmail.com>
14340
14341         Fix #57851, #72718.
14342         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
14343         MemberLookup (used for error reporting) actually returns a result.
14344         Fix error report number (122, not 112).
14345
14346 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
14347             Anoob V E  <projectmonokochi@rediffmail.com>
14348             Harilal P R  <projectmonokochi@rediffmail.com>
14349
14350         Fix #71134.
14351         * pending.cs (PendingImplementation.GetAbstractMethods):
14352         Find NonPublic members too.
14353
14354 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
14355
14356         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
14357         Fixed error 217.
14358         
14359         * class.cs (MethodCore.CheckMethodAgainstBase):
14360         Add error 239 report.
14361
14362 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14363
14364         Fix #68955.
14365         * expression.cs (Invocation.IsApplicable): Make public.
14366         (Invocation.IsParamsMethodApplicable): Likewise.
14367         * delegate.cs (Delegate.VerifyApplicability): Don't use
14368         Invocation.VerifyArgumentCompat for parameter applicability
14369         testing.  Use Invocation.IsApplicable and
14370         Invocation.IsParamsMethodApplicable.
14371
14372 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14373
14374         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
14375         
14376         * class.cs (Operator.Define): Add error 217 report.
14377         
14378 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14379
14380         * namespace.cs (UsingEntry.Resolve): Undo change below.
14381
14382 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14383
14384         Fix #72756.
14385         * ecore.cs (Expression.MemberLookupFailed): Add argument to
14386         disable the error message when the extended MemberLookup also
14387         fails.
14388         (Expression.MemberLookupFinal): Update.
14389         (SimpleName.DoSimpleNameResolve): Update.
14390         * expression.cs (MemberAccess.ResolveNamespaceOrType):
14391         Don't use MemberLookupFinal.
14392         (New.DoResolve): Update.
14393         (BaseAccess.CommonResolve): Update.
14394
14395 2005-02-21  Raja R Harinath  <rharinath@novell.com>
14396
14397         Fix #72732.
14398         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
14399         occured previously, don't resolve again.
14400
14401 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
14402
14403         Fix #69949
14404         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
14405         argument. Call ResolveAttributeUsage for unresolved.
14406         when types doesn't match ctor arguments.
14407         
14408         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
14409         for nested attribute classes.
14410         (Class.attribute_usage): Removed.
14411         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
14412         for attribute class.
14413         
14414         * ecore.cs (IsAttribute): Removed.
14415         
14416         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
14417         
14418         * rootcontext.cs (RegisterAttribute): Removed, attributes are
14419         now normal types.
14420         (attribute_types): Removed.
14421         (EmitCode): Global attributes are emited as the latest.
14422
14423 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
14424
14425         * class.cs (EmitFieldInitializers): Don't emit field initializer
14426         for default values when optimilization is on.
14427         
14428         * constant.cs (Constant.IsDefaultValue): New property.
14429         
14430         * driver.cs: Add /optimize handling.
14431         
14432         * constant.cs,
14433         * ecore.cs,
14434         * literal.cs: Implement new IsDefaultValue property.
14435         
14436         * rootcontext.cs (Optimize): New field, holds /optimize option.
14437
14438 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14439
14440         Fix crasher in re-opened #72347.
14441         * namespace.cs (Namespace.Lookup): Return null if
14442         DeclSpace.DefineType returns null.
14443
14444         Fix #72678.
14445         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
14446
14447 2005-02-18  Raja R Harinath  <rharinath@novell.com>
14448
14449         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
14450         now returns null if it cannot resolve to an lvalue.
14451         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
14452         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
14453         returned null.  Remove check for SimpleName.
14454         (EventExpr.DoResolveLValue): New.
14455         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
14456         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
14457         error from ...
14458         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
14459         avoid CS0131 error.
14460         (Unary.ResolveOperator): Move CS0211 check ...
14461         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
14462         CS0131 error.
14463         (Unary.DoResolveLValue): Simplify.
14464         (AddressOf.DoResolveLValue): New.
14465         (ArrayAccess.DoResolveLValue): New.
14466
14467 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
14468
14469         * attribute.cs (Attribute.Resolve): Add arguments casting for
14470         when types doesn't match ctor arguments.
14471
14472 2005-02-16  Raja R Harinath  <rharinath@novell.com>
14473
14474         Fix parts of #63202.
14475         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
14476         lookup of operator in base type.  Ensure that all checks happen
14477         when the operator resolves to an "op_..." method.
14478
14479 2005-02-15  Raja R Harinath  <rharinath@novell.com>
14480
14481         Fix #71992.
14482         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
14483         'ignore_cs0104' parameter.  Pass it to ...
14484         (NamespaceEntry.Lookup): ... this.
14485         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
14486         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
14487         (TypeLookupExpression.DoResolveAsTypeStep): Update.
14488         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
14489         Update.  Request that cs0104 errors be ignored.
14490         (ComposedCast.ResolveAsTypeStep): Update.
14491
14492 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14493
14494         Fix #59209.
14495         * expression.cs (Invocation.BetterFunction): Remove support for
14496         comparing virtual functions and their overrides.
14497         (Invocation.IsOverride): New.
14498         (Invocation.OverloadResolve): Don't consider 'override' functions
14499         during candidate selection.  Store them in a lookaside list.
14500         If the selected method is a 'virtual' function, use the list to
14501         find any overrides that are closer to the LHS type.
14502
14503 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
14504
14505         * expression.cs (New.DoResolve): Add complex core type reduction.
14506         (New.Constantify): Converts complex core type syntax like 'new int ()'
14507         to simple constant.
14508         
14509 2005-02-14  Raja R Harinath  <rharinath@novell.com>
14510
14511         * decl.cs (EntryType.EntryType): New constructor to create an
14512         updated copy of a cache entry.
14513         (MemberCache.AddMethods): Use it.
14514         (MemberCache.ClearDeclaredOnly): Remove.
14515         (MemberCache.MemberCache): Update.
14516
14517 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14518
14519         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
14520         variable.  This one is represents the actual low-level declaration
14521         of the method, as opposed to the semantic level `IsStatic'.   
14522
14523         An anonymous method which is hosted into a static method might be
14524         actually an instance method.  IsStatic would reflect the
14525         container, while MethodIsStatic represents the actual code
14526         generated.
14527
14528         * expression.cs (ParameterReference): Use the new MethodIsStatic
14529         instead of IsStatic.
14530
14531         * anonymous.cs (AnonymousMethod.Compatible): Pass the
14532         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
14533         set on the current EmitContext. 
14534
14535         * expression.cs (Cast): Overload DoResolveLValue so we can pass
14536         resolve our casted expression as an LValue.  This triggers the
14537         proper LValue processing that is later required by Assign.
14538
14539         This fixes 72347.
14540
14541         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
14542
14543 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
14544
14545         C# 2.0 Fixed buffer implementation
14546
14547         * anonymous.cs: Update after RegisterHelperClass renaming.
14548
14549         * attribute.cs (AttributeTester.fixed_buffer_cache):
14550         Cache of external fixed buffers.
14551         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
14552         implementation if field is fixed buffer else null.
14553
14554         * class.cs
14555         (TypeContainer.AddField): Accept FieldMember instead of Field.
14556         (FieldBase.IsFieldClsCompliant): Extracted code from
14557         VerifyClsCompliance descendant customization.
14558         (FixedField): New class handles fixed buffer fields.
14559         (FixedFieldExternal): Keeps information about imported fixed
14560         buffer.
14561         (IFixedField): Make access to internal or external fixed buffer
14562         same.
14563
14564         * cs-parser.jay: Add fixed buffer parsing.
14565
14566         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
14567         buffer.
14568
14569         * expression.cs (Indirection): Extended implementation to accept
14570         fixed buffer field.
14571         (PointerArithmetic.Emit): Get element from fixed buffer as well.
14572         (ElementAccess.MakePointerAccess): Get type as parameter.
14573         (DoResolve): Add fixed buffer field expression conversion.
14574         (DoResolveLValue): Ditto.
14575         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
14576         (ArrayPtr): Derives from FixedBufferPtr.
14577         (ArrayPtr.Emit): Add extra emit for array elements.
14578
14579         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
14580
14581         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
14582         for compiler generated types.
14583         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
14584
14585         * statement.cs (Fixed): Refactored to be easier add fixed buffer
14586         and consume less memory.
14587         (Fixed.Resolve): Add fixed buffer case.
14588
14589         * typemanager.cs (compiler_generated_attr_ctor,
14590         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
14591         (HasElementType): Add our own implementation to work on every
14592         runtime.
14593
14594 2005-02-11  Miguel de Icaza  <miguel@novell.com>
14595
14596         * anonymous.cs (CaptureContext): Track whether `this' has been
14597         referenced.   
14598
14599         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
14600         only captured `this' if it was implicitly done (instance
14601         methods/variables were used). 
14602
14603         * codegen.cs (EmitContext.CaptureThis): New method to flag that
14604         `this' must be captured.
14605
14606 2005-01-30  Miguel de Icaza  <miguel@novell.com>
14607  
14608         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
14609         is null it means that there has been no need to capture anything,
14610         so we just create a sibling.
14611
14612         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
14613
14614         Just a partial fix.  The other half is fairly elusive.
14615         
14616 2005-02-10  Raja R Harinath  <rharinath@novell.com>
14617
14618         Fix #52586, cs0121-4.cs.
14619         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
14620         and return a hashtable.
14621         (MemberCache.ClearDeclaredOnly): New.
14622         (MemberCache.MemberCache): Update to change.  Make a deep copy of
14623         the method_hash of a base type too.
14624         (MemberCache.AddMethods): Adapt to having a deep copy of the base
14625         type methods.  Overwrite entries with the same MethodHandle so
14626         that the ReflectedType is correct.  The process leaves in base
14627         virtual functions and their overrides as distinct entries.
14628         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
14629         matters since it was boxed in a ArrayList before.
14630         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
14631         modifier.
14632         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
14633         case of a virtual function and its override (choose the overload
14634         as better).
14635         (Invocation.OverloadResolve): Avoid 'override' members during
14636         'applicable_type' calculation.
14637
14638 2005-02-09  Raja R Harinath  <rharinath@novell.com>
14639
14640         Combine two near-redundant caches.
14641         * typemanager.cs (method_params): Rename from method_internal_params.
14642         (TypeManager.GetParameterData): New.  Replace
14643         Invocation.GetParameterData.
14644         (TypeManager.LookupParametersByBuilder): Remove.
14645         * expression.cs (Invocation.method_parameter_cache): Remove.
14646         (Invocation.GetParameterData): Remove.
14647         Update to changes.
14648         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
14649         Update to changes.
14650
14651 2005-02-08  Raja R Harinath  <rharinath@novell.com>
14652
14653         Fix #72015.
14654         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
14655         TypeManager.multicast_delegate_type is null, resolve it by looking
14656         up "System.MulticastDelegate".
14657         * rootcontext.cs (RootContext.ResolveCore): Simplify.
14658
14659 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
14660             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
14661             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
14662
14663         Fix cs0164.cs.
14664         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
14665         (LabeledStatement.AddReference): New.  Set 'referenced'.
14666         (Goto.Resolve): Use it.
14667
14668 2005-02-05  John Luke  <john.luke@gmail.com>
14669
14670         * driver.cs: remove duplicate -doc line in Usage ()
14671
14672 2005-02-04  Raja R Harinath  <rharinath@novell.com>
14673
14674         * location.cs (Location.AddFile): Fix CS2002 error report.
14675
14676 2005-02-02  Martin Baulig  <martin@ximian.com>
14677
14678         * delegate.cs (Delegate.DefineType): Report an internal error if
14679         TypeManager.multicast_delegate_type is null.  See bug #72015 for
14680         details.        
14681
14682 2005-02-02  Raja R Harinath  <rharinath@novell.com>
14683
14684         Fix a crasher in a variant of #31984.
14685         * const.cs (Constant.CheckBase): New override that defers the
14686         new-or-override check in case the base type hasn't been populated
14687         yet.
14688         (Constant.Define): Ensure the new-or-override check is performed.
14689
14690 2005-02-01  Duncan Mak  <duncan@ximian.com>
14691
14692         * const.cs (LookupConstantValue): Check that `ce' is not null
14693         before calling GetValue ().
14694
14695 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14696
14697         Fix test-334.cs (#69519).
14698         * cs-parser.jay (using_alias_directive): Pass in an expression to
14699         NamespaceEntry.UsingAlias.
14700         (using_namespace_directive): Pass in an expression to
14701         NamespaceEntry.Using.
14702         (namespace_name): Don't flatten to a string.
14703         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
14704         (NamespaceEntry.AliasEntry.Resolve): Lookup using
14705         ResolveAsTypeStep.
14706         (NamespaceEntry.UsingEntry): Likewise.
14707         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
14708         changes.
14709         (NamespaceEntry.LookupForUsing): Remove.
14710         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
14711         names.
14712         (NamespaceEntry.Lookup): Remove support for dotted names.
14713
14714 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14715
14716         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
14717         split into two.
14718         (NamespaceEntry.ImplicitParent): Compute on demand.
14719         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
14720         parallels the current.
14721         (NamespaceEntry.LookupForUsing): Use it.
14722         (NamespaceEntry.Lookup): If the current namespace-entry is
14723         implicit, don't search aliases and using tables.
14724
14725 2005-02-01  Raja R Harinath  <rharinath@novell.com>
14726
14727         Fix #31984.
14728         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
14729         BaseCache here.
14730         (TypeContainer.BaseCache): Compute on demand.
14731         (TypeContainer.FindMembers): Define constants and types if they're
14732         not already created.
14733         (FieldMember.Define): Move resetting of ec.InUnsafe before error
14734         check.
14735         * const.cs (Constant.Define): Make idempotent.
14736
14737 2005-01-29  Miguel de Icaza  <miguel@novell.com>
14738
14739         * pending.cs: Produce better code (no nops produced by using Ldarg
14740         + value).
14741         
14742         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
14743         i - 1' it should be arg + 1.
14744
14745         Fixes bug #71819.
14746
14747 2005-01-28  Raja R Harinath  <rharinath@novell.com>
14748
14749         * attribute.cs (Attribute.CheckAttributeType): Make private
14750         non-virtual.
14751         (Attribute.ResolveType): Make virtual.
14752         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
14753         handling of RootContext.Tree.Types.
14754
14755 2005-01-27  Raja R Harinath  <rharinath@novell.com>
14756
14757         Update attribute-handling to use the SimpleName/MemberAccess
14758         mechanisms.
14759         * cs-parser.jay (attribute): Pass in an expression to the
14760         constructors of Attribute and GlobalAttribute.
14761         * attribute.cs (Attribute): Take an expression for the name.
14762         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
14763         passed in attribute name expression.
14764         (Attribute.CheckAttributeType): Use it.
14765         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
14766         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
14767         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
14768         argument to prevent error messages if the lookup fails.
14769
14770 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
14771
14772         * expression.cs (Indirection): Implemented IVariable interface
14773         to support indirection in AddressOf operator.
14774         (PointerArithmetic.Emit): Add optimalization for case where
14775         result can be precomputed.
14776
14777 2005-01-26  Martin Baulig  <martin@ximian.com>
14778
14779         * class.cs (TypeContainer.AttributeTargets): Return the correct
14780         AttributeTargets depending on our `Kind' instead of throwing an
14781         exception; fixes #71632.
14782
14783 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
14784
14785         Fix #71257
14786         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
14787         constant members.
14788
14789 2005-01-25  Raja R Harinath  <rharinath@novell.com>
14790
14791         Fix #71602.
14792         * expression.cs (MemberAccess.DoResolve): Don't complain with
14793         cs0572 when the LHS of a member access has identical name and type
14794         name.
14795
14796 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
14797
14798         Fix #71651, #71675
14799         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
14800         CreatePermission.
14801         Create custom PermissionSet only for PermissionSetAttribute.
14802
14803 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
14804
14805         Fix #71649
14806         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
14807         delegates in static class.
14808
14809 2005-01-24  Martin Baulig  <martin@ximian.com>
14810
14811         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
14812         merging an implicit block, just use its reachability.
14813
14814         * statement.cs (Block.Resolve): Make the unreachable code check
14815         work wrt. implicit blocks; see test-337 from #63842.
14816
14817 2005-01-21  Alp Toker  <alp@atoker.com>
14818  
14819         * cs-parser.jay: destructor_declaration's container is PartialContainer
14820         not Class when partial types are used, so use Kind prop instead of
14821         'is'.
14822         
14823 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
14824
14825         * cs-parser.jay: Improve error reporting when an interface
14826         declares new types.
14827
14828 2005-01-20  Dick Porter  <dick@ximian.com>
14829
14830         * support.cs: SeekableStreamReader fix from Sandor Dobos
14831         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
14832         chars are read.  Fixes bug 70369.
14833
14834 2005-01-20  Raja R Harinath  <rharinath@novell.com>
14835
14836         * cs-parser.jay (catch_clause): Simplify current_block handling
14837         somewhat.
14838
14839 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
14840
14841         * convert.cs (ImplicitStandardConversionExists): Synchronize the
14842         code with ImplicitStandardConversion to handle the implicit
14843         conversion of method groups into valid delegate invocations. 
14844
14845         The problem is that in parameter handling we were using this code
14846         path.  Fixes bug #64698
14847
14848 2005-01-19  Raja R Harinath  <rharinath@novell.com>
14849
14850         * cs-parser.jay: Fix several infelicities.
14851         - Avoid assigning to the parser value stack.  Code like 
14852           '$3 = null' is unclean.  Synthesize a value for the code block
14853           instead. 
14854         - Avoid using oob_stack for storing location information.  Use ...
14855         (_mark_): ... this.  New (empty) rule.  Saves the current location
14856         in $$.
14857         (foreach_statement): Avoid using oob_stack for current_block
14858         handling.  Use technique used in for_statement and
14859         using_statement.  Synthesize a value for the code block to store
14860         additional intermediate information.
14861
14862 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
14863
14864         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
14865         of a different type is only allowed to private fields of a
14866         containing type, not on fields of a base class.
14867
14868         See test-174.cs and error cs0122-9.cs
14869
14870 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14871
14872         Fix test-335.cs (bug #58126).
14873         * cs-parser.jay (argument): Split out non-expression parts of the
14874         rule into 'non_simple_argument'.
14875         (invocation_expression): Support parenthesized invocations with
14876         multiple arguments, and with single non-simple arguments.
14877
14878 2005-01-13  Raja R Harinath  <rharinath@novell.com>
14879
14880         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
14881         places.
14882
14883 2005-01-12  Raja R Harinath  <rharinath@novell.com>
14884
14885         Fix cs0038-1.cs, cs1640-6.cs.
14886         * ecore.cs (Expression.Resolve): Remove special-case for
14887         SimpleName in error-handling.
14888         (Expression.almostMatchedMembers): Relax access permission to
14889         protected.
14890         (Expression.MemberLookupFailed): Handle duplicates in
14891         almostMatchedMembers list.
14892         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
14893         * expression.cs (New.DoResolve): Report CS1540 for more cases.
14894         * typemanager.cs (GetFullNameSignature): Use the MethodBase
14895         overload if the passed in MemberInfo is a MethodBase.
14896
14897 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
14898
14899         Fix #70749
14900         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
14901         for non-CAS & merge permission sets properly.
14902
14903 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14904
14905         Improve standard-compliance of simple name and member access 
14906         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
14907         * ecore.cs (FullNamedExpression): New abstract base class 
14908         for Namespaces and TypeExpressions.
14909         (ResolveFlags.SimpleName): Remove.
14910         (SimpleName): Remove support for dotted names.
14911         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
14912         DeclSpace.FindType and DeclSpace.LookupType.
14913         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
14914         (Expression.ExprClassName): Make member function.
14915         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
14916         a namespace.  Remove creation of dotted "SimpleName"s.
14917         (MemberAccess.DoResolve): Likewise.
14918         * decl.cs (DeclSpace.Cache): Make private.
14919         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
14920         (DeclSpace.FindType): Update.
14921         (DeclSpace.LookupType): Move here from RootContext.  Return a 
14922         FullNamedExpression.
14923         * namespace.cs (Namespace): Derive from FullNamedExpression
14924         so that it can be part of expression resolution.
14925         (Namespace.Lookup): Return an FullNamedExpression.
14926         (NamespaceEntry.LookupAlias): Lookup aliases only in current
14927         namespace.
14928         * rootcontext.cs (NamespaceLookup): Remove.
14929         (LookupType): Move to DeclSpace.
14930         * attribute.cs (CheckAttributeType): Update.
14931         * doc.cs (FindDocumentedType): Remove allowAlias argument.
14932         (FindDocumentedTypeNonArray): Likewise.
14933
14934 2005-01-11  Raja R Harinath  <rharinath@novell.com>
14935
14936         Fix cs0509.cs, cs1632.cs.
14937         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
14938         is the same as IsInterface.
14939         (TypeContainer.GetClassBases): Likewise.
14940         * statement.cs (LabeledStatement.ig): New field.
14941         (LabeledStatement.LabelTarget): Save ILGenerator which created the
14942         label.
14943         (LabeledStatement.DoEmit): Check that the label was created with
14944         the same ILGenerator.
14945
14946 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14947
14948         Fix #71058
14949         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
14950         accessors to its properties.
14951
14952         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
14953         from accessors to property.
14954         
14955 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
14956
14957         Fix #70722
14958         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
14959         only for overrides.
14960         
14961 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
14962
14963         * attribute.cs: Check for null and empty strings.  
14964
14965         I have lost another battle to Paolo.
14966
14967 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
14968
14969         Fix #70942
14970         * class.cs (PropertyMethod): Set Parent field in ctors.
14971         (SetMethod.InternalParameters): Add unsafe switch hack.
14972         Override MarkForDuplicationCheck where it is appropriate.
14973
14974         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
14975         It says whether container allows members with the same name.
14976         Base default is no.
14977         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
14978         Removed is_method parameter.
14979
14980 2005-01-06  Duncan Mak  <duncan@ximian.com>
14981
14982         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
14983         because the previous change led to incorrect reporting of CS1032
14984         ("Cannot define/undefine preprocessor symbols after first token in
14985         file"). Instead of using `tokens_seen' as the only flag that
14986         triggers CS1040, introduce `comments_seen'. This new flag is used
14987         to signify having seen comments on the current line, so it is
14988         unset after a newline.
14989
14990 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14991
14992         * doc.cs : When searching for a type, find nested type too.
14993           This fixes bug #71040.
14994
14995 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
14996
14997         * doc.cs :
14998           - Warn missing member comment on those classes which also does not
14999             have doc comments. Fixed bug #71041.
15000           - Don't warn missing doc comment on default constructor.
15001             Fixed bug #71042.
15002
15003 2005-01-06  Duncan Mak  <duncan@ximian.com>
15004
15005         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15006         comments, set `tokens_seen' to true. This allows us to detect
15007         misplaced preprocessor directives (i.e. not at the beginning of
15008         the a line, nor after whitespaces). In that case, report error
15009         CS1040. This fixes bug #56460.
15010
15011         * cs-parser.jay (interface_member_declaration): Add checks for
15012         IsExplicitImpl, and report CS0541 error if an interface member is
15013         defined as an explicit interface declaration.
15014
15015 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15016
15017         Fix #70817
15018         * class.cs (PropertyMethod): Set Parent field in ctors.
15019         (SetMethod.InternalParameters): Add unsafe switch hack.
15020         
15021         * decl.cs (MemberCore.Parent): Cannot be readonly.
15022
15023 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15024
15025         * decl.cs (DeclSpace.ResolveType): Remove.
15026         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15027         Merge in code from ...
15028         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15029         * class.cs, enum.cs: Update to changes.
15030
15031 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15032
15033         * anonymous.cs: Ensure that we init the scope of our parent if it
15034         has not been initialized yet.
15035
15036 2004-12-30  Duncan Mak  <duncan@ximian.com>
15037
15038         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15039         if field.FieldBuilder is null. Fixes #70758.
15040
15041         * convert.cs: Fixed some typos and updated some of the comments.
15042         (ImplicitStandardConversionExists):
15043         (TryImplicitIntConversion): If `target_type' is an interface and
15044         the type of `ic' implements this interface, return true or a new
15045         BoxedCast instead of null. This fixes #70468.
15046
15047 2004-12-29  Duncan Mak  <duncan@ximian.com>
15048
15049         * expression.cs (Argument.Emit): Check that Expr is
15050         IMemoryLocation before casting to it, and report CS1510 otherwise.
15051
15052         This fixes #70402.
15053
15054 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15055
15056         * statement.cs (Block.ThisVariable): remove the recursion here, to
15057         make the --profile more sane.
15058
15059 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15060
15061         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15062         assembly, by JB Evain.
15063
15064 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15065
15066         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15067           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15068         "parent" refers to enclosing type/class.  "base" refers to superclass.
15069
15070 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15071
15072         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15073         Ensure that we only have GlobalAttributes.
15074         * attribute.cs (Attribute.Emit): Make non-virtual.
15075         (GlobalAttribute.Emit): Remove.
15076         (Attribute.Resolve): Make virtual.
15077         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15078         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15079         the argument. Don't create one.
15080         (Attribute.GetObsoleteAttribute): Likewise.
15081         (Attribute.GetClsCompliantAttributeValue): Likewise.
15082         * class.cs, decl.cs: Update to changes.
15083
15084 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15085
15086         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15087         
15088         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15089         
15090         * statement.cs (Foreach.Resolve): Add error 186 report.
15091
15092 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15093
15094         * expression.cs (Conditional.DoResolve): Add warning 429.
15095         
15096         * statement.cs (If.Resolve): Add warning 665.
15097
15098 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15099
15100         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15101         except when in the parser, and in GlobalAttribute.
15102         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15103         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15104         RootContext.Tree.Types.NamespaceEntry once work is done.
15105         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15106         and resets RootContext.Tree.Types.NamespaceEntry.
15107
15108 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15109
15110         * cs-parser.jay: Don't create a block for every variable.
15111
15112 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15113
15114         * location.cs: Provide extra information.
15115
15116         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15117         variables from the captured environment, it is the ldarg_0.
15118
15119 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15120
15121         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15122         find a conclusion.
15123         
15124         * class.cs: Changed warning level for 169 to avoid developer
15125         displeasure from warning flooding. It will be changed back when they
15126         fix most of current BCL warnings.
15127         
15128         * RootContext.cs: Pushed default WarningLevel to 3.
15129         
15130         * statement.cs: Removed unused variable.
15131
15132 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15133
15134         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15135         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15136         Add error 502 report.
15137         (StaticClass.DefineType): Add error 441 report.
15138         (Class.AllowedModifiersProp): New virtual property as temporary
15139         extension to AllowedModifiers.
15140         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15141         to share implementation with StaticClass and don't call virtual
15142         methods from ctor.
15143         
15144         * driver.cs (MainDriver): Add error 1558 test.
15145
15146         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15147         report. Moved error 36 test here.
15148
15149         * statement.cs (Throw.Resolve): Add error 724 report.
15150
15151         * typemanager.cs: Add out_attribute_type core type.
15152         
15153 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15154
15155         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15156         3018 report.
15157         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15158
15159         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15160         3017 report.
15161         
15162         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15163
15164         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15165         Add error 3023 report.
15166         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15167
15168         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15169         implementation.
15170
15171 2004-12-12  John Luke  <john.luke@gmail.com>
15172
15173         * driver.cs (AddArgs): take -- into account when
15174         adding arguments, fixes bug 65710 
15175
15176 2004-12-12  Martin Baulig  <martin@ximian.com>
15177
15178         * expression.cs (Unary.TryReduceNegative): Added support for
15179         SByteConstant and ByteConstant.
15180         (Unary.Reduce): Check error values from TryReduceNegative().
15181
15182 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15183
15184         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15185         and report exception as error 182.
15186
15187 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15188
15189         * driver.cs (Main): Fix message when there are warnings.
15190
15191 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15192
15193         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15194
15195 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15196
15197         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15198         Reduced number of warnings.
15199         
15200         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15201
15202 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15203
15204         * driver.cs: Removed message.
15205
15206         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15207
15208 2004-12-08    <vargaz@freemail.hu>
15209
15210         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15211
15212 2004-12-08  Martin Baulig  <martin@ximian.com>
15213
15214         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15215         instead of a CS3002 for properties and indexer.
15216
15217 2004-12-08  Martin Baulig  <martin@ximian.com>
15218
15219         * decl.cs (MemberName.ToString): Make this work again.
15220
15221 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15222
15223         * attribute.cs (Resolve): Add error 591 detection.
15224
15225         * class.cs (FieldMember.Define): Add error 1547 detection.
15226         (Indexer.Define): Add error 620 detection.
15227         (Operator.Define): Add error 590 detection.
15228
15229         * ecore.cs: Missing argument for error 79.
15230
15231         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15232         detection.
15233
15234 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15235
15236         Fix #70106
15237         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15238         only.
15239
15240 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15241
15242         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15243           Some operator comments were suppressed.
15244         * doc.cs : Implicit/explicit operator name in doc comments are like
15245           "op_Explicit(type)~returnType", so added suffix handling.
15246
15247 2004-12-07  Martin Baulig  <martin@ximian.com>
15248
15249         * decl.cs
15250         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
15251         (MemberCore.GetClsCompliantAttributeValue): Likewise.
15252         (DeclSpace.ec): New protected field; store the EmitContext here.
15253         (DeclSpace.EmitContext): New public property; moved here from
15254         `TypeContainer'.
15255         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
15256         EmitContext.
15257
15258         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
15259         (Enum.Emit): Don't create a new EmitContext.
15260
15261         * delegate.cs (Delegate.DefineType): Always create the
15262         EmitContext.
15263
15264         * iterators.cs (Iterators.DefineIterator): Create a new
15265         EmitContext and store it in `ec'.
15266
15267 2004-08-24  Martin Baulig  <martin@ximian.com>
15268
15269         * typemanager.cs
15270         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
15271         this for accessibility checks.
15272         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
15273         IsNestedFamilyAccessible.
15274         (TypeManager.IsSubclassOf): New method, do what the name actually
15275         says.   
15276
15277 2004-12-06  Raja R Harinath  <rharinath@novell.com>
15278
15279         Fix crash on cs0657-17.cs.
15280         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15281         Use RootContext.Tree.Types, not 'new RootTypes ()'.
15282         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
15283         the case where the NamespaceEntry gets overwritten.
15284
15285 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
15286
15287         Fixed #69195, #56821
15288         * ecore.cs (ResolveBoolean): Tiny refactoring.
15289
15290         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
15291         of right expression resolving when left is false constant and
15292         operator is LogicalAnd OR true constant and operator is LogicalOr.
15293
15294         * statement.cs (ResolveUnreachable): Always reports warning.
15295
15296 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
15297
15298         * class.cs: Distinguish between 1721 and 1722 (just a little help
15299         for the programmer).
15300
15301 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
15302
15303         * delegate.cs: Only allow this on new versions of the language. 
15304
15305 2004-12-02  Duncan Mak  <duncan@ximian.com>
15306
15307         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
15308         Expression class.
15309         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
15310         here as a static method. Take an additional bool out parameter
15311         `must_do_cs1540_check' for signaling to InstanceResolve.
15312         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
15313         member field from PropertyExpr class and made it an argument of
15314         the method instead.
15315         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
15316         check for MarshalByRefObject, and report CS0122 instead of CS1540.
15317         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
15318         and `remove_accessor' as well as InstanceResolve: report CS0122
15319         where applicable.
15320
15321         Fixes #70129.
15322
15323 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15324
15325         Fix test-327.cs, test-328.cs, and put in early infrastructure
15326         for eventually fixing #52697.
15327         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
15328         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
15329         from other methods.
15330         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
15331         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
15332         (VerifyUsing, error246): Update.
15333         * rootcontext.cs (RootContext.NamespaceLookup): Just use
15334         'NamespaceEntry.LookupNamespaceOrType'.
15335
15336 2004-12-03  Martin Baulig  <martin@ximian.com>
15337
15338         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15339         method as our child, call AnonymousMethod.Compatible() on it.
15340
15341 2004-12-03  Raja R Harinath  <rharinath@novell.com>
15342
15343         Disable XML documentation support in 'basic' profile.
15344         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
15345         Redirect XmlElement to System.Object.
15346         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
15347         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
15348         * mcs.exe.sources: Add doc-bootstrap.cs.
15349         * doc-bootstrap.cs: New file.  Contains empty stub implementation
15350         of doc.cs.
15351
15352 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
15353
15354         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
15355           comments are allowed.
15356
15357 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15358
15359         * delegate.cs: Add checks for subtypes in paramaters and return values
15360         in VerifyMethod () to add support for Covariance/Contravariance
15361         in delegates.
15362         
15363 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
15364
15365         * report.cs: Remove extra closing parenthesis.
15366
15367         * convert.cs (Error_CannotImplicitConversion): If the name of the
15368         types are the same, provide some extra information.
15369
15370         * class.cs (FieldBase): Use an unused bit field from the field to
15371         encode the `has_offset' property from the FieldMember.  This saves
15372         a couple of Ks on bootstrap compilation.
15373
15374         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
15375         method as our child, return the AnonymousMethod resolved
15376         expression.
15377
15378         * expression.cs (New.DoResolve): Allow return values from
15379         NewDelegate to also include AnonymousMethods.
15380
15381         Fixes #70150.
15382
15383 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
15384
15385         Fix bug #70102
15386         * attribute.cs (Resolve): Improved implementation of params
15387         attribute arguments.
15388
15389         * support.cs (ParameterData): Add HasParams to be faster.
15390
15391 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
15392
15393         all things are for /doc support:
15394
15395         * doc.cs: new file that supports XML documentation generation.
15396         * mcs.exe.sources: added doc.cs.
15397         * driver.cs:
15398           Handle /doc command line option.
15399           Report error 2006 instead of 5 for missing file name for /doc.
15400           Generate XML documentation when required, after type resolution.
15401         * cs-tokenizer.cs:
15402           Added support for picking up documentation (/// and /** ... */),
15403           including a new XmlCommentState enumeration.
15404         * cs-parser.jay:
15405           Added lines to fill Documentation element for field, constant,
15406           property, indexer, method, constructor, destructor, operator, event
15407           and class, struct, interface, delegate, enum.
15408           Added lines to warn incorrect comment.
15409         * rootcontext.cs :
15410           Added Documentation field (passed only when /doc was specified).
15411         * decl.cs:
15412           Added DocComment, DocCommentHeader, GenerateDocComment() and
15413           OnGenerateDocComment() and some supporting private members for
15414           /doc feature to MemberCore.
15415         * class.cs:
15416           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
15417         * delegate.cs:
15418           Added overriden DocCommentHeader.
15419         * enum.cs:
15420           Added overriden DocCommentHeader and GenerateDocComment().
15421
15422 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
15423
15424         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
15425         unwrapping the enumeration values, chain to
15426         DoConstantNumericPromotions again, so we can promote things to the
15427         fundamental types (takes care of enums that are bytes, sbytes).
15428
15429         Fixes bug #62054.
15430
15431 2004-12-01  Raja R Harinath  <rharinath@novell.com>
15432
15433         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
15434         Fix long-standing bug in type-lookup.  Use FindType instead of
15435         LookupType when ec.ResolvingTypeTree.
15436         (Attribute.ResolveType, Attribute.Resolve)
15437         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
15438         Update to changes.
15439         (Attributes.Search): Remove internal version.  Update.
15440         (Attributes.SearchMulti): Update.
15441         (Attributes.GetClsCompliantAttribute): Remove.
15442         (Attributes.GetIndexerNameAttribute): Remove.
15443         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
15444         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
15445         * class.cs (Indexer.Define): Likewise.
15446
15447 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
15448
15449         Fix bug #68790
15450         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
15451         MarshallByReference members access.
15452
15453         * expression.cs: Use CheckMarshallByRefAccess;
15454         Better error CS0197 message.
15455
15456         * report.cs: Print whole related error message.
15457
15458 2004-11-30  Raja R Harinath  <rharinath@novell.com>
15459
15460         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
15461         the current directory to help debugging.
15462
15463 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15464
15465         * class (GetClassBases): Better error 60 report.
15466         (EventProperty): Disabled warning 67 detection.
15467
15468 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15469
15470         Fix bug #60324
15471         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
15472
15473         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
15474         precise values.
15475
15476 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
15477
15478         Fix bug #49488
15479         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
15480
15481         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
15482
15483 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
15484
15485         * attribute.cs (Attribute.Resolve): Refine error reporting and
15486         report a cs0117 if the identifier does not exist, to distinguish
15487         from 0617 which is a miss-use of the actual identifier.
15488
15489         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
15490         between cs0070 and cs0079.
15491
15492         * class.cs (MemberBase.DoDefine): When reporting a wrong
15493         accessibility level, we use MethodCore to compare instead of
15494         Method (this was a regression in some refactoring effort).
15495
15496         So now we correctly report cs0056 again.
15497
15498         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
15499         testing the target_type (which was known to be object_type) and
15500         not the source type (which is anonymous_method).
15501
15502         Fixed reporting of error cs1660.
15503
15504         * expression.cs (UserCast.Source): Expose the underlying cast.
15505
15506         * statement.cs (Switch.SwitchGoverningType): Sort the list of
15507         allowed types to find a match to int32 first (most common).
15508
15509         In addition, it ignores any ImplicitUserConversions that did an
15510         internal implicit conversion (as the switch statement allows only
15511         one integral conversion to exist).
15512
15513         * class.cs (PartialContainer.Create): rename `name' to
15514         `member_name' for clarity.  Then replace the string calls with a
15515         call to MemberName.GetPartialName, as now using
15516         MemberName.ToString is an error (this is due to the side effects
15517         it had, that were fixed in the past).
15518
15519         This will restore the error reporting on a number of partial class
15520         errors that were missusing this (and getting an exception as a
15521         results, which is now just a plain textual warning, because
15522         yyparse debug output would crash otherwise).
15523
15524 2004-11-26  Raja R Harinath  <rharinath@novell.com>
15525
15526         * Makefile (PROGRAM_INSTALL_DIR): Remove.
15527
15528 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15529
15530         * rootcontext.cs (LookupType): Make sure to cache lookups that
15531         don't give us a negative result. This saves about 5% of corlib
15532         compilation time.
15533
15534 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15535
15536         * report.cs (AbstractMessage.Print): messages are sent to stderr
15537
15538         * class.cs (TypeContainer.GetClassBases): It is an error to have a
15539         non-interface in the list of interfaces (at this point, either
15540         parent was properly set, or a base class is being listed in the
15541         interfaces section).
15542
15543         This flags error 1722, and resolves the crash from bug 69259.
15544
15545 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
15546
15547         * statement.cs (Using.EmitExpressionFinally): make this work right
15548         for valuetypes. Fixes 69926.
15549
15550 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
15551
15552         * const.cs (Const.ChangeType): Cope with the "0 literal can be
15553         converted to an enum" here, before we try to change the underlying
15554         type.  This code exists, but it is a different code path than the
15555         one used while encoding constants.
15556
15557         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
15558         old bug: when converting from the null literal to a pointer,
15559         return an EmptyCast, not the NullLiteral.
15560
15561         This fixes #69921, the recent null_type changes probably made this
15562         bug more prominent.
15563
15564         (ImplicitReferenceConversionExists): In addition, resynchronized
15565         the code here, so it matches the same code in
15566         ImplicitReferenceConversionExists for the `from any class-type S
15567         to any interface-type T'.
15568         
15569
15570 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
15571
15572         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
15573
15574 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
15575
15576         * cs-parser.jay: Use verbosity accordingly. 
15577
15578 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15579
15580         * expression.cs (Unary.ResolveOperator): Do not report warning;
15581         AddressOf reads from variable.
15582         
15583         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
15584
15585 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
15586
15587         Fix bug #69462
15588
15589         * attribute.cs (Attributable): Removed CheckTargets.
15590         (Attributes.Emit): Explicit attribute targets are tested here.
15591
15592         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
15593         not enabled for interfaces.
15594
15595         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
15596         (GetAssemblyName): Ouch next bug there.
15597
15598 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
15599
15600         * expression.cs: Error 275 added.
15601         
15602 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
15603
15604         Fix bug #69177 (Implemented decimal constant support)
15605
15606         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
15607         (BinaryFold): Add DecimalConstant.
15608
15609         * const.cs (Define): Decimal constant 
15610         (is not constant.
15611         (ChangeType): Add decimal type handling.
15612         (LookupConstantValue): Don't set value for decimal type but
15613         emit DecimalConstantAttribute. Needed for constant optimization.
15614
15615         * constant.cs (ToDecimal): New method.
15616         (ConvertToDecimal): New method.
15617         (IntConstant): Implemented ConvertToDecimal.
15618         (DecimalConstant.Emit): Emit optimized version for decimals in
15619         int range.
15620
15621         * expression.cs (ResolveOperator): Changed order of constant
15622         reduction to work correctly with native types which have
15623         overloaded operators.
15624         (ResolveMemberAccess): Extract constant value from attribute
15625         for decimal type.
15626
15627         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
15628
15629         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
15630         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
15631         (ChangeType): Decimal is special.
15632         (TypeToCoreType): Add decimal type.
15633
15634 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15635
15636         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
15637         decimal types.
15638
15639 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
15640
15641         * class.cs (EventField.ApplyAttributeBuilder): Fix error
15642         test cs1667-5.cs.
15643
15644 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15645
15646         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
15647
15648         * pending.cs (PendingImplementation): Grab only interfaces.
15649
15650 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
15651
15652         * statement.cs (ForeachHelperMethods): Add location member and
15653         error 202 detection.
15654
15655 2004-11-19  Raja R Harinath  <rharinath@novell.com>
15656
15657         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
15658         automatically handled by executable.make.
15659         (PROGRAM): Make profile-specific.
15660
15661 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
15662
15663         * expression.cs (DoResolveBase): Fixed wrong warning for out
15664         variables.
15665
15666 2004-11-18  Martin Baulig  <martin@ximian.com>
15667
15668         Merged latest changes into gmcs.  Please keep this comment in
15669         here, it makes it easier for me to see what changed in MCS since
15670         the last time I merged.
15671
15672 2004-11-17  Raja R Harinath  <rharinath@novell.com>
15673
15674         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
15675         (TypeHandle.GetMemberCache): New.
15676         (TypeHandle.TypeHandle): Update.
15677         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
15678         (TypeManager.LookupParentInterfacesCache):
15679         Rename from LookupInterfaceCache.  Optimize slightly.
15680         (TypeManager.MemberLookup_FindMembers): Update.
15681         * decl.cs (MemberCache.MemberCache): Set Container to null in the
15682         multi-type variant.
15683         (AddCacheContents): Rename from AddHashtable.
15684         * class.cs (TypeContainer.parent_container): Remove.
15685         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
15686         (TypeContainer.DoDefineMembers): Don't initialize it.
15687         Update to name changes.
15688         
15689 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
15690
15691         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
15692         that factors the code to check access modifiers on override.  
15693
15694         (PropertyBase): Use the code here.
15695
15696         Patch from Lluis S'anchez, fixes bug #69361.
15697
15698 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
15699
15700         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
15701         routine that is used to report the use of a captured variable
15702         whose address has been taken.
15703
15704         There are two checks: one when variables are being captured and
15705         the other check is when the address of a variable is taken. 
15706         
15707         (because an anonymous methods might be resolved before *or* after
15708         the address has been taken) and 
15709
15710         * expression.cs (Conditional.DoResolve): Remove the special
15711         casing that Martin added to trueExpr and falseExpr being both
15712         NullLiteral.  We get the right behavior now just by introducing
15713         the null_type into the compiler. 
15714
15715         * convert.cs (ExplicitConversion): Change the code to use
15716         null_type instead of testing `expr is NullLiteral'.
15717         (ImplicitConversionStandard): use null_type too.
15718         (ImplicitReferenceConversionExists): use null_type too.
15719         (ImplicitReferenceConversion): use null_type too.
15720
15721         * literal.cs: The type of `NullLiteral' is now null_type instead
15722         of object_type. 
15723         (Resolve): Set the type here.
15724
15725         * typemanager.cs: Introduce null_type.
15726
15727 2004-11-17  Martin Baulig  <martin@ximian.com>
15728
15729         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
15730         direction, like FindMembers() does.  Fixes #69546, testcase is in
15731         test-315.cs.    
15732
15733 2004-11-16  Martin Baulig  <martin@ximian.com>
15734
15735         This is based on a patch from Marek Safar, see bug #69082.
15736         Fixes bugs #63705 and #67130.
15737
15738         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
15739         method; create a MemberCache for an interface type and cache the
15740         result.
15741
15742         * decl.cs (IMemberContainer.ParentContainer): Removed.
15743         (IMemberContainer.ParentCache): New property.
15744         (MemberCache.SetupCacheForInterface): Removed.
15745         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
15746         to create a cache for an interface's "parent".
15747
15748         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
15749         interfaces too.
15750
15751 2004-11-16  Martin Baulig  <martin@ximian.com>
15752
15753         Merged back from gmcs; these changes already went into gmcs a
15754         couple of weeks ago.
15755
15756         * typemanager.cs
15757         (TypeManager.AddUserType): Removed the `ifaces' argument.
15758         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
15759         `TypeExpr []'.
15760         (TypeManager.AddUserInterface): Removed.
15761         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
15762         `TypeExpr []'.
15763         (TypeManager.GetInterfaces): Likewise.
15764         (TypeManager.GetExplicitInterfaces): Likewise.
15765
15766         * ecore.cs (TypeExpr.GetInterfaces): Removed.
15767
15768         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
15769         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
15770
15771 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
15772
15773         * statement.cs: Avoid adding bools to a hashtable.
15774
15775 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
15776
15777         * expression.cs (Invocation.OverloadResolve): Flag error if we are
15778         calling an unsafe method from a safe location.
15779
15780 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
15781
15782         Fix #69167
15783         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
15784
15785 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
15786
15787         * namespace.cs (VerifyUsing): use GetPartialName instead of
15788         ToString. 
15789
15790 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
15791
15792         * statement.cs (Return.Resolve): Fix regression in typo: if
15793         `in_exc', we have to request a NeedReturnLabel, this was a typo
15794         introduced in the anonymous method check-in.  Fixes #69131.
15795
15796         * Indexers were using the ShortName when defining themselves,
15797         causing a regression in the compiler bootstrap when applying the
15798         patch from 2004-11-02 (first part), now they use their full name
15799         and the bug is gone.
15800
15801 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
15802
15803         * driver.cs: Strip the path from the names of embedded resources. Fixes
15804         #68519.
15805
15806 2004-11-04  Raja R Harinath  <rharinath@novell.com>
15807
15808         Fix error message regression: cs0104-2.cs.
15809         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
15810         (AliasEntry.Resolve): Update.
15811         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
15812         'silent' flag.
15813         (RootContext.LookupType): Update.
15814
15815 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
15816
15817         * cs-parser.jay: Add support for handling accessor modifiers
15818         * class: Add support port accessor modifiers and error checking,
15819         define PropertyMethod.Define as virtual (not abstract anymore)
15820         * ecore.cs: Add checking for proeprties access with access modifiers
15821         * iterators.cs: Modify Accessor constructor call based in the modified
15822         constructor
15823 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
15824
15825         * expression.cs (StringConcat): Handle being called twice,
15826         as when we have a concat in a field init with more than two
15827         ctors in the class
15828
15829 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
15830
15831         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
15832         special case explicit implementations, we should always produce
15833         the .property or .event declaration.
15834         
15835         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
15836         since it will not return correct data if people use this
15837         unresolved in the presence of using statements (see test-313).
15838
15839         * class.cs (MethodData.Define): If we are an explicit interface
15840         implementation, set the method name to the full name of the
15841         interface plus the name of the method.  
15842
15843         Notice that using the method.MethodName.GetFullName() does not
15844         work, as it will only contain the name as declared on the source
15845         file (it can be a shorthand in the presence of using statements)
15846         and not the fully qualifed type name, for example:
15847
15848         using System;
15849
15850         class D : ICloneable {
15851                 object ICloneable.Clone ()  {
15852                 }
15853         }
15854
15855         Would produce a method called `ICloneable.Clone' instead of
15856         `System.ICloneable.Clone'.
15857
15858         * namespace.cs (Alias.Resolve): Use GetPartialName.
15859         
15860 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15861
15862         * cs-parser.jay: Add error 1055 report.
15863
15864 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
15865
15866         * assign.cs (Assign.DoResolve): Only do the transform of
15867         assignment into a New if the types are compatible, if not, fall
15868         through and let the implicit code deal with the errors and with
15869         the necessary conversions. 
15870
15871 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
15872
15873         * cs-parser.jay: Add error 1031 report.
15874
15875         * cs-tokenizer.cs: Add location for error 1038.
15876
15877 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15878
15879         * cs-parser.jay: Add error 1016 report.
15880
15881 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15882
15883         * cs-parser.jay: Add errors 1575,1611 report.
15884
15885 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15886
15887         * cs-parser.jay: Add error 1001 report.
15888
15889 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15890
15891         Fix #68850
15892         * attribute.cs (GetMarshal): Add method argument for
15893         caller identification.
15894
15895         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
15896         agument for GetMarshal and RuntimeMissingSupport.
15897
15898 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
15899
15900         * attribute.cs (ExtractSecurityPermissionSet): Removed
15901         TypeManager.code_access_permission_type.
15902
15903         * typemanager.cs: Removed TypeManager.code_access_permission_type.
15904
15905 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
15906
15907         * expression.cs (LocalVariableReference.DoResolveLValue): Check
15908         for obsolete use of a variable here.   Fixes regression on errors
15909         cs0619-25 and cs0619-26.
15910
15911 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
15912
15913         Fix #62358, implemented security attribute encoding.
15914
15915         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
15916         Tests permitted SecurityAction for assembly or other types.
15917         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
15918         data from SecurityPermissionAttribute to PermisionSet class.
15919
15920         * class.cs (ApplyAttributeBuilder): Added special handling
15921         for System.Security.Permissions.SecurityAttribute based types.
15922
15923         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
15924         special handling for System.Security.Permissions.SecurityAttribute
15925         based types.
15926
15927         * enum.cs (ApplyAttributeBuilder): Added special handling
15928         for System.Security.Permissions.SecurityAttribute based types.
15929
15930         * parameter.cs (ApplyAttributeBuilder): Added special handling
15931         for System.Security.Permissions.SecurityAttribute based types.
15932
15933         * rootcontext.cs: Next 2 core types.
15934
15935         * typemanager.cs (TypeManager.security_permission_attr_type):
15936         Built in type for the SecurityPermission Attribute.
15937         (code_access_permission_type): Build in type.
15938
15939 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
15940
15941         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
15942         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
15943         all of this information into
15944         EmitContext.EmitCapturedVariableInstance.
15945         
15946         * codegen.cs (EmitCapturedVariableInstance): move here the
15947         funcionality of emitting an ldarg.0 in the presence of a
15948         remapping.   This centralizes the instance emit code.
15949
15950         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
15951         then emit a load of this: it means that we have reached the
15952         topmost ScopeInfo: the one that contains the pointer to the
15953         instance of the class hosting the anonymous method.
15954
15955         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
15956         captures to the topmost CaptureContext.
15957
15958 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
15959
15960         * expression.cs (LocalVariableReference): Move the knowledge about
15961         the iterators into codegen's EmitCapturedVariableInstance.
15962
15963 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
15964
15965         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
15966         all code paths return a value from an anonymous method (it is the
15967         same as the 161 error, but for anonymous methods).
15968
15969 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
15970
15971         The introduction of anonymous methods in the compiler changed
15972         various ways of doing things in the compiler.  The most
15973         significant one is the hard split between the resolution phase
15974         and the emission phases of the compiler.
15975
15976         For instance, routines that referenced local variables no
15977         longer can safely create temporary variables during the
15978         resolution phase: they must do so from the emission phase,
15979         since the variable might have been "captured", hence access to
15980         it can not be done with the local-variable operations from the runtime.
15981         
15982         * statement.cs 
15983
15984         (Block.Flags): New flag `IsTopLevel' to indicate that this block
15985         is a toplevel block.
15986
15987         (ToplevelBlock): A new kind of Block, these are the blocks that
15988         are created by the parser for all toplevel method bodies.  These
15989         include methods, accessors and anonymous methods.
15990
15991         These contain some extra information not found in regular blocks:
15992         A pointer to an optional CaptureContext (for tracking captured
15993         local variables and parameters).  A pointer to the parent
15994         ToplevelBlock.
15995         
15996         (Return.Resolve): Catch missmatches when returning a value from an
15997         anonymous method (error 1662).
15998         Invoke NeedReturnLabel from the Resolve phase instead of the emit
15999         phase.
16000
16001         (Break.Resolve): ditto.
16002
16003         (SwitchLabel): instead of defining the labels during the
16004         resolution phase, we now turned the public ILLabel and ILLabelCode
16005         labels into methods called GetILLabelCode() and GetILLabel() that
16006         only define the label during the Emit phase.
16007
16008         (GotoCase): Track the SwitchLabel instead of the computed label
16009         (its contained therein).  Emit the code by using
16010         SwitchLabel.GetILLabelCode ().
16011
16012         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16013         whether the Local has been captured or not.
16014
16015         (LocalInfo.IsCaptured): New property, used to tell whether the
16016         local has been captured.
16017         
16018         * anonymous.cs: Vastly updated to contain the anonymous method
16019         support.
16020
16021         The main classes here are: CaptureContext which tracks any
16022         captured information for a toplevel block and ScopeInfo used to
16023         track the activation frames for various local variables.   
16024
16025         Each toplevel block has an optional capture context associated
16026         with it.  When a method contains an anonymous method both the
16027         toplevel method and the anonymous method will create a capture
16028         context.   When variables or parameters are captured, they are
16029         recorded on the CaptureContext that owns them, for example:
16030
16031         void Demo () {
16032              int a;
16033              MyDelegate d = delegate {
16034                  a = 1;
16035              }
16036         }
16037
16038         Here `a' will be recorded as captured on the toplevel
16039         CapturedContext, the inner captured context will not have anything
16040         (it will only have data if local variables or parameters from it
16041         are captured in a nested anonymous method.
16042
16043         The ScopeInfo is used to track the activation frames for local
16044         variables, for example:
16045
16046         for (int i = 0; i < 10; i++)
16047                 for (int j = 0; j < 10; j++){
16048                    MyDelegate d = delegate {
16049                         call (i, j);
16050                    }
16051                 }
16052
16053         At runtime this captures a single captured variable `i', but it
16054         captures 10 different versions of the variable `j'.  The variable
16055         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16056         recorded on a child.  
16057
16058         The toplevel ScopeInfo will also track information like the `this'
16059         pointer if instance variables were referenced (this is necessary
16060         as the anonymous method lives inside a nested class in the host
16061         type of the method). 
16062
16063         (AnonymousMethod): Expanded to track the Toplevel, implement
16064         `AnonymousMethod.Compatible' to tell whether an anonymous method
16065         can be converted to a target delegate type. 
16066
16067         The routine now also produces the anonymous method content
16068
16069         (AnonymousDelegate): A helper class that derives from
16070         DelegateCreation, this is used to generate the code necessary to
16071         produce the delegate for the anonymous method that was created. 
16072
16073         * assign.cs: API adjustments for new changes in
16074         Convert.ImplicitStandardConversionExists.
16075
16076         * class.cs: Adjustments to cope with the fact that now toplevel
16077         blocks are of type `ToplevelBlock'. 
16078
16079         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16080         insteda of standard blocks.
16081
16082         Flag errors if params arguments are passed to anonymous methods.
16083
16084         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16085         `CurrentAnonymousMethod' which points to the current Anonymous
16086         Method.  The variable points to the AnonymousMethod class that
16087         holds the code being compiled.  It is set in the new EmitContext
16088         created for the anonymous method.
16089
16090         (EmitContext.Phase): Introduce a variable and an enumeration to
16091         assist in enforcing some rules about when and where we are allowed
16092         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16093         only one that enfonces this right now).
16094
16095         (EmitContext.HaveCaptureInfo): new helper method that returns
16096         whether we have a CapturedContext initialized.
16097
16098         (EmitContext.CaptureVariable): New method used to register that a
16099         LocalInfo must be flagged for capturing. 
16100
16101         (EmitContext.CapturedParameter): New method used to register that a
16102         parameters must be flagged for capturing. 
16103         
16104         (EmitContext.CapturedField): New method used to register that a
16105         field must be flagged for capturing. 
16106
16107         (EmitContext.HaveCapturedVariables,
16108         EmitContext.HaveCapturedFields): Return whether there are captured
16109         variables or fields. 
16110
16111         (EmitContext.EmitMethodHostInstance): This is used to emit the
16112         instance for the anonymous method.  The instance might be null
16113         (static methods), this (for anonymous methods that capture nothing
16114         and happen to live side-by-side with the current method body) or a
16115         more complicated expression if the method has a CaptureContext.
16116
16117         (EmitContext.EmitTopBlock): Routine that drives the emission of
16118         code: it will first resolve the top block, then emit any metadata
16119         and then emit the code.  The split is done so that we can extract
16120         any anonymous methods and flag any captured variables/parameters.
16121         
16122         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16123         during this phase, the ILGenerator should not be used as labels
16124         and local variables declared here might not be accessible to any
16125         code that is part of an anonymous method.  
16126
16127         Exceptions to this include the temporary variables that are
16128         created by some statements internally for holding temporary
16129         variables. 
16130         
16131         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16132         metadata for a cb
16133
16134         (EmitContext.TemporaryReturn): This method is typically called
16135         from the Emit phase, and its the only place where we allow the
16136         ReturnLabel to be defined other than the EmitMeta.  The reason is
16137         that otherwise we would have to duplicate a lot of logic in the
16138         Resolve phases of various methods that today is on the Emit
16139         phase. 
16140
16141         (EmitContext.NeedReturnLabel): This no longer creates the label,
16142         as the ILGenerator is not valid during the resolve phase.
16143
16144         (EmitContext.EmitThis): Extended the knowledge in this class to
16145         work in anonymous methods in addition to iterators. 
16146
16147         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16148         code is necessary on the stack to access the instance to a local
16149         variable (the variable will be accessed as a field).
16150
16151         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16152         EmitContext.EmitAddressOfParameter): Routines to support
16153         parameters (not completed at this point). 
16154         
16155         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16156         will also remove the parameters.
16157
16158         * convert.cs (Convert): Define a `ConstantEC' which points to a
16159         null.  This is just to prefity some code that uses
16160         ImplicitStandardConversion code and do not have an EmitContext
16161         handy.
16162
16163         The idea is to flag explicitly that at that point in time, it is
16164         known that the conversion will not trigger the delegate checking
16165         code in implicit conversions (which requires a valid
16166         EmitContext). 
16167
16168         Everywhere: pass new EmitContext parameter since
16169         ImplicitStandardConversionExists now requires it to check for
16170         anonymous method conversions. 
16171
16172         (Convert.ImplicitStandardConversionExists): If the type of an
16173         expression is the anonymous_method_type, and the type is a
16174         delegate, we invoke the AnonymousMethod.Compatible method to check
16175         whether an implicit conversion is possible. 
16176
16177         (Convert.ImplicitConversionStandard): Only do implicit method
16178         group conversions if the language level is not ISO_1.
16179
16180         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16181         MethodInfo for the Invoke method.  used by Delegate and
16182         AnonymousDelegate.
16183
16184         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16185         method conversions if the target type is a delegate.
16186
16187         Removed extra debugging nops.
16188
16189         (LocalVariableReference): Turn the `local_info' into a public
16190         field. 
16191
16192         Add `prepared' field, the same hack used for FieldExprs to cope
16193         with composed assignments, as Local variables do not necessarily
16194         operate purely on the stack as they used to: they can be captured
16195         fields. 
16196
16197         Add `temp' for a temporary result, like fields.
16198
16199         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16200
16201         It now copes with Local variables that are captured and emits the
16202         proper instance variable to load it from a field in the captured
16203         case. 
16204
16205         (ParameterReference.DoResolveBase): During the resolve phase,
16206         capture parameters if we are in an anonymous method.
16207
16208         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16209         anonymous method, use the EmitContext helper routines to emit the
16210         parameter reference.
16211
16212         * iterators.cs: Set RemapToProxy to true/false during the
16213         EmitDispose class.
16214
16215         * parameters.cs (GetParameterByName): New helper method. 
16216
16217         * typemanager.cs (anonymous_method_type) a new type that
16218         represents an anonyous method.  This is always an internal type,
16219         used as a fencepost to test against the anonymous-methodness of an
16220         expression. 
16221         
16222 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16223
16224         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16225         561 report.
16226         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16227
16228 2004-10-18  Martin Baulig  <martin@ximian.com>
16229
16230         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16231         `Type' directly, but call ResolveType() on it.
16232         (Catch.Resolve): Likewise.
16233         (Foreach.Resolve): Likewise.
16234
16235 2004-10-18  Martin Baulig  <martin@ximian.com>
16236
16237         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16238         `Type' directly, but call ResolveType() on it.
16239         (Probe.DoResolve): Likewise.
16240         (ArrayCreation.LookupType): Likewise.
16241         (TypeOf.DoResolve): Likewise.
16242         (SizeOf.DoResolve): Likewise.
16243
16244 2004-10-18  Martin Baulig  <martin@ximian.com>
16245
16246         * expression.cs (Invocation.BetterFunction): Put back
16247         TypeManager.TypeToCoreType().
16248
16249 2004-10-18  Raja R Harinath  <rharinath@novell.com>
16250
16251         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
16252         the ResolveType.
16253
16254 2004-10-18  Martin Baulig  <martin@ximian.com>
16255
16256         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
16257         `Type' directly, but call ResolveType() on it.
16258
16259 2004-10-18  Martin Baulig  <martin@ximian.com>
16260
16261         * class.cs (FieldMember.Define): Don't access the TypeExpr's
16262         `Type' directly, but call ResolveType() on it.
16263         (MemberBase.DoDefine): Likewise.
16264
16265         * expression.cs (New.DoResolve): Don't access the TypeExpr's
16266         `Type' directly, but call ResolveType() on it.
16267         (ComposedCast.DoResolveAsTypeStep): Likewise.
16268
16269         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
16270         `Type' directly, but call ResolveType() on it.
16271
16272 2004-10-17  John Luke  <john.luke@gmail.com>
16273
16274         * class.cs (Operator.GetSignatureForError): use CSharpName
16275
16276         * parameter.cs (Parameter.GetSignatureForError): Returns
16277         correct name even if was not defined.
16278
16279 2004-10-13  Raja R Harinath  <rharinath@novell.com>
16280
16281         Fix #65816.
16282         * class.cs (TypeContainer.EmitContext): New property.
16283         (DefineNestedTypes): Create an emitcontext for each part.
16284         (MethodCore.DoDefineParameters): Use container's emitcontext.
16285         Pass type array to InternalParameters.
16286         (MemberBase.DoDefine): Use container's emitcontext.
16287         (FieldMember.Define): Likewise.
16288         (Event.Define): Likewise.
16289         (SetMethod.GetParameterInfo): Change argument to EmitContext.
16290         Pass type array to InternalParameters.
16291         (SetIndexerMethod.GetParameterInfo): Likewise.
16292         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
16293         * delegate.cs (Define): Pass emitcontext to
16294         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
16295         array to InternalParameters.
16296         * expression.cs (ParameterReference.DoResolveBase): Pass
16297         emitcontext to GetParameterInfo.
16298         (ComposedCast.DoResolveAsTypeStep): Remove check on
16299         ec.ResolvingTypeTree.
16300         * parameter.cs (Parameter.Resolve): Change argument to
16301         EmitContext.  Use ResolveAsTypeTerminal.
16302         (Parameter.GetSignature): Change argument to EmitContext.
16303         (Parameters.ComputeSignature): Likewise.
16304         (Parameters.ComputeParameterTypes): Likewise.
16305         (Parameters.GetParameterInfo): Likewise.
16306         (Parameters.ComputeAndDefineParameterTypes): Likewise.
16307         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
16308         * support.cs (InternalParameters..ctor): Remove variant that takes
16309         a DeclSpace.
16310         * typemanager.cs (system_intptr_expr): New.
16311         (InitExpressionTypes): Initialize it.
16312
16313 2004-10-12  Chris Toshok  <toshok@ximian.com>
16314
16315         * cs-parser.jay: fix location for try_statement and catch_clause.
16316
16317 2004-10-11  Martin Baulig  <martin@ximian.com>
16318
16319         * report.cs: Don't make --fatal abort on warnings, we have
16320         -warnaserror for that.
16321
16322 2004-10-07  Raja R Harinath  <rharinath@novell.com>
16323
16324         More DeclSpace.ResolveType avoidance.
16325         * decl.cs (MemberCore.InUnsafe): New property.
16326         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
16327         with newly created EmitContext.
16328         (FieldMember.Define): Likewise.
16329         * delegate.cs (Delegate.Define): Likewise.
16330         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
16331         only if normal name-lookup fails.
16332         (TypeExpr.DoResolve): Enable error-checking.
16333         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
16334         (SizeOf.DoResolve): Likewise.
16335         (ComposedCast.DoResolveAsTypeStep): Likewise.
16336         (StackAlloc.DoResolve): Likewise.
16337         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
16338         (Block.Unsafe): New property.
16339         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
16340         (Unsafe): Set 'unsafe' flag of contained block.
16341         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
16342         (Fixed.Resolve): Likewise.
16343         (Catch.Resolve): Likewise.
16344         (Using.ResolveLocalVariableDecls): Likewise.
16345         (Foreach.Resolve): Likewise.
16346
16347 2004-10-05  John Luke <john.luke@gmail.com>
16348
16349         * cs-parser.jay: add location to error CS0175
16350
16351 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
16352
16353         * ecore.cs (Expression.Constantity): Add support for turning null
16354         into a constant.
16355
16356         * const.cs (Const.Define): Allow constants to be reference types
16357         as long as the value is Null.
16358
16359 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
16360
16361         * namespace.cs (NamespaceEntry.Using): No matter which warning
16362         level is set, check if this namespace name has already been added.
16363
16364 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
16365
16366         * expression.cs: reftype [!=]= null should always use br[true,false].
16367         # 67410
16368
16369 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
16370
16371         Fix #67108
16372         * attribute.cs: Enum conversion moved to 
16373         GetAttributeArgumentExpression to be applied to the all
16374         expressions.
16375
16376 2004-10-01  Raja R Harinath  <rharinath@novell.com>
16377
16378         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
16379         * class.c (TypeContainer.DefineType): Flag error if
16380         base types aren't accessible due to access permissions.
16381         * decl.cs (DeclSpace.ResolveType): Move logic to
16382         Expression.ResolveAsTypeTerminal.
16383         (DeclSpace.ResolveTypeExpr): Thin layer over
16384         Expression.ResolveAsTypeTerminal.
16385         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
16386         Refactor code into NestedAccess.  Use it.
16387         (DeclSpace.NestedAccess): New.
16388         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
16389         argument to silence errors.  Check access permissions.
16390         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
16391         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
16392         (Cast.DoResolve): Likewise.
16393         (New.DoResolve): Likewise.
16394         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
16395         (TypeOf.DoResolve): Likewise.
16396
16397         * expression.cs (Invocation.BetterConversion): Return the Type of
16398         the better conversion.  Implement section 14.4.2.3 more faithfully.
16399         (Invocation.BetterFunction): Make boolean.  Make correspondence to
16400         section 14.4.2.2 explicit.
16401         (Invocation.OverloadResolve): Update.
16402         (Invocation): Remove is_base field.
16403         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
16404         (Invocation.Emit): Likewise.
16405
16406 2004-09-27  Raja R Harinath  <rharinath@novell.com>
16407
16408         * README: Update to changes.
16409
16410 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
16411
16412         * cs-parser.jay: Reverted 642 warning fix.
16413
16414 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16415
16416         Fix bug #66615
16417         * decl.cs (FindMemberWithSameName): Indexer can have more than
16418         1 argument.
16419
16420 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16421
16422         * expression.cs (LocalVariableReference.DoResolveLValue):
16423         Do not report warning 219 for out values.
16424         (EmptyExpression.Null): New member to avoid extra allocations.
16425
16426 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16427
16428         * cs-parser.jay: Fix wrong warning 642 report.
16429
16430         * cs-tokenizer.cs (CheckNextToken): New helper;
16431         Inspect next character if is same as expected.
16432
16433 2004-09-23  Martin Baulig  <martin@ximian.com>
16434
16435         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
16436         (Convert.ImplicitReferenceConversionExists): Likewise.
16437
16438 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
16439
16440         * class.cs (Operator.Define): Add error 448 and 559 report.
16441
16442 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16443
16444         * class.cs (MemberBase.IsTypePermitted): New protected
16445         method for checking error CS0610.
16446
16447 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16448
16449         * class.cs (TypeContainer.HasExplicitLayout): New property
16450         Returns whether container has StructLayout attribute set Explicit.
16451         (FieldMember): New abstract class for consts and fields.
16452         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
16453         (Field): Reuse FieldMember.
16454
16455         * const.cs (Const): Reuse FieldMember.
16456
16457         * rootcontext.cs: EmitConstants call moved to class.
16458
16459 2004-09-22  Martin Baulig  <martin@ximian.com>
16460
16461         Thanks to Peter Sestoft for this bug report.
16462
16463         * expression.cs (Conditional): If both the `trueExpr' and the
16464         `falseExpr' is a NullLiteral, return a NullLiteral.
16465
16466 2004-09-22  Martin Baulig  <martin@ximian.com>
16467
16468         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
16469         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
16470         for the "get_Current" call.
16471
16472 2004-09-22  Martin Baulig  <martin@ximian.com>
16473
16474         Marek and me just fixed one of our oldest bugs: #28562 :-)
16475
16476         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
16477
16478         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
16479         we're an EnumConstant, just return that.
16480         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
16481         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
16482         to get the value which'll actually be written into the attribute.
16483         However, we have to use GetValue() to access the attribute's value
16484         in the compiler.        
16485
16486 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
16487
16488         * constant.cs (Constant.IsNegative): New abstract property
16489         IsNegative.
16490
16491         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
16492         (StackAlloc.DoResolve): Reused IsNegative.
16493
16494 2004-09-21  Martin Baulig  <martin@ximian.com>
16495
16496         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
16497         if we're used in an iterator, we may be called from different
16498         methods.
16499
16500         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
16501         we actually have an exception block.
16502
16503 2004-09-20  John Luke <jluke@cfl.rr.com>
16504
16505         * class.cs, cs-parser.jay: Improve the error report for 1520:
16506         report the actual line where the error happens, not where the
16507         class was declared.
16508
16509         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
16510         Pass location information that was available elsewhere.
16511
16512 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
16513
16514         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
16515         runtime to delay sign assemblies.
16516
16517 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16518
16519         * cs-parser.jay: Do not report the stack trace, this is barely
16520         used nowadays.
16521
16522 2004-08-22  John Luke  <john.luke@gmail.com>
16523  
16524         * driver.cs : check that a resource id is not already used
16525         before adding it, report CS1508 if it is, bug #63637
16526
16527 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
16528
16529         * ecore.cs: Removed dead code.
16530
16531 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
16532
16533         * class.cs: Do not report warning CS0067 on the interfaces.
16534
16535 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16536
16537         * cs-parser.jay: Add error 504 report.
16538
16539 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16540
16541         * rootcontext.cs: WarningLevel is 4 by default now.
16542
16543         * statement.cs (Fixed.Resolve): Do not null
16544         VariableInfo.
16545
16546 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
16547
16548         Fixed bug #55780
16549         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
16550         deep search when property is not virtual.
16551         (PropertyExpr.ResolveAccessors): Make one call for both
16552         accessors.
16553
16554 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16555
16556         Fixed bug #65766
16557         * statement.cs: Error 152 report constains also location.
16558
16559 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16560
16561         Fixed bug #65766
16562         * const.cs: Explicitly set constant as static.
16563
16564 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16565
16566         Fixed bug #64226
16567         * cs-parser.jay: Add error 1017 report.
16568
16569 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
16570
16571         Fixed bug #59980, #64224
16572         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
16573
16574         * typemanager.cs (IsSpecialMethod): Simplified
16575
16576 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16577
16578         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
16579         condition with better params.
16580
16581 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16582
16583         Fixed bug #65238
16584         * attribute.cs (Resolve): Property has to have both
16585         accessors.
16586
16587 2004-09-14  Martin Baulig  <martin@ximian.com>
16588
16589         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
16590
16591 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
16592
16593         Fixed bug #61902
16594         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
16595         called and is obsolete then this member suppress message
16596         when call is inside next [Obsolete] method or type.
16597
16598         * expression.cs: Use TestObsoleteMethodUsage member.
16599
16600 2004-09-14  Martin Baulig  <martin@ximian.com>
16601
16602         * cs-parser.jay: Sync a bit with the GMCS version.
16603
16604 2004-09-14  Martin Baulig  <martin@ximian.com>
16605
16606         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
16607         (CSharpParser.yacc_verbose_flag): New public field.
16608
16609         * genericparser.cs: Removed.
16610
16611 2004-09-14  Raja R Harinath  <rharinath@novell.com>
16612
16613         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
16614
16615 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
16616
16617         * class.cs (MethodCore.CheckBase): Fix bug #65757.
16618
16619 2004-09-10  Martin Baulig  <martin@ximian.com>
16620
16621         Backported my MemberName changes from GMCS into MCS.
16622
16623         - we are now using a special `MemberName' class instead of using
16624         strings; in GMCS, the `MemberName' also contains the type
16625         arguments.
16626
16627         - changed the grammar rules a bit:
16628           * the old `member_name' is now a `namespace_or_type_name':
16629             The rule is that we use `namespace_or_type_name' everywhere
16630             where we expect either a "member name" (GetEnumerator) or a
16631             "member name" with an explicit interface name
16632             (IEnumerable.GetEnumerator).
16633             In GMCS, the explicit interface name may include type arguments
16634             (IEnumerable<T>.GetEnumerator).
16635           * we use `member_name' instead of just `IDENTIFIER' for
16636             "member names":
16637             The rule is that we use `member_name' wherever a member may
16638             have type parameters in GMCS.       
16639
16640         * decl.cs (MemberName): New public class.
16641         (MemberCore.MemberName): New public readonly field.
16642         (MemberCore.ctor): Take a `MemberName' argument, not a string.
16643         (DeclSpace): Likewise.
16644
16645         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
16646         * enum.cs (Enum.ctor): Likewise.
16647
16648         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
16649         MemberName.     
16650         (AliasEntry.ctor): Take a MemberName, not an Expression.
16651         (AliasEntry.UsingAlias): Likewise.
16652
16653         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
16654         (IMethodData.MemberName): Changed type from string to MemberName.
16655         (MemberBase.ExplicitInterfaceName): Likewise.
16656         (AbstractPropertyEventMethod.SetupName): Make this private.
16657         (AbstractPropertyEventMethod.ctor): Added `string prefix'
16658         argument; compute the member name here.
16659         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
16660         on the `member.MemberName' and the `prefix'.
16661
16662         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
16663         not `type_name'.
16664         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
16665         thus, we get a `MemberName' instead of a `string'.  These
16666         declarations may have type parameters in GMCS.
16667         (interface_method_declaration, delegate_declaration): Likewise.
16668         (class_declaration, interface_declaration): Likewise.
16669         (method_header): Use `namespace_or_type_name' instead of
16670         `member_name'.  We may be an explicit interface implementation.
16671         (property_declaration, event_declaration): Likewise.
16672         (member_name): This is now just an `IDENTIFIER', not a
16673         `namespace_or_type_name'.
16674         (type_name, interface_type): Removed.
16675         (namespace_or_type_name): Return a MemberName, not an Expression.
16676         (primary_expression): Use `member_name' instead of `IDENTIFIER';
16677         call GetTypeExpression() on the MemberName to get an expression.
16678         (IndexerDeclaration.interface_type): Changed type from string to
16679         MemberName.
16680         (MakeName): Operate on MemberName's instead of string's.
16681
16682 2004-09-13  Raja R Harinath  <rharinath@novell.com>
16683
16684         Fix bug #55770.
16685         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
16686         (NamespaceEntry.Lookup): Add new argument to flag if we want the
16687         lookup to avoid symbols introduced by 'using'.
16688         * rootcontext.cs (NamespaceLookup): Update.
16689
16690 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16691
16692         * class.cs (TypeContainer.DoDefineMembers): Do not call
16693         DefineDefaultConstructor for static classes.
16694
16695 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
16696
16697         * attribute.cs (Attribute.Resolve): Add error 653 report.
16698
16699         * class.cs (Class.ApplyAttributeBuilder): Add error 641
16700         report.
16701         (Method.ApplyAttributeBuilder): Add error 685 report.
16702         (Operator.Define): Add error 564 report.
16703
16704         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
16705
16706         * expression.cs (Invocation.DoResolve): Add error
16707         245 and 250 report.
16708
16709         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
16710         error 674 report.
16711
16712 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16713
16714         * class.cs (ConstructorInitializer.Resolve):
16715         Wrong error number (515->516).
16716
16717 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16718
16719         * class.cs (Indexer.Define): Add error 631 report.
16720
16721 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16722
16723         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
16724
16725 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
16726
16727         * expression.cs (Probe.DoResolve): Add error CS0241 report.
16728
16729 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
16730
16731         * cs-parser.jay: Added error CS0241 report.
16732
16733 2004-09-10  Raja R Harinath  <rharinath@novell.com>
16734
16735         * cs-parser.jay (fixed_statement): Introduce a scope for the
16736         declaration in the 'fixed' statement.
16737
16738 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16739
16740         * cs-parser.jay: Added CS0230 error report.
16741
16742 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16743
16744         * cs-parser.jay: Added errors CS0231 and CS0257 report.
16745
16746 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16747
16748         * expression.cs (Argument.Resolve): Added error CS0192 and
16749         CS0199 report.
16750
16751 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
16752
16753         C# 2.0 #pragma warning feature
16754
16755         * cs-tokenizer.cs (PreProcessPragma): New method; 
16756         Handles #pragma directive.
16757
16758         * report.cs (WarningRegions): New class; Support
16759         class for #pragma warning directive. It tests whether
16760         warning is enabled for a given line.
16761
16762 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
16763
16764         * const.cs: Add more descriptive error report, tahnks to
16765         Sebastien. 
16766
16767 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
16768
16769         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
16770
16771 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
16772
16773         * expression.cs: Apply patch from Ben: Remove dead code from
16774         ArrayCreation, and remove the TurnintoConstant call in const.cs,
16775         as that code just threw an exception anwyays.
16776
16777         * const.cs: Remove the call to the turnintoconstant, for details
16778         see bug: #63144
16779         
16780         * literal.cs: The type of the null-literal is the null type;  So
16781         we use a placeholder type (literal.cs:System.Null, defined here)
16782         for it.
16783
16784         * expression.cs (Conditional.DoResolve): Remove some old code that
16785         is no longer needed, conversions have been fixed.
16786
16787         (ArrayCreationExpression.DoResolve): Return false if we fail to
16788         resolve the inner expression.
16789
16790 2004-09-07  Raja R Harinath  <rharinath@novell.com>
16791
16792         Fix test-290.cs.
16793         * cs-parser.jay (delegate_declaration): Record a delegate
16794         declaration as a type declaration.
16795         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
16796
16797 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
16798
16799         * parameter.cs: Do not crash if the type can not be resolved. 
16800
16801         * expression.cs: Report errors with unsafe pointers, fixes #64896
16802
16803 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
16804
16805         * expression.cs: Pointer arith always needs to do a conv.i
16806         if the operand is a long. fix 65320
16807
16808 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16809
16810         Fixed cs0619-37.cs, cs0619-38.cs
16811
16812         * enum.cs (GetObsoleteAttribute): Removed.
16813
16814         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
16815         on Enum member is double staged. The first is tested member
16816         and then enum.
16817
16818 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
16819
16820         Fixed #56986, #63631, #65231
16821
16822         * class.cs: (TypeContainer.AddToMemberContainer): New method,
16823         adds member to name container.
16824         (TypeContainer.AddToTypeContainer): New method, adds type to
16825         name container.
16826         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
16827         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
16828         AddOperator): Simplified by reusing AddToMemberContainer.
16829         (TypeContainer.UserDefinedStaticConstructor): Changed to property
16830         instead of field.
16831         (Method.CheckForDuplications): Fixed implementation to test all
16832         possibilities.
16833         (MemberBase): Detection whether member is explicit interface
16834         implementation is now in constructor.
16835         (MemberBase.UpdateMemberName): Handles IndexerName.
16836         (Accessor): Changed to keep also location information.
16837         (AbstractPropertyEventMethod): Is derived from MemberCore.
16838         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
16839         will be emited or not.
16840         (PropertyBase.AreAccessorsDuplicateImplementation):
16841         Tests whether accessors are not in collision with some method.
16842         (Operator): Is derived from MethodCore to simplify common
16843         operations.
16844
16845         * decl.cs (Flags.TestMethodDuplication): Test for duplication
16846         must be performed.
16847         (DeclSpace.AddToContainer): Adds the member to defined_names
16848         table. It tests for duplications and enclosing name conflicts.
16849
16850         * enum.cs (EnumMember): Clean up to reuse the base structures
16851
16852 2004-09-03  Martin Baulig  <martin@ximian.com>
16853
16854         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
16855         into TypeContainer, to make partial classes work again.
16856
16857 2004-09-03  Martin Baulig  <martin@ximian.com>
16858
16859         * rootcontext.cs (RootContext.V2): Removed.
16860
16861 2004-03-23  Martin Baulig  <martin@ximian.com>
16862
16863         * expression.cs (Invocation.OverloadResolve): Added `bool
16864         may_fail' argument and use it instead of the Location.IsNull() hack.
16865
16866 2004-09-03  Martin Baulig  <martin@ximian.com>
16867
16868         Merged latest changes into gmcs.  Please keep this comment in
16869         here, it makes it easier for me to see what changed in MCS since
16870         the last time I merged.
16871
16872 2004-09-03  Raja R Harinath  <rharinath@novell.com>
16873
16874         Fix #61128.
16875         * expression.cs (BetterConversion): Don't allow either conversion 
16876         to be null.  Remove redundant implicit conversion test when 'q ==
16877         null' -- when this function is invoked, we already know that the
16878         implicit conversion exists.
16879         (BetterFunction): Assume that 'best' is non-null.  Remove
16880         redundant reimplementation of IsApplicable when 'best' is null.
16881         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
16882         number of arguments.
16883         (IsAncestralType): Extract from OverloadResolve.
16884         (OverloadResolve): Make robust to the MethodGroupExpr being
16885         unsorted.  Implement all the logic of Section 14.5.5.1, and
16886         support overloading of methods from multiple applicable types.
16887         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
16888
16889         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
16890         (RealError, Warning): Append type of report to related symbol.
16891
16892 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
16893
16894         * enum.cs: Fixed CLS-Compliance checks for enum members.
16895         Error tests cs3008-8.cs, cs3014-8.cs
16896
16897 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16898
16899         Fixed bug #62342, #63102
16900         * class.cs: ImplementIndexer uses member.IsExplicitImpl
16901         like ImplementMethod.
16902
16903 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
16904
16905         * attribute.cs (Attribute.GetAttributeArgumentExpression):
16906         Fixed bug #65170.
16907
16908 2004-09-02  Martin Baulig  <martin@ximian.com>
16909
16910         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
16911         TypeManager.GetArgumentTypes() rather than calling GetParameters()
16912         on the MethodBase.
16913
16914 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
16915
16916         C# 2.0 Static classes implemented
16917
16918         * class.cs (TypeContainer): instance_constructors,
16919         initialized_fields, initialized_static_fields,
16920         default_constructor, base_inteface_types are protected to be
16921         accessible from StaticClass.
16922         (TypeContainer.DefineDefaultConstructor): New virtual method
16923         for custom default constructor generating
16924         (StaticClass): New class to handle "Static classes" feature.
16925
16926         * cs-parser.jay: Handle static keyword on class like instance
16927         of StaticClass.
16928
16929         * driver.cs: Added "/langversion" command line switch with two
16930         options (iso-1, default).
16931
16932 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
16933
16934         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
16935
16936 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
16937
16938         * delegate.cs: Style.
16939
16940 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
16941
16942         * delegate.cs: Add seperate instance expr field for miguel.
16943
16944 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16945
16946         * PointerArithmetic (Resolve): make sure we are not doing
16947         pointer arith on void*. Also, make sure we are resolved
16948         by not setting eclass until resolve.
16949
16950         All callers: Make sure that PointerArithmetic gets resolved.
16951
16952 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
16953
16954         * ArrayCreation (LookupType): If the type does not resolve 
16955         to an array, give an error.
16956
16957 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
16958
16959         * statement.cs (Try.Resolve): Fixed bug #64222
16960
16961 2004-08-27  Martin Baulig  <martin@ximian.com>
16962
16963         * class.cs
16964         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
16965         crash here.     
16966
16967 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16968
16969         * ecore.cs (Constantify): Get underlying type via
16970         System.Enum.GetUnderlyingType to avoid StackOverflow on the
16971         Windows in special cases.
16972
16973 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
16974
16975         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
16976         for obtaining also private methods.
16977         (GetRemoveMethod): Used GetRemoveMethod (true)
16978         for obtaining also private methods.
16979
16980 2004-08-24  Martin Baulig  <martin@ximian.com>
16981
16982         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
16983         MethodAttributes.HideBySig for operators.
16984
16985 2004-08-23  Martin Baulig  <martin@ximian.com>
16986
16987         Back to the old error reporting system :-)
16988
16989         * report.cs (Message): Removed.
16990         (Report.MessageData, ErrorData, WarningData): Removed.
16991         (Report.Error, Warning): Back to the old system.
16992
16993 2004-08-23  Martin Baulig  <martin@ximian.com>
16994
16995         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
16996
16997         * class.cs (TypeContainer.ParentContainer): New public virtual
16998         method; replaces the explicit interface implementation.
16999         (ClassPart.ParentContainer): Override.
17000
17001 2004-08-23  Martin Baulig  <martin@ximian.com>
17002
17003         * statement.cs (Switch): Added support for constant switches; see
17004         #59428 or test-285.cs.
17005
17006 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17007
17008         Fixed bug #62740.
17009         * statement.cs (GetEnumeratorFilter): Removed useless
17010         logic because C# specs is strict. GetEnumerator must be
17011         public.
17012
17013 2004-08-22  Martin Baulig  <martin@ximian.com>
17014
17015         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17016         a switch and may break, reset the barrier.  Fixes #59867.
17017
17018 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17019
17020         CLS-Compliance speed up (~5% for corlib)
17021
17022         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17023         New method. Tests container for CLS-Compliant names
17024
17025         * class.cs (TypeContainer.VerifyClsName): New method.
17026         Checks whether container name is CLS Compliant.
17027         (Constructor): Implements IMethodData.
17028
17029         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17030         low-case table for CLS Compliance test.
17031         (MemberCache.VerifyClsParameterConflict): New method.
17032         Checks method parameters for CS3006 error.
17033
17034         * enum.cs (EnumMember): Is derived from MemberCore.
17035         (Enum.VerifyClsName): Optimized for better performance.
17036
17037 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17038
17039         * report.cs: Renamed Error_T to Error and changed all
17040         references.
17041
17042 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17043
17044         * class.cs (TypeContainer.IndexerArrayList): New inner class
17045         container for indexers.
17046         (TypeContainer.DefaultIndexerName): New constant for default
17047         indexer name. Replaced all "Item" with this constant.
17048         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17049
17050         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17051         DefaultMemberAttribute constructor.
17052
17053 2004-08-05  Martin Baulig  <martin@ximian.com>
17054
17055         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17056         Fix bug #59429.
17057
17058 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17059
17060         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17061         multi platforms problem.
17062
17063         * compiler.csproj: Included shared files.
17064
17065 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17066
17067         Fix bug 60333, 55971 in the more general way
17068         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17069         Added arg_type argument for constant conversion.
17070         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17071
17072 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17073
17074         Fix bug #59760
17075         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17076         OperatorArrayList, MethodCoreArrayList for typecontainer
17077         containers. Changed class member types to these new types.
17078         (MethodArrayList.DefineMembers): Added test for CS0659.
17079
17080 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17081
17082         * cfold.cs: Synchronize the folding with the code in expression.cs
17083         Binary.DoNumericPromotions for uint operands.
17084
17085         * attribute.cs: Revert patch from Raja, it introduced a regression
17086         while building Blam-1.2.1 (hard to isolate a test case).
17087
17088 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17089
17090         Fix for #55382
17091         * class.cs:
17092         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17093         name collision.
17094         (MethodCore.parent_method): New member. The method we're overriding
17095         if this is an override method.
17096         (MethodCore.CheckBase): Moved from Method class and made common.
17097         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17098         private.
17099         (MethodCore.CheckForDuplications): New abstract method. For custom
17100         member duplication search in a container
17101         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17102         method and its return type.
17103         (Event.conflict_symbol): New member. Symbol with same name in the
17104         parent class.
17105
17106         * decl.cs:
17107         (MemberCache.FindMemberWithSameName): New method. The method
17108         is looking for conflict with inherited symbols.
17109
17110 2004-08-04  Martin Baulig  <martin@ximian.com>
17111
17112         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17113
17114         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17115
17116 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17117
17118         * report.cs (Message): New enum for better error, warning reference in
17119         the code.
17120         (MessageData): New inner abstract class. It generally handles printing of
17121         error and warning messages.
17122         Removed unused Error, Warning, Message methods.
17123
17124 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17125
17126         Fix for cs0592-8.cs test
17127         * attribute.cs
17128         (Attributable.ValidAttributeTargets): Made public.
17129         (Attribute.ExplicitTarget): New member for explicit target value.
17130         (Attribute.CheckTargets): Now we translate explicit attribute
17131         target to Target here.
17132
17133 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17134
17135         * ecore.cs (MethodGroupExpr): new IsBase property.
17136
17137         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17138
17139         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17140         rather than an instance expr.
17141
17142         (DelegateCreation.Emit): Use the method group rather than
17143         the instance expression. Also, if you have base.Foo as the
17144         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17145
17146         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17147
17148         (NewDelegate.DoResolve): Only check for the existance of Invoke
17149         if the method is going to be needed. Use MethodGroupExpr.
17150
17151         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17152
17153         * expression.cs: For pointer arith., make sure to use
17154         the size of the type, not the size of the pointer to
17155         the type.
17156
17157 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17158
17159         Fix for #60722
17160         * class.cs (Class): Added error CS0502 test.
17161
17162 2004-08-03  John Luke  <jluke@cfl.rr.com>
17163             Raja R Harinath  <rharinath@novell.com>
17164
17165         Fix for #60997.
17166         * attribute.cs (Attribute.complained_before): New flag.
17167         (Attribute.ResolveType, Attribute.Resolve),
17168         (Attribute.DefinePInvokeMethod): Set it.
17169         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17170         
17171 2004-08-03  Martin Baulig  <martin@ximian.com>
17172
17173         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17174         use a user-defined operator; we still need to do numeric
17175         promotions in case one argument is a builtin type and the other
17176         one has an implicit conversion to that type.  Fixes #62322.
17177
17178 2004-08-02  Martin Baulig  <martin@ximian.com>
17179
17180         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17181         (LocalInfo.IsThis): New public property.
17182         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17183
17184 2004-08-01  Martin Baulig  <martin@ximian.com>
17185
17186         * class.cs (TypeContainer.GetClassBases): Don't set the default
17187         here since we may get called from GetPartialBases().
17188         (TypeContainer.DefineType): If GetClassBases() didn't return a
17189         parent, use the default one.
17190
17191 2004-07-30  Duncan Mak  <duncan@ximian.com>
17192
17193         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17194
17195 2004-07-30  Martin Baulig  <martin@ximian.com>
17196
17197         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17198
17199         * class.cs (SourceMethod): New public class, derive from the
17200         symbol writer's ISourceMethod.
17201         (Method): Use the new symbol writer API.
17202
17203         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17204         as argument and use the new symbol writer.
17205
17206         * location.cs
17207         (SourceFile): Implement the symbol writer's ISourceFile.
17208         (Location.SymbolDocument): Removed.
17209         (Location.SourceFile): New public property.
17210
17211         * symbolwriter.cs: Use the new symbol writer API.
17212
17213 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17214
17215         * Makefile (install-local): Remove.  Functionality moved to
17216         executable.make.
17217
17218 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17219
17220         * Makefile: Install mcs.exe.config file together with mcs.exe.
17221         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17222         correct runtime version.
17223         
17224 2004-07-25  Martin Baulig  <martin@ximian.com>
17225
17226         * class.cs
17227         (TypeContainer.RegisterOrder): Removed, this was unused.
17228         (TypeContainer, interface_order): Removed.
17229         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17230         TypeContainer as argument since we can also be called with a
17231         `PartialContainer' for a partial class/struct/interface.
17232         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17233         of checking whether we're an `Interface' - we could be a
17234         `PartialContainer'.
17235         (PartialContainer.Register): Override; call
17236         AddClass()/AddStruct()/AddInterface() on our parent.
17237
17238         * cs-parser.jay (interface_member_declaration): Add things to the
17239         `current_container', not the `current_class'.
17240
17241         * rootcontext.cs (RegisterOrder): The overloaded version which
17242         takes an `Interface' was unused, removed.
17243
17244         * typemanager.cs (TypeManager.LookupInterface): Return a
17245         `TypeContainer', not an `Interface'.
17246         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
17247         contain a `PartialContainer' for an interface, so check it's
17248         `Kind' to figure out what it is.
17249
17250 2004-07-25  Martin Baulig  <martin@ximian.com>
17251
17252         * class.cs (Class.DefaultTypeAttributes): New public constant.
17253         (Struct.DefaultTypeAttributes): Likewise.
17254         (Interface.DefaultTypeAttributes): Likewise.
17255         (PartialContainer.TypeAttr): Override this and add the
17256         DefaultTypeAttributes.
17257
17258 2004-07-25  Martin Baulig  <martin@ximian.com>
17259
17260         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
17261         we can just use the `Parent' field instead.
17262
17263 2004-07-25  Martin Baulig  <martin@ximian.com>
17264
17265         * class.cs (TypeContainer.Emit): Renamed to EmitType().
17266
17267 2004-07-25  Martin Baulig  <martin@ximian.com>
17268
17269         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
17270         our parts before defining any methods.
17271         (TypeContainer.VerifyImplements): Make this virtual.
17272         (ClassPart.VerifyImplements): Override and call VerifyImplements()
17273         on our PartialContainer.
17274
17275 2004-07-25  Martin Baulig  <martin@ximian.com>
17276
17277         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
17278
17279         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
17280         argument, we can just use the `Parent' field instead.
17281
17282         * class.cs
17283         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
17284         (MemberBase.DoDefine): Likewise.
17285
17286 2004-07-24  Martin Baulig  <martin@ximian.com>
17287
17288         * decl.cs (MemberCore.Parent): New public field.
17289         (DeclSpace.Parent): Moved to MemberCore.
17290
17291         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
17292         (MemberBase.ctor): Added TypeContainer argument, pass it to our
17293         parent's .ctor.
17294         (FieldBase, Field, Operator): Likewise.
17295         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
17296         (EventField, Event): Likewise.
17297
17298 2004-07-23  Martin Baulig  <martin@ximian.com>
17299
17300         * class.cs (PartialContainer): New public class.
17301         (ClassPart): New public class.
17302         (TypeContainer): Added support for partial classes.
17303         (TypeContainer.GetClassBases): Splitted some of the functionality
17304         out into GetNormalBases() and GetPartialBases().
17305
17306         * cs-tokenizer.cs (Token.PARTIAL): New token.
17307         (Tokenizer.consume_identifier): Added some hacks to recognize
17308         `partial', but only if it's immediately followed by `class',
17309         `struct' or `interface'.
17310
17311         * cs-parser.jay: Added support for partial clases.
17312
17313 2004-07-23  Martin Baulig  <martin@ximian.com>
17314
17315         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
17316         a `DeclSpace' and also made it readonly.
17317         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
17318         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
17319         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
17320
17321         * cs-parser.jay: Pass the `current_class', not the
17322         `current_container' (at the moment, this is still the same thing)
17323         to a new Method, Property, Event, Indexer or Constructor.
17324
17325 2004-07-23  Martin Baulig  <martin@ximian.com>
17326
17327         * cs-parser.jay (CSharpParser): Added a new `current_class' field
17328         and removed the `current_interface' one.
17329         (struct_declaration, class_declaration, interface_declaration):
17330         Set `current_class' to the newly created class/struct/interface;
17331         set their `Bases' and call Register() before parsing their body.
17332
17333 2004-07-23  Martin Baulig  <martin@ximian.com>
17334
17335         * class.cs (Kind): New public enum.
17336         (TypeContainer): Made this class abstract.
17337         (TypeContainer.Kind): New public readonly field.
17338         (TypeContainer.CheckDef): New public method; moved here from
17339         cs-parser.jay.
17340         (TypeContainer.Register): New public abstract method.
17341         (TypeContainer.GetPendingImplementations): New public abstract
17342         method.
17343         (TypeContainer.GetClassBases): Removed the `is_class' and
17344         `is_iface' parameters.
17345         (TypeContainer.DefineNestedTypes): Formerly known as
17346         DoDefineType().
17347         (ClassOrStruct): Made this class abstract.
17348
17349         * tree.cs (RootTypes): New public type. 
17350
17351 2004-07-20  Martin Baulig  <martin@ximian.com>
17352
17353         * tree.cs (Tree.RecordNamespace): Removed.
17354         (Tree.Namespaces): Removed.
17355
17356         * rootcontext.cs (RootContext.IsNamespace): Removed.
17357
17358         * cs-parser.jay (namespace_declaration): Just create a new
17359         NamespaceEntry here.
17360
17361 2004-07-20  Martin Baulig  <martin@ximian.com>
17362
17363         * statement.cs (ExceptionStatement): New abstract class.  This is
17364         now used as a base class for everyone who's using `finally'.
17365         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
17366         our local variables before using them.
17367
17368         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
17369         virtual method.  This is used by Yield.Resolve() to "steal" an
17370         outer block's `finally' clauses.
17371         (FlowBranchingException): The .ctor now takes an ExceptionStatement
17372         argument.
17373
17374         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
17375         version which takes an ExceptionStatement.  This version must be
17376         used to create exception branchings.
17377
17378         * iterator.cs
17379         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
17380         (Iterator.EmitMoveNext): Added exception support; protect the
17381         block with a `fault' clause, properly handle 'finally' clauses.
17382         (Iterator.EmitDispose): Run all the `finally' clauses here.
17383
17384 2004-07-20  Martin Baulig  <martin@ximian.com>
17385
17386         * iterator.cs: This is the first of a set of changes in the
17387         iterator code.  Match the spec more closely: if we're an
17388         IEnumerable, then GetEnumerator() must be called.  The first time
17389         GetEnumerator() is called, it returns the current instance; all
17390         subsequent invocations (if any) must create a copy.
17391
17392 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
17393
17394         * expression.cs: Resolve the constant expression before returning
17395         it. 
17396
17397 2004-07-19  Martin Baulig  <martin@ximian.com>
17398
17399         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
17400         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
17401         the return type of the new EmitContext.
17402
17403 2004-07-18  Martin Baulig  <martin@ximian.com>
17404
17405         * class.cs (Property.Define): Fix iterators.
17406
17407         * iterators.cs (Iterator.Define): Moved the
17408         `container.AddInterator (this)' call here from the .ctor; only do
17409         it if we resolved successfully.
17410
17411 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
17412
17413         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
17414         `true' for preprocessing directives that we parse.  The return
17415         value indicates whether we should return to regular tokenizing or
17416         not, not whether it was parsed successfully.
17417
17418         In the past if we were in: #if false ... #line #endif, we would
17419         resume parsing after `#line'.  See bug 61604.
17420
17421         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
17422         building: IsEnumType should return true only for enums, not for
17423         enums or System.Enum itself.  This fixes #61593.
17424
17425         Likely what happened is that corlib was wrong: mcs depended on
17426         this bug in some places.  The bug got fixed, we had to add the
17427         hack, which caused bug 61593.
17428
17429         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
17430         that was a workaround for the older conditions.
17431
17432 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
17433
17434         * assign.cs: IAssignMethod has a new interface, as documented
17435         inline. All assignment code now uses this new api.
17436
17437         * ecore.cs, expression.cs: All classes which implement
17438         IAssignMethod now use the new interface.
17439
17440         * expression.cs (Invocation): add a hack to EmitCall so that
17441         IndexerAccess can be the target of a compound assignment without
17442         evaluating its arguments twice.
17443
17444         * statement.cs: Handle changes in Invocation api.
17445
17446 2004-07-16  Martin Baulig  <martin@ximian.com>
17447
17448         * iterators.cs: Rewrote this.  We're now using one single Proxy
17449         class for both the IEnumerable and the IEnumerator interface and
17450         `Iterator' derives from Class so we can use the high-level API.
17451
17452         * class.cs (TypeContainer.AddIterator): New method.
17453         (TypeContainer.DoDefineType): New protected virtual method, which
17454         is called from DefineType().
17455         (TypeContainer.DoDefineMembers): Call DefineType() and
17456         DefineMembers() on all our iterators.
17457         (TypeContainer.Emit): Call Emit() on all our iterators.
17458         (TypeContainer.CloseType): Call CloseType() on all our iterators.
17459
17460         * codegen.cs (EmitContext.CurrentIterator): New public field.
17461
17462 2004-07-15  Martin Baulig  <martin@ximian.com>
17463
17464         * typemanager.cs
17465         (TypeManager.not_supported_exception_type): New type.   
17466
17467 2004-07-14  Martin Baulig  <martin@ximian.com>
17468
17469         * iterators.cs: Use real error numbers.
17470
17471 2004-07-14  Martin Baulig  <martin@ximian.com>
17472
17473         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
17474         requires this to be a System.Collection.IEnumerable and not a
17475         class implementing that interface.
17476         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
17477
17478 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
17479
17480         * class.cs: Fixed previous fix, it broke some error tests.
17481
17482 2004-07-12  Martin Baulig  <martin@ximian.com>
17483
17484         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
17485         Fixes #61293.
17486
17487 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
17488
17489         * assign.cs (LocalTemporary): Add new argument: is_address,If
17490         `is_address' is true, then the value that we store is the address
17491         to the real value, and not the value itself.
17492         
17493         * ecore.cs (PropertyExpr): use the new local temporary
17494         stuff to allow us to handle X.Y += z (where X is a struct)
17495
17496 2004-07-08  Martin Baulig  <martin@ximian.com>
17497
17498         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
17499         not always return, just like we're doing in Using.Resolve().
17500
17501 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
17502
17503         * cs-parser.jay (fixed_statement): flag this as Pinned.
17504
17505 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
17506
17507         * typemanager.cs (TypeManager): Removed MakePinned method, this
17508         mechanism is replaced with the .NET 2.x compatible mechanism of
17509         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
17510
17511         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
17512         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
17513         `IsFixed' property which has a different meaning.
17514
17515 2004-07-02  Raja R Harinath  <rharinath@novell.com>
17516
17517         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
17518         visible from inside a nested class, not just the names of the
17519         immediately enclosing class.
17520         Fix for bug #60730.
17521
17522 2004-06-24  Raja R Harinath  <rharinath@novell.com>
17523
17524         * expression.cs (BetterConversion): Remove buggy special-case
17525         handling of "implicit constant expression conversions".  At this
17526         point, we already know that the conversion is possible -- we're
17527         only checking to see which is better.
17528
17529 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17530
17531         * cs-parser.jay: Added error CS0210 test.
17532
17533 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17534
17535         * cs-parser.jay: Added error CS0134 test.
17536
17537 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17538
17539         Fix bug #52507
17540         * cs-parser.jay: Added error CS0145 test.
17541
17542 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
17543
17544         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
17545
17546 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
17547         
17548         * expression.cs (StackAlloc.Resolve): The argument may not
17549         be a constant; deal with this case.
17550         
17551 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
17552
17553         * attribute.cs (IndexerName_GetIndexerName): Renamed to
17554         GetIndexerAttributeValue.
17555         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
17556
17557         * class.cs (Indexer.Define): Added error tests for CS0415,
17558         CS0609.
17559
17560 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
17561
17562         * attribute.cs (Attribute.Resolve): Keep field code in sync with
17563         property code.
17564
17565 2004-06-23  Martin Baulig  <martin@ximian.com>
17566
17567         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
17568         neither return nor throw, reset the barrier as well.  Fixes #60457.
17569
17570 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
17571
17572         * class.cs : EventAttributes is now set to None by default.
17573           This fixes bug #60459.
17574
17575 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17576
17577         Fix bug #60219
17578         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17579         Don't throw exception but return null (it's sufficient now).
17580
17581 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
17582
17583         * typemanager.cs (GetArgumentTypes): Faster implementation.
17584
17585 2004-06-18  Martin Baulig  <martin@ximian.com>
17586
17587         * attribute.cs (Attribute.Resolve): Check whether we're an
17588         EmptyCast which a Constant child.  Fixes #60333.
17589
17590 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
17591
17592         * statement.cs (EmitCollectionForeach): Account for the fact that
17593         not all valuetypes are in areas which we can take the address of.
17594         For these variables, we store to a temporary variable. Also, make
17595         sure that we dont emit a `callvirt' on a valuetype method.
17596
17597 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17598
17599         * expression.cs (StackAlloc.DoReSolve): Added test for
17600         negative parameter (CS0247).
17601
17602 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17603
17604         Fix bug #59792
17605         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
17606
17607 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
17608
17609         Fix bug #59781
17610         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
17611         ulong.
17612
17613 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17614
17615         Fix bug #58254 & cs1555.cs, cs1556.cs
17616         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
17617
17618 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
17619
17620         * cs-parser.jay: Added error CS1669 test for indexers.
17621
17622 2004-06-11  Martin Baulig  <martin@ximian.com>
17623
17624         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
17625         call this twice: for params and varargs methods.
17626
17627 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17628
17629         * class.cs:
17630         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
17631
17632 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17633
17634         * attribute.cs (Attribute.GetValidTargets): Made public.
17635
17636         * class.cs: 
17637         (AbstractPropertyEventMethod): New class for better code sharing.
17638         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
17639         CS1667 report.
17640         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
17641
17642 2004-06-11  Raja R Harinath  <rharinath@novell.com>
17643
17644         Fix bug #59477.
17645         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
17646         that the call to Resolve is part of a MemberAccess.
17647         (Expression.Resolve): Use it for SimpleName resolution.
17648         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
17649         Add 'intermediate' boolean argument.
17650         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
17651         error message when the SimpleName can be resolved ambiguously
17652         between an expression and a type.
17653         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
17654         public.
17655         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
17656         call on the left-side.
17657
17658 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17659
17660         * class.cs:
17661         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
17662
17663 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17664
17665         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
17666
17667 2004-06-11  Martin Baulig  <martin@ximian.com>
17668
17669         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
17670         varargs methods if applicable.
17671
17672 2004-06-11  Martin Baulig  <martin@ximian.com>
17673
17674         * expression.cs (Invocation.EmitCall): Don't use
17675         `method.CallingConvention == CallingConventions.VarArgs' since the
17676         method could also have `CallingConventions.HasThis'.
17677
17678 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
17679
17680         * class.cs (Event.GetSignatureForError): Implemented.
17681         Fixed crash in error test cs3010.cs
17682
17683 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
17684
17685         * cs-tokenizer.cs: Change the way we track __arglist to be
17686         consistent with the other keywords.
17687
17688 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
17689
17690         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
17691         tomorrow.
17692
17693 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
17694
17695         * codegen.cs: Check that all referenced assemblies have a strongname
17696         before strongnaming the compiled assembly. If not report error CS1577.
17697         Fix bug #56563. Patch by Jackson Harper.
17698         * typemanager.cs: Added a method to return all referenced assemblies.
17699         Fix bug #56563. Patch by Jackson Harper.
17700
17701 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17702
17703         * class.cs:
17704         (Method.ApplyAttributeBuilder): Moved and added conditional
17705         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
17706
17707         * delegate.cs:
17708         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
17709
17710 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
17711
17712         Fixed #59640
17713         * class.cs: (EventField.attribute_targets): Changed default target.
17714
17715 2004-06-08  Martin Baulig  <martin@ximian.com>
17716
17717         * expression.cs (Invocation.EmitCall): Enable varargs methods.
17718
17719 2004-06-08  Martin Baulig  <martin@ximian.com>
17720
17721         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
17722
17723 2004-06-07  Martin Baulig  <martin@ximian.com>
17724
17725         Added support for varargs methods.
17726
17727         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
17728         keyword.
17729
17730         * cs-parser.jay: Added support for `__arglist'.
17731
17732         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
17733
17734         * expression.cs (Argument.AType): Added `ArgList'.
17735         (Invocation): Added support for varargs methods.
17736         (ArglistAccess): New public class.
17737         (Arglist): New public class.
17738
17739         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
17740
17741         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
17742         a method's top-level block if the method has varargs.
17743
17744         * support.cs (ReflectionParameters, InternalParameters): Added
17745         support for varargs methods.    
17746
17747 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
17748
17749         * class.cs: Provide location in indexer error report.
17750
17751         * driver.cs: Use standard names.
17752
17753         * namespace.cs: Catch the use of using after a namespace has been
17754         declared also on using aliases.
17755
17756 2004-06-03  Raja R Harinath  <rharinath@novell.com>
17757
17758         Bug #50820.
17759         * typemanager.cs (closure_private_ok, closure_invocation_type)
17760         (closure_qualifier_type, closure_invocation_assembly)
17761         (FilterWithClosure): Move to ...
17762         (Closure): New internal nested class.
17763         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
17764         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
17765         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
17766         (MemberLookup, MemberLookupFailed): Use it.
17767         * expression.cs (New.DoResolve): Treat the lookup for the
17768         constructor as being qualified by the 'new'ed type.
17769         (Indexers.GetIndexersForTypeOrInterface): Update.
17770
17771 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
17772
17773         * attribute.cs
17774         (GetConditionalAttributeValue): New method. Returns
17775         condition of ConditionalAttribute.
17776         (SearchMulti): New method.  Returns all attributes of type 't'.
17777         Use it when attribute is AllowMultiple = true.
17778         (IsConditionalMethodExcluded): New method.
17779
17780         * class.cs
17781         (Method.IsExcluded): Implemented. Returns true if method has conditional
17782         attribute and the conditions is not defined (method is excluded).
17783         (IMethodData): Extended interface for ConditionalAttribute support.
17784         (PropertyMethod.IsExcluded): Implemented.
17785
17786         * decl.cs
17787         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
17788
17789         * expression.cs
17790         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
17791         on the method.
17792
17793 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
17794
17795         * expression.cs (ArrayCreationExpression): Make this just an
17796         `expression'. It can't be a statement, so the code here was
17797         dead.
17798
17799 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17800
17801         Fixed #59072
17802         * typemanager.cs (GetFullNameSignature): New method for
17803         MethodBase types.
17804
17805 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
17806
17807         Fixed #56452
17808         * class.cs (MemberBase.GetSignatureForError): New virtual method.
17809         Use this method when MethodBuilder is null.
17810         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
17811         Added test for error CS0626 (MONO reports error for this situation).
17812         (IMethodData.GetSignatureForError): Extended interface.
17813
17814 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17815
17816         * attribute.cs
17817         (AttributeTester.GetObsoleteAttribute): Returns instance of
17818         ObsoleteAttribute when type is obsolete.
17819
17820         * class.cs
17821         (TypeContainer.VerifyObsoleteAttribute): Override.
17822         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
17823         (MethodCode.VerifyObsoleteAttribute): Override.
17824         (MemberBase.VerifyObsoleteAttribute): Override.
17825
17826         * decl.cs
17827         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
17828         and report proper error.
17829
17830         *delegate.cs
17831         Delegate.VerifyObsoleteAttribute): Override.
17832
17833         * ecore.cs
17834         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
17835         and report proper error.
17836         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
17837
17838         * enum.cs
17839         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
17840         and enum member.
17841
17842         * expression.cs
17843         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
17844         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
17845         Added test for ObsoleteAttribute.
17846
17847         * statement.cs
17848         (Catch): Derived from Statement.
17849
17850 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
17851  
17852         Fixed bug #59071 & cs0160.cs
17853  
17854         * statement.cs (Try.Resolve): Check here whether order of catch
17855         clauses matches their dependencies.
17856
17857 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
17858
17859         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
17860         caused a regression: #59343.  Referencing nested classes from an
17861         assembly stopped working.
17862
17863 2004-05-31  Martin Baulig  <martin@ximian.com>
17864
17865         MCS is now frozen for beta 2.
17866
17867 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17868
17869         * convert.cs: add a trivial cache for overload operator resolution.
17870
17871 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17872
17873         * decl.cs: If possible, use lookuptypedirect here. We can only do
17874         this if there is no `.' after the namespace. Avoids using
17875         LookupType, which does lots of slow processing.
17876         (FindNestedType) New method, does what it says :-).
17877         * namespace.cs: use LookupTypeDirect.
17878         * rootcontext.cs: use membercache, if possible.
17879         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
17880
17881 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17882
17883         * expression.cs:
17884         According to the spec, 
17885
17886         In a member access of the form E.I, if E is a single identifier,
17887         and if the meaning of E as a simple-name (§7.5.2) is a constant,
17888         field, property, localvariable, or parameter with the same type as
17889         the meaning of E as a type-name (§3.8), then both possible
17890         meanings of E are permitted.
17891
17892         We did not check that E as a simple-name had the same type as E as
17893         a type name.
17894
17895         This trivial check gives us 5-7% on bootstrap time.
17896
17897 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
17898
17899         * expression.cs (Invocation.OverloadResolve): Avoid the
17900         use of hashtables and boxing here by allocating on demand.
17901
17902 2004-05-30  Martin Baulig  <martin@ximian.com>
17903
17904         * rootcontext.cs (RootContext.LookupType): Don't cache things if
17905         we're doing a silent lookup.  Don't try to lookup nested types in
17906         TypeManager.object_type (thanks to Ben Maurer).
17907
17908 2004-05-30  Martin Baulig  <martin@ximian.com>
17909
17910         Committing a patch from Ben Maurer.
17911
17912         * rootcontext.cs (RootContext.LookupType): Cache negative results.
17913
17914 2004-05-29  Martin Baulig  <martin@ximian.com>
17915
17916         * class.cs (IMethodData.ShouldIgnore): New method.
17917
17918         * typemanager.cs (TypeManager.MethodFlags): Don't take a
17919         `Location' argument, we don't need it anywhere.  Use
17920         `IMethodData.ShouldIgnore ()' instead of
17921         `MethodData.GetMethodFlags ()'.
17922         (TypeManager.AddMethod): Removed.
17923         (TypeManager.AddMethod2): Renamed to AddMethod.
17924
17925 2004-05-29  Martin Baulig  <martin@ximian.com>
17926
17927         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
17928
17929         * convert.cs (Convert.ImplicitReferenceConversion): If we're
17930         converting from a class type S to an interface type and we already
17931         have an object on the stack, don't box it again.  Fixes #52578.
17932
17933 2004-05-29  Martin Baulig  <martin@ximian.com>
17934
17935         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
17936         Added support for `params' parameters.  Fixes #59267.
17937
17938 2004-05-29  Martin Baulig  <martin@ximian.com>
17939
17940         * literal.cs (NullPointer): Provide a private .ctor which sets
17941         `type' to TypeManager.object_type.  Fixes #59048.
17942
17943 2004-05-29  Martin Baulig  <martin@ximian.com>
17944
17945         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
17946         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
17947
17948         * ecore.cs (EventExpr.instance_expr): Make the field private.
17949
17950 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
17951
17952         Fixed bug #50080 & cs0214-2.cs
17953         * expression.cs (Cast.DoResolve): Check unsafe context here.
17954         
17955         * statement.cs (Resolve.DoResolve): Likewise.
17956
17957 2004-05-26  Martin Baulig  <martin@ximian.com>
17958
17959         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
17960
17961         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
17962         (RootContext.LookupType): Pass down the `silent' flag.
17963
17964 2004-05-25  Martin Baulig  <martin@ximian.com>
17965
17966         * expression.cs
17967         (MethodGroupExpr.IdenticalTypeName): New public property.
17968         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
17969         expression actually refers to a type.
17970
17971 2004-05-25  Martin Baulig  <martin@ximian.com>
17972
17973         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
17974         for #56176 and made it actually work.
17975
17976 2004-05-25  Martin Baulig  <martin@ximian.com>
17977
17978         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
17979         (FieldExpr, PropertyExpr): Override and implement
17980         CacheTemporaries.  Fixes #52279.
17981
17982 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
17983
17984         * location.cs: In the new compiler listing a file twice is a
17985         warning, not an error.
17986
17987 2004-05-24  Martin Baulig  <martin@ximian.com>
17988
17989         * enum.cs (Enum.DefineType): For the `BaseType' to be a
17990         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
17991
17992 2004-05-24  Martin Baulig  <martin@ximian.com>
17993
17994         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
17995         walking the `using' list.  Fixes #53921.
17996
17997 2004-05-24  Martin Baulig  <martin@ximian.com>
17998
17999         * const.cs (Const.LookupConstantValue): Added support for
18000         EmptyCast's; fixes #55251.
18001
18002 2004-05-24  Martin Baulig  <martin@ximian.com>
18003
18004         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18005         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18006         which does the CS0135 check.  The reason is that we first need to
18007         check whether the variable actually exists.
18008
18009 2004-05-24  Martin Baulig  <martin@ximian.com>
18010
18011         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18012         than RootContext.LookupType() to find the explicit interface
18013         type.  Fixes #58584.
18014
18015 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18016
18017         * Makefile: Simplify.  Use executable.make.
18018         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18019
18020 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18021
18022         * decl.cs:
18023         * enum.cs:
18024         Use the invariant culture when doing String.Compare for CLS case
18025         sensitivity.
18026         
18027 2004-05-23  Martin Baulig  <martin@ximian.com>
18028
18029         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18030         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18031
18032         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18033         
18034 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18035
18036         * class.cs (MemberBase.Define): Reuse MemberType member for 
18037         resolved type. Other methods can use it too.
18038
18039 2004-05-23  Martin Baulig  <martin@ximian.com>
18040
18041         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18042         the variable also exists in the current block (otherwise, we need
18043         to report a CS0103).  Fixes #58670.
18044
18045 2004-05-23  Martin Baulig  <martin@ximian.com>
18046
18047         * flowanalysis.cs (Reachability.Reachable): Compute this
18048         on-the-fly rather than storing it as a field.
18049
18050 2004-05-23  Martin Baulig  <martin@ximian.com>
18051
18052         * flowanalysis.cs (Reachability.And): Manually compute the
18053         resulting `barrier' from the reachability.      
18054        
18055 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18056
18057         Fix bug #57835
18058         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18059         instance of ObsoleteAttribute when symbol is obsolete.
18060
18061         * class.cs
18062         (IMethodData): Extended interface for ObsoleteAttribute support.
18063
18064 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18065
18066         * attribute.cs: Fix bug #55970
18067
18068 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18069
18070         Fix bug #52705
18071         * attribute.cs
18072         (GetObsoleteAttribute): New method. Creates the instance of
18073         ObsoleteAttribute.
18074         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18075         ObsoleteAttribute when member is obsolete.
18076         (AttributeTester.Report_ObsoleteMessage): Common method for
18077         Obsolete error/warning reporting.
18078
18079         * class.cs
18080         (TypeContainer.base_classs_type): New member for storing parent type.
18081
18082         * decl.cs
18083         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18084         for this MemberCore.
18085
18086 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18087
18088         * attribute.cs, const.cs: Fix bug #58590
18089
18090 2004-05-21  Martin Baulig  <martin@ximian.com>
18091
18092         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18093         out parameters if the end of the method is unreachable.  Fixes
18094         #58098. 
18095
18096 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18097
18098         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18099         Hari was right, why extra method.
18100
18101 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18102
18103         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18104
18105 2004-05-20  Martin Baulig  <martin@ximian.com>
18106
18107         Merged this back from gmcs to keep the differences to a minumum.
18108
18109         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18110         instead of a Declspace.
18111         (Attribute.ResolveType): Likewise.
18112         (Attributes.Search): Likewise.
18113         (Attributes.Contains): Likewise.
18114         (Attributes.GetClsCompliantAttribute): Likewise.
18115
18116         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18117         argument.
18118         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18119         DeclSpace.
18120
18121 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18122
18123         Fix bug #58688 (MCS does not report error when the same attribute
18124         is assigned twice)
18125
18126         * attribute.cs (Attribute.Emit): Distinction between null and default.
18127
18128 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18129
18130         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18131         of a top-level attribute without an attribute target.
18132         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18133         Make non-static.
18134         (Attribute.Conditional_GetConditionName), 
18135         (Attribute.Obsolete_GetObsoleteMessage): Update.
18136         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18137         part of ScanForIndexerName.
18138         (Attribute.CanIgnoreInvalidAttribute): New function.
18139         (Attribute.ScanForIndexerName): Move to ...
18140         (Attributes.ScanForIndexerName): ... here.
18141         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18142         (Attributes.Search): New internal variant that can choose not to
18143         complain if types aren't resolved.  The original signature now
18144         complains.
18145         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18146         complaints suppressed.
18147         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18148         only if it not useful.
18149         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18150         top-level for attributes that are shared between the assembly
18151         and a top-level class.
18152         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18153         * class.cs: Update to reflect changes.
18154         (DefineIndexers): Fuse loops.
18155         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18156         a couple more variants of attribute names.
18157
18158 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18159
18160         Fix bug #52585 (Implemented explicit attribute declaration)
18161
18162         * attribute.cs:
18163         (Attributable.ValidAttributeTargets): New abstract method. It gets
18164         list of valid attribute targets for explicit target declaration.
18165         (Attribute.Target): It holds target itself.
18166         (AttributeSection): Removed.
18167         (Attribute.CheckTargets): New method. It checks whether attribute
18168         target is valid for the current element.
18169
18170         * class.cs:
18171         (EventProperty): New class. For events that are declared like
18172         property (with add and remove accessors).
18173         (EventField): New class. For events that are declared like field.
18174         class.cs
18175
18176         * cs-parser.jay: Implemented explicit attribute target declaration.
18177
18178         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18179         Override ValidAttributeTargets.
18180
18181         * parameter.cs:
18182         (ReturnParameter): Class for applying custom attributes on 
18183         the return type.
18184         (ParameterAtribute): New class. Class for applying custom
18185         attributes on the parameter type.
18186
18187 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18188
18189         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18190         definitions. 
18191
18192         (Method): Allow UNSAFE here.
18193
18194         * modifiers.cs: Support unsafe reporting.
18195
18196 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18197
18198         * decl.cs: Fix bug #58478.
18199
18200 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18201
18202         * statement.cs: When checking for unreachable code on an EmptyStatement,
18203         set the location. Fixes bug #58488.
18204
18205 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18206
18207         * driver.cs: Add -pkg handling.
18208
18209         From Gonzalo: UseShelLExecute=false
18210
18211 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18212
18213         * attribute.cs:
18214         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18215         for attribute.
18216         (Attribute.IsClsCompliaceRequired): Moved to base for better
18217         accesibility.
18218         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18219         when attribute is AttributeUsageAttribute.
18220         (Attribute.GetValidTargets): Simplified.
18221         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18222         attribute for this type.
18223         (Attribute.ApplyAttributes): Method renamed to Emit and make
18224         non-static.
18225         (GlobalAttributeSection): New class for special handling of global
18226         attributes (assembly, module).
18227         (AttributeSection.Emit): New method.
18228
18229         * class.cs: Implemented Attributable abstract methods.
18230         (MethodCore.LabelParameters): Moved to Parameter class.
18231         (Accessor): Is back simple class.
18232         (PropertyMethod): Implemented Attributable abstract class.
18233         (DelegateMethod): Implemented Attributable abstract class.
18234         (Event): New constructor for disctintion between normal Event
18235         and Event with accessors.
18236
18237         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18238
18239         * codegen.cs, const.cs, decl.cs, delegate.cs:
18240         (CommonAssemblyModulClass): Implemented Attributable abstract class
18241         and simplified.
18242
18243         * enum.cs: Implement IAttributeSupport interface.
18244         (EnumMember): New class for emum members. Implemented Attributable
18245         abstract class
18246
18247         * parameter.cs:
18248         (ParameterBase): Is abstract.
18249         (ReturnParameter): New class for easier [return:] attribute handling.
18250
18251         * typemanager.cs: Removed builder_to_attr.
18252
18253 2004-05-11  Raja R Harinath  <rharinath@novell.com>
18254
18255         Fix bug #57151.
18256         * attribute.cs (Attribute.GetPositionalValue): New function.
18257         * class.cs (TypeContainer.VerifyMembers): New function.
18258         (TypeContainer.Emit): Use it.
18259         (ClassOrStruct): New base class for Class and Struct.
18260         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
18261         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
18262         class.
18263         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
18264         then each non-static field should have a FieldOffset attribute.
18265         Otherwise, none of the fields should have a FieldOffset attribute.
18266         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
18267         and FieldOffset attributes.
18268         * typemanager.cs (TypeManager.struct_layout_attribute_type)
18269         (TypeManager.field_offset_attribute_type): New core types.
18270         (TypeManager.InitCoreTypes): Initialize them.
18271
18272 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
18273
18274         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
18275         Return correct type.
18276         From bug #58270.
18277
18278 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
18279
18280         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
18281         be implicitly converted to ulong.
18282         
18283         * expression.cs: The logic for allowing operator &, | and ^ worked
18284         was wrong, it worked before because we did not report an error in
18285         an else branch.  Fixes 57895.
18286
18287         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
18288         allow volatile fields to be reference types.
18289
18290 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
18291
18292         * driver.cs: Add support for /debug-
18293
18294 2004-05-07  Raja R Harinath  <rharinath@novell.com>
18295
18296         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
18297         Add a 'complain' parameter to silence errors.
18298         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
18299         silently overlooked type-resolutions.
18300         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
18301         to reflect changes.
18302         (Attributes.Search): New function.
18303         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
18304         (Attributes.GetAttributeFullName): Remove hack.
18305         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
18306         Update to reflect changes.
18307         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
18308         Use Attributes.Search instead of nested loops.
18309
18310 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
18311
18312         * decl.cs:
18313         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
18314         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
18315         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
18316
18317         * report.cs: (Report.Warning): Renamed to Warning_T because of
18318         parameter collision.
18319
18320 2004-05-05  Raja R Harinath  <rharinath@novell.com>
18321
18322         * expression.cs (MemberAccess.ResolveMemberAccess):
18323         Exit with non-zero status after Report.Error.
18324         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
18325         Likewise.
18326         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
18327
18328 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18329
18330         * support.cs: Don't hang when the file is empty.
18331
18332 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
18333
18334         * support.cs: In SeekableStreamReader, compute the preamble size of the
18335           underlying stream. Position changes should take into account that initial
18336           count of bytes.
18337
18338 2004-05-03  Todd Berman  <tberman@sevenl.net>
18339
18340         * driver.cs: remove unused GetSysVersion function.
18341
18342 2004-05-03  Todd Berman  <tberman@sevenl.net>
18343
18344         * driver.cs: Remove the hack from saturday, as well as the hack
18345         from jackson (LoadAssemblyFromGac), also adds the CWD to the
18346         link_paths to get that bit proper.
18347
18348 2004-05-01  Todd Berman  <tberman@sevenl.net>
18349
18350         * driver.cs: Try a LoadFrom before a Load, this checks the current
18351         path. This is currently a bug in mono that is be fixed, however, this
18352         provides a workaround for now. This will be removed when the bug
18353         is fixed.
18354
18355 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
18356
18357         * CryptoConvert.cs: Updated to latest version. Fix issue with 
18358         incomplete key pairs (#57941).
18359
18360 2004-05-01  Todd Berman  <tberman@sevenl.net>
18361
18362         * driver.cs: Remove '.' from path_chars, now System.* loads properly
18363         from the GAC
18364
18365 2004-04-30  Jackson Harper  <jackson@ximian.com>
18366
18367         * codegen.cs: Open keys readonly.
18368         
18369 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18370
18371         * typemanager.cs: don't report cyclic struct layout when a struct
18372         contains 2 or more fields of the same type. Failed for Pango.AttrShape
18373         which has 2 Pango.Rectangle fields.
18374
18375 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18376
18377         * expression.cs: Handle IntPtr comparisons with IL code
18378         rather than a method call.
18379
18380 2004-04-29  Martin Baulig  <martin@ximian.com>
18381
18382         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
18383         the list of PropertyInfo's in class hierarchy and find the
18384         accessor.  Fixes #56013.
18385
18386 2004-04-29  Martin Baulig  <martin@ximian.com>
18387
18388         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
18389
18390 2004-04-29  Martin Baulig  <martin@ximian.com>
18391
18392         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18393
18394         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
18395
18396 2004-04-29  Martin Baulig  <martin@ximian.com>
18397
18398         * class.cs (ConstructorInitializer.Resolve): Check whether the
18399         parent .ctor is accessible.  Fixes #52146.
18400
18401 2004-04-29  Martin Baulig  <martin@ximian.com>
18402
18403         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
18404
18405         * statement.cs (Using.EmitLocalVariableDecls): Use
18406         TypeManager.idisposable_type, not typeof (IDisposable).
18407         (Foreach.EmitCollectionForeach): Added support for valuetypes.
18408
18409 2004-04-29  Martin Baulig  <martin@ximian.com>
18410
18411         * class.cs (Event.Define): Don't emit the field and don't set
18412         RTSpecialName and SpecialName for events on interfaces.  Fixes
18413         #57703. 
18414
18415 2004-04-29  Raja R Harinath  <rharinath@novell.com>
18416
18417         Refactor Attribute.ApplyAttributes.
18418         * attribute.cs (Attributable): New base class for objects that can
18419         have Attributes applied on them.
18420         (Attribute): Make AttributeUsage fields public.
18421         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
18422         (Attribute.IsInternalCall): New property.
18423         (Attribute.UsageAttr): Convert to a public read-only property.
18424         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
18425         (Attribute.ResolveType, Attribute.Resolve)
18426         (Attribute.ScanForIndexerName): Update to reflect changes.
18427         (Attribute.CheckAttributeTarget): Re-format.
18428         (Attribute.ApplyAttributes): Refactor, to various
18429         Attributable.ApplyAttributeBuilder methods.
18430         * decl.cs (MemberCore): Make Attributable.
18431         * class.cs (Accessor): Make Attributable.
18432         (MethodData.ApplyAttributes): Use proper attribute types, not
18433         attribute names.
18434         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
18435         (TypeContainer.ApplyAttributeBuilder)
18436         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
18437         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
18438         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
18439         (Operator.ApplyAttributeBuilder): New factored-out methods.
18440         * const.cs (Const.ApplyAttributeBuilder): Likewise.
18441         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
18442         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
18443         * parameter.cs (ParameterBase): New Attributable base class
18444         that can also represent Return types.
18445         (Parameter): Update to the changes.
18446
18447 2004-04-29  Jackson Harper  <jackson@ximian.com>
18448
18449         * driver.cs: Prefer the corlib system version when looking for
18450         assemblies in the GAC. This is still a hack, but its a better hack
18451         now.
18452         
18453 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
18454
18455         * decl.cs, enum.cs: Improved error 3005 reporting.
18456   
18457         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
18458         (related_symbols): New private member for list of symbols
18459         related to reported error/warning.
18460         
18461         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
18462
18463 2004-04-29  Martin Baulig  <martin@ximian.com>
18464
18465         * ecore.cs (Expression.Constantify): If we're an enum and
18466         TypeManager.TypeToCoreType() doesn't give us another type, use
18467         t.UnderlyingSystemType.  Fixes #56178.  
18468
18469 2004-04-29  Martin Baulig  <martin@ximian.com>
18470
18471         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
18472         interfaces and for each interface, only add members directly
18473         declared in that interface.  Fixes #53255.
18474
18475 2004-04-28  Martin Baulig  <martin@ximian.com>
18476
18477         * expression.cs (ConditionalLogicalOperator): Use a temporary
18478         variable for `left' to avoid that we evaluate it more than once;
18479         bug #52588.
18480
18481 2004-04-28  Martin Baulig  <martin@ximian.com>
18482
18483         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
18484         `void[]' (CS1547).
18485
18486 2004-04-28  Martin Baulig  <martin@ximian.com>
18487
18488         * statement.cs (LocalInfo.Resolve): Check whether the type is not
18489         void (CS1547).
18490
18491         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
18492         whether the type is not void (CS1547).
18493
18494 2004-04-28  Martin Baulig  <martin@ximian.com>
18495
18496         * expression.cs (Unary.DoResolveLValue): Override this and report
18497         CS0131 for anything but Operator.Indirection.
18498
18499 2004-04-28  Martin Baulig  <martin@ximian.com>
18500
18501         Committing a patch from Ben Maurer; see bug #50820.
18502
18503         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18504         check for classes.
18505
18506         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18507         classes.        
18508
18509 2004-04-28  Martin Baulig  <martin@ximian.com>
18510
18511         Committing a patch from Ben Maurer; see bug #50820.
18512
18513         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
18514         check for classes.
18515
18516         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
18517         classes.        
18518
18519 2004-04-28  Martin Baulig  <martin@ximian.com>
18520
18521         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
18522         (Block.AddLabel): Call DoLookupLabel() to only search in the
18523         current block.
18524
18525 2004-04-28  Martin Baulig  <martin@ximian.com>
18526
18527         * cfold.cs (ConstantFold.BinaryFold): Added special support for
18528         comparing StringConstants and NullLiterals in Equality and Inequality.
18529
18530 2004-04-28  Jackson Harper  <jackson@ximian.com>
18531
18532         * driver.cs: Attempt to load referenced assemblies from the
18533         GAC. This is the quick and dirty version of this method that
18534         doesnt take into account versions and just takes the first
18535         canidate found. Will be good enough for now as we will not have more
18536         then one version installed into the GAC until I update this method.
18537
18538 2004-04-28  Martin Baulig  <martin@ximian.com>
18539
18540         * typemanager.cs (TypeManager.CheckStructCycles): New public
18541         static method to check for cycles in the struct layout.
18542
18543         * rootcontext.cs (RootContext.PopulateTypes): Call
18544         TypeManager.CheckStructCycles() for each TypeContainer.
18545         [Note: We only need to visit each type once.]
18546
18547 2004-04-28  Martin Baulig  <martin@ximian.com>
18548
18549         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
18550
18551         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
18552         success and added `out object value'.  Use a `bool resolved' field
18553         to check whether we've already been called rather than
18554         `ConstantValue != null' since this breaks for NullLiterals.
18555
18556 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18557
18558         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
18559         setting of this flag, since the 'set' method may be non-public.
18560
18561 2004-04-28  Raja R Harinath  <rharinath@novell.com>
18562
18563         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
18564         check on current_vector.Block.
18565
18566 2004-04-27  Martin Baulig  <martin@ximian.com>
18567
18568         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
18569         a field initializer.  Fixes #56459.
18570
18571 2004-04-27  Martin Baulig  <martin@ximian.com>
18572
18573         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
18574         we're not attempting to use an indexer.  Fixes #52154.
18575
18576 2004-04-27  Martin Baulig  <martin@ximian.com>
18577
18578         * statement.cs (Return): Don't create a return label if we don't
18579         need it; reverts my change from January 20th.  Thanks to Ben
18580         Maurer for this.
18581
18582 2004-04-27  Martin Baulig  <martin@ximian.com>
18583
18584         According to the spec, `goto' can only leave a nested scope, but
18585         never enter it.
18586
18587         * statement.cs (Block.LookupLabel): Only lookup in the current
18588         block, don't recurse into parent or child blocks.
18589         (Block.AddLabel): Check in parent and child blocks, report
18590         CS0140/CS0158 if we find a duplicate.
18591         (Block): Removed this indexer for label lookups.
18592         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
18593         this already does the error reporting for us.
18594
18595         * flowanalysis.cs
18596         (FlowBranching.UsageVector.Block): New public variable; may be null.
18597         (FlowBranching.CreateSibling): Added `Block' argument.
18598         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
18599         label for the target of a `goto' and check whether we're not
18600         leaving a `finally'.
18601
18602 2004-04-27  Martin Baulig  <martin@ximian.com>
18603
18604         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
18605         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
18606         just for returns).
18607
18608 2004-04-27  Martin Baulig  <martin@ximian.com>
18609
18610         * statement.cs (Block.AddLabel): Also check for implicit blocks
18611         and added a CS0158 check.
18612
18613 2004-04-27  Martin Baulig  <martin@ximian.com>
18614
18615         * flowanalysis.cs (FlowBranchingLoop): New class.
18616         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
18617         UsageVector's instead of an ArrayList.
18618         (FlowBranching.Label): Likewise.
18619         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
18620         (FlowBranching.AddBreakVector): New method.
18621
18622 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
18623
18624         * attribute.cs: Small regression fix: only convert the type if we
18625         the type is different, fixes System.Drawing build.
18626
18627 2004-04-27  Martin Baulig  <martin@ximian.com>
18628
18629         * attribute.cs (Attribute.Resolve): If we have a constant value
18630         for a named field or property, implicity convert it to the correct
18631         type.
18632
18633 2004-04-27  Raja R Harinath  <rharinath@novell.com>
18634
18635         * statement.cs (Block.Block): Implicit blocks share
18636         'child_variable_names' fields with parent blocks.
18637         (Block.AddChildVariableNames): Remove.
18638         (Block.AddVariable): Mark variable as "used by a child block" in
18639         every surrounding block.
18640         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
18641         been used in a child block, complain about violation of "Invariant
18642         meaning in blocks" rule.
18643         * cs-parser.jay (declare_local_variables): Don't use
18644         AddChildVariableNames.
18645         (foreach_statement): Don't create an implicit block: 'foreach'
18646         introduces a scope.
18647
18648 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
18649
18650         * convert.cs (ImplicitNumericConversion): 0 is also positive when
18651         converting from 0L to ulong.  Fixes 57522.
18652
18653 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18654
18655         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
18656         derived class hides via 'new' keyword field from base class (test-242.cs).
18657         TODO: Handle this in the more general way.
18658         
18659         * class.cs (CheckBase): Ditto.
18660
18661 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
18662
18663         * decl.cs (caching_flags): New member for storing cached values
18664         as bit flags.
18665         (MemberCore.Flags): New enum where bit flags for caching_flags
18666         are defined.
18667         (MemberCore.cls_compliance): Moved to caching_flags.
18668         (DeclSpace.Created): Moved to caching_flags.
18669
18670         * class.cs: Use caching_flags instead of DeclSpace.Created
18671         
18672 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
18673
18674         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
18675         if we are only a derived class, not a nested class.
18676
18677         * typemanager.cs: Same as above, but do this at the MemberLookup
18678         level (used by field and methods, properties are handled in
18679         PropertyExpr).   Allow for the qualified access if we are a nested
18680         method. 
18681
18682 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
18683
18684         * class.cs: Refactoring.
18685         (IMethodData): New inteface; Holds links to parent members
18686         to avoid member duplication (reduced memory allocation).
18687         (Method): Implemented IMethodData interface.
18688         (PropertyBase): New inner classes for get/set methods.
18689         (PropertyBase.PropertyMethod): Implemented IMethodData interface
18690         (Event): New inner classes for add/remove methods.
18691         (Event.DelegateMethod): Implemented IMethodData interface.
18692
18693         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
18694         EmitContext (related to class.cs refactoring).
18695
18696 2004-04-21  Raja R Harinath  <rharinath@novell.com>
18697
18698         * delegate.cs (Delegate.VerifyApplicability): If the number of
18699         arguments are the same as the number of parameters, first try to
18700         verify applicability ignoring  any 'params' modifier on the last
18701         parameter.
18702         Fixes #56442.
18703
18704 2004-04-16  Raja R Harinath  <rharinath@novell.com>
18705
18706         * class.cs (TypeContainer.AddIndexer): Use
18707         'ExplicitInterfaceName' to determine if interface name was
18708         explicitly specified.  'InterfaceType' is not initialized at this time.
18709         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
18710         Indexers array is already in the required order.  Initialize
18711         'IndexerName' only if there are normal indexers.
18712         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
18713         (TypeContainer.Emit): Emit DefaultMember attribute only if
18714         IndexerName is initialized.
18715         Fixes #56300.
18716
18717 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
18718
18719         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
18720         Fixes #57007
18721
18722 2004-04-15  Raja R Harinath  <rharinath@novell.com>
18723
18724         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
18725         attributes.
18726         Fix for #56456.
18727
18728         * attribute.cs (Attribute.Resolve): Check for duplicate named
18729         attributes.
18730         Fix for #56463.
18731
18732 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
18733
18734         * iterators.cs (MarkYield): track whether we are in an exception,
18735         and generate code accordingly.  Use a temporary value to store the
18736         result for our state.
18737
18738         I had ignored a bit the interaction of try/catch with iterators
18739         since their behavior was not entirely obvious, but now it is
18740         possible to verify that our behavior is the same as MS .NET 2.0
18741
18742         Fixes 54814
18743
18744 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
18745
18746         * iterators.cs: Avoid creating temporaries if there is no work to
18747         do. 
18748
18749         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
18750         Enumerations, use TypeManager.EnumToUnderlying and call
18751         recursively. 
18752
18753         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
18754         bug #57013
18755
18756         (This.Emit): Use EmitContext.EmitThis to emit our
18757         instance variable.
18758
18759         (This.EmitAssign): Ditto.
18760
18761         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
18762         codepaths, we will move all the functionality into
18763         Mono.CSharp.This 
18764
18765         (FieldExpr.EmitAssign): Ditto.
18766
18767         This fixes several hidden bugs that I uncovered while doing a code
18768         review of this today.
18769
18770         * codegen.cs (EmitThis): reworked so the semantics are more clear
18771         and also support value types "this" instances.
18772
18773         * iterators.cs: Changed so that for iterators in value types, we
18774         do not pass the value type as a parameter.  
18775
18776         Initialization of the enumerator helpers is now done in the caller
18777         instead of passing the parameters to the constructors and having
18778         the constructor set the fields.
18779
18780         The fields have now `assembly' visibility instead of private.
18781
18782 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
18783
18784         * expression.cs (Argument.Resolve): Check if fields passed as ref
18785         or out are contained in a MarshalByRefObject.
18786
18787         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
18788         another compiler type.
18789
18790 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
18791
18792         * class.cs (Indexer.Define): use the new name checking method.
18793         Also, return false on an error.
18794         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
18795         (is_identifier_[start/part]_character): make static.
18796
18797 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
18798
18799         * expression.cs (Binary.ResolveOperator): Do no append strings
18800         twice: since we can be invoked more than once (array evaluation)
18801         on the same concatenation, take care of this here.  Based on a fix
18802         from Ben (bug #56454)
18803
18804 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
18805
18806         * codegen.cs: Fix another case where CS1548 must be reported (when 
18807         delay-sign isn't specified and no private is available #56564). Fix
18808         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
18809         error when MCS is used on the MS runtime and we need to delay-sign 
18810         (which seems unsupported by AssemblyBuilder - see #56621).
18811
18812 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
18813
18814         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
18815         (TypeManager.ComputeNamespaces): Faster implementation for
18816         Microsoft runtime.
18817
18818         * compiler.csproj: Updated AssemblyName to mcs.
18819
18820 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
18821
18822         * rootcontext.cs: Add new types to the boot resolution.
18823
18824         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
18825         MulticastDelegate is not allowed.
18826
18827         * typemanager.cs: Add new types to lookup: System.TypedReference
18828         and ArgIterator.
18829
18830         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
18831         check for TypedReference or ArgIterator, they are not allowed. 
18832
18833         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
18834         makes us properly catch 1510 in some conditions (see bug 56016 for
18835         details). 
18836
18837 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
18838
18839         * CryptoConvert.cs: update from corlib version
18840         with endian fixes.
18841
18842 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
18843
18844         * class.cs (Indexer.Define): Check indexername declaration
18845
18846 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
18847
18848         * attribute.cs (IsClsCompliant): Fixed problem with handling
18849         all three states (compliant, not-compliant, undetected).
18850
18851 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
18852
18853         * attribute.cs (Attribute): Location is now public.
18854         (Resolve): Store resolved arguments (pos_values) in attribute class.
18855         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
18856         (GetClsCompliantAttributeValue): New method that gets
18857         CLSCompliantAttribute value.
18858         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
18859         if exists else null.
18860         (AttributeTester): New class for CLS-Compliant verification routines.
18861
18862         * class.cs (Emit): Add CLS-Compliant verification.
18863         (Method.GetSignatureForError): Implemented.
18864         (Constructor.GetSignatureForError): Implemented
18865         (Constructor.HasCompliantArgs): Returns if constructor has
18866         CLS-Compliant arguments.
18867         (Constructor.Emit): Override.
18868         (Construcor.IsIdentifierClsCompliant): New method; For constructors
18869         is needed to test only parameters.
18870         (FieldBase.GetSignatureForError): Implemented.
18871         (TypeContainer): New member for storing base interfaces.
18872         (TypeContainer.FindMembers): Search in base interfaces too.
18873
18874         * codegen.cs (GetClsComplianceAttribute): New method that gets
18875         assembly or module CLSCompliantAttribute value.
18876         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
18877         for assembly.
18878         (ModuleClass.Emit): Add error 3012 test.
18879
18880         * const.cs (Emit): Override and call base for CLS-Compliant tests.
18881
18882         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
18883         state for all decl types.
18884         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
18885         if CLS-Compliant tests are required.
18886         (IsClsCompliaceRequired): New method. Analyze whether code
18887         must be CLS-Compliant.
18888         (IsExposedFromAssembly): New method. Returns true when MemberCore
18889         is exposed from assembly.
18890         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
18891         value or gets cached value.
18892         (HasClsCompliantAttribute): New method. Returns true if MemberCore
18893         is explicitly marked with CLSCompliantAttribute.
18894         (IsIdentifierClsCompliant): New abstract method. This method is
18895         used to testing error 3005.
18896         (IsIdentifierAndParamClsCompliant): New method. Common helper method
18897         for identifier and parameters CLS-Compliant testing.
18898         (VerifyClsCompliance): New method. The main virtual method for
18899         CLS-Compliant verifications.
18900         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
18901         null. I don't know why is null (too many public members !).
18902         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
18903         and get value of first CLSCompliantAttribute that found.
18904
18905         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
18906         (VerifyClsCompliance): Override and add extra tests.
18907
18908         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
18909         clscheck- disable CLS-Compliant verification event if assembly is has
18910         CLSCompliantAttribute(true).
18911
18912         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
18913         ApllyAttribute is now called in emit section as in the other cases.
18914         Possible future Emit integration.
18915         (IsIdentifierClsCompliant): New override.
18916         (VerifyClsCompliance): New override.
18917         (GetEnumeratorName): Returns full enum name.
18918
18919         * parameter.cs (GetSignatureForError): Implemented.
18920
18921         * report.cs (WarningData): New struct for Warning message information.
18922         (LocationOfPreviousError): New method.
18923         (Warning): New method. Reports warning based on the warning table.
18924         (Error_T): New method. Reports error based on the error table.
18925
18926         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
18927         verifications are done here.
18928
18929         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
18930
18931         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
18932         CLSCompliantAttribute.
18933         (all_imported_types): New member holds all imported types from other
18934         assemblies.
18935         (LoadAllImportedTypes): New method fills static table with exported types
18936         from all referenced assemblies.
18937         (Modules): New property returns all assembly modules.
18938
18939 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
18940
18941         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
18942         throwing a parser error.
18943
18944         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
18945         which removes the hardcoded get_/set_ prefixes for properties, as
18946         IL allows for the properties to be named something else.  
18947
18948         Bug #56013
18949
18950         * expression.cs: Do not override operand before we know if it is
18951         non-null.  Fix 56207
18952
18953 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18954
18955         * typemanager.cs: support for pinned variables.
18956
18957 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18958
18959         * decl.cs, typemanager.cs: Avoid using an arraylist
18960         as a buffer if there is only one result set.
18961
18962 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
18963
18964         * expression.cs: Make sure you cant call a static method
18965         with an instance expression, bug #56174.
18966
18967 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
18968
18969         * class.cs (IsDuplicateImplementation): Improve error reporting to
18970         flag 663 (method only differs in parameter modifier).
18971
18972         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
18973         in preprocessor directives.
18974
18975         * location.cs (LookupFile): Allow for the empty path.
18976
18977         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
18978         better approach for some of that patch, but its failing with the
18979         CharSet enumeration.  For now try/catch will do.
18980
18981         * typemanager.cs: Do not crash if a struct does not have fields.
18982         Fixes 56150.
18983
18984 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18985
18986         * expression.cs: cs0213, cant fix a fixed expression.
18987         fixes 50231.
18988
18989 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18990
18991         * cs-parser.jay: detect invalid embeded statements gracefully.
18992         bug #51113.
18993
18994 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
18995
18996         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
18997         As a regex:
18998         s/
18999         the invocation type may not be a subclass of the tye of the item/
19000         The type of the item must be a subclass of the invocation item.
19001         /g
19002
19003         Fixes bug #50820.
19004
19005 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19006
19007         * attribute.cs: Added methods to get a string and a bool from an
19008         attribute. Required to information from AssemblyKeyFileAttribute,
19009         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19010         * codegen.cs: Modified AssemblyName creation to include support for
19011         strongnames. Catch additional exceptions to report them as CS1548.
19012         * compiler.csproj: Updated include CryptoConvert.cs.
19013         * compiler.csproj.user: Removed file - user specific configuration.
19014         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19015         Mono.Security assembly. The original class is maintained and tested in
19016         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19017         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19018         like CSC 8.0 (C# v2) supports.
19019         * Makefile: Added CryptoConvert.cs to mcs sources.
19020         * rootcontext.cs: Added new options for strongnames.
19021
19022 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19023
19024         * driver.cs: For --expect-error, report error code `2'
19025         if the program compiled with no errors, error code `1' if
19026         it compiled with an error other than the one expected.
19027
19028 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19029
19030         * compiler.csproj: Updated for Visual Studio .NET 2003.
19031         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19032         * compiler.sln: Updated for Visual Studio .NET 2003.
19033
19034 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19035
19036         * expression.cs: Fix bug #47234. We basically need to apply the
19037         rule that we prefer the conversion of null to a reference type
19038         when faced with a conversion to 'object' (csc behaviour).
19039
19040 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19041
19042         * statement.cs: Shorter form for foreach, eliminates
19043         a local variable. r=Martin.
19044
19045 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19046
19047         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19048         checks if we can use brtrue/brfalse to test for 0.
19049         * expression.cs: use the above in the test for using brtrue/brfalse.
19050         cleanup code a bit.
19051
19052 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19053
19054         * expression.cs: Rewrite string concat stuff. Benefits:
19055
19056         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19057         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19058         rather than a concat chain.
19059
19060         * typemanager.cs: Add lookups for more concat overloads.
19061
19062 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19063
19064         * expression.cs: Emit shorter il code for array init.
19065
19066         newarr
19067         dup
19068         // set 1
19069
19070         // set 2
19071
19072         newarr
19073         stloc.x
19074
19075         ldloc.x
19076         // set 1
19077
19078         ldloc.x
19079         // set 2
19080
19081 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19082
19083         * statement.cs: Before, two switch blocks would be merged if the
19084         total size of the blocks (end_item - begin_item + 1) was less than
19085         two times the combined sizes of the blocks.
19086
19087         Now, it will only merge if after the merge at least half of the
19088         slots are filled.
19089
19090         fixes 55885.
19091
19092 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19093
19094         * class.cs : csc build fix for GetMethods(). See bug #52503.
19095
19096 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19097
19098         * expression.cs: Make sure fp comparisons work with NaN.
19099         This fixes bug #54303. Mig approved this patch a long
19100         time ago, but we were not able to test b/c the runtime
19101         had a related bug.
19102
19103 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19104
19105         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19106
19107 2004-03-19  Martin Baulig  <martin@ximian.com>
19108
19109         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19110         error here and not in our caller.
19111
19112 2004-03-19  Martin Baulig  <martin@ximian.com>
19113
19114         * interface.cs: Completely killed this file.
19115         (Interface): We're now a TypeContainer and live in class.cs.
19116
19117         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19118         argument; we're now also called for interfaces.
19119         (TypeContainer.DefineMembers): Allow this method being called
19120         multiple times.
19121         (TypeContainer.GetMethods): New public method; formerly known as
19122         Interface.GetMethod().  This is used by PendingImplementation.
19123         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19124         it's now private and non-static.
19125         (Interface): Moved this here; it's now implemented similar to
19126         Class and Struct.
19127         (Method, Property, Event, Indexer): Added `bool is_interface'
19128         argument to their .ctor's.
19129         (MemberBase.IsInterface): New public field.
19130
19131         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19132         instances instead of InterfaceMethod, InterfaceProperty, etc.
19133         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19134         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19135
19136 2004-03-19  Martin Baulig  <martin@ximian.com>
19137
19138         * class.cs (MethodCore.IsDuplicateImplementation): New private
19139         method which does the CS0111 checking.
19140         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19141         Use IsDuplicateImplementation().
19142
19143 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19144
19145         * decl.cs (FindMemberToOverride): New method to find the correct
19146         method or property to override in the base class.
19147         * class.cs
19148             - Make Method/Property use the above method to find the
19149               version in the base class.
19150             - Remove the InheritableMemberSignatureCompare as it is now
19151               dead code.
19152
19153         This patch makes large code bases much faster to compile, as it is
19154         O(n) rather than O(n^2) to do this validation.
19155
19156         Also, it fixes bug 52458 which is that nested classes are not
19157         taken into account when finding the base class member.
19158
19159         Reviewed/Approved by Martin.
19160
19161 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19162
19163         * interface.cs: In all interface classes removed redundant
19164         member initialization.
19165
19166 2004-03-16  Martin Baulig  <martin@ximian.com>
19167
19168         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19169
19170 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19171
19172         * decl.cs (DefineTypeAndParents): New helper method to define a
19173         type's containers before the type itself is defined;  This is a
19174         bug exposed by the recent changes to Windows.Forms when an
19175         implemented interface was defined inside a class that had not been
19176         built yet.   
19177
19178         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19179
19180         (Check): Loop correctly to report errors modifiers
19181         (UNSAFE was not in the loop, since it was the same as TOP).
19182
19183         * interface.cs: Every interface member now takes a ModFlags,
19184         instead of a "is_new" bool, which we set on the base MemberCore. 
19185
19186         Every place where we called "UnsafeOk" in the interface, now we
19187         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19188         the unsafe settings from the member declaration instead of the
19189         container interface. 
19190
19191         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19192
19193         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19194         `set_indexer_name' to the pending bits (one per type).
19195
19196         We fixed a bug today that was picking the wrong method to
19197         override, since for properties the existing InterfaceMethod code
19198         basically ignored the method name.  Now we make sure that the
19199         method name is one of the valid indexer names.
19200
19201 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19202  
19203         * support.cs (SeekableStreamReader): Keep track of stream byte
19204         positions and don't mix them with character offsets to the buffer.
19205
19206         Patch from Gustavo Giráldez
19207
19208 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19209
19210         * interface.cs (InterfaceSetGetBase): Removed double member
19211         initialization, base class does it as well.
19212
19213 2004-03-13  Martin Baulig  <martin@ximian.com>
19214
19215         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19216         when compiling corlib.
19217
19218 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19219
19220         * convert.cs (ExplicitConversion): We were reporting an error on
19221         certain conversions (object_type source to a value type, when the
19222         expression was `null') before we had a chance to pass it through
19223         the user defined conversions.
19224
19225         * driver.cs: Replace / and \ in resource specifications to dots.
19226         Fixes 50752
19227
19228         * class.cs: Add check for duplicate operators.  Fixes 52477
19229
19230 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19231
19232         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19233         that are in the middle of the statements, not only at the end.
19234         Fixes #54987
19235
19236         * class.cs (TypeContainer.AddField): No longer set the
19237         `HaveStaticConstructor' flag, now we call it
19238         `UserDefineStaticConstructor' to diferentiate the slightly
19239         semantic difference.
19240
19241         The situation is that we were not adding BeforeFieldInit (from
19242         Modifiers.TypeAttr) to classes that could have it.
19243         BeforeFieldInit should be set to classes that have no static
19244         constructor. 
19245
19246         See:
19247
19248         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
19249
19250         And most importantly Zoltan's comment:
19251
19252         http://bugzilla.ximian.com/show_bug.cgi?id=44229
19253
19254         "I think beforefieldinit means 'it's ok to initialize the type sometime 
19255          before its static fields are used', i.e. initialization does not need
19256          to be triggered by the first access to the type. Setting this flag
19257          helps the JIT to compile better code, since it can run the static
19258          constructor at JIT time, and does not need to generate code to call it
19259          (possibly lots of times) at runtime. Unfortunately, mcs does not set
19260          this flag for lots of classes like String. 
19261          
19262          csc sets this flag if the type does not have an explicit static 
19263          constructor. The reasoning seems to be that if there are only static
19264          initalizers for a type, and no static constructor, then the programmer
19265          does not care when this initialization happens, so beforefieldinit
19266          can be used.
19267          
19268          This bug prevents the AOT compiler from being usable, since it 
19269          generates so many calls to mono_runtime_class_init that the AOT code
19270          is much slower than the JITted code. The JITted code is faster, 
19271          because it does not generate these calls if the vtable is type is
19272          already initialized, which is true in the majority of cases. But the
19273          AOT compiler can't do this."
19274
19275 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
19276
19277         * class.cs (MethodData.Emit): Refactor the code so symbolic
19278         information is generated for destructors;  For some reasons we
19279         were taking a code path that did not generate symbolic information
19280         before. 
19281
19282 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
19283
19284         * class.cs: Create a Constructor.CheckBase method that
19285         takes care of all validation type code. The method
19286         contains some code that was moved from Define.
19287
19288         It also includes new code that checks for duplicate ctors.
19289         This fixes bug #55148.
19290
19291 2004-03-09  Joshua Tauberer <tauberer@for.net>
19292
19293         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
19294         a { ... }-style array creation invokes EmitStaticInitializers
19295         which is not good for reference-type arrays.  String, decimal
19296         and now null constants (NullCast) are not counted toward
19297         static initializers.
19298
19299 2004-03-05  Martin Baulig  <martin@ximian.com>
19300
19301         * location.cs (SourceFile.HasLineDirective): New public field;
19302         specifies whether the file contains or is referenced by a "#line"
19303         directive.
19304         (Location.DefineSymbolDocuments): Ignore source files which
19305         either contain or are referenced by a "#line" directive.        
19306
19307 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
19308
19309         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
19310         direct access to our parent, so check the method inline there.
19311
19312 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19313
19314         * expression.cs (Invocation.EmitCall): Miguel's last commit
19315         caused a regression. If you had:
19316
19317             T t = null;
19318             t.Foo ();
19319
19320         In Foo the implict this would be null.
19321
19322 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
19323
19324         * expression.cs (Invocation.EmitCall): If the method is not
19325         virtual, do not emit a CallVirt to it, use Call.
19326
19327         * typemanager.cs (GetFullNameSignature): Improve the method to
19328         cope with ".ctor" and replace it with the type name.
19329
19330         * class.cs (ConstructorInitializer.Resolve): Now the method takes
19331         as an argument the ConstructorBuilder where it is being defined,
19332         to catch the recursive constructor invocations.
19333
19334 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
19335
19336         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
19337         routines to check if a type is an enumerable/enumerator allow
19338         classes that implement the IEnumerable or IEnumerator interfaces.
19339
19340         * class.cs (Property, Operator): Implement IIteratorContainer, and
19341         implement SetYields.
19342
19343         (Property.Define): Do the block swapping for get_methods in the
19344         context of iterators.   We need to check if Properties also
19345         include indexers or not.
19346
19347         (Operator): Assign the Block before invoking the
19348         OperatorMethod.Define, so we can trigger the Iterator code
19349         replacement. 
19350
19351         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
19352         Property and Operator classes are not created when we parse the
19353         declarator but until we have the block completed, so we use a
19354         singleton SimpleIteratorContainer.Simple to flag whether the
19355         SetYields has been invoked.
19356
19357         We propagate this setting then to the Property or the Operator to
19358         allow the `yield' to function.
19359
19360 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
19361
19362         * codegen.cs: Implemented attribute support for modules.
19363         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
19364         Assembly/Module functionality.
19365
19366         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
19367         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
19368         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
19369
19370 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
19371
19372         * interface.cs (FindMembers): The operation is performed on all base
19373         interfaces and not only on the first. It is required for future CLS Compliance patch.
19374
19375 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
19376
19377         * statement.cs, codegen.cs:
19378         This patch deals with patterns such as:
19379
19380         public class List : IEnumerable {
19381
19382                 public MyEnumerator GetEnumerator () {
19383                         return new MyEnumerator(this);
19384                 }
19385
19386                 IEnumerator IEnumerable.GetEnumerator () {
19387                         ...
19388                 }
19389                 
19390                 public struct MyEnumerator : IEnumerator {
19391                         ...
19392                 }
19393         }
19394
19395         Before, there were a few things we did wrong:
19396         1) we would emit callvirt on a struct, which is illegal
19397         2) we emited ldarg when we needed to emit ldarga
19398         3) we would mistakenly call the interface methods on an enumerator
19399         type that derived from IEnumerator and was in another assembly. For example:
19400
19401         public class MyEnumerator : IEnumerator
19402
19403         Would have the interface methods called, even if there were public impls of the
19404         method. In a struct, this lead to invalid IL code.
19405
19406 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
19407
19408         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
19409           renamed to Emit.
19410
19411         * delegate.cs (Define): Fixed crash when delegate type is undefined.
19412
19413 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
19414
19415         * cs-parser.jay: Fix small regression: we were not testing V2
19416         compiler features correctly.
19417
19418         * interface.cs: If the emit context is null, then create one
19419
19420 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
19421
19422         * decl.cs (GetSignatureForError): New virtual method to get full name
19423           for error messages.
19424
19425         * attribute.cs (IAttributeSupport): New interface for attribute setting.
19426           Now it is possible to rewrite ApplyAttributes method to be less if/else.
19427
19428         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
19429           Duplicated members and code in these classes has been removed.
19430           Better encapsulation in these classes.
19431
19432 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
19433
19434         * assign.cs (Assign.DoResolve): When dealing with compound
19435         assignments, there is a new rule in ECMA C# 2.4 (might have been
19436         there before, but it is documented here) that states that in:
19437
19438         a op= b;
19439
19440         If b is of type int, and the `op' is a shift-operator, then the
19441         above is evaluated as:
19442
19443         a = (int) a op b 
19444
19445         * expression.cs (Binary.ResolveOperator): Instead of testing for
19446         int/uint/long/ulong, try to implicitly convert to any of those
19447         types and use that in pointer arithmetic.
19448
19449         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
19450         method to print information for from the type, not from the
19451         null-method we were given.
19452
19453 2004-02-01  Duncan Mak  <duncan@ximian.com>
19454
19455         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
19456         parsing for cmd, fixes bug #53694.
19457
19458 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
19459
19460         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
19461         in the member name duplication tests. Property and operator name duplication
19462         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
19463
19464 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
19465
19466         * interface.cs (PopulateMethod): Fixed crash when interface method
19467         returns not existing type (error test cs0246-3.cs).
19468
19469 2004-02-02  Ravi Pratap M <ravi@ximian.com>
19470
19471         * cs-parser.jay (interface_accessors): Re-write actions to also
19472         store attributes attached to get and set methods. Fix spelling
19473         while at it.
19474
19475         (inteface_property_declaration): Modify accordingly.
19476
19477         (InterfaceAccessorInfo): New helper class to store information to pass
19478         around between rules that use interface_accessors.
19479
19480         * interface.cs (Emit): Apply attributes on the get and set
19481         accessors of properties and indexers too.
19482
19483         * attribute.cs (ApplyAttributes): Modify accordingly to use the
19484         right MethodBuilder when applying attributes to the get and set accessors.
19485
19486 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
19487
19488         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
19489
19490 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
19491
19492         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
19493
19494 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
19495
19496         * cs-parser.jay: Remove YIELD token, instead use the new grammar
19497         changes that treat `yield' specially when present before `break'
19498         or `return' tokens.
19499
19500         * cs-tokenizer.cs: yield is no longer a keyword.
19501
19502 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
19503
19504         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
19505         setting for default constructors.
19506         For default constructors are almost every time set wrong Modifier. The
19507         generated IL code has been alright. But inside mcs this values was
19508         wrong and this was reason why several of my CLS Compliance tests
19509         failed.
19510
19511 2004-01-22  Martin Baulig  <martin@ximian.com>
19512
19513         * cs-parser.jay (namespace_or_type_name): Return an Expression,
19514         not a QualifiedIdentifier.  This is what `type_name_expression'
19515         was previously doing.
19516         (type_name_expression): Removed; the code is now in
19517         `namespace_or_type_name'.
19518         (qualified_identifier): Removed, use `namespace_or_type_name'
19519         instead.
19520         (QualifiedIdentifier): Removed this class.      
19521
19522 2004-01-22  Martin Baulig  <martin@ximian.com>
19523
19524         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
19525         not a string as alias name.
19526
19527 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
19528
19529         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
19530         #52730 bug, and instead compute correctly the need to use a
19531         temporary variable when requesting an address based on the
19532         static/instace modified of the field and the constructor.
19533  
19534 2004-01-21  Martin Baulig  <martin@ximian.com>
19535
19536         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
19537         class and namespace before looking up aliases.  Fixes #52517.
19538
19539 2004-01-21  Martin Baulig  <martin@ximian.com>
19540
19541         * flowanalysis.cs (UsageVector.Merge): Allow variables being
19542         assinged in a 'try'; fixes exception4.cs.
19543
19544 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19545         * class.cs : Implemented parameter-less constructor for TypeContainer
19546
19547         * decl.cs: Attributes are now stored here. New property OptAttributes
19548
19549         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
19550
19551         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
19552
19553 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19554
19555         * typemanager.cs (CSharpSignature): Now reports also inner class name.
19556           (CSharpSignature): New method for indexer and property signature.
19557
19558 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19559
19560         * pending.cs (IsVirtualFilter): Faster implementation.
19561
19562 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19563
19564         * typemanager.cs: Avoid inclusion of same assembly more than once.
19565
19566 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19567
19568         * cs-parser.jay: Fixed problem where the last assembly attribute
19569           has been applied also to following declaration (class, struct, etc.)
19570           
19571 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
19572
19573         * class.cs: Added error CS0538, CS0539 reporting.
19574         Fixed crash on Microsoft runtime when field type is void.
19575
19576         * cs-parser.jay: Added error CS0537 reporting.
19577
19578         * pending.cs: Added error CS0535 reporting.
19579         Improved error report for errors CS0536, CS0534.
19580
19581 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
19582
19583         Merge a few bits from the Anonymous Method MCS tree.
19584
19585         * statement.cs (ToplevelBlock): New class for toplevel methods,
19586         will hold anonymous methods, lifted variables.
19587
19588         * cs-parser.jay: Create toplevel blocks for delegates and for
19589         regular blocks of code. 
19590
19591 2004-01-20  Martin Baulig  <martin@ximian.com>
19592
19593         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
19594         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
19595         and `NeedExplicitReturn'; added `IsLastStatement'.
19596         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
19597         have a `ReturnLabel' or we're not unreachable.
19598
19599         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
19600         child's reachability; don't just override ours with it.  Fixes
19601         #58058 (lluis's example).
19602         (FlowBranching): Added public InTryOrCatch(), InCatch(),
19603         InFinally(), InLoop(), InSwitch() and
19604         BreakCrossesTryCatchBoundary() methods.
19605
19606         * statement.cs (Return): Do all error checking in Resolve().
19607         Unless we are the last statement in a top-level block, always
19608         create a return label and jump to it.
19609         (Break, Continue): Do all error checking in Resolve(); also make
19610         sure we aren't leaving a `finally'.
19611         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
19612         statement in a top-level block.
19613         (Block.Flags): Added `IsDestructor'.
19614         (Block.IsDestructor): New public property.
19615
19616 2004-01-20  Martin Baulig  <martin@ximian.com>
19617
19618         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
19619
19620 2004-01-20  Martin Baulig  <martin@ximian.com>
19621
19622         * statement.cs (Statement.ResolveUnreachable): New public method.
19623         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
19624         (Block.Resolve): Resolve unreachable statements.
19625
19626 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19627
19628         * expression.cs: We need to fix the case where we do
19629         not have a temp variable here.
19630
19631         * assign.cs: Only expression compound assignments need
19632         temporary variables.
19633
19634 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
19635
19636         * flowanalysis.cs: Reduce memory allocation in a few ways:
19637           - A block with no variables should not allocate a bit
19638             vector for itself.
19639           - A method with no out parameters does not need any tracking
19640             for assignment of the parameters, so we need not allocate
19641             any data for it.
19642           - The arrays:
19643                 public readonly Type[] VariableTypes;
19644                 public readonly string[] VariableNames;
19645             Are redundant. The data is already stored in the variable
19646             map, so we need not allocate another array for it.
19647           - We need to add alot of checks for if (params | locals) == null
19648             due to the first two changes.
19649
19650 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
19651
19652         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
19653         implement IMemoryLocation, we store a copy on a local variable and
19654         take the address of it.  Patch from Benjamin Jemlich
19655
19656         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
19657         to use a special "type_name_expression" rule which reduces the
19658         number of "QualifiedIdentifier" classes created, and instead
19659         directly creates MemberAccess expressions.
19660
19661 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
19662
19663         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
19664         that fixes #52853.  Null literal assignment to ValueType
19665
19666         * class.cs (MethodData.Emit): Instead of checking the name of the
19667         method to determine if its a destructor, create a new derived
19668         class from Method called Destructor, and test for that.  
19669
19670         * cs-parser.jay: Create a Destructor object instead of a Method.  
19671
19672         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
19673
19674         Fixes: 52933
19675
19676 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
19677
19678         * expression.cs (Binary.ResolveOperator): Perform an implicit
19679         conversion from MethodGroups to their delegate types on the
19680         Addition operation.
19681
19682         * delegate.cs: Introduce a new class DelegateCreation that is the
19683         base class for `NewDelegate' and `ImplicitDelegateCreation',
19684         factor some code in here.
19685
19686         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
19687         conversion from MethodGroups to compatible delegate types. 
19688
19689         * ecore.cs (Expression.Resolve): Do not flag error 654
19690         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
19691         we allow conversions from MethodGroups to delegate types now.
19692
19693         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
19694         assignments in v2 either.
19695
19696 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
19697
19698         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
19699         static read-only fields in ctors.
19700
19701         Applied patch from Benjamin Jemlich 
19702
19703         * expression.cs (UnaryMutator): Avoid leaking local variables. 
19704
19705 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
19706
19707         * cs-tokenizer.cs (IsCastToken): Allow the various native types
19708         here to return true, as they can be used like this:
19709
19710                 (XXX) int.MEMBER ()
19711
19712         Fixed 49836 and all the other dups
19713
19714 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
19715
19716         * driver.cs: Implement /win32res and /win32icon.
19717
19718 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
19719
19720         * cs-parser.jay: Add a rule to improve error handling for the
19721         common mistake of placing modifiers after the type.
19722
19723 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
19724
19725         * cs-parser.jay (interface_event_declaration): Catch
19726         initialization of events on interfaces, and report cs0068
19727
19728         * cs-parser.jay (interface_event_declaration): Catch
19729         initialization of events. 
19730
19731         * ecore.cs: Better report missing constructors.
19732
19733         * expression.cs (Binary.ResolveOperator): My previous bug fix had
19734         the error reporting done in the wrong place.  Fix.
19735
19736         * expression.cs (Binary.ResolveOperator): Catch the 
19737         operator + (E x, E y) error earlier, and later allow for implicit
19738         conversions in operator +/- (E e, U x) from U to the underlying
19739         type of E.
19740
19741         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
19742         52596, if the container class is abstract, the default constructor
19743         is protected otherwise its public (before, we were always public).
19744
19745         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
19746         fixed statement.
19747
19748         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
19749         Jemlich that fixes bug #52597, MCS was generating invalid code for
19750         idisposable structs.   Thanks to Ben for following up with this
19751         bug as well.
19752
19753 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
19754
19755         * driver.cs: Allow assemblies without code to be generated, fixes
19756         52230.
19757
19758 2004-01-07  Nick Drochak <ndrochak@gol.com>
19759
19760         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
19761
19762 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
19763
19764         * cs-parser.jay: Add rules to improve error reporting if fields or
19765         methods are declared at the namespace level (error 116)
19766
19767         * Add rules to catch event add/remove
19768
19769 2004-01-04  David Sheldon <dave-mono@earth.li>
19770
19771   * expression.cs: Added matching ")" to error message for 
19772   CS0077
19773
19774 2004-01-03 Todd Berman <tberman@gentoo.org>
19775
19776         * ecore.cs, attribute.cs:
19777         Applying fix from #52429.
19778
19779 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19780
19781         * ecore.cs, expression.cs, statement.cs:
19782         Total rewrite of how we handle branching. We
19783         now handle complex boolean expressions with fewer
19784         jumps. As well if (x == 0) no longer emits a ceq.
19785
19786         if (x is Foo) is much faster now, because we generate
19787         better code.
19788
19789         Overall, we get a pretty big improvement on our benchmark
19790         tests. The code we generate is smaller and more readable.
19791
19792         I did a full two-stage bootstrap. The patch was reviewed
19793         by Martin and Miguel.
19794
19795 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19796
19797         * cs-parser.jay: Make primary_expression not take a QI.
19798         we dont need this because the member_access rule covers
19799         us here. So we replace the rule with just IDENTIFIER.
19800
19801         This has two good effects. First, we remove a s/r conflict.
19802         Second, we allocate many fewer QualifiedIdentifier objects.
19803
19804 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19805
19806         * attribute.cs: Handle MarshalAs attributes as pseudo, and
19807         set the correct information via SRE. This prevents
19808         hanging on the MS runtime. Fixes #29374.
19809
19810 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
19811
19812         * convert.cs: correctly handle conversions to value types
19813         from Enum and ValueType as unboxing conversions.
19814
19815         Fixes bug #52569. Patch by Benjamin Jemlich.
19816
19817 2004-01-02  Ravi Pratap  <ravi@ximian.com>
19818
19819         * expression.cs (BetterConversion): Prefer int -> uint
19820         over int -> ulong (csc's behaviour). This fixed bug #52046.
19821
19822 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
19823
19824         * decl.cs (MemberCache.FindMembers): now returns a
19825         MemberInfo [].
19826
19827         * typemanager.cs: In general, go with with ^^.
19828         (CopyNewMethods): take an IList.
19829         (RealMemberLookup): Only allocate an arraylist
19830         if we copy from two sets of methods.
19831
19832         This change basically does two things:
19833         1) Fewer array lists allocated due to CopyNewMethods.
19834         2) the explicit cast in MemberList costed ALOT.
19835
19836 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
19837
19838         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
19839         a hashtable to avoid needless string allocations when an identifier is
19840         used more than once (the common case).
19841
19842 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19843
19844         * pending.cs: MS's TypeBuilder.GetInterfaces ()
19845         is broken, it will not return anything. So, we
19846         have to use the information we have in mcs to
19847         do the task.
19848
19849         * typemanager.cs: Add a cache for GetInterfaces,
19850         since this will now be used more often (due to ^^)
19851
19852         (GetExplicitInterfaces) New method that gets the
19853         declared, not effective, interfaces on a type
19854         builder (eg, if you have interface IFoo, interface
19855         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
19856         { IBar }.
19857
19858         This patch makes MCS able to bootstrap itself on
19859         Windows again.
19860
19861 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
19862
19863         * expression.cs: Remove the Nop's that Miguel put
19864         in by mistake.
19865
19866 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19867
19868         * report.cs, codegen.cs: Give the real stack trace to
19869         the error when an exception is thrown.
19870
19871 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19872
19873         * decl.cs: only allocate hashtables for ifaces if 
19874         it is an iface!
19875
19876 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
19877
19878         * expression.cs: fix the error from cs0121-2.cs
19879         (a parent interface has two child interfaces that
19880         have a function with the same name and 0 params
19881         and the function is called through the parent).
19882
19883 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
19884
19885         * class.cs, rootcontext.cs, typmanager.cs: do not
19886         leak pointers.
19887
19888 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19889
19890         * codegen.cs: remove stack for the ec flow branching.
19891         It is already a linked list, so no need.
19892
19893 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
19894
19895         * Makefile: Allow custom profiler here.
19896
19897 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19898
19899         * typemanager.cs (LookupType):
19900           - Use a static char [], because split takes
19901             a param array for args, so it was allocating
19902             every time.
19903           - Do not store true in a hashtable, it boxes.
19904
19905 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
19906
19907         * flowanalysis.cs: bytify common enums.
19908
19909 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19910
19911         * modifiers.cs: Add a new set of flags for the
19912         flags allowed on explicit interface impls.
19913         * cs-parser.jay: catch the use of modifiers in
19914         interfaces correctly.
19915         * class.cs: catch private void IFoo.Blah ().
19916
19917         All related to bug #50572.
19918
19919 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19920
19921         * decl.cs: Rewrite the consistant accessability checking.
19922         Accessability is not linear, it must be implemented in
19923         a tableish way. Fixes #49704.
19924
19925 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
19926
19927         * expression.cs: Handle negation in a checked context.
19928         We must use subtraction from zero. Fixes #38674.
19929
19930 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19931
19932         * class.cs: Ignore static void main in DLLs.
19933         * rootcontext.cs: Handle the target type here,
19934         since we are have to access it from class.cs
19935         * driver.cs: account for the above.
19936
19937 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19938
19939         * report.cs: Give line numbers and files if available.
19940
19941 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
19942
19943         * driver.cs: Implement /addmodule.
19944
19945         * typemanager.cs:  Change 'modules' field so it now contains Modules not
19946         ModuleBuilders.
19947
19948 2003-12-20  Martin Baulig  <martin@ximian.com>
19949
19950         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
19951         (FieldBase.IsAssigned): Removed this field.
19952         (FieldBase.SetAssigned): New public method.
19953         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
19954
19955 2003-12-20  Martin Baulig  <martin@ximian.com>
19956
19957         * expression.cs (LocalVariableReference.DoResolve): Don't set
19958         `vi.Used' if we're called from DoResolveLValue().
19959
19960         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
19961         returns the usage vector it just merged into the current one -
19962         pass this one to UsageWarning().
19963         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
19964         of the `EmitContext', don't call this recursively on our children.
19965
19966 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
19967
19968         * driver.cs: Implement /target:module.
19969
19970 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
19971
19972         * support.cs (CharArrayHashtable): New helper class.
19973
19974         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
19975         char arrays, not strings, so we can avoid creating a string in
19976         consume_identifier if the identifier is a keyword.
19977
19978 2003-12-16  Martin Baulig  <martin@ximian.com>
19979
19980         * statement.cs (LocalInfo.Assigned): Removed this property.
19981         (LocalInfo.Flags): Removed `Assigned'.
19982         (LocalInfo.IsAssigned): New public method; takes the EmitContext
19983         and uses flow analysis.
19984         (Block.UsageWarning): Made this method private.
19985         (Block.Resolve): Call UsageWarning() if appropriate.
19986
19987         * expression.cs (LocalVariableReference.DoResolve): Always set
19988         LocalInfo.Used here.
19989
19990 2003-12-13  Martin Baulig  <martin@ximian.com>
19991
19992         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
19993         any value here; we're now using flow analysis to figure out
19994         whether a statement/block returns a value.
19995
19996 2003-12-13  Martin Baulig  <martin@ximian.com>
19997
19998         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
19999         working again.
20000         (FlowBranching.MergeFinally): Don't call
20001         `branching.CheckOutParameters()' here, this is called in
20002         MergeTopBlock().
20003         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20004         when adding the `finally' vector.       
20005
20006 2003-12-13  Martin Baulig  <martin@ximian.com>
20007
20008         * flowanalysis.cs
20009         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20010         actually work and also fix #48962.
20011
20012 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20013
20014         * decl.cs: Do not check System.Object for nested types,
20015         since we know it does not have any. Big bang for buck:
20016
20017         BEFORE:
20018            Run 1:   8.35 seconds
20019            Run 2:   8.32 seconds
20020            corlib:  17.99 seconds
20021         AFTER:
20022            Run 1:   8.17 seconds
20023            Run 2:   8.17 seconds
20024            corlib:  17.39 seconds
20025
20026 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20027
20028         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20029         time we are returning 0 members, so we save alot here.
20030
20031 2003-12-11  Martin Baulig  <martin@ximian.com>
20032
20033         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20034         `MergeChild()', also just take the `FlowBranching' as argument;
20035         call Merge() on it and return the result.
20036         (FlowBranching.Merge): We don't need to do anything if we just
20037         have one sibling.
20038
20039 2003-12-11  Martin Baulig  <martin@ximian.com>
20040
20041         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20042         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20043         Maurer for this idea.
20044
20045 2003-12-11  Martin Baulig  <martin@ximian.com>
20046
20047         * flowanalysis.cs (MergeResult): This class is now gone; we now
20048         use the `UsageVector' for this.  The reason for this is that if a
20049         branching just has one sibling, we don't need to "merge" them at
20050         all - that's the next step to do.
20051         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20052         `MergeResult'.
20053
20054 2003-12-11  Martin Baulig  <martin@ximian.com>
20055
20056         Reworked flow analyis and made it more precise and bug-free.  The
20057         most important change is that we're now using a special `Reachability'
20058         class instead of having "magic" meanings of `FlowReturns'.  I'll
20059         do some more cleanups and optimizations and also add some more
20060         documentation this week.
20061
20062         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20063         largely reworked this class.
20064         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20065         the new `Reachability' class instead of having "magic" values here.
20066         (FlowBranching): We're now using an instance of `Reachability'
20067         instead of having separate `Returns', `Breaks' etc. fields.
20068
20069         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20070         based on flow analysis; ignore the return value of block.Emit ().
20071
20072 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20073
20074         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20075         if they are private.
20076
20077 2003-12-09  Martin Baulig  <martin@ximian.com>
20078
20079         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20080         call them directly on the UsageVector.
20081
20082 2003-12-09  Martin Baulig  <martin@ximian.com>
20083
20084         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20085         Changed return type from `FlowReturns' to `Reachability'.
20086
20087 2003-12-09  Martin Baulig  <martin@ximian.com>
20088
20089         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20090         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20091         `Reachable' fields with a single `Reachability' one.
20092
20093 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20094
20095         * class.cs (FindMembers): Remove foreach's.
20096
20097         Bootstrap times:
20098
20099         BEFORE
20100                 Run 1:   8.74 seconds
20101                 Run 2:   8.71 seconds
20102
20103         AFTER
20104                 Run 1:   8.64 seconds
20105                 Run 2:   8.58 seconds
20106
20107
20108 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20109
20110         * cs-parser.jay:
20111         * gen-treedump.cs:
20112         * statement.cs:
20113         This patch does a few things:
20114                 1. EmptyStatement is now a singleton, so it is never reallocated.
20115                 2. All blah is EmptyStatement constructs have been changed to
20116                    blah == EmptyStatement.Value, which is much faster and valid
20117                    now that EmptyStatement is a singleton.
20118                 3. When resolving a block, rather than allocating a new array for
20119                    the non-empty statements, empty statements are replaced with
20120                    EmptyStatement.Value
20121                 4. Some recursive functions have been made non-recursive.
20122         Mainly the performance impact is from (3), however (1) and (2) are needed for
20123         this to work. (4) does not make a big difference in normal situations, however
20124         it makes the profile look saner.
20125
20126         Bootstrap times:
20127
20128         BEFORE
20129         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20130         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20131         Total memory allocated: 56397 KB
20132
20133         AFTER
20134         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20135         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20136         Total memory allocated: 55666 KB
20137
20138 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20139
20140         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20141         than the hashtable in a hashtable version
20142
20143         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20144         we always end up concating a string. This results in a huge perf
20145         loss, because many strings have to be tracked by the GC. In this
20146         patch, we first use a hashtable that works with two keys, so that
20147         the strings do not need to be concat'ed.
20148
20149         Bootstrap times:
20150         BEFORE
20151                 Run 1:   8.74 seconds
20152                 Run 2:   8.71 seconds
20153
20154         AFTER
20155                 Run 1:   8.65 seconds
20156                 Run 2:   8.56 seconds
20157
20158 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20159
20160         * Makefile: Add a new target `do-time' that does a quick and simple
20161         profile, leaving easy to parse output.
20162
20163 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20164
20165         * codegen.cs (Init): Create the dynamic assembly with 
20166         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20167
20168 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20169
20170         * support.cs: Make the PtrHashtable use only one
20171         instance of its comparer.
20172
20173 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20174
20175         * typemanager.cs: Fix lookup of GetNamespaces.
20176
20177 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20178
20179         * expression.cs: Removed redundant line.
20180
20181         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20182         ArrayLists, use for loops with bounds.  
20183
20184         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20185         arraylist.
20186
20187         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20188         arraylists, use for loop with bounds.
20189
20190         The above three changes give us a 0.071 second performance
20191         improvement out of 3.294 seconds down to 3.223.  On my machine
20192         the above changes reduced the memory usage by 1,387 KB during
20193         compiler bootstrap.
20194
20195         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20196         QualifiedIdentifiers.  Before we created a new string through
20197         concatenation, and mostly later on, the result would be
20198         manipulated by DecomposeQI through string manipulation.
20199
20200         This reduced the compiler memory usage for bootstrapping from
20201         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20202         compile times in 0.05 seconds.
20203
20204 2003-11-28  Dick Porter  <dick@ximian.com>
20205
20206         * support.cs: Do string compares with the Invariant culture.
20207
20208         * rootcontext.cs: 
20209         * gen-treedump.cs: 
20210         * expression.cs: 
20211         * driver.cs: 
20212         * decl.cs: 
20213         * codegen.cs: 
20214         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20215         the comparison is done with the Invariant culture.
20216
20217 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20218
20219         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20220         GetEnumerator method.
20221
20222         (ProbeCollectionType): Iterate starting at the most specific type
20223         upwards looking for a GetEnumerator
20224
20225         * expression.cs: Shift count can be up to 31 for int/uint and 63
20226         for long/ulong.
20227
20228 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20229
20230         * statement.cs (Block.LookupLabel): Also look for the label on the
20231         children blocks.  Use a hash table to keep track of visited
20232         nodes. 
20233
20234         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20235         we actually did transform the other operand, otherwise fall back
20236         to the common codepath that casts to long.
20237
20238         * cs-tokenizer.cs: Use the same code pattern as the int case.
20239         Maybe I should do the parsing myself, and avoid depending on the
20240         Parse routines to get this done.
20241
20242 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20243
20244         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20245         which fixes bug 51347.  This time test it.
20246
20247         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
20248         attributes for example can not tell the difference between these.
20249         The difference was only a syntax feature of the language. 
20250
20251         * attribute.cs: Apply attributes to delegates.
20252
20253         * delegate.cs: Call the apply attributes method.
20254
20255 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
20256
20257         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
20258         comparing 0 vs Byte.MinValue, not the value
20259
20260         (ImplicitConversionRequired): When reporting a conversion error,
20261         use error 31 to print out the constant error instead of the
20262         simpler 29.
20263
20264         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20265         which fixes bug 51347.
20266
20267 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
20268
20269         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
20270         which fixes the -warnaserror command line option.
20271
20272 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
20273
20274         * cfold.cs (DoNumericPromotions): During constant folding of
20275         additions on UIntConstant, special case intconstants with
20276         IntConstants like we do on the expression binary operator. 
20277
20278 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
20279
20280         * convert.cs (ImplicitReferenceConversion): We were missing a case
20281         (System.Enum are not value types or class types, so we need to
20282         classify them separatedly).
20283
20284         * driver.cs: We do not support error 2007.
20285
20286 2003-11-12 Jackson Harper <jackson@ximian.com>
20287
20288         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
20289         system directory. Also use the full file name so users can
20290         libraries names mscorlib-o-tron.dll in a non system dir.
20291
20292 2003-11-10  Martin Baulig  <martin@ximian.com>
20293
20294         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
20295         (TypeManager.InitCoreTypes): Initialize them here, but instead of
20296         calling `ResolveType()' on them, directly assign their `Type'.
20297
20298 2003-11-08  Martin Baulig  <martin@ximian.com>
20299
20300         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
20301         return value and the `out parent' parameter.
20302         (TypeContainer.DefineType): Moved the CS0644 check into
20303         GetClassBases().  Don't pass the interface types to the
20304         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
20305         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
20306
20307         * ecore.cs (TypeExpr.IsAttribute): New property.
20308         (TypeExpr.GetInterfaces): New method.
20309
20310         * interface.cs (Interface.GetInterfaceTypeByName): Return a
20311         TypeExpr instead of a Type.
20312         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
20313         (Interface.DefineType): Don't pass the interface types to the
20314         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
20315         them later and then call `TypeBulider.AddInterfaceImplementation()'.
20316
20317         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
20318         instead of a `Type[]'.
20319         (TypeManager.RegisterBuilder): Likewise.
20320         (TypeManager.AddUserInterface): Likewise.
20321         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
20322         `Type[]' and also return a `TypeExpr[]'.
20323         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
20324
20325 2003-11-08  Martin Baulig  <martin@ximian.com>
20326
20327         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
20328         Expression.     
20329
20330 2003-11-08  Martin Baulig  <martin@ximian.com>
20331
20332         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
20333         TypeManager.ResolveExpressionTypes().
20334
20335         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
20336         instead of an Expression.
20337         (TypeExpr): This is now an abstract base class for `TypeExpression'.
20338         (TypeExpression): New public class; formerly known as `TypeExpr'.
20339
20340         * expression.cs (ComposedCast): Derive from TypeExpr.
20341
20342         * typemanager.cs (TypeManager.system_*_expr): These are now
20343         TypExpr's instead of Expression's.
20344         (TypeManager.ResolveExpressionTypes): New public static function;
20345         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
20346         of them.        
20347
20348 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
20349
20350         * expression.cs (New.DoResolve): Do not dereference value that
20351         might be a null return.
20352
20353         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
20354         sure that the constant value has the right type.  Fixes an
20355         unreported bug, similar to 50425.
20356
20357         * const.cs (Const.LookupConstantValue): Call
20358         ImplicitStandardConversionExists before doing a conversion to
20359         avoid havng the TypeManager.ChangeType do conversions.
20360
20361         Reduced the number of casts used
20362
20363         (Const.ChangeType): New routine to enable reuse of the constant
20364         type changing code from statement.
20365
20366         * typemanager.cs (ChangeType): Move common initialization to
20367         static global variables.
20368
20369         Fixes #50425.
20370
20371         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
20372         every value type to go through, even if it was void.  Fix that. 
20373
20374         * cs-tokenizer.cs: Use is_identifier_start_character on the start
20375         character of the define, and the is_identifier_part_character for
20376         the rest of the string.
20377
20378 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
20379
20380         * expression.cs (UnaryMutator.EmitCode): When I updated
20381         LocalVariableReference.DoResolve, I overdid it, and dropped an
20382         optimization done on local variable references.
20383
20384 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
20385
20386         * ecore.cs: Convert the return from Ldlen into an int.
20387
20388 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
20389
20390         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
20391         the accessibility, this is a special case for toplevel non-public
20392         classes (internal for instance).
20393
20394 2003-10-20  Nick Drochak <ndrochak@gol.com>
20395
20396         * ecore.cs: Fix typo and build.  Needed another right paren.
20397
20398 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
20399
20400         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
20401         `internal' case regular and protected, but not allowing protected
20402         to be evaluated later.  Bug 49840
20403
20404 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
20405
20406         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
20407         to kb.Nlast, and not the kb.nFirst to isolate the switch
20408         statement.
20409
20410         Extract the underlying type, so enumerations of long/ulong are
20411         treated like long/ulong.
20412
20413 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
20414
20415         * expression.cs (New): Overload the meaning of RequestedType to
20416         track the possible creation of the NewDelegate type, since
20417         DoResolve is invoked more than once for new constructors on field
20418         initialization.
20419
20420         See bugs: #48800 and #37014
20421
20422         * cs-parser.jay (declare_local_constants): Take an arraylist
20423         instead of a single constant.
20424
20425         (local_constant_declaration): It should take a
20426         constant_declarators, not a constant_declarator.  Fixes 49487
20427
20428         * convert.cs: Fix error report.
20429
20430 2003-10-13 Jackson Harper <jackson@ximian.com>
20431
20432         * typemanager.cs (TypeToCoreType): Add float and double this fixes
20433         bug #49611
20434
20435 2003-10-09  Martin Baulig  <martin@ximian.com>
20436
20437         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
20438         to the .ctor.
20439         (MethodCore.DoDefineParameters): Removed the TypeContainer
20440         argument; use the DeclSpace which was passed to the .ctor instead.
20441         (MethodCore.CheckParameter): Take a DeclSpace instead of a
20442         TypeContainer; we only need a DeclSpace here.
20443
20444 2003-10-09  Martin Baulig  <martin@ximian.com>
20445
20446         * class.cs (MethodData): Added additional `DeclSpace ds' argument
20447         to the .ctor.
20448         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
20449         EmitContext's .ctor.    
20450
20451 2003-10-09  Martin Baulig  <martin@ximian.com>
20452
20453         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
20454         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
20455         AsAccessible(), moved them as well.
20456
20457         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
20458
20459 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
20460
20461         * cs-parser.jay : Renamed yyName to yyNames related to jay.
20462
20463 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
20464
20465         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
20466         generation for >=, as spotted by Paolo, bug 48679.  
20467         Patch from David Waite.
20468
20469         * cs-tokenizer.cs: Add handling for #pragma.
20470
20471         * cs-parser.jay: Allow for both yield and yield return in the
20472         syntax.  The anti-cobolization of C# fight will go on!
20473
20474         * class.cs (TypeBuilder.DefineType): Catch error condition here
20475         (Parent.DefineType erroring out and returning null).
20476
20477         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
20478         coping with enumerations variables, we were mistakenly processing
20479         them as a regular value type instead of built-in types.  Fixes the
20480         bug #48063
20481
20482         * typemanager.cs (IsBuiltinOrEnum): New method.
20483
20484 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
20485
20486         * cs-parser.jay: Upgrade: yield now needs the return clause.
20487
20488 2003-09-19  Martin Baulig  <martin@ximian.com>
20489
20490         * decl.cs (MemberCache.SetupCacheForInterface): Take a
20491         `MemberCache parent' argument.  Normally, an interface doesn't
20492         have a parent type except System.Object, but we use this in gmcs
20493         for generic type parameters.
20494
20495 2003-09-18  Martin Baulig  <martin@ximian.com>
20496
20497         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
20498         on `type.IsInterface'; don't check whether the type has a parent
20499         to determine whether it's an interface.
20500
20501 2003-09-15  Martin Baulig  <martin@ximian.com>
20502
20503         * class.cs (TypeContainer.DefineType): Added an error flag to
20504         avoid reporting duplicate CS0146's ("class definition is
20505         circular.").
20506
20507         * driver.cs (Driver.MainDriver): Abort if
20508         RootContext.ResolveTree() reported any errors.
20509
20510 2003-09-07  Martin Baulig  <martin@ximian.com>
20511
20512         * report.cs (Error, Warning): Added overloaded versions which take
20513         a `params object[] args' and call String.Format().
20514
20515 2003-09-07  Martin Baulig  <martin@ximian.com>
20516
20517         * decl.cs (DeclSpace..ctor): Don't call
20518         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
20519         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
20520         (DeclSpace.RecordDecl): New method.
20521
20522         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
20523
20524 2003-09-02  Ravi Pratap  <ravi@ximian.com>
20525
20526         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
20527         value attributes to be applied to ParameterBuilders.
20528
20529         * class.cs (MethodCore.LabelParameters): Make static and more
20530         generic so that it can be used from other places - like interface
20531         methods, for instance.
20532
20533         * interface.cs (Interface.Emit): Call LabelParameters before
20534         emitting attributes on the InterfaceMethod.
20535
20536 2003-08-26  Martin Baulig  <martin@ximian.com>
20537
20538         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
20539         resolving aliases; fixes #47927.
20540
20541 2003-08-26  Martin Baulig  <martin@ximian.com>
20542
20543         * statement.cs (Using.DoResolve): This is internally emitting a
20544         try/finally clause, so we need to set ec.NeedExplicitReturn if we
20545         do not always return.  Fixes #47681.
20546
20547 2003-08-26  Martin Baulig  <martin@ximian.com>
20548
20549         * decl.cs (MemberCore): Moved WarningNotHiding(),
20550         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
20551         into MemberBase.
20552         (AdditionResult): Make this nested in DeclSpace.
20553         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
20554         argument; call NamespaceEntry.Define() unless we're nested in a
20555         class or struct.
20556
20557         * namespace.cs (Namespace.DefineName): New public function.  This
20558         is called from DeclSpace's .ctor to add 
20559         (Namespace.Lookup): Include DeclSpaces in the lookup.
20560
20561         * class.cs (Operator): Derive from MemberBase, not MemberCore.
20562
20563         * const.cs (Const): Derive from MemberBase, not MemberCore.     
20564
20565 2003-08-25  Martin Baulig  <martin@ximian.com>
20566
20567         * convert.cs (Convert.ExplicitReferenceConversion): When
20568         converting from an interface type to a class, unbox if the target
20569         type is a struct type.  Fixes #47822.
20570
20571 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
20572
20573         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
20574         #47854.
20575
20576 2003-08-22  Martin Baulig  <martin@ximian.com>
20577
20578         * class.cs (TypeManager.DefineType): When defining a nested type,
20579         call DefineType() on our parent; fixes #47801.
20580
20581 2003-08-22  Martin Baulig  <martin@ximian.com>
20582
20583         * class.cs (MethodData.Define): While checking if a method is an
20584         interface implementation, improve the test a bit more to fix #47654.
20585
20586 2003-08-22  Martin Baulig  <martin@ximian.com>
20587
20588         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
20589         correctly; fixes #47722.
20590
20591 2003-08-22  Martin Baulig  <martin@ximian.com>
20592
20593         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
20594         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
20595
20596         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
20597
20598 2003-08-22  Martin Baulig  <martin@ximian.com>
20599
20600         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
20601         can only be assigned in static constructors.  Fixes #47161.
20602
20603 2003-08-22  Martin Baulig  <martin@ximian.com>
20604
20605         Rewrote and improved the flow analysis code.
20606
20607         * flowbranching.cs (FlowBranching): Make this class abstract.
20608         (FlowBranching.CreateBranching): New static function to create a
20609         new flow branching.
20610         (FlowBranchingBlock, FlowBranchingException): New classes.
20611         (FlowBranching.UsageVector.Type): New public readonly field.
20612         (FlowBranching.UsageVector.Breaks): Removed the setter.
20613         (FlowBranching.UsageVector.Returns): Removed the setter.
20614         (FlowBranching.UsageVector): Added Break(), Return(),
20615         NeverReachable() and Throw() methods to modify the reachability.
20616         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
20617         done by FlowBranching.Merge().
20618         (FlowBranching.UsageVector.MergeChild): New method; merges the
20619         merge result into the current vector.
20620         (FlowBranching.Merge): New abstract method to merge a branching.
20621
20622 2003-08-12  Martin Baulig  <martin@ximian.com>
20623
20624         * expression.cs (Indirection.CacheTemporaries): Create the
20625         LocalTemporary with the pointer type, not its element type.
20626
20627 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
20628
20629         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
20630         token was a keyword or not.
20631
20632         Add `error' options where an IDENTIFIER was expected;  Provide
20633         CheckToken and CheckIdentifierToken convenience error reporting
20634         functions. 
20635
20636         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
20637
20638         * decl.cs: Rename `NamespaceEntry Namespace' public field into
20639         NameSpaceEntry NameSpaceEntry.
20640
20641         (LookupInterfaceOrClass): Avoid creating a full qualified name
20642         from namespace and name: avoid doing lookups when we know the
20643         namespace is non-existant.   Use new Tree.LookupByNamespace which
20644         looks up DeclSpaces based on their namespace, name pair.
20645
20646         * driver.cs: Provide a new `parser verbose' to display the
20647         exception thrown during parsing.  This is turned off by default
20648         now, so the output of a failure from mcs is more graceful.
20649
20650         * namespace.cs: Track all the namespaces defined in a hashtable
20651         for quick lookup.
20652
20653         (IsNamespace): New method
20654
20655 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
20656
20657         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
20658         we know that we need to concatenate (full typename can never be
20659         null). 
20660
20661         * class.cs: ditto.
20662
20663         * statement.cs: Use a bitfield;  Do not initialize to null things
20664         which are done by the constructor by default.
20665
20666         * cs-parser.jay: bug fix, parameter was 4, not 3.
20667
20668         * expression.cs: Just use the property;
20669
20670         * statement.cs: No need for GetVariableInfo method.
20671
20672 2003-08-08  Martin Baulig  <martin@ximian.com>
20673
20674         * flowanalysis.cs (FlowReturns): This is now nested in the
20675         `FlowBranching' class.
20676         (MyBitVector): Moved this here from statement.cs.
20677         (FlowBranching.SiblingType): New enum type.
20678         (FlowBranching.CreateSibling): Added `SiblingType' argument.
20679
20680 2003-08-07  Martin Baulig  <martin@ximian.com>
20681
20682         * flowanalysis.cs (FlowBranchingType): This is now nested in the
20683         `FlowBranching' class and called `BranchingType'.
20684
20685 2003-08-07  Martin Baulig  <martin@ximian.com>
20686
20687         * flowanalysis.cs: Moved all the control flow analysis code into
20688         its own file.
20689
20690 2003-08-07  Martin Baulig  <martin@ximian.com>
20691
20692         * assign.cs (Assign.DoResolve): `target' must either be an
20693         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
20694         #37319.
20695
20696 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
20697
20698         * expression.cs (BinaryMethod): This kind of expression is created by the
20699         Binary class if it determines that the operator has to be handled
20700         by a method.
20701
20702         (BinaryDelegate): This kind of expression is created if we are
20703         dealing with a + or - operator on delegates.
20704
20705         (Binary): remove method, argumetns, and DelegateOperator: when
20706         dealing with methods, 
20707
20708         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
20709
20710         * statement.cs (Block): use bitfields for the three extra booleans
20711         we had in use.   Remove unused topblock parameter.
20712
20713         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
20714
20715         * assign.cs: Drop extra unneeded tests.
20716
20717 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
20718
20719         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
20720
20721         * statement.cs (Foreach): Use VariableStorage instead of
20722         LocalBuilders.   
20723
20724         * codegen.cs (VariableStorage): New class used by clients that
20725         require a variable stored: locals or fields for variables that
20726         need to live across yield.
20727
20728         Maybe provide a convenience api for EmitThis+EmitLoad?
20729
20730         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
20731         these bad boys.
20732
20733 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
20734
20735         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
20736         RemapParameterLValue): New methods that are used to turn a
20737         precomputed FieldInfo into an expression like this:
20738
20739                 instance.FieldInfo
20740
20741         The idea is to use this instead of making LocalVariableReference
20742         have more than one meaning.
20743
20744         * cs-parser.jay: Add error production to BASE.
20745
20746         * ecore.cs: Deal with TypeManager.GetField returning null, which
20747         is now a valid return value.
20748
20749         (FieldExprNoAddress): New expression for Fields whose address can
20750         not be taken.
20751
20752         * expression.cs (LocalVariableReference): During the resolve
20753         phases, create new expressions if we are in a remapping context.
20754         Remove code that dealt with remapping here.
20755
20756         (ParameterReference): same.
20757
20758         (ProxyInstance): New expression, like the `This' expression, but
20759         it is born fully resolved.  We know what we are doing, so remove
20760         the errors that are targeted to user-provided uses of `this'.
20761
20762         * statement.cs (Foreach): our variable is now stored as an
20763         Expression;  During resolution, follow the protocol, dont just
20764         assume it will return this.
20765
20766 2003-08-06  Martin Baulig  <martin@ximian.com>
20767
20768         * support.cs (SeekableStreamReader.cs): New public class.
20769
20770         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
20771         SeekableStreamReader instead of the normal StreamReader.
20772
20773 2003-08-04  Martin Baulig  <martin@ximian.com>
20774
20775         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
20776         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
20777         deambiguate casts and delegate invocations.
20778         (parenthesized_expression): Use the new tokens to ensure this is
20779         not a cast of method invocation.
20780
20781         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
20782         when reading a `)' and Deambiguate_CloseParens () was previously
20783         called.
20784
20785         * expression.cs (ParenthesizedExpression): New class.  This is
20786         just used for the CS0075 test.
20787         (Binary.DoResolve): Check for CS0075.   
20788
20789 2003-07-29  Ravi Pratap  <ravi@ximian.com>
20790
20791         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
20792         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
20793         reference comparison.
20794
20795         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
20796         examine the ReturnType for equality - this is necessary in the
20797         cases of implicit and explicit operators whose signature also
20798         includes the return type.
20799
20800 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
20801
20802         * namespace.cs: Cache the result of the namespace computation,
20803         instead of computing it every time.
20804
20805 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
20806
20807         * decl.cs: Use a global arraylist that we reuse over invocations
20808         to avoid excesive memory consumption.  Reduces memory usage on an
20809         mcs compile by one meg (45 average).
20810
20811         * typemanager.cs (LookupTypeReflection): In .NET pointers are
20812         private, work around that.
20813
20814 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
20815
20816         * literal.cs (IntLiteral): Define Zero and One static literals. 
20817
20818         * cs-parser.jay (integer_literal): use static literals to reduce
20819         memory usage for the most used literals (0, 1 and -1).  211kb
20820         reduced in memory usage.
20821
20822         Replace all calls to `new ArrayList' with `new
20823         ArrayList(4)' which is a good average number for most allocations,
20824         and also requires only 16 bytes of memory for its buffer by
20825         default. 
20826
20827         This reduced MCS memory usage in seven megabytes for the RSS after
20828         bootstrapping.
20829
20830 2003-07-28  Ravi Pratap  <ravi@ximian.com>
20831
20832         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
20833         handle params methods the correct way by forming only one
20834         applicable set with params and normal methods in them. Earlier we
20835         were looking at params methods only if we found no normal methods
20836         which was not the correct thing to do.
20837
20838         (Invocation.BetterFunction): Take separate arguments indicating
20839         when candidate and the best method are params methods in their
20840         expanded form.
20841
20842         This fixes bugs #43367 and #46199.
20843
20844         * attribute.cs: Documentation updates.
20845
20846         (CheckAttribute): Rename to CheckAttributeTarget.
20847         (GetValidPlaces): Rename to GetValidTargets.
20848
20849         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
20850         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
20851
20852         Fixes bug #44468.
20853
20854 2003-07-28  Martin Baulig  <martin@ximian.com>
20855
20856         * class.cs (TypeContainer.DefineMembers): Use the base type's full
20857         name when looking up the base class of a nested class.  Fixes #46977.
20858
20859 2003-07-26  Martin Baulig  <martin@ximian.com>
20860
20861         * expression.cs (Indexers.Indexer): New nested struct; contains
20862         getter, setter and the indexer's type.
20863         (Indexers.Properties): This is now an ArrayList of
20864         Indexers.Indexer's.
20865         (IndexerAccess.DoResolveLValue): Correctly set the type if the
20866         indexer doesn't have any getters.
20867
20868         * assign.cs (Assign.DoResolve): Also do the implicit conversions
20869         for embedded property and indexer assignments.
20870
20871 2003-07-26  Martin Baulig  <martin@ximian.com>
20872
20873         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
20874         preprocessor directive is not the first non-whitespace character
20875         on a line.
20876
20877 2003-07-26  Martin Baulig  <martin@ximian.com>
20878
20879         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
20880         namespace parsing, follow the spec more closely.
20881
20882         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
20883         NamespaceEntry.Lookup().
20884
20885 2003-07-25  Martin Baulig  <martin@ximian.com>
20886
20887         * MethodCore.cs (OverridesSomething): New public field; it's set
20888         from TypeContainer.DefineMembers if this method overrides
20889         something (which doesn't need to be a method).  Fix #39462.
20890
20891 2003-07-25  Ravi Pratap  <ravi@ximian.com>
20892
20893         * typemanager.cs (GetMembers): Ensure that the list of members is
20894         reversed. This keeps things in sync.
20895
20896         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
20897         find an AttributeUsage attribute.
20898
20899         * expression.cs (Invocation.OverloadResolve): Perform the check
20900         which disallows Invoke to be directly called on a Delegate.
20901
20902         (Error_InvokeOnDelegate): Report error cs1533.
20903
20904 2003-07-25  Martin Baulig  <martin@ximian.com>
20905
20906         * expression.cs (Indexers.GetIndexersForType): Only look in the
20907         interface hierarchy if the requested type is already an
20908         interface.  Fixes #46788 while keeping #46502 fixed.
20909
20910 2003-07-25  Martin Baulig  <martin@ximian.com>
20911
20912         * class.cs (TypeContainer.DefineMembers): Check whether all
20913         readonly fields have been assigned and report warning CS0649 if
20914         not.
20915
20916         * statement.cs (LocalInfo.IsFixed): Always return true if this is
20917         a valuetype.
20918
20919 2003-07-24  Ravi Pratap  <ravi@ximian.com>
20920
20921         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
20922         returned from GetMethods to make things consistent with the
20923         assumptions MCS makes about ordering of methods.
20924
20925         This should comprehensively fix bug #45127 and it does :-)
20926
20927         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
20928         ordering is actually reverse.
20929
20930         * Clean up some debug messages I left lying around.
20931
20932         * interface.cs (Populate*): Get rid of code which emits attributes
20933         since the stage in which we emit attributes is the 'Emit' stage,
20934         not the define stage.
20935
20936         (Emit): Move attribute emission for interface members here.
20937
20938 2003-07-22  Ravi Pratap  <ravi@ximian.com>
20939
20940         * expression.cs (Invocation.OverloadResolve): Follow the spec more
20941         closely: we eliminate methods in base types when we have an
20942         applicable method in a top-level type.
20943
20944         Please see section 14.5.5.1 for an exact description of what goes
20945         on. 
20946
20947         This fixes bug #45127 and a host of other related to corlib compilation.
20948
20949         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
20950         array is the method corresponding to the top-level type (this is
20951         because of the changes made to icall.c) so we change this
20952         accordingly.
20953
20954         (MethodGroupExpr.Name): This too.
20955
20956         * typemanager.cs (GetElementType): New method which does the right
20957         thing when compiling corlib. 
20958
20959         * everywhere: Make use of the above in the relevant places.
20960
20961 2003-07-22  Martin Baulig  <martin@ximian.com>
20962
20963         * cs-parser.jay (invocation_expression): Moved
20964         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
20965         `cast_expression', but create a InvocationOrCast which later
20966         resolves to either an Invocation or a Cast.
20967
20968         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
20969         method; call this before EmitStatement() to make sure that this
20970         expression can be used as a statement.
20971
20972         * expression.cs (InvocationOrCast): New class; resolves to either
20973         an Invocation or a Cast.
20974
20975         * statement.cs (StatementExpression): Call ResolveStatement() on
20976         the ExpressionStatement before emitting it.
20977
20978 2003-07-21  Martin Baulig  <martin@ximian.com>
20979
20980         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
20981         `ref' and `out' attributes match; fixes #46220.
20982         (MemberAccess.ResolveMemberAccess): You can't reference a type
20983         through an expression; fixes #33180.
20984         (Indexers.GetIndexersForType): Don't return the indexers from
20985         interfaces the class implements; fixes #46502.
20986
20987 2003-07-21  Martin Baulig  <martin@ximian.com>
20988
20989         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
20990         CS0661 checks; fixes bug #30442.
20991
20992 2003-07-21  Martin Baulig  <martin@ximian.com>
20993
20994         * decl.cs (AdditionResult): Added `Error'.
20995
20996         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
20997
20998         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
20999         makes cs0031.cs actually work.
21000
21001 2003-07-20  Martin Baulig  <martin@ximian.com>
21002
21003         * namespace.cs: Fixed that bug which caused a crash when compiling
21004         the debugger's GUI.
21005
21006 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21007
21008         * typemanager.cs (LookupTypeReflection): Never expose types which
21009         are NotPublic, NestedPrivate, NestedAssembly, or
21010         NestedFamANDAssem.  We used to return these, and later do a check
21011         that would report a meaningful error, but the problem is that we
21012         would not get the real match, if there was a name override.
21013
21014 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21015
21016         * namespace.cs (Namespace, Name): Do not compute the namespace
21017         name dynamically, compute it in the constructor.  This reduced
21018         memory usage by 1697 KB.
21019
21020         * driver.cs: Use --pause to pause at the end.
21021
21022 2003-07-17  Peter Williams  <peter@newton.cx>
21023
21024         * Makefile: Change the name of the test target so that it doesn't
21025         conflict with the recursive test target.
21026
21027 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21028
21029         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21030         AddressOf): Do not use EmitThis, that was wrong, use the actual
21031         this pointer.
21032
21033 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21034
21035         * class.cs (MethodData.Define): While checking if a method is an
21036         interface implementation, improve the test: If we are not public
21037         (use new test here: use the computed MethodAttributes directly,
21038         instead of the parsed modifier flags) check if the `implementing'
21039         method comes from an interface or not.
21040
21041         * pending.cs (VerifyPendingMethods): Slightly better error
21042         message.
21043
21044         * makefile: add test target that does the mcs bootstrap.
21045
21046 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21047
21048         * interface.cs (Define): Do nothing here since there are no
21049         members to populate etc. Move the attribute emission out of here
21050         since this was just totally the wrong place to put it. Attribute
21051         application happens during the 'Emit' phase, not in the 'Define'
21052         phase.
21053
21054         (Emit): Add this method and move the attribute emission here
21055
21056         * rootcontext.cs (EmitCode): Call the Emit method on interface
21057         types too.
21058
21059 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21060
21061         * expression.cs (OverloadResolve): Report error only if Location
21062         is not 'Null' which means that there was a probe going on.
21063
21064 2003-07-14  Martin Baulig  <martin@ximian.com>
21065
21066         * expression.cs (ConditionalLogicalOperator): New public class to
21067         implement user defined conditional logical operators.
21068         This is section 14.11.2 in the spec and bug #40505.
21069
21070 2003-07-14  Martin Baulig  <martin@ximian.com>
21071
21072         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21073
21074 2003-07-14  Martin Baulig  <martin@ximian.com>
21075
21076         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21077
21078         * ecore.cs (IVariable.VerifyFixed): New interface method.
21079
21080         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21081         operator, check whether the variable is actually fixed.  Fixes bug
21082         #36055.  Set a variable definitely assigned when taking its
21083         address as required by the spec.
21084
21085         * statement.cs (LocalInfo.IsFixed): New field.
21086         (LocalInfo.MakePinned): Set `IsFixed' to true.
21087
21088 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21089
21090         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21091         for .ctors, ensure that we only ask for members declared in the
21092         attribute type (BindingFlags.DeclaredOnly).
21093
21094         Fixes bug #43632.
21095
21096         * expression.cs (Error_WrongNumArguments): Report error 1501
21097         correctly the way CSC does.
21098
21099 2003-07-13  Martin Baulig  <martin@ximian.com>
21100
21101         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21102         lookup on the fully qualified name, to make things like "X.X" work
21103         where "X.X" is a fully qualified type name, but we also have a
21104         namespace "X" in the using list.  Fixes #41975.
21105
21106 2003-07-13  Martin Baulig  <martin@ximian.com>
21107
21108         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21109         function. If we're a CompoundAssign, we need to create an embedded
21110         CompoundAssign, not an embedded Assign.
21111         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21112         Fixes #45854.
21113
21114 2003-07-13  Martin Baulig  <martin@ximian.com>
21115
21116         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21117         work to fix bug #46088.
21118
21119 2003-07-13  Ravi Pratap <ravi@ximian.com>
21120
21121         * class.cs (Operator.Emit): Do not emit attributes here - it is
21122         taken care of by the Method class that we delegate too. This takes
21123         care of bug #45876.
21124
21125 2003-07-10  Martin Baulig  <martin@ximian.com>
21126
21127         * expression.cs (TypeOfVoid): New class.
21128         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21129
21130 2003-07-10  Martin Baulig  <martin@ximian.com>
21131
21132         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21133         bug #35957.
21134
21135 2003-07-10  Martin Baulig  <martin@ximian.com>
21136
21137         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21138         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21139
21140         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21141
21142         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21143
21144 2003-07-10  Martin Baulig  <martin@ximian.com>
21145
21146         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21147         of decimal.  Fixes #42850.
21148
21149         NOTE: I also fixed the created byte blob, but this doesn't work on
21150         the MS runtime and csc never produces any byte blobs for decimal
21151         arrays.
21152
21153 2003-07-10  Martin Baulig  <martin@ximian.com>
21154
21155         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21156         structs; fixes #32068.
21157         (Block.AddChildVariableNames): Fixed #44302.
21158
21159 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21160
21161         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21162
21163 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21164
21165         * attribute.cs: And this test is onger needed.
21166
21167 2003-07-08  Martin Baulig  <martin@ximian.com>
21168
21169         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21170         inaccessible types.  Fixes #36313.
21171
21172         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21173
21174         * namespace.cs (NamespaceEntry): Create implicit entries for all
21175         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21176         implicit entries for N1.N2 and N1.
21177
21178 2003-07-08  Martin Baulig  <martin@ximian.com>
21179
21180         Rewrote the handling of namespaces to fix a lot of the issues
21181         wrt. `using' aliases etc.
21182
21183         * namespace.cs (Namespace): Splitted this class into a
21184         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21185
21186         * typemanager.cs (TypeManager.IsNamespace): Removed.
21187         (TypeManager.ComputeNamespaces): Only compute namespaces from
21188         loaded assemblies here, not the namespaces from the assembly we're
21189         currently compiling.
21190
21191 2003-07-08  Martin Baulig  <martin@ximian.com>
21192
21193         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21194
21195 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21196
21197         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21198         already fixed it.  
21199
21200         I thought about the memory savings here, but LookupTypeReflection
21201         is used under already very constrained scenarios.  Compiling
21202         corlib or mcs only exposes one hit, so it would not really reduce
21203         any memory consumption.
21204
21205 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21206
21207         * typemanager.cs: fixes bug #45889 by only adding public types from
21208         other assemblies to the list of known types.
21209
21210 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21211
21212         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21213         on the type we resolved.
21214
21215 2003-07-05  Martin Baulig  <martin@ximian.com>
21216
21217         * pending.cs (PendingImplementation.ParentImplements): Don't
21218         create the proxy if the parent is abstract.
21219
21220         * class.cs (TypeContainer.DefineIndexers): Process explicit
21221         interface implementations first.  Fixes #37714.
21222
21223 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21224
21225         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21226         defined recursively;  but since we modify the input parameters
21227         (left is set to `this' temporarily), we reset this value if the
21228         left_is_explicit is false, which gives the original semantics to
21229         the code.  
21230
21231         * literal.cs (NullPointer): new class used to represent a null
21232         literal in a pointer context.
21233
21234         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21235         type is a pointer, use a NullPointer object instead of a
21236         NullLiteral.   Closes 43687
21237
21238         (ExplicitConversion): Convert pointer values using
21239         the conv opcode to the proper type.
21240
21241         * ecore.cs (New): change ValueTypeVariable property into a method,
21242         that returns whether the valuetype is suitable for being used.
21243
21244         * expression.cs (Binary.DoNumericPromotions): Only return if we
21245         the int constant was a valid uint, and we can return both left and
21246         right as uints.  If not, we continue processing, to trigger the
21247         type conversion.  This fixes 39018.
21248
21249         * statement.cs (Block.EmitMeta): During constant resolution, set
21250         the CurrentBlock property on the emitcontext, so that we resolve
21251         constants propertly.
21252
21253 2003-07-02  Martin Baulig  <martin@ximian.com>
21254
21255         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
21256         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
21257
21258         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
21259         than emitting it here.
21260
21261         * statement.cs: Fixed some more flow analysis bugs.
21262
21263 2003-07-02  Martin Baulig  <martin@ximian.com>
21264
21265         * class.cs (MethodData.Define): When implementing interface
21266         methods, set Final unless we're Virtual.
21267
21268         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
21269         check work for interface methods.
21270
21271 2003-07-01  Martin Baulig  <martin@ximian.com>
21272
21273         * ecore.cs (EmitContext.This): Replaced this property with a
21274         GetThis() method which takes a Location argument.  This ensures
21275         that we get the correct error location for a CS0188.
21276
21277 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
21278
21279         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
21280         ImplicitStandardConversion.
21281
21282         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
21283
21284 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
21285
21286         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
21287         optimization.
21288
21289 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
21290
21291         * class.cs (Constructor.Define): Turn off initlocals for unsafe
21292         constructors.
21293
21294         (MethodData.Define): Turn off initlocals for unsafe methods.
21295
21296 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
21297
21298         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
21299         complete;  Fixes #37521.
21300
21301         * delegate.cs: Use Modifiers.TypeAttr to compute the
21302         TypeAttributes, instead of rolling our own.  This makes the flags
21303         correct for the delegates.
21304
21305 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
21306
21307         * class.cs (Constructor.Define): Set the private flag for static
21308         constructors as well.
21309
21310         * cs-parser.jay (statement_expression): Set the return value to
21311         null, to avoid a crash when we catch an error.
21312
21313 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
21314
21315         * cs-parser.jay: Applied patch from Jackson that adds support for
21316         extern and unsafe modifiers to destructor declarations.
21317
21318         * expression.cs: Report error 21 if the user is trying to index a
21319         System.Array.
21320
21321         * driver.cs: Add an error message, suggested by the bug report.
21322
21323         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
21324         if we do not have a ": this ()" constructor initializer.  Fixes 45149
21325
21326 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
21327
21328         * namespace.cs: Add some information to reduce FAQs.
21329
21330 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
21331
21332         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
21333         underlying enumeration types.  Fixes #43915.
21334
21335         * expression.cs: Treat ushort/short as legal values to be used in
21336         bitwise operations.
21337
21338 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
21339
21340         * delegate.cs: transfer custom attributes for paramenters from
21341         the delegate declaration to Invoke and BeginInvoke.
21342
21343 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
21344
21345         * attribute.cs: handle custom marshalers and emit marshal info
21346         for fields, too.
21347
21348 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
21349
21350         * makefile.gnu: Added anonymous.cs to the compiler sources.
21351
21352 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
21353
21354         * iterators.cs: Change the name of the proxy class to include two
21355         underscores.
21356
21357         * cs-parser.jay: Update grammar to include anonymous methods.
21358
21359         * anonymous.cs: new file.
21360
21361 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
21362
21363         * class.cs (Field.Define): Add missing test for pointers and
21364         safety. 
21365
21366 2003-05-27  Ravi Pratap  <ravi@ximian.com>
21367
21368         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
21369         we use the stobj opcode.
21370
21371         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
21372         since it wasn't the correct fix. 
21373
21374         It still is puzzling that we are required to use stobj for IntPtr
21375         which seems to be a ValueType.
21376
21377 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
21378
21379         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
21380         during regular simple name resolution.   Now, the trick is that
21381         instead of returning for processing the simplename, we do a
21382         TypeManager.LookupType (ie, a rooted lookup as opposed to a
21383         contextual lookup type).   If a match is found, return that, if
21384         not, return for further composition.
21385
21386         This fixes long-standing 30485.
21387
21388         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21389         using the address to initialize an object, do an Stobj instead of
21390         using the regular Stelem.
21391
21392         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
21393         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
21394         Because if we are a BaseIndexerAccess that value will be true.
21395         Fixes 43643.
21396
21397         * statement.cs (GotoCase.Resolve): Return after reporting an
21398         error, do not attempt to continue. 
21399
21400         * expression.cs (PointerArithmetic.Emit): If our operand is a
21401         long, convert our constants to match the operand before
21402         multiplying.  Convert to I type before adding.   Fixes 43670.
21403
21404 2003-05-14  Ravi Pratap  <ravi@ximian.com>
21405
21406         * enum.cs (ImplicitConversionExists) : Rename to
21407         ImplicitEnumConversionExists to remove ambiguity. 
21408
21409         * ecore.cs (NullCast): New type of cast expression class which
21410         basically is very similar to EmptyCast with the difference being
21411         it still is a constant since it is used only to cast a null to
21412         something else
21413         (eg. (string) null)
21414
21415         * convert.cs (ImplicitReferenceConversion): When casting a null
21416         literal, we return a NullCast.
21417
21418         * literal.cs (NullLiteralTyped): Remove - I don't see why this
21419         should be around anymore.
21420
21421         The renaming (reported was slightly wrong). Corrections:
21422
21423         ConvertImplicitStandard -> ImplicitConversionStandard
21424         ConvertExplicitStandard -> ExplicitConversionStandard
21425
21426         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
21427         before passing them in !
21428
21429         * convert.cs (ImplicitConversionStandard): When comparing for
21430         equal expr and target types, ensure that expr is not a
21431         NullLiteral.
21432
21433         In general, we must not be checking (expr_type ==
21434         target_type) in the top level conversion methods
21435         (ImplicitConversion, ExplicitConversion etc). This checking is
21436         done in the methods that they delegate to.
21437
21438 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
21439
21440         * convert.cs: Move Error_CannotConvertType,
21441         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
21442         ImplicitNumericConversion, ImplicitConversionExists,
21443         ImplicitUserConversionExists, StandardConversionExists,
21444         FindMostEncompassedType, FindMostSpecificSource,
21445         FindMostSpecificTarget, ImplicitUserConversion,
21446         ExplicitUserConversion, GetConversionOperators,
21447         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
21448         TryImplicitIntConversion, Error_CannotConvertImplicit,
21449         ConvertImplicitRequired, ConvertNumericExplicit,
21450         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
21451         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
21452         its own file.
21453
21454         Perform the following renames:
21455
21456         StandardConversionExists -> ImplicitStandardConversionExists
21457         ConvertImplicit -> ImplicitConversion
21458         ConvertImplicitStandard -> ImplicitStandardConversion
21459         TryImplicitIntConversion -> ImplicitIntConversion
21460         ConvertImplicitRequired -> ImplicitConversionRequired
21461         ConvertNumericExplicit -> ExplicitNumericConversion
21462         ConvertReferenceExplicit -> ExplicitReferenceConversion
21463         ConvertExplicit -> ExplicitConversion
21464         ConvertExplicitStandard -> ExplicitStandardConversion
21465
21466 2003-05-19  Martin Baulig  <martin@ximian.com>
21467
21468         * statement.cs (TypeInfo.StructInfo): Made this type protected.
21469         (TypeInfo): Added support for structs having structs as fields.
21470
21471         * ecore.cs (FieldExpr): Implement IVariable.
21472         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
21473         VariableInfo for the field.
21474
21475 2003-05-18  Martin Baulig  <martin@ximian.com>
21476
21477         * expression.cs (This.DoResolve): Report a CS0027 if we're
21478         emitting a field initializer.
21479
21480 2003-05-18  Martin Baulig  <martin@ximian.com>
21481
21482         * expression.cs (This.ResolveBase): New public function.
21483         (This.DoResolve): Check for CS0188.
21484
21485         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
21486         This.Resolve().
21487
21488         * ecore.cs (MethodGroupExpr.DoResolve): Set the
21489         `instance_expression' to null if we don't have any non-static
21490         methods.
21491
21492 2003-05-18  Martin Baulig  <martin@ximian.com>
21493
21494         Reworked the way how local variables and parameters are handled by
21495         the flow analysis code.
21496
21497         * statement.cs (TypeInfo, VariableMap): New public classes.
21498         (VariableInfo): New public class.  This is now responsible for
21499         checking whether a variable has been assigned.  It is used for
21500         parameters and local variables.
21501         (Block.EmitMeta): Take the InternalParameters as argument; compute
21502         the layout of the flow vectors here.
21503         (Block.LocalMap, Block.ParameterMap): New public properties.
21504         (FlowBranching): The .ctor doesn't get the InternalParameters
21505         anymore since Block.EmitMeta() now computes the layout of the flow
21506         vector.
21507         (MyStructInfo): This class is now known as `StructInfo' and nested
21508         in `TypeInfo'; we don't access this directly anymore.
21509
21510         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
21511         property and removed IsAssigned(), IsFieldAssigned(),
21512         SetAssigned() and SetFieldAssigned(); we now call them on the
21513         VariableInfo so we don't need to duplicate this code everywhere.
21514
21515         * expression.cs (ParameterReference): Added `Block block' argument
21516         to the .ctor.
21517         (LocalVariableReference, ParameterReference, This): The new
21518         VariableInfo class is now responsible for all the definite
21519         assignment stuff.
21520
21521         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
21522         IsParameterAssigned, SetParameterAssigned): Removed.
21523
21524 2003-05-18  Martin Baulig  <martin@ximian.com>
21525
21526         * typemanager.cs (InitCoreTypes): Try calling
21527         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
21528         the 3-args-version.  Corlib now also needs our `void_type'.
21529         (GetMethod): Added overloaded version which takes an optional
21530         `bool report_errors' to allow lookups of optional methods.
21531
21532 2003-05-12  Martin Baulig  <martin@ximian.com>
21533
21534         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
21535         only used for locals and not for parameters.
21536
21537 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
21538
21539         * support.cs (InternalParameters.ParameterType): Return the
21540         ExternalType of the parameter.
21541
21542         * parameter.cs (Parameter.ExternalType): drop the two arguments,
21543         they were unused.
21544
21545 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
21546
21547         * class.cs (MethodData.Define): Do not set the `newslot' on
21548         interface members, if they are also flagged as "override".
21549
21550         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
21551         better code for ++i and i++.  This only works for static fields
21552         and local variables.
21553
21554         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
21555         want to pull the DeclSpace out of the builder_to_declspace instead
21556         of the TypeBuilder (like in TypeContainer.FindMembers).
21557
21558         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
21559         instead of LookupTypeContainer.  Fixes the crash on .NET for
21560         looking up interface members.
21561
21562         * const.cs: Create our own emit context during the Definition
21563         stage, so that constants are evaluated in the proper context, when
21564         a recursive definition happens.
21565
21566 2003-05-11  Martin Baulig  <martin@ximian.com>
21567
21568         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
21569         new block for a switch section.
21570         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
21571         the adding/lookup in the switch block.  Fixes #39828.
21572
21573 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
21574
21575         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
21576         functionality: I needed to convert the data after I had performed
21577         the add/sub operation into the operands type size.
21578
21579         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
21580         pass the type for the box operation, otherwise the resulting
21581         object would have been of type object.
21582
21583         (BoxedCast): Add constructor to specify the type to box as.
21584
21585 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
21586
21587         * iterators.cs: I was reusing the `count' variable inadvertently,
21588         take steps to not allow this to happen.
21589
21590 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
21591
21592         * attribute.cs (Attribute.Resolve): Params attributes are encoded
21593         by creating an array at the point where the params starts and
21594         putting all those arguments there, then adjusting the size of the
21595         array.
21596
21597 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
21598
21599         * expression.cs (New.AddressOf): Implement interface
21600         IMemoryLocation.  This is used when the `new' operator is used in
21601         the context of an invocation to a method on a value type.
21602
21603         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
21604         example. 
21605
21606         * namespace.cs: Also check the using aliases here.
21607
21608         * driver.cs: Move the test for using validity after the types have
21609         been entered, so we do a single pass that also includes the using
21610         aliases. 
21611
21612         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
21613         in the regular case.   CreateSiblingForFinally is doing extra
21614         error checking.
21615
21616         * attribute.cs (GetAttributeArgumentExpression): Store the result
21617         on an out value, and use the return value to indicate failure
21618         instead of using null (which is a valid return for Constant.GetValue).
21619
21620         * statement.cs: Perform the analysis flow for the increment
21621         portion after the statement, because this will be the real flow of
21622         execution.  Fixes #42385
21623
21624         * codegen.cs (EmitContext.EmitArgument,
21625         EmitContext.EmitStoreArgument): New helper functions when the
21626         RemapToProxy flag is set.
21627
21628         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
21629         function.
21630
21631         Add support for remapping parameters. 
21632
21633         * iterators.cs: Propagate parameter values;  Store parameter
21634         values in the proxy classes.
21635
21636 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
21637
21638         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
21639         need a proxy reference;  I do not know what I was thinking
21640
21641         * cs-parser.jay (constructor_initializer): catch another error,
21642         and display nice message.
21643
21644         (field_declaration): catch void field declaration
21645         to flag a better error. 
21646
21647         * class.cs (MemberBase.CheckBase): Report an error instead of a
21648         warning if a new protected member is declared in a struct. 
21649         (Field.Define): catch the error of readonly/volatile.
21650
21651         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
21652
21653         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
21654         volatile variable is taken
21655
21656 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
21657
21658         * statement.cs (Fixed.Resolve): Report an error if we are not in
21659         an unsafe context.
21660
21661 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
21662
21663         * typemanager.cs: reuse the code that handles type clashes for
21664         delegates and enumerations.
21665
21666         * class.cs (Report28): Always report.
21667
21668         * expression.cs (EncodeAsAttribute): Allow nulls here.
21669
21670 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
21671
21672         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
21673         the functionality for testing whether an expression is valid for
21674         an attribute here.  Also handle the case of arrays of elements
21675         being stored. 
21676
21677         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
21678         encoding a linear array into an array of objects that are suitable
21679         to be passed to an CustomAttributeBuilder.
21680
21681         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
21682
21683         * ecore.cs: (FieldExpr): Handle field remapping here.
21684
21685         * iteratators.cs: Pass the instance variable (if the method is an
21686         instance method) to the constructors, so we can access the field
21687         variables on the class.
21688
21689         TODO: Test this with structs.  I think the THIS variable on
21690         structs might have to be a pointer, and not a refenrece
21691
21692 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
21693
21694         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
21695         local variables to fields in a proxy class.
21696
21697         * iterators.cs (PopulateProxy): Rename our internal fields to
21698         <XXX>.  
21699         Create a <THIS> field if we are an instance method, so we can
21700         reference our parent container variables.
21701         (MapVariable): Called back from the EmitContext code to enter a
21702         new variable to field mapping into the proxy class (we just create
21703         a FieldBuilder).
21704
21705         * expression.cs
21706         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
21707         for using the remapped locals to fields.
21708
21709         I placed the code here, because that gives the same semantics to
21710         local variables, and only changes the Emit code.
21711
21712         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
21713         statements inside iterators.
21714         (VariableInfo): Add a FieldBuilder for the cases when we are
21715         remapping local variables to fields in a proxy class
21716
21717         * ecore.cs (SimpleNameResolve): Avoid testing two times for
21718         current_block != null.
21719
21720         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
21721         not cope with strings, as it has been moved to the
21722         TableSwitchEmit.  Fixed bug in switch generation.
21723
21724         * expression.cs (New.DoResolve): Provide more context for the user
21725         when reporting an error.
21726
21727         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
21728         pointers. 
21729
21730         * expression.cs (MemberAccess.DoResolve): When we get a type back,
21731         check the permissions for it.  Note than in a type-resolution
21732         context the check was already present in DeclSpace.ResolveType,
21733         but was missing from the MemberAccess.
21734
21735         (ArrayCreation.CheckIndices): warn if the user has
21736         more nested levels of expressions, but there are no more
21737         dimensions specified.  Avoids crash on bug 41906.
21738
21739 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
21740
21741         * statement.cs (Block): replace Implicit bool, for a generic
21742         flags.   
21743         New flag: `Unchecked'.  This is used during the EmitMeta phase
21744         (which is out-of-line with the regular Resolve/Emit process for a
21745         statement, as this is done ahead of time, but still gets a chance
21746         to call constant resolve).
21747
21748         (Block.Flags): new enum for adding a new flag.
21749
21750         (Block.EmitMeta): track the state of unchecked.
21751
21752         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
21753         to enable constant resolution to work there as well.
21754
21755 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
21756
21757         * typemanager.cs (ienumerable_type): Also look up
21758         System.Collections.IEnumerable. 
21759
21760 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
21761
21762         TODO: Test more than one conditional per method.
21763
21764         * class.cs (Indexer.Define): Report the location where the user is
21765         referencing the unsupported feature.
21766
21767         (MethodData): Overload the use of `conditionals' to
21768         minimize the creation of needless ArrayLists.   This saves roughly
21769         212kb on my machine.
21770
21771         (Method): Implement the new IIteratorContainer interface.
21772         (Method.SetYields): Implement the method by setting the ModFlags
21773         to contain METHOD_YIELDS.
21774
21775         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
21776         which just got set to null.
21777
21778         * iterators.cs: New file.
21779
21780         (Yield, YieldBreak): New statements.
21781
21782         * statement.cs (Return.Resolve): Flag an error if we are used in
21783         an iterator method.
21784
21785         * codegen.cs (InIterator): New flag set if the code is being
21786         compiled in an iterator method.
21787
21788         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
21789         internal modifier, and we just use it to avoid adding extra
21790         fields, as this is seldom used.  
21791
21792         * cs-parser.jay: Add yield_statement (yield and yield break).
21793
21794         * driver.cs: New flag -v2 to turn on version 2 features. 
21795
21796         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
21797         hashtable when v2 is enabled.
21798
21799 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
21800
21801         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
21802         there is already a namespace defined with this name.
21803
21804         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
21805         people upgraded their corlibs.
21806
21807         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
21808         always use fully qualified types, no need to use the compiler
21809         front end.
21810
21811         (TypeManager.IsNamespace): Use binarysearch.
21812
21813         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
21814         AddDelegate): I did not quite use the new IsValid API properly: I
21815         have to pass the short-name and the fullname.  I was passing only
21816         the basename instead of the fullname sometimes. 
21817
21818         (TypeContainer.DefineType): call NamespaceClash.
21819
21820         * interface.cs (Interface.DefineType): use NamespaceClash before
21821         defining the type.
21822
21823         * delegate.cs (Delegate.DefineType): use NamespaceClash before
21824         defining the type.
21825
21826         * enum.cs: (Enum.DefineType): use NamespaceClash before
21827         defining the type.
21828
21829         * typemanager.cs (: 3-line patch that gives us some tasty 11%
21830         speed increase.  First, use the negative_hits cache when we get a
21831         negative.  Second, add the type with its full original name
21832         instead of the new . and + encoded name (reflection uses + to
21833         separate type from a nested type).  Use LookupTypeReflection
21834         directly which bypasses the type->name hashtable (that we already
21835         know does not contain the type.
21836
21837         * decl.cs (DeclSpace.ResolveTypeExpr): track the
21838         location/container type. 
21839
21840         * driver.cs: When passing utf8, use directly the UTF8Encoding.
21841
21842 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
21843
21844         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
21845
21846         * delegate.cs (NewDelegate.Resolve): Test whether an instance
21847         method is being referenced in the method group from a static
21848         context, and report error 120 if so.
21849
21850         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
21851         Error118. 
21852
21853         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
21854         is created, we create the A namespace).
21855
21856         * cs-parser.jay: A namespace also introduces a DeclarationFound.
21857         Fixes #41591
21858
21859 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
21860
21861         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
21862         invocation to ModuleBuilder.GetType with the same values will
21863         return a new type instance, so we need to cache its return
21864         values. 
21865
21866         * expression.cs (Binary.ResolveOperator): Only allow the compare
21867         operators on enums if they are of the same type.
21868
21869         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
21870         types of ValueType on their own case.  Before we were giving them
21871         the same treatment as objects.
21872
21873         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
21874         fullname.  Short name is used to compare against container name.
21875         Fullname is used to check against defined namespace names.
21876
21877         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
21878         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
21879
21880         (Method.CheckBase): Call parent.
21881         (MemberBase.CheckBase): Check for protected members on sealed
21882         classes.
21883         (PropertyBase.CheckBase): Call parent.
21884         (Field.Define): Call parent.
21885
21886         * report.cs: Negative error codes are now mapped to 8000 - code,
21887         so that the display is render more nicely.
21888
21889         * typemanager.cs: Do not use try/catch, instead report a regular
21890         error. 
21891
21892         (GetPointerType, GetReferenceType): These methods provide
21893         mechanisms to obtain the T* and T& from a T.  We had the code
21894         previously scattered around the code base, and it also used
21895         TypeManager.LookupType that would go through plenty of caches.
21896         This one goes directly to the type source.
21897
21898         In some places we did the Type.GetType followed by
21899         ModuleBuilder.GetType, but not in others, so this unifies the
21900         processing as well.
21901
21902         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
21903         statements now that we have namespace information.
21904
21905         * typemanager.cs (IsNamespace): New method, returns whether the
21906         string presented is a namespace or not.
21907
21908         (ComputeNamespaces): New public entry point, computes the list of
21909         available namespaces, using the GetNamespaces API call in Mono, or
21910         the slower version in MS.NET.   
21911
21912         Now before we start the semantic analysis phase, we have a
21913         complete list of namespaces including everything that the user has
21914         provided.
21915
21916         Deleted old code to cache namespaces in .nsc files.
21917
21918 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
21919
21920         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
21921         class/struct location definition Location for the implicit
21922         constructor location.
21923
21924         (Operator.Define): Use the location of the operator for the
21925         implicit Method definition.
21926
21927         (Constructor.Emit): use the constructor location for the implicit
21928         base initializer constructor.
21929
21930         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
21931         and the Expression class now contains two new methods:
21932
21933         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
21934         isolate type lookup from the rest of the resolution process.
21935
21936         Since we use Expressions to hold type definitions due to the way
21937         we parse the input we have historically overloaded Resolve to
21938         perform the Type lookups if a special flag is passed.  Now this is
21939         eliminated and two methods take their place. 
21940
21941         The differences in the two methods between xStep and xTerminal is
21942         that xStep is involved in our current lookup system that uses
21943         SimpleNames to compose a name, while xTerminal is used just to
21944         catch the case where the simplename lookup failed.
21945
21946 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
21947
21948         * expression.cs (ResolveMemberAccess): Remove redundant code.
21949         TypeExpr expressions are always born fully resolved.
21950
21951         * interface.cs (PopulateMethod): Do not lookup the types twice.
21952         We were doing it once during SemanticAnalysis and once during
21953         PopulateMethod.
21954
21955         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
21956         in local variable type definitions, were being returned as a
21957         SimpleName (we decomposed everything into a string), that is
21958         because primary_expression was being used instead of a type in the
21959         grammar (reduce/reduce conflicts).
21960
21961         The part that was wrong is that we converted the expression into a
21962         string (an oversimplification in one hand, compounded with primary
21963         expressions doing string concatenation).
21964
21965         So things like:
21966
21967         A.B.C [] x;
21968
21969         Would return "A.B.C[]" as a SimpleName.  This stopped things like
21970         using clauses from working on this particular context.  And a type
21971         was being matched directly against "A.B.C[]".
21972
21973         We now use the correct approach, and allow for ComposedCast to be
21974         part of the unary expression.  So the "A.B.C []" become a composed
21975         cast of "A.B.C" (as a nested group of MemberAccess with a
21976         SimpleName at the end) plus the rank composition "[]". 
21977
21978         Also fixes 35567
21979
21980 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
21981
21982         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
21983         for the access level checking.
21984
21985         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
21986         `TypeContainer container', because I kept getting confused when I
21987         was debugging this code.
21988
21989         * expression.cs (Indexers): Instead of tracking getters/setters,
21990         we now track them in parallel.  We create one arraylist less, but
21991         most importantly it is possible now for the LValue code to find a
21992         matching get for a set.
21993
21994         (IndexerAccess.DoResolveLValue): Update the code.
21995         GetIndexersForType has been modified already to extract all the
21996         indexers from a type.  The code assumed it did not.
21997
21998         Also make the code set the correct return type for the indexer.
21999         This was fixed a long time ago for properties, but was missing for
22000         indexers.  It used to be void_type.
22001
22002         (Binary.Emit): Test first for doubles instead of
22003         floats, as they are more common.
22004
22005         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22006         when dealing with floats and the <=, >= operators.  This fixes bug
22007         #39314 
22008
22009         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22010         to load the array value by emitting a load on the foreach variable
22011         type.  This was incorrect.  
22012
22013         We now emit the code to load an element using the the array
22014         variable type, and then we emit the conversion operator.
22015
22016         Fixed #40176
22017
22018 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22019
22020         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22021
22022 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22023
22024         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22025         test for protection before we test for signatures. 
22026
22027         (MethodSignature.ToString): implement.
22028
22029         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22030         to the case where we reduced into a LongConstant.
22031
22032         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22033         depend on whether the information is acurrate, because the
22034         Microsoft runtime will always claim that the array type is public,
22035         regardless of the real state.
22036
22037         If the type is a pointer, another problem happens: the type is
22038         reported as non-public in Microsoft.  
22039
22040         In both cases we have to call CheckAccessLevel recursively with
22041         the underlying type as the argument to be tested.
22042
22043 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22044
22045         * assign.cs (Assign.Emit): If we are dealing with a compound
22046         assignment expression, we should use the code path that stores the
22047         intermediate result in a temporary value.  This fixes #40903.
22048
22049         *expression.cs (Indirection.ToString): Provide ToString method for
22050         debugging. 
22051
22052 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22053
22054         * class.cs: Null out fields holding references to Block objects so
22055         they can be garbage collected.
22056
22057         * expression.cs (OverloadResolve): Remove unused local.
22058
22059 2003-04-07  Martin Baulig  <martin@ximian.com>
22060
22061         * codegen.cs (EmitContext.CurrentFile): New public field.
22062         (EmitContext.Mark): Use the CurrentFile to check whether the
22063         location is in the correct file.
22064         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22065
22066 2003-04-07  Martin Baulig  <martin@ximian.com>
22067
22068         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22069
22070         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22071         location.  [FIXME: The location argument which gets passed to this
22072         method is sometimes wrong!]
22073
22074 2003-04-07  Nick Drochak <ndrochak@gol.com>
22075
22076         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22077
22078 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22079
22080         * expression.cs (Indirection.EmitAssign): We were using the
22081         temporary, but returning immediately instead of continuing the
22082         EmitAssing flow.
22083
22084 2003-04-06  Martin Baulig  <martin@ximian.com>
22085
22086         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22087         if it's a nested child, but also deriving from the outer class.
22088         See test 190.cs.
22089
22090         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22091         nested child, but also deriving from the outer class.  See
22092         test-190.cs.
22093         (FilterWithClosure): We may access private members of the outer
22094         class if we're a nested child and deriving from the outer class.
22095         (RealMemberLookup): Only set `closure_private_ok' if the
22096         `original_bf' contained BindingFlags.NonPublic.
22097
22098 2003-04-05  Martin Baulig  <martin@ximian.com>
22099
22100         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22101
22102 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22103
22104         * class.cs (Event.Define): Do not allow abstract events to have
22105         initializers. 
22106
22107 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22108
22109         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22110         block in event declarations.
22111
22112         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22113         value type, get its address.
22114
22115         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22116         leaving a class on the stack instead of a boolean value (int
22117         0/1).  Change the code so we compare against null, and then the
22118         result against zero.
22119
22120         * class.cs (TypeContainer.GetClassBases): We were checking for the
22121         parent class being sealed too late.
22122
22123         * expression.cs (Binary.Emit): For <= and >= when dealing with
22124         floating point values, use cgt.un and clt.un instead of cgt and
22125         clt alone.
22126
22127 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22128
22129         * statement.cs: Apply the same optimization as MS: skip the 
22130         GetEnumerator returning an IEnumerator, and use the one returning a 
22131         CharEnumerator instead. This allows us to avoid the try-finally block 
22132         and the boxing.
22133
22134 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22135
22136         * cs-parser.jay: Attributes cannot be applied to
22137                          namespaces. Fixes #40473
22138
22139 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22140
22141         * class.cs:
22142         (Add*): check if the name is valid using the full name for constants,
22143         fields, properties and events.
22144
22145 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22146
22147         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22148         char constants to be part of the enumeration.
22149
22150         * expression.cs (Conditional.DoResolve): Add support for operator
22151         true. Implements the missing functionality from 14.12
22152
22153         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22154         operator true/false as required by the spec.
22155
22156         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22157         implicit conversion to boolean.
22158
22159         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22160         also one where the type implements `operator true'. 
22161
22162         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22163         get an expression that will invoke operator true based on an
22164         expression.  
22165
22166         (GetConversionOperators): Removed the hack that called op_True
22167         here.  
22168
22169         (Expression.ResolveBoolean): Move this from Statement.
22170
22171 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22172
22173         * ecore.cs (FieldExpr): do not allow initialization of initonly
22174         fields on derived classes
22175
22176 2003-03-13  Martin Baulig  <martin@ximian.com>
22177
22178         * statement.cs (Block.Emit): Call ig.BeginScope() and
22179         ig.EndScope() when compiling with debugging info; call
22180         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22181
22182 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22183
22184         * expression.cs (Indexers): Do not construct immediately, allow
22185         for new members to be appended as we go.  Fixes 38143
22186
22187 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22188
22189         * expression.cs: save/restore context when resolving an unchecked
22190         expression.
22191
22192 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22193
22194         * cfold.cs: Catch division by zero in modulus operator during
22195         constant folding.
22196
22197 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22198
22199         * interface.cs (Interface.DefineMembers): Avoid defining members
22200         twice. 
22201
22202 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22203
22204         * driver.cs: handle the +/- options for -noconfig
22205
22206         * statement.cs (Unckeched.Resolve): Also track the state of
22207         unchecked in the Resolve phase.
22208
22209 2003-02-27  Martin Baulig  <martin@ximian.com>
22210
22211         * ecore.cs (Expression.MemberLookup): Don't create a
22212         MethodGroupExpr for something which is not a method.  Fixes #38291.
22213
22214 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22215
22216         * class.cs (MemberBase.CheckParameters): Also check that the type
22217         is unmanaged if it is a pointer.
22218
22219         * expression.cs (SizeOf.Resolve): Add location information.
22220
22221         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22222         a managed type is declared.
22223
22224         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22225         parameter modifiers as well.  Fixes bug 38606
22226
22227         * class.cs: Very sad.  Am backing out the speed up changes
22228         introduced by the ArrayList -> Array in the TypeContainer, as they
22229         were not actually that much faster, and introduced a bug (no error
22230         reports on duplicated methods).
22231
22232         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22233         source first, this will guarantee that we have a valid expression
22234         before calling in lower levels functions that will require a
22235         resolved object.  Then use this original_source in the
22236         target.ResolveLValue instead of the original source that was
22237         passed to us.
22238
22239         Another change.  Use target.Resolve instead of LValueResolve.
22240         Although we are resolving for LValues, we will let the Assign code
22241         take care of that (it will be called again from Resolve).  This
22242         basically allows code like this:
22243
22244         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22245         class Y { void A (X x) { x [0] += o; }
22246
22247         The problem was that the indexer was trying to resolve for
22248         set_Item (idx, object o) and never finding one.  The real set_Item
22249         was set_Item (idx, X).  By delaying the process we get the right
22250         semantics. 
22251
22252         Fixes bug 36505
22253
22254 2003-02-23  Martin Baulig  <martin@ximian.com>
22255
22256         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
22257         while calling DoEmit ().
22258
22259         * codegen.cs (EmitContext.Mark): Don't mark locations in other
22260         source files; if you use the #line directive inside a method, the
22261         compiler stops emitting line numbers for the debugger until it
22262         reaches the end of the method or another #line directive which
22263         restores the original file.
22264
22265 2003-02-23  Martin Baulig  <martin@ximian.com>
22266
22267         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
22268
22269 2003-02-23  Martin Baulig  <martin@ximian.com>
22270
22271         * statement.cs (Block.AddChildVariableNames): We need to call this
22272         recursively, not just for our immediate children.
22273
22274 2003-02-23  Martin Baulig  <martin@ximian.com>
22275
22276         * class.cs (Event.Define): Always make the field private, like csc does.
22277
22278         * typemanager.cs (TypeManager.RealMemberLookup): Make events
22279         actually work, fixes bug #37521.
22280
22281 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
22282
22283         * delegate.cs: When creating the various temporary "Parameters"
22284         classes, make sure that we call the ComputeAndDefineParameterTypes
22285         on those new parameters (just like we do with the formal ones), to
22286         allow them to be resolved in the context of the DeclSpace.
22287
22288         This fixes the bug that Dick observed in Bugzilla #38530.
22289
22290 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
22291
22292         * expression.cs (ResolveMemberAccess): When resolving a constant,
22293         do not attempt to pull a constant if the value was not able to
22294         generate a valid constant.
22295
22296         * const.cs (LookupConstantValue): Do not report more errors than required.
22297
22298 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22299
22300         * expression.cs: fixes bug #38328.
22301
22302 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22303
22304         * class.cs: Changed all the various members that can be part of a
22305         class from being an ArrayList to be an Array of the right type.
22306         During the DefineType type_list, interface_list, delegate_list and
22307         enum_list are turned into types, interfaces, delegates and enums
22308         arrays.  
22309
22310         And during the member population, indexer_list, event_list,
22311         constant_list, field_list, instance_constructor_list, method_list,
22312         operator_list and property_list are turned into their real arrays.
22313
22314         Although we could probably perform this operation earlier, for
22315         good error reporting we need to keep the lists and remove the
22316         lists for longer than required.
22317
22318         This optimization was triggered by Paolo profiling the compiler
22319         speed on the output of `gen-sample-program.pl' perl script. 
22320
22321         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
22322         not crash in methods like MemberLookupFailed that use this field.  
22323
22324         This problem arises when the compiler fails to resolve a type
22325         during interface type definition for example.
22326
22327 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
22330         inherit from System.Object, so we have to stop at null, not only
22331         when reaching System.Object.
22332
22333 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
22334
22335         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
22336         DeclaredOnly because the parent indexer might have had a different
22337         name, but did not loop until the top of the hierarchy was reached.
22338
22339         The problem this one fixes is 35492: when a class implemented an
22340         indexer from an interface, we were getting the interface method
22341         (which was abstract) and we were flagging an error (can not invoke
22342         abstract method).
22343
22344         This also keeps bug 33089 functioning, and test-148 functioning.
22345
22346         * typemanager.cs (IsSpecialMethod): The correct way of figuring
22347         out if a method is special is to see if it is declared in a
22348         property or event, or whether it is one of the predefined operator
22349         names.   This should fix correctly #36804.
22350
22351 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
22352
22353         The goal here is to remove the dependency on EmptyCast.Peel ().
22354         Killing it completely.
22355
22356         The problem is that currently in a number of places where
22357         constants are expected, we have to "probe" for an EmptyCast, and
22358         Peel, which is not the correct thing to do, as this will be
22359         repetitive and will likely lead to errors. 
22360
22361         The idea is to remove any EmptyCasts that are used in casts that
22362         can be reduced to constants, so we only have to cope with
22363         constants. 
22364
22365         This bug hunt was triggered by Bug 37363 and the desire to remove
22366         the duplicate pattern where we were "peeling" emptycasts to check
22367         whether they were constants.  Now constants will always be
22368         constants.
22369
22370         * ecore.cs: Use an enumconstant here instead of wrapping with
22371         EmptyCast.  
22372
22373         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
22374         throwing me off.  By handling this we can get rid of a few hacks.
22375
22376         * statement.cs (Switch): Removed Peel() code.
22377
22378 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
22379
22380         * class.cs: Location information for error 508
22381
22382         * expression.cs (New.DoResolve): Add a guard against double
22383         resolution of an expression.  
22384
22385         The New DoResolve might be called twice when initializing field
22386         expressions (see EmitFieldInitializers, the call to
22387         GetInitializerExpression will perform a resolve on the expression,
22388         and later the assign will trigger another resolution
22389
22390         This leads to bugs (#37014)
22391
22392         * delegate.cs: The signature for EndInvoke should contain any ref
22393         or out parameters as well.  We were not doing this in the past. 
22394
22395         * class.cs (Field.Define): Do not overwrite the type definition
22396         inside the `volatile' group.  Turns out that volatile enumerations
22397         were changing the type here to perform a validity test, which
22398         broke conversions. 
22399
22400 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
22401
22402         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
22403         and structs, we do not want to load the instance variable
22404
22405         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
22406         enum_type has to be handled like an object reference (implicit
22407         conversions exists from this to object), but the regular IsClass
22408         and IsValueType tests will never return true for this one.
22409
22410         Also we use TypeManager.IsValueType instead of type.IsValueType,
22411         just for consistency with the rest of the code (this is only
22412         needed if we ever use the construct exposed by test-180.cs inside
22413         corlib, which we dont today).
22414
22415 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
22416
22417         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
22418         just InternalCall.
22419
22420 2003-02-09  Martin Baulig  <martin@ximian.com>
22421
22422         * namespace.cs (Namespace..ctor): Added SourceFile argument.
22423         (Namespace.DefineNamespaces): New static public method; this is
22424         called when we're compiling with debugging to add all namespaces
22425         to the symbol file.
22426
22427         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
22428         pass it to the Namespace's .ctor.
22429
22430         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
22431         and MethodBase arguments; pass the namespace ID to the symwriter;
22432         pass the MethodBase instead of the token to the symwriter.
22433         (SymbolWriter.DefineNamespace): New method to add a namespace to
22434         the symbol file.
22435
22436 2003-02-09  Martin Baulig  <martin@ximian.com>
22437
22438         * symbolwriter.cs: New file.  This is a wrapper around
22439         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
22440         methods here in near future.
22441
22442 2003-02-09  Martin Baulig  <martin@ximian.com>
22443
22444         * codegen.cs (EmitContext.Mark): Just pass the arguments to
22445         ILGenerator.MarkSequencePoint() which are actually used by the
22446         symbol writer.
22447
22448 2003-02-09  Martin Baulig  <martin@ximian.com>
22449
22450         * location.cs (SourceFile): New public sealed class.  This
22451         contains the name and an index which is used in the location's token.
22452         (Location): Reserve an appropriate number of bits in the token for
22453         the source file instead of walking over that list, this gives us a
22454         really huge performance improvement when compiling with debugging.
22455
22456         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
22457         `SourceFile' argument instead of a string.
22458         (Driver.ProcessFile): Add all the files via Location.AddFile(),
22459         but don't parse/tokenize here, we need to generate the list of all
22460         source files before we do that.
22461         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
22462         the files.
22463
22464         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
22465         instead of a string.
22466
22467         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
22468         of a string.
22469
22470 2003-02-09  Martin Baulig  <martin@ximian.com>
22471
22472         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
22473         filename on `#line default'.
22474
22475 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
22476
22477         * statement.cs: don't clear the pinned var when the fixed statement
22478         returns from the method (fixes bug#37752).
22479
22480 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
22481
22482         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
22483         to IsValueType.
22484
22485 2003-02-07  Martin Baulig  <martin@ximian.com>
22486
22487         * driver.cs: Removed the `--debug-args' command line argument.
22488
22489         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
22490         automatically by the AsssemblyBuilder.
22491         (CodeGen.InitializeSymbolWriter): We don't need to call any
22492         initialization function on the symbol writer anymore.  This method
22493         doesn't take any arguments.
22494
22495 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
22496
22497         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
22498         from referenced assemblies as well.
22499
22500 2003-02-02  Martin Baulig  <martin@ximian.com>
22501
22502         * class.cs (MethodData.Emit): Generate debugging info for external methods.
22503
22504 2003-02-02  Martin Baulig  <martin@ximian.com>
22505
22506         * class.cs (Constructor.Emit): Open the symbol writer before
22507         emitting the constructor initializer.
22508         (ConstructorInitializer.Emit): Call ec.Mark() to allow
22509         single-stepping through constructor initializers.
22510
22511 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
22512
22513         * class.cs: Handle error 549: do not allow virtual methods in
22514         sealed classes. 
22515
22516 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
22517
22518         * decl.cs: Check access levels when resolving types
22519
22520 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
22521
22522         * statement.cs: Add parameters and locals set in catch blocks that might 
22523         return to set vector
22524
22525 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
22526
22527         * class.cs (Operator): Set the SpecialName flags for operators.
22528
22529         * expression.cs (Invocation.DoResolve): Only block calls to
22530         accessors and operators on SpecialName methods.
22531
22532         (Cast.TryReduce): Handle conversions from char constants.
22533
22534
22535 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
22536
22537         * statement.cs: small memory and time optimization in FlowBranching.
22538
22539 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
22540
22541         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
22542         problem that the last fix but in the other sid (Set).
22543
22544         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
22545         access when there is no indexer in the hierarchy.
22546
22547 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
22548
22549         * class.cs: Combine some if statements.
22550
22551 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22552
22553         * driver.cs: fixed bug #37187.
22554
22555 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
22556
22557         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
22558         any indexer, it's needed to build a list with all the indexers in the
22559         hierarchy (AllGetters), else we have problems. Fixes #35653.
22560
22561 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
22562
22563         * class.cs (MethodData.Define): It is wrong for an interface
22564         implementation to be static in both cases: explicit and implicit.
22565         We were only handling this in one case.
22566
22567         Improve the if situation there to not have negations.
22568
22569         * class.cs (Field.Define): Turns out that we do not need to check
22570         the unsafe bit on field definition, only on usage.  Remove the test.
22571
22572 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22573
22574         * driver.cs: use assembly.Location instead of Codebase (the latest
22575         patch made mcs fail when using MS assemblies).
22576
22577 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
22578
22579         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
22580         get the path to *corlib.dll.
22581
22582 2003-01-21  Nick Drochak <ndrochak@gol.com>
22583
22584         * cs-tokenizer.cs:
22585         * pending.cs:
22586         * typemanager.cs: Remove compiler warnings
22587
22588 2003-01-20  Duncan Mak  <duncan@ximian.com>
22589
22590         * AssemblyInfo.cs: Bump the version number to 0.19.
22591
22592 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22593
22594         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
22595
22596 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
22597
22598         * class.cs (Constructor::Emit): Emit debugging info for constructors.
22599
22600 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
22601
22602         * cs-parser.jay: Small fix: we were not comparing the constructor
22603         name correctly.   Thanks to Zoltan for the initial pointer.
22604
22605 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
22606
22607         * cs-tokenizer.cs: Set file name when specified with #line
22608
22609 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
22610
22611         * cs-parser.jay: Only perform the constructor checks here if we
22612         are named like the class;  This will help provider a better
22613         error.  The constructor path is taken when a type definition is
22614         not found, but most likely the user forgot to add the type, so
22615         report that rather than the constructor error.
22616
22617 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
22618
22619         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
22620         allocations.
22621
22622 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22623
22624         * cs-parser.jay: Add cleanup call.
22625
22626 2003-01-13  Duncan Mak  <duncan@ximian.com>
22627
22628         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
22629         consistent with other methods.
22630
22631 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
22632
22633         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
22634
22635 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
22636
22637         * attribute.cs: only set GuidAttr to true when we have a
22638         GuidAttribute.
22639
22640 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22641
22642         * ecore.cs:
22643         * expression.cs:
22644         * typemanager.cs: fixes to allow mcs compile corlib with the new
22645         Type.IsSubclassOf fix.
22646
22647 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
22648
22649         * expression.cs (LocalVariableReference.DoResolve): Classify a
22650         constant as a value, not as a variable.   Also, set the type for
22651         the variable.
22652
22653         * cs-parser.jay (fixed_statement): take a type instead of a
22654         pointer_type, so we can produce a better error message later.
22655
22656         * statement.cs (Fixed.Resolve): Flag types that are not pointers
22657         as an error.  
22658
22659         (For.DoEmit): Make inifinite loops have a
22660         non-conditional branch back.
22661
22662         (Fixed.DoEmit): First populate the pinned variables, then emit the
22663         statement, then clear the variables.  Before I was emitting the
22664         code once for each fixed piece.
22665
22666
22667 2003-01-08  Martin Baulig  <martin@ximian.com>
22668
22669         * statement.cs (FlowBranching.MergeChild): A break in a
22670         SWITCH_SECTION does not leave a loop.  Fixes #36155.
22671
22672 2003-01-08  Martin Baulig  <martin@ximian.com>
22673
22674         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
22675         lives in the same number space than `param_map'.  Fixes #36154.
22676
22677 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
22678
22679         * cs-parser.jay (constructor_declaration): Set the
22680         Constructor.ModFlags before probing for it.  This makes the
22681         compiler report 514, 515 and 132 (the code was there, but got
22682         broken). 
22683
22684         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
22685         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
22686         (GotoCase.Resolve): Set `Returns' to ALWAYS.
22687
22688 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
22689
22690         * enum.cs: create the enum static fields using the enum type.
22691
22692 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
22693
22694         * class.cs: don't try to create the ParamBuilder for the return
22695         type if it's not needed (and handle it breaking for the ms runtime
22696         anyway).
22697
22698 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
22699
22700         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
22701
22702 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
22703
22704         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
22705         the command.   This showed up while compiling the JANET source
22706         code, which used \r as its only newline separator.
22707
22708 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
22709
22710         * class.cs (Method.Define): If we are an operator (because it
22711         reuses our code), then set the SpecialName and HideBySig.  #36128
22712
22713 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
22714
22715         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
22716         exception, report error 120 `object reference required'.
22717
22718         * driver.cs: Add --pause option, used during to measure the size
22719         of the process as it goes with --timestamp.
22720
22721         * expression.cs (Invocation.DoResolve): Do not allow methods with
22722         SpecialName to be invoked.
22723
22724 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
22725
22726         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
22727         number before adding it.
22728
22729 2002-12-21  Ravi Pratap  <ravi@ximian.com>
22730
22731         * ecore.cs (StandardImplicitConversion): When in an unsafe
22732         context, we allow conversion between void * to any other pointer
22733         type. This fixes bug #35973.
22734
22735 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
22736
22737         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
22738         is not thrown when extensionless outputs are used 
22739
22740 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22741
22742         * rootcontext.cs: fixed compilation of corlib.
22743
22744 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
22745
22746         * attribute.cs (Attributes.Contains): Add new method.
22747
22748         * class.cs (MethodCore.LabelParameters): if the parameter is an
22749         `out' parameter, check that no attribute `[In]' has been passed.
22750
22751         * enum.cs: Handle the `value__' name in an enumeration.
22752
22753 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
22754
22755         * decl.cs: Added special case to allow overrides on "protected
22756         internal" methods
22757
22758 2002-12-18  Ravi Pratap  <ravi@ximian.com>
22759
22760         * attribute.cs (Attributes.AddAttributeSection): Rename to this
22761         since it makes much more sense.
22762
22763         (Attributes.ctor): Don't require a Location parameter.
22764
22765         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
22766
22767         * attribute.cs (ApplyAttributes): Remove extra Location parameters
22768         since we already have that information per attribute.
22769
22770         * everywhere : make appropriate changes.
22771
22772         * class.cs (LabelParameters): Write the code which actually
22773         applies attributes to the return type. We can't do this on the MS
22774         .NET runtime so we flag a warning in the case an exception is
22775         thrown.
22776
22777 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
22778
22779         * const.cs: Handle implicit null conversions here too.
22780
22781 2002-12-17  Ravi Pratap  <ravi@ximian.com>
22782
22783         * class.cs (MethodCore.LabelParameters): Remove the extra
22784         Type [] parameter since it is completely unnecessary. Instead
22785         pass in the method's attributes so that we can extract
22786         the "return" attribute.
22787
22788 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
22789
22790         * cs-parser.jay (parse): Use Report.Error to flag errors instead
22791         of ignoring it and letting the compile continue.
22792
22793         * typemanager.cs (ChangeType): use an extra argument to return an
22794         error condition instead of throwing an exception.
22795
22796 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
22797
22798         * expression.cs (Unary.TryReduce): mimic the code for the regular
22799         code path.  Perform an implicit cast in the cases where we can
22800         implicitly convert to one of the integral types, and then reduce
22801         based on that constant.   This fixes bug #35483.
22802
22803 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22804
22805         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
22806
22807 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22808
22809         * namespace.cs: fixed bug #35489.
22810
22811 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
22812
22813         * class.cs: Remove some dead code.
22814
22815         * cs-parser.jay: Estimate the number of methods needed
22816         (RootContext.MethodCount);
22817
22818         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
22819         numbers instead of StringBuilders.
22820
22821         * support.cs (PtrHashtable): Add constructor with initial size;
22822         We can now reduce reallocations of the method table.
22823
22824 2002-12-10  Ravi Pratap  <ravi@ximian.com>
22825
22826         * attribute.cs (ApplyAttributes): Keep track of the emitted
22827         attributes on a per-target basis. This fixes bug #35413.
22828
22829 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
22830
22831         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
22832         default to the Windows 1252 encoding.
22833
22834         (UnixParseOption): Support version, thanks to Alp for the missing
22835         pointer. 
22836
22837         * AssemblyInfo.cs: Add nice assembly information.
22838
22839         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
22840         (bug 35169).
22841
22842         * cs-parser.jay: Allow a trailing comma before the close bracked
22843         in the attribute_section production.
22844
22845         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
22846         address of the instance was being taken, I will take this out,
22847         because we take the address of the object immediately here.
22848
22849 2002-12-09  Ravi Pratap  <ravi@ximian.com>
22850
22851         * typemanager.cs (AreMultipleAllowed): Take care of the most
22852         obvious case where attribute type is not in the current assembly -
22853         stupid me ;-)
22854
22855 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
22856
22857         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
22858         definitions, instead of doing that afterwards.  
22859
22860         Also we use a nice little hack, depending on the constructor, we
22861         know if we are a "composed" name or a simple name.  Hence, we
22862         avoid the IndexOf test, and we avoid 
22863
22864         * codegen.cs: Add code to assist in a bug reporter to track down
22865         the source of a compiler crash. 
22866
22867 2002-12-07  Ravi Pratap  <ravi@ximian.com>
22868
22869         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
22870         types have been emitted for a given element and flag an error
22871         if something which does not have AllowMultiple set is used more
22872         than once.
22873
22874         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
22875         attribute types and their corresponding AllowMultiple properties
22876
22877         (AreMultipleAllowed): Check the property for a given type.
22878
22879         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
22880         property in the case we have a TypeContainer.
22881
22882         (Attributes.AddAttribute): Detect duplicates and just skip on
22883         adding them. This trivial fix catches a pretty gross error in our
22884         attribute emission - global attributes were being emitted twice!
22885
22886         Bugzilla bug #33187 is now fixed.
22887
22888 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
22889
22890         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
22891         instead of pp_and).
22892
22893         * expression.cs (Binary.ResolveOperator): I can only use the
22894         Concat (string, string, string) and Concat (string, string,
22895         string, string) if the child is actually a concatenation of
22896         strings. 
22897
22898 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
22899
22900         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
22901         context where we need a 2-character lookahead.
22902
22903         * pending.cs (PendingImplementation): Rework so we can keep track
22904         of interface types all the time, and flag those which were
22905         implemented by parents as optional.
22906
22907 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
22908
22909         * expression.cs (Binary.ResolveOperator): Use
22910         String.Concat(string,string,string) or
22911         String.Concat(string,string,string,string) when possible. 
22912
22913         * typemanager: More helper methods.
22914
22915
22916 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
22917
22918         * pending.cs: remove the bogus return from GetMissingInterfaces()
22919         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
22920
22921 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22922
22923         * namespace.cs: avoid duplicated 'using xxx' being added to
22924         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
22925         when we get more than one 'using' statement for the same namespace.
22926         Report a CS0105 warning for it.
22927
22928 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
22929
22930         * cs-tokenizer.cs (consume_identifier): use read directly, instead
22931         of calling getChar/putback, uses internal knowledge of it.    
22932
22933         (xtoken): Reorder tokenizer so most common patterns are checked
22934         first.  This reduces the compilation time in another 5% (from 8.11s
22935         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
22936
22937         The parsing time is 22% of the compilation in mcs, and from that
22938         64% is spent on the tokenization process.  
22939
22940         I tried using a binary search for keywords, but this is slower
22941         than the hashtable.  Another option would be to do a couple of
22942         things:
22943
22944                 * Not use a StringBuilder, instead use an array of chars,
22945                   with a set value.  Notice that this way we could catch
22946                   the 645 error without having to do it *afterwards*.
22947
22948                 * We could write a hand-parser to avoid the hashtable
22949                   compares altogether.
22950
22951         The identifier consumption process takes 37% of the tokenization
22952         time.  Another 15% is spent on is_number.  56% of the time spent
22953         on is_number is spent on Int64.Parse:
22954
22955                 * We could probably choose based on the string length to
22956                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
22957                   computations. 
22958
22959         Another 3% is spend on wrapping `xtoken' in the `token' function.
22960
22961         Handle 0xa0 as whitespace (#34752)
22962
22963 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
22964
22965         * typemanager.cs (IsCLRType): New routine to tell whether a type
22966         is one of the builtin types.  
22967
22968         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
22969         typecode in more places instead of doing pointer comparissions.
22970         We could leverage some knowledge about the way the typecodes are
22971         laid out.
22972
22973         New code to cache namespaces in assemblies, it is currently not
22974         invoked, to be used soon.
22975
22976         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
22977
22978         * expression.cs (Binary.ResolveOperator): specially handle
22979         strings, and do not perform user-defined operator overloading for
22980         built-in types.
22981
22982 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
22983
22984         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
22985         internalcall as it is a pretty simple operation;  Avoid whenever
22986         possible to call Char.IsLetter.
22987
22988         (consume_identifier): Cut by half the number of
22989         hashtable calls by merging the is_keyword and GetKeyword behavior.
22990
22991         Do not short-circuit, because if we do, we
22992         report errors (ie, #if false && true would produce an invalid
22993         directive error);
22994
22995
22996 2002-11-24  Martin Baulig  <martin@ximian.com>
22997
22998         * expression.cs (Cast.TryReduce): If we're in checked syntax,
22999         check constant ranges and report a CS0221.  Fixes #33186.
23000
23001 2002-11-24  Martin Baulig  <martin@ximian.com>
23002
23003         * cs-parser.jay: Make this work for uninitialized variable
23004         declarations in the `for' initializer.  Fixes #32416.
23005
23006 2002-11-24  Martin Baulig  <martin@ximian.com>
23007
23008         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23009         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23010
23011 2002-11-24  Martin Baulig  <martin@ximian.com>
23012
23013         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23014         argument; if true, we also check for user-defined conversions.
23015         This is only needed if both arguments are of a user-defined type.
23016         Fixes #30443, added test-175.cs.
23017         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23018
23019         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23020
23021 2002-11-24  Martin Baulig  <martin@ximian.com>
23022
23023         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23024         function to get the store opcode.
23025         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23026         only emit the Ldelema if the store opcode is Stobj.  You must run
23027         both test-34 and test-167 to test this.  Fixes #34529.
23028
23029 2002-11-23  Martin Baulig  <martin@ximian.com>
23030
23031         * ecore.cs (Expression.MemberLookup): Added additional
23032         `qualifier_type' argument which is used when we're being called
23033         from MemberAccess.DoResolve() and null if we're called from a
23034         SimpleName lookup.
23035         (Expression.MemberLookupFailed): New method to report errors; this
23036         does the CS1540 check and reports the correct error message.
23037
23038         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23039         argument for the CS1540 check and redone the way how we're dealing
23040         with private members.  See the comment in the source code for details.
23041         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23042         `closure_start_type' to `closure_qualifier_type' and check whether
23043         it's not null.  It was not this filter being broken, it was just
23044         being called with the wrong arguments.
23045
23046         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23047         and pass it the correct `qualifier_type'; this also does the error
23048         handling for us.
23049
23050 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23051
23052         * expression.cs (Invocation.EmitParams): If the we are dealing
23053         with a non-built-in value type, load its address as well.
23054
23055         (ArrayCreation): Use a a pretty constant instead
23056         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23057         static initializers.  
23058
23059         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23060         because they are not really value types, just glorified integers. 
23061
23062         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23063
23064         * ecore.cs: Remove redundant code for enumerations, make them use
23065         the same code path as everything else, fixes the casting issue
23066         with enumerations in Windows.Forms.
23067
23068         * attribute.cs: Do only cast to string if it is a string, the
23069         validation happens later.
23070
23071         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23072         people upgrade their corlibs.
23073
23074         * ecore.cs: Oops, enumerations were not following the entire code path
23075
23076 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23077
23078         * typemanager.cs (FilterWithClosure): Commented out the test for
23079         1540 in typemanager.cs, as it has problems when accessing
23080         protected methods from a parent class (see test-174.cs). 
23081
23082         * attribute.cs (Attribute.ValidateGuid): new method.
23083         (Attribute.Resolve): Use above.
23084
23085 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23086
23087         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23088
23089         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23090         handling for enumerations, as we only needed the TypeContainer
23091         functionality to begin with (this is required for the fix below to
23092         work for enums that reference constants in a container class for
23093         example). 
23094
23095         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23096
23097         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23098         a valid TypeBuilder to perform lookups on.o
23099
23100         * class.cs (InheritableMemberSignatureCompare): Use true in the
23101         call to GetGetMethod and GetSetMethod, because we are comparing
23102         the signature, and we need to get the methods *even* if they are
23103         private. 
23104
23105         (PropertyBase.CheckBase): ditto.
23106
23107         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23108         GotoCase.Resolve): Use Peel on EmpytCasts.
23109
23110         * ecore.cs (EmptyCast): drop child, add Peel method.
23111
23112 2002-11-17  Martin Baulig  <martin@ximian.com>
23113
23114         * ecore.cs (EmptyCast.Child): New public property.
23115
23116         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23117         label resolved to an EmptyCast.  Fixes #34162.
23118         (GotoCase.Resolve): Likewise.
23119         (Block.EmitMeta): Likewise.
23120
23121 2002-11-17  Martin Baulig  <martin@ximian.com>
23122
23123         * expression.cs (Invocation.BetterConversion): Prefer int over
23124         uint; short over ushort; long over ulong for integer literals.
23125         Use ImplicitConversionExists instead of StandardConversionExists
23126         since we also need to check for user-defined implicit conversions.
23127         Fixes #34165.  Added test-173.cs.
23128
23129 2002-11-16  Martin Baulig  <martin@ximian.com>
23130
23131         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23132         with the `true' and `false' literals.  Fixes #33151.
23133
23134 2002-11-16  Martin Baulig  <martin@ximian.com>
23135
23136         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23137         October 22nd; don't do the cs1540 check for static members.
23138
23139         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23140         now using our own filter here and doing the cs1540 check again.
23141
23142 2002-11-16  Martin Baulig  <martin@ximian.com>
23143
23144         * support.cs (InternalParameters): Don't crash if we don't have
23145         any fixed parameters.  Fixes #33532.
23146
23147 2002-11-16  Martin Baulig  <martin@ximian.com>
23148
23149         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23150         when looking up static methods to make this work on Windows.
23151         Fixes #33773.
23152
23153 2002-11-16  Martin Baulig  <martin@ximian.com>
23154
23155         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23156         a setter rather than using PropertyInfo.CanWrite.
23157
23158 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23159
23160         * class.cs: Allow acces to block member by subclasses. Fixes build
23161         breaker.
23162
23163 2002-11-14  Martin Baulig  <martin@ximian.com>
23164
23165         * class.cs (Constructor.Emit): Added the extern/block check.
23166         Fixes bug #33678.
23167
23168 2002-11-14  Martin Baulig  <martin@ximian.com>
23169
23170         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23171         iteration while looking for indexers, this is needed because the
23172         indexer may have a different name in our base classes.  Fixed the
23173         error reporting (no indexers at all, not get accessor, no
23174         overloaded match).  Fixes bug #33089.
23175         (IndexerAccess.DoResolveLValue): Likewise.
23176
23177 2002-11-14  Martin Baulig  <martin@ximian.com>
23178
23179         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23180         indexers.  Fixes the first part of bug #33089.
23181         (MethodSignature.InheritableMemberSignatureCompare): Added support
23182         for properties.
23183
23184 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23185
23186         * attribute.cs (Attribute.Resolve): Catch the
23187         NullReferenceException and report it since it isn't supposed to
23188         happen. 
23189
23190 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23191
23192         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23193         LogicalOr and LogicalAnd that can benefit from recursively
23194         handling EmitBranchable.  The code now should be nice for Paolo.
23195
23196 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23197
23198         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23199         the Type lookups, as we perform quite a number of lookups on
23200         non-Types.  This can be removed once we can deterministically tell
23201         whether we have a type or a namespace in advance.
23202
23203         But this might require special hacks from our corlib.
23204
23205         * TODO: updated.
23206
23207         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23208         and double which avoids a conversion from an integer to a double.
23209
23210         * expression.cs: tiny optimization, avoid calling IsConstant,
23211         because it effectively performs the lookup twice.
23212
23213 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23214
23215         But a bogus return here to keep the semantics of the old code
23216         until the Mono runtime is fixed.
23217
23218         * pending.cs (GetMissingInterfaces): New method used to remove all
23219         the interfaces that are already implemented by our parent
23220         classes from the list of pending methods. 
23221
23222         * interface.cs: Add checks for calls after ResolveTypeExpr.
23223
23224 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23225
23226         * class.cs (Class.Emit): Report warning 67: event not used if the
23227         warning level is beyond 3.
23228
23229         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23230         being a NullLiteral.
23231
23232         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23233         specifiers. 
23234
23235         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23236         path that might fail if a type can not be resolved.
23237
23238         * expression.cs (Binary.Emit): Emit unsigned versions of the
23239         operators. 
23240
23241         * driver.cs: use error 5.
23242
23243 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23244
23245         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
23246
23247 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
23248
23249         * cs-parser.jay (switch_section): A beautiful patch from Martin
23250         Baulig that fixed 33094.
23251
23252 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
23253
23254         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
23255         Check whether the base is abstract and report an error if so.
23256
23257         * expression.cs (IndexerAccess.DoResolveLValue,
23258         IndexerAccess.DoResolve): ditto. 
23259
23260         (Invocation.DoResolve): ditto.
23261
23262         (Invocation.FullMethodDesc): Improve the report string.
23263
23264         * statement.cs (Block): Eliminate IsVariableDefined as it is
23265         basically just a wrapper for GetVariableInfo.
23266
23267         * ecore.cs (SimpleName): Use new 
23268
23269         * support.cs (ReflectionParamter.ParameterType): We unwrap the
23270         type, as we return the actual parameter ref/unref state on a
23271         different call.
23272
23273 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
23274
23275         * support.cs: Return proper flags REF/OUT fixing the previous
23276         commit.  
23277
23278         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
23279         not used to mean `ref' but `ref or out' in ParameterReference
23280
23281         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
23282         full type signature instead of calling TypeManger.CSharpName
23283         ourselves. 
23284
23285         * support.cs (InternalParameters.ParameterDesc): Do not compare
23286         directly to the modflags, because REF/OUT will actually be bitsets
23287         if set. 
23288
23289         * delegate.cs (VerifyMethod): Check also the modifiers.
23290
23291         * cs-tokenizer.cs: Fix bug where floating point values with an
23292         exponent where a sign was missing was ignored.
23293
23294         * driver.cs: Allow multiple assemblies to be specified in a single
23295         /r: argument
23296
23297 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
23298
23299         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
23300         because identifiers after a parenthesis would end up in this kind
23301         of production, and we needed to desamiguate it for having casts
23302         like:
23303
23304                 (UserDefinedType *) xxx
23305
23306 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
23307
23308         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
23309         we should set on the Bindingflags.NonPublic, but not turn on
23310         private_ok.  private_ok controls whether a Private member is
23311         returned (this is chekced on the filter routine), while the
23312         BindingFlags.NonPublic just controls whether private/protected
23313         will be allowed.   This fixes the problem part of the problem of
23314         private properties being allowed to be used in derived classes.
23315
23316         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
23317         so we can call the children DoResolveLValue method (this will
23318         properly signal errors on lvalue assignments to base properties)
23319
23320         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
23321         getter are null, and we have a property info, we know that this
23322         happened because the lookup failed, so we report an error 122 for
23323         protection level violation.
23324
23325         We also silently return if setter and getter are null in the
23326         resolve functions, this condition only happens if we have flagged
23327         the error before.  This is the other half of the problem. 
23328
23329         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
23330         not have accessibility information, that is why we were returning
23331         true in the filter function in typemanager.cs.
23332
23333         To properly report 122 (property is inaccessible because of its
23334         protection level) correctly, we report this error in ResolveAccess
23335         by failing if both the setter and the getter are lacking (ie, the
23336         lookup failed). 
23337
23338         DoResolve and DoLResolve have been modified to check for both
23339         setter/getter being null and returning silently, the reason being
23340         that I did not want to put the knowledge about this error in upper
23341         layers, like:
23342
23343         int old = Report.Errors;
23344         x = new PropertyExpr (...);
23345         if (old != Report.Errors)
23346                 return null;
23347         else
23348                 return x;
23349
23350         So the property expr is returned, but it is invalid, so the error
23351         will be flagged during the resolve process. 
23352
23353         * class.cs: Remove InheritablePropertySignatureCompare from the
23354         class, as we no longer depend on the property signature to compute
23355         whether it is possible to implement a method or not.
23356
23357         The reason is that calling PropertyInfo.GetGetMethod will return
23358         null (in .NET, in Mono it works, and we should change this), in
23359         cases where the Get Method does not exist in that particular
23360         class.
23361
23362         So this code:
23363
23364         class X { public virtual int A { get { return 1; } } }
23365         class Y : X { }
23366         class Z : Y { public override int A { get { return 2; } } }
23367
23368         Would fail in Z because the parent (Y) would not have the property
23369         defined.  So we avoid this completely now (because the alternative
23370         fix was ugly and slow), and we now depend exclusively on the
23371         method names.
23372
23373         (PropertyBase.CheckBase): Use a method-base mechanism to find our
23374         reference method, instead of using the property.
23375
23376         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
23377         routines are gone now.
23378
23379         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
23380         names, they were incorrectly named.
23381
23382         * cs-tokenizer.cs: Return are more gentle token on failure. 
23383
23384         * pending.cs (PendingImplementation.InterfaceMethod): This routine
23385         had an out-of-sync index variable, which caused it to remove from
23386         the list of pending methods the wrong method sometimes.
23387
23388 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
23389
23390         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
23391         CanWrite, because those refer to this particular instance of the
23392         property, and do not take into account the fact that we can
23393         override single members of a property.
23394
23395         Constructor requires an EmitContext.  The resolution process does
23396         not happen here, but we need to compute the accessors before,
23397         because the resolution does not always happen for properties.
23398
23399         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
23400         subclass, before we did not update this flag, but we did update
23401         bindingflags. 
23402
23403         (GetAccessors): Drop this routine, as it did not work in the
23404         presence of partially overwritten set/get methods. 
23405
23406         Notice that this broke the cs1540 detection, but that will require
23407         more thinking. 
23408
23409 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23410
23411         * class.cs:
23412         * codegen.cs:
23413         * driver.cs: issue a warning instead of an error if we don't support
23414         debugging for the platform. Also ignore a couple of errors that may
23415         arise when trying to write the symbols. Undo my previous patch.
23416
23417 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23418
23419         * driver.cs: ignore /debug switch except for Unix platforms.
23420
23421 2002-10-23  Nick Drochak  <ndrochak@gol.com>
23422
23423         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
23424
23425 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
23426
23427         * driver.cs: Do not make mcs-debug conditional, so we do not break
23428         builds that use it.
23429
23430         * statement.cs (UsageVector.MergeChildren): I would like Martin to
23431         review this patch.  But basically after all the children variables
23432         have been merged, the value of "Breaks" was not being set to
23433         new_breaks for Switch blocks.  I think that it should be set after
23434         it has executed.  Currently I set this to the value of new_breaks,
23435         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
23436         conservative, but I do not understand this code very well.
23437
23438         I did not break anything in the build, so that is good ;-)
23439
23440         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
23441
23442 2002-10-20  Mark Crichton  <crichton@gimp.org>
23443
23444         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
23445
23446 2002-10-20  Nick Drochak  <ndrochak@gol.com>
23447
23448         * cfold.cs: Fixed compile blocker.
23449
23450 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
23451
23452         * driver.cs: I was chekcing the key, not the file.
23453
23454 2002-10-19  Ravi Pratap  <ravi@ximian.com>
23455
23456         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
23457         message that we were generating - we just need to silently return
23458         a null.
23459
23460 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
23461
23462         * class.cs (Event.Define): Change my previous commit, as this
23463         breaks the debugger.  This is a temporary hack, as it seems like
23464         the compiler is generating events incorrectly to begin with.
23465
23466         * expression.cs (Binary.ResolveOperator): Added support for 
23467         "U operator - (E x, E y)"
23468
23469         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
23470         y)".
23471
23472         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
23473         init-only variables, but this path did not take into account that
23474         there might be also instance readonly variables.  Correct this
23475         problem. 
23476
23477         This fixes bug 32253
23478
23479         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
23480         delegates as well.
23481
23482         * driver.cs: Change the extension for modules to `netmodule'
23483
23484         * cs-parser.jay: Improved slightly the location tracking for
23485         the debugger symbols.
23486
23487         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
23488         modifiers that were specified instead of the hardcoded value
23489         (FamAndAssem).  This was basically ignoring the static modifier,
23490         and others.  Fixes 32429.
23491
23492         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
23493         fixed a bug in the process (32476)
23494
23495         * expression.cs (ArrayAccess.EmitAssign): Patch from
23496         hwang_rob@yahoo.ca that fixes bug 31834.3
23497
23498 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
23499
23500         * driver.cs: Make the module extension .netmodule.
23501
23502 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
23503
23504         * driver.cs: Report an error if the resource file is not found
23505         instead of crashing.
23506
23507         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
23508         false, like Emit does.
23509
23510 2002-10-16  Nick Drochak  <ndrochak@gol.com>
23511
23512         * typemanager.cs: Remove unused private member.  Also reported mcs
23513         bug to report this as a warning like csc.
23514
23515 2002-10-15  Martin Baulig  <martin@gnome.org>
23516
23517         * statement.cs (Statement.Emit): Made this a virtual method; emits
23518         the line number info and calls DoEmit().
23519         (Statement.DoEmit): New protected abstract method, formerly knows
23520         as Statement.Emit().
23521
23522         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
23523
23524 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
23525
23526         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
23527         have fixed a remaining problem: not every AddXXXX was adding a
23528         fully qualified name.  
23529
23530         Now everyone registers a fully qualified name in the DeclSpace as
23531         being defined instead of the partial name.  
23532
23533         Downsides: we are slower than we need to be due to the excess
23534         copies and the names being registered this way.  
23535
23536         The reason for this is that we currently depend (on the corlib
23537         bootstrap for instance) that types are fully qualified, because
23538         we dump all the types in the namespace, and we should really have
23539         types inserted into the proper namespace, so we can only store the
23540         basenames in the defined_names array.
23541
23542 2002-10-10  Martin Baulig  <martin@gnome.org>
23543
23544         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
23545         from bug #31834, see the bug report for a testcase which is
23546         miscompiled.
23547
23548 2002-10-10  Martin Baulig  <martin@gnome.org>
23549
23550         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
23551         flow analysis code for this.
23552
23553         * statement.cs (Do, While, For): Tell the flow analysis code about
23554         infinite loops.
23555         (FlowBranching.UsageVector): Added support for infinite loops.
23556         (Block.Resolve): Moved the dead code elimination here and use flow
23557         analysis to do it.
23558
23559 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
23560
23561         * class.cs (Field.Define): Catch cycles on struct type
23562         definitions. 
23563
23564         * typemanager.cs (IsUnmanagedtype): Do not recursively check
23565         fields if the fields are static.  We only need to check instance
23566         fields. 
23567
23568         * expression.cs (As.DoResolve): Test for reference type.
23569
23570         * statement.cs (Using.ResolveExpression): Use
23571         ConvertImplicitRequired, not ConvertImplicit which reports an
23572         error on failture
23573         (Using.ResolveLocalVariableDecls): ditto.
23574
23575         * expression.cs (Binary.ResolveOperator): Report errors in a few
23576         places where we had to.
23577
23578         * typemanager.cs (IsUnmanagedtype): Finish implementation.
23579
23580 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
23581
23582         * expression.cs: Use StoreFromPtr instead of extracting the type
23583         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
23584
23585         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
23586         an enumeration value to a System.Enum, but System.Enum is not a
23587         value type, but an class type, so we need to box.
23588
23589         (Expression.ConvertExplicit): One codepath could return
23590         errors but not flag them.  Fix this.  Fixes #31853
23591
23592         * parameter.cs (Resolve): Do not allow void as a parameter type.
23593
23594 2002-10-06  Martin Baulig  <martin@gnome.org>
23595
23596         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
23597         if it's a class type and not a struct.  Fixes #31815.
23598
23599 2002-10-06  Martin Baulig  <martin@gnome.org>
23600
23601         * statement.cs: Reworked the flow analysis code a bit to make it
23602         usable for dead code elimination.
23603
23604 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23605
23606         * cs-parser.jay: allow empty source files. Fixes bug #31781.
23607
23608 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23609
23610         * expression.cs (ComposedCast.DoResolveType): A quick workaround
23611         to fix the test 165, will investigate deeper.
23612
23613 2002-10-04  Martin Baulig  <martin@gnome.org>
23614
23615         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
23616         finally blocks actually work.
23617         (Try.Resolve): We don't need to create a sibling for `finally' if
23618         there is no finally block.
23619
23620 2002-10-04  Martin Baulig  <martin@gnome.org>
23621
23622         * class.cs (Constructor.Define): The default accessibility for a
23623         non-default constructor is private, not public.
23624
23625 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
23626
23627         * class.cs (Constructor): Make AllowedModifiers public, add
23628         EXTERN.
23629
23630         * cs-parser.jay: Perform the modifiers test here, as the
23631         constructor for the Constructor class usually receives a zero
23632         because of the way we create it (first we create, later we
23633         customize, and we were never checking the modifiers).
23634
23635         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
23636         is a version of LookupTypeReflection that includes the type-name
23637         cache.  This can be used as a fast path for functions that know
23638         the fully qualified name and are only calling into *.GetType() to
23639         obtain a composed type.
23640
23641         This is also used by TypeManager.LookupType during its type
23642         composition.
23643
23644         (LookupType): We now also track the real type name, as sometimes
23645         we can get a quey for the real type name from things like
23646         ComposedCast.  This fixes bug 31422.
23647
23648         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
23649         complete type fullname, it does not have to go through the type
23650         resolution system to obtain the composed version of the type (for
23651         obtaining arrays or pointers).
23652
23653         (Conditional.Emit): Use the EmitBoolExpression to
23654         generate nicer code, as requested by Paolo.
23655
23656         (ArrayCreation.CheckIndices): Use the patch from
23657         hwang_rob@yahoo.ca to validate the array initializers. 
23658
23659 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
23660
23661         * class.cs (ConstructorInitializer.Emit): simplify code by using
23662         Invocation.EmitCall, and at the same time, fix the bugs in calling
23663         parent constructors that took variable arguments. 
23664
23665         * ecore.cs (Expression.ConvertNumericExplicit,
23666         Expression.ImplicitNumericConversion): Remove the code that
23667         manually wrapped decimal (InternalTypeConstructor call is now gone
23668         as well).
23669
23670         * expression.cs (Cast.TryReduce): Also handle decimal types when
23671         trying to perform a constant fold on the type.
23672
23673         * typemanager.cs (IsUnmanagedtype): Partially implemented.
23674
23675         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
23676         that only turned off an error report, and did nothing else. 
23677
23678 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
23679
23680         * driver.cs: Handle and ignore /fullpaths
23681
23682 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
23683
23684         * expression.cs (Binary.ResolveOperator): Catch the case where
23685         DoNumericPromotions returns true, 
23686
23687         (Binary.DoNumericPromotions): Simplify the code, and the tests.
23688
23689 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
23690
23691         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
23692         report error 70.
23693
23694 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
23695
23696         * ecore.cs (ConvertNumericExplicit): It is not enough that the
23697         conversion exists, but it is also required that the conversion be
23698         performed.  This manifested in "(Type64Enum) 2".  
23699
23700         * class.cs (TypeManager.AddMethod): The fix is not to change
23701         AddEnum, because that one was using a fully qualified name (every
23702         DeclSpace derivative does), but to change the AddMethod routine
23703         that was using an un-namespaced name.  This now correctly reports
23704         the duplicated name.
23705
23706         Revert patch until I can properly fix it.  The issue
23707         is that we have a shared Type space across all namespaces
23708         currently, which is wrong.
23709
23710         Options include making the Namespace a DeclSpace, and merge
23711         current_namespace/current_container in the parser.
23712
23713 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
23714
23715         * cs-parser.jay: Improve error reporting when we get a different
23716         kind of expression in local_variable_type and
23717         local_variable_pointer_type. 
23718
23719         Propagate this to avoid missleading errors being reported.
23720
23721         * ecore.cs (ImplicitReferenceConversion): treat
23722         TypeManager.value_type as a target just like object_type.   As
23723         code like this:
23724
23725         ValueType v = 1;
23726
23727         Is valid, and needs to result in the int 1 being boxed before it
23728         is assigned to the value type v.
23729
23730         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
23731         to validate the enumeration name.
23732
23733         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
23734         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
23735         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
23736
23737         * ecore.cs (TryImplicitIntConversion): When doing an
23738         implicit-enumeration-conversion, check if the type is 64-bits and
23739         perform a conversion before passing to EnumConstant.
23740
23741 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
23742
23743         * decl.cs (Error_AmbiguousTypeReference); New routine used to
23744         report ambiguous type references.  Unlike the MS version, we
23745         report what the ambiguity is.   Innovation at work ;-)
23746
23747         (DeclSpace.FindType): Require a location argument to
23748         display when we display an ambiguous error.
23749
23750         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
23751
23752         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
23753
23754         * expression.cs (EmitDynamicInitializers): Apply patch from
23755         hwang_rob@yahoo.ca that fixes the order in which we emit our
23756         initializers. 
23757
23758 2002-09-21  Martin Baulig  <martin@gnome.org>
23759
23760         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
23761         delegate takes no arguments.
23762
23763 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
23764
23765         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
23766         from integers.
23767
23768         * expression.cs: Extract the underlying type.
23769
23770         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
23771
23772         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
23773
23774 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
23775
23776         * class.cs (TypeContainer.DefineType): We can not use the nice
23777         PackingSize with the size set to 1 DefineType method, because it
23778         will not allow us to define the interfaces that the struct
23779         implements.
23780
23781         This completes the fixing of bug 27287
23782
23783         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
23784         means also structs.  This fixes part of the problem. 
23785         (Expresion.ImplicitReferenceConversionExists): ditto.
23786
23787         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
23788         error if there were no errors reported during the type lookup
23789         process, to avoid duplicates or redundant errors.  Without this
23790         you would get an ambiguous errors plus a type not found.  We have
23791         beaten the user enough with the first error.  
23792
23793         (DeclSparce.FindType): Emit a warning if we have an ambiguous
23794         reference. 
23795
23796         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
23797         during the resolution process, stop the lookup, this avoids
23798         repeated error reports (same error twice).
23799
23800         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
23801
23802         * typemanager.cs (LookupType): Redo the type lookup code to match
23803         the needs of System.Reflection.  
23804
23805         The issue is that System.Reflection requires references to nested
23806         types to begin with a "+" sign instead of a dot.  So toplevel
23807         types look like: "NameSpace.TopLevelClass", and nested ones look
23808         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
23809         levels. 
23810
23811 2002-09-19  Martin Baulig  <martin@gnome.org>
23812
23813         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
23814         says that a method always returns or always throws an exception,
23815         don't report the CS0161.
23816
23817         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
23818         set `Returns = new_returns'.
23819
23820 2002-09-19  Martin Baulig  <martin@gnome.org>
23821
23822         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
23823         to an enum constant, check for a CS0176.
23824
23825 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
23826
23827         * class.cs (TypeContainer.CheckPairedOperators): Now we check
23828         for operators that must be in pairs and report errors.
23829
23830         * ecore.cs (SimpleName.DoResolveType): During the initial type
23831         resolution process, when we define types recursively, we must
23832         check first for types in our current scope before we perform
23833         lookups in the enclosing scopes.
23834
23835         * expression.cs (MakeByteBlob): Handle Decimal blobs.
23836
23837         (Invocation.VerifyArgumentsCompat): Call
23838         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
23839         I thought we were supposed to always call this, but there are a
23840         few places in the code where we dont do it.
23841
23842 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
23843
23844         * driver.cs: Add support in -linkres and -resource to specify the
23845         name of the identifier.
23846
23847 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23848
23849         * ecore.cs (StandardConversionExists): Sync with the conversion
23850         code: allow anything-* to void* conversions.
23851
23852         (FindMostSpecificSource): Use an Expression argument
23853         instead of a Type, because we might be handed over a Literal which
23854         gets a few more implicit conversions that plain types do not.  So
23855         this information was being lost.
23856
23857         Also, we drop the temporary type-holder expression when not
23858         required.
23859
23860 2002-09-17  Martin Baulig  <martin@gnome.org>
23861
23862         * class.cs (PropertyBase.CheckBase): Don't check the base class if
23863         this is an explicit interface implementation.
23864
23865 2002-09-17  Martin Baulig  <martin@gnome.org>
23866
23867         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
23868         different `IndexerName' attributes.
23869
23870         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
23871         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
23872         virtual CommonResolve().
23873
23874 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
23875
23876         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
23877         and convert that to the UnderlyingType.
23878
23879         * statement.cs (Foreach.Resolve): Indexers are just like variables
23880         or PropertyAccesses.
23881
23882         * cs-tokenizer.cs (consume_string): Track line numbers and columns
23883         inside quoted strings, we were not doing this before.
23884
23885 2002-09-16  Martin Baulig  <martin@gnome.org>
23886
23887         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
23888         resolve it.  This is needed for the definite assignment check of the
23889         instance expression, fixes bug #29846.
23890         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
23891
23892 2002-09-16  Nick Drochak  <ndrochak@gol.com>
23893
23894         * parameter.cs: Fix compile error.  Cannot reference static member
23895         from an instance object.  Is this an mcs bug?
23896
23897 2002-09-14  Martin Baulig  <martin@gnome.org>
23898
23899         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
23900         multiple times.  Fixes bug #30295, added test-166.cs.
23901
23902 2002-09-14  Martin Baulig  <martin@gnome.org>
23903
23904         * statement.cs (Block.Emit): Don't emit unreachable code.
23905         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
23906         `break' statements.
23907         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
23908
23909 2002-09-14  Martin Baulig  <martin@gnome.org>
23910
23911         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
23912         is set.
23913
23914 2002-09-14  Martin Baulig  <martin@gnome.org>
23915
23916         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
23917         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
23918         be false on the ms runtime.
23919
23920 2002-09-13  Martin Baulig  <martin@gnome.org>
23921
23922         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
23923         the CS0038 error message.
23924
23925 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
23926
23927         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
23928         constant inside, return it.
23929
23930 2002-09-12  Martin Baulig  <martin@gnome.org>
23931
23932         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
23933         implicit conversion can be done between enum types.
23934
23935         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
23936         check whether an implicit conversion to the current enum's UnderlyingType
23937         exists and report an error if not.
23938
23939         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
23940         without debugging support.
23941
23942         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
23943         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
23944
23945 2002-09-12  Martin Baulig  <martin@gnome.org>
23946
23947         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
23948
23949         * ecore.cs (IMemberExpr.DeclaringType): New property.
23950         (SimpleName.SimpleNameResolve): Check whether we're accessing a
23951         nonstatic member of an outer type (CS0038).
23952
23953 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
23954
23955         * driver.cs: Activate the using-error detector at warning level
23956         4 (at least for MS-compatible APIs).
23957
23958         * namespace.cs (VerifyUsing): Small buglett fix.
23959
23960         * pending.cs (PendingImplementation): pass the container pointer. 
23961
23962         * interface.cs (GetMethods): Allow for recursive definition.  Long
23963         term, I would like to move every type to support recursive
23964         definitions, not the current ordering mechanism that we have right
23965         now.
23966
23967         The situation is this: Attributes are handled before interfaces,
23968         so we can apply attributes to interfaces.  But some attributes
23969         implement interfaces, we will now handle the simple cases
23970         (recursive definitions will just get an error).  
23971
23972         * parameter.cs: Only invalidate types at the end if we fail to
23973         lookup all types.  
23974
23975 2002-09-09  Martin Baulig  <martin@gnome.org>
23976
23977         * ecore.cs (PropertyExpr.Emit): Also check for
23978         TypeManager.system_int_array_get_length so this'll also work when
23979         compiling corlib.  Fixes #30003.
23980
23981 2002-09-09  Martin Baulig  <martin@gnome.org>
23982
23983         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
23984         and throw an exception if we can't get the type's size.  Fixed #30040,
23985         added test-165.cs.
23986
23987 2002-09-09  Martin Baulig  <martin@gnome.org>
23988
23989         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
23990
23991         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
23992         context.  Fixes bug #30027.
23993
23994         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
23995         virtual functions.  Fixes bug #30043, added test-164.cs.
23996
23997 2002-09-08  Ravi Pratap  <ravi@ximian.com>
23998
23999         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24000
24001 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24002
24003         * driver.cs: Use an object to get the windows codepage since it's not a
24004         static property.
24005
24006 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24007
24008         * statement.cs (For.Emit): for infinite loops (test == null)
24009         return whether there is a break inside, not always "true".
24010
24011         * namespace.cs (UsingEntry): New struct to hold the name of the
24012         using definition, the location where it is defined, and whether it
24013         has been used in a successful type lookup.
24014
24015         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24016         strings.
24017
24018         * decl.cs: ditto.
24019
24020 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24021
24022         * attribute.cs : Fix incorrect code which relied on catching
24023         a NullReferenceException to detect a null being passed in
24024         where an object was expected.
24025
24026 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24027
24028         * statement.cs (Try): flag the catch variable as assigned
24029
24030         * expression.cs (Cast): Simplified by using ResolveType instead of
24031         manually resolving.
24032
24033         * statement.cs (Catch): Fix bug by using ResolveType.
24034
24035 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24036
24037         * expression.cs (BetterConversion): Special case for when we have
24038         a NullLiteral as the argument and we have to choose between string
24039         and object types - we choose string the way csc does.
24040
24041         * attribute.cs (Attribute.Resolve): Catch the
24042         NullReferenceException and report error #182 since the Mono
24043         runtime no more has the bug and having this exception raised means
24044         we tried to select a constructor which takes an object and is
24045         passed a null.
24046
24047 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24048
24049         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24050         message (1502, 1503) when we can't locate a method after overload
24051         resolution. This is much more informative and closes the bug
24052         Miguel reported.
24053
24054         * interface.cs (PopulateMethod): Return if there are no argument
24055         types. Fixes a NullReferenceException bug.
24056
24057         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24058         expressions too. Previously we were checking only in one place for
24059         positional arguments leaving out named arguments.
24060
24061         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24062         type to the enum type is not allowed. Remove code corresponding to
24063         that.
24064
24065         (ConvertNumericExplicit): Allow explicit conversions from
24066         the underlying type to enum type. This precisely follows the spec
24067         and closes a bug filed by Gonzalo.
24068
24069 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24070
24071         * compiler.csproj:
24072         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24073
24074 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24075
24076         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24077         it was important that we stored the right value after the
24078         reduction in `converted'.
24079
24080 2002-09-04  Martin Baulig  <martin@gnome.org>
24081
24082         * location.cs (Location.SymbolDocument): Use full pathnames for the
24083         source files.
24084
24085 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24086
24087         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24088         of the expression resolve mechanism, because that will catch the
24089         SimpleName error failures.
24090
24091         (Conditional): If we can not resolve the
24092         expression, return, do not crash.
24093
24094 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24095
24096         * cs-tokenizer.cs:
24097         (location): display token name instead of its number.
24098
24099 2002-08-28  Martin Baulig  <martin@gnome.org>
24100
24101         * expression.cs (Binary.ResolveOperator): Don't silently return
24102         but return an error if an operator cannot be applied between two
24103         enum types.
24104
24105 2002-08-28  Martin Baulig  <martin@gnome.org>
24106
24107         * class.cs (Constructor.Define): Set the permission attributes
24108         correctly instead of making all constructors public.
24109
24110 2002-08-28  Martin Baulig  <martin@gnome.org>
24111
24112         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24113         for private members before reporting a CS0103; if we find anything,
24114         it's a CS0122.
24115
24116 2002-08-28  Martin Baulig  <martin@gnome.org>
24117
24118         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24119         to check whether `closure_start_type == closure_invocation_type',
24120         we also need to check whether `m.DeclaringType == closure_invocation_type'
24121         before bypassing the permission checks.  We might be accessing
24122         protected/private members from the base class.
24123         (TypeManager.RealMemberLookup): Only set private_ok if private
24124         members were requested via BindingFlags.NonPublic.
24125
24126         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24127
24128         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24129         MethodGroupExpr.IsExplicitImpl if appropriate.
24130         (Invocation.DoResolve): Don't report the CS0120 for explicit
24131         interface implementations.
24132
24133 2002-08-27  Martin Baulig  <martin@gnome.org>
24134
24135         * expression.cs (Invocation.DoResolve): If this is a static
24136         method and we don't have an InstanceExpression, we must report
24137         a CS0120.
24138
24139 2002-08-25  Martin Baulig  <martin@gnome.org>
24140
24141         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24142         `==' between a valuetype and an object.
24143
24144 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24145
24146         * ecore.cs (TypeExpr): Provide a ToString method.
24147
24148 2002-08-24  Martin Baulig  <martin@gnome.org>
24149
24150         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24151         now called proggie.dbg and it's a binary file.
24152
24153 2002-08-23  Martin Baulig  <martin@gnome.org>
24154
24155         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24156
24157 2002-08-23  Martin Baulig  <martin@gnome.org>
24158
24159         * struct.cs (MyStructInfo.ctor): Make this work with empty
24160         structs; it's not allowed to use foreach() on null.
24161
24162 2002-08-23  Martin Baulig  <martin@gnome.org>
24163
24164         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24165         writer the full pathname of the generated assembly.
24166
24167 2002-08-23  Martin Baulig  <martin@gnome.org>
24168
24169         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24170         A `finally' block never returns or breaks; improved handling of
24171         unreachable code.
24172
24173 2002-08-23  Martin Baulig  <martin@gnome.org>
24174
24175         * statement.cs (Throw.Resolve): Allow `throw null'.
24176
24177 2002-08-23  Martin Baulig  <martin@gnome.org>
24178
24179         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24180         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24181         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24182         MemberLookup would return a wrong event if this is an explicit
24183         interface implementation and the class has an event with the same
24184         name.
24185
24186 2002-08-23  Martin Baulig  <martin@gnome.org>
24187
24188         * statement.cs (Block.AddChildVariableNames): New public method.
24189         (Block.AddChildVariableName): Likewise.
24190         (Block.IsVariableNameUsedInChildBlock): Likewise.
24191         (Block.AddVariable): Check whether a variable name has already
24192         been used in a child block.
24193
24194         * cs-parser.jay (declare_local_variables): Mark all variable names
24195         from the current block as being used in a child block in the
24196         implicit block.
24197
24198 2002-08-23  Martin Baulig  <martin@gnome.org>
24199
24200         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24201         find the symbol writer.
24202
24203         * driver.cs: csc also allows the arguments to /define being
24204         separated by commas, not only by semicolons.
24205
24206 2002-08-23  Martin Baulig  <martin@gnome.org>
24207
24208         * interface.cs (Interface.GetMembers): Added static check for events.
24209
24210 2002-08-15  Martin Baulig  <martin@gnome.org>
24211
24212         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24213         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24214
24215         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24216         why the MethodData.EmitDestructor() change was necessary.
24217
24218 2002-08-20  Martin Baulig  <martin@gnome.org>
24219
24220         * class.cs (TypeContainer.FindMembers): Added static check for events.
24221
24222         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24223
24224         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24225         use Type.GetEvents(), not Type.FindMembers().
24226
24227 2002-08-20  Martin Baulig  <martin@gnome.org>
24228
24229         * decl.cs (MemberCache): Added a special method cache which will
24230         be used for method-only searched.  This ensures that a method
24231         search will return a MethodInfo with the correct ReflectedType for
24232         inherited methods.      
24233
24234 2002-08-20  Martin Baulig  <martin@gnome.org>
24235
24236         * decl.cs (DeclSpace.FindMembers): Made this public.
24237
24238 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24239
24240         * delegate.cs: fixed build on windows.
24241         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24242
24243 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24244
24245         * ecore.cs (StandardConversionExists): Return a false
24246         if we are trying to convert the void type to anything else
24247         since that is not allowed.
24248
24249         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
24250         we flag error 70 in the event an event is trying to be accessed
24251         directly from outside the declaring type.
24252
24253 2002-08-20  Martin Baulig  <martin@gnome.org>
24254
24255         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
24256         MemberCache from typemanager.cs to decl.cs.
24257
24258 2002-08-19  Martin Baulig  <martin@gnome.org>
24259
24260         * class.cs (TypeContainer): Implement IMemberContainer.
24261         (TypeContainer.DefineMembers): Create the MemberCache.
24262         (TypeContainer.FindMembers): Do better BindingFlags checking; only
24263         return public members if BindingFlags.Public was given, check
24264         whether members are static.
24265
24266 2002-08-16  Martin Baulig  <martin@gnome.org>
24267
24268         * decl.cs (DeclSpace.Define): Splitted this in Define and
24269         DefineMembers.  DefineMembers is called first and initializes the
24270         MemberCache.
24271
24272         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
24273         DefineMembers() on all our DeclSpaces.
24274
24275         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
24276         but call DefineMembers() on all nested interfaces.  We call their
24277         Define() in our new Define() function.
24278
24279         * interface.cs (Interface): Implement IMemberContainer.
24280         (Interface.Define): Moved all code except the attribute stuf to
24281         DefineMembers().
24282         (Interface.DefineMembers): Initialize the member cache.
24283
24284         * typemanager.cs (IMemberFinder): Removed this interface, we don't
24285         need this anymore since we can use MemberCache.FindMembers directly.
24286
24287 2002-08-19  Martin Baulig  <martin@gnome.org>
24288
24289         * typemanager.cs (MemberCache): When creating the cache for an
24290         interface type, add all inherited members.
24291         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
24292         to `out bool used_cache' and documented it.
24293         (TypeManager.MemberLookup): If we already used the cache in the first
24294         iteration, we don't need to do the interfaces check.
24295
24296 2002-08-19  Martin Baulig  <martin@gnome.org>
24297
24298         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
24299         here from IMemberFinder and don't implement this interface anymore.
24300         (DeclSpace.MemberCache): Moved here from IMemberFinder.
24301
24302         * typemanager.cs (IMemberFinder): This interface is now only used by
24303         classes which actually support the member cache.
24304         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
24305         since we only put DeclSpaces into this Hashtable.
24306         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
24307         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
24308
24309 2002-08-16  Martin Baulig  <martin@gnome.org>
24310
24311         * typemanager.cs (ICachingMemberFinder): Removed.
24312         (IMemberFinder.MemberCache): New property.
24313         (TypeManager.FindMembers): Merged this with RealFindMembers().
24314         This function will never be called from TypeManager.MemberLookup()
24315         so we can't use the cache here, just the IMemberFinder.
24316         (TypeManager.MemberLookup_FindMembers): Check whether the
24317         IMemberFinder has a MemberCache and call the cache's FindMembers
24318         function.
24319         (MemberCache): Rewrote larger parts of this yet another time and
24320         cleaned it up a bit.
24321
24322 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
24323
24324         * driver.cs (LoadArgs): Support quoting.
24325
24326         (Usage): Show the CSC-like command line arguments.
24327
24328         Improved a few error messages.
24329
24330 2002-08-15  Martin Baulig  <martin@gnome.org>
24331
24332         * typemanager.cs (IMemberContainer.Type): New property.
24333         (IMemberContainer.IsInterface): New property.
24334
24335         The following changes are conditional to BROKEN_RUNTIME, which is
24336         defined at the top of the file.
24337
24338         * typemanager.cs (MemberCache.MemberCache): Don't add the base
24339         class'es members, but add all members from TypeHandle.ObjectType
24340         if we're an interface.
24341         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
24342         is the current type.
24343         (MemberCache.CacheEntry.Container): Removed this field.
24344         (TypeHandle.GetMembers): Include inherited members.
24345
24346 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24347
24348         * typemanager.cs: fixed compilation and added a comment on a field that
24349         is never used.
24350
24351 2002-08-15  Martin Baulig  <martin@gnome.org>
24352
24353         * class.cs (ConstructorInitializer.Resolve): In the
24354         Expression.MemberLookup call, use the queried_type as
24355         invocation_type.
24356
24357         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
24358         declared' attribute, it's always true.
24359         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
24360         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
24361         temporary wrapper for FindMembers which tells MemberLookup whether
24362         members from the base classes are included in the return value.
24363         This will go away soon.
24364         (TypeManager.MemberLookup): Use this temporary hack here; once the
24365         new MemberCache is completed, we don't need to do the DeclaredOnly
24366         looping here anymore since the MemberCache will take care of this.
24367         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
24368         (MemberCache): When creating the MemberCache for a class, get
24369         members from the current class and all its base classes.
24370         (MemberCache.CacheEntry.Container): New field.  This is a
24371         temporary hack until the Mono runtime is fixed to distinguish
24372         between ReflectedType and DeclaringType.  It allows us to use MCS
24373         with both the MS runtime and the unfixed Mono runtime without
24374         problems and without accecting performance.
24375         (MemberCache.SearchMembers): The DeclaredOnly looping from
24376         TypeManager.MemberLookup is now done here.      
24377
24378 2002-08-14  Martin Baulig  <martin@gnome.org>
24379
24380         * statement.cs (MyStructInfo.MyStructInfo): Don't call
24381         Type.GetFields on dynamic types but get the fields from the
24382         corresponding TypeContainer.
24383         (MyStructInfo.GetStructInfo): Added check for enum types.
24384
24385         * typemanager.cs (MemberList.IsSynchronized): Implemented.
24386         (MemberList.SyncRoot): Implemented.
24387         (TypeManager.FilterWithClosure): No need to check permissions if
24388         closure_start_type == closure_invocation_type, don't crash if
24389         closure_invocation_type is null.
24390
24391 2002-08-13  Martin Baulig  <martin@gnome.org>
24392
24393         Rewrote TypeContainer.FindMembers to use a member cache.  This
24394         gives us a speed increase of about 35% for the self-hosting MCS
24395         build and of about 15-20% for the class libs (both on GNU/Linux).
24396
24397         * report.cs (Timer): New class to get enhanced profiling.  This
24398         whole class is "TIMER" conditional since it remarkably slows down
24399         compilation speed.
24400
24401         * class.cs (MemberList): New class.  This is an IList wrapper
24402         which we're now using instead of passing MemberInfo[]'s around to
24403         avoid copying this array unnecessarily.
24404         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
24405         (ICachingMemberFinder, IMemberContainer): New interface.
24406         (TypeManager.FilterWithClosure): If `criteria' is null, the name
24407         has already been checked, otherwise use it for the name comparision.
24408         (TypeManager.FindMembers): Renamed to RealMemberFinder and
24409         provided wrapper which tries to use ICachingMemberFinder.FindMembers
24410         if possible.  Returns a MemberList, not a MemberInfo [].
24411         (TypeHandle): New class, implements IMemberContainer.  We create
24412         one instance of this class per type, it contains a MemberCache
24413         which is used to do the member lookups.
24414         (MemberCache): New class.  Each instance of this class contains
24415         all members of a type and a name-based hash table.
24416         (MemberCache.FindMembers): This is our new member lookup
24417         function.  First, it looks up all members of the requested name in
24418         the hash table.  Then, it walks this list and sorts out all
24419         applicable members and returns them.
24420
24421 2002-08-13  Martin Baulig  <martin@gnome.org>
24422
24423         In addition to a nice code cleanup, this gives us a performance
24424         increase of about 1.4% on GNU/Linux - not much, but it's already
24425         half a second for the self-hosting MCS compilation.
24426
24427         * typemanager.cs (IMemberFinder): New interface.  It is used by
24428         TypeManager.FindMembers to call FindMembers on a TypeContainer,
24429         Enum, Delegate or Interface.
24430         (TypeManager.finder_to_member_finder): New PtrHashtable.
24431         (TypeManager.finder_to_container): Removed.
24432         (TypeManager.finder_to_delegate): Removed.
24433         (TypeManager.finder_to_interface): Removed.
24434         (TypeManager.finder_to_enum): Removed.
24435
24436         * interface.cs (Interface): Implement IMemberFinder.
24437
24438         * delegate.cs (Delegate): Implement IMemberFinder.
24439
24440         * enum.cs (Enum): Implement IMemberFinder.
24441
24442         * class.cs (TypeContainer): Implement IMemberFinder.
24443
24444 2002-08-12  Martin Baulig  <martin@gnome.org>
24445
24446         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
24447
24448 2002-08-12  Martin Baulig  <martin@gnome.org>
24449
24450         * ecore.cs (ITypeExpression): New interface for expressions which
24451         resolve to a type.
24452         (TypeExpression): Renamed to TypeLookupExpression.
24453         (Expression.DoResolve): If we're doing a types-only lookup, the
24454         expression must implement the ITypeExpression interface and we
24455         call DoResolveType() on it.
24456         (SimpleName): Implement the new ITypeExpression interface.
24457         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
24458         hack, the situation that we're only looking up types can't happen
24459         anymore when this method is called.  Moved the type lookup code to
24460         DoResolveType() and call it.
24461         (SimpleName.DoResolveType): This ITypeExpression interface method
24462         is now doing the types-only lookup.
24463         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
24464         (ResolveFlags): Added MaskExprClass.
24465
24466         * expression.cs (MemberAccess): Implement the ITypeExpression
24467         interface.
24468         (MemberAccess.DoResolve): Added support for a types-only lookup
24469         when we're called via ITypeExpression.DoResolveType().
24470         (ComposedCast): Implement the ITypeExpression interface.
24471
24472         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
24473         Expression.Resolve() with ResolveFlags.Type instead.
24474
24475 2002-08-12  Martin Baulig  <martin@gnome.org>
24476
24477         * interface.cs (Interface.Define): Apply attributes.
24478
24479         * attribute.cs (Attribute.ApplyAttributes): Added support for
24480         interface attributes.
24481
24482 2002-08-11  Martin Baulig  <martin@gnome.org>
24483
24484         * statement.cs (Block.Emit): Only check the "this" variable if we
24485         do not always throw an exception.
24486
24487         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
24488         whether the property has a set accessor.
24489
24490 2002-08-11  Martin Baulig  <martin@gnome.org>
24491
24492         Added control flow analysis support for structs.
24493
24494         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
24495         with control flow analysis turned off.
24496         (IVariable): New interface.
24497         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
24498         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
24499         (FieldExpr.DoResolve): Resolve the instance expression with flow
24500         analysis turned off and do the definite assignment check after the
24501         resolving when we know what the expression will resolve to.
24502
24503         * expression.cs (LocalVariableReference, ParameterReference):
24504         Implement the new IVariable interface, only call the flow analysis
24505         code if ec.DoFlowAnalysis is true.
24506         (This): Added constructor which takes a Block argument.  Implement
24507         the new IVariable interface.
24508         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
24509         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
24510         This does the definite assignment checks for struct members.
24511
24512         * class.cs (Constructor.Emit): If this is a non-static `struct'
24513         constructor which doesn't have any initializer, call
24514         Block.AddThisVariable() to tell the flow analysis code that all
24515         struct elements must be initialized before control returns from
24516         the constructor.
24517
24518         * statement.cs (MyStructInfo): New public class.
24519         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
24520         argument to this indexer.  If non-zero, check an individual struct
24521         member, not the whole struct.
24522         (FlowBranching.CheckOutParameters): Check struct members.
24523         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
24524         overloaded versions of these methods which take an additional
24525         `int field_idx' argument to check struct members.
24526         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
24527         overloaded versions of these methods which take an additional
24528         `string field_name' argument to check struct member.s
24529         (VariableInfo): Implement the IVariable interface.
24530         (VariableInfo.StructInfo): New public property.  Returns the
24531         MyStructInfo instance of the variable if it's a struct or null.
24532         (Block.AddThisVariable): New public method.  This is called from
24533         Constructor.Emit() for non-static `struct' constructor which do
24534         not have any initializer.  It creates a special variable for the
24535         "this" instance variable which will be checked by the flow
24536         analysis code to ensure that all of the struct's fields are
24537         initialized before control returns from the constructor.
24538         (UsageVector): Added support for struct members.  If a
24539         variable/parameter is a struct with N members, we reserve a slot
24540         in the usage vector for each member.  A struct is considered fully
24541         initialized if either the struct itself (slot 0) or all its
24542         members are initialized.
24543
24544 2002-08-08  Martin Baulig  <martin@gnome.org>
24545
24546         * driver.cs (Driver.MainDriver): Only report an error CS5001
24547         if there were no compilation errors.
24548
24549         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
24550         `UnsafeContext' property to determine whether the parent is in
24551         unsafe context rather than checking the parent's ModFlags:
24552         classes nested in an unsafe class are unsafe as well.
24553
24554 2002-08-08  Martin Baulig  <martin@gnome.org>
24555
24556         * statement.cs (UsageVector.MergeChildren): Distinguish between
24557         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
24558         we return.  Added test17() and test18() to test-154.cs.
24559
24560 2002-08-08  Martin Baulig  <martin@gnome.org>
24561
24562         * typemanager.cs (TypeManager.FilterWithClosure): If we have
24563         Family access, make sure the invoking type isn't a subclass of the
24564         queried type (that'd be a CS1540).
24565
24566         * ecore.cs (Expression.MemberLookup): Added overloaded version of
24567         this method which takes an additional `Type invocation_type'.
24568
24569         * expression.cs (BaseAccess.DoResolve): Use the base type as
24570         invocation and query type.
24571         (MemberAccess.DoResolve): If the lookup failed and we're about to
24572         report a CS0122, try a lookup with the ec.ContainerType - if this
24573         succeeds, we must report a CS1540.
24574
24575 2002-08-08  Martin Baulig  <martin@gnome.org>
24576
24577         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
24578         (MethodGroupExpr): Implement the IMemberExpr interface.
24579
24580         * expression (MemberAccess.ResolveMemberAccess): No need to have
24581         any special code for MethodGroupExprs anymore, they're now
24582         IMemberExprs.   
24583
24584 2002-08-08  Martin Baulig  <martin@gnome.org>
24585
24586         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
24587         Family, FamANDAssem and FamORAssem permissions.
24588         (TypeManager.IsSubclassOrNestedChildOf): New public method.
24589
24590 2002-08-08  Martin Baulig  <martin@gnome.org>
24591
24592         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
24593         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
24594         or loop block.
24595
24596 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
24597
24598         * driver.cs: implemented /resource option to embed managed resources.
24599
24600 2002-08-07  Martin Baulig  <martin@gnome.org>
24601
24602         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
24603         (FieldBase.HasFieldInitializer): New public property.
24604         (FieldBase.GetInitializerExpression): New public method.  Resolves and
24605         returns the field initializer and makes sure it is only resolved once.
24606         (TypeContainer.EmitFieldInitializers): Call
24607         FieldBase.GetInitializerExpression to get the initializer, this ensures
24608         that it isn't resolved multiple times.
24609
24610         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
24611         the resolving process (SimpleName/MemberLookup) that we're currently
24612         emitting a field initializer (which must not access any instance members,
24613         this is an error CS0236).
24614
24615         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
24616         argument, if the `IsFieldInitializer' flag is set, we must report and
24617         error CS0236 and not an error CS0120.   
24618
24619 2002-08-07  Martin Baulig  <martin@gnome.org>
24620
24621         * ecore.cs (IMemberExpr): New public interface.
24622         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
24623         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
24624         if the expression is an IMemberExpr.
24625
24626         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
24627         to be null, implicitly default to `this' if we're non-static in
24628         this case.  Simplified the code a lot by using the new IMemberExpr
24629         interface.  Also fixed bug #28176 here.
24630
24631 2002-08-06  Martin Baulig  <martin@gnome.org>
24632
24633         * cs-parser.jay (SimpleLookup): Removed.  We need to create
24634         ParameterReferences during semantic analysis so that we can do a
24635         type-only search when resolving Cast, TypeOf and SizeOf.
24636         (block): Pass the `current_local_parameters' to the Block's
24637         constructor.
24638
24639         * class.cs (ConstructorInitializer): Added `Parameters parameters'
24640         argument to the constructor.
24641         (ConstructorInitializer.Resolve): Create a temporary implicit
24642         block with the parameters.
24643
24644         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
24645         references here if we aren't doing a type-only search.
24646
24647         * statement.cs (Block): Added constructor which takes a
24648         `Parameters parameters' argument.
24649         (Block.Parameters): New public property.
24650
24651         * support.cs (InternalParameters.Parameters): Renamed `parameters'
24652         to `Parameters' and made it public readonly.
24653
24654 2002-08-06  Martin Baulig  <martin@gnome.org>
24655
24656         * ecore.cs (Expression.Warning): Made this public as well.
24657
24658         * report.cs (Report.Debug): Print the contents of collections.
24659
24660 2002-08-06  Martin Baulig  <martin@gnome.org>
24661
24662         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
24663         used to tell Resolve() which kinds of expressions it may return.
24664         (Expression.Resolve): Added overloaded version of this method which
24665         takes a `ResolveFlags flags' argument.  This can be used to tell
24666         Resolve() which kinds of expressions it may return.  Reports a
24667         CS0118 on error.
24668         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
24669         ResolveFlags.SimpleName.
24670         (Expression.Error118): Added overloaded version of this method which
24671         takes a `ResolveFlags flags' argument.  It uses the flags to determine
24672         which kinds of expressions are allowed.
24673
24674         * expression.cs (Argument.ResolveMethodGroup): New public method.
24675         Resolves an argument, but allows a MethodGroup to be returned.
24676         This is used when invoking a delegate.
24677
24678         * TODO: Updated a bit.
24679
24680 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24681
24682         Fixed compilation with csc.
24683
24684         * ecore.cs: Expression.Error made public. Is this correct? Should
24685         Warning be made public too?
24686
24687         * expression.cs: use ea.Location instead of ea.loc.
24688         [FIXME:  Filed as bug #28607: MCS must report these errors.]
24689
24690 2002-08-06  Martin Baulig  <martin@gnome.org>
24691
24692         * ecore.cs (Expression.loc): Moved the location here instead of
24693         duplicating it in all derived classes.
24694         (Expression.Location): New public property.
24695         (Expression.Error, Expression.Warning): Made them non-static and
24696         removed the location argument.
24697         (Expression.Warning): Added overloaded version which takes an
24698         `int level' argument.
24699         (Expression.Error118): Make this non-static and removed the
24700         expression and location arguments.
24701         (TypeExpr): Added location argument to the constructor.
24702
24703         * expression.cs (StaticCallExpr): Added location argument to
24704         the constructor.
24705         (Indirection, PointerArithmetic): Likewise.
24706         (CheckedExpr, UnCheckedExpr): Likewise.
24707         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
24708         (StringPtr): Likewise.
24709
24710
24711 2002-08-05  Martin Baulig  <martin@gnome.org>
24712
24713         * expression.cs (BaseAccess.DoResolve): Actually report errors.
24714
24715         * assign.cs (Assign.DoResolve): Check whether the source
24716         expression is a value or variable.
24717
24718         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
24719         while resolving the corresponding blocks.
24720
24721         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
24722         an error, don't silently return null.
24723
24724         * statement.cs (Block.AddVariable): Do the error reporting here
24725         and distinguish between CS0128 and CS0136.
24726         (Block.DoResolve): Report all unused labels (warning CS0164).
24727         (LabeledStatement): Pass the location to the constructor.
24728         (LabeledStatement.HasBeenReferenced): New property.
24729         (LabeledStatement.Resolve): Set it to true here.
24730
24731         * statement.cs (Return.Emit): Return success even after reporting
24732         a type mismatch error (CS0126 or CS0127), this is what csc does and
24733         it avoids confusing the users with any consecutive errors.
24734
24735 2002-08-05  Martin Baulig  <martin@gnome.org>
24736
24737         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
24738
24739         * const.cs (Const.LookupConstantValue): Catch circular definitions.
24740
24741         * expression.cs (MemberAccess.DoResolve): Silently return if an
24742         error has already been reported.
24743
24744         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
24745         error has already been reported.
24746
24747 2002-08-05  Martin Baulig  <martin@gnome.org>
24748
24749         * statement.cs (UsageVector): Only initialize the `parameters'
24750         vector if we actually have any "out" parameters.
24751
24752 2002-08-05  Martin Baulig  <martin@gnome.org>
24753
24754         * expression.cs (Binary.ResolveOperator): When combining delegates,
24755         they must have the same type.
24756
24757 2002-08-05  Martin Baulig  <martin@gnome.org>
24758
24759         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
24760         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
24761         work with the ms runtime and we also don't need it: if we're a
24762         PropertyBuilder and not in the `indexer_arguments' hash, then we
24763         are a property and not an indexer.
24764
24765         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
24766         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
24767         since the latter one doesn't work with the ms runtime.
24768
24769 2002-08-03  Martin Baulig  <martin@gnome.org>
24770
24771         Fixed bugs #27998 and #22735.
24772
24773         * class.cs (Method.IsOperator): New public field.
24774         (Method.CheckBase): Report CS0111 if there's already a method
24775         with the same parameters in the current class.  Report CS0508 when
24776         attempting to change the return type of an inherited method.
24777         (MethodData.Emit): Report CS0179 if a method doesn't have a body
24778         and it's not marked abstract or extern.
24779         (PropertyBase): New abstract base class for Property and Indexer.
24780         (PropertyBase.CheckBase): Moved here from Property and made it work
24781         for indexers.
24782         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
24783         the same so we can reuse it there.
24784         (Property, Indexer): Derive from PropertyBase.
24785         (MethodSignature.inheritable_property_signature_filter): New delegate
24786         to find properties and indexers.
24787
24788         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
24789         argument and improved error reporting.
24790
24791         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
24792         EmptyReadOnlyParameters and made it a property.
24793
24794         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
24795         version of this method which takes a `PropertyInfo indexer'.
24796         (TypeManager.RegisterIndexer): New method.
24797
24798         * class.cs: Added myself as author of this file :-)
24799
24800 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24801
24802         * class.cs: fixed compilation on windoze.
24803
24804 2002-08-03  Martin Baulig  <martin@gnome.org>
24805
24806         * interface.cs (Interface.GetInterfaceBases): Check whether all
24807         base interfaces are at least as accessible than the current one.
24808
24809         * class.cs (TypeContainer.GetClassBases): Check whether base types
24810         are at least as accessible than the current type.
24811         (TypeContainer.AsAccessible): Implemented and made non-static.
24812         (MemberBase.CheckParameters): Report errors if the accessibility
24813         checks fail.
24814
24815         * delegate.cs (Delegate.Delegate): The default visibility is
24816         internal for top-level types and private for nested types.
24817         (Delegate.Define): Report errors if the accessibility checks fail.
24818
24819         * enum.cs (Enum.Enum): The default visibility is internal for
24820         top-level types and private for nested types.
24821         (Enum.DefineType): Compute the correct visibility.
24822
24823         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
24824         function which takes a `bool is_toplevel' instead of a TypeContainer.
24825
24826         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
24827         builtin type.
24828
24829 2002-08-02  Martin Baulig  <martin@gnome.org>
24830
24831         * expression.cs (LocalVariableReferenc): Added constructor which
24832         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
24833         (LocalVariableReference.IsReadOnly): New property.
24834         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
24835         variable is readonly, use our own readonly flag to do this; you can
24836         use the new constructor to get a writable reference to a read-only
24837         variable.
24838
24839         * cs-parser.jay (foreach_statement, using_statement): Get a writable
24840         reference to the local variable.
24841
24842 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
24843
24844         * rootcontext.cs (ResolveCore): Also include System.Exception
24845
24846         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
24847         we reach an EmptyStatement.
24848
24849         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
24850         is also fine.
24851
24852         * expression.cs (Binary.ResolveOperator): Check error result in
24853         two places.
24854
24855         use brtrue/brfalse directly and avoid compares to null.
24856
24857 2002-08-02  Martin Baulig  <martin@gnome.org>
24858
24859         * class.cs (TypeContainer.Define): Define all nested interfaces here.
24860         Fixes bug #28407, added test-155.cs.
24861
24862 2002-08-01  Martin Baulig  <martin@gnome.org>
24863
24864         * class.cs (Event.EmitDefaultMethod): Make this work with static
24865         events.  Fixes #28311, added verify-3.cs.
24866
24867 2002-08-01  Martin Baulig  <martin@gnome.org>
24868
24869         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
24870         `is_disposable' fields.
24871         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
24872         `hm.is_disposable' if we're using the collection pattern.
24873         (Foreach.EmitCollectionForeach): Use the correct type for the
24874         enumerator's local variable, only emit the try/finally block if
24875         necessary (fixes #27713).
24876
24877 2002-08-01  Martin Baulig  <martin@gnome.org>
24878
24879         * ecore.cs (Expression.report118): Renamed to Error118 and made
24880         it public static.
24881
24882         * statement.cs (Throw.Resolve): Check whether the expression is of
24883         the correct type (CS0118) and whether the type derives from
24884         System.Exception (CS0155).
24885         (Catch.Resolve): New method.  Do the type lookup here and check
24886         whether it derives from System.Exception (CS0155).
24887         (Catch.CatchType, Catch.IsGeneral): New public properties.
24888
24889         * typemanager.cs (TypeManager.exception_type): Added.
24890
24891 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
24892
24893         * driver.cs: Updated About function.
24894
24895 2002-07-31  Martin Baulig  <martin@gnome.org>
24896
24897         Implemented Control Flow Analysis.
24898
24899         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
24900         (EmitContext.CurrentBranching): Added.
24901         (EmitContext.StartFlowBranching): Added.
24902         (EmitContext.EndFlowBranching): Added.
24903         (EmitContext.KillFlowBranching): Added.
24904         (EmitContext.IsVariableAssigned): Added.
24905         (EmitContext.SetVariableAssigned): Added.
24906         (EmitContext.IsParameterAssigned): Added.
24907         (EmitContext.SetParameterAssigned): Added.
24908         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
24909         Added control flow analysis stuff here.
24910
24911         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
24912         resolve the expression as lvalue.
24913         (LocalVariableReference.DoResolve): Check whether the variable has
24914         already been assigned.
24915         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
24916         the parameter as assigned here.
24917         (ParameterReference.DoResolve): Check whether the parameter has already
24918         been assigned.
24919         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
24920         expression as lvalue.
24921
24922         * statement.cs (FlowBranching): New class for the flow analysis code.
24923         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
24924         (LabeledStatement.IsDefined): New public property.
24925         (LabeledStatement.AddUsageVector): New public method to tell flow
24926         analyis that the label may be reached via a forward jump.
24927         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
24928         flow analysis.
24929         (VariableInfo.Number): New public field.  This is used by flow analysis
24930         to number all locals of a block.
24931         (Block.CountVariables): New public property.  This is the number of
24932         local variables in this block (including the locals from all parent
24933         blocks).
24934         (Block.EmitMeta): Number all the variables.
24935
24936         * statement.cs: Added flow analysis support to all classes.
24937
24938 2002-07-31  Martin Baulig  <martin@gnome.org>
24939
24940         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
24941         To get debugging messages, compile mcs with /define:MCS_DEBUG and
24942         then use this argument.
24943
24944         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
24945
24946         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
24947         use this to specify /define options.
24948
24949 2002-07-29  Martin Baulig  <martin@gnome.org>
24950
24951         * statement.cs (Fixed): Moved all code that does variable lookups
24952         and resolvings from Emit to Resolve.
24953
24954         * statement.cs (For): Moved all code that does variable lookups
24955         and resolvings from Emit to Resolve.
24956
24957         * statement.cs (Using): Moved all code that does variable lookups
24958         and resolvings from Emit to Resolve.
24959
24960 2002-07-29  Martin Baulig  <martin@gnome.org>
24961
24962         * attribute.cs (Attribute.Resolve): Explicitly catch a
24963         System.NullReferenceException when creating the
24964         CustromAttributeBuilder and report a different warning message.
24965
24966 2002-07-29  Martin Baulig  <martin@gnome.org>
24967
24968         * support.cs (ParameterData.ParameterName): Added method to
24969         get the name of a parameter.
24970
24971         * typemanager.cs (TypeManager.IsValueType): New public method.
24972
24973 2002-07-29  Martin Baulig  <martin@gnome.org>
24974
24975         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
24976         is a flag which specifies that it's either ref or out.
24977         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
24978         the out parameter to `out Parameter.Modifier mod', also set the
24979         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
24980
24981         * support.cs (InternalParameters.ParameterModifier): Distinguish
24982         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24983         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24984
24985         * expression.cs (Argument.GetParameterModifier): Distinguish
24986         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
24987         Parameter.Modifier.ISBYREF flag if it's either ref or out.
24988
24989 2002-07-29  Martin Baulig  <martin@gnome.org>
24990
24991         * expression.cs (ParameterReference.ParameterReference): Added
24992         `Location loc' argument to the constructor.
24993
24994         * cs-parser.jay: Pass location to ParameterReference.
24995
24996 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
24997
24998         * statement.cs (Try): Initialize the location.
24999
25000         * cs-parser.jay: pass location to Try.
25001
25002         * expression.cs (Unary.Reduce): Change the prototype to return
25003         whether a constant fold could be performed or not.  The result is
25004         returned in an out parameters.  In the case of Indirection and
25005         AddressOf, we want to perform the full tests.
25006
25007 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25008
25009         * statement.cs (Statement.Emit): Flag dead code.
25010
25011 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25012
25013         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25014
25015 2002-07-27  Martin Baulig  <martin@gnome.org>
25016
25017         * class.cs (MethodData.Define): Put back call to
25018         TypeManager.AddMethod(), accidentally commented this out.
25019
25020         * report.cs (Debug): New public method to print debugging information,
25021         this is `[Conditional ("DEBUG")]'.
25022
25023 2002-07-26  Martin Baulig  <martin@gnome.org>
25024
25025         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25026         (switch_statement): Push the current_block to the switch_stack and
25027         pop it again when we're done with the switch.
25028         (switch_section): The new block is a child of the current_block.
25029         Fixes bug #24007, added test-152.cs.
25030
25031 2002-07-27  Martin Baulig  <martin@gnome.org>
25032
25033         * expression.cs (Invocation.EmitArguments): When calling a varargs
25034         function with only its fixed arguments, we need to pass an empty
25035         array.
25036
25037 2002-07-27  Martin Baulig  <martin@gnome.org>
25038
25039         Mono 0.13 has been released.
25040
25041 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25042
25043         * driver.cs: Rename --resource to --linkres, because that is what
25044         we do currently, we dont support --resource yet.
25045
25046         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25047
25048 2002-07-25  Martin Baulig  <martin@gnome.org>
25049
25050         * class.cs (MethodData): New public class.  This is a `method builder'
25051         class for a method or one accessor of a Property/Indexer/Event.
25052         (MethodData.GetMethodFlags): Moved here from MemberBase.
25053         (MethodData.ApplyAttributes): Likewise.
25054         (MethodData.ApplyObsoleteAttribute): Likewise.
25055         (MethodData.ApplyConditionalAttribute): Likewise.
25056         (MethodData.ApplyDllImportAttribute): Likewise.
25057         (MethodData.CheckAbstractAndExternal): Likewise.
25058         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25059         (MethodData.Emit): Formerly known as Method.Emit().
25060         (MemberBase): Moved everything which was specific to a single
25061         accessor/method to MethodData.
25062         (Method): Create a new MethodData and call Define() and Emit() on it.
25063         (Property, Indexer, Event): Create a new MethodData objects for each
25064         accessor and call Define() and Emit() on them.
25065
25066 2002-07-25  Martin Baulig  <martin@gnome.org>
25067
25068         Made MethodCore derive from MemberBase to reuse the code from there.
25069         MemberBase now also checks for attributes.
25070
25071         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25072         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25073         as virtual.
25074         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25075         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25076         (MemberBase.ApplyAttributes): New virtual method; applies the
25077         attributes to a method or accessor.
25078         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25079         (MemberBase.ApplyConditionalAttribute): Likewise.
25080         (MemberBase.ApplyDllImportAttribute): Likewise.
25081         (MemberBase.CheckAbstractAndExternal): Likewise.
25082         (MethodCore.ParameterTypes): This is now a property instead of a
25083         method, it's initialized from DoDefineParameters().
25084         (MethodCore.ParameterInfo): Removed the set accessor.
25085         (MethodCore.DoDefineParameters): New protected virtual method to
25086         initialize ParameterTypes and ParameterInfo.
25087         (Method.GetReturnType): We can now simply return the MemberType.
25088         (Method.GetMethodFlags): Override the MemberBase version and add
25089         the conditional flags.
25090         (Method.CheckBase): Moved some code from Define() here, call
25091         DoDefineParameters() here.
25092         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25093         here to avoid some larger code duplication.
25094         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25095         ensure that abstract and external accessors don't declare a body.
25096
25097         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25098         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25099         lookup in the attribute's parent classes, so we need to abort as soon
25100         as we found the first match.
25101         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25102         the attribute has no arguments.
25103
25104         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25105         of a Method.
25106
25107 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25108
25109         * cs-parser.jay: reverted previous patch.
25110
25111 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25112
25113         * cs-parser.jay: fixed bug #22119.
25114
25115 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25116
25117         * attribute.cs: fixed compilation. The error was:
25118         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25119         be assigned to before control leaves the current method."
25120         [FIXME:  Filed as bug #28186: MCS must report this error.]
25121
25122 2002-07-25  Martin Baulig  <martin@gnome.org>
25123
25124         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25125         method to pull the condition name ouf of a Conditional attribute.
25126         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25127         the obsolete message and error flag out of an Obsolete attribute.
25128
25129         * class.cs (Method.GetMethodFlags): New public method to get the
25130         TypeManager.MethodFlags for this method.
25131         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25132         private methods.
25133         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25134         if we're overriding a virtual function, set the new private variable
25135         `parent_method'; call the new TypeManager.AddMethod().
25136
25137         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25138         the MethodBuilder and the Method in a PtrHashtable.
25139         (TypeManager.builder_to_method): Added for this purpose.
25140         (TypeManager.MethodFlags): Added IsObsoleteError.
25141         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25142         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25143         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25144         the message from the attribute.
25145
25146 2002-07-24  Martin Baulig  <martin@gnome.org>
25147
25148         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25149         preprocessor directives, ensure that the argument to #define/#undef is
25150         exactly one identifier and that it's actually an identifier.
25151
25152         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25153         did not work ....
25154
25155 2002-07-24  Martin Baulig  <martin@gnome.org>
25156
25157         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25158         initialize it to TypeManager.object_type in the constructor.
25159         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25160         of the `hm.get_current' method if we're using the collection pattern.
25161         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25162         for the explicit conversion to make it work when we're using the collection
25163         pattern and the `Current' property has a different return type than `object'.
25164         Fixes #27713.
25165
25166 2002-07-24  Martin Baulig  <martin@gnome.org>
25167
25168         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25169         does not match, but don't report any errors.  This method is called in
25170         order for all methods in a MethodGroupExpr until a matching method is
25171         found, so we don't want to bail out if the first method doesn't match.
25172         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25173         matches, report the 123.  Fixes #28070.
25174
25175 2002-07-24  Martin Baulig  <martin@gnome.org>
25176
25177         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25178         TypeManager.TypeToCoreType() to the top of the method so the
25179         following equality checks will work.  Fixes #28107.
25180
25181 2002-07-24  Martin Baulig  <martin@gnome.org>
25182
25183         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25184         operand is of type uint, and the other operand is of type sbyte,
25185         short or int, the operands are converted to type long." -
25186         Actually do what this comment already told us.  Fixes bug #28106,
25187         added test-150.cs.
25188
25189 2002-07-24  Martin Baulig  <martin@gnome.org>
25190
25191         * class.cs (MethodBase): New abstract class.  This is now a base
25192         class for Property, Indexer and Event to avoid some code duplication
25193         in their Define() and DefineMethods() methods.
25194         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25195         generic methods for Define() and DefineMethods().
25196         (FieldBase): Derive from MemberBase, not MemberCore.
25197         (Property): Derive from MemberBase, not MemberCore.
25198         (Property.DefineMethod): Moved all the code from this method to the
25199         new MethodBase.DefineAccessor(), just call it with appropriate
25200         argumetnts.
25201         (Property.Define): Call the new Property.DoDefine(), this does some
25202         sanity checks and we don't need to duplicate the code everywhere.
25203         (Event): Derive from MemberBase, not MemberCore.
25204         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25205         accessors, this will also make them work with interface events.
25206         (Indexer): Derive from MemberBase, not MemberCore.
25207         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25208         (Indexer.Define): Use the new MethodBase functions.
25209
25210         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25211         argument to the constructor.
25212         (Interface.FindMembers): Added support for interface events.
25213         (Interface.PopluateEvent): Implemented.
25214
25215         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25216
25217 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25218
25219         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25220         but this is required to check for a method name being the same as
25221         the containing class.  
25222
25223         Handle this now.
25224
25225 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25226
25227         * interface.cs: initialize variable.
25228
25229 2002-07-23  Martin Baulig  <martin@gnome.org>
25230
25231         Implemented the IndexerName attribute in interfaces.
25232
25233         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25234         name if this is an explicit interface implementation.
25235         (Indexer.InterfaceIndexerName): New public variable.  If we're
25236         implementing an interface indexer, this is the IndexerName in that
25237         interface.  Otherwise, it's the IndexerName.
25238         (Indexer.DefineMethod): If we're implementing interface indexer,
25239         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25240         and Pending.ImplementIndexer methods.
25241         (Indexer.Define): Also define the PropertyBuilder if we're
25242         implementing an interface indexer and this is neither an explicit
25243         interface implementation nor do the IndexerName match the one in
25244         the interface.
25245
25246         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
25247         If a method is defined here, then we always need to create a proxy
25248         for it.  This is used when implementing interface indexers.
25249         (Pending.IsInterfaceIndexer): New public method.
25250         (Pending.ImplementIndexer): New public method.
25251         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
25252         This is used when implementing interface indexers to define a proxy
25253         if necessary.
25254         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
25255         define a proxy if necessary.
25256
25257         * interface.cs (Interface.IndexerName): New public variable.
25258         (Interface.PopulateIndexer): Set the IndexerName.
25259         (Interface.DefineIndexers): New private method.  Populate all the
25260         indexers and make sure their IndexerNames match.
25261
25262         * typemanager.cs (IndexerPropertyName): Added support for interface
25263         indexers.
25264
25265 2002-07-22  Martin Baulig  <martin@gnome.org>
25266
25267         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
25268         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
25269         ret if HasReturnLabel.
25270         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
25271         variables.
25272
25273         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
25274         and set the ec.LoopBeginTryCatchLevel.
25275         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
25276         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
25277         the current ec.TryCatchLevel, the branch goes out of an exception
25278         block.  In this case, we need to use Leave and not Br.
25279
25280 2002-07-22  Martin Baulig  <martin@gnome.org>
25281
25282         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
25283         block unless the block does not always return or it is contained in
25284         another try { ... } catch { ... } block.  Fixes bug #26506.
25285         Added verify-1.cs to the test suite.
25286
25287 2002-07-22  Martin Baulig  <martin@gnome.org>
25288
25289         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
25290         then we do not always return.  Fixes bug #24985.
25291
25292 2002-07-22  Martin Baulig  <martin@gnome.org>
25293
25294         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
25295         lookup on a per-class level; ie. walk up the class hierarchy until we
25296         found at least one applicable method, then choose the best among them.
25297         Fixes bug #24463 and test-29.cs.
25298
25299 2002-07-22  Martin Baulig  <martin@gnome.org>
25300
25301         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
25302         return types of the methods.  The return type is not part of the
25303         signature and we must not check it to make the `new' modifier work.
25304         Fixes bug #27999, also added test-147.cs.
25305         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
25306
25307         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
25308         on the method's return type.
25309
25310 2002-07-21  Martin Baulig  <martin@gnome.org>
25311
25312         * assign.cs: Make this work if the rightmost source is a constant and
25313         we need to do an implicit type conversion.  Also adding a few more tests
25314         to test-38.cs which should have caught this.
25315
25316         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
25317         target in the makefile for this.  The makefile.gnu is primarily intended
25318         for end-users who don't want to debug the compiler.
25319
25320 2002-07-21  Martin Baulig  <martin@gnome.org>
25321
25322         * assign.cs: Improved the Assign class so it can now handle embedded
25323         assignments (X = Y = Z = something).  As a side-effect this'll now also
25324         consume less local variables.  test-38.cs now passes with MCS, added
25325         a few new test cases to that test.
25326
25327 2002-07-20  Martin Baulig  <martin@gnome.org>
25328
25329         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
25330         instructions.  Fixes bug #27977, also added test-146.cs.
25331
25332 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25333
25334         * cs-tokenizer.cs: fixed getHex ().
25335
25336 2002-07-19  Martin Baulig  <martin@gnome.org>
25337
25338         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
25339         not Type.GetType() to lookup the array type.  This is needed when
25340         we're constructing an array of a user-defined type.
25341         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
25342         single-dimensional arrays, but also for single-dimensial arrays of
25343         type decimal.
25344
25345 2002-07-19  Martin Baulig  <martin@gnome.org>
25346
25347         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
25348         this function is called, it's not allowed to share LocalBuilders
25349         among ILGenerators.
25350
25351 2002-07-19  Martin Baulig  <martin@gnome.org>
25352
25353         * expression.cs (Argument.Resolve): Report an error 118 when trying
25354         to pass a type as argument.
25355
25356 2002-07-18  Martin Baulig  <martin@gnome.org>
25357
25358         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
25359         Conv_R_Un for the signed `long' type.
25360
25361 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
25362
25363         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
25364         `expr' for the temporary result, as that will fail if we do
25365         multiple resolves on the same expression.
25366
25367 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
25368
25369         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
25370         ec.TypeContainer for looking up aliases. 
25371
25372         * class.cs (TypeContainer): Remove LookupAlias from here.
25373
25374         * decl.cs (DeclSpace); Move here.
25375
25376 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
25377
25378         * class.cs (FindMembers): Only call filter if the constructor
25379         bulider is not null.
25380
25381         Also handle delegates in `NestedTypes' now.  Now we will perform
25382         type lookups using the standard resolution process.  This also
25383         fixes a bug.
25384
25385         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
25386         This uses Expressions (the limited kind that can be parsed by the
25387         tree) instead of strings.
25388
25389         * expression.cs (ComposedCast.ToString): Implement, used to flag
25390         errors since now we have to render expressions.
25391
25392         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
25393         FormArrayType. 
25394
25395         * ecore.cs (SimpleName.ToString): ditto.
25396
25397         * cs-parser.jay: Instead of using strings to assemble types, use
25398         Expressions to assemble the type (using SimpleName, ComposedCast,
25399         MemberAccess).  This should fix the type lookups in declarations,
25400         because we were using a different code path for this.
25401
25402         * statement.cs (Block.Resolve): Continue processing statements
25403         even when there is an error.
25404
25405 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
25406
25407         * class.cs (Event.Define): Also remove the `remove' method from
25408         the list of pending items.
25409
25410         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
25411         generate more compact code. 
25412
25413 2002-07-17  Martin Baulig  <martin@gnome.org>
25414
25415         * const.cs (Const.LookupConstantValue): Add support for constant
25416         `unchecked' and `checked' expressions.
25417         Also adding test case test-140.cs for this.
25418
25419 2002-07-17  Martin Baulig  <martin@gnome.org>
25420
25421         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
25422         check whether mi.ReturnType implements the IEnumerator interface; the
25423         `==' and the IsAssignableFrom() will fail in this situation.
25424
25425 2002-07-16  Ravi Pratap  <ravi@ximian.com>
25426
25427         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
25428         here too.
25429
25430 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25431
25432         * expression.cs: fixed bug #27811.
25433
25434 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
25435
25436         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
25437         Molaro: when we are a ref, the value already contains a pointer
25438         value, do not take the address of it.
25439
25440 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
25441         * removed mb-parser.jay and mb-tokenizer.cs
25442
25443 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25444
25445         * expression.cs: check against the building corlib void type.
25446
25447 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
25448
25449         * ecore.cs: fix for valuetype static readonly fields: when 
25450         initializing them, we need their address, not the address of a copy.
25451
25452 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
25453
25454         * typemanager.cs: register also enum_type in corlib.
25455
25456 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25457
25458         * class.cs: allow calling this (but not base) initializers in structs.
25459
25460 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
25461
25462         * ecore.cs: make sure we compare against the building base types
25463         in GetTypeSize ().
25464
25465 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
25466
25467         * typemanager.cs: fix TypeToCoreType() to handle void and object
25468         (corlib gets no more typerefs after this change).
25469
25470 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
25471
25472         * expression.cs (ArrayCreation.EmitArrayArguments): use
25473         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
25474
25475         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
25476         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
25477         array indexes, the runtime actually forbids them.
25478
25479         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
25480         for array arguments here.
25481
25482         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
25483         instead of the default for ValueTypes.
25484
25485         (New.DoEmit): Use IsValueType instead of
25486         IsSubclassOf (value_type)
25487         (New.DoResolve): ditto.
25488         (Invocation.EmitCall): ditto.
25489
25490         * assign.cs (Assign): ditto.
25491
25492         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
25493         Statements *are* currently doing part of their resolution during
25494         Emit.  
25495
25496         Expressions do always resolve during resolve, but statements are
25497         only required to propagate resolution to their children.
25498
25499 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
25500
25501         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
25502
25503         (LoadAssembly): Do not add the dll if it is already specified
25504
25505         (MainDriver): Add the System directory to the link path at the end,
25506         after all the other -L arguments. 
25507
25508         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
25509         wrong opcode for loading bytes and bools (ldelem.i1 instead of
25510         ldelem.u1) and using the opposite for sbytes.
25511
25512         This fixes Digger, and we can finally run it.
25513
25514         * driver.cs (UnixParseOption): Move the option parsing here.  
25515         (CSCParseOption): Implement CSC-like parsing of options.
25516
25517         We now support both modes of operation, the old Unix way, and the
25518         new CSC-like way.  This should help those who wanted to make cross
25519         platform makefiles.
25520
25521         The only thing broken is that /r:, /reference: and /lib: are not
25522         implemented, because I want to make those have the same semantics
25523         as the CSC compiler has, and kill once and for all the confussion
25524         around this.   Will be doing this tomorrow.
25525
25526         * statement.cs (Unsafe.Resolve): The state is checked during
25527         resolve, not emit, so we have to set the flags for IsUnsfe here.
25528
25529 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25530
25531         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
25532         not catch the Error_ObjectRefRequired in SimpleName (as it is
25533         possible to have a class/instance variable name that later gets
25534         deambiguated), we have to check this here.      
25535
25536 2002-07-10  Ravi Pratap  <ravi@ximian.com>
25537
25538         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
25539         make static and put into Expression.
25540
25541         (Event.Define): Register the private field of the event with the 
25542         TypeManager so that GetFieldFromEvent can get at it.
25543
25544         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
25545         keep track of the private field associated with an event which
25546         has no accessors.
25547
25548         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
25549         private field.
25550
25551         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
25552
25553 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
25554
25555         * expression.cs (Binary.EmitBranchable): this routine emits the
25556         Binary expression in a branchable context.  This basically means:
25557         we need to branch somewhere, not just get the value on the stack.
25558
25559         This works together with Statement.EmitBoolExpression.
25560
25561         * statement.cs (Statement.EmitBoolExpression): Use
25562         EmitBranchable. 
25563
25564 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
25565
25566         * statement.cs (For): Reduce the number of jumps in loops.
25567
25568         (For): Implement loop inversion for the For statement.
25569
25570         (Break): We can be breaking out of a Try/Catch controlled section
25571         (foreach might have an implicit try/catch clause), so we need to
25572         use Leave instead of Br.
25573
25574         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
25575         now).  If the instace expression supports IMemoryLocation, we use
25576         the AddressOf method from the IMemoryLocation to extract the
25577         address instead of emitting the instance.
25578
25579         This showed up with `This', as we were emitting the instance
25580         always (Emit) instead of the Address of This.  Particularly
25581         interesting when This is a value type, as we dont want the Emit
25582         effect (which was to load the object).
25583
25584 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
25585
25586         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
25587
25588         * statement.cs (Checked): Set the CheckedState during the resolve
25589         process too, as the ConvCast operations track the checked state on
25590         the resolve process, and not emit.
25591
25592         * cs-parser.jay (namespace_member_declaration): Flag that we have
25593         found a declaration when we do.  This is used to flag error 1529
25594
25595         * driver.cs: Report ok when we display the help only.
25596
25597 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
25598
25599         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
25600
25601 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
25602
25603         * cs-tokenizer.cs (define): We also have to track locally the
25604         defines.  AllDefines is just used for the Conditional Attribute,
25605         but we also need the local defines for the current source code. 
25606
25607 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
25608
25609         * statement.cs (While, For, Do): These loops can exit through a
25610         Break statement, use this information to tell whether the
25611         statement is the last piece of code.
25612
25613         (Break): Flag that we break.
25614
25615         * codegen.cs (EmitContexts): New `Breaks' state variable.
25616
25617 2002-07-03  Martin Baulig  <martin@gnome.org>
25618
25619         * class.cs (TypeContainer.MethodModifiersValid): Allow override
25620         modifiers in method declarations in structs.  Otherwise, you won't
25621         be able to override things like Object.Equals().
25622
25623 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25624
25625         * class.cs (Method, Property, Indexer): Do not allow the public
25626         modifier to be used in explicit interface implementations.
25627
25628         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
25629         override modifiers in method declarations in structs
25630
25631 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
25632
25633         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
25634         integer or real overflow, report an error
25635
25636 2002-07-02  Martin Baulig  <martin@gnome.org>
25637
25638         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
25639         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
25640         to tell the runtime about our newly created System.Object and
25641         System.ValueType types.
25642
25643 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
25644
25645         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
25646         struct instead of Ldarg/Starg.
25647
25648 2002-07-02  Martin Baulig  <martin@gnome.org>
25649
25650         * expression.cs (Indirection.Indirection): Call
25651         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
25652
25653 2002-07-02  Martin Baulig  <martin@gnome.org>
25654
25655         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
25656         ValueType, call TypeManager.TypeToCoreType() on it.
25657         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
25658         the OpCodes.Newarr argument.
25659
25660 2002-07-02  Martin Baulig  <martin@gnome.org>
25661
25662         * expression.cs (Invocation.EmitCall): When compiling corlib,
25663         replace all calls to the system's System.Array type to calls to
25664         the newly created one.
25665
25666         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
25667         System.Array methods.
25668         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
25669         from the system's System.Array type which must be replaced.
25670
25671 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
25672
25673         * typemanager.cs: load unverifiable_code_ctor so we can build
25674         corlib using the correct type. Avoid using GetTypeCode() with
25675         TypeBuilders.
25676         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
25677         TypeManager.object_type to allow building corlib.
25678
25679 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
25680
25681         * ecore.cs: handle System.Enum separately in LoadFromPtr().
25682
25683 2002-07-01  Martin Baulig  <martin@gnome.org>
25684
25685         * class.cs: Make the last change actually work, we need to check
25686         whether `ifaces != null' to avoid a crash.
25687
25688 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
25689
25690         * class.cs: when we build structs without fields that implement
25691         interfaces, we need to add the interfaces separately, since there is
25692         no API to both set the size and add the interfaces at type creation
25693         time.
25694
25695 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
25696
25697         * expression.cs: the dimension arguments to the array constructors
25698         need to be converted if they are a long.
25699
25700 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
25701
25702         * class.cs: don't emit ldarg.0 if there is no parent constructor
25703         (fixes showstopper for corlib).
25704
25705 2002-06-29  Martin Baulig  <martin@gnome.org>
25706
25707         MCS now compiles corlib on GNU/Linux :-)
25708
25709         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
25710         ie. check for MethodImplOptions.InternalCall.
25711
25712         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
25713         and TypeManager.attribute_type are null, so we must explicitly check
25714         whether parent is not null to find out whether it's an attribute type.
25715         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
25716         and SetBuilder, not only if the property is neither abstract nor external.
25717         This is necessary to set the MethodImplOptions on the accessor methods.
25718         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
25719         SetBuilder, see Property.Emit().
25720
25721         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
25722         populate "System.Object", "System.ValueType" and "System.Attribute" since
25723         they've already been populated from BootCorlib_PopulateCoreTypes().
25724
25725 2002-06-29  Martin Baulig  <martin@gnome.org>
25726
25727         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
25728         is the NullLiteral, we also need to make sure that target_type is not
25729         an enum type.   
25730
25731 2002-06-29  Martin Baulig  <martin@gnome.org>
25732
25733         * rootcontext.cs (RootContext.ResolveCore): We must initialize
25734         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
25735         before calling BootstrapCorlib_ResolveDelegate ().
25736
25737 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25738
25739         * statement.cs: fixed build-breaker. All tests passed ok.
25740
25741 2002-06-27  Martin Baulig  <martin@gnome.org>
25742
25743         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
25744         for System.Decimal when compiling corlib.
25745
25746 2002-06-27  Martin Baulig  <martin@gnome.org>
25747
25748         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
25749         switch blocks which contain nothing but a default clause.
25750
25751 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
25752
25753        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
25754
25755 2002-06-27  Martin Baulig  <martin@gnome.org>
25756
25757         * ecore.cs (PropertyExpr.PropertyExpr): Call
25758         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
25759
25760         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
25761         is already a TypeBuilder.
25762
25763 2002-06-27  Martin Baulig  <martin@gnome.org>
25764
25765         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
25766         `target_type == TypeManager.array_type', not IsAssignableFrom() in
25767         the "from an array-type to System.Array" case.  This makes it work
25768         when compiling corlib.
25769
25770 2002-06-27  Martin Baulig  <martin@gnome.org>
25771
25772         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
25773         non-static PropertyExpr, set its InstanceExpression.  This makes
25774         the `ICollection.Count' property work in System/Array.cs.
25775
25776 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
25777
25778         * driver.cs: Made error handling more consistent.  Errors now
25779         tracked by Report class, so many methods which used to return int
25780         now return void.  Main() now prints success/failure and 
25781         errors/warnings message.
25782
25783         Renamed '--probe' compiler argument to '--expect-error'.  Removed
25784         the magic number return values (123 and 124).  Now, if the
25785         expected error occurs, the compiler exits with success (exit value
25786         0).  If the compilation completes without seeing that particular
25787         error, the compiler exits with failure (exit value 1).  The
25788         makefile in mcs/errors has been changed to handle the new behaviour.
25789
25790         * report.cs: Made 'expected error' number a property and renamed
25791         it from 'Probe' to 'ExpectedError'.
25792
25793         * genericparser.cs: Removed error handling support, since it is
25794         now all done by Report class.
25795
25796         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
25797         class, so parse() no longer returns an int.
25798
25799         * namespace.cs: Use Report.Error instead of GenericParser.error
25800
25801 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
25802
25803         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
25804         TypeContainer.AddOperator): At the front of the list put the
25805         explicit implementations, so they get resolved/defined first. 
25806
25807 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
25808
25809         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
25810         interface type is implemented by this TypeContainer.  Used during
25811         explicit interface implementation.
25812
25813         (Property.Define, Indexer.Define, Method.Define): Validate that
25814         the given interface in the explicit implementation is one of the
25815         base classes for the containing type.
25816
25817         Also if we are explicitly implementing an interface, but there is
25818         no match in the pending implementation table, report an error.
25819
25820         (Property.Define): Only define the property if we are
25821         not explicitly implementing a property from an interface.  Use the
25822         correct name also for those properties (the same CSC uses,
25823         although that is really not needed).
25824
25825         (Property.Emit): Do not emit attributes for explicitly implemented
25826         properties, as there is no TypeBuilder.
25827
25828         (Indexer.Emit): ditto.
25829
25830         Hiding then means that we do not really *implement* a pending
25831         implementation, which makes code fail.
25832
25833 2002-06-22  Martin Baulig  <martin@gnome.org>
25834
25835         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
25836         the return value of Object.GetType().  [FIXME: we need to do this whenever
25837         we get a type back from the reflection library].
25838
25839 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
25840
25841         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
25842
25843 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
25844
25845         * attribute.cs: Return null if we can not look up the type.
25846
25847         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
25848         the interface types found.
25849
25850         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
25851         interface types found.
25852
25853         * typemanager.cs (GetInterfaces): Make this routine returns alll
25854         the interfaces and work around the lame differences between
25855         System.Type and System.Reflection.Emit.TypeBuilder in the results
25856         result for GetInterfaces.
25857
25858         (ExpandInterfaces): Given an array of interface types, expand and
25859         eliminate repeated ocurrences of an interface.  This expands in
25860         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
25861         be IA, IB, IC.
25862
25863 2002-06-21  Martin Baulig  <martin@gnome.org>
25864
25865         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
25866         on System.Enum.
25867
25868 2002-06-21  Martin Baulig  <martin@gnome.org>
25869
25870         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
25871         and called with one of the core types, return the corresponding typebuilder for
25872         that type.
25873
25874         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
25875         element type.
25876
25877 2002-06-21  Martin Baulig  <martin@gnome.org>
25878
25879         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
25880         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
25881         (Expression.ConvertReferenceExplicit): Likewise.
25882
25883         * expression.cs (ElementAccess.DoResolve): Likewise.
25884         (ElementAccess.DoResolveLValue): Likewise.
25885
25886 2002-06-10  Martin Baulig  <martin@gnome.org>
25887
25888         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
25889         add the "value" parameter to the parameter list.
25890
25891         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
25892         to our caller.
25893
25894 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
25895
25896         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
25897         the argument to an int, uint, long or ulong, per the spec.  Also
25898         catch negative constants in array creation.
25899
25900 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
25901
25902         * class.cs: do not allow the same interface to appear twice in
25903         the definition list.
25904
25905 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
25906
25907         * ecore.cs: don't use ldlen with System.Array.
25908
25909 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
25910
25911         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
25912
25913 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
25914
25915         * modifiers.cs: produce correct field attributes for protected
25916         internal. Easy fix so miguel can work on ther harder stuff:-)
25917
25918 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
25919
25920         * pending.cs: New file.  Move the code from class.cs here.
25921         Support clearning the pending flag for all methods (when not doing
25922         explicit interface implementation).
25923
25924 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
25925
25926         * rootcontext.cs: added a couple more types needed to bootstrap.
25927
25928 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
25929
25930         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
25931         constructor in the type, instead of any constructor in the type
25932         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
25933         a bug in the Mono runtime when applying the params attribute). 
25934
25935 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
25936         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
25937
25938 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
25939
25940         * expression.cs (Unary.ResolveOperator): Use TypeManager
25941         to resolve the type.
25942
25943 2002-06-13  Ravi Pratap  <ravi@ximian.com>
25944
25945         * cs-parser.jay (enum_member_declaration): Pass in the attributes
25946         attached.
25947
25948         * enum.cs (AddEnumMember): Add support to store the attributes associated 
25949         with each member too.
25950
25951         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
25952         field builders too - this takes care of the enum member case.
25953
25954 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
25955
25956         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
25957         address-of operator on both value types and pointers.
25958
25959 2002-06-10  Martin Baulig  <martin@gnome.org>
25960
25961         * interface.cs (Interface.PopulateIndexer): Add the indexer's
25962         PropertyBuilder to the `property_builders' list.
25963
25964         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
25965         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
25966         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
25967         find any indexers which are inherited from an interface.
25968
25969 2002-06-09  Martin Baulig  <martin@gnome.org>
25970
25971         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
25972         the same type as the constant if necessary.  There's also a test-130.cs
25973         for this.
25974
25975         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
25976
25977         * typemanager.cs (TypeManager.ChangeType): Previously known as
25978         Enum.ChangeEnumType().
25979
25980 2002-06-09  Martin Baulig  <martin@gnome.org>
25981
25982         * expression.cs (Cast.TryReduce): Added support for consts.
25983
25984 2002-06-08  Ravi Pratap  <ravi@ximian.com>
25985
25986         * class.cs (Accessor): Hold attributes information so we can pass
25987         it along.
25988
25989         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
25990         Modify to pass in attributes attached to the methods.
25991
25992         (add_accessor_declaration, remove_accessor_declaration): Ditto.
25993
25994         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
25995         to handle the Accessor kind :-)
25996
25997         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
25998
25999 2002-06-08  Martin Baulig  <martin@gnome.org>
26000
26001         * expression.cs (Unary.TryReduceNegative): Added support for
26002         ULongConstants.
26003
26004 2002-06-08  Martin Baulig  <martin@gnome.org>
26005
26006         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26007         name can't be found in the `defined_names' - the caller will do a
26008         MemberLookup in this case and thus find methods in System.Enum
26009         such as Enum.IsDefined().
26010
26011 2002-06-08  Martin Baulig  <martin@gnome.org>
26012
26013         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26014         Convert.ChangeType() which works with TypeBuilder created types.
26015         (Enum.LookupEnumValue, Enum.Define): Use it here.
26016
26017         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26018         `TypeBuilder.BaseType != null' check.
26019         (TypeContainer.FindMembers): Only lookup parent members if we
26020         actually have a parent.
26021         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26022         (ConstructorInitializer.Resolve): Likewise.
26023
26024         * interface.cs (Interface.FindMembers): Added
26025         `TypeBuilder.BaseType != null' check.
26026
26027         * rootcontext.cs (RootContext.ResolveCore): Added
26028         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26029         classes_second_stage.
26030
26031         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26032         debug_type and trace_type when compiling with --nostdlib.       
26033
26034 2002-06-07  Martin Baulig  <martin@gnome.org>
26035
26036         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26037         (AddField): Set it to true when adding a non-static field.
26038         (DefineType): Use `have_nonstatic_fields' to find out whether we
26039         have non-static fields, not `Fields != null'.
26040
26041 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26042
26043         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26044         dereferencing a null on the static-field code path)
26045
26046 2002-05-30  Martin Baulig  <martin@gnome.org>
26047
26048         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26049         to take command line arguments.  Use reflection to call the new
26050         custom `Initialize' function on the symbol writer and pass it the
26051         command line arguments.
26052
26053         * driver.cs (--debug-args): New command line argument to pass command
26054         line arguments to the symbol writer.
26055
26056 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26057
26058         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26059         the target type for indexers and properties.  Thanks to Joe for
26060         catching this.
26061
26062 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26063
26064         * typemanager.cs (MethodFlags): returns the method flags
26065         (Obsolete/ShouldIgnore) that control warning emission and whether
26066         the invocation should be made, or ignored. 
26067
26068         * expression.cs (Invocation.Emit): Remove previous hack, we should
26069         not do this on matching a base type, we should do this based on an attribute
26070
26071         Only emit calls to System.Diagnostics.Debug and
26072         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26073         on the command line.
26074
26075         * rootcontext.cs: Global settings for tracing and debugging.
26076
26077         * cs-tokenizer.cs (define): New utility function to track
26078         defines.   Set the global settings for TRACE and DEBUG if found.
26079
26080 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26081
26082         * interface.cs (Populate*): Pass in the TypeContainer as well as
26083         the DeclSpace as parameters so that we can create EmitContexts and
26084         then use that to apply attributes etc.
26085
26086         (PopulateMethod, PopulateEvent, PopulateProperty)
26087         (PopulateIndexer): Apply attributes everywhere.
26088
26089         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26090         etc.
26091
26092         (ApplyAttributes): Update accordingly.
26093
26094         We now apply interface attributes for all members too.
26095
26096 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26097
26098         * class.cs (Indexer.Define); Correctly check if we are explicit
26099         implementation (instead of checking the Name for a ".", we
26100         directly look up if the InterfaceType was specified).
26101
26102         Delay the creation of the PropertyBuilder.
26103
26104         Only create the PropertyBuilder if we are not an explicit
26105         interface implementation.   This means that explicit interface
26106         implementation members do not participate in regular function
26107         lookups, and hence fixes another major ambiguity problem in
26108         overload resolution (that was the visible effect).
26109
26110         (DefineMethod): Return whether we are doing an interface
26111         implementation. 
26112
26113         * typemanager.cs: Temporary hack until we get attributes in
26114         interfaces (Ravi is working on that) and we get IndexerName
26115         support in interfaces.
26116
26117         * interface.cs: Register the indexers as properties.
26118
26119         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26120         warning, I have verified that this is a bug in the .NET runtime
26121         (JavaScript suffers of the same problem).
26122
26123         * typemanager.cs (MemberLookup): When looking up members for
26124         interfaces, the parent of an interface is the implicit
26125         System.Object (so we succeed in searches of Object methods in an
26126         interface method invocation.  Example:  IEnumerable x;  x.ToString
26127         ()) 
26128
26129 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26130
26131         * class.cs (Event): Events should also register if they do
26132         implement the methods that an interface requires.
26133
26134         * typemanager.cs (MemberLookup); use the new GetInterfaces
26135         method. 
26136
26137         (GetInterfaces): The code used to lookup interfaces for a type is
26138         used in more than one place, factor it here. 
26139
26140         * driver.cs: Track the errors at the bottom of the file, we kept
26141         on going.
26142
26143         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26144         instance if the method we are calling is static!
26145
26146 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26147
26148         * attribute.cs (ApplyAttributes): Make this function filter out
26149         the IndexerName attribute (as that attribute in reality is never
26150         applied) and return the string constant for the IndexerName
26151         attribute. 
26152
26153         * class.cs (TypeContainer.Emit): Validate that all the indexers
26154         have the same IndexerName attribute, and if so, set the
26155         DefaultName attribute on the class. 
26156
26157         * typemanager.cs: The return value might contain other stuff (not
26158         only methods).  For instance, consider a method with an "Item"
26159         property and an Item method.
26160
26161         * class.cs: If there is a problem with the parameter types,
26162         return. 
26163
26164 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26165
26166         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26167         looks at user defined conversion after making a call to 
26168         StandardConversionExists - we need this for overload resolution.
26169
26170         * expression.cs : Update accordingly the various method calls.
26171
26172         This fixes 2 bugs filed against implicit user defined conversions 
26173
26174 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26175
26176         * statement.cs: Track the result of the assignment.
26177
26178 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26179
26180         * expression.cs (MemberAccess): Improved error reporting for
26181         inaccessible members.
26182
26183 2002-05-22  Martin Baulig  <martin@gnome.org>
26184
26185         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26186         itself with debugging support.
26187
26188 2002-05-22  Martin Baulig  <martin@gnome.org>
26189
26190         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26191         Removed, this isn't needed anymore.
26192
26193 2002-05-20  Martin Baulig  <martin@gnome.org>
26194
26195         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26196         be underlying type for an enum.
26197
26198 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26199
26200         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26201         that splits out the loading of just the core types.
26202
26203         * rootcontext.cs (ResolveCore): Split the struct resolution in
26204         two, so we can load the enumeration underlying types before any
26205         enums are used.
26206
26207         * expression.cs (Is): Bandaid until we fix properly Switch (see
26208         bug #24985 for details).
26209
26210         * typemanager.cs (ImplementsInterface): The hashtable will contain
26211         a null if there are no interfaces implemented.
26212
26213 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26214
26215         * cs-parser.jay (indexer_declarator): It is fine to have array
26216         parameters
26217
26218 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26219
26220         * typemanager.cs: (RegisterBuilder): New function used to register
26221         TypeBuilders that implement interfaces.  Since
26222         TypeBuilder.GetInterfaces (as usual) does not work with lame
26223         Reflection.Emit. 
26224         (AddUserType): register interfaces.
26225
26226         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26227         dealing with TypeBuilder.  Also, arrays are showing up as
26228         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26229         methods can not be invoked on them!
26230
26231         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26232         (ImplicitReferenceConversionExists): Split out from
26233         StandardConversionExists. 
26234
26235         * expression.cs (As): We were only implementing one of the three
26236         cases for the as operator.  We now implement them all.
26237         (Is): Implement the various other cases for Is as well.
26238
26239         * typemanager.cs (CACHE): New define used to control if we want or
26240         not the FindMembers cache.  Seems to have a negative impact on
26241         performance currently
26242
26243         (MemberLookup): Nested types have full acess to
26244         enclosing type members
26245
26246         Remove code that coped with instance/static returns for events, we
26247         now catch this in RealFindMembers.
26248
26249         (RealFindMembers): only perform static lookup if the instance
26250         lookup did not return a type or an event.  
26251
26252 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26253
26254         * assign.cs (CompoundAssign): We pass more semantic information
26255         now to Compound Assignments than we did before: now we have all
26256         the information at hand, and now we resolve the target *before* we
26257         do the expression expansion, which allows the "CacheValue" method
26258         to have the effect we intended (before, a [x] += 1 would generate
26259         two differen ArrayAccess expressions from the ElementAccess,
26260         during the resolution process).
26261
26262         (CompoundAssign.DoResolve): Resolve target and original_source here.
26263
26264 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
26265
26266         * expression.cs (ArrayAccess): dropped debugging information. 
26267
26268         * typemanager.cs: Small bug fix: I was always returning i_members,
26269         instead of one of i_members or s_members (depending on which had
26270         the content).
26271
26272         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
26273         method is invoked before any code generation takes place, and it
26274         is a mechanism to inform that the expression will be invoked more
26275         than once, and that the method should use temporary values to
26276         avoid having side effects
26277
26278         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
26279
26280         * ecore.cs (Expression.CacheTemporaries): Provide empty default
26281         implementation.
26282
26283         * expression.cs (Indirection, ArrayAccess): Add support for
26284         CacheTemporaries in these two bad boys. 
26285
26286         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
26287         ldobj or ldind_ref.  
26288         (StoreFromPtr): Handle stobj as well.
26289
26290         * expression.cs (UnaryMutator): Share more code.
26291
26292         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
26293         down: I was not tracking the Filter function as well, which
26294         was affecting the results of the cache.
26295
26296 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
26297
26298         * attribute.cs: Remove the hack to handle the CharSet property on
26299         StructLayouts. 
26300
26301 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
26302
26303         * attribute.cs (DoResolve): More uglyness, we now only try to
26304         resolve the attribute partially, to extract the CharSet
26305         information (only if we are a StructLayout attribute).  Otherwise 
26306
26307         (GetExtraTypeInfo): Add some code to conditionally kill in the
26308         future this.   I am more and more convinced that the .NET
26309         framework has special code to handle the attribute setting on
26310         certain elements.
26311
26312         * expression.cs (IsParamsMethodApplicable): Revert my previous
26313         foreach change here, it was wrong.
26314
26315 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
26316
26317         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
26318         (pp_expr): do not abort on unknown input, just return.
26319         (eval): abort if there are pending chars.
26320
26321         * attribute.cs (Attribute.Resolve): Positional parameters are
26322         optional.  Deal with that case.
26323
26324         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
26325         the Ansi/Unicode/Auto information for the type.
26326
26327         (TypeContainer.DefineType): instantiate the EmitContext here, as
26328         we will be using it during the type definition (to resolve
26329         attributes) and during the emit phase.
26330
26331         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
26332         to pull type information out of the attributes
26333
26334         (Attribute.Resolve): track the constructor builder, and allow for
26335         multiple invocations (structs and classes will use this).
26336
26337         * ecore.cs (MemberLookupFinal): new version with all the
26338         parameters customizable.
26339
26340         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
26341         constructors.  Return if the result value is null (as the error
26342         would have been flagged already by MemberLookupFinal)
26343
26344         Do not allow instances of abstract classes or interfaces to be
26345         created.
26346
26347         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
26348         We have to compare the assembly property here when dealing with
26349         FamANDAssem and Assembly access modifiers, because we might be
26350         creating an assembly from *modules* (that means that we are not
26351         getting TypeBuilders for types defined in other modules that are
26352         part of this assembly).
26353
26354         (Method.Emit): If the method is marked abstract and has a body,
26355         emit an error. 
26356
26357         (TypeContainer.DefineMembers): If both the defined member and the
26358         parent name match are methods, then do not emit any warnings: let
26359         the Method.Define routine take care of flagging warnings.  But if
26360         there is a mismatch (method overrides something else, or method is
26361         overriwritten by something, then emit warning).
26362
26363         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
26364         set to null, this means `do not check for the return type on the
26365         signature'. 
26366
26367         (Method.Define): set the return type for the method signature to
26368         null, so that we get methods with the same name and parameters and
26369         different return types.  This is used to flag warning 114 (you are
26370         hiding a method, and you probably want to use the new/override
26371         keywords instead).
26372
26373         * typemanager.cs (MemberLookup): Implemented proper access
26374         control, closing a long standing set of bug reports.  The problem
26375         was that the Framework only has two bits: Public and NonPublic,
26376         and NonPublic includes private and protected methods, but we need
26377         to enforce the FamANDAssem, FamOrAssem and Family. 
26378
26379 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
26380
26381         * statement.cs (GotoCase): Return true: Ammounts to giving up
26382         knowledge on whether we return or not, and letting the other case
26383         be responsible for it.
26384
26385 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
26386
26387         * driver.cs: Do not load directories for each file processed, only
26388         do it if there is a pattern.
26389
26390         * ecore.cs: Report readonly assigns here as well, as we might have
26391         been resolved only by MemberAccess.
26392
26393         (SimpleName.SimpleNameResolve): Also be useful for LValue
26394         resolution.   We need this to propagate assign to local readonly variables
26395
26396         * typemanager.cs: Use a ptrhashtable for the criteria, because we
26397         do not want to reuse potential criteria memory.
26398
26399         * class.cs (MyEventBuilder): Set reflected_type;
26400
26401         * ecore.cs (Constantify): Added support for constifying bools.
26402
26403         (RootContext.LookupType): Added a cache for values looked up in
26404         the declaration space.
26405
26406         * typemanager.cs (FindMembers): Now is a front-end to
26407         RealFindMembers, and provides a two-level hashtable-based cache to
26408         the request.  
26409
26410         15% performance improvement: from 22.5 to 19.2 seconds.
26411
26412         * expression.cs (IsParamsMethodApplicable): use foreach.
26413         (Invocation.DoResolve): ditto.
26414         (New.DoResolve): ditto.
26415         (ArrayCreation.DoResolve): ditto.
26416
26417         * ecore.cs (FindMostEncompassingType): use foreach.
26418
26419         * delegate.cs (NewDelegate.DoResolve): Use foreach
26420
26421         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
26422         (RemoveMethods): use foreach.
26423
26424         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
26425         nested foreach statements instead of for, and also break out of
26426         the inner loop once a match is found.
26427
26428         (Invocation.OverloadResolve): Use foreach, simplify the code. 
26429
26430 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
26431
26432         * cfold.cs (BinaryFold): During an enumeration evaluation context,
26433         we actually unwrap the expression to allow for extra information
26434         to be extracted. 
26435
26436         * expression.cs: Use Shr_Un on unsigned operations. 
26437
26438 2002-05-08  Ravi Pratap  <ravi@ximian.com>
26439
26440         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
26441         applicable operators was not being considered correctly. This closes
26442         the bug Miguel reported.
26443
26444 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
26445
26446         * attribute.cs: check that the type derives from System.Attribute
26447         and report the correct error in that case (moved the duplicate code to
26448         its own method, too).
26449
26450 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
26451
26452         * attribute.cs: lookup attribute type name as the spec says: first the
26453         bare attribute name and then name + "Attribute" (nant compiles with
26454         mcs after this fix).
26455
26456 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
26457
26458         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
26459         Because of the way we parse things, we should try to see if a
26460         UIntConstant can fit in an integer.
26461
26462 2002-05-07  Ravi Pratap  <ravi@ximian.com>
26463
26464         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
26465         when we are in an explicit context.
26466
26467         (ConvertReferenceExplicit): When converting from Iface type S to Class
26468         T make sure the rules are implemented as an OR.
26469
26470         * parameter.cs (ParameterType): Make it a property for now although the
26471         purpose really isn't anything immediate.
26472
26473         * expression.cs (Is*Applicable): Do better checking on the parameter type
26474         of a ref/out parameter. The ones from the system assemblies are already 
26475         marked with the correct type so we don't need to do any correction.
26476
26477         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
26478         the object type is standard too so include that.
26479
26480 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26481
26482         * ecore.cs (StandardConversionExists): Augment with missing code:
26483         deal with IntConstant, LongConstants and Enumerations.
26484
26485         * assign.cs: Report the error, instead of failing silently
26486
26487         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
26488         typecontainer that they are declared, because the
26489         typecontainer/namespace will have the list of using clauses that
26490         need to be applied.
26491
26492         Assembly Attributes were escaping the normal registration
26493         mechanism. 
26494
26495         (EmitCode): Apply attributes within an EmitContext that represents
26496         the container they were declared on.
26497
26498         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
26499
26500 2002-05-06  Ravi Pratap  <ravi@ximian.com>
26501
26502         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
26503         Revamp completely - make much cleaner as we now operate only
26504         on a set of Types.
26505
26506         (FindMostSpecificSource, FindMostSpecificTarget): New methods
26507         to implement the logic detailed in the spec more correctly.
26508
26509         (UserDefinedConversion): Update accordingly.
26510
26511 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26512
26513         * statement.cs: Return flow analysis information up.
26514
26515         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
26516         and the default.
26517
26518         (token): Do not consume an extra character before calling
26519         decimal_digits.
26520
26521 2002-05-06  Piers Haken <piersh@friskit.com>
26522
26523         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
26524
26525 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
26526
26527         * class.cs (Constructor.Emit): Set the IsStatic flag in the
26528         EmitContext during the instance constructor initializer
26529         resolution, to stop access to instance variables.
26530
26531         This is mandated by the spec, last paragraph of the `constructor
26532         initializers' section. 
26533
26534 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
26535
26536         * cs-parser.jay, class.cs (Accessor): new class used to represent
26537         an accessor (get or set).  In the past we used `null' to represent
26538         a missing accessor.  But this is ambiguous because there was no
26539         way to tell in abstract indexers/properties if one of them was
26540         specified.
26541
26542         Now there is a way of addressing that.
26543
26544         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
26545         instead of FindMembers.
26546
26547         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
26548         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
26549
26550         * attribute.cs: Treat indexers and properties as the same in terms
26551         of applying attributes
26552
26553         * ecore.cs (FindMostEncompassedType): Use statically initialized
26554         EmptyExpressions()s like we do elsewhere to avoid creating useless
26555         objects (and we take this out of the tight loop).
26556
26557         (GetConversionOperators): Move the code to extract the actual
26558         operators to a separate routine to clean things up.
26559
26560 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
26561
26562         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
26563         events are always registered FieldBuilders.
26564
26565         * class.cs (FieldBase): New class shared by Fields 
26566
26567         * delegate.cs: If we are a toplevel delegate, use our full name.
26568         If we are a nested delegate, then only use our tail name.
26569
26570 2002-05-02  Ravi Pratap  <ravi@ximian.com>
26571
26572         * expression.cs (IsApplicable): Ensure that we add the "&" to
26573         ref/out types before comparing it with the type of the argument.
26574
26575         (IsParamsMethodApplicable): Ditto.
26576
26577         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
26578         silly me ;-)
26579
26580         * delegate.cs : Handle the case when we have more than one applicable
26581         method. Flag an error only when we finish checking all.
26582
26583 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
26584
26585         * expression.cs: Add support for boolean static initializers.
26586
26587 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
26588
26589         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
26590
26591         * parameter.cs (ComputeParameterTypes,
26592         ComputeAndDefineParameterTypes): Better error handling: now we
26593         clear the `types' cache if we fail during any of the type lookups.
26594         We also return the status code correctly to our caller
26595
26596         * delegate.cs: If we fail to define a delegate, abort the extra
26597         steps. 
26598
26599         * expression.cs (Binary.ResolveOperator): for
26600         operator==(object,object) and operator !=(object, object) we also
26601         have to verify that there is an implicit conversion from one to
26602         the other.
26603
26604         (ArrayAccess.DoResolve): Array Access can operate on
26605         non-variables. 
26606
26607 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
26608
26609         * assign.cs (CompoundAssign): A new class used as a "flag" that
26610         the assignment actually is happening as part of a compound
26611         assignment operator.
26612
26613         During compound assignment, a few new rules exist to enable things
26614         like:
26615
26616         byte b |= 1 + 2
26617
26618         From the spec:
26619
26620         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
26621         to the type of x) if y is implicitly convertible to the type of x,
26622         and the operator is a builtin operator and the return type of the
26623         operator is explicitly convertible to the type of x. 
26624
26625         * rootcontext.cs: Reset warning level to 2.  4 catches various
26626         "interesting" features in mcs, we must clean this up at some
26627         point, but currently am trying to kill other bugs ;-)
26628
26629         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
26630         in container classes as well.  
26631
26632         * expression.cs (Binary.ResolveOperator): Handle string case
26633         before anything else (as operator overloading does emit an error
26634         before doing anything else).
26635
26636         This code could go away when we move to a table driven model, but
26637         i could not come up with a good plan last night.
26638
26639 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
26640
26641         * typemanager.cs (CSharpName): reimplementation using regex.
26642         * class.cs: added null check for fields in Emit
26643         * rootcontext.cs: set warninglevel to 4
26644
26645 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
26646
26647         * typemanager.cs (CSharpName): reimplemented with Lupus
26648         suggestion.
26649
26650 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
26651
26652         * statement.cs (If): correclty implement Resolve, because we were
26653         not catching sem errors in there.  The same process is needed
26654         everywhere else. 
26655         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
26656
26657
26658         (Statement.Warning_DeadCodeFound): Factorize code.
26659         (While): Report dead code here too.
26660
26661         (Statement): Added Resolve virtual method to allow
26662         for resolution split from the emit code.
26663
26664 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26665
26666         * statement.cs (EmitBoolExpression): No longer try to resolve the
26667         expression here.    
26668         (MakeBoolean): New utility function that resolve, implicitly
26669         converts to boolean and tags the expression. 
26670
26671
26672         (If, Do): Implement dead code elimination.
26673         (While): Implement loop inversion
26674
26675         (Do, While, For, If): Resolve the expression prior to calling our
26676         code generation.
26677
26678 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
26679
26680         * class.cs:
26681           - added method Report28 (warning: program has more than one entry point)
26682           - added method IsEntryPoint, implements paragraph 10.1 of the spec
26683           - modified method Method.Define, the part at the end of the method
26684
26685         * rootcontext.cs: added static public Location EntryPointLocation;
26686           
26687         * ../errors/cs0028.cs : Add test case for the above warning.              
26688
26689         * typemanager.cs:
26690           - modified method CSharpName to allow arrays of primitive type to
26691             be printed nicely (e.g. instead of System.Int32[][] it now prints
26692             int[][])
26693           - added method CSharpSignature: returns the signature of a method
26694             in string format to be used in reporting errors, warnings, etc.
26695
26696         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
26697         with String.Empty.
26698
26699 2002-04-26  Ravi Pratap  <ravi@ximian.com>
26700
26701         * delegate.cs (Define): Fix extremely silly bug where I was
26702         setting the type of the 'object' parameter of the BeginInvoke
26703         method to System.IAsyncResult instead of System.Object ;-)
26704
26705 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
26706
26707         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
26708         here. 
26709
26710         (Constructor.Emit): return if we fail to initialize the
26711         constructor.  Another door closed!  
26712
26713         * expression.cs (New.DoResolve): Improve error message (from -6 to
26714         1501).  Use DeclaredOnly lookup to find the exact constructor.
26715
26716         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
26717         loop.  This is useful.
26718
26719         * cs-parser.jay: Adjust the default parameters so that destructors
26720         have the proper signature.
26721
26722 2002-04-26  Martin Baulig  <martin@gnome.org>
26723
26724         * driver.cs (LoadAssembly): If `assembly' contains any characters
26725         which are only valid in path names and not in assembly names
26726         (currently slash, backslash and point), use Assembly.LoadFrom ()
26727         instead of Assembly.Load () on the `assembly' (before iteration
26728         over the link_paths).
26729
26730 2002-04-26  Martin Baulig  <martin@gnome.org>
26731
26732         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
26733
26734 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
26735
26736         * class.cs (Property): use the new typemanager.MemberLookup
26737
26738         (TypeContainer.MemberLookup): Implement using the
26739         TypeManager.MemberLookup now. 
26740
26741         * typemanager.cs: Make MemberLookup a function of the TypeManager,
26742         and return MemberInfos, so that these can be used without an
26743         EmitContext (what we had before).
26744
26745 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
26746
26747         * expression.cs: Fix the case where the argument to params if the
26748         type of the params.  I omitted handling this before.   Fixed
26749
26750 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26751
26752         * driver.cs: Call BootCorlib_PopulateCoreType
26753
26754         * class.cs (Property.CheckBase): Check for properties only, not
26755         for all members. 
26756
26757         * interface.cs: Temporary hack: try/catch around the
26758         CustomAttributeBuilder, because I am getting an exception that I
26759         do not understand.
26760
26761         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
26762         types whose definitions are required to be there (attributes are
26763         defined before standard types).
26764
26765         Compute definitions as we boot the various types, as they are used
26766         immediately (value_type class will need object_type, but if we do
26767         not initialize object_type, we will pass a null, which will let
26768         the runtime pick the System.Object from the existing corlib, which
26769         is not what we want).
26770
26771 2002-04-22  Patrik Torstensson <totte@labs2.com>
26772
26773         * cs-tokenizer.cs: fixed a number of trim() issues.
26774
26775 2002-04-22  Ravi Pratap  <ravi@ximian.com>
26776
26777         * expression.cs (Argument.Type): Ensure that we return the correct
26778         type when we have out or ref parameters [in which case we 
26779         append a "&"].
26780
26781 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
26782
26783         * class.cs (Property, Indexer): Allow extern modifier in there. 
26784
26785         * typemanager.cs (InitBaseTypes): Initializes object_type and
26786         value_type, since those will be used early on during the bootstrap
26787         process to compile corlib.
26788
26789         (InitCoreTypes): Move code from here to InitBaseTypes.
26790
26791 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
26792
26793         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
26794         single-dimension arrays as using the ldlen opcode.  
26795
26796         Daniel Lewis discovered this optimization.  
26797
26798         * typemanager.cs: Add signature for System.Array::get_Length
26799
26800 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26801
26802         * statement.cs: report the error when the foreach does not apply to an
26803         array nor a collection.
26804
26805 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
26806
26807         * expression.cs: Add implicit conversions to the operator ~.
26808
26809         * constant.cs (DecimalConstant.Emit): Emit decimal value.
26810
26811         * typemanager.cs: Locate the decimal constructor.
26812
26813 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26814
26815         * attribute.cs: use the new property of TypeOf.
26816         * expression.cs: added 'get' property around typearg.
26817
26818         These changes fix a build breaker reported by NickD. Is this the
26819         correct way to fix?  If not, please, revert my changes and make it
26820         work :-).
26821
26822 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
26823
26824         * attribute.cs: Add support for typeof in attribute invocations.
26825         I am not sure that this is right though.
26826
26827 2002-04-14  Duncan Mak  <duncan@ximian.com>
26828
26829         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
26830         Binary.Operator.Division case.
26831
26832 2002-04-13  Ravi Pratap  <ravi@ximian.com>
26833
26834         * class.cs (DefineType): Ensure that we do a proper check on
26835         attribute types and also register it with the TypeManager.
26836
26837         (TypeContainer.Targets): The default for attribute types is
26838         AttributeTargets.All.
26839
26840         * attribute.cs (ApplyAttributes): Registering the attribute type
26841         is done elsewhere, not when we discover we have a Usage attribute.
26842
26843 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26844
26845         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
26846         and get rid of is_delegate parameter.
26847
26848         * everywhere : update.
26849
26850 2002-04-12  Ravi Pratap  <ravi@ximian.com>
26851
26852         * cs-parser.jay (compilation_unit): Revamp completely to use
26853         some new ideas that I got from Rhys' grammar to solve the problems
26854         with assembly level attributes.
26855
26856         (outer_declaration): New grammar production.
26857
26858         (attribute_sections): Add.
26859
26860         (opt_attributes): Base on attribute_sections
26861
26862         (namespace_declaration): Allow opt_attributes to tackle the case
26863         when we have assembly level attributes - we are clever in this
26864         regard now ;-)
26865
26866         * attribute.cs (ApplyAttributes): Do not worry about assembly 
26867         attributes in the non-global context.
26868
26869         * rootcontext.cs (AddGlobalAttributes): Go back to using this
26870         instead of SetGlobalAttributes.
26871
26872         * class.cs, rootcontext.cs : Ensure we define and generate 
26873         attribute types before anything else.
26874
26875         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
26876         and flag the new error -20 for the case when the attribute type
26877         does not have valid targets specified. csc does not catch this.
26878
26879         * ../errors/errors.txt : update for error # -20
26880
26881 2002-04-11  Ravi Pratap  <ravi@ximian.com>
26882
26883         * support.cs (InternalParameters.ParameterModifier): Do some null
26884         checking and return sane values.
26885
26886         * class.cs (Method.Define): If we are a PInvoke method, ensure
26887         that we are static and extern. Report error # 601
26888
26889         * ../errors/cs0601.cs : Add test case for the above error.
26890
26891 2002-04-07  Ravi Pratap  <ravi@ximian.com>
26892
26893         * rootcontext.cs (attribute_types): We need to keep type of
26894         all attribute types separately and emit code for them first.
26895
26896         (RegisterAttribute) : Implement.
26897
26898         * class.cs (DefineType): Check if the current Type is a custom
26899         attribute type and register it accordingly.
26900
26901         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
26902         adding the first attribute twice and rename to
26903
26904         (SetGlobalAttributes): this.
26905
26906         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
26907         lookups.
26908
26909         * attribute.cs (ApplyAttributes): Take an additional argument telling us
26910         if we are processing global arguments. Hmm, I am unsure of this.
26911
26912 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26913
26914         * expression.cs: added static array of strings to avoid calling
26915         Enum.ToString () for Operator in Binary. Significant recover of
26916         performance.
26917
26918 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
26919
26920         * class.cs (FindMembers): Allow the Builders of the various
26921         members to be null.  If they are skip them.  This only happens
26922         during the PInvoke declaration.
26923
26924 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
26925
26926         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
26927         failure, so we do not keep going afterwards.
26928
26929         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
26930         wanted to pass `false' as the `is_delegate' argument.  If this is
26931         the case, why not use delegate_type == null to mean `is_delegate =
26932         false' and anything else as is_delegate = true.
26933
26934 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
26935
26936         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
26937         code for the section, not the beginning of the tests.
26938
26939 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
26940
26941         * cfold.cs: Handle operator + (Enum x, Underlying x) 
26942
26943         * expression.cs (Binary): same.  Warn about errors where we have
26944         Enum/Enum in operator + as well.
26945
26946 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
26947
26948         * statement.cs:
26949                 - added support for switch(bool)
26950                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
26951                 - add TableSwitchEmit() to handle table-based switch statements
26952
26953 2002-04-05  Ravi Pratap  <ravi@ximian.com>
26954
26955         * expression.cs (Invocation.OverloadResolve): Factor out code which
26956         does parameter compatibility checking with arguments so that we can 
26957         re-use the code even from Delegate.VerifyApplicability
26958
26959         (VerifyArgumentsCompat): Move above code here.
26960
26961         * delegate.cs (VerifyApplicability): Get rid of duplicate code
26962         and instead make a call to the above method.
26963
26964 2002-03-31  Ravi Pratap  <ravi@ximian.com>
26965
26966         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
26967         We use it to keep track of classes which are attribute types.
26968
26969 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
26970
26971         * delegate.cs (Delegate.Define): Correctly define the types in the
26972         presence of fixed and array parameters.
26973
26974         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
26975         doing FindMembers.
26976
26977         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
26978         include NonPublic after the first iteration.
26979
26980         * class.cs (Indexer.CheckBase): Only check if both parents are
26981         non-null. 
26982
26983         * cs-parser.jay (accessor_body): If empty, set to null.
26984
26985         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
26986         same code path here to resolve constants names that we did have in
26987         MemberAccess.DoResolve.  There is too much code duplicated here.
26988
26989 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
26990
26991         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
26992
26993         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
26994         to MakeUnionSet.
26995
26996         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
26997         tokens, numbers and strings.
26998
26999         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27000         parenthesis.
27001
27002         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27003         asyncronous parameters and the regular parameters.  
27004
27005         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27006         specify the target directory.
27007
27008         * expression.cs: (This.DoResolve): Simplify
27009         (As.Emit): Optimize, do not generate IsInst if the expression is
27010         always of the given type.
27011
27012         (Is.DoResolve): Bug fix, we were reporting both always/never for
27013         the is expression.
27014
27015         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27016         creating too many unnecessary arrays.
27017
27018 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27019
27020         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27021         fields instead of rolling our own initializer.   Takes care of all
27022         implicit conversions, and drops unnecessary static checks/argument.
27023
27024 2002-03-31  Dick Porter  <dick@ximian.com>
27025
27026         * driver.cs: use the GetDirectories() return values properly, and
27027         use "/" as path separator.
27028
27029 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27030
27031         * expression.cs (Unary): Optimize - - expr into expr.
27032         (Binary): Optimize a + (-b) into a -b.
27033
27034         * codegen.cs (CodeGen): Made all methods static.
27035
27036 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27037
27038         * rootcontext.cs: 
27039
27040         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27041         TypeBuilder property.
27042
27043         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27044         instead. 
27045
27046         * tree.cs: Removed the various RecordXXXX, and replaced with a
27047         single RecordDecl.  Removed all the accessor methods, and just
27048         left a single access point Type 
27049
27050         * enum.cs: Rename DefineEnum to DefineType.
27051
27052         * decl.cs: New abstract method `DefineType' used to unify the
27053         Defines for Enumerations, Interfaces, TypeContainers and
27054         Delegates.
27055
27056         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27057         LookupBaseClasses method that used to live in class.cs and
27058         interface.cs here, and renamed to FindType.
27059
27060         * delegate.cs: Implement DefineType.  Take advantage of the
27061         refactored pattern for locating the parent builder without taking
27062         the parent_builder argument (which we know does not work if we are
27063         nested, and triggering a toplevel definition).
27064
27065 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27066
27067         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27068         accessibility of a member has changed during override and report
27069         an error if so.
27070
27071         * class.cs (Method.Define, Property.Define): Only complain on
27072         overrides if the method is private, any other accessibility is
27073         fine (and since we just checked the permission is the same, we are
27074         good to go).
27075
27076         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27077         and elif are processed always.  The other pre-processing
27078         directives are only processed if we are "taking" the path
27079
27080 2002-03-29  Martin Baulig  <martin@gnome.org>
27081
27082         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27083         current location is not Null.
27084
27085         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27086         a separate method so we can profile it.
27087
27088         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27089         `span.Seconds' are just seconds, but no minutes or hours.
27090         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27091
27092 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27093
27094         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27095         Remove the gratuitous set of Final:
27096
27097                                 // If an interface implementation, then we can set Final.
27098                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27099                                     implementing.DeclaringType.IsInterface)
27100                                         flags |= MethodAttributes.Final;
27101
27102         I do not know what I was smoking when I used that.
27103
27104
27105         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27106         step into fixing the name resolution issues for delegates and
27107         unifying the toplevel name resolution.
27108
27109 2002-03-28  Martin Baulig  <martin@gnome.org>
27110
27111         * class.cs (Method.Emit): If we have a symbol writer, call its
27112         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27113         tell it about the current method.
27114
27115         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27116         writer that we're going to emit the first byte of IL code for a new
27117         statement (a new source line).
27118         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27119         EmitContext.Mark() before emitting any code.
27120
27121         * location.cs (SymbolDocument): Return null when we're Null.
27122
27123         * statement.cs (Statement): Moved the `Location loc' variable here.
27124         (Statement.EmitBoolExpression): If we have a symbol writer, call
27125         ec.Mark() before emitting any code to tell it that we're at the
27126         beginning of a new statement.
27127         (StatementExpression): Added `Location' argument to the constructor.
27128         (Block): Added public readonly variable `StartLocation' and public
27129         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27130         (Block): Added constructor which takes a start and end location.
27131         (Block.SetEndLocation): New method. This sets the end location.
27132         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27133         local variables we create.
27134         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27135         each statement and do also mark the begin and end of the block.
27136
27137         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27138         tell it the current lexer.Location, use Location.Null for the end of the
27139         block.
27140         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27141         current block, set its end location using SetEndLocation().
27142         (statement_expression): StatementExpression constructor now takes the
27143         lexer.Location as additional argument.
27144         (for_statement, declare_local_variables): Likewise.
27145         (declare_local_variables): When creating a new implicit block, use the
27146         new Block constructor and pass it the lexer.Location.
27147
27148 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27149
27150         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27151         members also on the parent interfaces recursively.
27152
27153 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27154
27155         * report.cs: Use new formats, since Gonzalo finished the missing
27156         bits. 
27157
27158         * expression.cs (Binary.ResolveOperator): added missing operator|
27159         operator& and operator^ for bool/bool.
27160
27161         * cs-parser.jay: CheckDef now takes a Location argument that is
27162         used to report errors more precisly (instead of reporting the end
27163         of a definition, we try to track something which is a lot closer
27164         to the source of the problem).
27165
27166         * cs-tokenizer.cs: Track global token use, so we can properly flag
27167         the use of #define/#undef after the first token has been seen.
27168
27169         Also, rename the reportXXXX to Error_DescriptiveName
27170
27171         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27172         TypeContainer, so that Enum and Interface can use this too.
27173
27174         * class.cs (TypeContainer.LookupInterfaceOrClass,
27175         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27176         `builder' argument.  Typically this was used to pass the parent
27177         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27178         the definition).  
27179
27180         The problem is that a nested class could trigger the definition of
27181         a toplevel class, and the builder would be obviously wrong in that
27182         case. 
27183
27184         So we drop this argument, and we compute dynamically the
27185         TypeBuilder/ModuleBuilder (the correct information was available
27186         to us anyways from DeclSpace.Parent)
27187
27188         * interface.cs (Interface.DefineInterface): Drop builder
27189         parameter cleanup like class.cs
27190
27191         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27192         like class.cs
27193
27194         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27195         values. 
27196
27197         (Try.Emit): Propagate the returns value from the statement.
27198
27199         (Return.Emit): Even if we are leavning 
27200
27201         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27202
27203         * modifiers.cs: Fix the computation of MethodAttributes flags.
27204
27205 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27206
27207         * driver.cs: allow compilation of files that start with '/'.
27208         Add a default case when checking the argument of --target.
27209
27210 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27211
27212         * interface.cs: Implement the same search algorithm for types in
27213         the interface code.
27214
27215         * delegate.cs: Do not allow multiple definition.
27216
27217         * Recovered ChangeLog that got accidentally amputated
27218
27219         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27220
27221         * rootcontext.cs: Load manually enum to allow core classes to
27222         contain enumerations.
27223
27224         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27225         Update to new static methods in TypeManager.
27226
27227         * typemanager.cs (GetMethod, GetConstructor): Use our
27228         implementation of FindMembers to find the members, since during
27229         corlib compilation, the types are TypeBuilders and GetMethod and
27230         GetConstructor do not work.
27231
27232         Make all methods in TypeManager static.
27233
27234         (InitCodeHelpers): Split the functionality from
27235         the InitCodeTypes function.
27236
27237         * driver.cs: Call InitCodeHelpers after we have populated the
27238         types. 
27239
27240         * cs-parser.jay (delegate_declaration): we did not used to compute
27241         the delegate name correctly for void delegates.
27242
27243 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27244
27245         * rootcontext.cs (RootContext): Init the interface_resolve_order
27246         and type_container_resolve_order always.
27247
27248         (ResolveCore, BootstrapCorlib_ResolveClass,
27249         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
27250         compiler when compiling with --nostdlib
27251
27252         * class.cs (TypeContainer.DefineType): Check that our parent is
27253         not null.  This test is most important when we are bootstraping
27254         the core types.
27255
27256         * codegen.cs: Split out the symbol writing code.
27257
27258 2002-03-25  Martin Baulig  <martin@gnome.org>
27259
27260         * driver.cs (-g): Made -g an alias for --debug.
27261
27262 2002-03-24  Martin Baulig  <martin@gnome.org>
27263
27264         * codegen.cs (SymbolWriter): New public variable. Returns the
27265         current symbol writer.
27266         (CodeGen): Added `bool want_debugging_support' argument to the
27267          constructor. If true, tell the ModuleBuild that we want debugging
27268         support and ask it for the ISymbolWriter.
27269         (Save): If we have a symbol writer, call it's Close() method after
27270         saving the assembly.
27271
27272         * driver.c (--debug): New command line argument to create a
27273         debugger information file.
27274
27275         * location.cs (SymbolDocument): New public property. Returns an
27276         ISymbolDocumentWriter object for the current source file or null
27277         if we don't have a symbol writer.
27278
27279 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
27280
27281         * driver.cs (LoadAssembly): Correctly return when all the paths
27282         have been tried and not before.
27283
27284         * statement.cs (Switch.Emit): return the actual coverage for this
27285         statement (returns/not-returns)
27286
27287         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
27288         switch of the statement if we are the last switch section.  That
27289         kills two problems: try/catch problems (we used to emit an empty
27290         nop at the end) and switch statements where all branches would
27291         return. 
27292
27293 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
27294
27295         * driver.cs: Add default assemblies (the equivalent to the
27296         Microsoft CSC.RSP file)
27297
27298         * cs-tokenizer.cs: When updating `cols and setting it to zero,
27299         also update tokens_seen and set it to false.
27300
27301         * driver.cs: Implement --recurse for Mike.
27302
27303         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
27304         correctly splitting out the paths.
27305
27306 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
27307
27308         * interface.cs (Interface.PopulateProperty): Instead of using
27309         `parent' as the declaration space for the set parameters, use
27310         `this' 
27311
27312         * support.cs (InternalParameters): InternalParameters constructor
27313         takes a DeclSpace instead of a TypeContainer.
27314
27315         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
27316         types are being initialized, load the address of it before calling
27317         the function.  
27318
27319         (New): Provide a mechanism to disable the generation of local
27320         value type temporaries when the caller will be providing us with
27321         an address to store it.
27322
27323         (ArrayCreation.EmitDynamicInitializers): Use it.
27324
27325 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
27326
27327         * expression.cs (Invocation.EmitArguments): Only probe for array
27328         property if there is more than one argument.  Sorry about that.
27329
27330         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
27331         empty param arrays.
27332
27333         * class.cs (Method.LabelParameters): Fix incorrect code path that
27334         prevented the `ParamArrayAttribute' from being applied to the
27335         params attribute.
27336
27337 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
27338
27339         * support.cs (ReflectionParameters): Correctly compute whether the
27340         last argument is a params array.  Fixes the problem with
27341         string.Split ('a')
27342
27343         * typemanager.cs: Make the assemblies array always be non-null
27344         (empty, but non-null)
27345
27346         * tree.cs (RecordDecl): New function that abstracts the recording
27347         of names.  This reports error 101, and provides a pointer to the
27348         previous declaration.  Fixes a crash in the compiler.
27349
27350         * cs-parser.jay (constructor_declaration): Update to new grammar,
27351         and provide a constructor_body that can be empty.
27352
27353 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
27354
27355         * driver.cs: Add support for --resources.
27356
27357         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
27358         Make all types for the various array helper methods be integer.
27359
27360         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
27361         CheckState to ConvCast.
27362
27363         (ConvCast): Now it takes a `checked' state argument, to avoid
27364         depending on the emit context for the conversion, and just using
27365         the resolve time setting.
27366
27367         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
27368         instead of Invocation.EmitArguments.  We do not emit the original
27369         arguments, instead we emit those which have been converted to
27370         unsigned int expressions.
27371
27372         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
27373
27374         * codegen.cs: ditto.
27375
27376         * expression.cs (LocalVariableReference): Drop the use of the
27377         Store function that depended on the variable index.
27378
27379         * statement.cs (VariableInfo): Drop the `Idx' property from this
27380         class, as this is not taking into account the indexes for
27381         temporaries tat we generate during the execution, getting the
27382         indexes wrong.
27383
27384         * class.cs: First emit class initializers, then call the parent
27385         constructor. 
27386
27387         * expression.cs (Binary): Fix opcode emision.
27388         (UnaryMutator.EmitCode): Support checked code generation
27389
27390         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
27391         matches for events for both the Static and Instance scans,
27392         pointing to the same element.   Fix that.
27393
27394 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
27395
27396         * rootcontext.cs (ResolveTree): Always set the
27397         interface_resolve_order, because nested interfaces will be calling
27398         into us.
27399
27400         * class.cs (GetInterfaceOrClass): Track the same resolution
27401         process used by TypeManager.LookupType.  This fixes the nested
27402         type lookups in class declarations (separate path from
27403         LookupType). 
27404
27405         (TypeContainer.DefineType): Also define nested interfaces.
27406         (TypeContainer.RegisterOrder): New public function used to
27407         register the order in which child interfaces need to be closed.
27408
27409         Nested interfaces need to be closed after their parents have been
27410         created. 
27411
27412         * interface.cs (InterfaceAttr): Put all the logic for computing
27413         the interface attribute here. 
27414
27415         (DefineInterface): Register our interface order with the
27416         RootContext or with the TypeContainer depending on the case.
27417
27418 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27419
27420         * cs-parser.jay: rework foreach statement to work with the new
27421         changes to the policy on SimpleNames.
27422
27423         * report.cs: support Stacktrace on warnings as well.
27424
27425         * makefile: drop --unsafe and /unsafe from the compile.
27426
27427 2002-03-13  Ravi Pratap  <ravi@ximian.com>
27428
27429         * ecore.cs (StandardConversionExists): Modify to take an Expression
27430         as the first parameter. Ensure we do null -> reference type conversion
27431         checking.
27432
27433         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
27434         temporary Expression objects.
27435
27436 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
27437
27438         * interface.cs: workaround bug in method overloading resolution
27439         (there is already a bugzilla bug for it).
27440
27441 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
27442
27443         We could also solve this problem by having a separate path for
27444         performing type lookups, instead of DoResolve, we could have a
27445         ResolveType entry point, and only participating pieces of the
27446         production (simplename, deref, array) would implement this. 
27447
27448         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
27449         signal SimpleName to only resolve type names and not attempt to
27450         resolve anything else.
27451
27452         * expression.cs (Cast): Set the flag.
27453
27454         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
27455
27456         * class.cs: Only report 108 if there is no `new' modifier.
27457
27458         * cs-parser.jay: rework foreach statement to work with the new
27459         changes to the policy on SimpleNames.
27460
27461         * report.cs: support Stacktrace on warnings as well.
27462
27463         * makefile: drop --unsafe and /unsafe from the compile.
27464
27465 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
27466
27467         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27468         lookups here, instead of doing that at parse time.  This means
27469         that our grammar will not introduce `LocalVariableReferences' as
27470         expressions at this point.  That solves the problem of code like
27471         this:
27472
27473         class X {
27474            static void Main ()
27475            { int X = 1;
27476             { X x = null }}}
27477
27478         This is only half the fix.  The full fix requires parameters to
27479         also be handled in this way.
27480
27481         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
27482         makes the use more obvious of the DeclSpace.  The
27483         ec.TypeContainer.TypeBuilder is now only used to pull the
27484         TypeBuilder for it.
27485
27486         My theory is that I can get rid of the TypeBuilder completely from
27487         the EmitContext, and have typecasts where it is used (from
27488         DeclSpace to where it matters).  
27489
27490         The only pending problem is that the code that implements Aliases
27491         is on TypeContainer, and probably should go in DeclSpace.
27492
27493         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
27494         lookups here, instead of doing that at parse time.  This means
27495         that our grammar will not introduce `LocalVariableReferences' as
27496         expressions at this point.  That solves the problem of code like
27497         this:
27498
27499         class X {
27500            static void Main ()
27501            { int X = 1;
27502             { X x = null }}}
27503
27504         This is only half the fix.  The full fix requires parameters to
27505         also be handled in this way.
27506
27507         * class.cs (Property.DefineMethod): When implementing an interface
27508         method, set newslot, when implementing an abstract method, do not
27509         set the flag (before we tried never setting it, or always setting
27510         it, which is the difference).
27511         (Indexer.DefineMethod): same.
27512         (Method.DefineMethod): same.
27513
27514         * ecore.cs: Only set the status used flag if we get back a Field.
27515
27516         * attribute.cs: Temporary hack, so Paolo can keep working.
27517
27518 2002-03-08  Ravi Pratap  <ravi@ximian.com>
27519
27520         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
27521         the unmanaged type in the case we have a MarshalAs attribute.
27522
27523         (Resolve): Handle the case when we are parsing the special MarshalAs
27524         attribute [we need to store the unmanaged type to use later]
27525
27526         * typemanager.cs (marshal_as_attr_type): Built in type for the 
27527         MarshalAs Attribute.
27528
27529         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
27530         on parameters and accordingly set the marshalling info.
27531
27532 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
27533
27534         * class.cs: Optimizing slightly by removing redundant code after
27535         we switched to the `NoTypes' return value.
27536         (Property.DefineMethod): use NoTypes here too.
27537
27538         This fixes the bug I introduced in my last batch of changes.
27539
27540 2002-03-05  Ravi Pratap  <ravi@ximian.com>
27541
27542         * tree.cs (RecordEnum): Add. We now keep track of enums too.
27543
27544         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
27545         Enums since those are types too. 
27546
27547         * cs-parser.jay (enum_declaration): Record enums as we parse them.
27548
27549         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
27550         thanks to a call during the lookup process.
27551
27552 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
27553
27554         * statement.cs (Foreach): Lots of work to accomodate a particular
27555         kind of foreach statement that I had not kept in mind.  It is
27556         possible to have foreachs on classes that provide a GetEnumerator
27557         method that return objects that implement the "pattern" for using
27558         a foreach, there is no need to support GetEnumerator
27559         specifically. 
27560
27561         This is needed to compile nant.
27562
27563         * decl.cs: Only report 114 if the member is not `Finalize' and if
27564         the warning level is at least 2.
27565
27566         * class.cs: Moved the compare function from Method to
27567         MethodSignature. 
27568
27569         (MethodSignature.InheritableMemberSignatureCompare): Add new
27570         filter function that is used to extract inheritable methods from a
27571         class. 
27572
27573         (Method.Define): Use the new `inheritable_method_signature_filter'
27574         delegate
27575
27576         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
27577         command. 
27578
27579 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
27580
27581         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
27582
27583         * cs-parser.jay: Add opt_semicolon to the interface declaration.
27584
27585         * expression.cs: Pass location information to
27586         ConvertImplicitStandard. 
27587
27588         * class.cs: Added debugging code to track return values from
27589         interfaces. 
27590
27591 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
27592
27593         * expression.cs (Is.DoResolve): If either side of the `is' is an
27594         interface, do not flag the warning.
27595
27596         * ecore.cs (ImplicitReferenceConversion): We need a separate test
27597         for interfaces
27598
27599         * report.cs: Allow for --fatal to be used with --probe.
27600
27601         * typemanager.cs (NoTypes): Move the definition for the empty Type
27602         array here. 
27603
27604         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
27605         properties. 
27606         (TypeContainer.DefineProxy): New function used to proxy to parent
27607         implementations when implementing interfaces.
27608         (TypeContainer.ParentImplements): used to lookup if our parent
27609         implements a public function that is required by an interface.
27610         (TypeContainer.VerifyPendingMethods): Hook this up.
27611
27612         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
27613         `modules' and `assemblies' arraylists into arrays.  We only grow
27614         these are the very early start up of the program, so this improves
27615         the speedof LookupType (nicely measured).
27616
27617         * expression.cs (MakeByteBlob): Replaced unsafe code with
27618         BitConverter, as suggested by Paolo.
27619
27620         * cfold.cs (ConstantFold.Binary): Special case: perform constant
27621         folding of string concatenation, but if either side is a string,
27622         and the other is not, then return null, and let the runtime use
27623         the concatenation on the string plus the object (using
27624         `Object.ToString'). 
27625
27626 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
27627
27628         Constant Folding has been implemented now.
27629
27630         * expression.cs (Unary.Reduce): Do not throw an exception, catch
27631         the error instead on types that are not supported in one's
27632         complement. 
27633
27634         * constant.cs (Constant and all children): New set of functions to
27635         perform implict and explicit conversions.
27636
27637         * ecore.cs (EnumConstant): Implement the new functions to perform
27638         conversion by proxying to the child expression.
27639
27640         * codegen.cs: (ConstantCheckState): Constant evaluation has its
27641         own separate setting that can not be turned off from the command
27642         line using --unchecked or --checked and is only controlled using
27643         the checked/unchecked statements and expressions.  This setting is
27644         used by the constant folder to flag errors.
27645
27646         * expression.cs (CheckedExpr, UncheckedExpr): Set the
27647         ConstantCheckState as well.   
27648
27649         During Resolve, they also have to flag the state, because the
27650         constant folder runs completely in the Resolve phase.
27651
27652         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
27653         well.
27654
27655 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27656
27657         * cfold.cs: New file, this file contains the constant folder.
27658
27659         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
27660         argument to track whether we are using the resulting address to
27661         load or store a value and provide better error messages. 
27662
27663         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
27664         new AddressOf arguments.
27665
27666         * statement.cs (Foreach.EmitCollectionForeach): Update
27667
27668         * expression.cs (Argument.Emit): Call AddressOf with proper
27669         arguments to track usage.
27670
27671         (New.DoEmit): Call AddressOf with new arguments.
27672
27673         (Unary.Emit): Adjust AddressOf call.
27674
27675 2002-03-01  Ravi Pratap  <ravi@ximian.com>
27676
27677         * cs-parser.jay (member_access): Change the case for pre-defined types
27678         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
27679         this suggestion.
27680
27681         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
27682         a method body.
27683
27684         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
27685         essentially like methods and apply attributes like MethodImplOptions to them too.
27686
27687         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
27688         not being null.
27689
27690         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
27691         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
27692         is the DeclSpace.
27693
27694         * Update code everywhere accordingly.
27695
27696         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
27697
27698         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
27699
27700 2002-02-28  Ravi Pratap  <ravi@ximian.com>
27701
27702         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
27703         try performing lookups against those instead of jumping straight into using
27704         the 'using' clauses.
27705
27706         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
27707
27708         (LookupType): Perform lookups in implicit parents too.
27709
27710         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
27711         sequence as RootContext.LookupType. 
27712
27713         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
27714         the various cases of namespace lookups into this method.
27715
27716 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
27717
27718         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
27719         in positional arguments)
27720
27721         * class.cs (Operator): Update the AllowedModifiers to contain
27722         extern. 
27723
27724         * cs-parser.jay: Update operator declaration to allow for the
27725         operator body to be empty.
27726
27727         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
27728         values. 
27729
27730 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
27731
27732         * class.cs (Method.Emit): Label parameters.
27733
27734         * driver.cs: Return 1 or 0 as the program exit code.
27735
27736 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
27737
27738         * expression.cs: Special case the `null' object when trying to
27739         auto-compute the type, as anything can be explicitly converted to
27740         that. 
27741
27742         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
27743         spotting this Paolo.
27744
27745         (Expression.ImplicitNumericConversion): Perform comparissions of
27746         the type using the underlying type in the case of an enumeration
27747         rather than using the enumeration type for the compare.
27748
27749         Cope with the underlying == type case, which is not possible to
27750         catch before. 
27751
27752         (Expression.ConvertNumericExplicit): Perform comparissions of
27753         the type using the underlying type in the case of an enumeration
27754         rather than using the enumeration type for the compare.
27755
27756         * driver.cs: If the user does not supply an extension, assume .exe
27757
27758         * cs-parser.jay (if_statement): Rewrote so that we can track the
27759         location for the if statement.
27760
27761         * expression.cs (Binary.ConstantFold): Only concat strings when
27762         the operation is "+", not everything ;-)
27763
27764         * statement.cs (Statement.EmitBoolExpression): Take a location
27765         argument. 
27766         (If, While, Do): Track location.
27767
27768         * expression.cs (Binary.ResolveOperator): In the object + string
27769         case, I was missing a call to ConvertImplicit
27770
27771 2002-02-25  Ravi Pratap  <ravi@ximian.com>
27772
27773         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
27774         Location arguments. Ensure we use RootContext.LookupType to do our work
27775         and not try to do a direct Type.GetType and ModuleBuilder.GetType
27776
27777         * interface.cs (PopulateMethod): Handle the type of the parameter being
27778         null gracefully.
27779
27780         * expression.cs (Invocation.BetterFunction): Handle the case when we 
27781         have a params method with no fixed arguments and a call is made with no
27782         arguments.
27783
27784 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
27785
27786         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
27787         the verbatim-string-literal
27788
27789         * support.cs (InternalParameters.ParameterModifier): handle null
27790         fixed parameters.
27791         (InternalParameters.ParameterType): ditto.
27792
27793         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
27794         duplicating the name of the variable parameter.
27795         (GetParameterByName): Fix bug where we were not looking up array
27796         paramters if they were the only present (thanks Paolo!).
27797         (GetParameterInfo): We only have an empty set of types if both
27798         fixed and array are set to null.
27799         (GetParameterInfo-idx): Handle FixedParameter == null
27800
27801         * cs-parser.jay: Handle the case where there is no catch
27802         statements (missing null test).
27803
27804 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
27805
27806         * driver.cs (MainDriver): Be conservative on our command line
27807         handling.
27808
27809         Catch DirectoryNotFoundException when calling GetFiles.
27810
27811         (SplitPathAndPattern): Used to split the input specification into
27812         a path and a pattern that we can feed to Directory.GetFiles.
27813
27814 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
27815
27816         * statement.cs (Fixed): Implement the last case of the Fixed
27817         statement (string handling).
27818
27819         * expression.cs (StringPtr): New class used to return a char * to
27820         a string;  Used by the Fixed statement.
27821
27822         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
27823
27824         * expression.cs (Binary.ResolveOperator): Remove redundant
27825         MemberLookup pn parent type.
27826         Optimize union call, we do not need a union if the types are the same.
27827         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
27828         type.
27829
27830         Specialize the use of MemberLookup everywhere, instead of using
27831         the default settings. 
27832
27833         (StackAlloc): Implement stackalloc keyword.
27834
27835         * cs-parser.jay: Add rule to parse stackalloc.
27836
27837         * driver.cs: Handle /h, /help, /?
27838
27839         * expression.cs (MakeByteBlob): Removed the hacks we had in place
27840         before we supported unsafe code.
27841
27842         * makefile: add --unsafe to the self compilation of mcs.
27843
27844 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
27845
27846         * expression.cs (PointerArithmetic): New class that is used to
27847         perform pointer arithmetic.
27848         (Binary.Resolve): Handle pointer arithmetic
27849         Handle pointer comparission.
27850         (ArrayPtr): Utility expression class that is used to take the
27851         address of an array.
27852
27853         (ElementAccess): Implement array access for pointers
27854
27855         * statement.cs (Fixed): Implement fixed statement for arrays, we
27856         are missing one more case before we are done.
27857
27858         * expression.cs (Indirection): Implement EmitAssign and set the
27859         ExprClass to Variable.  This allows pointer dereferences to be
27860         treated as variables, and to have values assigned to them.
27861
27862         * ecore.cs (Expression.StoreFromPtr): New utility function to
27863         store values dereferencing.
27864
27865 2002-02-20  Ravi Pratap  <ravi@ximian.com>
27866
27867         * expression.cs (Binary.ResolveOperator): Ensure that we are
27868         not trying to operate on a void type - this fixes the reported
27869         bug.
27870
27871         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
27872         the parent implementation is sealed.
27873
27874         * ../errors/cs0239.cs : Add.
27875
27876         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
27877
27878         * typemanager.cs (unverifiable_code_type): Corresponds to 
27879         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
27880         which have unsafe code in them.
27881
27882         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
27883         unsafe context.
27884
27885 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
27886
27887         * cs-tokenizer.cs: Add support for @"litreal strings"
27888
27889         Make tokenizer accept pre-processor directives
27890         on any column (remove the old C-like limitation). 
27891
27892         * rootcontext.cs (EmitCode): Emit any global attributes.
27893         (AddGlobalAttributes): Used to keep track of assembly attributes. 
27894
27895         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
27896
27897         * cs-parser.jay: Add support for global attributes.  
27898
27899 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
27900
27901         * expression.cs (Indirection): New helper class.  Unary will
27902         create Indirection classes to be able to implement the
27903         IMemoryLocation interface on it.
27904
27905 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
27906
27907         * cs-parser.jay (fixed_statement): reference the right statement.
27908
27909         * statement.cs (Fixed.Emit): Finish implementing the fixed
27910         statement for the &x case.
27911
27912 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
27913
27914         * class.cs (Property.Define, Method.Define): Remove newslot when
27915         `implementing'.  
27916
27917         * modifiers.cs: My use of NewSlot when `Abstract' was set was
27918         wrong.  NewSlot should only be used if the `new' keyword is present.
27919
27920         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
27921         locating our system dir.  Sorry about this.
27922
27923 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27924
27925         * driver.cs (GetSystemDir): Compute correctly the location of our
27926         system assemblies.  I was using the compiler directory instead of
27927         the library directory.
27928
27929 2002-02-13  Ravi Pratap  <ravi@ximian.com>
27930
27931         * expression.cs (BetterFunction): Put back in what Miguel commented out
27932         since it is the correct fix. The problem is elsewhere ;-)
27933
27934         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
27935         parameters of the parms method are themselves compatible or not !
27936
27937         (StandardConversionExists): Fix very dangerous bug where we were forgetting
27938         to check that a class implements an interface before saying that an implicit
27939         conversion was allowed. Use ImplementsInterface to do the checking.
27940
27941 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
27942
27943         * class.cs (Method.Define): Track whether we are an explicit
27944         implementation or not.  And only call DefineMethodOverride if we
27945         are an explicit implementation.
27946
27947         (Property.DefineMethod): Ditto.
27948
27949 2002-02-11  Ravi Pratap  <ravi@ximian.com>
27950
27951         * expression.cs (BetterFunction): Catch hideous bug which was
27952          preventing us from detecting ambiguous calls due to implicit casts i.e
27953         cs0121.
27954
27955 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
27956
27957         * support.cs (Pair): Remove un-needed method.  I figured why I was
27958         getting the error in cs-parser.jay, the variable in a foreach loop
27959         is readonly, and the compiler does not really treat this as a variable.
27960
27961         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
27962         instead of EQUALS in grammar.  
27963
27964         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
27965
27966         * expression.cs (Unary.DoResolve): Check whether the argument is
27967         managed or not.
27968
27969 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
27970
27971         * support.cs: Api for Pair to set a value.  Despite the fact that
27972         the variables are public the MS C# compiler refuses to compile
27973         code that accesses the field if the variable is part of a foreach
27974         statement. 
27975
27976         * statement.cs (Fixed): Begin implementation of the fixed
27977         statement.
27978
27979         (Block.AddVariable): Return the VariableInfo on success and null
27980         on failure instead of true/false. 
27981
27982         * cs-parser.jay (foreach): Catch errors on variables already
27983         defined (we were ignoring this value before) and properly unwind
27984         the block hierarchy
27985
27986         (fixed_statement): grammar for the fixed statement.
27987
27988 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
27989
27990         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
27991         pointer types to be incretemented.
27992
27993         (SizeOf): Implement.
27994
27995         * cs-parser.jay (pointer_member_access): Implement
27996         expr->IDENTIFIER production.
27997
27998         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
27999         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28000         on safe contexts.
28001
28002         (Unary): Implement indirection.
28003
28004         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28005         use in non-unsafe context).
28006
28007         (SimpleName.DoResolve): Check for pointers in field access on safe
28008         contexts. 
28009
28010         (Expression.LoadFromPtr): Factor the load-indirect code in this
28011         function.  This was duplicated in UnboxCast and ParameterReference
28012
28013 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28014
28015         * expression.cs (ComposedCast): report an error if a pointer cast
28016         is used in a safe region.
28017
28018         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28019         pointer type casts in unsafe context.
28020
28021         * codegen.cs (EmitContext): Set up IsUnsafe.
28022
28023         * cs-parser.jay (non_expression_type): Add productions for pointer
28024         casts. 
28025
28026         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28027         code.  We should not use force into static mode if the method is
28028         not virtual.  Fixes bug in MIS
28029
28030         * statement.cs (Do.Emit, While.Emit, For.Emit,
28031         Statement.EmitBoolExpression): Add support to Do and While to
28032         propagate infinite loop as `I do return' semantics.
28033
28034         Improve the For case to also test for boolean constants.
28035
28036         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28037         to the list of attributes we can add.
28038
28039         Remove `EmitContext' argument.
28040
28041         * class.cs (Method.Define): Apply parameter attributes.
28042         (Constructor.Define): Apply parameter attributes.
28043         (MethodCore.LabelParameters): Move here the core of labeling
28044         parameters. 
28045
28046         * support.cs (ReflectionParameters.ParameterModifier,
28047         InternalParameters.ParameterModifier): Use IsByRef on the type and
28048         only return the OUT bit for these parameters instead of in/out/ref
28049         flags.
28050
28051         This is because I miss-understood things.  The ParameterInfo.IsIn
28052         and IsOut represent whether the parameter has the [In] and [Out]
28053         attributes set.  
28054
28055 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28056
28057         * ecore.cs (FieldExpr.Emit): Release temporaries.
28058
28059         * assign.cs (LocalTemporary.Release): new function.
28060
28061         * codegen.cs (EmitContext.GetTemporaryStorage,
28062         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28063         temporary storage.  Now we can "put back" localbuilders when we
28064         are done with them
28065
28066 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28067
28068         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28069         need to make a copy of the variable to generate verifiable code.
28070
28071 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28072
28073         * driver.cs: Compute dynamically the system directory.
28074
28075         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28076         Slower, but more generally useful.  Used by the abstract
28077         registering implementation. 
28078
28079         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28080         the rules for the special rule on Type/instances.  First check if
28081         we have the same name, and if so, try that special static path
28082         rather than the instance path.
28083
28084 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28085
28086         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28087         for, while and if.
28088
28089         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28090         Enum, ValueType, Delegate or Array for non-corlib compiles.
28091
28092         * cs-tokenizer.cs: Catch long identifiers (645)
28093
28094         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28095         piece of code.
28096
28097         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28098         fix, we were returning too early, so we were not registering
28099         pending methods from abstract classes.
28100
28101         Do not register pending methods if the class is abstract.
28102
28103         * expression.cs (Conditional.DoResolve): Report circular implicit
28104         conversions when we neecd to compute it for conditional
28105         expressions. 
28106
28107         (Is.DoResolve): If the expression is always of the provided type,
28108         flag warning 183.  If the expression can not ever be of the
28109         provided type flag warning 184.
28110
28111         * class.cs: Catch 169 as well.
28112
28113         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28114         read. 
28115
28116 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28117
28118         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28119
28120 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28121
28122         * interface.cs: (PopulateMethod): Check for pointers being defined
28123         only if the unsafe context is active.
28124         (PopulateProperty): ditto.
28125         (PopulateIndexer): ditto.
28126
28127         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28128         specified.  If pointers are present, make sure that they are
28129         present in an unsafe context.
28130         (Constructor, Constructor.Define): ditto.
28131         (Field, Field.Define): ditto.
28132         (Property, Property.Define): ditto.
28133         (Event, Event.Define): ditto.
28134
28135         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28136         hashtable if there are classes or structs defined.
28137
28138         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28139         code, as the constant resolution moved.
28140
28141         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28142         the metadata, so we can flag error 133. 
28143
28144         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28145         pointer is being declared in an unsafe context.
28146
28147 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28148
28149         * modifiers.cs (Modifiers.Check): Require a Location argument.
28150         Report error 227 for Unsafe use.
28151
28152         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28153
28154         * statement.cs (For.Emit): If the test is null, then report that
28155         we do `return', as we wont reach anything afterwards.
28156
28157         (Switch.SwitchGoverningType): Track the expression that matched
28158         the conversion.
28159
28160         * driver.cs: Allow negative numbers as an error code to flag.
28161
28162         * cs-parser.jay: Handle 1551.
28163
28164         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28165
28166 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28167
28168         * cs-parser.jay: Report 1518 (type declaration can only contain
28169         class, struct, interface, enum or delegate)
28170
28171         (switch_label): Report 1523 (keywords `case' or `default' must
28172         preced code)
28173
28174         (opt_switch_sections): Report 1522 (empty switch)
28175
28176         * driver.cs: Report 1515 (response file specified multiple times)
28177         Report 1516 (Source file specified multiple times).
28178
28179         * expression.cs (Argument.Resolve): Signal 1510
28180
28181         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28182         access not allowed in static code)
28183
28184 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28185
28186         * typemanager.cs (IsPointerType): Utility method which we are going
28187         to need a lot.
28188
28189         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28190         the object type, so we take care of that.
28191
28192         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28193
28194         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28195         added to non-params parameters :-)
28196
28197         * typemanager.cs (CSharpName): Include 'void' type too. 
28198
28199         (void_ptr_type): Include in the set of core types.
28200
28201         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28202         duplicating code.
28203
28204         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28205         an unsafe context.
28206
28207         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28208         completely forgotten about it.
28209
28210 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28211
28212         * cs-parser.jay (pointer_type): Add. This begins our implementation
28213         of parsing rules for unsafe code.
28214
28215         (unsafe_statement): Implement.
28216
28217         (embedded_statement): Modify to include the above.
28218
28219         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28220
28221         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28222         if the current context is an unsafe one.
28223
28224         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28225         are handled differently, we need separate rules for them.
28226
28227         (local_variable_declaration): Update to use local_variable_pointer_type
28228         to allow variable declarations of unmanaged pointer types.
28229
28230         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28231         in unsafe contexts.
28232
28233         * ../errors/cs0214.cs : Add.
28234
28235 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28236
28237         * makefile: remove 'response' file when cleaning.
28238
28239 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28240
28241         * cs-parser.jay: Report 1524.
28242
28243 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28244
28245         * typemanager.cs (RegisterMethod): drop checking if we have
28246         registered this from here
28247
28248 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
28249
28250         * class.cs (Method.EmitDestructor): Implement calling our base
28251         destructor. 
28252
28253         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
28254         value of InFinally.
28255
28256         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
28257         this routine and will wrap the call in a try/catch block.  Deal
28258         with the case.
28259
28260 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
28261
28262         * ecore.cs (Expression.MemberLookup): instead of taking a
28263         parameter `same_type' that was used to tell whether we could
28264         access private members we compute our containing type from the
28265         EmitContext.
28266
28267         (FieldExpr): Added partial support for volatile fields.  This does
28268         not work for volatile fields exposed from assemblies, as I can not
28269         figure out how to extract the modreq from it.
28270
28271         Updated all the source files to use this.
28272
28273         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
28274         because it is referenced by MemberLookup very often. 
28275
28276 2002-01-09  Ravi Pratap  <ravi@ximian.com>
28277
28278         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
28279         TypeBuilder.GetCustomAttributes to retrieve what we need.
28280
28281         Get rid of redundant default_member_attr_type as this is the same as
28282         default_member_type which already exists.
28283
28284         * interface.cs, attribute.cs : Update accordingly.
28285
28286 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
28287
28288         * typemanager.cs: Enable IndexerPropertyName again.  It does not
28289         work for TYpeBuilders though.  Ravi, can you please fix this?
28290
28291         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
28292
28293         * expression.cs (Argument.Emit): Handle the case of ref objects
28294         being passed to ref functions;  
28295
28296         (ParameterReference.EmitLoad): Loads the content of the pointer
28297         without dereferencing.
28298
28299 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28300
28301         * cs-tokenizer.cs: Implemented the pre-processing expressions.
28302
28303 2002-01-08  Ravi Pratap  <ravi@ximian.com>
28304
28305         * class.cs (Indexer.DefineMethod): Incorporate the interface
28306         type in the name of the method if we are doing explicit interface
28307         implementation.
28308
28309         * expression.cs (ConversionExists): Remove as it is completely obsolete.
28310
28311         (BetterConversion): Fix extremely trivial bug where we were referring to
28312         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
28313         again !
28314
28315         * ../errors/bug16.cs : Add although we have fixed it.
28316
28317 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
28318
28319         * expression.cs (BaseIndexer): Begin implementation.
28320
28321         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
28322
28323         * cs-parser.jay (indexer_declarator): Use qualified_identifier
28324         production directly to remove a shift/reduce, and implement
28325         explicit interface implementation.
28326
28327         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
28328         after a floating point suffix.
28329
28330         * expression.cs (DoNumericPromotions): Improved the conversion for
28331         uint/uint.  If we have a constant, we avoid doing a typecast to a
28332         larger type.
28333
28334         * class.cs (Indexer): Implement explicit interface implementation
28335         for indexers.
28336
28337 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
28338
28339         * class.cs: make the default instance constructor public and hidebysig.
28340
28341 2001-01-03  Ravi Pratap  <ravi@ximian.com>
28342
28343         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
28344         so we can call it from elsewhere.
28345
28346         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
28347         we emit it internally if the class has a defined indexer; otherwise the user
28348         emits it by decorating the class definition with the DefaultMemberAttribute.
28349
28350         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
28351         attribute is not used on a type which defines an indexer.
28352
28353         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
28354         character when we skip whitespace.
28355
28356         * ../errors/cs0646.cs : Add.
28357
28358 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
28359
28360         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
28361         again. 
28362
28363         * makefile: Add practical target `mcs3.exe' which builds the third
28364         generation compiler. 
28365
28366         * expression.cs (New): Fix structures constructor calling.
28367
28368         * class.cs (Property, Method, Indexer): Emit Final flag on the
28369         method if we are an interface implementation and we are not
28370         abstract. 
28371
28372         * ecore.cs (PropertyExpr): New public field `IsBase', tells
28373         whether this property is referencing a `base' method.
28374
28375         * expression.cs (Invocation.EmitCall): take an extra argument:
28376         is_base, this is used to determine whether the `call' or
28377         `callvirt' opcode should be used.
28378
28379
28380         * delegate.cs: update EmitCall.
28381
28382         * class.cs (Method.Define): Set NewSlot for the cases where we are
28383         not implementing an interface method.
28384
28385         (Property.Define): ditto.
28386
28387 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
28388
28389         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
28390         'r'.  Allows mcs to parse itself fully.
28391
28392 2002-01-02  Ravi Pratap  <ravi@ximian.com>
28393
28394         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
28395         of the number of initializers that require the InitializeArray method.
28396
28397         (CheckIndices): Store the Expression in all cases - not the plain value. Also
28398         update the above field where necessary.
28399
28400         (MakeByteBlob): Update accordingly.
28401
28402         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
28403         greater than 2.
28404
28405         (EmitDynamicInitializers): Update in accordance with the new optimization.
28406
28407         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
28408         same OpCode applies.
28409
28410         * cs-parser.jay : Fix some glaring errors I introduced.
28411
28412 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
28413
28414         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
28415         so that we can check for name clashes there too.
28416
28417         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
28418         for interface indexers.
28419
28420         * interfaces.cs (Define): Emit the default member attribute.
28421
28422         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
28423         variable was being referred to while setting the value ;-)
28424
28425 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
28426
28427         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
28428         byte-by-byte information when we know the data is zero.
28429
28430         Make the block always a multiple of 4, because
28431         DefineInitializedData has a bug.
28432
28433         * assign.cs: Fix, we should assign from the temporary, not from
28434         the source. 
28435
28436         * expression.cs (MakeByteBlob): Fix my incorrect code.
28437
28438 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
28439
28440         * typemanager.cs (EnumToUnderlying): This function is used to get
28441         the underlying type from an enumeration, because it does not
28442         always work. 
28443
28444         * constant.cs: Use the I4_S form for values between -128 and 127.
28445
28446         * statement.cs (Block.LookupLabel): Looks up a label.
28447         (Block): Drop support for labeled blocks.
28448
28449         (LabeledStatement): New kind of statement that represents a label
28450         only.
28451
28452         (Goto): Finally implement this bad boy.
28453
28454         * cs-parser.jay: Update to reflect new mechanism to implement
28455         labels.
28456
28457 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
28458
28459         * codegen.cs (EmitContext.This): a codegen property that keeps the
28460         a single instance of this instead of creating many different this
28461         instances. 
28462
28463         * delegate.cs (Delegate.DoResolve): Update to use the property;
28464
28465         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
28466
28467         * expression.cs (BaseAccess.DoResolve): Ditto.
28468
28469 2001-12-29  Ravi Pratap  <ravi@ximian.com>
28470
28471         * typemanager.cs (methodimpl_attr_type): Add to hold the type
28472         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
28473
28474         (InitCoreTypes): Update accordingly.
28475
28476         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
28477         so we can quickly store the state.
28478
28479         (ApplyAttributes): Set the correct implementation flags
28480         for InternalCall methods.
28481
28482 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
28483
28484         * expression.cs (EmitCall): if a method is not virtual, then do
28485         not use callvirt on it.
28486
28487         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
28488         user defined stuff) requires the use of stobj, which takes an
28489         address on the stack instead of an array and an index.  So emit
28490         the Ldelema operation for it.
28491
28492         (EmitStoreOpcode): Use stobj for valuetypes.
28493
28494         (UnaryMutator.EmitCode): Use the right 1 value depending on
28495         whether we are dealing with int64/uint64, float or doubles.
28496
28497         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
28498         constructors that I implemented last night.
28499
28500         (Constructor.IsDefault): Fix to work properly for static
28501         constructors.
28502
28503         * cs-parser.jay (CheckDef): report method signature errors.
28504         Update error number 103 to be 132.
28505
28506         * decl.cs: New AdditionResult enumeration value: MethodExists.
28507         Although we do this check for methods later on in the semantic
28508         analysis, catching repeated default constructors is so easy that
28509         we catch these here. 
28510
28511         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
28512         promotions code.
28513
28514         (ParameterReference.EmitAssign, Emit): handle
28515         bools as bytes.
28516
28517         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
28518         (ArrayAccess.EmitStoreOpcode): ditto.
28519
28520         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
28521
28522         * expression.cs (MakeByteBlob): Complete all the missing types
28523         (uint, short, ushort, byte, sbyte)
28524
28525         * class.cs: Only init instance field initializers on instance
28526         constructors. 
28527
28528         Rename `constructors' to instance_constructors. 
28529
28530         (TypeContainer.AddConstructor): Only add constructors to the list
28531         if it is not static.
28532
28533         Make sure that we handle default_static_constructor independently
28534         everywhere where we handle instance_constructors
28535
28536 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
28537
28538         * class.cs: Do not lookup or create a base initializer for a
28539         static constructor.
28540
28541         (ConstructorInitializer.Resolve): use the proper type to lookup
28542         for constructors.
28543
28544         * cs-parser.jay: Report error 1585 (modifiers between type and name).
28545
28546         * enum.cs, interface.cs: Remove CloseType, this is taken care by
28547         in DeclSpace. 
28548
28549         * decl.cs: CloseType is now an virtual method, the default
28550         implementation just closes this type.
28551
28552 2001-12-28  Ravi Pratap  <ravi@ximian.com>
28553
28554         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
28555         to PreserveSig by default. Also emit HideBySig on such methods.
28556
28557         Basically, set the defaults to standard values.
28558
28559         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
28560         argument, if candidate is better, it can't be worse than the best !
28561
28562         (Invocation): Re-write bits to differentiate between methods being
28563         applicable in their expanded form and their normal form - for params
28564         methods of course.
28565
28566         Get rid of use_standard everywhere as only standard conversions are allowed
28567         in overload resolution. 
28568
28569         More spec conformance.
28570
28571 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28572
28573         * driver.cs: Add --timestamp, to see where the compiler spends
28574         most of its time.
28575
28576         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
28577         `this' in static code.
28578
28579         (SimpleName.DoResolve): Implement in terms of a helper function
28580         that allows static-references to be passed upstream to
28581         MemberAccess.
28582
28583         (Expression.ResolveWithSimpleName): Resolve specially simple
28584         names when called by MemberAccess to implement the special
28585         semantics. 
28586
28587         (Expression.ImplicitReferenceConversion): Handle conversions from
28588         Null to reference types before others, as Null's type is
28589         System.Object. 
28590
28591         * expression.cs (Invocation.EmitCall): Handle the special case of
28592         calling methods declared on a reference type from a ValueType
28593         (Base classes System.Object and System.Enum)
28594
28595         (MemberAccess.Resolve): Only perform lookups on Enumerations if
28596         the left hand side is a TypeExpr, not on every enumeration. 
28597
28598         (Binary.Resolve): If types are reference types, then do a cast to
28599         object on operators != and == of both arguments.
28600
28601         * typemanager.cs (FindMembers): Extract instance and static
28602         members if requested.
28603
28604         * interface.cs (PopulateProperty): Use void_type instead of null
28605         as the return type for the setter method.
28606
28607         (PopulateIndexer): ditto.
28608
28609 2001-12-27  Ravi Pratap  <ravi@ximian.com>
28610
28611         * support.cs (ReflectionParameters): Fix minor bug where we
28612         were examining the wrong parameter for the ParamArray attribute.
28613
28614         Cope with requests for the type of the parameter at position
28615         greater than the params parameter's. We now return the element
28616         type of the params array as that makes more sense.
28617
28618         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
28619         accordingly as we no longer have to extract the element type
28620         ourselves.
28621
28622         (Invocation.OverloadResolve): Update.
28623
28624 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
28625
28626         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
28627         against IEnumerator, test whether the return value is a descendant
28628         of the IEnumerator interface.
28629
28630         * class.cs (Indexer.Define): Use an auxiliary method to implement
28631         the other bits of the method definition.  Begin support for
28632         explicit interface implementation.
28633
28634         (Property.DefineMethod): Use TypeManager.void_type instead of null
28635         for an empty return value.
28636
28637 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
28638
28639         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
28640         dealing with a FieldExpr which is composed of a FieldBuilder, in
28641         the code path we did extract the constant, but we should have
28642         obtained the underlying value to be able to cast it (otherwise we
28643         end up in an infinite loop, this is what Ravi was running into).
28644
28645         (ArrayCreation.UpdateIndices): Arrays might be empty.
28646
28647         (MemberAccess.ResolveMemberAccess): Add support for section
28648         14.5.4.1 that deals with the special case of E.I when E is a type
28649         and something else, that I can be a reference to a static member.
28650
28651         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
28652         handle a particular array type to create byte blobs, it is just
28653         something we dont generate byteblobs for.
28654
28655         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
28656         arguments. 
28657
28658         * location.cs (Push): remove the key from the hashtable that we
28659         are about to add.   This happens for empty files.
28660
28661         * driver.cs: Dispose files after we have parsed them.
28662
28663         (tokenize): new function that only runs the tokenizer on its
28664         input, for speed testing.
28665
28666 2001-12-26  Ravi Pratap  <ravi@ximian.com>
28667
28668         * class.cs (Event.Define): Define the private field only if there
28669         are no accessors defined.
28670
28671         * expression.cs (ResolveMemberAccess): If there is no associated
28672         field with the event, that means we have an event defined with its
28673         own accessors and we should flag error cs0070 since transforming
28674         ourselves into a field is not valid in that case.
28675
28676         * ecore.cs (SimpleName.DoResolve): Same as above.
28677
28678         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
28679         and charset to sane values.
28680
28681 2001-12-25  Ravi Pratap  <ravi@ximian.com>
28682
28683         * assign.cs (DoResolve): Perform check on events only if they 
28684         are being accessed outside the declaring type.
28685
28686         * cs-parser.jay (event_declarations): Update rules to correctly
28687         set the type of the implicit parameter etc.
28688
28689         (add_accessor, remove_accessor): Set current local parameters.
28690
28691         * expression.cs (Binary): For delegate addition and subtraction,
28692         cast the return value from the method into the appropriate delegate
28693         type.
28694
28695 2001-12-24  Ravi Pratap  <ravi@ximian.com>
28696
28697         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
28698         of these as the workaround is unnecessary.
28699
28700         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
28701         delegate data - none of that is needed at all.
28702
28703         Re-write bits to extract the instance expression and the delegate method
28704         correctly.
28705
28706         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
28707         on delegates too.
28708
28709         * attribute.cs (ApplyAttributes): New method to take care of common tasks
28710         of attaching attributes instead of duplicating code everywhere.
28711
28712         * everywhere : Update code to do attribute emission using the above method.
28713
28714 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28715
28716         * expression.cs (IsParamsMethodApplicable): if there are not
28717         parameters, return immediately.
28718
28719         * ecore.cs: The 0 literal can be implicity converted to an enum
28720         type. 
28721
28722         (SimpleName.DoResolve): First lookup the type, then lookup the
28723         members. 
28724
28725         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
28726         want to get its address.  If the InstanceExpression is not
28727         addressable, store the result in a temporary variable, then get
28728         the address of it.
28729
28730         * codegen.cs: Only display 219 errors on warning level or above. 
28731
28732         * expression.cs (ArrayAccess): Make it implement the
28733         IMemoryLocation interface.
28734
28735         (Binary.DoResolve): handle the operator == (object a, object b)
28736         and operator != (object a, object b) without incurring into a
28737         BoxedCast (because 5 != o should never be performed).
28738
28739         Handle binary enumerator operators.
28740
28741         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
28742         value type, otherwise use Ldelem_ref.
28743
28744         Use precomputed names;
28745
28746         (AddressOf): Implement address of
28747
28748         * cs-parser.jay (labeled_statement): Fix recursive block
28749         addition by reworking the production.
28750
28751         * expression.cs (New.DoEmit): New has a special case:
28752                 
28753                  If we are dealing with a ValueType, we have a few
28754                  situations to deal with:
28755                 
28756                     * The target of New is a ValueType variable, that is
28757                       easy, we just pass this as the variable reference
28758                 
28759                     * The target of New is being passed as an argument,
28760                       to a boxing operation or a function that takes a
28761                       ValueType.
28762                 
28763                       In this case, we need to create a temporary variable
28764                       that is the argument of New.
28765
28766
28767 2001-12-23  Ravi Pratap  <ravi@ximian.com>
28768
28769         * rootcontext.cs (LookupType): Check that current_type is not null before
28770         going about looking at nested types.
28771
28772         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
28773         not implement the IAssignMethod interface any more.
28774
28775         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
28776         where we tranform them into FieldExprs if they are being resolved from within
28777         the declaring type.
28778
28779         * ecore.cs (SimpleName.DoResolve): Do the same here.
28780
28781         * assign.cs (DoResolve, Emit): Clean up code considerably. 
28782
28783         * ../errors/bug10.cs : Add.
28784
28785         * ../errors/cs0070.cs : Add.
28786
28787         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
28788
28789         * assign.cs : Get rid of EventIsLocal everywhere.
28790
28791 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
28792
28793         * ecore.cs (ConvertIntLiteral): finished the implementation.
28794
28795         * statement.cs (SwitchLabel): Convert the value we are using as a
28796         key before looking up the table.
28797
28798 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28799
28800         * codegen.cs (EmitTopBlock): Require a Location argument now.
28801
28802         * cs-parser.jay (constructor_declarator): We need to setup
28803         current_local_parameters before we parse the
28804         opt_constructor_initializer, to allow the variables to be bound
28805         to the constructor arguments.
28806
28807         * rootcontext.cs (LookupType): First lookup nested classes in our
28808         class and our parents before we go looking outside our class.
28809
28810         * expression.cs (ConstantFold): Extract/debox the values at the
28811         beginnning. 
28812
28813         * rootcontext.cs (EmitCode): Resolve the constants first before we
28814         resolve the types.  This is not really needed, but it helps debugging.
28815
28816         * statement.cs: report location.
28817
28818         * cs-parser.jay: pass location to throw statement.
28819
28820         * driver.cs: Small bug fix.
28821
28822         * report.cs: Updated format to be 4-zero filled digits.
28823
28824 2001-12-22  Ravi Pratap  <ravi@ximian.com>
28825
28826         * expression.cs (CheckIndices): Fix minor bug where the wrong
28827         variable was being referred to ;-)
28828
28829         (DoEmit): Do not call EmitStaticInitializers when the 
28830         underlying type is System.Object.
28831
28832 2001-12-21  Ravi Pratap  <ravi@ximian.com>
28833
28834         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
28835         and do the usual workaround for SRE.
28836
28837         * class.cs (MyEventBuilder.EventType): New member to get at the type
28838         of the event, quickly.
28839
28840         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
28841
28842         * assign.cs (Assign.DoResolve): Handle the case when the target
28843         is an EventExpr and perform the necessary checks.
28844
28845         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
28846         interface.
28847
28848         (SimpleName.MemberStaticCheck): Include check for EventExpr.
28849
28850         (EventExpr): Set the type in the constructor itself since we 
28851         are meant to be born fully resolved.
28852
28853         (EventExpr.Define): Revert code I wrote earlier.
28854                 
28855         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
28856         instance expression is null. The instance expression is a This in that case
28857         or a null, depending on whether it is a static method or not.
28858
28859         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
28860         refers to more than one method.
28861
28862         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
28863         and accordingly flag errors.
28864
28865 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28866
28867         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
28868
28869 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
28870
28871         * location.cs (ToString): Provide useful rutine.
28872
28873 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
28874
28875         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
28876         objects, return the actual integral boxed.
28877
28878         * statement.cs (SwitchLabel): define an ILLabel for each
28879         SwitchLabel. 
28880
28881         (Switch.CheckSwitch): If the value is a Literal, extract
28882         the underlying literal.
28883
28884         Also in the unused hashtable we had, add the SwitchLabel so we can
28885         quickly look this value up.
28886
28887         * constant.cs: Implement a bunch of new constants.  Rewrite
28888         Literal based on this.  Made changes everywhere to adapt to this.
28889
28890         * expression.cs (Expression.MakeByteBlob): Optimize routine by
28891         dereferencing array only once, and also copes with enumrations.
28892
28893         bytes are two bytes wide, not one.
28894
28895         (Cast): Perform constant conversions.
28896
28897         * ecore.cs (TryImplicitIntConversion): Return literals instead of
28898         wrappers to the literals here.
28899
28900         * expression.cs (DoNumericPromotions): long literals can converted
28901         to ulong implicity (this is taken care of elsewhere, but I was
28902         missing this spot).
28903
28904         * ecore.cs (Expression.Literalize): Make the return type Literal,
28905         to improve type checking.
28906
28907         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
28908
28909 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28910
28911         * literal.cs: Revert code from ravi that checked the bounds.  The
28912         bounds are sane by the definition of the type itself. 
28913
28914         * typemanager.cs: Fix implementation of ImplementsInterface.  We
28915         need to actually look up in our parent hierarchy for interfaces
28916         implemented. 
28917
28918         * const.cs: Use the underlying type for enumerations
28919
28920         * delegate.cs: Compute the basename for the delegate creation,
28921         that should fix the delegate test case, and restore the correct
28922         Type Lookup semantics in rootcontext
28923
28924         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
28925         referencing a nested type with the Reflection API is using the "+"
28926         sign. 
28927
28928         * cs-parser.jay: Do not require EOF token at the end.
28929
28930 2001-12-20  Ravi Pratap  <ravi@ximian.com>
28931
28932         * rootcontext.cs (LookupType): Concatenate type names with
28933         a '.' instead of a '+' The test suite passes again.
28934
28935         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
28936         field of the enumeration.
28937
28938         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
28939         the case when the member is an EventExpr.
28940
28941         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
28942         static has an associated instance expression.
28943
28944         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
28945
28946         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
28947
28948         * class.cs (Event.Define): Register event and perform appropriate checks
28949         for error #111.
28950
28951         We define the Add and Remove methods even if the use provides none because
28952         in that case, we provide default implementations ourselves.
28953
28954         Define a private field of the type of the event. This is done by the CSC compiler
28955         and we should be doing it too ;-)
28956
28957         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
28958         More methods we use in code we generate.
28959
28960         (multicast_delegate_type, delegate_type): Two separate types since the distinction
28961         is important.
28962
28963         (InitCoreTypes): Update accordingly for the above.
28964
28965         * class.cs (Event.Emit): Generate code for default accessors that we provide
28966
28967         (EmitDefaultMethod): Do the job in the above.
28968
28969         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
28970         appropriate place.
28971
28972 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
28973
28974         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
28975         builders even if we were missing one.
28976
28977         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
28978         pass the Basename as our class name instead of the Name.  The
28979         basename will be correctly composed for us.
28980
28981         * parameter.cs (Paramters): Now takes a Location argument.
28982
28983         * decl.cs (DeclSpace.LookupType): Removed convenience function and
28984         make all the code call directly LookupType in RootContext and take
28985         this chance to pass the Location information everywhere.
28986
28987         * Everywhere: pass Location information.
28988
28989 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
28990
28991         * class.cs (Constructor.Define): Updated way of detecting the
28992         length of the parameters.
28993
28994         (TypeContainer.DefineType): Use basename as the type name for
28995         nested types.
28996
28997         (TypeContainer.Define): Do not recursively define types here, as
28998         definition is taken care in order by the RootContext.
28999
29000         * tree.cs: Keep track of namespaces in a per-file basis.
29001
29002         * parameter.cs (Parameter.ComputeSignature): Update to use
29003         DeclSpace. 
29004
29005         (Parameters.GetSignature): ditto.
29006
29007         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29008         instead of a TypeContainer.
29009
29010         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29011         resolve names.  Because we need to be resolve in our context, not
29012         our parents.
29013
29014         * driver.cs: Implement response files.
29015
29016         * class.cs (TypeContainer.DefineType): If we are defined, do not
29017         redefine ourselves.
29018
29019         (Event.Emit): Emit the code for add/remove handlers.
29020         (Event.Define): Save the MethodBuilders for add/remove.
29021
29022         * typemanager.cs: Use pair here too.
29023
29024         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29025         DictionaryEntry requires the first argument to be non-null.  
29026
29027         (enum_declaration): Compute full name for registering the
29028         enumeration.
29029
29030         (delegate_declaration): Instead of using
29031         formal_parameter_list, use opt_formal_parameter_list as the list
29032         can be empty.
29033
29034         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29035         (EventParsing): New property that controls whether `add' and
29036         `remove' are returned as tokens or identifiers (for events);
29037
29038 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29039
29040         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29041         use MyEventBuilder only and let it wrap the real builder for us.
29042
29043         (MyEventBuilder): Revamp constructor etc.
29044
29045         Implement all operations that we perform on EventBuilder in precisely the same
29046         way here too.
29047
29048         (FindMembers): Update to use the EventBuilder member.
29049
29050         (Event.Emit): Update accordingly.
29051
29052 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29053
29054         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29055         by calling the appropriate methods.
29056
29057         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29058         useful.
29059
29060         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29061
29062 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29063
29064         * delegate.cs (Delegate.Populate): Check that the return type
29065         and various parameters types are indeed accessible.
29066
29067         * class.cs (Constructor.Define): Same here.
29068
29069         (Field.Define): Ditto.
29070
29071         (Event.Define): Ditto.
29072
29073         (Operator.Define): Check that the underlying Method defined itself
29074         correctly - so it's MethodBuilder should not be null.
29075
29076         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29077         expression happens to be null.
29078
29079         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29080         members but as of now we don't seem to be able to do anything really useful with it.
29081
29082         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29083         not the EventBuilder.
29084
29085 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29086
29087         * cs-tokenizer.cs: Add support for defines.
29088         Add support for #if, #elif, #else, #endif
29089
29090         (eval_var): evaluates a variable.
29091         (eval): stubbed for evaluating functions.
29092
29093         * cs-parser.jay: Pass the defines information
29094
29095         * driver.cs: Add --define command line option.
29096
29097         * decl.cs: Move MemberCore here.
29098
29099         Make it the base class for DeclSpace.  This allows us to catch and
29100         report 108 and 109 for everything now.
29101
29102         * class.cs (TypeContainer.Define): Extract all the members
29103         before populating and emit the warning 108 (new keyword required
29104         to override) instead of having each member implement this.
29105
29106         (MemberCore.Define): New abstract method, we will be using this in
29107         the warning reporting engine in Populate.
29108
29109         (Operator.Define): Adjust to new MemberCore protocol. 
29110
29111         * const.cs (Const): This does not derive from Expression, it is a
29112         temporary object we use to create fields, it is a MemberCore. 
29113
29114         * class.cs (Method.Define): Allow the entry point to be in a
29115         specific class.
29116
29117         * driver.cs: Rewrite the argument handler to clean it up a bit.
29118
29119         * rootcontext.cs: Made it just an auxiliary namespace feature by
29120         making everything static.
29121
29122         * driver.cs: Adapt code to use RootContext type name instead of
29123         instance variable.
29124
29125         * delegate.cs: Remove RootContext argument.
29126
29127         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29128         argument. 
29129
29130         * class.cs (Event.Define): The lookup can fail.
29131
29132         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29133
29134         * expression.cs: Resolve the this instance before invoking the code.
29135
29136 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29137
29138         * cs-parser.jay: Add a production in element_access that allows
29139         the thing to become a "type" reference.  This way we can parse
29140         things like "(string [])" as a type.
29141
29142         Note that this still does not handle the more complex rules of
29143         casts. 
29144
29145
29146         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29147
29148         * ecore.cs: (CopyNewMethods): new utility function used to
29149         assemble the list of methods from running FindMembers.
29150
29151         (MemberLookup): Rework FindMembers so that 
29152
29153 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29154
29155         * class.cs (TypeContainer): Remove Delegates who fail to be
29156         defined.
29157
29158         * delegate.cs (Populate): Verify that we dont get null return
29159         values.   TODO: Check for AsAccessible.
29160
29161         * cs-parser.jay: Use basename to emit error 574 (destructor should
29162         have the same name as container class), not the full name.
29163
29164         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29165         possible representation.  
29166
29167         Also implements integer type suffixes U and L.
29168
29169 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29170
29171         * expression.cs (ArrayCreation.DoResolve): We need to do the
29172         argument resolution *always*.
29173
29174         * decl.cs: Make this hold the namespace.  Hold the root context as
29175         well.
29176         (LookupType): Move here.
29177
29178         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29179
29180         * location.cs (Row, Name): Fixed the code, it was always returning
29181         references to the first file.
29182
29183         * interface.cs: Register properties defined through interfaces.
29184
29185         * driver.cs: Add support for globbing on the command line
29186
29187         * class.cs (Field): Make it derive from MemberCore as well.
29188         (Event): ditto.
29189
29190 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29191
29192         * class.cs (Event::Define): Check that the type of the event is a delegate
29193         type else flag error #66.
29194
29195         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29196         same.
29197
29198         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29199         values of EntryPoint, CharSet etc etc.
29200
29201         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29202
29203         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29204         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29205         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29206         which needs this to do its work.
29207
29208         * ../errors/cs0066.cs : Add.
29209
29210 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29211
29212         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29213         helper functions.
29214
29215         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29216         clears out the parameters field.
29217         (MemberSignatureCompare): Cleanup
29218
29219         (MemberCore): New base class used to share code between MethodCore
29220         and Property.
29221
29222         (RegisterRequiredImplementations) BindingFlags.Public requires
29223         either BindingFlags.Instace or Static.  Use instance here.
29224
29225         (Property): Refactored code to cope better with the full spec.
29226
29227         * parameter.cs (GetParameterInfo): Return an empty array instead
29228         of null on error.
29229
29230         * class.cs (Property): Abstract or extern properties have no bodies.
29231
29232         * parameter.cs (GetParameterInfo): return a zero-sized array.
29233
29234         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29235         method modifier validation to the typecontainer so we can reuse
29236         this on properties.
29237
29238         (MethodCore.ParameterTypes): return an empty sized array of types.
29239
29240         (Property.Define): Test property modifier validity.
29241
29242         Add tests for sealed/override too.
29243
29244         (Method.Emit): abstract or extern methods have no bodies.
29245
29246 2001-12-14  Ravi Pratap  <ravi@ximian.com>
29247
29248         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
29249         thing.
29250
29251         (Method::Define, ::Emit): Modify accordingly.
29252
29253         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
29254
29255         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
29256
29257         * makefile: Pass in /unsafe.
29258
29259 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
29260
29261         * class.cs (MakeKey): Kill routine.
29262
29263         * class.cs (TypeContainer.Define): Correctly define explicit
29264         method implementations (they require the full interface name plus
29265         the method name).
29266
29267         * typemanager.cs: Deply the PtrHashtable here and stop using the
29268         lame keys.  Things work so much better.
29269
29270         This of course broke everyone who depended on `RegisterMethod' to
29271         do the `test for existance' test.  This has to be done elsewhere.
29272
29273         * support.cs (PtrHashtable): A hashtable that avoid comparing with
29274         the object stupid Equals method (because, that like fails all over
29275         the place).  We still do not use it.
29276
29277         * class.cs (TypeContainer.SetRequiredInterface,
29278         TypeContainer.RequireMethods): Killed these two routines and moved
29279         all the functionality to RegisterRequiredImplementations.
29280
29281         (TypeContainer.RegisterRequiredImplementations): This routine now
29282         registers all the implementations required in an array for the
29283         interfaces and abstract methods.  We use an array of structures
29284         which can be computed ahead of time to reduce memory usage and we
29285         also assume that lookups are cheap as most classes will not
29286         implement too many interfaces.
29287
29288         We also avoid creating too many MethodSignatures.
29289
29290         (TypeContainer.IsInterfaceMethod): Update and optionally does not
29291         clear the "pending" bit if we find that there are problems with
29292         the declaration.
29293
29294         (TypeContainer.VerifyPendingMethods): Update to report errors of
29295         methods that look like implementations but are not.
29296
29297         (TypeContainer.Define): Add support for explicit interface method
29298         implementation. 
29299
29300 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
29301
29302         * typemanager.cs: Keep track of the parameters here instead of
29303         being a feature of the TypeContainer.
29304
29305         * class.cs: Drop the registration of parameters here, as
29306         InterfaceMethods are also interface declarations.
29307
29308         * delegate.cs: Register methods with the TypeManager not only with
29309         the TypeContainer.  This code was buggy.
29310
29311         * interface.cs: Full registation here.
29312
29313 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
29314
29315         * expression.cs: Remove reducer for binary expressions, it can not
29316         be done this way.
29317
29318         * const.cs: Put here the code that used to go into constant.cs
29319
29320         * constant.cs: Put here the code for constants, this is a new base
29321         class for Literals.
29322
29323         * literal.cs: Make Literal derive from Constant.
29324
29325 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
29326
29327         * statement.cs (Return.Emit): Report error 157 if the user
29328         attempts to return from a finally block.
29329
29330         (Return.Emit): Instead of emitting a return, jump to the end of
29331         the function.
29332
29333         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
29334         LocalBuilder to store the result of the function.  ReturnLabel is
29335         the target where we jump.
29336
29337
29338 2001-12-09  Radek Doulik  <rodo@ximian.com>
29339
29340         * cs-parser.jay: remember alias in current namespace
29341
29342         * ecore.cs (SimpleName::DoResolve): use aliases for types or
29343         namespaces
29344
29345         * class.cs (LookupAlias): lookup alias in my_namespace
29346
29347         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
29348         aliases hashtable
29349         (LookupAlias): lookup alias in this and if needed in parent
29350         namespaces
29351
29352 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
29353
29354         * support.cs: 
29355
29356         * rootcontext.cs: (ModuleBuilder) Made static, first step into
29357         making things static.  I need this to avoid passing the
29358         TypeContainer when calling ParameterType.
29359
29360         * support.cs (InternalParameters.ParameterType): Remove ugly hack
29361         that did string manipulation to compute the type and then call
29362         GetType.  Use Parameter.ParameterType instead.
29363
29364         * cs-tokenizer.cs: Consume the suffix for floating values.
29365
29366         * expression.cs (ParameterReference): figure out whether this is a
29367         reference parameter or not.  Kill an extra variable by computing
29368         the arg_idx during emission.
29369
29370         * parameter.cs (Parameters.GetParameterInfo): New overloaded
29371         function that returns whether a parameter is an out/ref value or not.
29372
29373         (Parameter.ParameterType): The type of the parameter (base,
29374         without ref/out applied).
29375
29376         (Parameter.Resolve): Perform resolution here.
29377         (Parameter.ExternalType): The full type (with ref/out applied).
29378
29379         * statement.cs (Using.Emit, Using.EmitExpression): Implement
29380         support for expressions on the using statement.
29381
29382 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
29383
29384         * statement.cs (Using.EmitLocalVariableDecls): Split the
29385         localvariable handling of the using statement.
29386
29387         (Block.EmitMeta): Keep track of variable count across blocks.  We
29388         were reusing slots on separate branches of blocks.
29389
29390         (Try.Emit): Emit the general code block, we were not emitting it. 
29391
29392         Check the type of the declaration to be an IDisposable or
29393         something that can be implicity converted to it. 
29394
29395         Emit conversions if required.
29396
29397         * ecore.cs (EmptyExpression): New utility class.
29398         (Expression.ImplicitConversionExists): New utility function.
29399
29400 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
29401
29402         * statement.cs (Using): Implement.
29403
29404         * expression.cs (LocalVariableReference): Support read only variables.
29405
29406         * statement.cs: Remove the explicit emit for the Leave opcode.
29407         (VariableInfo): Add a readonly field.
29408
29409 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
29410
29411         * ecore.cs (ConvCast): new class used to encapsulate the various
29412         explicit integer conversions that works in both checked and
29413         unchecked contexts.
29414
29415         (Expression.ConvertNumericExplicit): Use new ConvCast class to
29416         properly generate the overflow opcodes.
29417
29418 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29419
29420         * statement.cs: The correct type for the EmptyExpression is the
29421         element_type, not the variable type.  Ravi pointed this out.
29422
29423 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29424
29425         * class.cs (Method::Define): Handle PInvoke methods specially
29426         by using DefinePInvokeMethod instead of the usual one.
29427
29428         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
29429         above to do the task of extracting information and defining the method.
29430
29431 2001-12-04  Ravi Pratap  <ravi@ximian.com>
29432
29433         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
29434         of the condition for string type.
29435
29436         (Emit): Move that here. 
29437
29438         (ArrayCreation::CheckIndices): Keep string literals in their expression
29439         form.
29440
29441         (EmitDynamicInitializers): Handle strings appropriately.
29442
29443 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
29444
29445         * codegen.cs (EmitContext): Replace multiple variables with a
29446         single pointer to the current Switch statement.
29447
29448         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
29449         EmitContext.
29450
29451 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29452
29453         * statement.cs 
29454
29455         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
29456         default'.
29457
29458         (Foreach.Emit): Foreach on arrays was not setting
29459         up the loop variables (for break/continue).
29460
29461         (GotoCase): Semi-implented.
29462
29463 2001-12-03  Ravi Pratap  <ravi@ximian.com>
29464
29465         * attribute.cs (CheckAttribute): Handle system attributes by using
29466         Attribute.GetAttributes to examine information we need.
29467
29468         (GetValidPlaces): Same here.
29469
29470         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
29471
29472         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
29473
29474         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
29475
29476         (Method::Define): Set appropriate flags if we have a DllImport attribute.
29477
29478         (Method::Emit): Handle the case when we are a PInvoke method.
29479
29480 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
29481
29482         * expression.cs: Use ResolveWithSimpleName on compound names.
29483
29484 2001-12-02  Ravi Pratap  <ravi@ximian.com>
29485
29486         * constant.cs (EmitConstant): Make sure we resolve the associated expression
29487         before trying to reduce it.
29488
29489         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
29490
29491         * constant.cs (LookupConstantValue): Implement.
29492
29493         (EmitConstant): Use the above in emitting the constant.
29494
29495         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
29496         that are user-defined by doing a LookupConstantValue on them.
29497
29498         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
29499         too, like above.
29500
29501 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
29502
29503         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
29504
29505         (BaseAccess.DoResolve): Implement.
29506
29507         (MemberAccess.DoResolve): Split this routine into a
29508         ResolveMemberAccess routine that can be used independently
29509
29510 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
29511
29512         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
29513         As that share bits of the implementation.  Is returns a boolean,
29514         while As returns the Type that is being probed.
29515
29516 2001-12-01  Ravi Pratap  <ravi@ximian.com>
29517
29518         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
29519         instead of a Literal - much easier.
29520
29521         (EnumInTransit): Remove - utterly useless :-)
29522
29523         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
29524
29525         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
29526
29527         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
29528         chain when we have no associated expression.
29529
29530 2001-11-30  Ravi Pratap  <ravi@ximian.com>
29531
29532         * constant.cs (Define): Use Location while reporting the errror.
29533
29534         Also emit a warning when 'new' is used and there is no inherited
29535         member to hide.
29536
29537         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
29538         populated.
29539
29540         (LookupEnumValue): Implement to lookup an enum member's value and define it
29541         if necessary.
29542
29543         (Populate): Re-write accordingly to use the above routine.
29544
29545 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
29546
29547         * expression.cs (This): Fix prototype for DoResolveLValue to
29548         override the base class DoResolveLValue.
29549
29550         * cs-parser.cs: Report errors cs574 and cs575 (destructor
29551         declarations) 
29552
29553         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
29554         (we need to load the address of the field here).  This fixes
29555         test-22. 
29556
29557         (FieldExpr.DoResolveLValue): Call the DoResolve
29558         function to initialize the Instance expression.
29559
29560         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
29561         correctly the GetEnumerator operation on a value type.
29562
29563         * cs-parser.jay: Add more simple parsing error catches.
29564
29565         * statement.cs (Switch): Add support for string switches.
29566         Handle null specially.
29567
29568         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
29569
29570 2001-11-28  Ravi Pratap  <ravi@ximian.com>
29571
29572         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
29573
29574         (declare_local_constant): New helper function.
29575
29576         * statement.cs (AddConstant): Keep a separate record of constants
29577
29578         (IsConstant): Implement to determine if a variable is a constant.
29579
29580         (GetConstantExpression): Implement.
29581
29582         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
29583
29584         * statement.cs (IsVariableDefined): Re-write.
29585
29586 2001-11-27  Ravi Pratap  <ravi@ximian.com>
29587
29588         * class.cs (TypeContainer::FindMembers): Look for constants
29589         in the case when we are looking for MemberTypes.Field
29590
29591         * expression.cs (MemberAccess::DoResolve): Check that in the
29592         case we are a FieldExpr and a Literal, we are not being accessed
29593         by an instance reference.
29594
29595         * cs-parser.jay (local_constant_declaration): Implement.
29596
29597         (declaration_statement): Implement for constant declarations.
29598
29599 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
29600
29601         * statement.cs (Switch): Catch double defaults.
29602
29603         (Switch): More work on the switch() statement
29604         implementation.  It works for integral values now, need to finish
29605         string support.
29606
29607
29608 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29609
29610         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
29611         integer literals into other integer literals.  To be used by
29612         switch. 
29613
29614 2001-11-24  Ravi Pratap  <ravi@ximian.com>
29615
29616         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
29617         some memory.
29618
29619         (EmitDynamicInitializers): Cope with the above since we extract data
29620         directly from ArrayData now.
29621
29622         (ExpectInitializers): Keep track of whether initializers are mandatory
29623         or not.
29624
29625         (Bounds): Make it a hashtable to prevent the same dimension being 
29626         recorded for every element in that dimension.
29627
29628         (EmitDynamicInitializers): Fix bug which prevented the Set array method
29629         from being found.
29630
29631         Also fix bug which was causing the indices to be emitted in the reverse
29632         order.
29633
29634 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
29635
29636         * expression.cs (ArrayCreation): Implement the bits that Ravi left
29637         unfinished.  They do not work, because the underlying code is
29638         sloppy.
29639
29640 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29641
29642         * cs-parser.jay: Remove bogus fixme.
29643
29644         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
29645         on Switch statement.
29646
29647 2001-11-23  Ravi Pratap  <ravi@ximian.com>
29648
29649         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
29650         the same. 
29651
29652         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
29653         parameter. Apparently, any expression is allowed. 
29654
29655         (ValidateInitializers): Update accordingly.
29656
29657         (CheckIndices): Fix some tricky bugs thanks to recursion.
29658
29659         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
29660         I was being completely brain-dead.
29661
29662         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
29663         and re-write acordingly.
29664
29665         (DelegateInvocation): Re-write accordingly.
29666
29667         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
29668
29669         (MakeByteBlob): Handle types more correctly.
29670
29671         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
29672         initialization from expressions but it is incomplete because I am a complete
29673         Dodo :-|
29674
29675 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29676
29677         * statement.cs (If.Emit): Fix a bug that generated incorrect code
29678         on If.  Basically, we have to return `true' (ie, we do return to
29679         our caller) only if both branches of the if return.
29680
29681         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
29682         short-circuit operators, handle them as short circuit operators. 
29683
29684         (Cast.DoResolve): Resolve type.
29685         (Cast.Cast): Take an expression as the target type.
29686
29687         * cs-parser.jay (cast_expression): Remove old hack that only
29688         allowed a limited set of types to be handled.  Now we take a
29689         unary_expression and we resolve to a type during semantic
29690         analysis.
29691
29692         Use the grammar productions from Rhys to handle casts (this is
29693         not complete like Rhys syntax yet, we fail to handle that corner
29694         case that C# has regarding (-x), but we will get there.
29695
29696 2001-11-22  Ravi Pratap  <ravi@ximian.com>
29697
29698         * class.cs (EmitFieldInitializer): Take care of the case when we have a
29699         field which is an array type.
29700
29701         * cs-parser.jay (declare_local_variables): Support array initialization too.
29702
29703         * typemanager.cs (MakeKey): Implement.
29704
29705         (everywhere): Use the above appropriately.
29706
29707         * cs-parser.jay (for_statement): Update for array initialization while
29708         declaring variables.
29709
29710         * ecore.cs : The error message was correct, it's the variable's names that
29711         were misleading ;-) Make the code more readable.
29712
29713         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
29714         the correct type etc.
29715
29716         (ConvertExplicit): Handle Enum types by examining the underlying type.
29717
29718 2001-11-21  Ravi Pratap  <ravi@ximian.com>
29719
29720         * parameter.cs (GetCallingConvention): Always return
29721         CallingConventions.Standard for now.
29722
29723 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
29724
29725         * expression.cs (Binary.ResolveOperator): Update the values of `l'
29726         and `r' after calling DoNumericPromotions.
29727
29728         * ecore.cs: Fix error message (the types were in the wrong order).
29729
29730         * statement.cs (Foreach.ProbeCollectionType): Need to pass
29731         BindingFlags.Instance as well 
29732
29733         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
29734         implicit int literal conversion in an empty cast so that we
29735         propagate the right type upstream.
29736
29737         (UnboxCast): new class used to unbox value types.
29738         (Expression.ConvertExplicit): Add explicit type conversions done
29739         by unboxing.
29740
29741         (Expression.ImplicitNumericConversion): Oops, forgot to test for
29742         the target type before applying the implicit LongLiterals to ULong
29743         literal cast.
29744
29745 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
29746
29747         * cs-parser.jay (for_statement): Reworked the way For works: now
29748         we declare manually any variables that are introduced in
29749         for_initializer to solve the problem of having out-of-band code
29750         emition (that is what got for broken).
29751
29752         (declaration_statement): Perform the actual variable declaration
29753         that used to be done in local_variable_declaration here.
29754
29755         (local_variable_declaration): Do not declare anything, just pass
29756         the information on a DictionaryEntry
29757
29758 2001-11-20  Ravi Pratap  <ravi@ximian.com>
29759
29760         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
29761         re-write of the logic to now make it recursive.
29762
29763         (UpdateIndices): Re-write accordingly.
29764
29765         Store element data in a separate ArrayData list in the above methods.
29766
29767         (MakeByteBlob): Implement to dump the array data into a byte array.
29768
29769 2001-11-19  Ravi Pratap  <ravi@ximian.com>
29770
29771         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
29772         into CheckIndices.
29773
29774         * constant.cs (Define): Implement.
29775
29776         (EmitConstant): Re-write fully.
29777
29778         Pass in location info.
29779
29780         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
29781         respectively.
29782
29783         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
29784         DictionaryEntry since we need location info too.
29785
29786         (constant_declaration): Update accordingly.
29787
29788         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
29789         code into another method : UpdateIndices.
29790
29791 2001-11-18  Ravi Pratap  <ravi@ximian.com>
29792
29793         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
29794         some type checking etc.
29795
29796 2001-11-17  Ravi Pratap  <ravi@ximian.com>
29797
29798         * expression.cs (ArrayCreation::ValidateInitializers): Implement
29799         bits to provide dimension info if the user skips doing that.
29800
29801         Update second constructor to store the rank correctly.
29802
29803 2001-11-16  Ravi Pratap  <ravi@ximian.com>
29804
29805         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
29806         and try to implement.
29807
29808         * ../errors/cs0150.cs : Add.
29809
29810         * ../errors/cs0178.cs : Add.
29811
29812 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
29813
29814         * statement.cs: Implement foreach on multi-dimensional arrays. 
29815
29816         * parameter.cs (Parameters.GetParameterByName): Also lookup the
29817         name of the params argument.
29818
29819         * expression.cs: Use EmitStoreOpcode to get the right opcode while
29820         initializing the array.
29821
29822         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
29823         we can use this elsewhere.
29824
29825         * statement.cs: Finish implementation of foreach for single
29826         dimension arrays.
29827
29828         * cs-parser.jay: Use an out-of-band stack to pass information
29829         around, I wonder why I need this.
29830
29831         foreach_block: Make the new foreach_block the current_block.
29832
29833         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
29834         function used to return a static Parameters structure.  Used for
29835         empty parameters, as those are created very frequently.
29836
29837         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
29838
29839 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29840
29841         * interface.cs : Default modifier is private, not public. The
29842         make verify test passes again.
29843
29844 2001-11-15  Ravi Pratap  <ravi@ximian.com>
29845
29846         * support.cs (ReflectionParameters): Fix logic to determine
29847         whether the last parameter is a params one. Test 9 passes again.
29848
29849         * delegate.cs (Populate): Register the builders we define with
29850         RegisterParameterForBuilder. Test 19 passes again.
29851
29852         * cs-parser.jay (property_declaration): Reference $6 instead
29853         of $$ to get at the location.
29854
29855         (indexer_declaration): Similar stuff.
29856
29857         (attribute): Ditto.
29858
29859         * class.cs (Property): Register parameters for the Get and Set methods
29860         if they exist. Test 23 passes again.
29861
29862         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
29863         call to EmitArguments as we are sure there aren't any params arguments. 
29864         Test 32 passes again.
29865
29866         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
29867         IndexOutOfRangeException. 
29868
29869         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
29870         Test 33 now passes again.
29871
29872 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
29873
29874         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
29875         broke a bunch of things.  Will have to come up with a better way
29876         of tracking locations.
29877
29878         * statement.cs: Implemented foreach for single dimension arrays.
29879
29880 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
29881
29882         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
29883         an error.  This removes the lookup from the critical path.
29884
29885         * cs-parser.jay: Removed use of temporary_loc, which is completely
29886         broken. 
29887
29888 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
29889
29890         * support.cs (ReflectionParameters.ParameterModifier): Report
29891         whether the argument is a PARAMS argument or not.
29892
29893         * class.cs: Set the attribute `ParamArrayAttribute' on the
29894         parameter argument.
29895
29896         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
29897         and cons_param_array_attribute (ConstructorInfo for
29898         ParamArrayAttribute)., 
29899
29900         * codegen.cs: Emit the return using the `Return' statement, that
29901         way we can report the error correctly for missing return values. 
29902
29903         * class.cs (Method.Emit): Clean up.
29904
29905         * expression.cs (Argument.Resolve): Take another argument: the
29906         location where this argument is used.  Notice that this is not
29907         part of the "Argument" class as to reduce the size of the
29908         structure (we know the approximate location anyways).
29909
29910         Test if the argument is a variable-reference, if not, then
29911         complain with a 206.
29912
29913         (Argument.Emit): Emit addresses of variables.
29914
29915         (Argument.FullDesc): Simplify.
29916
29917         (Invocation.DoResolve): Update for Argument.Resolve.
29918
29919         (ElementAccess.DoResolve): ditto.
29920
29921         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
29922         method should be virtual, as this method is always virtual.
29923
29924         (NewDelegate.DoResolve): Update for Argument.Resolve.
29925
29926         * class.cs (ConstructorInitializer.DoResolve): ditto.
29927
29928         * attribute.cs (Attribute.Resolve): ditto.
29929
29930 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
29931
29932         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
29933
29934         * expression.cs (ParameterReference): Drop IStackStorage and implement
29935         IAssignMethod instead. 
29936
29937         (LocalVariableReference): ditto.
29938
29939         * ecore.cs (FieldExpr): Drop IStackStorage and implement
29940         IAssignMethod instead. 
29941
29942 2001-11-13  Miguel de Icaza <miguel@ximian.com>
29943
29944         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
29945         enumerations that are used in heavily used structures derive from
29946         byte in a laughable and pathetic attempt to reduce memory usage.
29947         This is the kind of pre-optimzations that you should not do at
29948         home without adult supervision.
29949
29950         * expression.cs (UnaryMutator): New class, used to handle ++ and
29951         -- separatedly from the other unary operators.  Cleans up the
29952         code, and kills the ExpressionStatement dependency in Unary.
29953
29954         (Unary): Removed `method' and `Arguments' from this class, making
29955         it smaller, and moving it all to SimpleCall, so I can reuse this
29956         code in other locations and avoid creating a lot of transient data
29957         strucutres when not required.
29958
29959         * cs-parser.jay: Adjust for new changes.
29960
29961 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
29962
29963         * enum.cs (Enum.Populate): If there is a failure during
29964         definition, return
29965
29966         * cs-parser.jay (opt_enum_base): we used to catch type errors
29967         here, but this is really incorrect.  The type error should be
29968         catched during semantic analysis.
29969
29970 2001-12-11  Ravi Pratap  <ravi@ximian.com>
29971
29972         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
29973         current_local_parameters as expected since I, in my stupidity, had forgotten
29974         to do this :-)
29975
29976         * attribute.cs (GetValidPlaces): Fix stupid bug.
29977
29978         * class.cs (Method::Emit): Perform check on applicability of attributes.
29979
29980         (Constructor::Emit): Ditto.
29981
29982         (Field::Emit): Ditto.
29983
29984         (Field.Location): Store location information.
29985
29986         (Property, Event, Indexer, Operator): Ditto.
29987
29988         * cs-parser.jay (field_declaration): Pass in location for each field.
29989
29990         * ../errors/cs0592.cs : Add.
29991
29992 2001-11-12  Ravi Pratap  <ravi@ximian.com>
29993
29994         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
29995
29996         (InitCoreTypes): Update accordingly.
29997
29998         (RegisterAttrType, LookupAttr): Implement.
29999
30000         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30001         info about the same.
30002
30003         (Resolve): Update to populate the above as necessary.
30004
30005         (Error592): Helper.
30006
30007         (GetValidPlaces): Helper to the above.
30008
30009         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30010
30011         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30012
30013 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30014
30015         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30016
30017         * ../errors/cs0617.cs : Add.
30018
30019 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30020
30021         * enum.cs (Emit): Rename to Populate to be more consistent with what
30022         we expect it to do and when exactly it is called.
30023
30024         * class.cs, rootcontext.cs : Update accordingly.
30025
30026         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30027         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30028
30029         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30030
30031         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30032         of a fieldinfo using the above, when dealing with a FieldBuilder.
30033
30034 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30035
30036         * ../errors/cs0031.cs : Add.
30037
30038         * ../errors/cs1008.cs : Add.
30039
30040         * ../errrors/cs0543.cs : Add.
30041
30042         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30043         enum type.
30044
30045         (FindMembers): Implement.
30046
30047         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30048         enums and delegates too.
30049
30050         (enum_types): Rename to builder_to_enum.
30051
30052         (delegate_types): Rename to builder_to_delegate.
30053
30054         * delegate.cs (FindMembers): Implement.
30055
30056 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30057
30058         * typemanager.cs (IsEnumType): Implement.
30059
30060         * enum.cs (Emit): Re-write parts to account for the underlying type
30061         better and perform checking etc.
30062
30063         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30064         of the underlying type.
30065
30066         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30067         value
30068
30069         * enum.cs (error31): Helper to report error #31.
30070
30071         * cs-parser.jay (enum_declaration): Store location of each member too.
30072
30073         * enum.cs (member_to_location): New hashtable. 
30074
30075         (AddEnumMember): Update location hashtable.
30076
30077         (Emit): Use the location of each member while reporting errors.
30078
30079 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30080
30081         * cs-parser.jay: A for_initializer if is a
30082         local_variable_declaration really ammount to have an implicit
30083         block with the variable declaration and no initializer for for.
30084
30085         * statement.cs (For.Emit): Cope with null initializers.
30086
30087         This fixes the infinite loop on for initializers.
30088
30089 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30090
30091         * enum.cs: More cleanup.
30092
30093         * ecore.cs: Remove dead code.
30094
30095         * class.cs (Property.Emit): More simplification.
30096         (Event.Emit): ditto.
30097
30098         Reworked to have less levels of indentation.
30099
30100 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30101
30102         * class.cs (Property): Emit attributes.
30103
30104         (Field): Ditto.
30105
30106         (Event): Ditto.
30107
30108         (Indexer): Ditto.
30109
30110         (Operator): Ditto.
30111
30112         * enum.cs (Emit): Ditto.
30113
30114         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30115         Enums too.
30116
30117         * class.cs (Field, Event, etc.): Move attribute generation into the
30118         Emit method everywhere.
30119
30120         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30121         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30122         as we had no way of defining nested enums !
30123
30124         * rootcontext.cs : Adjust code accordingly.
30125
30126         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30127
30128 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30129
30130         * expression.cs (EvalConstantExpression): Move into ecore.cs
30131
30132         * enum.cs (Enum): Rename some members and make them public and readonly
30133         according to our convention.
30134
30135         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30136         nothing else.
30137
30138         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30139
30140         (Enum::Emit): Write a simple version for now which doesn't try to compute
30141         expressions. I shall modify this to be more robust in just a while.
30142
30143         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30144
30145         (TypeContainer::CloseType): Create the Enum types too.
30146
30147         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30148
30149         * expression.cs (EvalConstantExpression): Get rid of completely.
30150
30151         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30152         user-defined values and other cases.
30153
30154         (IsValidEnumLiteral): Helper function.
30155
30156         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30157         out there in the case we had a literal FieldExpr.
30158
30159         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30160
30161         (Literalize): Revamp a bit to take two arguments.
30162
30163         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30164
30165 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30166
30167         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30168
30169         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30170
30171         (Resolve): Use the above to ensure we have proper initializers.
30172
30173 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30174
30175         * expression.cs (Expression::EvalConstantExpression): New method to 
30176         evaluate constant expressions.
30177
30178         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30179
30180 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30181
30182         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30183         in an array.
30184
30185         (Binary.ResolveOperator): Handle operator != (object a, object b)
30186         and operator == (object a, object b);
30187
30188         (Binary.DoNumericPromotions): Indicate whether the numeric
30189         promotion was possible.
30190
30191         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30192         Implement.  
30193
30194         Made the ArrayAccess implement interface IAssignMethod instead of
30195         IStackStore as the order in which arguments are passed reflects
30196         this.
30197
30198         * assign.cs: Instead of using expr.ExprClass to select the way of
30199         assinging, probe for the IStackStore/IAssignMethod interfaces.
30200
30201         * typemanager.cs: Load InitializeArray definition.
30202
30203         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30204         static data that can be used to initialize arrays. 
30205
30206 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30207
30208         * expression.cs: Handle operator== and operator!= for booleans.
30209
30210         (Conditioal.Reduce): Implement reducer for the ?: operator.
30211
30212         (Conditional.Resolve): Implement dead code elimination.
30213
30214         (Binary.Resolve): Catch string literals and return a new
30215         concatenated string.
30216
30217         (Unary.Reduce): Implement reduction of unary expressions.
30218
30219         * ecore.cs: Split out the expression core handling here.
30220
30221         (Expression.Reduce): New method used to perform constant folding
30222         and CSE.  This is needed to support constant-expressions. 
30223
30224         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30225         targets, and optimize for !x.
30226
30227 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30228
30229         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30230         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30231         set custom atttributes.
30232
30233         * literal.cs (Literal::GetValue): New abstract method to return the actual
30234         value of the literal, cast as an object.
30235
30236         (*Literal): Implement GetValue method.
30237
30238         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30239         expressions to the arraylist but objects of type Argument.
30240
30241         * class.cs (TypeContainer::Emit): Emit our attributes too.
30242
30243         (Method::Emit, Constructor::Emit): Ditto.
30244
30245         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
30246         to be ignoring earlier.
30247
30248 2001-11-03  Ravi Pratap  <ravi@ximian.com>
30249
30250         * attribute.cs (AttributeSection::Define): Implement to do the business
30251         of constructing a CustomAttributeBuilder.
30252
30253         (Attribute): New trivial class. Increases readability of code.  
30254
30255         * cs-parser.jay : Update accordingly.
30256
30257         (positional_argument_list, named_argument_list, named_argument): New rules
30258
30259         (attribute_arguments): Use the above so that we are more correct.
30260
30261 2001-11-02  Ravi Pratap  <ravi@ximian.com>
30262
30263         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
30264         to perform all checks for a method with a params parameter.
30265
30266         (Invocation::OverloadResolve): Update to use the above method and therefore
30267         cope correctly with params method invocations.
30268
30269         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
30270         params too.
30271
30272         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
30273         constructors in our parent too because we can't afford to miss out on 
30274         protected ones ;-)
30275
30276         * attribute.cs (AttributeSection): New name for the class Attribute
30277
30278         Other trivial changes to improve readability.
30279
30280         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
30281         use the new class names.
30282
30283 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30284
30285         * class.cs (Method::Define): Complete definition for params types too
30286
30287         (Indexer::Define): Ditto.
30288
30289         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
30290         Cope everywhere with a request for info about the array parameter.
30291
30292 2001-11-01  Ravi Pratap  <ravi@ximian.com>
30293
30294         * tree.cs (RecordNamespace): Fix up to check for the correct key.
30295
30296         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
30297         local_variable_type to extract the string corresponding to the type.
30298
30299         (local_variable_type): Fixup the action to use the new helper method.
30300
30301         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
30302         go.
30303
30304         * expression.cs : Clean out code which uses the above.
30305
30306 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30307
30308         * typemanager.cs (RegisterMethod): Check if we already have an existing key
30309         and bale out if necessary by returning a false.
30310
30311         (RegisterProperty): Ditto.
30312
30313         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
30314         and print out appropriate error messages.
30315
30316         * interface.cs (everywhere): Ditto.
30317
30318         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
30319         location to constructor.
30320
30321         * class.cs (Property, Event, Indexer): Update accordingly.
30322
30323         * ../errors/cs111.cs : Added.
30324
30325         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
30326         of a method, as laid down by the spec.
30327
30328         (Invocation::OverloadResolve): Use the above method.
30329
30330 2001-10-31  Ravi Pratap  <ravi@ximian.com>
30331
30332         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
30333         now take a TypeContainer and a Parameters object.
30334
30335         (ParameterData): Modify return type of ParameterModifier method to be 
30336         Parameter.Modifier and not a string.
30337
30338         (ReflectionParameters, InternalParameters): Update accordingly.
30339
30340         * expression.cs (Argument::GetParameterModifier): Same here.
30341
30342         * support.cs (InternalParameters::ParameterType): Find a better way of determining
30343         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
30344         symbol in it at all so maybe this is only for now.
30345
30346 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30347
30348         * support.cs (InternalParameters): Constructor now takes an extra argument 
30349         which is the actual Parameters class.
30350
30351         (ParameterDesc): Update to provide info on ref/out modifiers.
30352
30353         * class.cs (everywhere): Update call to InternalParameters to pass in
30354         the second argument too.
30355
30356         * support.cs (ParameterData): Add ParameterModifier, which is a method 
30357         to return the modifier info [ref/out etc]
30358
30359         (InternalParameters, ReflectionParameters): Implement the above.
30360
30361         * expression.cs (Argument::ParameterModifier): Similar function to return
30362         info about the argument's modifiers.
30363
30364         (Invocation::OverloadResolve): Update to take into account matching modifiers 
30365         too.
30366
30367         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
30368         a new SetFormalParameters object which we pass to InternalParameters.
30369
30370 2001-10-30  Ravi Pratap  <ravi@ximian.com>
30371
30372         * expression.cs (NewArray): Merge into the ArrayCreation class.
30373
30374 2001-10-29  Ravi Pratap  <ravi@ximian.com>
30375
30376         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
30377         NewUserdefinedArray into one as there wasn't much of a use in having
30378         two separate ones.
30379
30380         * expression.cs (Argument): Change field's name to ArgType from Type.
30381
30382         (Type): New readonly property which returns the proper type, taking into 
30383         account ref/out modifiers.
30384
30385         (everywhere): Adjust code accordingly for the above.
30386
30387         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
30388         whether we are emitting for a ref or out parameter.
30389
30390         * expression.cs (Argument::Emit): Use the above field to set the state.
30391
30392         (LocalVariableReference::Emit): Update to honour the flag and emit the
30393         right stuff.
30394
30395         * parameter.cs (Attributes): Set the correct flags for ref parameters.
30396
30397         * expression.cs (Argument::FullDesc): New function to provide a full desc.
30398
30399         * support.cs (ParameterData): Add method ParameterDesc to the interface.
30400
30401         (ReflectionParameters, InternalParameters): Implement the above method.
30402
30403         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
30404         reporting errors.
30405
30406         (Invocation::FullMethodDesc): Ditto. 
30407
30408 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
30409
30410         * cs-parser.jay: Add extra production for the second form of array
30411         creation. 
30412
30413         * expression.cs (ArrayCreation): Update to reflect the above
30414         change. 
30415
30416         * Small changes to prepare for Array initialization.
30417
30418 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
30419
30420         * typemanager.cs (ImplementsInterface): interface might be null;
30421         Deal with this problem;
30422
30423         Also, we do store negative hits on the cache (null values), so use
30424         this instead of calling t.GetInterfaces on the type everytime.
30425
30426 2001-10-28  Ravi Pratap  <ravi@ximian.com>
30427
30428         * typemanager.cs (IsBuiltinType): New method to help determine the same.
30429
30430         * expression.cs (New::DoResolve): Get rid of array creation code and instead
30431         split functionality out into different classes.
30432
30433         (New::FormArrayType): Move into NewBuiltinArray.
30434
30435         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
30436         quite useless.
30437
30438         (NewBuiltinArray): New class to handle creation of built-in arrays.
30439
30440         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
30441         account creation of one-dimensional arrays.
30442
30443         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
30444
30445         (NewUserdefinedArray::DoResolve): Implement.
30446
30447         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
30448
30449         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
30450         we maintain inside the TypeManager. This is necessary to perform lookups on the
30451         module builder.
30452
30453         (LookupType): Update to perform GetType on the module builders too.     
30454
30455         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
30456
30457         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
30458
30459 2001-10-23  Ravi Pratap  <ravi@ximian.com>
30460
30461         * expression.cs (New::DoResolve): Implement guts of array creation.
30462
30463         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
30464
30465 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
30466
30467         * expression.cs: Fix bug I introduced lsat night that broke
30468         Delegates. 
30469
30470         (Expression.Resolve): Report a 246 error (can not resolve name)
30471         if we find a SimpleName in the stream.
30472
30473         (Expression.ResolveLValue): Ditto.
30474
30475         (Expression.ResolveWithSimpleName): This function is a variant of
30476         ResolveName, this one allows SimpleNames to be returned without a
30477         warning.  The only consumer of SimpleNames is MemberAccess
30478
30479 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
30480
30481         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
30482         might arrive here.  I have my doubts that this is correct.
30483
30484         * statement.cs (Lock): Implement lock statement.
30485
30486         * cs-parser.jay: Small fixes to support `lock' and `using'
30487
30488         * cs-tokenizer.cs: Remove extra space
30489
30490         * driver.cs: New flag --checked, allows to turn on integer math
30491         checking. 
30492
30493         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
30494         Threading.Monitor.Exit 
30495
30496 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
30497
30498         * expression.cs (IndexerAccess::DoResolveLValue): Set the
30499         Expression Class to be IndexerAccess.
30500
30501         Notice that Indexer::DoResolve sets the eclass to Value.
30502
30503 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
30504
30505         * class.cs (TypeContainer::Emit): Emit code for indexers.
30506
30507         * assign.cs (IAssignMethod): New interface implemented by Indexers
30508         and Properties for handling assignment.
30509
30510         (Assign::Emit): Simplify and reuse code. 
30511
30512         * expression.cs (IndexerAccess, PropertyExpr): Implement
30513         IAssignMethod, clean up old code. 
30514
30515 2001-10-22  Ravi Pratap  <ravi@ximian.com>
30516
30517         * typemanager.cs (ImplementsInterface): New method to determine if a type
30518         implements a given interface. Provides a nice cache too.
30519
30520         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
30521         method.
30522
30523         (ConvertReferenceExplicit): Ditto.
30524
30525         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
30526         various methods, with correct names etc.
30527
30528         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
30529         Operator.UnaryNegation.
30530
30531         * cs-parser.jay (operator_declarator): Be a little clever in the case where
30532         we have a unary plus or minus operator.
30533
30534         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
30535         UnaryMinus.
30536
30537         * everywhere : update accordingly.
30538
30539         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
30540         respectively.
30541
30542         * class.cs (Method::Define): For the case where we are implementing a method
30543         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
30544         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
30545
30546 2001-10-21  Ravi Pratap  <ravi@ximian.com>
30547
30548         * interface.cs (FindMembers): Implement to work around S.R.E
30549         lameness.
30550
30551         * typemanager.cs (IsInterfaceType): Implement.
30552
30553         (FindMembers): Update to handle interface types too.
30554
30555         * expression.cs (ImplicitReferenceConversion): Re-write bits which
30556         use IsAssignableFrom as that is not correct - it doesn't work.
30557
30558         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
30559         and accordingly override EmitStatement.
30560
30561         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
30562         using the correct logic :-)
30563
30564 2001-10-19  Ravi Pratap  <ravi@ximian.com>
30565
30566         * ../errors/cs-11.cs : Add to demonstrate error -11 
30567
30568 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
30569
30570         * assign.cs (Assign::Resolve): Resolve right hand side first, and
30571         then pass this as a hint to ResolveLValue.
30572
30573         * expression.cs (FieldExpr): Add Location information
30574
30575         (FieldExpr::LValueResolve): Report assignment to readonly
30576         variable. 
30577
30578         (Expression::ExprClassFromMemberInfo): Pass location information.
30579
30580         (Expression::ResolveLValue): Add new method that resolves an
30581         LValue. 
30582
30583         (Expression::DoResolveLValue): Default invocation calls
30584         DoResolve. 
30585
30586         (Indexers): New class used to keep track of indexers in a given
30587         Type. 
30588
30589         (IStackStore): Renamed from LValue, as it did not really describe
30590         what this did.  Also ResolveLValue is gone from this interface and
30591         now is part of Expression.
30592
30593         (ElementAccess): Depending on the element access type
30594
30595         * typemanager.cs: Add `indexer_name_type' as a Core type
30596         (System.Runtime.CompilerServices.IndexerNameAttribute)
30597
30598         * statement.cs (Goto): Take a location.
30599
30600 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30601
30602         * delegate.cs (Delegate::VerifyDelegate): New method to verify
30603         if two delegates are compatible.
30604
30605         (NewDelegate::DoResolve): Update to take care of the case when
30606         we instantiate a delegate from another delegate.
30607
30608         * typemanager.cs (FindMembers): Don't even try to look up members
30609         of Delegate types for now.
30610
30611 2001-10-18  Ravi Pratap  <ravi@ximian.com>
30612
30613         * delegate.cs (NewDelegate): New class to take care of delegate
30614         instantiation.
30615
30616         * expression.cs (New): Split the delegate related code out into 
30617         the NewDelegate class.
30618
30619         * delegate.cs (DelegateInvocation): New class to handle delegate 
30620         invocation.
30621
30622         * expression.cs (Invocation): Split out delegate related code into
30623         the DelegateInvocation class.
30624
30625 2001-10-17  Ravi Pratap  <ravi@ximian.com>
30626
30627         * expression.cs (New::DoResolve): Implement delegate creation fully
30628         and according to the spec.
30629
30630         (New::DoEmit): Update to handle delegates differently.
30631
30632         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
30633         because of which we were printing out arguments in reverse order !
30634
30635         * delegate.cs (VerifyMethod): Implement to check if the given method
30636         matches the delegate.
30637
30638         (FullDelegateDesc): Implement.
30639
30640         (VerifyApplicability): Implement.
30641
30642         * expression.cs (Invocation::DoResolve): Update to accordingly handle
30643         delegate invocations too.
30644
30645         (Invocation::Emit): Ditto.
30646
30647         * ../errors/cs1593.cs : Added.
30648
30649         * ../errors/cs1594.cs : Added.
30650
30651         * delegate.cs (InstanceExpression, TargetMethod): New properties.
30652
30653 2001-10-16  Ravi Pratap  <ravi@ximian.com>
30654
30655         * typemanager.cs (intptr_type): Core type for System.IntPtr
30656
30657         (InitCoreTypes): Update for the same.
30658
30659         (iasyncresult_type, asynccallback_type): Ditto.
30660
30661         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
30662         correct.
30663
30664         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
30665         too.
30666
30667         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
30668         the builders for the 4 members of a delegate type :-)
30669
30670         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
30671         type.
30672
30673         * expression.cs (New::DoResolve): Implement guts for delegate creation.
30674
30675         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
30676
30677 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
30678
30679         * statement.cs (Break::Emit): Implement.   
30680         (Continue::Emit): Implement.
30681
30682         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30683         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30684         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
30685         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
30686         end loop
30687
30688         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
30689         properties that track the label for the current loop (begin of the
30690         loop and end of the loop).
30691
30692 2001-10-15  Ravi Pratap  <ravi@ximian.com>
30693
30694         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
30695         use of emitting anything at all.
30696
30697         * class.cs, rootcontext.cs : Get rid of calls to the same.
30698
30699         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
30700
30701         (Populate): Define the constructor correctly and set the implementation
30702         attributes.
30703
30704         * typemanager.cs (delegate_types): New hashtable to hold delegates that
30705         have been defined.
30706
30707         (AddDelegateType): Implement.
30708
30709         (IsDelegateType): Implement helper method.
30710
30711         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
30712
30713         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
30714         and accordingly handle it.
30715
30716         * delegate.cs (Populate): Take TypeContainer argument.
30717         Implement bits to define the Invoke method. However, I still haven't figured out
30718         how to take care of the native int bit :-(
30719
30720         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
30721         Qualify the name of the delegate, not its return type !
30722
30723         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
30724         conversion.
30725
30726         (StandardConversionExists): Checking for array types turns out to be recursive.
30727
30728         (ConvertReferenceExplicit): Implement array conversion.
30729
30730         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
30731
30732 2001-10-12  Ravi Pratap  <ravi@ximian.com>
30733
30734         * cs-parser.jay (delegate_declaration): Store the fully qualified
30735         name as it is a type declaration.
30736
30737         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
30738         readonly.
30739
30740         (DefineDelegate): Renamed from Define. Does the same thing essentially,
30741         as TypeContainer::DefineType.
30742
30743         (Populate): Method in which all the definition of the various methods (Invoke)
30744         etc is done.
30745
30746         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
30747         see.
30748
30749         (CloseDelegate): Finally creates the delegate.
30750
30751         * class.cs (TypeContainer::DefineType): Update to define delegates.
30752         (Populate, Emit and CloseType): Do the same thing here too.
30753
30754         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
30755         delegates in all these operations.
30756
30757 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
30758
30759         * expression.cs: LocalTemporary: a new expression used to
30760         reference a temporary that has been created.
30761
30762         * assign.cs: Handle PropertyAccess back here, so that we can
30763         provide the proper semantic access to properties.
30764
30765         * expression.cs (Expression::ConvertReferenceExplicit): Implement
30766         a few more explicit conversions. 
30767
30768         * modifiers.cs: `NEW' modifier maps to HideBySig.
30769
30770         * expression.cs (PropertyExpr): Make this into an
30771         ExpressionStatement, and support the EmitStatement code path. 
30772
30773         Perform get/set error checking, clean up the interface.
30774
30775         * assign.cs: recognize PropertyExprs as targets, and if so, turn
30776         them into toplevel access objects.
30777
30778 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
30779
30780         * expression.cs: PropertyExpr::PropertyExpr: use work around the
30781         SRE.
30782
30783         * typemanager.cs: Keep track here of our PropertyBuilders again to
30784         work around lameness in SRE.
30785
30786 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
30787
30788         * expression.cs (LValue::LValueResolve): New method in the
30789         interface, used to perform a second resolution pass for LValues. 
30790
30791         (This::DoResolve): Catch the use of this in static methods.
30792
30793         (This::LValueResolve): Implement.
30794
30795         (This::Store): Remove warning, assigning to `this' in structures
30796         is 
30797
30798         (Invocation::Emit): Deal with invocation of
30799         methods on value types.  We need to pass the address to structure
30800         methods rather than the object itself.  (The equivalent code to
30801         emit "this" for structures leaves the entire structure on the
30802         stack instead of a pointer to it). 
30803
30804         (ParameterReference::DoResolve): Compute the real index for the
30805         argument based on whether the method takes or not a `this' pointer
30806         (ie, the method is static).
30807
30808         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
30809         value types returned from functions when we need to invoke a
30810         method on the sturcture.
30811
30812
30813 2001-10-11  Ravi Pratap  <ravi@ximian.com>
30814
30815         * class.cs (TypeContainer::DefineType): Method to actually do the business of
30816         defining the type in the Modulebuilder or Typebuilder. This is to take
30817         care of nested types which need to be defined on the TypeBuilder using
30818         DefineNestedMethod.
30819
30820         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
30821         methods in RootContext, only ported to be part of TypeContainer.
30822
30823         (TypeContainer::GetInterfaceOrClass): Ditto.
30824
30825         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
30826
30827         * interface.cs (Interface::DefineInterface): New method. Does exactly
30828         what RootContext.CreateInterface did earlier, only it takes care of nested types 
30829         too.
30830
30831         (Interface::GetInterfaces): Move from RootContext here and port.
30832
30833         (Interface::GetInterfaceByName): Same here.
30834
30835         * rootcontext.cs (ResolveTree): Re-write.
30836
30837         (PopulateTypes): Re-write.
30838
30839         * class.cs (TypeContainer::Populate): Populate nested types too.
30840         (TypeContainer::Emit): Emit nested members too.
30841
30842         * typemanager.cs (AddUserType): Do not make use of the FullName property,
30843         instead just use the name argument passed in as it is already fully
30844         qualified.
30845
30846         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
30847         to TypeContainer mapping to see if a type is user-defined.
30848
30849         * class.cs (TypeContainer::CloseType): Implement. 
30850
30851         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
30852         the default constructor.
30853
30854         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
30855         twice.
30856
30857         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
30858
30859         * interface.cs (CloseType): Create the type here.
30860
30861         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
30862         the hierarchy.
30863
30864         Remove all the methods which are now in TypeContainer.
30865
30866 2001-10-10  Ravi Pratap  <ravi@ximian.com>
30867
30868         * delegate.cs (Define): Re-write bits to define the delegate
30869         correctly.
30870
30871 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
30872
30873         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
30874
30875         * expression.cs (ImplicitReferenceConversion): handle null as well
30876         as a source to convert to any reference type.
30877
30878         * statement.cs (Return): Perform any implicit conversions to
30879         expected return type.  
30880
30881         Validate use of return statement.  
30882
30883         * codegen.cs (EmitContext): Pass the expected return type here.
30884
30885         * class.cs (Method, Constructor, Property): Pass expected return
30886         type to EmitContext.
30887
30888 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
30889
30890         * expression.cs: Make DoResolve take an EmitContext instead of a
30891         TypeContainer.
30892
30893         Replaced `l' and `location' for `loc', for consistency.
30894
30895         (Error, Warning): Remove unneeded Tc argument.
30896
30897         * assign.cs, literal.cs, constant.cs: Update to new calling
30898         convention. 
30899
30900         * codegen.cs: EmitContext now contains a flag indicating whether
30901         code is being generated in a static method or not.
30902
30903         * cs-parser.jay: DecomposeQI, new function that replaces the old
30904         QualifiedIdentifier.  Now we always decompose the assembled
30905         strings from qualified_identifier productions into a group of
30906         memberaccesses.
30907
30908 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
30909
30910         * rootcontext.cs: Deal with field-less struct types correctly now
30911         by passing the size option to Define Type.
30912
30913         * class.cs: Removed hack that created one static field. 
30914
30915 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30916
30917         * statement.cs: Moved most of the code generation here. 
30918
30919 2001-10-09  Ravi Pratap  <ravi@ximian.com>
30920
30921         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
30922         seem very right.
30923
30924         (ElementAccess): Remove useless bits for now - keep checks as the spec
30925         says.
30926
30927 2001-10-08  Ravi Pratap  <ravi@ximian.com>
30928
30929         * expression.cs (ElementAccess::DoResolve): Remove my crap code
30930         and start performing checks according to the spec.
30931
30932 2001-10-07  Ravi Pratap  <ravi@ximian.com>
30933
30934         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
30935         rank_specifiers instead.
30936
30937         (rank_specifiers): Change the order in which the rank specifiers are stored
30938
30939         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
30940
30941         * expression.cs (ElementAccess): Implement the LValue interface too.
30942
30943 2001-10-06  Ravi Pratap  <ravi@ximian.com>
30944
30945         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
30946         except that user defined conversions are not included.
30947
30948         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
30949         perform the conversion of the return type, if necessary.
30950
30951         (New::DoResolve): Check whether we are creating an array or an object
30952         and accordingly do the needful.
30953
30954         (New::Emit): Same here.
30955
30956         (New::DoResolve): Implement guts of array creation.
30957
30958         (New::FormLookupType): Helper function.
30959
30960 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
30961
30962         * codegen.cs: Removed most of the code generation here, and move the
30963         corresponding code generation bits to the statement classes. 
30964
30965         Added support for try/catch/finalize and throw.
30966
30967         * cs-parser.jay: Added support for try/catch/finalize.
30968
30969         * class.cs: Catch static methods having the flags override,
30970         virtual or abstract.
30971
30972         * expression.cs (UserCast): This user cast was not really doing
30973         what it was supposed to do.  Which is to be born in fully resolved
30974         state.  Parts of the resolution were being performed at Emit time! 
30975
30976         Fixed this code.
30977
30978 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30979
30980         * expression.cs: Implicity convert the result from UserCast.
30981
30982 2001-10-05  Ravi Pratap  <ravi@ximian.com>
30983
30984         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
30985         prevented it from working correctly. 
30986
30987         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
30988         merely ConvertImplicit.
30989
30990 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
30991
30992         * typemanager.cs: Make the LookupTypeContainer function static,
30993         and not per-instance.  
30994
30995         * class.cs: Make static FindMembers (the one that takes a Type
30996         argument). 
30997
30998         * codegen.cs: Add EmitForeach here.
30999
31000         * cs-parser.jay: Make foreach a toplevel object instead of the
31001         inline expansion, as we need to perform semantic analysis on it. 
31002
31003 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31004
31005         * expression.cs (Expression::ImplicitUserConversion): Rename to
31006         UserDefinedConversion.
31007
31008         (Expression::UserDefinedConversion): Take an extra argument specifying 
31009         whether we look for explicit user conversions too.
31010
31011         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31012
31013         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31014
31015         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31016         with the appropriate arguments.
31017
31018         * cs-parser.jay (cast_expression): Record location too.
31019
31020         * expression.cs (Cast): Record location info.
31021
31022         (Expression::ConvertExplicit): Take location argument.
31023
31024         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31025         to determine if we are doing explicit conversions.
31026
31027         (UserCast::Emit): Update accordingly.
31028
31029         (Expression::ConvertExplicit): Report an error if everything fails.
31030
31031         * ../errors/cs0030.cs : Add.
31032
31033 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31034
31035         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31036         virtual and newslot bits. 
31037
31038         * class.cs (TypeContainer::RegisterRequiredImplementations):
31039         Record methods we need.
31040
31041         (TypeContainer::MakeKey): Helper function to make keys for
31042         MethodBases, since the Methodbase key is useless.
31043
31044         (TypeContainer::Populate): Call RegisterRequiredImplementations
31045         before defining the methods.   
31046
31047         Create a mapping for method_builders_to_methods ahead of time
31048         instead of inside a tight loop.
31049
31050         (::RequireMethods):  Accept an object as the data to set into the
31051         hashtable so we can report interface vs abstract method mismatch.
31052
31053 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31054
31055         * report.cs: Make all of it static.
31056
31057         * rootcontext.cs: Drop object_type and value_type computations, as
31058         we have those in the TypeManager anyways.
31059
31060         Drop report instance variable too, now it is a global.
31061
31062         * driver.cs: Use try/catch on command line handling.
31063
31064         Add --probe option to debug the error reporting system with a test
31065         suite. 
31066
31067         * report.cs: Add support for exiting program when a probe
31068         condition is reached.
31069
31070 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31071
31072         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31073         we do a forcible conversion regardless of type, to check if 
31074         ForceConversion returns a null.
31075
31076         (Binary::error19): Use location to report error.
31077
31078         (Unary::error23): Use location here too.
31079
31080         * ../errors/cs0019.cs : Check in.
31081
31082         * ../errors/cs0023.cs : Check in.
31083
31084         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31085         case of a non-null MethodInfo object with a length of 0 !
31086
31087         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31088         an applicable member - according to the spec :-)
31089         Also fix logic to find members in base types.
31090
31091         (Unary::ResolveOperator): Same here.
31092
31093         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31094         as I was getting thoroughly confused between this and error19 :-)
31095
31096         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31097         (::FindMostEncompassedType): Implement.
31098         (::FindMostEncompassingType): Implement.
31099         (::StandardConversionExists): Implement.
31100
31101         (UserImplicitCast): Re-vamp. We now need info about most specific
31102         source and target types so that we can do the necessary conversions.
31103
31104         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31105         mathematical union with no duplicates.
31106
31107 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31108
31109         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31110         in order from base classes to child classes, so that we can in
31111         child classes look up in our parent for method names and
31112         attributes (required for handling abstract, virtual, new, override
31113         constructs: we need to instrospect our base class, and if we dont
31114         populate the classes in order, the introspection might be
31115         incorrect.  For example, a method could query its parent before
31116         the parent has any methods and would determine that the parent has
31117         no abstract methods (while it could have had them)).
31118
31119         (RootContext::CreateType): Record the order in which we define the
31120         classes.
31121
31122 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31123
31124         * class.cs (TypeContainer::Populate): Also method definitions can
31125         fail now, keep track of this.
31126
31127         (TypeContainer::FindMembers): Implement support for
31128         DeclaredOnly/noDeclaredOnly flag.
31129
31130         (Constructor::Emit) Return the ConstructorBuilder.
31131
31132         (Method::Emit) Return the MethodBuilder. 
31133         Check for abstract or virtual methods to be public.
31134
31135         * rootcontext.cs (RootContext::CreateType): Register all the
31136         abstract methods required for the class to be complete and the
31137         interface methods that must be implemented. 
31138
31139         * cs-parser.jay: Report error 501 (method requires body if it is
31140         not marked abstract or extern).
31141
31142         * expression.cs (TypeOf::Emit): Implement.
31143
31144         * typemanager.cs: runtime_handle_type, new global type.
31145
31146         * class.cs (Property::Emit): Generate code for properties.
31147
31148 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31149
31150         * expression.cs (Unary::ResolveOperator): Find operators on base type
31151         too - we now conform exactly to the spec.
31152
31153         (Binary::ResolveOperator): Same here.
31154
31155         * class.cs (Operator::Define): Fix minor quirk in the tests.
31156
31157         * ../errors/cs0215.cs : Added.
31158
31159         * ../errors/cs0556.cs : Added.
31160
31161         * ../errors/cs0555.cs : Added.
31162
31163 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31164
31165         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31166         single integer which is really efficient
31167
31168 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31169
31170         *  expression.cs (Expression::ImplicitUserConversion): Use location
31171         even in the case when we are examining True operators.
31172  
31173         * class.cs (Operator::Define): Perform extensive checks to conform
31174         with the rules for operator overloading in the spec.
31175
31176         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31177         some of the other conversions mentioned in the spec.
31178
31179         * typemanager.cs (array_type): New static member for the System.Array built-in
31180         type.
31181
31182         (cloneable_interface): For System.ICloneable interface.
31183
31184         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31185         we start resolving the tree and populating types.
31186
31187         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31188  
31189 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31190
31191         * expression.cs (Expression::ExprClassFromMemberInfo,
31192         Expression::Literalize): Create literal expressions from
31193         FieldInfos which are literals.
31194
31195         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31196         type casts, because they were wrong.  The test suite in tests
31197         caught these ones.
31198
31199         (ImplicitNumericConversion): ushort to ulong requires a widening
31200         cast. 
31201
31202         Int32 constant to long requires widening cast as well.
31203
31204         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31205         for integers because the type on the stack is not i4.
31206
31207 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31208
31209         * expression.cs (report118): require location argument. 
31210
31211         * parameter.cs: Do not dereference potential null value.
31212
31213         * class.cs: Catch methods that lack the `new' keyword when
31214         overriding a name.  Report warnings when `new' is used without
31215         anything being there to override.
31216
31217         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31218
31219         * class.cs: Only add constructor to hashtable if it is non-null
31220         (as now constructors can fail on define).
31221
31222         (TypeManager, Class, Struct): Take location arguments.
31223
31224         Catch field instance initialization in structs as errors.
31225
31226         accepting_filter: a new filter for FindMembers that is static so
31227         that we dont create an instance per invocation.
31228
31229         (Constructor::Define): Catch errors where a struct constructor is
31230         parameterless 
31231
31232         * cs-parser.jay: Pass location information for various new
31233         constructs. 
31234
31235         * delegate.cs (Delegate): take a location argument.
31236
31237         * driver.cs: Do not call EmitCode if there were problesm in the
31238         Definition of the types, as many Builders wont be there. 
31239
31240         * decl.cs (Decl::Decl): Require a location argument.
31241
31242         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31243         into integers, and find the most appropiate integer for it.
31244
31245         * literal.cs: Implement ULongLiteral.
31246
31247         * rootcontext.cs: Provide better information about the location of
31248         failure when CreateType fails.
31249
31250 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
31251
31252         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
31253         as well.
31254
31255         * expression.cs (Binary::CheckShiftArguments): Add missing type
31256         computation.
31257         (Binary::ResolveOperator): Add type to the logical and and logical
31258         or, Bitwise And/Or and Exclusive Or code paths, it was missing
31259         before.
31260
31261         (Binary::DoNumericPromotions): In the case where either argument
31262         is ulong (and most signed types combined with ulong cause an
31263         error) perform implicit integer constant conversions as well.
31264
31265 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31266
31267         * expression.cs (UserImplicitCast): Method should always be
31268         non-null. 
31269         (Invocation::BetterConversion): Simplified test for IntLiteral.
31270
31271         (Expression::ImplicitNumericConversion): Split this routine out.
31272         Put the code that performs implicit constant integer conversions
31273         here. 
31274
31275         (Expression::Resolve): Become a wrapper around DoResolve so we can
31276         check eclass and type being set after resolve.
31277
31278         (Invocation::Badness): Remove this dead function
31279
31280         (Binary::ResolveOperator): Do not compute the expensive argumnets
31281         unless we have a union for it.
31282
31283         (Probe::Emit): Is needs to do an isinst and then
31284         compare against null.
31285
31286         (::CanConvert): Added Location argument.  If the Location argument
31287         is null (Location.Null), then we do not report errors.  This is
31288         used by the `probe' mechanism of the Explicit conversion.  We do
31289         not want to generate an error for something that the user
31290         explicitly requested to be casted.  But the pipeline for an
31291         explicit cast first tests for potential implicit casts.
31292
31293         So for now, if the Location is null, it means `Probe only' to
31294         avoid adding another argument.   Might have to revise this
31295         strategy later.
31296
31297         (ClassCast): New class used to type cast objects into arbitrary
31298         classes (used in Explicit Reference Conversions).
31299
31300         Implement `as' as well.
31301
31302         Reverted all the patches from Ravi below: they were broken:
31303
31304                 * The use of `level' as a mechanism to stop recursive
31305                   invocations is wrong.  That was there just to catch the
31306                   bug with a strack trace but not as a way of addressing
31307                   the problem.
31308
31309                   To fix the problem we have to *understand* what is going
31310                   on and the interactions and come up with a plan, not
31311                   just get things going.
31312
31313                 * The use of the type conversion cache that I proposed
31314                   last night had an open topic: How does this work across
31315                   protection domains.  A user defined conversion might not
31316                   be public in the location where we are applying the
31317                   conversion, a different conversion might be selected
31318                   (ie, private A->B (better) but public B->A (worse),
31319                   inside A, A->B applies, but outside it, B->A will
31320                   apply).
31321
31322                 * On top of that (ie, even if the above is solved),
31323                   conversions in a cache need to be abstract.  Ie, `To
31324                   convert from an Int to a Short use an OpcodeCast', not
31325                   `To convert from an Int to a Short use the OpcodeCast on
31326                   the variable 5' (which is what this patch was doing).
31327
31328 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31329
31330         * expression.cs (Invocation::ConversionExists): Re-write to use
31331         the conversion cache
31332
31333         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
31334         cache all conversions done, not just user-defined ones.
31335
31336         (Invocation::BetterConversion): The real culprit. Use ConversionExists
31337         to determine if a conversion exists instead of acutually trying to 
31338         perform the conversion. It's faster too.
31339
31340         (Expression::ConvertExplicit): Modify to use ConversionExists to check
31341         and only then attempt the implicit conversion.
31342
31343 2001-09-28  Ravi Pratap  <ravi@ximian.com>
31344
31345         * expression.cs (ConvertImplicit): Use a cache for conversions
31346         already found. Check level of recursion and bail out if necessary.
31347
31348 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
31349
31350         * typemanager.cs (string_concat_string_string, string_concat_object_object):
31351         Export standard methods that we expect for string operations.
31352
31353         * statement.cs (Block::UsageWarning): Track usage of variables and
31354         report the errors for not used variables.
31355
31356         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
31357         operator. 
31358
31359 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31360
31361         * codegen.cs: remove unnneded code 
31362
31363         * expression.cs: Removed BuiltinTypeAccess class
31364
31365         Fix the order in which implicit conversions are
31366         done.  
31367
31368         The previous fixed dropped support for boxed conversions (adding a
31369         test to the test suite now)
31370
31371         (UserImplicitCast::CanConvert): Remove test for source being null,
31372         that code is broken.  We should not feed a null to begin with, if
31373         we do, then we should track the bug where the problem originates
31374         and not try to cover it up here.
31375
31376         Return a resolved expression of type UserImplicitCast on success
31377         rather than true/false.  Ravi: this is what I was talking about,
31378         the pattern is to use a static method as a "constructor" for
31379         objects. 
31380
31381         Also, do not create arguments until the very last minute,
31382         otherwise we always create the arguments even for lookups that
31383         will never be performed. 
31384
31385         (UserImplicitCast::Resolve): Eliminate, objects of type
31386         UserImplicitCast are born in a fully resolved state. 
31387
31388         * typemanager.cs (InitCoreTypes): Init also value_type
31389         (System.ValueType). 
31390
31391         * expression.cs (Cast::Resolve): First resolve the child expression.
31392
31393         (LValue): Add new method AddressOf to be used by
31394         the `&' operator.  
31395
31396         Change the argument of Store to take an EmitContext instead of an
31397         ILGenerator, because things like FieldExpr need to be able to call
31398         their children expression to generate the instance code. 
31399
31400         (Expression::Error, Expression::Warning): Sugar functions for
31401         reporting errors.
31402
31403         (Expression::MemberLookup): Accept a TypeContainer instead of a
31404         Report as the first argument.
31405
31406         (Expression::ResolvePrimary): Killed.  I still want to improve
31407         this as currently the code is just not right.
31408
31409         (Expression::ResolveMemberAccess): Simplify, but it is still
31410         wrong. 
31411
31412         (Unary::Resolve): Catch errors in AddressOf operators.
31413
31414         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
31415         index to a byte for the short-version, or the compiler will choose
31416         the wrong Emit call, which generates the wrong data.
31417
31418         (ParameterReference::Emit, ::Store): same.
31419
31420         (FieldExpr::AddressOf): Implement.
31421
31422         * typemanager.cs: TypeManager: made public variable instead of
31423         property.
31424
31425         * driver.cs: document --fatal.
31426
31427         * report.cs (ErrorMessage, WarningMessage): new names for the old
31428         Error and Warning classes.
31429
31430         * cs-parser.jay (member_access): Turn built-in access to types
31431         into a normal simplename
31432
31433 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31434
31435         * expression.cs (Invocation::BetterConversion): Fix to cope
31436         with q being null, since this was introducing a bug.
31437
31438         * expression.cs (ConvertImplicit): Do built-in conversions first.
31439
31440 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31441
31442         * expression.cs (UserImplicitCast::Resolve): Fix bug.
31443
31444 2001-09-27  Ravi Pratap  <ravi@ximian.com>
31445
31446         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
31447         I had introduced long ago (what's new ?).
31448
31449         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
31450         the work of all the checking. 
31451         (ConvertImplicit): Call CanConvert and only then create object if necessary.
31452         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
31453
31454         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
31455         that is the right way. 
31456
31457         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
31458         overloading resolution. Use everywhere instead of cutting and pasting code.
31459
31460         (Binary::ResolveOperator): Use MakeUnionSet.
31461
31462         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
31463         we have to convert to bool types. Not complete yet.
31464
31465 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
31466
31467         * typemanager.cs (TypeManager::CSharpName): support ushort.
31468
31469         * expression.cs (Expression::TryImplicitIntConversion): Attempts
31470         to provide an expression that performsn an implicit constant int
31471         conversion (section 6.1.6).
31472         (Expression::ConvertImplicitRequired): Reworked to include
31473         implicit constant expression conversions.
31474
31475         (Expression::ConvertNumericExplicit): Finished.
31476
31477         (Invocation::Emit): If InstanceExpression is null, then it means
31478         that we perform a call on this.
31479
31480 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31481
31482         * expression.cs (Unary::Emit): Remove some dead code.
31483         (Probe): Implement Resolve and Emit for `is'.
31484         (Expression::ConvertImplicitRequired): Attempt to do constant
31485         expression conversions here.  Maybe should be moved to
31486         ConvertImplicit, but I am not sure.
31487         (Expression::ImplicitLongConstantConversionPossible,
31488         Expression::ImplicitIntConstantConversionPossible): New functions
31489         that tell whether is it possible to apply an implicit constant
31490         expression conversion.
31491
31492         (ConvertNumericExplicit): Started work on explicit numeric
31493         conversions.
31494
31495         * cs-parser.jay: Update operator constants.
31496
31497         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
31498         (Parameters::GetSignature): Hook up VerifyArgs here.
31499         (Parameters::VerifyArgs): Verifies that no two arguments have the
31500         same name. 
31501
31502         * class.cs (Operator): Update the operator names to reflect the
31503         ones that the spec expects (as we are just stringizing the
31504         operator names).
31505
31506         * expression.cs (Unary::ResolveOperator): Fix bug: Use
31507         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
31508         previous usage did only work for our methods.
31509         (Expression::ConvertImplicit): Handle decimal implicit numeric
31510         conversions as well.
31511         (Expression::InternalTypeConstructor): Used to invoke constructors
31512         on internal types for default promotions.
31513
31514         (Unary::Emit): Implement special handling for the pre/post
31515         increment/decrement for overloaded operators, as they need to have
31516         the same semantics as the other operators.
31517
31518         (Binary::ResolveOperator): ditto.
31519         (Invocation::ConversionExists): ditto.
31520         (UserImplicitCast::Resolve): ditto.
31521
31522 2001-09-26  Ravi Pratap  <ravi@ximian.com>
31523
31524         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
31525         operator, return after emitting body. Regression tests pass again !
31526
31527         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
31528         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
31529         (Invocation::OverloadResolve): Ditto.
31530         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
31531
31532         * everywhere : update calls to the above methods accordingly.
31533
31534 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
31535
31536         * assign.cs (Assign): Make it inherit from ExpressionStatement.
31537
31538         * expression.cs (ExpressionStatement): New base class used for
31539         expressions that can appear in statements, so that we can provide
31540         an alternate path to generate expression that do not leave a value
31541         on the stack.
31542
31543         (Expression::Emit, and all the derivatives): We no longer return
31544         whether a value is left on the stack or not.  Every expression
31545         after being emitted leaves a single value on the stack.
31546
31547         * codegen.cs (EmitContext::EmitStatementExpression): Use the
31548         facilties of ExpressionStatement if possible.
31549
31550         * cs-parser.jay: Update statement_expression.
31551
31552 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
31553
31554         * driver.cs: Change the wording of message
31555
31556 2001-09-25  Ravi Pratap  <ravi@ximian.com>
31557
31558         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
31559         the type of the expression to the return type of the method if
31560         we have an overloaded operator match ! The regression tests pass again !
31561         (Unary::ResolveOperator): Ditto.
31562
31563         * expression.cs (Invocation::ConversionExists): Correct the member lookup
31564         to find "op_Implicit", not "implicit" ;-)
31565         (UserImplicitCast): New class to take care of user-defined implicit conversions.
31566         (ConvertImplicit, ForceConversion): Take TypeContainer argument
31567
31568         * everywhere : Correct calls to the above accordingly.
31569
31570         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
31571         (ConvertImplicit): Do user-defined conversion if it exists.
31572
31573 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
31574
31575         * assign.cs: track location.
31576         (Resolve): Use implicit conversions on assignment.
31577
31578         * literal.cs: Oops.  Not good, Emit of short access values should
31579         pass (Bytes) or the wrong argument will be selected.
31580
31581         * expression.cs (Unary::Emit): Emit code for -expr.
31582
31583         (Unary::ResolveOperator): Handle `Substract' for non-constants
31584         (substract from zero from the non-constants).
31585         Deal with Doubles as well. 
31586
31587         (Expression::ConvertImplicitRequired): New routine that reports an
31588         error if no implicit conversion exists. 
31589
31590         (Invocation::OverloadResolve): Store the converted implicit
31591         expressions if we make them
31592
31593 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31594
31595         * class.cs (ConstructorInitializer): Take a Location argument.
31596         (ConstructorBaseInitializer): Same here.
31597         (ConstructorThisInitializer): Same here.
31598
31599         * cs-parser.jay : Update all calls accordingly.
31600
31601         * expression.cs (Unary, Binary, New): Take location argument.
31602         Update accordingly everywhere.
31603
31604         * cs-parser.jay : Update all calls to the above to take a location
31605         argument.
31606
31607         * class.cs : Ditto.
31608
31609 2001-09-24  Ravi Pratap  <ravi@ximian.com>
31610
31611         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
31612         (Invocation::BetterConversion): Same here
31613         (Invocation::ConversionExists): Ditto.
31614
31615         (Invocation::ConversionExists): Implement.
31616
31617 2001-09-22  Ravi Pratap  <ravi@ximian.com>
31618
31619         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
31620         Also take an additional TypeContainer argument.
31621
31622         * All over : Pass in TypeContainer as argument to OverloadResolve.
31623
31624         * typemanager.cs (CSharpName): Update to check for the string type and return
31625         that too.
31626
31627         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
31628         a given method.
31629
31630 2001-09-21  Ravi Pratap  <ravi@ximian.com>
31631
31632         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
31633         (Invocation::BetterFunction): Implement.
31634         (Invocation::BetterConversion): Implement.
31635         (Invocation::ConversionExists): Skeleton, no implementation yet.
31636
31637         Okay, things work fine !
31638
31639 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
31640
31641         * typemanager.cs: declare and load enum_type, delegate_type and
31642         void_type. 
31643
31644         * expression.cs (Expression::Emit): Now emit returns a value that
31645         tells whether a value is left on the stack or not.  This strategy
31646         might be reveted tomorrow with a mechanism that would address
31647         multiple assignments.
31648         (Expression::report118): Utility routine to report mismatches on
31649         the ExprClass.
31650
31651         (Unary::Report23): Report impossible type/operator combination
31652         utility function.
31653
31654         (Unary::IsIncrementableNumber): Whether the type can be
31655         incremented or decremented with add.
31656         (Unary::ResolveOperator): Also allow enumerations to be bitwise
31657         complemented. 
31658         (Unary::ResolveOperator): Implement ++, !, ~,
31659
31660         (Invocation::Emit): Deal with new Emit convetion.
31661
31662         * All Expression derivatives: Updated their Emit method to return
31663         whether they leave values on the stack or not.
31664
31665         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
31666         stack for expressions that are statements. 
31667
31668 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31669
31670         * expression.cs (LValue): New interface.  Must be implemented by
31671         LValue objects.
31672         (LocalVariableReference, ParameterReference, FieldExpr): Implement
31673         LValue interface.
31674
31675         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
31676         interface for generating code, simplifies the code.
31677
31678 2001-09-20  Ravi Pratap  <ravi@ximian.com>
31679
31680         * expression.cs (everywhere): Comment out return statements in ::Resolve
31681         methods to avoid the warnings.
31682
31683 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
31684
31685         * driver.cs (parse): Report error 2001 if we can not open the
31686         source file.
31687
31688         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
31689         not resolve it.
31690
31691         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
31692         object. 
31693
31694         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
31695         otherwise nested blocks end up with the same index.
31696
31697         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
31698
31699         * expression.cs:  Instead of having FIXMEs in the Resolve
31700         functions, throw exceptions so it is obvious that we are facing a
31701         bug. 
31702
31703         * cs-parser.jay (invocation_expression): Pass Location information.
31704
31705         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
31706         Use a basename for those routines because .NET does not like paths
31707         on them. 
31708
31709         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
31710         already defined.
31711
31712 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
31713
31714         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
31715         are loading the correct data types (throws an exception if not).
31716         (TypeManager::InitCoreTypes): Use CoreLookupType
31717
31718         * expression.cs (Unary::ResolveOperator): return the child
31719         expression for expressions which are just +expr.
31720         (Unary::ResolveOperator): Return negative literals for -LITERAL
31721         expressions (otherwise they are Unary {Literal}).
31722         (Invocation::Badness): Take into account `Implicit constant
31723         expression conversions'.
31724
31725         * literal.cs (LongLiteral): Implement long literal class.
31726         (IntLiteral): export the `Value' of the intliteral. 
31727
31728 2001-09-19  Ravi Pratap  <ravi@ximian.com>
31729
31730         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
31731
31732         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
31733         instead of 'Operator'
31734
31735         * expression.cs (Binary::ResolveOperator): Update accordingly.
31736         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
31737         and 'Minus'
31738
31739         * cs-parser.jay (unary_expression): Update to use the new names.
31740
31741         * gen-treedump.cs (GetUnary): Same here.
31742
31743         * expression.cs (Unary::Resolve): Implement.
31744         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
31745         operators are found instead of making noise ;-)
31746         (Unary::ResolveOperator): New method to do precisely the same thing which
31747         Binary::ResolveOperator does for Binary expressions.
31748         (Unary.method, .Arguments): Add.
31749         (Unary::OperName): Implement.   
31750         (Unary::ForceConversion): Copy and Paste !
31751
31752         * class.cs (Operator::Define): Fix a small bug for the case when we have 
31753         a unary operator.
31754
31755         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
31756         for the inbuilt operators. Only overloading works for now ;-)
31757
31758 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
31759
31760         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
31761         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
31762
31763         * expression.cs (This::Emit): Implement. 
31764         (This::Resolve): Implement.
31765         (TypeOf:Resolve): Implement.
31766         (Expression::ResolveSimpleName): Add an implicit this to instance
31767         field references. 
31768         (MemberAccess::Resolve): Deal with Parameters and Fields. 
31769         Bind instance variable to Field expressions.
31770         (FieldExpr::Instance): New field used to track the expression that
31771         represents the object instance.
31772         (FieldExpr::Resolve): Track potential errors from MemberLookup not
31773         binding 
31774         (FieldExpr::Emit): Implement.
31775
31776         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
31777         the last instruction contains a return opcode to avoid generating
31778         the last `ret' instruction (this generates correct code, and it is
31779         nice to pass the peverify output).
31780
31781         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
31782         initializer for static and instance variables.
31783         (Constructor::Emit): Allow initializer to be null in the case of
31784         static constructors.  Only emit initializer for instance
31785         constructors. 
31786
31787         (TypeContainer::FindMembers): Return a null array if there are no
31788         matches.
31789
31790         Also fix the code for the MemberTypes.Method branch, as it was not
31791         scanning that for operators (or tried to access null variables before).
31792
31793         * assign.cs (Assign::Emit): Handle instance and static fields. 
31794
31795         * TODO: Updated.
31796
31797         * driver.cs: Stop compilation if there are parse errors.
31798
31799         * cs-parser.jay (constructor_declaration): Provide default base
31800         initializer for non-static constructors.
31801         (constructor_declarator): Do not provide a default base
31802         initializers if none was specified.
31803         Catch the fact that constructors should not have parameters.
31804
31805         * class.cs: Do not emit parent class initializers for static
31806         constructors, that should be flagged as an error.
31807
31808 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31809
31810         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
31811         Move back code into TypeContainer::Populate.
31812
31813 2001-09-18  Ravi Pratap  <ravi@ximian.com>
31814
31815         * class.cs (TypeContainer::AddConstructor): Fix the check to
31816         compare against Name, not Basename. 
31817         (Operator::OpType): Change Plus and Minus to Add and Subtract.
31818
31819         * cs-parser.jay : Update accordingly.
31820
31821         * class.cs (TypeContainer::FindMembers): For the case where we are searching
31822         for methods, don't forget to look into the operators too.
31823         (RegisterMethodBuilder): Helper method to take care of this for
31824         methods, constructors and operators.
31825         (Operator::Define): Completely revamp.
31826         (Operator.OperatorMethod, MethodName): New fields.
31827         (TypeContainer::Populate): Move the registering of builders into
31828         RegisterMethodBuilder.
31829         (Operator::Emit): Re-write.
31830
31831         * expression.cs (Binary::Emit): Comment out code path to emit method
31832         invocation stuff for the case when we have a user defined operator. I am
31833         just not able to get it right !
31834
31835 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31836
31837         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
31838         argument. 
31839
31840         (Expression::MemberLookup): Provide a version that allows to
31841         specify the MemberTypes and BindingFlags. 
31842
31843         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
31844         so it was not fetching variable information from outer blocks.
31845
31846         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
31847         Beforefieldinit as it was buggy.
31848
31849         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
31850         that Ravi put here.  
31851
31852         * class.cs (Constructor::Emit): Only emit if block is not null.
31853         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
31854         deal with this by semantically definining it as if the user had
31855         done it.
31856
31857         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
31858         constructors as we now "emit" them at a higher level.
31859
31860         (TypeContainer::DefineDefaultConstructor): Used to define the
31861         default constructors if none was provided.
31862
31863         (ConstructorInitializer): Add methods Resolve and Emit. 
31864
31865         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
31866
31867 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31868
31869         * class.cs (TypeContainer::EmitDefaultConstructor): Register
31870         the default constructor builder with our hashtable for methodbuilders
31871         to methodcores.
31872
31873         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
31874         and argument_count is 0 in which case we have a match.
31875         (Binary::ResolveOperator): More null checking and miscellaneous coding
31876         style cleanup.
31877
31878 2001-09-17  Ravi Pratap  <ravi@ximian.com>
31879
31880         * rootcontext.cs (IsNameSpace): Compare against null.
31881
31882         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
31883
31884         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
31885         and Unary::Operator.
31886
31887         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
31888         accordingly.
31889
31890         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
31891         we have overloaded operators.
31892         (Binary::ResolveOperator): Implement the part which does the operator overload
31893         resolution.
31894
31895         * class.cs (Operator::Emit): Implement.
31896         (TypeContainer::Emit): Emit the operators we have too.
31897
31898         * expression.cs (Binary::Emit): Update to emit the appropriate code for
31899         the case when we have a user-defined operator.
31900
31901 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
31902
31903         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
31904
31905 2001-09-16  Ravi Pratap  <ravi@ximian.com>
31906
31907         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
31908         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
31909         (Constructor::Emit): Implement.
31910         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
31911         if we have no work to do. 
31912         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
31913         Emit method.
31914
31915         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
31916         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
31917
31918         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
31919         of parent.parent.
31920
31921 2001-09-15  Ravi Pratap  <ravi@ximian.com>
31922
31923         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
31924         in the source.
31925         (Tree::RecordNamespace): Method to do what the name says ;-)
31926         (Tree::Namespaces): Property to get at the namespaces hashtable.
31927
31928         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
31929         keep track.
31930
31931         * rootcontext.cs (IsNamespace): Fixed it :-)
31932
31933 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31934
31935         * class.cs (TypeContainer::FindMembers): Add support for
31936         constructors. 
31937         (MethodCore): New class that encapsulates both the shared aspects
31938         of a Constructor and a Method.  
31939         (Method, Constructor): Factored pieces into MethodCore.
31940
31941         * driver.cs: Added --fatal which makes errors throw exceptions.
31942         Load System assembly as well as part of the standard library.
31943
31944         * report.cs: Allow throwing exceptions on errors for debugging.
31945
31946         * modifiers.cs: Do not use `parent', instead use the real type
31947         container to evaluate permission settings.
31948
31949         * class.cs: Put Ravi's patch back in.  He is right, and we will
31950         have to cope with the
31951
31952 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31953
31954         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
31955         FamORAssem, not FamANDAssem.
31956
31957 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
31958
31959         * driver.cs: Added --parse option that only parses its input files
31960         and terminates.
31961
31962         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
31963         incorrect.  IsTopLevel is not used to tell whether an object is
31964         root_types or not (that can be achieved by testing this ==
31965         root_types).  But to see if this is a top-level *class* (not
31966         necessarly our "toplevel" container). 
31967
31968 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31969
31970         * enum.cs (Enum::Define): Modify to call the Lookup method on the
31971         parent instead of a direct call to GetType.
31972
31973 2001-09-14  Ravi Pratap  <ravi@ximian.com>
31974
31975         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
31976         Modifiers.TypeAttr. This should just be a call to that method.
31977
31978         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
31979         object so that we can determine if we are top-level or not.
31980
31981         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
31982         TypeContainer too.
31983
31984         * enum.cs (Enum::Define): Ditto.
31985
31986         * modifiers.cs (FieldAttr): Re-write.
31987
31988         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
31989         (TypeContainer::HaveStaticConstructor): New property to provide access
31990         to precisely that info.
31991
31992         * modifiers.cs (MethodAttr): Re-write.
31993         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
31994
31995         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
31996         of top-level types as claimed.
31997
31998 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
31999
32000         * expression.cs (MemberLookup): Fruitless attempt to lookup
32001         constructors.  Maybe I need to emit default constructors?  That
32002         might be it (currently .NET emits this for me automatically).
32003         (Invocation::OverloadResolve): Cope with Arguments == null.
32004         (Invocation::EmitArguments): new function, shared by the new
32005         constructor and us.
32006         (Invocation::Emit): Handle static and instance methods.  Emit
32007         proper call instruction for virtual or non-virtual invocations.
32008         (New::Emit): Implement.
32009         (New::Resolve): Implement.
32010         (MemberAccess:Resolve): Implement.
32011         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32012         to track instances.
32013         (FieldExpr::Resolve): Set type.
32014
32015         * support.cs: Handle empty arguments.
32016                 
32017         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32018         SimpleLookup): Auxiliary routines to help parse a qualifier
32019         identifier.  
32020
32021         Update qualifier_identifier rule.
32022
32023         * codegen.cs: Removed debugging messages.
32024
32025         * class.cs: Make this a global thing, this acts just as a "key" to
32026         objects that we might have around.
32027
32028         (Populate): Only initialize method_builders_to_methods once.
32029
32030         * expression.cs (PropertyExpr): Initialize type from the
32031         PropertyType. 
32032
32033         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32034         Resolve pattern.  Attempt to implicitly convert value to boolean.
32035         Emit code.
32036
32037         * expression.cs: Set the type for the int32/int32 argument case.
32038         (Binary::ResolveOperator): Set the return type to boolean for
32039         comparission operators
32040
32041         * typemanager.cs: Remove debugging print code.
32042
32043         (Invocation::Resolve): resolve type.
32044
32045         * class.cs: Allocate a MemberInfo of the correct size, as the code
32046         elsewhere depends on the test to reflect the correct contents.
32047
32048         (Method::) Keep track of parameters, due to System.Reflection holes
32049
32050         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32051         mapping here.
32052
32053         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32054         of the exact size and return that.
32055
32056         (Class::LookupMethodByBuilder): New function that maps
32057         MethodBuilders to its methods.  Required to locate the information
32058         on methods because System.Reflection bit us again.
32059
32060         * support.cs: New file, contains an interface ParameterData and
32061         two implementations: ReflectionParameters and InternalParameters
32062         used to access Parameter information.  We will need to grow this
32063         as required.
32064
32065         * expression.cs (Invocation::GetParameterData): implement a cache
32066         and a wrapper around the ParameterData creation for methods. 
32067         (Invocation::OverloadResolve): Use new code.
32068
32069 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32070
32071         * class.cs (TypeContainer::EmitField): Remove and move into 
32072         (Field::Define): here and modify accordingly.
32073         (Field.FieldBuilder): New member.
32074         (TypeContainer::Populate): Update accordingly.
32075         (TypeContainer::FindMembers): Implement.
32076
32077 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32078
32079         * statement.cs: (VariableInfo::VariableType): New field to be
32080         initialized with the full type once it is resolved. 
32081
32082 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32083
32084         * parameter.cs (GetParameterInfo): Use a type cache to compute
32085         things only once, and to reuse this information
32086
32087         * expression.cs (LocalVariableReference::Emit): Implement.
32088         (OpcodeCast::Emit): fix.
32089
32090         (ParameterReference::Resolve): Implement.
32091         (ParameterReference::Emit): Implement.
32092
32093         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32094         that are expressions need to stay as Expressions.
32095
32096         * typemanager.cs (CSharpName): Returns the C# name of a type if
32097         possible. 
32098
32099         * expression.cs (Expression::ConvertImplicit): New function that
32100         implements implicit type conversions.
32101
32102         (Expression::ImplicitReferenceConversion): Implements implicit
32103         reference conversions.
32104
32105         (EmptyCast): New type for transparent casts.
32106
32107         (OpcodeCast): New type for casts of types that are performed with
32108         a sequence of bytecodes.
32109
32110         (BoxedCast): New type used for casting value types into reference
32111         types.  Emits a box opcode.
32112
32113         (Binary::DoNumericPromotions): Implements numeric promotions of
32114         and computation of the Binary::Type.
32115
32116         (Binary::EmitBranchable): Optimization.
32117
32118         (Binary::Emit): Implement code emission for expressions.
32119
32120         * typemanager.cs (TypeManager): Added two new core types: sbyte
32121         and byte.
32122
32123 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32124
32125         * class.cs (TypeContainer::FindMembers): Method which does exactly
32126         what Type.FindMembers does, only we don't have to use reflection. No
32127         implementation yet.
32128
32129         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32130         typecontainer objects as we need to get at them.
32131         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32132
32133         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32134         typecontainer object.
32135
32136         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32137         of just a Report object.
32138
32139 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32140
32141         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32142         "remove_"
32143         (TypeContainer::Populate): Now define the delegates of the type too.
32144         (TypeContainer.Delegates): Property to access the list of delegates defined
32145         in the type.
32146
32147         * delegates.cs (Delegate::Define): Implement partially.
32148
32149         * modifiers.cs (TypeAttr): Handle more flags.
32150
32151 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32152
32153         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32154         and not <=
32155         (Operator::Define): Re-write logic to get types by using the LookupType method
32156         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32157         (Indexer::Define): Ditto.
32158         (Event::Define): Ditto.
32159         (Property::Define): Ditto.
32160
32161 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32162
32163         * class.cs (TypeContainer::Populate): Now define operators too. 
32164         (TypeContainer.Operators): New property to access the list of operators
32165         in a type.
32166         (Operator.OperatorMethodBuilder): New member to hold the method builder
32167         for the operator we are defining.
32168         (Operator::Define): Implement.
32169
32170 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32171
32172         * class.cs (Event::Define): Make the prefixes of the accessor methods
32173         addOn_ and removeOn_ 
32174
32175         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32176         of the location being passed in too. Ideally, this should go later since all
32177         error reporting should be done through the Report object.
32178
32179         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32180         (Populate): Iterate thru the indexers we have and define them too.
32181         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32182         for the get and set accessors.
32183         (Indexer::Define): Implement.
32184
32185 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32186
32187         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32188         my previous implementation, did not work.
32189
32190         * typemanager.cs: Add a couple of missing types (the longs).
32191
32192         * literal.cs: Use TypeManager.bool_type instead of getting it.
32193
32194         * expression.cs (EventExpr): New kind of expressions.
32195         (Expressio::ExprClassFromMemberInfo): finish
32196
32197 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32198
32199         * assign.cs: Emit stores to static fields differently.
32200
32201 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32202
32203         * Merge in changes and adjust code to tackle conflicts. Backed out my
32204         code in Assign::Resolve ;-) 
32205
32206 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32207
32208         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32209         instead Report.Error and also pass in the location.
32210         (CSharpParser::Lexer): New readonly property to return the reference
32211         to the Tokenizer object.
32212         (declare_local_variables): Use Report.Error with location instead of plain 
32213         old error.
32214         (CheckDef): Ditto.
32215
32216         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32217         (Operator.CheckBinaryOperator): Ditto.
32218
32219         * cs-parser.jay (operator_declarator): Update accordingly.
32220
32221         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32222         (CheckBinaryOperator): Same here.
32223
32224         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32225         on the name without any prefixes of namespace names etc. This is because we
32226         already might have something already fully qualified like 
32227         'System.Console.WriteLine'
32228
32229         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32230
32231 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32232
32233         * cs-tokenizer.cs (location): Return a string which also contains
32234         the file name.
32235
32236         * expression.cs (ElementAccess): New class for expressions of the
32237         type 'element access.'
32238         (BaseAccess): New class for expressions of the type 'base access.'
32239         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32240         respectively.
32241
32242         * cs-parser.jay (element_access): Implement action.
32243         (base_access): Implement actions.
32244         (checked_expression, unchecked_expression): Implement.
32245
32246         * cs-parser.jay (local_variable_type): Correct and implement.
32247         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
32248
32249         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
32250
32251         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
32252         name and the specifiers.
32253
32254         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
32255
32256         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
32257         making them all public ;-)
32258
32259         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
32260         class anyways.
32261
32262 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
32263
32264         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
32265         PropertyExprs.
32266         (FieldExpr, PropertyExprs): New resolved expressions.
32267         (SimpleName::MemberStaticCheck): Perform static checks for access
32268         to non-static fields on static methods. Maybe this should be
32269         generalized for MemberAccesses. 
32270         (SimpleName::ResolveSimpleName): More work on simple name
32271         resolution. 
32272
32273         * cs-parser.jay (primary_expression/qualified_identifier): track
32274         the parameter index.
32275
32276         * codegen.cs (CodeGen::Save): Catch save exception, report error.
32277         (EmitContext::EmitBoolExpression): Chain to expression generation
32278         instead of temporary hack.
32279         (::EmitStatementExpression): Put generic expression code generation.
32280
32281         * assign.cs (Assign::Emit): Implement variable assignments to
32282         local variables, parameters and fields.
32283
32284 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
32285
32286         * statement.cs (Block::GetVariableInfo): New method, returns the
32287         VariableInfo for a variable name in a block.
32288         (Block::GetVariableType): Implement in terms of GetVariableInfo
32289
32290         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
32291         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
32292
32293 2001-09-06  Ravi Pratap  <ravi@ximian.com>
32294
32295         * cs-parser.jay (operator_declaration): Continue on my quest : update
32296         to take attributes argument.
32297         (event_declaration): Ditto.
32298         (enum_declaration): Ditto.
32299         (indexer_declaration): Ditto.
32300
32301         * class.cs (Operator::Operator): Update constructor accordingly.
32302         (Event::Event): Ditto.
32303
32304         * delegate.cs (Delegate::Delegate): Same here.
32305
32306         * enum.cs (Enum::Enum): Same here.
32307
32308 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32309
32310         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
32311
32312         * ../tests/cs0658.cs : New file to demonstrate error 0658.
32313
32314         * attribute.cs (Attributes): New class to encapsulate all attributes which were
32315         being passed around as an arraylist.
32316         (Attributes::AddAttribute): Method to add attribute sections.
32317
32318         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
32319         (struct_declaration): Update accordingly.
32320         (constant_declaration): Update.
32321         (field_declaration): Update.
32322         (method_header): Update.
32323         (fixed_parameter): Update.
32324         (parameter_array): Ditto.
32325         (property_declaration): Ditto.
32326         (destructor_declaration): Ditto.
32327
32328         * class.cs (Struct::Struct): Update constructors accordingly.
32329         (Class::Class): Ditto.
32330         (Field::Field): Ditto.
32331         (Method::Method): Ditto.
32332         (Property::Property): Ditto.
32333         (TypeContainer::OptAttribute): update property's return type.
32334
32335         * interface.cs (Interface.opt_attributes): New member.
32336         (Interface::Interface): Update to take the extra Attributes argument.
32337
32338         * parameter.cs (Parameter::Parameter): Ditto.
32339
32340         * constant.cs (Constant::Constant): Ditto.
32341
32342         * interface.cs (InterfaceMemberBase): New OptAttributes field.
32343         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
32344         the attributes as a parameter.
32345         (InterfaceProperty): Update constructor call.
32346         (InterfaceEvent): Ditto.
32347         (InterfaceMethod): Ditto.
32348         (InterfaceIndexer): Ditto.
32349
32350         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
32351         pass the attributes too.
32352         (interface_event_declaration): Ditto.
32353         (interface_property_declaration): Ditto.
32354         (interface_method_declaration): Ditto.
32355         (interface_declaration): Ditto.
32356
32357 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
32358
32359         * class.cs (Method::Define): Track the "static Main" definition to
32360         create an entry point. 
32361
32362         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
32363         EntryPoint if we find it. 
32364
32365         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
32366         (EmitContext::ig): Make this variable public.
32367
32368         * driver.cs: Make the default output file be the first file name
32369         with the .exe extension.  
32370
32371         Detect empty compilations
32372
32373         Handle various kinds of output targets.  Handle --target and
32374         rename -t to --dumper.
32375
32376         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
32377         methods inherited from Expression return now an Expression.  This
32378         will is used during the tree rewriting as we resolve them during
32379         semantic analysis.
32380
32381         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
32382         the spec.  Missing entirely is the information about
32383         accessability of elements of it.
32384
32385         (Expression::ExprClassFromMemberInfo): New constructor for
32386         Expressions that creates a fully initialized Expression based on
32387         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
32388         a Type.
32389
32390         (Invocation::Resolve): Begin implementing resolution of invocations.
32391
32392         * literal.cs (StringLiteral):  Implement Emit.
32393
32394 2001-09-05  Ravi Pratap  <ravi@ximian.com>
32395
32396         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
32397         member.
32398
32399 2001-09-04  Ravi Pratap  <ravi@ximian.com>
32400
32401         * cs-parser.jay (attribute_arguments): Implement actions.
32402         (attribute): Fix bug in production. Implement action.
32403         (attribute_list): Implement.
32404         (attribute_target): Implement.
32405         (attribute_target_specifier, opt_target_specifier): Implement
32406         (CheckAttributeTarget): New method to check if the attribute target
32407         is valid.
32408         (attribute_section): Implement.
32409         (opt_attributes): Implement.
32410
32411         * attribute.cs : New file to handle attributes.
32412         (Attribute): Class to hold attribute info.
32413
32414         * cs-parser.jay (opt_attribute_target_specifier): Remove production
32415         (attribute_section): Modify production to use 2 different rules to 
32416         achieve the same thing. 1 s/r conflict down !
32417         Clean out commented, useless, non-reducing dimension_separator rules.
32418
32419         * class.cs (TypeContainer.attributes): New member to hold list
32420         of attributes for a type.
32421         (Struct::Struct): Modify to take one more argument, the attribute list.
32422         (Class::Class): Ditto.
32423         (Field::Field): Ditto.
32424         (Method::Method): Ditto.
32425         (Property::Property): Ditto.
32426
32427         * cs-parser.jay (struct_declaration): Update constructor call to
32428         pass in the attributes too.
32429         (class_declaration): Ditto.
32430         (constant_declaration): Ditto.
32431         (field_declaration): Ditto.
32432         (method_header): Ditto.
32433         (fixed_parameter): Ditto.
32434         (parameter_array): Ditto.
32435         (property_declaration): Ditto.
32436
32437         * constant.cs (Constant::Constant): Update constructor similarly.
32438         Use System.Collections.
32439
32440         * parameter.cs (Parameter::Parameter): Update as above.
32441
32442 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32443
32444         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
32445         (TypeContainer.delegates): New member to hold list of delegates.
32446
32447         * cs-parser.jay (delegate_declaration): Implement the action correctly 
32448         this time as I seem to be on crack ;-)
32449
32450 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
32451
32452         * rootcontext.cs (RootContext::IsNamespace): new function, used to
32453         tell whether an identifier represents a namespace.
32454
32455         * expression.cs (NamespaceExpr): A namespace expression, used only
32456         temporarly during expression resolution.
32457         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
32458         utility functions to resolve names on expressions.
32459
32460 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
32461
32462         * codegen.cs: Add hook for StatementExpressions. 
32463
32464         * class.cs: Fix inverted test for static flag in methods.
32465
32466 2001-09-02  Ravi Pratap  <ravi@ximian.com>
32467
32468         * class.cs (Operator::CheckUnaryOperator): Correct error number used
32469         to make it coincide with MS' number.
32470         (Operator::CheckBinaryOperator): Ditto.
32471
32472         * ../errors/errors.txt : Remove error numbers added earlier.
32473
32474         * ../errors/cs1019.cs : Test case for error # 1019
32475
32476         * ../errros/cs1020.cs : Test case for error # 1020
32477
32478         * cs-parser.jay : Clean out commented cruft.
32479         (dimension_separators, dimension_separator): Comment out. Ostensibly not
32480         used anywhere - non-reducing rule.
32481         (namespace_declarations): Non-reducing rule - comment out.
32482
32483         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
32484         with TypeContainer::AddEnum.
32485
32486         * delegate.cs : New file for delegate handling classes.
32487         (Delegate): Class for declaring delegates.
32488
32489         * makefile : Update.
32490
32491         * cs-parser.jay (delegate_declaration): Implement.
32492
32493 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
32494
32495         * class.cs (Event::Define): Implement.
32496         (Event.EventBuilder): New member.
32497
32498         * class.cs (TypeContainer::Populate): Update to define all enums and events
32499         we have.
32500         (Events): New property for the events arraylist we hold. Shouldn't we move to using
32501         readonly fields for all these cases ?
32502
32503 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32504
32505         * class.cs (Property): Revamp to use the convention of making fields readonly.
32506         Accordingly modify code elsewhere.
32507
32508         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
32509         the Define method of the Property class.
32510
32511         * class.cs : Clean up applied patch and update references to variables etc. Fix 
32512         trivial bug.
32513         (TypeContainer::Populate): Update to define all the properties we have. Also
32514         define all enumerations.
32515
32516         * enum.cs (Define): Implement.
32517
32518 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
32519
32520         * cs-parser.jay (overloadable_operator): The semantic value is an
32521         enum of the Operator class.
32522         (operator_declarator): Implement actions.
32523         (operator_declaration): Implement.
32524
32525         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
32526         validity of definitions.
32527         (Operator::CheckBinaryOperator): Static method to check for binary operators
32528         (TypeContainer::AddOperator): New method to add an operator to a type.
32529
32530         * cs-parser.jay (indexer_declaration): Added line to actually call the
32531         AddIndexer method so it gets added ;-)
32532
32533         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
32534         already taken care of by the MS compiler ?  
32535
32536 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32537
32538         * class.cs (Operator): New class for operator declarations.
32539         (Operator::OpType): Enum for the various operators.
32540
32541 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
32542
32543         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
32544         ostensibly handle this in semantic analysis.
32545
32546         * cs-parser.jay (general_catch_clause): Comment out
32547         (specific_catch_clauses, specific_catch_clause): Ditto.
32548         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
32549         (catch_args, opt_catch_args): New productions.
32550         (catch_clause): Rewrite to use the new productions above
32551         (catch_clauses): Modify accordingly.
32552         (opt_catch_clauses): New production to use in try_statement
32553         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
32554         and re-write the code in the actions to extract the specific and
32555         general catch clauses by being a little smart ;-)
32556
32557         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
32558         Hooray, try and catch statements parse fine !
32559
32560 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32561
32562         * statement.cs (Block::GetVariableType): Fix logic to extract the type
32563         string from the hashtable of variables.
32564
32565         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
32566         I end up making that mistake ;-)
32567         (catch_clauses): Fixed gross error which made Key and Value of the 
32568         DictionaryEntry the same : $1 !!
32569
32570 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32571
32572         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
32573
32574         * cs-parser.jay (event_declaration): Correct to remove the semicolon
32575         when the add and remove accessors are specified. 
32576
32577 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
32578
32579         * cs-parser.jay (IndexerDeclaration): New helper class to hold
32580         information about indexer_declarator.
32581         (indexer_declarator): Implement actions.
32582         (parsing_indexer): New local boolean used to keep track of whether
32583         we are parsing indexers or properties. This is necessary because 
32584         implicit_parameters come into picture even for the get accessor in the 
32585         case of an indexer.
32586         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
32587
32588         * class.cs (Indexer): New class for indexer declarations.
32589         (TypeContainer::AddIndexer): New method to add an indexer to a type.
32590         (TypeContainer::indexers): New member to hold list of indexers for the
32591         type.
32592
32593 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32594
32595         * cs-parser.jay (add_accessor_declaration): Implement action.
32596         (remove_accessor_declaration): Implement action.
32597         (event_accessors_declaration): Implement
32598         (variable_declarators): swap statements for first rule - trivial.
32599
32600         * class.cs (Event): New class to hold information about event
32601         declarations.
32602         (TypeContainer::AddEvent): New method to add an event to a type
32603         (TypeContainer::events): New member to hold list of events.
32604
32605         * cs-parser.jay (event_declaration): Implement actions.
32606
32607 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
32608
32609         * cs-parser.jay (dim_separators): Implement. Make it a string
32610         concatenating all the commas together, just as they appear.
32611         (opt_dim_separators): Modify accordingly
32612         (rank_specifiers): Update accordingly. Basically do the same
32613         thing - instead, collect the brackets here.
32614         (opt_rank_sepcifiers): Modify accordingly.
32615         (array_type): Modify to actually return the complete type string
32616         instead of ignoring the rank_specifiers.
32617         (expression_list): Implement to collect the expressions
32618         (variable_initializer): Implement. We make it a list of expressions
32619         essentially so that we can handle the array_initializer case neatly too.
32620         (variable_initializer_list): Implement.
32621         (array_initializer): Make it a list of variable_initializers
32622         (opt_array_initializer): Modify accordingly.
32623
32624         * expression.cs (New::NType): Add enumeration to help us
32625         keep track of whether we have an object/delegate creation
32626         or an array creation.
32627         (New:NewType, New::Rank, New::Indices, New::Initializers): New
32628         members to hold data about array creation.
32629         (New:New): Modify to update NewType
32630         (New:New): New Overloaded contructor for the array creation
32631         case.
32632
32633         * cs-parser.jay (array_creation_expression): Implement to call
32634         the overloaded New constructor.
32635
32636 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
32637
32638         * class.cs (TypeContainer::Constructors): Return member
32639         constructors instead of returning null.
32640
32641 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
32642
32643         * typemanager.cs (InitCoreTypes): Initialize the various core
32644         types after we have populated the type manager with the user
32645         defined types (this distinction will be important later while
32646         compiling corlib.dll)
32647
32648         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
32649         on Expression Classification.  Now all expressions have a method
32650         `Resolve' and a method `Emit'.
32651
32652         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
32653         generation from working.     Also add some temporary debugging
32654         code. 
32655
32656 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
32657
32658         * codegen.cs: Lots of code generation pieces.  This is only the
32659         beginning, will continue tomorrow with more touches of polish.  We
32660         handle the fundamentals of if, while, do, for, return.  Others are
32661         trickier and I need to start working on invocations soon.
32662
32663         * gen-treedump.cs: Bug fix, use s.Increment here instead of
32664         s.InitStatement. 
32665
32666         * codegen.cs (EmitContext): New struct, used during code
32667         emission to keep a context.   Most of the code generation will be
32668         here. 
32669
32670         * cs-parser.jay: Add embedded blocks to the list of statements of
32671         this block.  So code generation proceeds in a top down fashion.
32672
32673 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
32674
32675         * statement.cs: Add support for multiple child blocks.
32676
32677 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
32678
32679         * codegen.cs (EmitCode): New function, will emit the code for a
32680         Block of code given a TypeContainer and its ILGenerator. 
32681
32682         * statement.cs (Block): Standard public readonly optimization.
32683         (Block::Block constructors): Link children. 
32684         (Block::Child): Child Linker.
32685         (Block::EmitVariables): Emits IL variable declarations.
32686
32687         * class.cs: Drop support for MethodGroups here, delay until
32688         Semantic Analysis.
32689         (Method::): Applied the same simplification that I did before, and
32690         move from Properties to public readonly fields.
32691         (Method::ParameterTypes): Returns the parameter types for the
32692         function, and implements a cache that will be useful later when I
32693         do error checking and the semantic analysis on the methods is
32694         performed.
32695         (Constructor::GetCallingConvention): Renamed from CallingConvetion
32696         and made a method, optional argument tells whether this is a class
32697         or a structure to apply the `has-this' bit.
32698         (Method::GetCallingConvention): Implement, returns the calling
32699         convention. 
32700         (Method::Define): Defines the type, a second pass is performed
32701         later to populate the methods.
32702
32703         (Constructor::ParameterTypes): implement a cache similar to the
32704         one on Method::ParameterTypes, useful later when we do semantic
32705         analysis. 
32706
32707         (TypeContainer::EmitMethod):  New method.  Emits methods.
32708
32709         * expression.cs: Removed MethodGroup class from here.
32710
32711         * parameter.cs (Parameters::GetCallingConvention): new method.
32712
32713 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
32714
32715         * class.cs (TypeContainer::Populate): Drop RootContext from the
32716         argument. 
32717
32718         (Constructor::CallingConvention): Returns the calling convention.
32719         (Constructor::ParameterTypes): Returns the constructor parameter
32720         types. 
32721
32722         (TypeContainer::AddConstructor): Keep track of default constructor
32723         and the default static constructor.
32724
32725         (Constructor::) Another class that starts using `public readonly'
32726         instead of properties. 
32727
32728         (Constructor::IsDefault): Whether this is a default constructor. 
32729
32730         (Field::) use readonly public fields instead of properties also.
32731
32732         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
32733         track of static constructors;  If none is used, turn on
32734         BeforeFieldInit in the TypeAttributes. 
32735
32736         * cs-parser.jay (opt_argument_list): now the return can be null
32737         for the cases where there are no arguments. 
32738
32739         (constructor_declarator): If there is no implicit `base' or
32740         `this', then invoke the default parent constructor. 
32741
32742         * modifiers.cs (MethodAttr): New static function maps a set of
32743         modifiers flags into a MethodAttributes enum
32744         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
32745         MethodAttr, TypeAttr to represent the various mappings where the
32746         modifiers are used.
32747         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
32748
32749 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
32750
32751         * parameter.cs (GetParameterInfo): Fix bug where there would be no
32752         method arguments.
32753
32754         * interface.cs (PopulateIndexer): Implemented the code generator
32755         for interface indexers.
32756
32757 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
32758
32759         * interface.cs (InterfaceMemberBase): Now we track the new status
32760         here.  
32761
32762         (PopulateProperty): Implement property population.  Woohoo!  Got
32763         Methods and Properties going today. 
32764
32765         Removed all the properties for interfaces, and replaced them with
32766         `public readonly' fields. 
32767
32768 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
32769
32770         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
32771         initialize their hashtables/arraylists only when they are needed
32772         instead of doing this always.
32773
32774         * parameter.cs: Handle refs and out parameters.
32775
32776         * cs-parser.jay: Use an ArrayList to construct the arguments
32777         instead of the ParameterCollection, and then cast that to a
32778         Parameter[] array.
32779
32780         * parameter.cs: Drop the use of ParameterCollection and use
32781         instead arrays of Parameters.
32782
32783         (GetParameterInfo): Use the Type, not the Name when resolving
32784         types. 
32785
32786 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
32787
32788         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
32789         and instead use public readonly fields.
32790
32791         * class.cs: Put back walking code for type containers.
32792
32793 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
32794
32795         * class.cs (MakeConstant): Code to define constants.
32796
32797         * rootcontext.cs (LookupType): New function.  Used to locate types 
32798
32799
32800 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
32801
32802         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
32803         this System.Reflection code is.  Kudos to Microsoft
32804
32805         * typemanager.cs: Implement a type cache and avoid loading all
32806         types at boot time.  Wrap in LookupType the internals.  This made
32807         the compiler so much faster.  Wow.  I rule!
32808
32809         * driver.cs: Make sure we always load mscorlib first (for
32810         debugging purposes, nothing really important).
32811
32812         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
32813         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
32814
32815         * rootcontext.cs: Lookup types on their namespace;  Lookup types
32816         on namespaces that have been imported using the `using' keyword.
32817
32818         * class.cs (TypeContainer::TypeAttr): Virtualize.
32819         (Class::TypeAttr): Return attributes suitable for this bad boy.
32820         (Struct::TypeAttr): ditto.
32821         Handle nested classes.
32822         (TypeContainer::) Remove all the type visiting code, it is now
32823         replaced with the rootcontext.cs code
32824
32825         * rootcontext.cs (GetClassBases): Added support for structs. 
32826
32827 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
32828
32829         * interface.cs, statement.cs, class.cs, parameter.cs,
32830         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
32831         Drop use of TypeRefs, and use strings instead.
32832
32833 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
32834
32835         * rootcontext.cs: 
32836
32837         * class.cs (Struct::Struct): set the SEALED flags after
32838         checking the modifiers.
32839         (TypeContainer::TypeAttr): new property, returns the
32840         TypeAttributes for a class.  
32841
32842         * cs-parser.jay (type_list): Oops, list production was creating a
32843         new list of base types.
32844
32845         * rootcontext.cs (StdLib): New property.
32846         (GetInterfaceTypeByName): returns an interface by type name, and
32847         encapsulates error handling here.
32848         (GetInterfaces): simplified.
32849         (ResolveTree): Encapsulated all the tree resolution here.
32850         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
32851         types. 
32852
32853         * driver.cs: Add support for --nostdlib, to avoid loading the
32854         default assemblies.
32855         (Main): Do not put tree resolution here. 
32856
32857         * rootcontext.cs: Beginning of the class resolution.
32858
32859 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
32860
32861         * rootcontext.cs: Provide better error reporting. 
32862
32863         * cs-parser.jay (interface_base): set our $$ to be interfaces.
32864
32865         * rootcontext.cs (CreateInterface): Handle the case where there
32866         are no parent interfaces.
32867
32868         (CloseTypes): Routine to flush types at the end.
32869         (CreateInterface): Track types.
32870         (GetInterfaces): Returns an array of Types from the list of
32871         defined interfaces.
32872
32873         * typemanager.c (AddUserType): Mechanism to track user types (puts
32874         the type on the global type hash, and allows us to close it at the
32875         end). 
32876
32877 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
32878
32879         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
32880         RecordInterface instead.
32881
32882         * cs-parser.jay: Updated to reflect changes above.
32883
32884         * decl.cs (Definition): Keep track of the TypeBuilder type that
32885         represents this type here.  Not sure we will use it in the long
32886         run, but wont hurt for now.
32887
32888         * driver.cs: Smaller changes to accomodate the new code.
32889
32890         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
32891         when done. 
32892
32893         * rootcontext.cs (CreateInterface):  New method, used to create
32894         the System.TypeBuilder type for interfaces.
32895         (ResolveInterfaces): new entry point to resolve the interface
32896         hierarchy. 
32897         (CodeGen): Property, used to keep track of the code generator.
32898
32899 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
32900
32901         * cs-parser.jay: Add a second production for delegate_declaration
32902         with `VOID'.
32903
32904         (enum_body): Put an opt_comma here instead of putting it on
32905         enum_body or enum_member_declarations so we can handle trailing
32906         commas on enumeration members.  Gets rid of a shift/reduce.
32907
32908         (type_list): Need a COMMA in the middle.
32909
32910         (indexer_declaration): Tell tokenizer to recognize get/set
32911
32912         * Remove old targets.
32913
32914         * Re-add the parser target.
32915
32916 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32917
32918         * cs-parser.jay: Add precendence rules for a number of operators
32919         ot reduce the number of shift/reduce conflicts in the grammar.
32920
32921 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
32922
32923         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
32924         and put it here.
32925
32926         Get rid of old crufty code.
32927
32928         * rootcontext.cs: Use this to keep track of the parsed
32929         representation and the defined types available to the program. 
32930
32931         * gen-treedump.cs: adjust for new convention.
32932
32933         * type.cs: Split out the type manager, and the assembly builder
32934         from here. 
32935
32936         * typemanager.cs: the type manager will live here now.
32937
32938         * cil-codegen.cs: And the code generator here. 
32939
32940 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
32941
32942         * makefile: Fixed up for easy making.
32943
32944 2001-07-13  Simon Cozens <simon@simon-cozens.org>
32945
32946         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
32947         the 
32948
32949         (unary_expression): Expand pre_increment_expression and
32950         post_decrement_expression to reduce a shift/reduce.
32951
32952 2001-07-11  Simon Cozens
32953
32954         * cs-tokenizer.cs: Hex numbers should begin with a 0.
32955
32956         Improve allow_keyword_as_indent name.
32957
32958 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
32959
32960         * Adjustments for Beta2. 
32961
32962 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
32963
32964         * decl.cs: Added `Define' abstract method.
32965         (InTransit): new property, used to catch recursive definitions. 
32966
32967         * interface.cs: Implement `Define'. 
32968
32969         * modifiers.cs: Map Modifiers.constants to
32970         System.Reflection.TypeAttribute flags.
32971
32972         * class.cs: Keep track of types and user-defined types.
32973         (BuilderInit): New method for creating an assembly
32974         (ResolveType): New function to launch the resolution process, only
32975         used by interfaces for now.
32976
32977         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
32978         that are inserted into the name space. 
32979
32980 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
32981
32982         * ARGH.  I have screwed up my tree so many times due to the use of
32983         rsync rather than using CVS.  Going to fix this at once. 
32984
32985         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
32986         load types.
32987
32988 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
32989
32990         * Experiment successful: Use System.Type rather that our own
32991         version of Type.  
32992
32993 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
32994
32995         * cs-parser.jay: Removed nsAliases from here.
32996
32997         Use new namespaces, handle `using XXX;' 
32998
32999         * namespace.cs: Reimplemented namespace handling, use a recursive
33000         definition of the class.  Now we can keep track of using clauses
33001         and catch invalid using clauses.
33002
33003 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33004
33005         * gen-treedump.cs: Adapted for all the renaming.
33006
33007         * expression.cs (Expression): this class now has a Type property
33008         which returns an expression Type.
33009
33010         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33011         `Type', as this has a different meaning now in the base
33012
33013 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33014
33015         * interface.cs, class.cs: Removed from all the sources the
33016         references to signature computation, as we can not do method
33017         signature computation during the parsing time, as we are not
33018         trying to solve at that point distinguishing:
33019
33020         class X {
33021                 void a (Blah x) {}
33022                 void a (NS.Blah x) {}
33023         }
33024
33025         Which depending on the context might be valid or not, as we do not
33026         know if Blah is the same thing as NS.Blah at that point.
33027
33028         * Redid everything so the code uses TypeRefs now instead of
33029         Types.  TypeRefs are just temporary type placeholders, that need
33030         to be resolved.  They initially have a pointer to a string and the
33031         current scope in which they are used.  This is used later by the
33032         compiler to resolve the reference to an actual Type. 
33033
33034         * DeclSpace is no longer a CIR.Type, and neither are
33035         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33036         are all DeclSpaces, but no Types. 
33037
33038         * type.cs (TypeRefManager): This implements the TypeRef manager,
33039         which keeps track of all the types that need to be resolved after
33040         the parsing has finished. 
33041
33042 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33043
33044         * ARGH.  We are going to have to store `foreach' as a class rather
33045         than resolving it, as we need to verify error 1579 after name
33046         resolution.   *OR* we could keep a flag that says `This request to
33047         IEnumerator comes from a foreach statement' which we can then use
33048         to generate the error.
33049
33050 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33051
33052         * class.cs (TypeContainer.AddMethod): we now add methods to the
33053         MethodGroup instead of the method hashtable.  
33054
33055         * expression.cs: Add MethodGroup abstraction, which gets us one
33056         step closer to the specification in the way we handle method
33057         declarations.  
33058
33059         * cs-parser.jay (primary_expression): qualified_identifier now
33060         tried to match up an identifier to a local variable reference or
33061         to a parameter reference.
33062
33063         current_local_parameters is now a parser global variable that
33064         points to the current parameters for the block, used during name
33065         lookup.
33066
33067         (property_declaration): Now creates an implicit `value' argument to
33068         the set accessor.
33069
33070 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33071
33072         * parameter.cs: Do not use `param' arguments as part of the
33073         signature, per the spec.
33074
33075 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33076
33077         * decl.cs: Base class for classes, structs and interfaces.  This
33078         is the "Declaration Space" 
33079
33080         * cs-parser.jay: Use CheckDef for checking declaration errors
33081         instead of having one on each function.
33082
33083         * class.cs: Factor out some code for handling error handling in
33084         accordance to the "Declarations" section in the "Basic Concepts"
33085         chapter in the ECMA C# spec.
33086
33087         * interface.cs: Make all interface member classes derive from
33088         InterfaceMemberBase.
33089
33090 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33091
33092         * Many things: all interfaces are parsed and generated in
33093         gen-treedump.  Support for member variables, constructors,
33094         destructors, properties, constants is there.
33095
33096         Beginning of the IL backend, but very little done, just there for
33097         testing purposes. 
33098
33099 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33100
33101         * cs-parser.jay: Fix labeled statement.
33102
33103         * cs-tokenizer.cs (escape): Escape " and ' always.
33104         ref_line, ref_name: keep track of the line/filename as instructed
33105         by #line by the compiler.
33106         Parse #line.
33107
33108 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33109
33110         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33111         to match the values in System.CodeDOM.
33112
33113         Divid renamed to Divide.
33114
33115         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33116         statements. 
33117         (Statements.set): remove.
33118
33119         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33120         statements. 
33121
33122         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33123         falseStatements always have valid values. 
33124
33125         * cs-parser.jay: Use System.CodeDOM now.
33126