2010-07-05 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-07-05  Marek Safar  <marek.safar@gmail.com>
2
3         * membercache.cs, class.cs: Don't use base member to check for
4         property or indexer base implementation.
5
6 2010-07-03  Marek Safar  <marek.safar@gmail.com>
7
8         * membercache.cs: Copy Membercache member state flags for 2 stage
9         inflate (Fixes #619555).
10         
11         * ecore.cs: Use resolved accessors everywhere.
12         
13 2010-07-02  Marek Safar  <marek.safar@gmail.com>
14
15         A fix for bug #360820
16         * membercache.cs, property.cs: Check accessors of base property and
17         not the closest one.
18
19 2010-07-02  Marek Safar  <marek.safar@gmail.com>
20
21         * modifiers.cs, membercache.cs, import.cs, class.cs: Moved imported
22         override method checks into import.
23
24         * expression.cs: Removed redundant check.
25
26 2010-06-30  Marek Safar  <marek.safar@gmail.com>
27
28         * nullable.cs, expression.cs, statement.cs, method.cs, ecore.cs,
29         delegate.cs, cs-parser.jay, visit.cs: Use MemberAccess to resolve
30         base access expression, it has all bits done correctly.
31
32 2010-06-30  Marek Safar  <marek.safar@gmail.com>
33
34         * support.cs: Removed unused code.
35         
36         * ecore.cs: Don't use memberlookup for operators.
37
38 2010-06-30  Marek Safar  <marek.safar@gmail.com>
39
40         * typemanager.cs, membercache.cs, convert.cs, expression.cs,
41         ecore.cs: Replace remaining MethodLookup with correct user operator
42         lookup (to do correct deep lookup). Clean up most of outstanding
43         quirks in binary operator overload resolution.
44
45 2010-06-29  Marek Safar  <marek.safar@gmail.com>
46
47         * import.cs: Operators must have between 1 and 2 parameters.
48         
49         * method.cs: Switch destructor to direct membercache lookup
50
51 2010-06-29  Marek Safar  <marek.safar@gmail.com>
52
53         * driver.cs, expression.cs: Use Membercache for StringConcat when
54         it got all what is needed.
55
56 2010-06-29  Marek Safar  <marek.safar@gmail.com>
57
58         * membercache.cs, expression.cs, statement.cs, doc.cs, ecore.cs:
59         Changed FindMembers to allocate a new list only when a filter is
60         used. Saves decent chunk of memory and should save even more in the
61         future when the filter is not used that often.
62
63 2010-06-28  Marek Safar  <marek.safar@gmail.com>
64
65         * field.cs, property.cs, assign.cs, const.cs, expression.cs,
66         ecore.cs, class.cs, cs-parser.jay, enum.cs: Don't use intermediate
67         structure for simple type fields (saves memory and makes few things
68         simpler). Clean up some hacks mostly for events.
69
70 2010-06-25  Marek Safar  <marek.safar@gmail.com>
71
72         * statement.cs, cs-parser.jay: Don't create expensive block for
73         simple statements.
74
75 2010-06-24  Marek Safar  <marek.safar@gmail.com>
76
77         * statement.cs, report.cs: Rethrow internal error when reporting is
78         disabled.
79         
80         * ecore.cs: Check for identical name only when simple name is set.
81         Fixes #616667
82
83 2010-06-24  Marek Safar  <marek.safar@gmail.com>
84
85         A fix for bug #616809
86         * generic.cs, expression.cs, ecore.cs: Added a new type expression
87         for open generic type to pass unbound type arguments to typeof
88         expression.
89
90 2010-06-24  Marek Safar  <marek.safar@gmail.com>
91
92         * statement.cs: Foreach collection implementation refactoring to
93         search for GetEnumerator more preciselly. Fixes #431453 and more
94         unreported bugs.
95
96         * linq.cs, decl.cs, ecore.cs, delegate.cs: Update methodgroup api.
97
98 2010-06-23  Marek Safar  <marek.safar@gmail.com>
99
100         * cs-parser.jay: Track more locations.
101
102 2010-06-22  Marek Safar  <marek.safar@gmail.com>
103
104         * cs-tokenizer.cs, location.cs, cs-parser.jay: Track more locations.
105
106 2010-06-18  Marek Safar  <marek.safar@gmail.com>
107
108         * cs-tokenizer.cs, anonymous.cs, expression.cs, statement.cs,
109         support.cs, location.cs, cs-parser.jay: Some work on full ast mode.
110
111 2010-06-18  Marek Safar  <marek.safar@gmail.com>
112
113         * convert.cs, typespec.cs, method.cs: Fixed few more dynamic
114         conversion.
115
116 2010-06-18  Marek Safar  <marek.safar@gmail.com>
117
118         * typemanager.cs, namespace.cs: Report more predefined types and
119         imported types collision types as a warning.
120         Fixes #537414, #601157
121
122 2010-06-18  Marek Safar  <marek.safar@gmail.com>
123
124         * generic.cs: Overrides base method constraint can use method type
125         parameter.
126
127         * import.cs: Removed redundant cache.
128         
129 2010-06-17  Marek Safar  <marek.safar@gmail.com>
130
131         * generic.cs: Propagate type only inflate downwards.
132
133 2010-06-17  Marek Safar  <marek.safar@gmail.com>
134
135         A fix for bug #614955
136         * method.cs: Do not reject binary dynamic operators.
137
138 2010-06-17  Marek Safar  <marek.safar@gmail.com>
139
140         * typespec.cs: Internal types have no generic parameters.
141         Fixes #615022.
142
143 2010-06-17  Marek Safar  <marek.safar@gmail.com>
144
145         A fix for bug #614955
146         * cs-parser.jay: Correctly set expression mode for default parameter
147         values.
148
149 2010-06-17  Marek Safar  <marek.safar@gmail.com>
150
151         A fix for bug #615023
152         * ecore.cs: Resolve dynamic namespace and keyword collision in the
153         favour of the keyword.
154
155 2010-06-17  Marek Safar  <marek.safar@gmail.com>
156
157         A fix for bug #614917
158         * convert.cs: Allow more undocumented 0 like values to enum type 
159         conversions.
160
161 2010-06-17  Marek Safar  <marek.safar@gmail.com>
162
163         * generic.cs, method.cs: Inflate copied type parameters from base
164         class or explicit interfaces.
165         
166         * convert.cs: Fixed conversion between two type parameters.
167         Fixes #614471
168
169 2010-06-16  Marek Safar  <marek.safar@gmail.com>
170
171         * membercache.cs, convert.cs: Correctly resize an array used by
172         GetUserOperator.
173
174 2010-06-15  Marek Safar  <marek.safar@gmail.com>
175
176         A fix for bug #599601
177         * dynamic.cs, ecore.cs: A new flag for dynamic resolver to ignore
178         generated member access left expression.
179         
180 2010-06-16  Marek Safar  <marek.safar@gmail.com>
181
182         * expression.cs: Dispatch dynamic invocation solely on left
183         expression type.
184
185 2010-06-16  Marek Safar  <marek.safar@gmail.com>
186
187         * expression.cs, statement.cs: Always persist explicit cast
188         semantic at expression level.
189         
190 2010-06-15  Marek Safar  <marek.safar@gmail.com>
191
192         * expression.cs, attribute.cs: Enable generic type parameters
193         attribute check.
194         
195 2010-06-15  Marek Safar  <marek.safar@gmail.com>
196
197         A fix for bug #612146
198         * generic.cs: Don't use fixed array for inflated type parameter
199         interface constraints.
200         
201 2010-06-15  Marek Safar  <marek.safar@gmail.com>
202
203         * typespec.cs: ElementTypeSpec has to use its own ITypeDefinition.
204         
205         * report.cs: Unwrap elements for related symbols reporting.
206
207 2010-06-15  Marek Safar  <marek.safar@gmail.com>
208
209         A fix for bug #612796
210         * cs-tokenizer.cs: Offset correctly keywords the first character
211         comparison.
212         
213 2010-06-15  Marek Safar  <marek.safar@gmail.com>
214
215         A fix for bug #613397
216         * expression.cs: Removed too aggressive object initializers
217         optimization.
218         
219 2010-06-15  Marek Safar  <marek.safar@gmail.com>
220         
221         * parameter.cs, property.cs, membercache.cs, decl.cs, iterators.cs,
222         anonymous.cs, expression.cs, support.cs, method.cs, pending.cs,
223         class.cs, cs-parser.jay: Simplify parsing of accessors by removing
224         any intermediate steps and fake nodes, also saves few MBs of memory.
225
226 2010-06-11  Marek Safar  <marek.safar@gmail.com>
227         
228         * modifiers.cs, rootcontext.cs, location.cs, cs-parser.jay: More
229         precise modifiers parsing.
230
231 2010-06-09  Marek Safar  <marek.safar@gmail.com>
232
233         * cs-tokenizer.cs, anonymous.cs, expression.cs, cs-parser.jay:
234         Fixed few shift/reduce conflicts.
235
236 2010-06-09  Marek Safar  <marek.safar@gmail.com>
237
238         * typemanager.cs, parameter.cs, dynamic.cs, typespec.cs,
239         expression.cs, ecore.cs, cs-parser.jay: Fully parse composed type
240         specifiers and stop using string in AST.
241
242 2010-06-07  Marek Safar  <marek.safar@gmail.com>
243
244         * typemanager.cs, eval.cs, iterators.cs, anonymous.cs, expression.cs
245         method.cs, class.cs, delegate.cs, cs-parser.jay, driver.cs, visit.cs
246         enum.cs: Hold location of predefined types.
247
248 2010-06-07  Marek Safar  <marek.safar@gmail.com>
249
250         A fix for bug #610878
251         * pending.cs: Clone cached list before modifying.
252
253 2010-06-04  Marek Safar  <marek.safar@gmail.com>
254
255         * convert.cs, typespec.cs, expression.cs: Start using array member
256         kind for better conversion checks.
257         
258         * import.cs, report.cs: Report better error message for runtime
259         reflection bugs.
260
261 2010-06-04  Marek Safar  <marek.safar@gmail.com>
262
263         * membercache.cs, convert.cs, nullable.cs, expression.cs: Optimize
264         user defined conversion probing and simplify user conversion for
265         nullabe types. Fixes #610940.
266
267 2010-06-03  Marek Safar  <marek.safar@gmail.com>
268
269         A fix for bug #610919
270         * parameter.cs, property.cs, cs-parser.jay: Use independent implicit
271         parameters for explicit event accessors. Anonymous method capturing
272         won't otherwise work for event implicit parameter.
273
274 2010-06-02  Marek Safar  <marek.safar@gmail.com>
275
276         A fix for bug #610088
277         * nullable.cs, expression.cs, statement.cs, method.cs, ecore.cs:
278         Ignore overrides for base overload resolution as for non-base
279         expressions and convert the best candidate to closest override
280         afterwards.
281
282 2010-06-01  Marek Safar  <marek.safar@gmail.com>
283
284         A fix for bug #610139
285         * generic.cs, convert.cs: Recursively check effective base interface
286
287 2010-06-01  Marek Safar  <marek.safar@gmail.com>
288
289         * statement.cs: Handle nullable types and type parameters in using
290         statement, avoid boxing value types. Also fixes #571010
291
292 2010-06-01  Marek Safar  <marek.safar@gmail.com>
293
294         * convert.cs, expression.cs: Emit unbox for underlying nullable
295         type boxing cast.
296
297 2010-05-29  Marek Safar  <marek.safar@gmail.com>
298
299         A fix for bug #610126
300         * expression.cs: Don't use branch optimization for types bigger than
301         int.
302
303 2010-05-28  Marek Safar  <marek.safar@gmail.com>
304
305         A fix for bug #609088
306         * import.cs: Check private modifier correctly.
307
308 2010-05-28  Marek Safar  <marek.safar@gmail.com>
309
310         A fix for bug #609049
311         * ecore.cs: Don't ignore override methods when looking for base
312         member.
313
314 2010-05-27  Marek Safar  <marek.safar@gmail.com>
315
316         A fix for bugs #608007, #572540, #566130, #476358
317
318         * generic.cs, linq.cs, expression.cs, statement.cs, cs-parser.jay:
319         More tricky refactoring of implicit linq blocks.
320         
321 2010-05-25  Marek Safar  <marek.safar@gmail.com>
322
323         * linq.cs, cs-parser.jay: Keep location for all linq clauses.
324
325 2010-05-25  Marek Safar  <marek.safar@gmail.com>
326
327         * context.cs, expression.cs, cs-parser.jay: Don't store current
328         block in This expression (it's too early for linq blocks).
329
330 2010-05-21  Marek Safar  <marek.safar@gmail.com>
331
332         * expression.cs: Use constrained prefix more broadly to avoid boxing.
333
334 2010-05-20  Marek Safar  <marek.safar@gmail.com>
335
336         A fix for bug #591149
337         * nullable.cs: Don't double wrap same expression.
338         
339 2010-05-20  Marek Safar  <marek.safar@gmail.com>
340
341         A fix for bug #569827
342         * anonymous.cs: Any issued error in probing mode means no match.
343
344 2010-05-20  Marek Safar  <marek.safar@gmail.com>
345
346         * expression.cs: Search for base indexer using the closest match
347         rule.
348
349 2010-05-20  Marek Safar  <marek.safar@gmail.com>
350
351         A fix for bug #572071
352         * method.cs: Set override constraints using unexpanded interface
353         list.
354
355 2010-05-20  Marek Safar  <marek.safar@gmail.com>
356
357         A fix for bug #572071
358         * ecore.cs: Include secondary extension method lookup in probing
359         mode.
360
361 2010-05-19  Marek Safar  <marek.safar@gmail.com>
362
363         A fix for bug #515801
364         * typespec.cs (MayBecomeEqualGenericTypes): Recursively check
365         type arguments.
366
367 2010-05-19  Marek Safar  <marek.safar@gmail.com>
368
369         A fix for bug #515801
370         * pending.cs: Advance counter correctly.
371
372 2010-05-19  Marek Safar  <marek.safar@gmail.com>
373
374         A fix for bug #480139
375         * method.cs, pending.cs: Indexer override uses base name.
376         
377 2010-05-19  Marek Safar  <marek.safar@gmail.com>
378
379         A fix for bug #424064
380         * generic.cs: Replace original with inflated type parameter on
381         failure.
382
383 2010-05-19  Marek Safar  <marek.safar@gmail.com>
384
385         A fix for bug #359733
386         * parameter.cs: Extension attribute can be defined in each assembly.
387
388 2010-05-18  Marek Safar  <marek.safar@gmail.com>
389
390         A fix for bug #446507
391         * method.cs: Only one method can implement an interface.
392
393 2010-05-18  Marek Safar  <marek.safar@gmail.com>
394
395         A fix for bug #594905
396         * convert.cs, constant.cs, expression.cs, literal.cs, ecore.cs:
397         Typed null can be used as a source for expression methods.
398
399 2010-05-18  Marek Safar  <marek.safar@gmail.com>
400
401         A fix for bug #606551
402         * namespace.cs: Using directive imports only types and not nested
403         namespaces.
404
405 2010-05-17  Marek Safar  <marek.safar@gmail.com>
406
407         * typespec.cs, expression.cs, statement.cs, ecore.cs, complete.cs,
408         delegate.cs: Member instance is resolved after member overload
409         definitely resolves static/instance property of member expression.
410         Fixes #545047, #358848, #456605, #460016, #603299
411
412 2010-05-12  Marek Safar  <marek.safar@gmail.com>
413
414         A fix for bug #604981
415         * generic.cs, decl.cs, anonymous.cs: Reset more type arguments
416         details for nested anonymous methods stories.
417
418 2010-05-11  Marek Safar  <marek.safar@gmail.com>
419
420         A fix for bug #604735
421         * namespace.cs: Don't report namespace collision.
422
423 2010-05-11  Marek Safar  <marek.safar@gmail.com>
424
425         A fix for bug #604748
426         * class.cs, typespec.cs: Search full imported attribute hierarchy
427         for AttributeUsage.
428
429 2010-05-11  Marek Safar  <marek.safar@gmail.com>
430
431         * namespace.cs: Ignore missing dependencies failure at
432         initialization.
433
434 2010-05-11  Marek Safar  <marek.safar@gmail.com>
435
436         A fix for bug #604640
437         * namespace.cs: Don't resolve using constraints too early.
438
439 2010-05-11  Marek Safar  <marek.safar@gmail.com>
440
441         A fix for bug #604239
442         * generic.cs: Copy partial type constraints to partial container.
443
444 2010-05-10  Marek Safar  <marek.safar@gmail.com>
445
446         A fix for bug #557210
447         * import.cs: Relax underlying enum field rules.
448
449 2010-05-10  Marek Safar  <marek.safar@gmail.com>
450
451         A fix for bug #603476
452         * property.cs: Implement IParametersMember for indexer accessors.
453
454 2010-05-07  Marek Safar  <marek.safar@gmail.com>
455
456         A fix for bug #601141
457         * class.cs: Update all partial modifiers.
458
459 2010-05-06  Marek Safar  <marek.safar@gmail.com>
460
461         A fix for bug #601708
462         * method.cs, membercache.cs: Destructors cannot be hidden.
463
464 2010-05-06  Marek Safar  <marek.safar@gmail.com>
465
466         A fix for bug #602551
467         * class.cs: Resursive reference of type definition is allowed.
468
469 2010-05-06  Marek Safar  <marek.safar@gmail.com>
470
471         * anonymous.cs: Mutate cached storey instance types too.
472
473 2010-05-06  Marek Safar  <marek.safar@gmail.com>
474
475         A fix for bug #602443
476         * convert.cs: Explicit enum conversion cannot involve user operators
477
478 2010-05-05  Miguel de Icaza  <miguel@novell.com>
479
480         * class.cs (TypeContainer.DefineBaseTypes)
481         (TypeContainer.CheckRecursiveDefinition): check for the iface not
482         being null, as we could have failed resolution and crashed;
483         Fixes #442144
484
485         * cs-parser.jay: Productions to catch common mistakes when other
486         punctuation operators are used instead of comma.   Fixes 571702 
487
488 2010-05-05  Marek Safar  <marek.safar@gmail.com>
489
490         * anonymous.cs: Mutate correct set of constraints.
491
492 2010-05-05  Marek Safar  <marek.safar@gmail.com>
493
494         A fix for bug #602842
495         * expression.cs: Resolve all array bound arguments.
496
497 2010-05-05  Marek Safar  <marek.safar@gmail.com>
498
499         * import.cs: Don't import private fields.
500
501 2010-04-30  Marek Safar  <marek.safar@gmail.com>
502
503         Partially based on patch by <sami.lamti@gmail.com>
504
505         * eval.cs, ecore.cs: Fixed eval show methods.
506
507 2010-04-30  Marek Safar  <marek.safar@gmail.com>
508
509         * generic.cs, delegate.cs: Implement output type inference of
510         methodgroup now when the specification was cleared at least little
511         bit.
512
513 2010-04-29  Marek Safar  <marek.safar@gmail.com>
514
515         A fix for bug #575611
516         * class.cs: Fix recursive unmanaged recursice sruct check.
517         
518 2010-04-29  Marek Safar  <marek.safar@gmail.com>
519
520         A fix for bug #479776
521         * expression.cs: Implement typeof unbounded nested generic types.
522
523 2010-04-29  Marek Safar  <marek.safar@gmail.com>
524
525         A fix for bug #474953
526         * class.cs: Fix valid recursive base type definition.
527
528 2010-04-29  Marek Safar  <marek.safar@gmail.com>
529
530         A fix for bug #421737
531         * convert.cs, expression.cs: A boxing conversion exists from a
532         nullable-type to a reference type, if a boxing conversion exists
533         from the underlying non-nullable-value-type to the reference type.
534
535 2010-04-29  Marek Safar  <marek.safar@gmail.com>
536
537         A fix for bug #376875
538         * import.cs: Import volatile modifier.
539
540 2010-04-29  Marek Safar  <marek.safar@gmail.com>
541
542         A fix for bug #372412
543         * typespec.cs, expression.cs, codegen.cs: Emit readonly prefix for
544         generic arrays.
545
546 2010-04-29  Marek Safar  <marek.safar@gmail.com>
547
548         A fix for bug #568955
549         * statements.cs: Handle recursive scope initializers.
550
551 2010-04-28  Marek Safar  <marek.safar@gmail.com>
552
553         A fix for bug #566511
554         * anonymous.cs: Always get inflated version of hoisted variable
555         on generic type definition.
556
557 2010-04-28  Marek Safar  <marek.safar@gmail.com>
558
559         * import.cs, membercache.cs: Relax rules for valid properties.
560
561 2010-04-28  Marek Safar  <marek.safar@gmail.com>
562
563         * import.cs: Intern arrays used in generic arguments.
564
565 2010-04-28  Marek Safar  <marek.safar@gmail.com>
566
567         A fix for bug #600398
568         * convert.cs: Actually use effective base type for the comparison.
569
570 2010-04-28  Marek Safar  <marek.safar@gmail.com>
571
572         A fix for bug #600326
573         * ecore.cs: Pass arity to base member lookup.
574
575 2010-04-28  Marek Safar  <marek.safar@gmail.com>
576
577         A fix for bug #573385
578         * expression.cs: MemberAccess is of generic type based on right
579         arity length only.
580
581 2010-05-28  Marek Safar  <marek.safar@gmail.com>
582
583         * cs-tokenizer.cs: Made tab size configurable.
584
585 2010-05-27  Marek Safar  <marek.safar@gmail.com>
586
587         * attribute.cs: Ensure Obsolete members are defined before doing
588         ctor look-up.
589
590 2010-05-27  Marek Safar  <marek.safar@gmail.com>
591
592         * visit.cs: Add DOM visitor skeleton.
593         
594         * *.cs: Updated.
595
596 2010-05-27  Marek Safar  <marek.safar@gmail.com>
597
598         * attribute.cs, codegen.cs: Drop COMPILER_ACCESS hack.
599         
600 2010-05-27  Marek Safar  <marek.safar@gmail.com>
601
602         * *.cs: Major rewrite of compiler internals to better work with
603         unmodified System.Reflection.Emit. Some of the key changes are
604         - TypeSpec replaces reflection specific System.Type.
605         - All Type(TypeSpec) operations are now done in compiler therefore
606         no dependency on SRE to inflate generic members and types or to
607         query unclosed types.
608         - MemberCache is now the only and full hierarchical topology.
609         - Generic constraints are implemented properly.
610         - And as a bonus compilation is on average 30% faster.
611
612 2010-04-15  Jb Evain  <jbevain@novell.com>
613
614         * dmcs.exe.config: update the runtime version to .net 4.0 RTM.
615
616 2010-04-12  Marek Safar  <marek.safar@gmail.com>
617
618         * expression.cs, attribute.cs, parameter.cs: More attribute type
619         checks.
620
621 2010-04-12  Marek Safar  <marek.safar@gmail.com>
622
623         A fix for bug #593342
624
625         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
626         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
627         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
628         codegen.cs: Add custom attribute encoder to deal with unfinished
629         types and easier corlib bootstrap from its own types.
630
631 2010-03-26  Marek Safar  <marek.safar@gmail.com>
632
633         * cs-parser.jay: Report invalid constraint types.
634
635 2010-03-16  Jb Evain  <jbevain@novell.com>
636
637         * Makefile: rename the net_2_1 profile to moonlight.
638
639 2010-03-11  Marek Safar  <marek.safar@gmail.com>
640
641         * statement.cs, cs-parser.jay: Use correct location for empty
642         statements.
643
644 2010-03-11  Marek Safar  <marek.safar@gmail.com>
645
646         * cs-parser.jay: Disable Location from expression.
647         
648         * generic.cs: Check constraints for overrides in the parser.
649
650 2010-03-09  Marek Safar  <marek.safar@gmail.com>
651
652         * cs-parser.jay (GetLocation): Use an expression when available.
653
654 2010-03-04  Marek Safar  <marek.safar@gmail.com>
655
656         A fix for bug #582579
657         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
658
659 2010-03-04  Marek Safar  <marek.safar@gmail.com>
660
661         A patch by kornelpal@gmail.com
662         
663         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
664         compiler generated classes sealed by default. Emit and close top
665         level compiler generated classes as well. 
666         
667         * support.cs: Use RuntimeHelpers.GetHashCode.
668
669 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
670
671         * Makefile: We need to use the internal bootstrapping gmcs for
672         net_2_1_bootstrap too now.
673
674 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
675
676         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
677
678 2010-03-02  Marek Safar  <marek.safar@gmail.com>
679
680         * cs-tokenizer.cs: Missed few locations in previous fix.
681
682 2010-03-02  Marek Safar  <marek.safar@gmail.com>
683
684         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
685         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
686         Report correct location for operator errors.
687
688 2010-03-02  Marek Safar  <marek.safar@gmail.com>
689
690         * typemanager.cs (IsDynamicType): Don't check external types when
691         the attribute is not external.
692
693 2010-02-24  Marek Safar  <marek.safar@gmail.com>
694
695         A fix for bug #582579
696         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
697         modifiers.
698
699 2010-02-24  Marek Safar  <marek.safar@gmail.com>
700
701         A fix for bug #581804
702         * ecore.cs: Fixed type comparison.
703
704 2010-02-08  Miguel de Icaza  <miguel@novell.com>
705
706         * namespace.cs (CompletionGetTypesStartingWith): Do not include
707         private types in the completion results.
708
709         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
710         ... let ?"
711
712 2010-02-17  Marek Safar  <marek.safar@gmail.com>
713
714         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
715         constraint parsing.
716
717 2010-02-14  Miguel de Icaza  <miguel@novell.com>
718
719         * eval.cs: Do not do the report printer dance unless the user has
720         set the DescribeTypes feature.
721
722 2010-02-10  Marek Safar  <marek.safar@gmail.com>
723
724         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
725
726 2010-02-08  Marek Safar  <marek.safar@gmail.com>
727
728         A fix for bug #577029
729         * anonymous.cs: Fixed TypeBuilder* check.
730
731 2010-02-06  Miguel de Icaza  <miguel@novell.com>
732
733         * eval.cs (CompileBlock): Also undo if there are problems during
734         semantic analysis, fixes various cases where invalid C# code would
735         be reported, but the internal changes would not be undone.
736
737 2010-02-03  Miguel de Icaza  <miguel@novell.com>
738
739         * driver.cs: Change the --fatal flag to allow a number to be
740         passed, this ignores the first N fatal errors.   Useful to debug
741         errors that do not happen on the first hit.
742
743         * cs-parser.jay (invocation_expression): accept both the
744         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
745         inside an invocation.
746
747         * driver.cs: Expose FatalErrors.
748
749         * eval.cs: Initialize the printer's Fatal property from the
750         Driver's FatalError flag, this allows csharp --fatal to work
751         again. 
752
753         Add support for calling Describe (typeof (TYPE)) if the expression
754         entered is a TYPE.
755         
756 2010-02-02  Marek Safar  <marek.safar@gmail.com>
757
758         A fix for bug #574991
759         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
760         --lint.
761
762 2010-02-02  Marek Safar  <marek.safar@gmail.com>
763
764         A fix for bug #575986
765         * expression.cs: Don't mutate typeof type definitions.
766
767 2010-01-28  Marek Safar  <marek.safar@gmail.com>
768
769         * decl.cs: Use only one set of modifiers.
770
771 2010-01-26  Marek Safar  <marek.safar@gmail.com>
772
773         A fix for bug #573329
774         * eval.cs: Don't disable error reporting completely on silent mode.
775         
776 2010-01-25  Marek Safar  <marek.safar@gmail.com>
777
778         A fix for bug #573312
779         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
780         pointer index of unknown size types greater than 2.
781
782 2010-01-15  Marek Safar  <marek.safar@gmail.com>
783
784         * *.cs: Use only 1 member kind enum.
785
786 2010-01-15  Marek Safar  <marek.safar@gmail.com>
787
788         * *.cs: Add event specification.
789
790 2010-01-14  Marek Safar  <marek.safar@gmail.com>
791
792         * membercache.cs: Extracted from decl.cs.
793         
794         * *.cs: Put more infrastructure in place.
795
796 2010-01-13  Marek Safar  <marek.safar@gmail.com>
797
798         * *.cs: Add property specification, unused yet.
799
800 2010-01-13  Marek Safar  <marek.safar@gmail.com>
801
802         * property.cs: Move all property based declarations into a new file.
803
804 2010-01-13  Marek Safar  <marek.safar at gmail.com>
805
806         * expression.cs (Conditional): Resolve reduced expression.
807
808 2010-01-13  Marek Safar  <marek.safar at gmail.com>
809
810         * *.cs: Introduced non-generic method specification.
811
812 2010-01-07  Marek Safar  <marek.safar@gmail.com>
813
814         * method.cs: Move all method based declarations into a new file.
815
816 2010-01-07  Marek Safar  <marek.safar@gmail.com>
817
818         * *.cs: Extract field specification.
819
820 2009-12-17  Marek Safar  <marek.safar@gmail.com>
821
822         * field.cs: Extracted from class.cs
823
824 2009-12-15  Marek Safar  <marek.safar@gmail.com>
825
826         * attribute.cs (GetFixedBuffer): Work on field definition only.
827
828 2009-12-15  Marek Safar  <marek.safar@gmail.com>
829
830         * *.cs: Clean up NET_4_0 conditional where possible.
831
832 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
833
834         support.cs (DynamicType): Assembly property returns the assembly builder.
835         This is required due to how compiler context works in corlib.
836
837 2009-12-14  Marek Safar  <marek.safar@gmail.com>
838
839         A fix for bug #564376
840         * assign.cs (LocalTemporary): Removed no longer needed special
841         by-ref handling.
842
843 2009-12-11  Marek Safar  <marek.safar@gmail.com>
844
845         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
846         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
847         enum for easier debugging.
848
849 2009-12-10  Marek Safar  <marek.safar@gmail.com>
850
851         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
852         point.
853         
854         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
855         directly.
856
857 2009-12-10  Marek Safar  <marek.safar@gmail.com>
858
859         * cs-parser.jay, statement.cs: Handle parser error in code
860         completition.
861
862 2009-12-10  Marek Safar  <marek.safar@gmail.com>
863
864         * ecore.cs: Ignore base imported methods when they are already
865         in method bag.
866         
867         * eval.cs: Handle non-existent keys.
868         
869         * report.cs, driver.cs: Make fatal work with console printer only.
870
871 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
872
873         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
874
875 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
876
877         * typemanager.cs: Add MakeGenericMethod that checks if the method
878         is really the generic method definition.
879
880         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
881         to inflate generic methods.
882
883 2009-12-08  Marek Safar  <marek.safar@gmail.com>
884
885         A fix for bug #561149
886         * anonymous.cs: Use actual type parameters when checking for generic
887         method host.
888
889 2009-12-08  Marek Safar  <marek.safar@gmail.com>
890
891         A fix for bug #561369
892         * expression.cs (DoNumericPromotion): Fixed typo.
893
894 2009-12-08  Marek Safar  <marek.safar@gmail.com>
895
896         *.cs: Moving to generics world.
897
898         cs-parser.jay: Removed current_array_type.
899
900 2009-12-07  Marek Safar  <marek.safar@gmail.com>
901
902         *.cs: Moving to generics world.
903
904 2009-12-04  Marek Safar  <marek.safar@gmail.com>
905
906         *.cs: Moving to generics world (day 2).
907
908 2009-12-03  Marek Safar  <marek.safar@gmail.com>
909
910         *.cs: Moving to generics world.
911
912 2009-12-02  Marek Safar  <marek.safar@gmail.com>
913
914         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
915         Encode dynamic type attribute for elements where attributes cannot
916         be used.
917
918 2009-12-01  Marek Safar  <marek.safar@gmail.com>
919
920          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
921          arguments by ref.
922
923 2009-12-01  Marek Safar  <marek.safar@gmail.com>
924
925         A fix for bug #360455
926         * class.cs: Never report a unused warning for generic events to
927         workaround wrong expression type.
928
929 2009-11-30  Marek Safar  <marek.safar@gmail.com>
930
931         A fix for bug #558305
932         * decl.cs, class.cs: Check partial method definitions using correct
933         flag.
934
935 2009-11-30  Marek Safar  <marek.safar@gmail.com>
936
937         * argument.cs: Don't cache rarely used dynamic flag.
938
939 2009-11-27  Marek Safar  <marek.safar@gmail.com>
940
941         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
942
943 2009-11-27  Marek Safar  <marek.safar@gmail.com>
944
945         * ecore.cs (SimpleName): Removed no longer needed in_transit as
946         Resolve is now non-reentrant (saves ~0.6MB for corlib).
947
948 2009-11-26  Marek Safar  <marek.safar@gmail.com>
949
950         A fix for bug #545081
951         * decl.cs: Check private nested types of nested types recursively.
952
953 2009-11-26  Marek Safar  <marek.safar@gmail.com>
954
955         A fix for bug #558305
956         * location.cs: Ignore self referencing #line directive
957
958 2009-11-26  Marek Safar  <marek.safar@gmail.com>
959
960         A fix for bug #558292
961         * class.cs: Allow single unsafe fixed buffer fields.
962
963 2009-11-26  Marek Safar  <marek.safar@gmail.com>
964
965         * expression: Optimize few more zero-based operations.
966
967 2009-11-26  Marek Safar  <marek.safar@gmail.com>
968
969         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
970         avoids boxing of literal values.
971
972 2009-11-26  Marek Safar  <marek.safar@gmail.com>
973
974         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
975         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
976         codegen.cs: LocatedToken redesing to avoid excessive allocation and
977         boxing (saves ~7MB for corlib). Also fixes presise token location.
978
979 2009-11-25  Marek Safar  <marek.safar@gmail.com>
980
981         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
982         common data buckers.
983
984 2009-11-24  Marek Safar  <marek.safar@gmail.com>
985
986         * expression.cs: Lower static array initializer barrier.
987         
988         * support.cs, driver.cs: Share reader buffer.
989
990 2009-11-23  Marek Safar  <marek.safar@gmail.com>
991
992         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
993
994 2009-11-23  Marek Safar  <marek.safar@gmail.com>
995
996         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
997         cleanup some obsolete code.
998
999 2009-11-20  Marek Safar  <marek.safar@gmail.com>
1000
1001         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
1002         Expression.Resolve.
1003
1004 2009-11-20  Marek Safar  <marek.safar@gmail.com>
1005
1006         * *.cs: Resolved expressions are never resolved again, this helps to
1007         uncover some not easy to find bugs and improve the performance.
1008
1009 2009-11-19  Marek Safar  <marek.safar@gmail.com>
1010
1011         * *.cs: Made constant expressions fully compatible with any other
1012         expression.
1013
1014 2009-11-19  Marek Safar  <marek.safar@gmail.com>
1015
1016         * *.cs: DoResolve is a worker method and has to be protected.
1017
1018 2009-11-18  Marek Safar  <marek.safar@gmail.com>
1019
1020         * *.cs: More context specific handling.
1021
1022 2009-11-17  Marek Safar  <marek.safar@gmail.com>
1023
1024         * *.cs: More context specific handling.
1025
1026 2009-11-16  Marek Safar  <marek.safar@gmail.com>
1027
1028         * dynamic.cs, class.cs: Removed few fixed user types conversions.
1029         
1030         * symbolwriter.cs: Uses public ILOffset.
1031
1032 2009-11-13  Marek Safar  <marek.safar@gmail.com>
1033
1034         A fix for bug #553650
1035         * generic.cs: Another missing TypeToCoreType, still too many to fix.
1036
1037 2009-11-13  Marek Safar  <marek.safar@gmail.com>
1038
1039         A fix for bug #555170
1040
1041         * class.cs, delegate.cs, enum.cs: Constants have to be available
1042         for parameters resolve.
1043
1044 2009-11-12  Marek Safar  <marek.safar@gmail.com>
1045
1046         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
1047         arrays.
1048
1049 2009-11-12  Marek Safar  <marek.safar@gmail.com>
1050
1051         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
1052         with a statically known candidate set.
1053
1054 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
1055
1056         * generic.cs: Made type inflation for generic constraint checks
1057         recursive. This fixes BGO #553655.
1058
1059 2009-11-11  Marek Safar  <marek.safar@gmail.com>
1060
1061         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
1062         checks.
1063
1064 2009-11-10  Marek Safar  <marek.safar@gmail.com>
1065
1066         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
1067         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
1068         attribute.cs: Add some dynamic error checking.
1069
1070 2009-11-07  Marek Safar  <marek.safar@gmail.com>
1071
1072         A fix for bug #553465
1073
1074         * expression.cs: Fixed mixed version of expression tree anonymous
1075         type.
1076
1077 2009-11-06  Marek Safar  <marek.safar@gmail.com>
1078
1079         A fix for bug #553031
1080
1081         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
1082         expression tree version of anonymous type with members declaration.
1083
1084 2009-11-05  Marek Safar  <marek.safar@gmail.com>
1085
1086         * parameter.cs: Handle nullable parameter default expression.
1087         
1088         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
1089         class.cs, attribute.cs: Check for wrong dynamic arguments.
1090
1091 2009-11-05  Marek Safar  <marek.safar@gmail.com>
1092
1093         * statement.cs: Dynamic statements.
1094
1095 2009-11-04  Marek Safar  <marek.safar@gmail.com>
1096
1097         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
1098         Compound assignments over dynamic type.
1099
1100 2009-11-03  Marek Safar  <marek.safar@gmail.com>
1101
1102         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
1103         constructor arguments.
1104
1105 2009-10-30  Marek Safar  <marek.safar@gmail.com>
1106
1107         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
1108         codegen.cs: Unary mutator on dynamic member access expression.
1109
1110 2009-10-29  Marek Safar  <marek.safar@gmail.com>
1111
1112         A fix for bug #550580   
1113         * convert.cs: Don't eliminate explicit precission casts.
1114
1115 2009-10-28  Marek Safar  <marek.safar@gmail.com>
1116
1117         A fix for bug #550404
1118         
1119         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
1120         expression.cs, statement.cs, ecore.cs: Quote any nested expression
1121         tree.
1122
1123 2009-10-27  Marek Safar  <marek.safar@gmail.com>
1124
1125         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
1126         constant.
1127         
1128         * class.cs: Allow nullable binary user operators.
1129
1130 2009-10-26  Marek Safar  <marek.safar@gmail.com>
1131
1132         * expression.cs: Move binary expression optimization at the end of
1133         resolve.
1134
1135 2009-10-23  Marek Safar  <marek.safar@gmail.com>
1136
1137         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
1138         Separate NullConstant from NullLiteral.
1139
1140 2009-10-23  Marek Safar  <marek.safar@gmail.com>
1141
1142         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
1143         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
1144         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
1145         ModuleContainer. Add common unclosed member check routine.
1146
1147 2009-10-22  Marek Safar  <marek.safar@gmail.com>
1148
1149         * argument.cs: Use literal flag for real literals only.
1150
1151         * dynamic.cs: Use correct return type for custom delegates.
1152
1153 2009-10-22  Marek Safar  <marek.safar@gmail.com>
1154
1155         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
1156         resolver.
1157
1158 2009-10-22  Marek Safar  <marek.safar@gmail.com>
1159
1160         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
1161
1162 2009-10-21  Marek Safar  <marek.safar@gmail.com>
1163
1164         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
1165         conversion.
1166
1167 2009-10-21  Marek Safar  <marek.safar@gmail.com>
1168
1169         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
1170         binder flags.
1171
1172 2009-10-20  Marek Safar  <marek.safar@gmail.com>
1173
1174         * argument.cs, dynamic.cs, expression.cs: Latest API update.
1175
1176 2009-10-19  Marek Safar  <marek.safar@gmail.com>
1177
1178         * typemanager.cs, expression.cs: Dynamic array initializer.
1179
1180 2009-10-16  Marek Safar  <marek.safar@gmail.com>
1181
1182         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
1183         is imported.
1184
1185 2009-10-16  Marek Safar  <marek.safar@gmail.com>
1186
1187         A fix for bug #493523, #507067
1188         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
1189         standard nullable conversion using underlying standard conversion
1190         and not full conversion.
1191
1192 2009-10-15  Marek Safar  <marek.safar@gmail.com>
1193
1194         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
1195         type in VerifyArgumentsCompat.
1196
1197 2009-10-15  Marek Safar  <marek.safar@gmail.com>
1198
1199         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1200         Reject variable used with type arguments.
1201
1202 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1203
1204         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
1205         Implement dynamic expressions assignment.
1206
1207 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1208
1209         * expression.cs: Build underlying expression when resolving unary
1210         mutators.
1211
1212 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1213
1214         * expression.cs: Emit enum array initializer using binary blob.
1215
1216 2009-10-08  Marek Safar  <marek.safar@gmail.com>
1217
1218         * typemanager.cs, constant.cs: Optimize decimal constants which fit
1219         to long range.
1220
1221 2009-10-07  Marek Safar  <marek.safar@gmail.com>
1222
1223         * typemanager.cs: Reset object_type.
1224         
1225         * assign: Made SimpleAssign public.
1226
1227 2009-10-06  Marek Safar  <marek.safar@gmail.com>
1228
1229         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
1230         invocation assembly to IsThisOrFriendAssembly.
1231
1232 2009-10-05  Marek Safar  <marek.safar@gmail.com>
1233
1234         * expression.cs: Equality comparison of generic parameter with
1235         class constraint.
1236
1237 2009-10-05  Marek Safar  <marek.safar@gmail.com>
1238
1239         A fix for bug #543570
1240         * generic.cs: Import predefined constraints correctly.
1241
1242 2009-10-02  Marek Safar  <marek.safar@gmail.com>
1243
1244         * ecore.cs: Don't crash on overloads with optional paremeters where
1245         arguments count overflows.
1246         
1247         * parameter.cs: Import optional parameter constants using optional
1248         value type.
1249
1250 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1251
1252         * Makefile: Default is gmcs compiler.
1253
1254 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1255
1256         * cs-parser.jay: Fixed few NRE.
1257
1258 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1259
1260         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
1261
1262 2009-09-30  Marek Safar  <marek.safar@gmail.com>
1263
1264         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
1265         ShimExpression, ImplicitCast.
1266
1267 2009-09-30  Marek Safar  <marek.safar@gmail.com>
1268
1269         A fix for bug #542959
1270         * delegate.cs: Emit correct delegate instance variable when there
1271         are static and non-static overloads.
1272
1273 2009-09-29  Marek Safar  <marek.safar@gmail.com>
1274
1275         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
1276         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
1277
1278 2009-09-28  Marek Safar  <marek.safar@gmail.com>
1279
1280         A fix for bug #542487
1281         * ecore.cs: Resolve extension methods hidden by properties.
1282
1283 2009-09-25  Marek Safar  <marek.safar@gmail.com>
1284
1285         * expression.cs, ecore.cs: More dynamic binary expressions.
1286
1287 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1288
1289         * nullable.cs, expression.cs: Fixed null lifted conversion for
1290         bitwise enum operations.
1291
1292 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1293
1294         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
1295         values in checked context.
1296
1297 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1298
1299         * expression.cs, ecore.cs: Fixed array index constant conversion.
1300
1301 2009-09-20  Miguel de Icaza  <miguel@novell.com>
1302
1303         * expression.cs: Do not crash when MemberLookup returns something
1304         that is not a MemberExpr here.   Report error 582 instead. 
1305
1306         Fixes #499988.
1307
1308 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1309
1310         * decl.cs, class.cs: Check protected property accessors.
1311
1312 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1313
1314         * dynamic.cs, assign.cs: Dynamic compound assignment.
1315
1316 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1317
1318         * expression.cs: Fixed compound assignment explicit conversion.
1319
1320 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1321
1322         * expression.cs, ecore.cs: Cannot infer variables from method group.
1323
1324 2009-09-16  Marek Safar  <marek.safar@gmail.com>
1325
1326         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
1327         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
1328         codegen.cs: Dynamic binary operations scaffolding.
1329
1330 2009-09-15  Marek Safar  <marek.safar@gmail.com>
1331
1332         * expression.cs: Fixes nullable promotion for enum type variables.
1333
1334 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1335
1336         * driver.cs, dynamic.cs: Reset more static variables.
1337
1338 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1339
1340         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
1341         driver.cs: Introduced Expression::MakeExpression.
1342
1343 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1344
1345         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
1346
1347 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1348
1349         * eval.cs, report.cs: Use Console.Out for all eval error or warning
1350         output.
1351
1352 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1353
1354         A fix for bug #518707
1355         * expression.cs (Is): Optimize only generic parameter type
1356         expression probing value type generic parameter.
1357
1358 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1359
1360         A fix for bug #532571
1361         * ecore.cs: Check for simple name type arguments used with
1362         non-generic type.
1363
1364 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1365
1366         A fix for bug #497421
1367         * generic.cs (CheckConstraint): Don't use buildin types to check for
1368         parameterless constructor.
1369
1370 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1371
1372         A fix for bug #537402
1373         * generic.cs (CheckConstraint): Correctly inflate generic type
1374         arguments when checking generic method. 
1375
1376 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1377
1378         A fix for bug #536463
1379         * decl.cs (AddToContainer): Don't report collision between explicit
1380         and parameterless non-explicit members.
1381
1382 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1383
1384         * eval.cs: Reset more static stuff.
1385
1386 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1387
1388         A fix for bug #324625
1389         * expression.cs, ecore.cs: Create nested generic type expression
1390         using declaring and not current type.
1391
1392 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1393
1394         * *.cs: Changed Report class to accept various output printers and
1395         be an instance class. An expression resolver can now use different
1396         message reporter for each call and Report.Error can safely throw
1397         an exception. Part of ongoing work to turn mcs into proper library.
1398
1399 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1400
1401         * statement.cs, ecore.cs: Removed error reporting from emit code.
1402
1403 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1404
1405         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
1406
1407 2009-09-03  Marek Safar  <marek.safar@gmail.com>
1408
1409         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
1410         parser checks out of constructors.
1411
1412 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1413
1414         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
1415
1416 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1417
1418         A fix for bug #535448
1419         * anonymous.cs, class.cs: Copy return label between all contexts.
1420
1421 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1422
1423         A fix for bug #535395
1424         * namespace.cs: Resolve context can be null.
1425
1426 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1427
1428         A fix for bug #533912
1429         * generic.cs: Use correct context for constraints resolving.
1430
1431 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1432
1433         A fix for bug #532630
1434         * driver.cs: Trim conditional symbols.
1435
1436 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1437
1438         * context.cs: New file.
1439         
1440         * *.exe.sources, *.csproj: Updated.
1441
1442 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1443
1444         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
1445         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
1446         IMembercontext, some small cleanups.
1447
1448 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1449
1450         * *.cs: Split ResolveContext and EmitContext.
1451
1452 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1453
1454         * *.cs: Only ResolveContext implements IMemberContext.
1455
1456 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1457
1458         * *.cs: Renamed IResolveContext to IMemberContext.
1459
1460 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1461
1462         * *.cs: Detached ResolveContext from EmitContext.
1463
1464 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1465
1466         * codegen.cs: Moved flow-analysis to BlockContext.
1467
1468 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1469
1470         * *.cs: Detached BlockContext from EmitContext.
1471
1472 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
1473
1474         * statement.cs: avoid nullref when the return value of GetEnumerator()
1475         does not contain any MoveNext() method.
1476
1477 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1478
1479         * *.cs: Removed IResolveContext::GenericDeclContainer.
1480
1481 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1482
1483         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
1484
1485 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1486
1487         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
1488         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
1489
1490 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1491
1492         * *.cs: Removed boolean fields from EmitContext.
1493
1494 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1495
1496         * *.cs: Add IResolveContext::IsStatic.
1497
1498 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1499
1500         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
1501
1502 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1503
1504         * *.cs: Removed DeclContainer from EmitContext.
1505
1506 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1507
1508         * *.cs: Add IResolveContext::CurrentTypeParameters.
1509
1510 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1511
1512         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
1513
1514 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1515
1516         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
1517         codegen.cs: Add IResolveContext::LookupExtensionMethod.
1518
1519 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1520
1521         * decl.cs: Look in PartialContainer for parent type parameters.
1522
1523 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1524
1525         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
1526         codegen.cs: Add IResolveContext::LookupTypeParameter.
1527
1528 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1529
1530         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1531         Moved resolved logic from Emit to Resolve.
1532
1533 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1534
1535         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
1536         codegen.cs: Reworked atttributes handling of ResolveContext.
1537
1538 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1539
1540         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
1541         LookupNamespaceOrType to ResolveContext.
1542
1543 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1544
1545         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
1546         class.cs: Removed unused parameters and methods.
1547
1548 2009-08-11  Marek Safar  <marek.safar@gmail.com>
1549
1550         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
1551         codegen.cs: Finding the best common type of a set of expressions for
1552         lambda statements.
1553
1554 2009-08-07  Marek Safar  <marek.safar@gmail.com>
1555
1556         * dynamic.cs, expression.cs: More dynamic conversions.
1557
1558 2009-08-06  Miguel de Icaza  <miguel@novell.com>
1559
1560         * generic.cs: This loop was incorrect, it was increment ii, but
1561         checking for `i'.  This was a change introduced to fix #327497,
1562         now we fix #424012.
1563  
1564         * class.cs: Catch another case for cs0533 error, fixes #324782.
1565
1566 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
1567
1568         * typemanager.cs (GetGenericArguments): SRE returns null for
1569         generic methods on type builder instances if they are not generic
1570         themselves. For example, for Foo<int>::Bar() it returns null, but
1571         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
1572
1573 2009-08-05  Marek Safar  <marek.safar@gmail.com>
1574
1575         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
1576         delegate.cs: Work on dynamic binding.
1577
1578 2009-08-04  Marek Safar  <marek.safar@gmail.com>
1579
1580         A second fix for bug #525342
1581         * class.cs: Attach partial method attributes to method
1582         implementation.
1583
1584 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1585
1586         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
1587         restrictions.
1588         
1589         * rootcontext.cs: Default to langversion v4.
1590
1591 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1592
1593         * pending.cs: Check return type before member info is set.
1594
1595 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1596
1597         * anonymous.cs: Fully initialize generic hoisted field expression.
1598
1599 2009-08-02  Miguel de Icaza  <miguel@novell.com>
1600
1601         * cs-parser.jay: Flag variables declared on the interactive shell
1602         as used to prevent the 168 warning about local variable not being
1603         used. 
1604
1605 2009-07-31  Marek Safar  <marek.safar@gmail.com>
1606
1607         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
1608         attribute.cs: Emit dynamic export attribute.
1609
1610 2009-07-30  Marek Safar  <marek.safar@gmail.com>
1611
1612         * expression.cs: More verifier work.
1613
1614 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1615
1616         * nullable.cs: Fixed SRE crash during corlib compilation.
1617
1618 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1619
1620         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1621         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1622         More TypeManager.TypeToCoreType needed.
1623
1624 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1625
1626         * anonymous.cs: Update after recent SRE fixes.
1627
1628 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1629
1630         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1631         version of GetFieldHandle for fields of generic types.
1632
1633 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1634
1635         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1636         ecore.cs: Add TypeManager.IsDynamicType,
1637         PredefinedAttributes.Dynamic.
1638
1639 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1640
1641         A fix for bug #415375
1642         * expression.cs: Fixed object and reference type parameter
1643         comparison.
1644
1645 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1646
1647         A fix for bug #525342
1648         * class.cs: Attach partial method attributes to method
1649         implementation.
1650
1651 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1652
1653         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1654         Dynamic arguments.
1655
1656 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1657
1658         * anonymous.cs (MutateField): Add imported types handling.
1659
1660 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1661
1662         * expression.cs, delegate.cs: Moved arguments resolve into their
1663         counterparts expressions. Removed argument resolve from
1664         CollectionElementInitializer.
1665
1666 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1667
1668         A fix for bug #523683
1669         * convert.cs, delegate.cs: Use common overload mechanism for method
1670         group conversion check.
1671
1672 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1673
1674         A fix for bug #523899
1675         * generics.cs: Exact type inference with other bound types.
1676
1677 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1678
1679         Don't complain when the same type is implemented by the output
1680         assembly as well as multiple referenced assemblies
1681         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1682         'must_be_unique' flag.
1683         (GlobalRootNamespace): Update to changes.
1684         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1685         already have a type in hand.
1686
1687 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1688
1689         * expression.cs: More verifier instrumentation.
1690         
1691         * statement.cs: Do proper throw expression conversion.
1692
1693 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1694
1695         A fix for bug #522789
1696         * expression.cs: Mutate invocation return type.
1697
1698 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1699
1700         * anonymous.cs: Split assignable and readonly generated variable
1701         references.
1702
1703 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1704
1705         A fix for bug #521671
1706         * statement.cs: Fixed crash when checking missing type.
1707
1708 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1709
1710         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1711         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1712         class.cs, driver.cs: Work on dynamic binding.
1713
1714         * dynamic.cs: New file.
1715
1716         * *.sources, *.proj: Updated.
1717
1718 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1719
1720         * expression.cs (Conditional): Avoid double Resolve.
1721
1722 2009-07-13  Marcus Griep  <marcus@griep.us>
1723
1724         * ecore.cs: Fix obscure bug with resolving members of interfaces
1725         that hide parent interface members. Fixes bug #444388 and corrects
1726         bug #323096
1727
1728 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1729
1730         * expression.cs (LocalVariableReference): Bounce resolve.
1731
1732 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1733
1734         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1735         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1736         types to new class.
1737         
1738         * support.cs: New dynamic type wrapper.
1739
1740 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1741
1742         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1743         typed local variable.
1744
1745 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1746
1747         A fix for bug #519005
1748         * anonymous.cs: Use null_type as no return type placeholder.
1749
1750 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1751
1752         * generic.cs: Handle type inference of identical type parameters
1753         with different bounds.
1754
1755 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1756
1757         * expression.cs, class.cs: Events variance.
1758         
1759         * cs-parser.jay: Interface events error messages.
1760
1761 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1762
1763         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1764
1765 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1766
1767         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1768         parameter expression can be value-type New.
1769
1770         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1771
1772 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1773
1774         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1775         Implemented C# 4.0 named arguments.
1776
1777 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1778
1779         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1780         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1781         parameter modifier. Also fixes bug #515497.
1782
1783 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1784
1785         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1786         arguments expression to be implemented.
1787         
1788         *.sources: Add argument.cs
1789
1790 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1791
1792         * parameter.cs: Moved GetParameterIndexByName to base class.
1793         
1794         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1795         unused AType. Use argument's version of GetExpressionTree.
1796
1797 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1798
1799         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1800         arguments grammar.
1801
1802 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1803
1804         A fix for bug #514096
1805         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1806
1807 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1808
1809         * expression.cs: The first multi-dimensional array nested array
1810         initializers was not checked.
1811         
1812         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1813
1814 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1815
1816         A fix for bug #513400
1817         * nullable.cs (EmitEquality): Operands emit could be simplified for
1818         built-in types when we now emit user operators differently.
1819
1820 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1821
1822         * ecore.cs: Report inaccessible delegate methods correctly.
1823
1824 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1825
1826         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1827         cs-parser.jay: Implemented C# 4.0 optional parameters.
1828
1829 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1830
1831         * driver.cs: Removed broken DefineManifestResource.
1832
1833 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1834
1835         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1836         Use $(BOOTSTRAP_PROFILE) instead.
1837
1838 2009-06-12  Jb Evain  <jbevain@novell.com>
1839
1840         * rootcontext.cs: add a Platform field.
1841         * driver.cs: handle /platform.
1842         * codegen.cs: pass the proper flags according to
1843         the platform when saving the assembly.
1844
1845 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1846
1847         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1848         Add optional parameters grammar.
1849
1850 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1851
1852         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1853         driver.cs: Split lang version and metadata version.
1854
1855 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1856
1857         * decl.cs: Better overload ctor collision error message.
1858
1859 2009-06-05  Jb Evain  <jbevain@novell.com>
1860
1861         * driver.cs (EmbededResource): avoid using an internal method
1862         in gmcs to embed manifest resources.
1863
1864 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1865
1866         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1867         the compiler from older mono versions (like moon's bots)
1868
1869 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1870
1871         * namespace.cs (LookupTypeReflection): Ignore collisions between
1872         forwarded types.
1873
1874 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1875
1876         * codegen.cs: Enabled generic type forwarders.
1877
1878 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1879
1880         * dmcs.*: Add another version of SRE compiler.
1881
1882 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1883
1884         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1885         generic-mcs.cs: Fixed variant type conversions.
1886
1887 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1888
1889         A fix for bug #507863
1890         * codegen.cs: Fixes a crash on invalid string value attribute.
1891
1892 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1893
1894         A fix for bug #508334
1895         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1896         cs-parser.jay: Fully import __arglist modifier.
1897
1898 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1899
1900         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1901         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1902         actually work with closed generic types.
1903
1904 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1905
1906         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1907         Fix the build by replacing the use of 'var' with the actual type.
1908
1909 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1910
1911         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1912     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1913         declarations.
1914           
1915         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1916         filter.
1917
1918 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1919                         Marek Safar  <marek.safar@gmail.com>
1920
1921         A fix for bug #377509
1922         * parameter.cs: Use predefined and not empty name for implicit
1923         setters.
1924
1925 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1926
1927         * class.cs: Don't report wrong warnings for event fields.
1928
1929 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1930
1931         A fix for bug #504667
1932         * class.cs: Check for static class using parent container instead of
1933         parent type.
1934
1935 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1936
1937         A fix for bug #496922
1938         * expression.cs: Always use temporary variable when using object
1939         initializer.
1940
1941 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1942
1943         A fix for bug #495112
1944         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1945         local cache.
1946
1947 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1948
1949         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1950
1951 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1952
1953         * complete.cs: No idea how gonzalo got a null in the list, but
1954         avoid crashing.
1955
1956 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1957
1958         * complete.cs (CompletionElementInitializer): New completion class
1959         to support completing inside a C# 3 element initializer, so this
1960         allows completion for Silverlight situations where it is very
1961         common to do:
1962
1963         new TextBlock () { Fo<TAB>
1964
1965         (CompletionSimpleName): Expose the prefix that was
1966         passed to the simple name.
1967
1968         * cs-parser.jay (object_or_collection_initializer): Add support
1969         for element_initializers.
1970
1971         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1972         special case completion expressions as this method aggressively
1973         collects data before it operates, and errors were being thrown
1974         earlier than we were able to complete.
1975
1976 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1977
1978         * eval.cs: Make getcompletions silent and enable debugging output
1979         if the -v option is passed.
1980
1981         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1982         Consider looking up the namespace that matches the prefix being
1983         used. 
1984
1985         This is part of the support for allowing completions like:
1986         `System.Co<TAB>' to complete to System.Console.
1987
1988         * complete.cs (CompletionSimpleName.AppendResults): Make this
1989         routine reusable.
1990
1991 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1992
1993         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1994         COMPLETE_COMPLETION as internal.
1995
1996 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1997
1998         * complete.cs: Include namespace resolution in simple names as
1999         well as global types and types in the using scope in the
2000         resolution. 
2001
2002         * namespace.cs: Supporting infrastrcture to provide completions
2003         based on the current using scope. 
2004
2005         * eval.cs: Introduce an entry point that allows for initialization
2006         to return a list of the files passed on the command line.
2007
2008 2009-04-14  Marek Safar  <marek.safar@gmail.com>
2009
2010         A fix for bug #494243
2011         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
2012
2013 2009-04-13  Marek Safar  <marek.safar@gmail.com>
2014
2015         A fix for bug #493887
2016         * statement.cs: Don't skip string multi-section with default or
2017         null label when populating string hashtable.
2018
2019 2009-04-06  Marek Safar  <marek.safar@gmail.com>
2020
2021         A fix for bug #492329
2022         * expression.cs (New): Load variable when assigning type parameter
2023         to ref variable.
2024
2025 2009-04-06  Marek Safar  <marek.safar@gmail.com>
2026
2027         A fix for bug #488960
2028         * decl.cs: Compare MVAR types using non-null values.
2029
2030 2009-03-27  Marek Safar  <marek.safar@gmail.com>
2031
2032         * typemanager.cs, expression.cs: Removed unused nullable checks.
2033
2034 2009-03-27  Marek Safar  <marek.safar@gmail.com>
2035
2036         * *.cs: Removed some gmcs conditionals.
2037
2038 2009-03-26  Marek Safar  <marek.safar@gmail.com>
2039
2040         * generic.cs, support.cs: Moved generics stuff out of support.cs
2041
2042 2009-03-24  Marek Safar  <marek.safar@gmail.com>
2043
2044         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
2045         DeclaringType.
2046
2047 2009-03-23  Marek Safar  <marek.safar@gmail.com>
2048
2049         * attribute.cs: Consider all members for error reporting when
2050         checking named arguments.
2051
2052 2009-03-23  Marek Safar  <marek.safar@gmail.com>
2053
2054         A fix for bug #487625
2055         * namespace.cs: Use a warning for all predefined type conflicts.
2056
2057 2009-03-23  Marek Safar  <marek.safar@gmail.com>
2058
2059         A fix for bug #485706
2060         * statement.cs: Explicitly type catch type argument to pass verifier
2061         check.
2062
2063 2009-03-22  Miguel de Icaza  <miguel@novell.com>
2064
2065         Initial support to provide code completion facilities to consumers
2066         of the evaluator API.
2067         
2068         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
2069         support the completion engine.   When we reach the end of the
2070         input stream instead of returning EOF, when this flag is true the
2071         tokenizer instead produces:
2072
2073                 One GENERATE_COMPLETION token: this token then must be
2074                 handled in the grammar at every point where the user
2075                 would likely request a completion.
2076
2077                 As many COMPLETE_COMPLETION tokens as necessary.   These
2078                 tokens are generated to assist the parser in unwinding and
2079                 producing a valid parse tree.    
2080
2081         The parser rules do not have to be perfect, the parser needs to be
2082         augmented with judicious use of GENERATE_COMPLETION tokens to
2083         improve the areas where we can provide completion and the parser
2084         needs to add support for COMPLETE_COMPLETION tokens in productions
2085         to make them work.
2086
2087         It is common to not have enough support for COMPLETE_COMPLETION
2088         under certain rules and that even if we generated the
2089         GENERATE_COMPLETION token that the resulting tree will be invalid
2090         due to the missing rules that support COMPLETE_COMPLETION.
2091
2092         The final EOF token is produced by having the parser notify the
2093         tokenizer when it reaches the root production that the next token
2094         should be EOF.
2095
2096         * support.cs (CompletionResult): New Exception.   This exception
2097         is thrown to return the completion results when one of the special
2098         completion expressions is reached.
2099
2100         This exception is thrown by the completing ExpressionStatements
2101         classes that live in complete.cs
2102
2103         * complete.cs (CompletingExpression): a new base class for
2104         completing expressions.   This derives from the
2105         ExpressionStatement class and not from Expression as it allows
2106         completion to happen not only where expressions are expected in
2107         the grammar, but also where statements are expected.
2108
2109         (CompletionSimpleName): A new class used to provide completions
2110         for SimpleNames.     This currently only resolves to local
2111         variables from the evaluator context (GetVars call).
2112
2113         (CompletionMemberAccess): Implements support for completing member
2114         access patterns. 
2115
2116         * cs-parser.jay: Add support for completion in a few places. 
2117
2118         * eval.cs (GetCompletions): New public API for the evaluator that
2119         returns a list of possible completions given the input.   The
2120         return value is an array of completions 
2121
2122         * anonymous.cs (Compatible): If the exception thrown from the
2123         resolved expression is a CompletionResult exception let that one
2124         through instead of printing a diagnostic error in the try/catch. 
2125 <       
2126 2009-03-22  Miguel de Icaza  <miguel@novell.com>
2127
2128         * 
2129
2130         * driver.cs (Main): Use Environment.Exit to quit quickly and
2131         prevent the compiler from doing the usual wait for helper thread
2132         to terminate.  
2133
2134         This is to prevent a slowdown that was reported by Gonzalo on
2135         ASP.NET 
2136
2137 2009-03-19  Marek Safar  <marek.safar@gmail.com>
2138
2139         * ecore.cs: Load build-in types directly instead of accessing
2140         an internal field.
2141
2142 2009-03-18  Marek Safar  <marek.safar@gmail.com>
2143
2144         * ecore.cs: Always use unbox.any when available.
2145
2146 2009-03-18  Marek Safar  <marek.safar@gmail.com>
2147
2148         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
2149
2150 2009-03-17  Marek Safar  <marek.safar@gmail.com>
2151
2152         * generic.cs: Removed obsolete version of type inference.
2153
2154 2009-03-16  Marek Safar  <marek.safar@gmail.com>
2155
2156         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
2157         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
2158         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
2159         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
2160
2161 2009-03-11  Marek Safar  <marek.safar@gmail.com>
2162
2163         A fix for bug #482996
2164         * anonymous.cs: Make sure we are not infering return type when
2165         checking type compatibility.
2166
2167 2009-03-11  Marek Safar  <marek.safar@gmail.com>
2168
2169         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
2170         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
2171         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
2172         attributes in their own structure. Needed when accessing their
2173         properties before they are resolved.
2174
2175 2009-03-09  Marek Safar  <marek.safar@gmail.com>
2176
2177         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
2178         hashtable (~10x faster).
2179         
2180         * driver.cs: Removed wrong Reset.
2181
2182 2009-03-08  Marek Safar  <marek.safar@gmail.com>
2183
2184         * class.cs: Use correct common base type for unmanaged delayed
2185         check.
2186
2187         * rootcontext.cs: Wrap unhandled exception.
2188
2189 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
2190
2191         Make SeekableStreamReader self-tuning and arbitrarily seekable
2192         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
2193         the buffer.
2194         (SeekableStreamReader.Position.set): Use it.  Simplify logic
2195         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
2196         buffer size when the stream needs to be re-read from the beginning.
2197
2198 2009-03-05  Marek Safar  <marek.safar@gmail.com>
2199
2200         A fix for bug #480100
2201         * parameter.cs: A parameter is not hoisted when used directly as ET.
2202
2203 2009-03-04  Marek Safar  <marek.safar@gmail.com>
2204
2205         * statement.cs: Fixed an issue when using variable is of interface
2206         type.
2207
2208 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2209
2210         A fix for bug #480319
2211         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
2212
2213 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2214
2215         A fix for bug #480867
2216         * typemanager.cs, expression.cs, ecore.cs: Changed method group
2217         expression to have no valid type.
2218
2219 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2220
2221         A fix for bug #481258
2222         * class.cs: Set extension method flag in partial container.
2223
2224 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2225
2226         * statement.cs, typemanager.cs: Use expression for StringEmitter.
2227         
2228         * attribute.cs: Add sanity check.
2229
2230 2009-02-27  Marek Safar  <marek.safar@gmail.com>
2231
2232         * class.cs: Add external constructor error.
2233
2234 2009-02-26  Marek Safar  <marek.safar@gmail.com>
2235
2236         A fix for bug #475354
2237         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
2238         correctly user defined nullable equality operators.
2239
2240 2009-02-25  Marek Safar  <marek.safar@gmail.com>
2241
2242         A fix for bug #479532
2243         * expression.cs: Implement NewInitialize::AddressOf.
2244
2245 2009-02-25  Marek Safar  <marek.safar@gmail.com>
2246
2247         A fix for bug #413633
2248         * expression.cs: Iterate all base class-constraint types.
2249
2250 2009-02-24  Marek Safar  <marek.safar@gmail.com>
2251
2252         A fix for bug #479209
2253         * literal.cs: Mutate null underlying type.
2254
2255 2009-02-24  Marek Safar  <marek.safar@gmail.com>
2256
2257         A fix for bug #476295
2258         * convert.cs: Avoid wrapping implicitly convertible reference type.
2259
2260 2009-02-23  Marek Safar  <marek.safar@gmail.com>
2261
2262         * iterators.cs: Create MemberName correctly.
2263
2264 2009-02-23  Marek Safar  <marek.safar@gmail.com>
2265
2266         A fix for bug #478655
2267         * literal.cs: Check also underlying null type conversion.
2268
2269 2009-02-21  Marek Safar  <marek.safar@gmail.com>
2270
2271         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
2272
2273 2009-02-20  Marek Safar  <marek.safar@gmail.com>
2274
2275         A fix for bug #477447
2276         * statement.cs: Add reference to correct parent storey when this
2277         is accessible from deep children storey (more than 1 level).
2278
2279 2009-02-19  Marek Safar  <marek.safar@gmail.com>
2280
2281         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
2282         * class.cs: Define base type members before setting up member cache.
2283
2284 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2285
2286         A fix for bug #477378
2287         * nullable.cs, expression.cs, statement.cs: More precise null type
2288         sanity checks.
2289
2290 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2291
2292         A fix for bug #472805
2293         * typemanager.cs, namespace.cs: Import only visible extension method
2294         types.
2295
2296 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2297
2298         A fix for bug #476895
2299         * attribute.cs: Use correct resolve context for attribute type.
2300
2301 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2302
2303         A fix for bug #476266
2304         * anonymous.cs: Mutate multi-dimensional arrays.
2305
2306 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2307
2308         A fix for bug #476400
2309         * statement.cs, expression.cs: Removed wrong Dispose optimization.
2310
2311 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2312
2313         A fix for bug #476811
2314         * generics.cs: Fixed null-literal check.
2315
2316 2009-02-17  Marek Safar  <marek.safar@gmail.com>
2317
2318         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
2319         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
2320         messing with static variables.
2321
2322 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2323
2324         A fix for bug #475965
2325         * generics.cs: Check generic parameter type after extracting from
2326         Expression<T>.
2327
2328 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2329
2330         A fix for bug #475823
2331         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
2332         typed-null support.
2333
2334 2009-02-14  Marek Safar  <marek.safar@gmail.com>
2335
2336         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
2337         Simplified event field definition using backing field and not
2338         field builder directly.
2339
2340         * expression.cs (EmitLdArg): Optimize fast paths.
2341
2342 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2343
2344         A fix for bug #475327
2345         * expression.cs (ArrayCreation): Don't mutate values optimized away.
2346
2347 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2348
2349         A fix for bug #475342
2350         * cs-parser.jay: Using 'super' instead of 'base' to call base
2351         constructor crashes compiler.
2352
2353 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2354
2355         A fix for bug #475354
2356         * expression.cs (Constantify): Add nullable types.
2357         
2358         * const.cs (EmitDecimalConstant): Avoid explicit cast.
2359
2360 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2361
2362         A fix for bug #475246
2363         * expression.cs: More broken flowanalysis hacking needed.
2364
2365 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2366
2367         * attribute.cs: Compare only ref/out array modifiers. 
2368
2369 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2370
2371         * statement.cs: Use member cache when looking for foreach members.
2372
2373 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2374
2375         * expression.cs: Don't expose internal initializer types.
2376         
2377         * statement.cs: Check also explicit conversions for goto case.
2378
2379 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2380
2381         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
2382
2383 2009-02-10  Marek Safar  <marek.safar@gmail.com>
2384
2385         * *.cs: Replace null-type with NullLiteral where appropriate.
2386
2387 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2388
2389         * expression.cs: Initializer of reference argument use temporary
2390         variable to be verifiable.
2391         
2392         * parameter.cs: Share EmitLdArg.
2393
2394 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2395
2396         A fix for bug #473559
2397         * class.cs: Fixed: Not reporting error about nested class with the
2398         same name.
2399
2400 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
2401
2402         Contributed under the MIT/X11 license.
2403
2404         * generic.cs: Added VerifyVariantTypeParameters which performs new
2405         variance verification logic. The old logic, based on the spec, was
2406         wrong because the spec is full of LIES!
2407
2408         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
2409
2410         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
2411
2412         * class.cs:
2413         * ecore.cs: Added calls to the new variance verification logic.
2414
2415         * parameter.cs:
2416         * delegate.cs: Removed calls to the old variance verification logic.
2417
2418 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2419
2420         * delegate.cs: Use cached Invoke method directly.
2421
2422 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2423
2424         * expression.cs: Emit expression tree for hoisted variable access.
2425
2426 2009-02-04  Marek Safar  <marek.safar@gmail.com>
2427
2428         * namespace.cs: Add better extension class check.
2429
2430 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
2431
2432         * generic.cs: Fixed typeo (TypeParameter.Variacne).
2433
2434 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
2435
2436         This patch adds initial generic variance support to the compiler.
2437         It is contributed under the MIT/X11 license.
2438
2439         * typemanager.cs: Modified ImplementsInterface to check variance.
2440         Added VerifyVariantTypeParameters which checks the specified type to see
2441         if it uses a variant type parameter as a type argument (which is not
2442         allowed). Added IsVariantOf which determins if the first type is a
2443         variant of the second. NOTE: This only supports reference types at
2444         the moment to conform with the current level of VM support. When the
2445         VM supports value types, this will follow step.
2446
2447         * generic.cs: Added the Variance enum. Added a Variance property to
2448         TypeParameter and added variance support to definition phase. Added a
2449         Variance property to TypeParameterName. Also check to make sure that
2450         no variant types appear in generic method parameters.
2451
2452         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
2453         keywords if the langversion supports it.
2454
2455         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
2456         that variant types are only used in legal positions. Also added
2457         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
2458         parameters.
2459
2460         * decl.cs: Construct TypeParameter with the variance information.
2461
2462         * convert.cs: Checks variance in ImplicitReferenceConversionExists
2463         and ImplicitConversionStandard.
2464
2465         * rootcontext.cs: Added new "Future" language version.
2466
2467         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
2468         type parameters are not used as type arguments in interface inheritance.
2469         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
2470         parameters are not used as method return types. In MemberBase.
2471         ResolveMemberType, ensure that variant type parameters are not used
2472         as type arguments. Also call VerifyNoVariantTypeParameters on every
2473         set of parameters which are resolved.
2474
2475         * delegate.cs: Modified Delegate.Define to ensure that variant
2476         parameters are not used as type arguments and that a contravariant
2477         parameter is not used as the return type. Also call
2478         VerifyNoVariantTypeParameters on the delegate parameters.
2479
2480         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
2481         to specify generic variance.
2482
2483         * driver.cs: Added support for LanguageVersion.Future in the form of
2484         "-langversion:future".
2485
2486         * generic-mcs.cs: Stubbed out new members in generic.cs.
2487
2488 2009-02-03  Marek Safar  <marek.safar@gmail.com>
2489
2490         * class.cs, generic.cs: Emit type parameter constraints for nested
2491         types.
2492
2493 2009-02-02  Marek Safar  <marek.safar@gmail.com>
2494
2495         A fix for bug #471213
2496         * class.cs: Avoid emitting backing field for abstract event fields.
2497
2498 2009-02-01  Marek Safar  <marek.safar@gmail.com>
2499
2500         A fix for bug #359731
2501         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
2502         expressions.
2503
2504 2009-01-30  Marek Safar  <marek.safar@gmail.com>
2505
2506         A fix for bug #470767
2507         * statement.cs: Introduced BlockScopeExpression, needed when 
2508         expression tree conversion has to emit scope variables.
2509
2510 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2511
2512         * class.cs: Remove duplicate CallingConvention.
2513
2514 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2515
2516         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
2517         when I finally found the right naming convention.
2518
2519 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2520
2521         * cs-tokenizer.cs: Put back different open parens optimization.
2522
2523 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2524
2525         A fix for bug #470227
2526         * cs-tokenizer.cs: Remove too agressive parser optimization.
2527
2528 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2529
2530         A fix for bug #324319
2531         * class.cs: Remove too early base type resolve.
2532
2533 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2534
2535         A fix for bug #324319
2536         * ecore.cs: Explicitly type null when assigning to type argument to
2537         make pass verifier check.
2538
2539 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2540
2541         * anonymous.cs: Fixed recent regression when initializing captured 
2542         this.
2543
2544 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2545
2546         A fix for bug #469019
2547         * anonymous.cs: Use all parent type parameters when instantiating
2548         nested generic storey.
2549
2550 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2551
2552         * expression.cs: Check for null instance methodgroup expression.
2553
2554 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2555
2556         A fix for bug #469244
2557         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
2558         instance inside a conditional expression.
2559
2560 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2561
2562         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
2563         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
2564         GetElementType and HasElementType. IsValueType clean up.
2565
2566 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2567
2568         * nullable.cs: Use common EmitCall.
2569         
2570         * expression.cs: Emit constraint. for virtual calls only.
2571
2572 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2573
2574         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
2575         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
2576         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
2577         checks.
2578
2579 2009-01-22  Jb Evain  <jbevain@novell.com>
2580
2581         * anonymous.cs: make anonymous types' ToString implementation
2582         match what csc outputs.
2583
2584 2009-01-21  Marek Safar  <marek.safar@gmail.com>
2585
2586         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
2587         up.
2588
2589 2009-01-17  Marek Safar  <marek.safar@gmail.com>
2590
2591         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
2592         verifier checks.
2593
2594 2009-01-16  Marek Safar  <marek.safar@gmail.com>
2595
2596         * nullable.cs (LiftedBinaryOperator): Check for all possible null
2597         expressions.
2598
2599 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2600
2601         A fix for bug #466634
2602         * statement.cs: Add reference for nested storey when only this
2603         is captured.
2604
2605 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2606
2607         A fix for bug #466474
2608         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
2609         was specified.
2610
2611 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2612
2613         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
2614         Fixed nested stories parent referencing process. Also fixes #463985.
2615
2616 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2617
2618         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2619         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2620         implementation. Also fixes #463108.
2621
2622 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2623
2624         A fix for bug #416109
2625         * decl.cs: Issue correct CLSAttribute warning location.
2626
2627 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2628
2629         A fix for bug #456775
2630         * attribute.cs: Use attribute owner scope when resolving attribute
2631         arguments.
2632
2633 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2634
2635         A fix for bug #457257
2636         * decl.cs: Fixed incorrect member declaring type comparison.
2637
2638 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2639
2640         A fix for bug #460896
2641         * driver.cs: Handle /RES resources as embeddable.
2642
2643 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2644
2645         A fix for bug #462515
2646         * ecore.cs: Report inacessible members upwards.
2647
2648 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2649
2650         A fix for bug #463190, #463192
2651         * decl.cs, namespace.cs: Also import internal extension classes.
2652
2653 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2654
2655         A fix for bug #463415
2656         * generic.cs: Use right index for RemoveDependentTypes.
2657
2658 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2659
2660         A fix for bug #463196
2661         * expression.cs: Fixed enum to null comparison.
2662
2663 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2664
2665         A fix for bug #463121
2666         * nullable.cs: Fixed nullable user equality operator comparison.
2667
2668 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2669
2670         A fix for bug #462950
2671         * class.cs, decl.cs: Use full explicit name when defining automatic
2672         property backing field.
2673
2674 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2675
2676         A fix for bug #462592
2677         * pending.cs: Emit type arguments for generic proxy method.
2678
2679 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2680
2681         * expression.cs (As): Mutate all type arguments.
2682
2683 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2684
2685         A fix for bug #462622
2686         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2687         context.
2688
2689 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2690
2691         A fix for bug #450782
2692         * ecore.cs: Consider more variables of form V.I to be fixed.
2693
2694 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2695
2696         A fix for bug #460712
2697         * typemanager.cs: Core types could be imported.
2698
2699 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2700
2701         A fix for bugs #460847, #460772, #458049, #457339, #447807
2702         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2703         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2704         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2705         user lambdas used inside query clauses.
2706
2707 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2708
2709         A fix for bug #460229
2710         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2711
2712 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2713
2714         A fix for bug #459952
2715         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2716
2717 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2718
2719         A fix for bug #459630
2720         * convert.cs: Enum to valuetype conversion is not allowed.
2721
2722 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2723
2724         A fix for bug #457087
2725         * generic.cs: Don't crash when constraint comes from type
2726         declaration.
2727
2728 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2729
2730         A fix for bug #459221
2731         * anonymous.cs, statement.cs: Delay only captured this
2732         initialization.
2733
2734 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2735
2736         A fix for bug #457489
2737         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2738         and initialization to capture scope initializers correctly.
2739
2740 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2741
2742         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2743         ParameterReference refactoring.
2744
2745 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2746
2747         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2748         to be imported from any assembly.
2749
2750 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2751
2752         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2753         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2754         from anonymous method and lambda expression.
2755
2756 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2757
2758         A fix for bug #448560
2759         * expression.cs (As): Box any generic type arguments to be
2760         verifiable.
2761
2762 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2763
2764         Add tripwire for implicit conversion bugs
2765         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2766         for CS1501 error.
2767         (MethodGroupExpr.OverloadResolve): Add sanity check between
2768         IsApplicable and VerifyArgumentsCompat.
2769         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2770
2771 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2772
2773         Fix build break in System.Data_test
2774         * convert.cs (ImplicitConversionExists): Move NullLiteral
2775         conversions ...
2776         (ImplicitStandardConversionExists): ... here.
2777
2778 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2779
2780         * literal.cs: Emit correctly explicit null to nullable cast.
2781
2782 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2783
2784         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2785         resolve.
2786
2787 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2788
2789         A fix for bug #449005
2790         * convert.cs, nullable.cs: Use only one implicit nullable
2791         conversion.
2792
2793 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2794
2795         * convert.cs, literal.cs: More Convert cleanup is needed.
2796
2797 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2798
2799         * decl.cs, class.cs: Fixed misleading error message.
2800
2801 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2802
2803         A fix for bug #449005
2804         * nullable.cs (EmitEquality): Disable optimization for user operator
2805         operands.
2806
2807 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2808
2809         A fix for bug #447027
2810         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2811         with context variables stored as expression instances.
2812
2813 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2814
2815         A fix for bug #447027
2816         * delegate.cs: Fixed delegate VerifyMethod logic.
2817
2818 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2819
2820         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2821         but not verifiable.
2822
2823 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2824
2825         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2826         member type resolve to follow normal flow, instead of random
2827         property access.
2828
2829 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2830
2831         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2832         type.
2833
2834 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2835
2836         * const.cs: Emit decimal array constant as literal.
2837
2838 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2839
2840         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2841
2842 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2843
2844         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2845         into real property (saves 8 MB for corlib compilation).
2846
2847 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2848
2849         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2850         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2851         generic-mcs.cs: Small cleanup of TypeArguments.
2852
2853 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2854
2855         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2856         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2857         of ConstructedType expression, renamed to GenericTypeExpr.
2858
2859 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2860
2861         A fix for bug #445303
2862         * location.cs (IsConditionalDefined): Handle undefined global
2863         defines.
2864
2865 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2866
2867         A fix for bug #444678
2868         * expression.cs (TryReduceConstant): Always create new constant
2869         instance.
2870
2871 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2872
2873         A fix for bug #444673
2874         * ecore.cs: Ignore open generic types when used as generic type
2875         instance fields.
2876
2877 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2878
2879         A fix for bug #445458
2880         * expression.cs, cs-parser.jay: Don't crash when an expression
2881         statement is null.
2882
2883 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2884
2885         A fix for bug #445464
2886         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2887         inside unbound type.
2888
2889 2008-11-14  Jb Evain  <jbevain@novell.com>
2890
2891         * driver.cs: ignore empty -nowarn argument such as
2892         the one in -nowarn:12,13,,.
2893
2894 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2895
2896         A fix for bug #444271
2897         * anonymous.cs: Rescan parent storeys when best candidate was
2898         undone.
2899
2900 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2901
2902         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2903         useless UnboundTypeExpression.
2904         
2905         * attribute.cs: Do check obsolete attribute on generic types.
2906
2907 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2908
2909         A fix for bugs #425680, #400139
2910         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2911         refactoring.
2912
2913 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2914
2915         A fix for bug #435747
2916         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2917         compound value types assignment. Few micro optimizations added.
2918
2919 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2920
2921         A fix for bug #442610
2922         * anonymous.cs (MutateConstructor): More SRE hacking.
2923
2924 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2925
2926         A fix for bug #442579
2927         * ecore.cs: Also initialize expanded form of a method with 1 params
2928         parameter.
2929
2930 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2931
2932         * expression.cs (UnaryMutator): Do early l-side check.
2933
2934 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2935
2936         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2937         Init, otherwise we would crash later on when checking for friend
2938         assemblies. 
2939
2940         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2941         Otherwise we never get any meaningful information as to what
2942         failed. 
2943
2944 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2945
2946         A fix for bug #436318
2947         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2948
2949 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2950
2951         * namespace.cs: Turns out that it was a really bad idea to hide
2952         the errors for namespaces not found here in eval mode.    
2953
2954         * eval.cs: When we process using clauses, only enter those into
2955         the list of valid using clauses after they have been validated.   
2956
2957         The above change gives the proper semantics: it does not
2958         senselessly report the same errors with broken using statements by
2959         never storing them in the first place when they are invalid.
2960
2961 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2962
2963         A fix for bug #421839
2964         * cs-parser.jay: Remove expression from coalesce rule to force lower
2965         priority than the assignment operator.
2966
2967 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2968
2969         A fix for bug #437875
2970         * nullable.cs: Compile correctly method group operand used with null
2971         coalescing operator.
2972
2973 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2974
2975         A fix for bug #434589
2976         * expression.cs (Binary): Ignore lifted conversions when at least
2977         one operand is of reference type.
2978
2979 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2980
2981         * cs-parser.jay: Better syntax error report.
2982
2983 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2984
2985         A fix for bug #436792
2986         * cs-parser.jay: Use GetLocation to access location.
2987
2988 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2989
2990         A fix for bug #440774
2991         * cs-parser.jay: Also set current_array_type when parsing local
2992         variables types.
2993
2994 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2995
2996         A fix for bug #440785
2997         * expression.cs (As): Don't resolve self modifing expression
2998         multiple times.
2999
3000 2008-11-03  Marek Safar  <marek.safar@gmail.com>
3001
3002         A fix for bug #439447
3003         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
3004
3005 2008-11-03  Marek Safar  <marek.safar@gmail.com>
3006
3007         A fix for bug #437571
3008         * cs-parser.jay: Fixes internal error for invalid expression
3009         statements.
3010
3011 2008-10-17  Marek Safar  <marek.safar@gmail.com>
3012
3013         * ecore.cs: Resolve correctly ambiguous params delegate methods.
3014
3015 2008-10-17  Marek Safar  <marek.safar@gmail.com>
3016
3017         * generic.cs, anonymous.cs: Simplified GetDeclarations.
3018
3019 2008-10-17  Marek Safar  <marek.safar@gmail.com>
3020
3021         * cs-tokenizer.cs: More precise cast parsing.
3022
3023 2008-10-16  Martin Baulig  <martin@ximian.com>
3024
3025         * anonymous.cs (AnonymousMethodStorey): Put back the
3026         `hoisted_locals' hashtable and use it in EmitType().
3027
3028 2008-10-15  Marek Safar  <marek.safar@gmail.com>
3029
3030         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
3031         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
3032         ~5MB for corlib.
3033
3034 2008-10-14  Marek Safar  <marek.safar@gmail.com>
3035
3036         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
3037
3038 2008-10-14  Marek Safar  <marek.safar@gmail.com>
3039
3040         * statement.cs: Mutate scope initializers.
3041
3042 2008-10-14  Marek Safar  <marek.safar@gmail.com>
3043
3044         * expression.cs: Use typeless value for This constant.
3045         
3046         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
3047
3048 2008-10-14  Marek Safar  <marek.safar@gmail.com>
3049
3050         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
3051         tokenizer.
3052
3053 2008-10-13  Marek Safar  <marek.safar@gmail.com>
3054
3055         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
3056         type to type cast.
3057
3058 2008-10-13  Marek Safar  <marek.safar@gmail.com>
3059
3060         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
3061         parser and tokenizer. Fixes many ambiguities including #433258.
3062
3063 2008-10-10  Marek Safar  <marek.safar@gmail.com>
3064
3065         * cs-parser.jay: Fixed missing accessor recovery.
3066
3067 2008-10-10  Marek Safar  <marek.safar@gmail.com>
3068
3069         A fix for bug #433701
3070         * expression.cs: Better error message.
3071
3072 2008-10-10  Marek Safar  <marek.safar@gmail.com>
3073
3074         * cs-parser.jay, expression.cs: Start reporting real parser errors.
3075         
3076         * Makefile: Disabled unused debug symbols.
3077
3078         Also fixes: #320556, #321097, #321656, #321876, #351316
3079
3080 2008-10-09  Miguel de Icaza  <miguel@novell.com>
3081
3082         * eval.cs: rename "<interactive>" to "{interactive}", to work
3083         around a requirement in the compiler that this be a valid
3084         filename, and in Windows it is not (433886).
3085
3086 2008-10-09  Marek Safar  <marek.safar@gmail.com>
3087
3088         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
3089
3090 2008-10-08  Marek Safar  <marek.safar@gmail.com>
3091
3092         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
3093         cs-parser.jay: Generic type declaration and type arguments cleanup.
3094
3095 2008-10-05  Marek Safar  <marek.safar@gmail.com>
3096
3097         * cs-parser.jay: Allow parsing weird array creation construct.
3098
3099 2008-10-05  Marek Safar  <marek.safar@gmail.com>
3100
3101         * cs-parser.jay: Conflicts reduction.
3102
3103 2008-10-04  Marek Safar  <marek.safar@gmail.com>
3104
3105         * cs-parser.jay: Conflicts reduction.
3106
3107 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
3108
3109         Fix #398325
3110         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
3111         property.  Add a 'count' hint about the use of the shared vector.
3112         Ensure that we don't leak out dirty bits.
3113         (UsageVector.MergeChild): Throw away information about variables
3114         in child vectors.
3115         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
3116
3117 2008-10-03  Marek Safar  <marek.safar@gmail.com>
3118
3119         A fix for bug #431746
3120         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
3121         parameters when iterator is created.
3122
3123 2008-10-03  Marek Safar  <marek.safar@gmail.com>
3124
3125         A fix for bug #431827
3126         * expression.cs: Fixed right based pointer arithmetic operations
3127         emit.
3128
3129 2008-10-03  Marek Safar  <marek.safar@gmail.com>
3130
3131         A fix for bug #353779
3132         * assign.cs, expression.cs: Fixed compound assignment conversions.
3133
3134 2008-10-02  Marek Safar  <marek.safar@gmail.com>
3135
3136         A fix for bug #375262
3137         * statement.cs: Refactor ArrayForeach to be usable with string
3138         indexer. Optimized single dimentional arrays foreach.
3139
3140 2008-10-02  Marek Safar  <marek.safar@gmail.com>
3141
3142         A fix for bug #431255
3143         * anonymous.cs, expression.cs: Removed broken optimization.
3144
3145 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3146
3147         * anonymous.cs: Use full type parameters of parent generic
3148         containers. Removed unnecessary AddParentStoreyReference call.
3149
3150 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3151
3152         A fix for bug #324702
3153         * class.cs: Use better shorter names for explicit interface member
3154         implementations.
3155
3156         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
3157
3158 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3159         
3160         * expression.cs: Use new interface to check fixed expression.
3161
3162 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3163
3164         A fix for bug #421101
3165         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
3166         interface to check for fixed fixed-buffers.
3167
3168 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3169
3170         A fix for bug #429264
3171         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
3172         
3173         * delegate.cs: Removed unnecessary casts.
3174
3175 2008-09-30  Marek Safar  <marek.safar@gmail.com>
3176
3177         A fix for bug #352151
3178         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
3179         class.cs: Fixed already defined explicit interface members check.
3180
3181 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
3182
3183         cs-tokenizer.cs: Fix typo.
3184
3185 2008-09-28  Miguel de Icaza  <miguel@novell.com>
3186
3187         * eval.cs (InteractiveBase): The quit command now just sets a
3188         flag, instead of calling Environment.Exit(), it is milder on
3189         embedded hosts. 
3190
3191         CompiledMethod is now in Mono.CSharp, not nested inside
3192         the Evaluator, it was inconvenient to use.
3193
3194 2008-09-27  Miguel de Icaza  <miguel@novell.com>
3195
3196         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
3197         code to be invoked without having to reparse.
3198
3199 2008-09-27  Miguel de Icaza  <miguel@novell.com>
3200
3201         * ecore.cs: The recent changes to FieldExpr broke this as well.
3202         Fixes LINQ queries in the interactive shell.
3203
3204         * Multiple files: indentation fixing for the Mono coding
3205         guidelines for the switch statement.
3206
3207         * eval.cs: Make the Evaluator API thread safe.
3208
3209 2008-09-26  Marek Safar  <marek.safar@gmail.com>
3210
3211         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
3212         constructor parsing.
3213
3214 2008-09-26  Marek Safar  <marek.safar@gmail.com>
3215
3216         A fix for bug #325326
3217         * statement.cs: Check possible mistaken empty statement using
3218         explicit blocks only.
3219
3220 2008-09-25  Miguel de Icaza  <miguel@novell.com>
3221
3222         * eval.cs (LoadAssembly, ReferenceAssembly): Call
3223         RootNamespace.ComputeNamespaces to update the internal list of
3224         namespaces, this is no longer done for us.
3225
3226         (InteractiveBase): Use the Evaluator APIs instead of calling into
3227         Driver directly
3228
3229 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3230
3231         A fix for bug #429264
3232         * expression.cs: Missing mutator for access to multidimensional
3233         arrays.
3234
3235 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3236
3237         * class.cs, statement: Emit DebuggerHidden attribute for iterator
3238         entry wrapper.
3239         
3240         * driver.cs: Missing input argument check.
3241
3242 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3243
3244         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
3245         expression.cs, statement.cs, rootcontext.cs, class.cs, 
3246         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
3247         DefineMembers.
3248
3249 2008-09-24  Miguel de Icaza  <miguel@novell.com>
3250
3251         * ecore.cs (FieldExpr): Only initialize eclass when we return a
3252         fully constructed FieldExpr, fixes the regression introduced in
3253         the last commit.
3254         
3255         * ecore.cs, expression.cs: Plug back the eclass initialization as
3256         otherwise it regresses `csharp'. 
3257
3258 2008-09-24  Marek Safar  <marek.safar@gmail.com>
3259
3260         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
3261         ecore.cs, attribute.cs: Moved obsolete method checks from emit
3262         phase to resolve phase. It resolves problems with expression trees
3263         and fixes bugs #323796, #325156.
3264
3265 2008-09-23  Marek Safar  <marek.safar@gmail.com>
3266
3267         * codegen.cs: Report better error when symbol writer is missing.
3268
3269 2008-09-23  Marek Safar  <marek.safar@gmail.com>
3270
3271         * codegen.cs: Set .NET symbol writer.
3272         
3273         * decl.cs: Guard against null generic arguments.
3274         
3275         * report.cs: Don't report exactly same additional details.
3276
3277 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3278
3279         A fix for bug #324917
3280         * cs-parser.jay: Add missing multidimensional non-expression type
3281         ranks.
3282         
3283 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3284
3285         A fix for bug #428191
3286         * anonymous.cs: Create an outer generic fields also for non-storey
3287         anonymous methods.
3288
3289 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3290
3291         A fix for bug #378294
3292         * class.cs: Make fixed size buffers gmcs feature only.
3293
3294 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3295
3296         A fix for bug #355622, #324993
3297         * assign.cs, const.cs, class.cs: Create new EmitContext for each
3298         field initializer.
3299
3300 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3301
3302         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
3303         error reporting.
3304
3305 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3306
3307         A fix for bug #416110
3308         * generic.cs: Struct constraint results in default ctor and
3309         ValueType base type constraint to be set.
3310
3311 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3312
3313         A fix for bug #423791
3314         * generic.cs: Fixed params output type type-inference.
3315
3316 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3317
3318         * cs-parser.jay, expression.cs: Fixed few expression crashes.
3319         
3320 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3321
3322         * cs-tokenizer.cs: Don't break on extra partial modifier.
3323
3324 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3325
3326         A fix for bug #427592
3327         * generic.cs: Use common parameter resolve method.
3328
3329 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3330
3331         A fix for bug #414758
3332         * expression.cs, ecore.cs: Fixed crash when accessing non-static
3333         property.
3334
3335 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3336
3337         * driver.cs, namespace.cs: Read types and namespaces after all
3338         requested assemblies are loaded, fixes issues with System.Core
3339         auto-reference, and #419888.
3340
3341 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3342
3343         A fix for bug #417705
3344         * cs-parser.jay: Fixed as/is operator expression split.
3345
3346 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3347
3348         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
3349         Fixed expression tree representation of empty new expression and
3350         new initializer expression.
3351
3352 2008-09-18  Miguel de Icaza  <miguel@novell.com>
3353
3354         * eval.cs: Remove warning, keep reference to driver around.
3355
3356         * Hide fields that do not need to be public.
3357
3358 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3359
3360         A fix for bug #426385
3361         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
3362         conversion for array elements.
3363
3364 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3365
3366         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
3367         void parsing conflicts.
3368
3369 2008-09-15  Marek Safar  <marek.safar@gmail.com>
3370
3371         A fix for bug #425601
3372         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
3373         System.Core only when there is no custom ExtensionAttribute
3374         implementation.
3375
3376 2008-09-15  Miguel de Icaza  <miguel@novell.com>
3377
3378         * namespace.cs: Do not report CS0246 (name
3379
3380 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3381
3382         A fix for bug #425669
3383         * generic.cs: Don't cache generic static anonymous method 
3384         containers.
3385
3386 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3387
3388         * generic.cs, class.cs, delegate.cs: Check recursive inherited
3389         conflicting constraints.
3390
3391 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
3392
3393         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
3394         mcs too.
3395
3396 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3397
3398         * literal.cs, convert.cs, expression.cs, statement.cs: More null
3399         to null pointer conversion fixes.
3400
3401 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3402
3403         * cs-parser.jay, expression.cs: An implicitly typed local variable
3404         declarator cannot use an array initializer.
3405
3406 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3407
3408         * cs-parser.jay: Reduced number of printed tokens, add sorting.
3409
3410 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3411
3412         * generic.cs (InflatedConstraints): Don't crash when constraints
3413         are different.
3414         
3415         * cs-parser.jay: const_declarator is a block.
3416
3417         * constant.cs: Check for not allowed NaN conversions.
3418
3419 2008-09-10  Miguel de Icaza  <miguel@novell.com>
3420
3421         * driver.cs: Drop --shell argument, the compiler is no longer a
3422         REPL. 
3423
3424         * eval.cs: Move most of the code that deals with evaluation into
3425         this file and document the public API from repl.cs
3426
3427         * repl.cs: Remove from here.
3428         
3429 2008-09-10  Marek Safar  <marek.safar@gmail.com>
3430
3431         A fix for bug #424684
3432         * generic.cs: Generic class constraints must come first.
3433
3434 2008-09-09  Miguel de Icaza  <miguel@novell.com>
3435
3436         * cs-parser.jay: Improve error reporting for syntax errors in
3437         statements and expressions, we now report the expected tokens
3438         instead of reporting the useless "; expected".
3439
3440         Drop the strings from the token declaration, it turns out that
3441         they did not do what I thought they did.  Instead they were adding
3442         two sets of tokens to the tables.
3443
3444 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3445
3446         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
3447         delegate.cs: Share special type check.
3448
3449 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3450
3451         A fix for bug #423981
3452         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
3453
3454 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3455
3456         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
3457         ConvertImplicitly.
3458
3459 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3460
3461         A fix for bugs: #324750, #335946
3462         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
3463         lookup rule to determine ?-based tokens.
3464
3465 2008-09-08  Miguel de Icaza  <miguel@novell.com>
3466
3467         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
3468         expressions (like event adding or removing) end up here, so we
3469         need to treat those as statements.
3470
3471         Add LoadAssembly method.
3472
3473 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3474
3475         * repl.cs: Add Time method.
3476
3477 2008-09-05  Marek Safar  <marek.safar@gmail.com>
3478
3479         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
3480
3481 2008-09-05  Miguel de Icaza  <miguel@novell.com>
3482
3483         * repl.cs: Add workaround for old compilers.
3484
3485 2008-09-04  Jb Evain  <jbevain@novell.com>
3486
3487         * repl.cs (PrettyPrint): pretty print everything that
3488         implements IDictionary, as well as IEnumerables. Also,
3489         add a quit helper property.
3490
3491 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3492
3493         * constant.cs: Better error reporting for decimal literals.
3494         
3495         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
3496         field attributes.
3497         
3498 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3499                         Miguel de Icaza  <miguel@novell.com>
3500
3501         A fix for bug #422951
3502         * assign.cs (Assign.DoResolve): Perform the type conversions
3503         checks before we attempt to initialize `New' initializers. 
3504
3505 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3506
3507         A fix for bug #422853
3508         * delegate.cs (DelegateCreation): Add special handling for
3509         EmptyExpression.Null instance expression which is just another
3510         hack for undecided member instance exression.
3511
3512 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3513
3514         * expression.cs, ecore.cs: Emit full expression tree for reduced
3515         binary expressions.
3516
3517 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3518
3519         * expression.cs (This): Guard against multi-resolving.
3520         
3521         * ecore.cs, statement.cs (Throw): Simplified.
3522         
3523         * flowanalysis.cs: Also verify event fields.
3524
3525 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3526
3527         * assign.cs (Assign.DoResolve): Perform the type conversions
3528         checks before we attempt to initialize `New' initializers. 
3529
3530         * repl.cs (PrettyPrint): Add Hashtable prettyprint
3531
3532         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
3533         public. 
3534
3535         * repl.cs: Update help.
3536
3537 2008-09-03  Miguel de Icaza  <miguel@novell.com>
3538
3539         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
3540         handling of the default config handling, including the special
3541         treatment of System.Core assembly. 
3542
3543         Fixes the REPL processing for LINQ.
3544
3545 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3546
3547         A fix for bug #422507
3548         * expression.cs (UnboxCast): Add missing child expression mutator.
3549
3550 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3551
3552         * driver.cs: Don't self reference System.Core assembly.
3553
3554 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3555
3556         A fix for bug #422507
3557         * expression.cs (StringConcat): Add missing type mutator.
3558
3559 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3560
3561         * generic.cs (TypeInferenceContext): Follow equality rule for
3562         constructed type lower bound type inference.
3563
3564 2008-09-02  Miguel de Icaza  <miguel@novell.com>
3565
3566         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
3567         <dblank@cs.brynmawr.edu> which updates the cursor position on
3568         refresh.
3569         
3570 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3571
3572         A fix for bug #367145
3573         * driver.cs: Fixed import of extension methods when using -noconfig
3574         option.
3575
3576 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3577
3578         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
3579         version from non-generic implementation instead.
3580
3581 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3582
3583         A fix for bug #418908
3584         * class.cs: Use AddScopeStatement for field initializers.
3585
3586 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3587
3588         A fix for bug #415385
3589         * ecore.cs, convert.cs: Do method group conversion for equal group types.
3590
3591 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3592
3593         A fix for bug #421736
3594         * iterators.cs: Don't crash on unreachable iterators.
3595
3596 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3597
3598         A fix for bug #421628
3599         * parameter.cs, attribute.cs: Clone also parameter attributes.
3600
3601 2008-08-30  Miguel de Icaza  <miguel@novell.com>
3602
3603         * namespace.cs (LookupType): In EvalMode, try to replace
3604         the TypeBuilder from our cache with a Type as Reflection.Emit does
3605         not  like to mix code from older assemblies emitted and new
3606         assemblies emitted. 
3607
3608         This sounds like a serious Mono bug that prevents multiple
3609         assemblies to be generated and consumed at the same time.
3610
3611         * cs-parser.jay (push_current_class): Do not make interactive
3612         classes internal or private, make them public as we currently
3613         generate each new class in a new assembly.   
3614
3615 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3616
3617         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3618         remove types that are entered into the global namespace during
3619         parsing so that we can remove them on failure.
3620  
3621         * cs-parser.jay: Parsing: we now keep track of types that are
3622         entered into global variables and queue those in case the parsing
3623         or resolution fail.
3624  
3625         This happens in a few situations: during partial-input, we invoke
3626         the parser repeatedly for example with the string "class X", this
3627         would cause X to be registed, and we need to remove this
3628         registration so that another parse attempt later with say "class X {"
3629         would actually work.
3630  
3631         Additionally, if there is an error in the resolution phase, for
3632         example: "class X : NonExistant {}" th
3633         
3634         * cs-parser.jay: Be more precise with the errors being raised,
3635         instead of flagging all exceptions during parsing to be attributed
3636         to the parsing process, distinguish those from errors happening in
3637         the actions and hint that using -v would produce the actual
3638         exception. 
3639
3640         * repl.cs: Do not load all compiler references on each reset,
3641         doing the partial reset takes care of this.
3642         
3643 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3644
3645         * repl.cs: Add support for loading all the files from
3646         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3647         as shell libraries.
3648
3649         Introduce a micro-parser that is able to deambiguate on its input
3650         whether we are dealing with a compilation unit (namespace, class,
3651         interface, struct, delegate) declaration or a statement.   This
3652         allows both declarations and statements to be entered. 
3653
3654         Set history size by default to 300 lines.
3655
3656         Instead of distinguishing based on the parser.InteractiveResult,
3657         have only two cases: statements were parsed, or a compilation unit
3658         was.   Always pull the Using statement additions from the
3659         compilation unit parse.
3660         
3661         * cs-tokenizer.cs: Rename tokens to better describe their intent
3662         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3663         
3664         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3665         EvalMode is used to trigger the lookup of global variables while
3666         StatementMode is used turn variable declarations into static
3667         fields.
3668
3669         * getline.cs: Allow history size to be set.
3670         
3671 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3672
3673         A fix for bug #360755
3674         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3675
3676 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3677
3678         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3679         
3680         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3681         member name, it is too confusing
3682         
3683         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3684         
3685         * rootcontext.cs: Finally default to warning level 4.
3686
3687 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3688
3689         * class.cs (CheckBase): Ignore overloaded operators.
3690
3691 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3692
3693         A fix for bug #420830
3694         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3695
3696 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3697
3698         A fix for bug #420832
3699         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3700
3701 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3702
3703         A fix for bug #420386
3704         * nullables.cs: Fixed logic of nullable user comparison operators involving
3705         null values.
3706
3707 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3708         
3709         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3710
3711 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3712
3713         * repl.cs: Add support for aborting the running code with C-c. 
3714
3715 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3716
3717         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3718
3719 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3720
3721         * cs-parser.jay (interactive_statement_list): A new set of rules
3722         for hosting statements that uses the "interactive_" prefix.   
3723
3724         * repl.cs: Add support for parsing `using' as a statement or as a
3725         directive.  Deambiguating before passing this to the parser.
3726
3727         We need to distinguish statement_expressions that occur at the
3728         toplevel vs those that occur embedded into expressions.
3729
3730         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3731         that fixes the cursor key handling, and a history bug.
3732         
3733 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3734
3735         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3736         limitations in Console, instead the 2.0 bootstrap libraries now
3737         include the Console bits.
3738
3739         Also, remove the use of Nullables from getline.cs
3740
3741         ------------
3742         
3743         Interactive support for the C# compiler.   Use gmcs --shell to
3744         enter a read-eval-print loop shell.
3745
3746         Docs: http://www.mono-project.com/CsharpRepl
3747         
3748         * sources: include repl.cs here and getline.cs for gmcs.exe,
3749         everything else is getline.cs impaired.
3750
3751         * Makefile: when bootstrapping pass a special flag
3752         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3753         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3754         This distinguishes those two cases.
3755
3756         * repl.cs: Support for a read-eval-print loop.   Will be soon
3757         refactored into eval support and then REPL on top of it.
3758
3759         * ecore.cs: If a simplename lookup fails, before erroring out,
3760         if we are in EvalMode to resolve the name to a declaration in the
3761         Eval-land.    
3762
3763         This means that variable declarations that happened in previous
3764         classes (as repl puts every statement in a separate class) are
3765         made visible in this way.
3766
3767         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3768         triggered an error due to the end of file being reached.   This is
3769         used to do multi-line input, and notify the caller that the user
3770         needs to provide more text before a successful parse.
3771
3772         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3773         to drive the evaluation with a custom wrapper. 
3774
3775         * driver.cs: Add support for --shell, and refactor some code to be
3776         reused from repl.cs
3777         
3778         * namespace.cs: Add support for serializing the contents of the
3779         namespaces and reloading them.  
3780
3781         * getline.cs: A managed implementation of ReadLine under
3782         X11/Apache2 license terms.  Easy to embed in other applications as
3783         well.
3784
3785         * namespace.cs: Add some functions to save and restore the
3786         namespace state.
3787
3788         * rootcontext.cs: New public field.
3789
3790         * cs-tokenizer.cs: Add support for one of the possible characters
3791         we introduce into the token stream.  
3792
3793         This patch does not affect the regular tokenization process, the
3794         only performance hit would happen if there is an invalid character
3795         on the input string.
3796
3797         * support.cs: Move isatty helper routine here.
3798
3799         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3800         code generator for in-memory assemblies.
3801
3802 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3803
3804         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3805         parameter cannot be always used as a type.
3806
3807 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3808
3809         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3810
3811 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3812
3813         * convert.cs: Implement explicit array to IList<T> conversion.
3814
3815 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3816
3817         A fix for bug #362740
3818         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3819
3820 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3821         
3822         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3823         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3824         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3825         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3826         handling to use just one type of infrastructure and deal with generics
3827         more effectivelly.
3828
3829 2008-07-23  Martin Baulig  <martin@ximian.com>
3830
3831         *** Merged this from trunk revision 108527 ***
3832
3833         * statement.cs
3834         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3835         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3836         scope variable.
3837
3838 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3839         
3840         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3841         error checks.
3842
3843 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3844         
3845         * delegate.cs: Fixed compiler crash when creating delegate using partial
3846         method.
3847         
3848         * typemanager.cs: MulticastDelegate is not a delegate.
3849
3850 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3851         
3852         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3853         checks.
3854
3855 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3856
3857         * cs-parser.jay (type): Allow 'var' in mcs too.
3858         (local_variable_type): Likewise.
3859
3860 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3861         
3862         * driver.cs: Removed broken -noconfig variants.
3863
3864 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3865         
3866         A fix for bug #417078
3867         * expression.cs: Emit correctly left side pointer operators.
3868
3869 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3870
3871         * generic.cs, lambda.cs: Inflate method generic arguments only.
3872
3873 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3874
3875         * class.cs: Fixed struct layout check regression.
3876
3877 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3878
3879         * cs-parser.jay, enum.cs: Simplified enum parsing.
3880         
3881         * decl.cs: Check all type parameters conflicts.
3882         
3883         * expression.cs, statement.cs, attribute.cs: More expression checks.
3884
3885 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3886
3887         * generic.cs: Add type inference types restriction.
3888         
3889         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3890         anonymous.cs, expression.cs: Allocate less accessor parameters.
3891
3892 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3893
3894         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3895         classes.
3896
3897 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3898
3899         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3900
3901 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3902
3903         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3904         Also fixes #362146 and #381592.
3905
3906 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3907
3908         * ecore.cs: Reduced constant cannot be used as an attribute value.
3909         
3910         * cs-parser.jay: Base expression has to be a type.
3911         
3912         * expression.cs (Conditional): Uses ReducedExpression.
3913
3914 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3915
3916         A fix for bug #376826
3917         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3918         address of hoisted local variable or parameter cannot be taken.
3919
3920 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3921
3922         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3923         anonymous method inside checked/unchecked expression.
3924
3925 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3926
3927         * typemanager.cs (IsEqual): Guard against null.
3928         
3929         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3930         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3931         routine. Fixed few misleading conversion errors.
3932
3933 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3934
3935         * class.cs: Consider generics when checking cycles in struct layout.
3936
3937 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3938
3939         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3940
3941 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3942
3943         A fix for bug #414165
3944         * anonymous.cs: Use same anonymous implementation method for all anonymous
3945         method emits.
3946
3947 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3948
3949         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3950         constraints.
3951
3952 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3953
3954         * cs-parser.jay: Typeof argument has to be a type expression.
3955         
3956         * namespace.cs: Check alias and namespace definitions collisions.
3957         
3958         * class.cs, pending.cs: Moved explicit interface accessor implementation
3959         check.
3960         
3961         * delegate.cs, expression.cs: Verify special name invocations.
3962         
3963 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3964
3965         * cs-parser.jay: Don't choke on empty generic type arguments.
3966         
3967         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3968         
3969         * expression.cs, ecore.cs: Minor expressions bugs.
3970
3971 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3972
3973         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3974         and added more error handling.
3975         
3976         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3977         
3978         *  modifiers.cs, enum.cs: Fixed.
3979
3980 2008-07-31  Jb Evain  <jbevain@novell.com>
3981
3982         * driver.cs: remove -pkg ability of smcs.
3983
3984 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3985
3986         * statement.cs (Switch): Correctly set empty default target for single
3987         blocks.
3988
3989 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3990
3991         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3992         string switch statement implementation to use string dictionary which
3993         significantly (2-8x) improves performance of generated code.
3994
3995 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3996
3997         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3998         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3999         
4000 2008-07-29  Marek Safar  <marek.safar@gmail.com>
4001
4002         A fix for bug #412595
4003         * typemanager.cs, convert.cs, expression.cs: Some types are never
4004         convertible to each other.
4005
4006 2008-07-29  Marek Safar  <marek.safar@gmail.com>
4007
4008         * nullable.cs (CreateNullConstant): An error messages update.
4009
4010 2008-07-29  Marek Safar  <marek.safar@gmail.com>
4011
4012         A fix for bug #412595
4013         * cfold.cs: Don't cast undefined bool constant.
4014
4015 2008-07-29  Martin Baulig  <martin@ximian.com>
4016
4017         * symbolwriter.cs
4018         (SymbolWriter.Reset): New public static method.
4019
4020         * driver.cs
4021         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
4022
4023 2008-07-28  Marek Safar  <marek.safar@gmail.com>
4024
4025         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
4026         
4027         * expression.cs (ElementAccess): Exact size allocation.
4028
4029 2008-07-26  Marek Safar  <marek.safar@gmail.com>
4030
4031         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
4032
4033 2008-07-25  Marek Safar  <marek.safar@gmail.com>
4034
4035         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
4036         
4037         * class.cs: Removed $PRIVATE$ field hack which caused problems during
4038         flow analysis.
4039
4040 2008-07-25  Marek Safar  <marek.safar@gmail.com>
4041
4042         A fix for bug #412217
4043         * assign.cs: Mutate also assignment type.
4044
4045 2008-07-25  Marek Safar  <marek.safar@gmail.com>
4046
4047         A fix for bug #323644
4048         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
4049         indexers.
4050
4051 2008-07-25  Marek Safar  <marek.safar@gmail.com>
4052
4053         A fix for bug #412134
4054         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
4055         non-enumerable operands when overloading equality or bitwise operators.
4056
4057 2008-07-25  Marek Safar  <marek.safar@gmail.com>
4058
4059         * anonymous.cs: Cache closed generic anonymous method delegates.
4060
4061 2008-07-24  Marek Safar  <marek.safar@gmail.com>
4062
4063         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
4064         anonymous.cs, statement.cs: Always emit anonymous method as static method
4065         when is instance free. Use nesting for nested anynomous methods blocks.
4066         
4067 2008-07-23  Marek Safar  <marek.safar@gmail.com>
4068
4069         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
4070         types.
4071
4072 2008-07-23  Marek Safar  <marek.safar@gmail.com>
4073
4074         * expression.cs: Removed MakeSimpleCall.
4075
4076 2008-07-23  Marek Safar  <marek.safar@gmail.com>
4077
4078         A fix for bug #323012
4079         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
4080         Base method implementing interface has to be public.
4081
4082 2008-07-23  Marek Safar  <marek.safar@gmail.com>
4083
4084         * cs-parser.jay: Don't break on missing argument.
4085
4086 2008-07-22  Marek Safar  <marek.safar@gmail.com>
4087
4088         A fix for bug #320993
4089         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
4090           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
4091
4092 2008-07-22  Marek Safar  <marek.safar@gmail.com>
4093
4094         A fix for bug #320748
4095         * convert.cs: Implicit user operators cannot convert to interfaces
4096
4097 2008-07-22  Marek Safar  <marek.safar@gmail.com>
4098
4099         A fix for bug #312686
4100         * driver.cs: Ignore empty assembly references.
4101
4102 2008-07-22  Marek Safar  <marek.safar@gmail.com>
4103
4104         A fix for bug #387040
4105         * ecore.cs: Skip constrains check for an explicit implementation.
4106
4107 2008-07-21  Marek Safar  <marek.safar@gmail.com>
4108
4109         A fix for bug #409045
4110         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
4111           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
4112           identifiers are file specific unless passed as input arguments.
4113
4114 2008-07-21  Marek Safar  <marek.safar@gmail.com>
4115
4116          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
4117          to emit UnmanagedMarshal data under 2.0 profile.
4118
4119 2008-07-21  Marek Safar  <marek.safar@gmail.com>
4120
4121         A fix for bug #410369
4122         * parameter.cs: Clone correctly ParamsParameter.
4123
4124 2008-07-21  Marek Safar  <marek.safar@gmail.com>
4125
4126         * expression.cs (Argument): Always report type for type based expressions
4127         errors.
4128
4129 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4130
4131         A fix for bug #410666
4132         * anonymous.cs: Correctly initialize generic storey reference.
4133
4134 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4135
4136         * convert.cs: Don't box same type arguments.
4137
4138 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4139
4140         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
4141         Finished missing generic type mutators.
4142
4143 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4144
4145         * iterators.cs, statement.cs: Finished statements CloneTo.
4146
4147 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4148
4149         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
4150         
4151         * expression.cs: Emit optimized default value expressions in expression tree
4152         array initializer.
4153
4154 2008-07-18  Marek Safar  <marek.safar@gmail.com>
4155
4156         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
4157
4158 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4159
4160         A fix for bug #367536
4161         * cs-parser.jay: Check static constructor of generic types for an access
4162         modifier.
4163
4164 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4165
4166         A fix for bug #353800
4167         * lambda.cs: Emit ret for contextual statements.
4168         
4169         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
4170         up emitting redundant ret for all anonymous methods with return.
4171
4172 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4173
4174         A fix for bug #365188
4175         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
4176         create anonymous method storey in unreachable block.
4177
4178 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4179
4180         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
4181         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
4182         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
4183         statement.cs: Fixed relevant defects found by Gendarme.
4184
4185 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4186
4187         A fix for bug #325291
4188         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
4189         statement.cs: Replaced IAnonymousHost with top level block flag.
4190
4191 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4192
4193         * cs-parser.jay: Clean up unused open_parens.
4194
4195 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4196
4197         * ecore.cs: Custom error message for a range variable assignment.
4198
4199 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4200
4201         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
4202         load.
4203
4204 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4205
4206         * literal.cs: Null literal is of object type.
4207
4208 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4209
4210         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
4211         expression of nullable equality comparison.
4212
4213 2008-07-15  Marek Safar  <marek.safar@gmail.com>
4214
4215         * expression.cs(PointerArithmetic): Removed redundant assignment.
4216
4217 2008-07-15  Marek Safar  <marek.safar@gmail.com>
4218
4219         * decl.cs (GetSignatureForError): Report full namespace name for containers.
4220
4221 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4222
4223         A fix for bug #408361
4224         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
4225         they are replaced by GetMethod.
4226
4227 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4228
4229         A fix for bug #408721 by jeremie.laval@gmail.com
4230         * expression.cs (Indirection): Implemented CloneTo.
4231
4232 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4233
4234         * statement.cs (AssignableSlots): Temporary disabled variable initialization
4235         assert check.
4236
4237 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4238
4239         * report.cs (EnableReporting): Don't reinitialize 0-based values.
4240
4241 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4242
4243         * linq.cs: Reset tranparent parameter counter in probing mode.
4244
4245 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4246
4247         * anonymous.cs: Mutate anonymous method type.
4248
4249 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4250
4251         * ecore.cs, anonymous.cs: Mutate field expressions.
4252
4253 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4254
4255         A fix for bug #369670
4256         * linq.cs, statement.cs: Use explicit block for query expressions variables.
4257
4258 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4259
4260         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
4261
4262 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
4263
4264         Fix bug #314902
4265         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
4266         only one '>', and finds a '>>', abort the generic lookahead.
4267
4268 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4269
4270         A fix for bug #319902
4271         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
4272
4273 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4274
4275         A fix for bug #406371
4276         * statement.cs: Moved EmitSymbolInfo to Block.
4277
4278 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4279
4280         * ecore.cs: Report better error for extension method overload failures.
4281
4282 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4283
4284         * expression.cs (Is): No need to box reference values.
4285
4286 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4287
4288         * class.cs: Use event resolve context when initializing CreateEmitContext.
4289
4290 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4291
4292         A fix for bug #394436
4293         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
4294         method used inside expression trees. Added more LINQ to expression tree
4295         conversions.
4296
4297 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4298
4299         A fix for bug #378189, #370577
4300         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
4301         from expression.
4302
4303 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4304
4305         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
4306         hierarchically.
4307
4308 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4309
4310         A fix for bug #406702
4311         * anonymous.cs: Always park anonymous method in the nearest parent storey.
4312
4313 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4314
4315         A fix for bug #406648
4316         * cs-parser.jay: Report nullable use in mcs for some cases.
4317
4318 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4319
4320         * ecore.cs: Improved argument mismatch error messages.
4321
4322 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4323
4324         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
4325
4326 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4327
4328         * expression.cs (TypeOf): Mutate type argument.
4329
4330 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4331
4332         * class.cs: Report missing partial modifier for correct type.
4333
4334 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4335
4336         * ecore.cs, expression.cs (VariableReference): Variable property is 
4337         protected.
4338
4339 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4340
4341         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
4342         
4343 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4344
4345         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
4346         method delegates.
4347
4348 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4349
4350         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
4351         anonymous method storey to an instance method when only "this" is hoisted.
4352
4353 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4354
4355         A fix for bug #321615
4356         * expression.cs: Pointer comparisons use unsigned operator.
4357
4358 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4359
4360         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
4361
4362 2008-07-02  Marek Safar  <marek.safar@gmail.com>
4363
4364         A fix for bug #404905
4365         * class.cs: Always initialize local unsafe variables.
4366
4367 2008-06-30  Marek Safar  <marek.safar@gmail.com>
4368
4369         A fix for bug #396987
4370         * expression.cs (NewInitialize): Clear local temporary variable for next run
4371
4372 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4373
4374         A fix for bug #401020
4375         * ecore.cs: Both types and modifiers have to match for ref and out arguments
4376
4377 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4378
4379         A fix for bug #398319
4380         * cs-parser.jay: Implemented undocumented base access expression inside
4381         anonymous types.
4382
4383 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4384
4385         A fix for bug #404227
4386         * cs-parser.jay: Parse namespace declaration using qualified identifier.
4387
4388 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4389
4390         A fix for bug #404227
4391         * convert.cs: Fixed explicit array to interface cast.
4392
4393 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4394
4395         A fix for bug #403894
4396         * delegate.cs: Mutate DelegateInvocation type.
4397
4398 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4399
4400         A fix for bug #379348
4401         * delegate.cs: Box a load of generic parameters.
4402
4403 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4404
4405         * expression.cs: Add an array creation arguments mutate.
4406
4407 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4408
4409         A fix for bug #386068
4410         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
4411         parameter.
4412
4413 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4414
4415         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
4416         CloneTo.
4417
4418 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4419
4420         A fix for bug #403518
4421         * delegate.cs: Type correctly anonymous method new invocation.
4422
4423 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4424
4425         A fix for bug #394826
4426         * anonymous.cs: Fully qualify members when resolving anonymous type internal
4427         calls.
4428
4429 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4430
4431         A fix for bug #394826
4432         * anonymous.cs, iterators.cs: Construct generic storey only when is really
4433         needed.
4434
4435 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4436
4437         * class.cs: Clone indexer parameters for localized capturing.
4438
4439 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4440
4441         A fix for bug #402379
4442         * expression.cs: Don't crash when an object initializer resolve fails.
4443
4444 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4445
4446         A fix for bug #402888
4447         * expression.cs: Mutate conditional expression.
4448
4449 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4450
4451         A fix for bug #401012
4452         * class.cs: Keep StructLayout in shared container.
4453
4454 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4455
4456         A fix for bug #400438
4457         * decl.cs, class.cs: Only properties can be automatically implemented.
4458
4459 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4460
4461         * statement.cs (ChangeToIterator): Copy also labels.
4462
4463 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4464
4465         * ecore.cs: Pass type argument details to parent extension method.
4466
4467 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4468
4469         A fix for bug #375966
4470         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
4471
4472 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
4473
4474         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
4475
4476 2008-06-22  Marek Safar  <marek.safar@gmail.com>
4477
4478         A fix for bug #394347
4479         * anonymous.cs: Cache compatible delegates as compatibility check produces
4480         a new method every time.
4481
4482 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4483
4484         * anonymous.cs: Propagate storey reference for single references.
4485
4486 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4487
4488         A fix for bug #387615
4489         * assign.cs, expression.cs: Correctly clone compound assignment.
4490
4491 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4492
4493         A fix for bug #359611, #359604
4494         * anonymous.cs: Mutate all types of hoisted parameters.
4495
4496 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4497
4498         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
4499         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
4500         expression.cs, codegen.cs, statement.cs
4501         
4502         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
4503         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
4504         
4505         ** Anonymous methods, lambda expressions rewrite **
4506         
4507         Anonymous expressions are now resolved when an explicit block is resolved 
4508         and they don't require any registration procedure anymore. Further,
4509         anonymous methods are defined when explicit block is emitted which allows
4510         better control of whole process and opens possibilities for more
4511         optimizations as well as alternative to reverse whole process.
4512         
4513         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
4514         process consistent and to correctly emit hoisted generic methods when they
4515         have at least 1 hoisted variable.
4516         
4517 2008-06-17  Martin Baulig  <martin@ximian.com>
4518
4519         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
4520         iterator method.
4521         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
4522         virtual property; check it in Emit().
4523         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
4524         an iterator.
4525         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
4526         an iterator.
4527         (Indexer.Define): Likewise.
4528
4529 2008-06-17  Marek Safar  <marek.safar@gmail.com>
4530
4531         * convert.cs: Don't use IsInterface on type arguments.
4532         
4533         * delegate.cs: DelegateInvocation uses MethodInfo.
4534         
4535         * parameter.cs: Removed IsTypeParameter.
4536         
4537         * generic-mcs.cs: More missing stuff.
4538
4539 2008-06-16  Martin Baulig  <martin@ximian.com>
4540
4541         * modifiers.cs
4542         (Modifiers.DEBUGGER_HIDDEN): New public const.
4543
4544         * typemanager.cs
4545         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
4546
4547         * class.cs
4548         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
4549         (AbstractPropertyEventMethod): Likewise.
4550         (Constructor.Emit): Likewise.
4551         (SourceMethod.SetCompilerGenerated): Removed.
4552
4553         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
4554         on MoveNext().
4555
4556         * anonymous.cs
4557         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
4558         if we're an `IteratorHost'.
4559         (AnonymousMethodMethod..ctor): Don't set
4560         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
4561         not on the method.
4562
4563 2008-06-16  Marek Safar  <marek.safar@gmail.com>
4564
4565         * statement.cs: Clean-up foreach statements.
4566
4567 2008-06-12  Marek Safar  <marek.safar@gmail.com>
4568
4569         * class.cs: Stop using public method which should not exist
4570         (MethodBuilder.SetGenericMethodSignature).
4571
4572 2008-06-11  Martin Baulig  <martin@ximian.com>
4573
4574         * location.cs
4575         (Location.LookupFile): Add `CompilationUnit' argument; when given
4576         a relative file name, make it relative to the directory the .cs
4577         file is located in instead of using the current directory.
4578
4579 2008-06-11  Martin Baulig  <martin@ximian.com>
4580
4581         * class.cs
4582         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
4583         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
4584         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
4585         (SourceMethod.SetCompilerGenerated): Likewise.
4586
4587 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4588
4589         * codegen.cs, driver: Only write symbol file when it's asked for.
4590
4591 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4592
4593         * codegen.cs: Don't use assembly writer error handling for symbol writer.
4594
4595 2008-06-10  Martin Baulig  <martin@ximian.com>
4596
4597         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
4598
4599 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4600
4601         A fix for bug #316290
4602         * expression.cs: Include decimal operators in predefined table.
4603         
4604         * parameters.cs: More readonlyness.
4605
4606 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4607
4608         A fix for bug #397213
4609         * cs-parser.jay: One more missing current_local_parameters reset.
4610
4611 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4612
4613         A fix for bug #396633
4614         * class.cs: Host backing field in partial container.
4615
4616 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4617
4618         A fix for bug #397068
4619         * expression.cs: Check both operand types when predefined operator is used.
4620
4621 2008-06-05  Martin Baulig  <martin@ximian.com>
4622
4623         Merged the `debugger-kahalo' branch.
4624
4625         * class.cs
4626         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4627         we're an iterator method.
4628         (SourceMethod): Reflect latest symbol writer changes;
4629         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4630         now `start_row' and `end_row'.
4631         (Constructor.Emit): Fix the logic whether to emit symbol information.
4632
4633         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4634         generated methods.
4635
4636         * location.cs
4637         (CompilationUnit): New public class; derives from `SourceFile'.
4638         (SourceFileEntry.DefineSymbolInfo): New public method.
4639         (SourceFileEntry.SetChecksum): New public method.
4640         (Location): Encode hidden line numbers by using `column == 255';
4641         the .ctor now accepts `column == -1' to mark a hidden line number.
4642         (Location.Hidden): New public property.
4643         (Location.CheckPoint): Add `CompilationUnit'.
4644         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4645         (Location.Push): Add `CompilationUnit compile_unit' argument.
4646         (Location.CompilationUnit): New public property.
4647
4648         * statement.cs
4649         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4650
4651         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4652
4653         * driver.cs: `SourceFile' -> `CompilationUnit'.
4654
4655         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4656
4657         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4658
4659         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4660         `#line hidden'.
4661
4662         * symbolwriter.cs
4663         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4664         new symbol writer API to also pass the file.
4665
4666 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4667
4668         * statement.cs: Emit catch variable assignment using variable expression.
4669         
4670 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4671
4672         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4673         with other variable types.
4674
4675 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4676
4677         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4678         GetLength method emit, it breaks resolve rules.
4679         
4680 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4681             Marek Safar  <marek.safar@gmail.com>
4682                         
4683         A fix for bug #395542
4684         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4685         declaration.
4686         
4687 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4688
4689         A fix for bug #395287
4690         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4691
4692 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4693
4694         A fix for bug #395845
4695         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4696         non-nullable parameter type.
4697         
4698 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4699
4700         * class.cs: Handle contructor initializer as a statement in top-level block.
4701
4702 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4703
4704         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4705         security attributes.
4706
4707 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4708
4709         * ecore.cs, expression.cs: Small IVariable refactoring.
4710
4711 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4712
4713         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4714
4715 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4716
4717         * cs-parser.jay: Removed redundant catch type check.
4718
4719 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4720
4721         A fix for bug #390372
4722         * nullable.cs: Set correct return type.
4723
4724 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4725
4726         A fix for bug #391062
4727         * typemanager.cs: Fixed crash when comparing null types.
4728
4729 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4730
4731         A fix for bug #391871
4732         * cs-parser.jay: Better error handling for invalid catch type.
4733
4734 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4735
4736         A fix for bug #392155
4737         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4738
4739 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4740
4741         A fix for bug #390666
4742         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4743         expressions.
4744
4745 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4746
4747         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4748         in getter.
4749
4750 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4751
4752         A fix for bug #389625
4753         * delegate.cs, generic.cs: Some progress on method group return type
4754         inference.
4755
4756 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4757
4758         A fix for bug #378419
4759         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4760
4761 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4762
4763         * class.cs (Constructor): Added IsCompilerGenerated.
4764
4765 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4766
4767         * expression.cs: Enum binary operators can accept non-enum operand only when
4768         is implicitly convertible to underlying type.
4769
4770 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4771
4772         A fix for bug #389272
4773         * support.cs: Workaround System.InvalidOperationException for enums.
4774
4775 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4776
4777         A fix for bug #389073
4778         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4779
4780 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4781
4782         * driver.cs: Split Parse.
4783         
4784         * location.cs (LookupFile): Uses string.Empty.
4785
4786 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4787
4788         * expression.cs, parameter.cs: Small ParameterReference clean up.
4789
4790 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4791
4792         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4793         hack. Fixes #387502.
4794
4795 2008-05-06  Martin Baulig  <martin@ximian.com>
4796
4797         * class.cs (Constructor.Emit): Fix the logic whether to emit
4798         symbol information.
4799
4800 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4801
4802         Fix #385503
4803         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4804         InvalidOperationException when the iterator is before the start or
4805         after the end.
4806
4807 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4808
4809         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4810         when left is nullable type.
4811
4812 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4813
4814         A fix for bug #386628
4815         * expression.cs (LocalVariableReference): Continue in resolving when
4816         variable is not assigned.
4817
4818 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4819
4820         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4821         nullable operations.
4822
4823 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4824
4825         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4826         it saves many redundant temporary variables for nullable operations.
4827
4828 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4829
4830         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4831         
4832         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4833         method.
4834         
4835         * nullable.cs: Constant coalescing operator optimizations.
4836
4837 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4838
4839         * constant.cs: Use unsigned conversion for values which are unsigned only.
4840
4841 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4842
4843         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4844         coalescing operator as it should be.
4845
4846 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4847
4848         A fix for bug #371016
4849         * expression.cs: All predefined delegate operators require implicit method
4850         group conversion.
4851         
4852 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4853
4854         * constant.cs: Emit long constant as uint when fits the range.
4855         
4856         * convert.cs, expression.cs: Fixed few unsafe conversions.
4857
4858 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4859
4860         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4861
4862 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4863
4864         Fix #385758
4865         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4866         'expr'.
4867         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4868
4869 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4870
4871         * constant.cs, literal.cs: IsLiteral property for error reporting.
4872         
4873         * ecore.cs, expression.cs: Implemented Property expression.
4874
4875 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4876
4877         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4878         
4879         * nullable.cs: Implemented nullable coalescing null operator.
4880
4881         * ecore.cs, expression.cs: Expression trees work.
4882
4883 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4884
4885         * ecore.cs: CreateExpressionTree is finally abstract.
4886
4887         * expression.cs, linq.cs: Updated.
4888
4889 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4890
4891         * expression.cs, ecore.cs: Block base access expression inside expression
4892         tree.
4893
4894 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4895
4896         A fix for bug #385058
4897         * expression.cs: User-defined operator implementations always take
4898         precedence over predefined operator implementations.
4899
4900 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4901
4902         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4903         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4904         expression tree conversions.
4905         
4906 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4907
4908         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4909         operators method details to Operator class.
4910
4911 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4912
4913         * anonymous.cs: Pass unsafe flags to anonymous container.
4914         
4915         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4916         inside expression tree.
4917
4918 2008-04-29  Martin Baulig  <martin@ximian.com>
4919
4920         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4921         (Tokenizer.PopPosition): Also restore the `line'.
4922
4923 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4924
4925         * delegate.cs: Implemented Invoke expression.
4926
4927 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4928
4929         * expression.cs: Fixed equality reference comparison regression.
4930
4931 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4932
4933         * ecore.cs: Clean up EmptyCast hack.
4934         
4935         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4936         using correct conversion rules. Also fixes #383993.
4937
4938 2008-04-28  Martin Baulig  <martin@ximian.com>
4939
4940         * class.cs (Constructor.Emit): Don't emit debugging information
4941         for generated default .ctor's.
4942
4943 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4944
4945         * convert.cs: Empty-cast ushort to int conversion.
4946
4947 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4948
4949         A fix for bug #384191
4950         * ecore.cs, expression.cs: Fixed expression cloning.
4951
4952 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4953
4954         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4955
4956 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4957
4958         Fix #381559, test-638.cs, test-639.cs
4959         * assign.cs (CompoundAssign.Helper): New wrapper.
4960         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4961         access.
4962         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4963         Pass unconverted expressions to the params array creation expression.
4964         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4965         (PropertyExpr.EmitAssign): Likewise.
4966         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4967         element if it is of kind CompoundAssign.Helper.
4968         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4969         first before anything else.
4970         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4971         (ArrayAccess.LoadArrayAndArguments): Simplify.
4972
4973 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4974
4975         * expression.cs: Fixed cloning of typeof(void).
4976
4977 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4978
4979         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4980         (Assign.Emit): Likewise.  Move it to ...
4981         (CompoundAssign.DoResolve): ... here and ...
4982         (CompoundAssign.Emit): ... here.
4983         (EventAddOrRemove): New helper to handle += and -= on events, and
4984         avoid the use of BinaryDelegates.
4985         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4986         (EventExpr.EmitAddOrRemove): Improve.
4987         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4988
4989         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4990         create VarExprs for 'foo.bar.var'.
4991         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4992         is a highly inappropriate name for its functionality.
4993
4994 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4995
4996         Simplify handling of multiple assignments
4997         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4998         inheritable-only.
4999         (SimpleAssign): New.  Class to be used for normal assignments.
5000         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
5001         * expression.cs, parameter.cs, statement.cs: Likewise.
5002
5003 2008-04-25  Marek Safar  <marek.safar@gmail.com>
5004
5005         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
5006         for incompatible underlying types, more to come, uff.
5007
5008 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
5009
5010         Fix gtest-388.cs
5011         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
5012         Handle 'leave_copy'.
5013
5014 2008-04-25  Marek Safar  <marek.safar@gmail.com>
5015
5016         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
5017
5018 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
5019
5020         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
5021         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
5022         * statement.cs (While, Do, For): Allow test to have side effects.
5023         (For.DoEmit): Always emit InitStatement.
5024
5025         Fix test-635.cs
5026         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
5027         Always create SideEffectConstant.
5028         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
5029         of type EnumConstant.
5030
5031         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
5032         Handle 'right' being SideEffectConstant of type 'bool'.
5033
5034         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
5035         Use left.EmitBranchable instead of open coding it, so as to
5036         improve optimization opportunities.
5037
5038         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
5039
5040         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
5041         assumptions.
5042         (Expression.EmitSideEffect): Document.
5043
5044 2008-04-23  Marek Safar  <marek.safar@gmail.com>
5045
5046         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
5047
5048 2008-04-23  Marek Safar  <marek.safar@gmail.com>
5049
5050         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
5051
5052 2008-04-23  Marek Safar  <marek.safar@gmail.com>
5053
5054         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
5055         conversion to expression tree.
5056
5057 2008-04-23  Marek Safar  <marek.safar@gmail.com>
5058
5059         * ecore.cs: Removed unused expression.
5060
5061 2008-04-22  Marek Safar  <marek.safar@gmail.com>
5062
5063         * expression.cs: Implemented NegateChecked and New expressions.
5064
5065 2008-04-22  Marek Safar  <marek.safar@gmail.com>
5066
5067         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
5068
5069 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
5070
5071         Fix #351102
5072         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
5073         needing final 'ret' instruction.
5074
5075 2008-04-22  Marek Safar  <marek.safar@gmail.com>
5076
5077         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
5078
5079 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5080
5081         * expression.cs: Emit ldnull and not null expression as an instance argument
5082          of static method expression calls.
5083
5084 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5085
5086         A fix for bug #378200
5087         * expression.cs: Fixed crash when creating parameterless expression tree
5088         method call.
5089
5090 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5091
5092         A fix for bug #375297
5093         * anonymous.cs: Fixed crash when inferring from null argument anonymous
5094         method.
5095
5096 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5097
5098         A fix for bug #377596
5099         * decl.cs, class.cs: Emit delegate type argument attributes.
5100
5101 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5102
5103         A fix for bug #365314
5104         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
5105         
5106 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5107
5108         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
5109         only.
5110
5111 2008-04-21  Marek Safar  <marek.safar@gmail.com>
5112
5113         * generic.cs (TypeParameter): Removed redundant location.
5114
5115 2008-04-19  Marek Safar  <marek.safar@gmail.com>
5116
5117         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
5118         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
5119         FullNamedExpression in all declaration type expression, statements will come
5120         later.
5121
5122 2008-04-18  Marek Safar  <marek.safar@gmail.com>
5123
5124         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
5125         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
5126
5127 2008-04-18  Marek Safar  <marek.safar@gmail.com>
5128
5129         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
5130         code.
5131
5132 2008-04-17  Marek Safar  <marek.safar@gmail.com>
5133
5134         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
5135         constraints.
5136
5137 2008-04-17  Marek Safar  <marek.safar@gmail.com>
5138
5139         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
5140         name expressions.
5141         Also fixes #340463.
5142
5143 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
5144
5145         Hook up 'EmitSideEffect'
5146         * constant.cs (Constant.EmitSideEffect): New.
5147         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
5148         (SideEffectConstant.EmitSideEffect): New.
5149         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
5150         unconditional branch in EmitBranchable.
5151         (FieldExpr.EmitBranchable): New.
5152         * expression.cs (Unary.EmitSideEffect): New.
5153         (Binary.EmitSideEffect): New.
5154         (VariableReference.EmitSideEffect): New.  Do nothing.
5155
5156 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
5157
5158         Introduce 'EmitSideEffect'
5159         * ecore.cs (Expression.EmitSideEffect): New.
5160         (TypeCast): Rename from EmptyCast.
5161         (EmptyCast): New.
5162         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
5163         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
5164         * convert.cs, nullable.cs: Update to changes.
5165
5166 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5167
5168         * class.cs, cs-parser.jay: Early check for base types expression.
5169
5170 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5171
5172         * decl.cs (MemberName): Declare PrettyName as obsolete.
5173
5174 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5175
5176         * namespace.cs: Use MemberName comparison.
5177
5178 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
5179
5180         Fix build break
5181         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
5182         FullName.
5183         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
5184         (MemberName.FullyQualifiedName): New.  Provides the functionality
5185         that users assume FullName would have.
5186         * ecore.cs, namespace.cs: Update to changes.
5187
5188         * statement.cs (Using.assign): Make into ExpressionStatement.
5189         (Using.EmitPreTryBody): Simplify.
5190
5191 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5192
5193         * report.cs: ColorFormat is protected.
5194         
5195         * rootcontext.cs: Unused fields clean-up.
5196         
5197         * namespace.cs: Made UsingEntry name private.
5198
5199 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5200
5201         * cs-tokenizer.cs, location.cs: Removed unused field.
5202
5203 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
5204             Raja R Harinath  <harinath@hurrynot.org>
5205
5206         Fix #379822
5207         * constant.cs (SideEffectConstant.value): Rename from 'left'.
5208         (SideEffectConstant.side_effect): Rename from 'right'.
5209         (SideEffectConstant..ctor): Normalize 'side_effect'.
5210         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
5211         value of this constant.
5212         * cfold.cs: Update to changes.
5213
5214 2008-04-15  Marek Safar  <marek.safar@gmail.com>
5215
5216         * cs-paser.jay: Removed unused variable.
5217         
5218         * driver.cs: Made Compile instance method.
5219
5220 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
5221
5222         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
5223
5224 2008-04-15  Marek Safar  <marek.safar@gmail.com>
5225
5226         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
5227
5228 2008-04-13  Jb Evain  <jbevain@novell.com>
5229
5230         * namespace.cs: update the System.Core fullname for 2.1
5231         * driver.cs: update the list of required assemblies for 2.1.
5232         Merged from the Moonlight 2 branch.
5233
5234 2008-04-11  Marek Safar  <marek.safar@gmail.com>
5235
5236         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
5237         types and user defined operators. User operators arguments has to be checked
5238         for null value before invocation, which also means no operator is called
5239         when any argument is not convertible to unwrapped nullable type.
5240         
5241 2008-04-09  Marek Safar  <marek.safar@gmail.com>
5242
5243         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
5244         of Unary expressions to follow operator overloading rules precisely.
5245         Also fixes #321794, #323794
5246         
5247 2008-04-08  Marek Safar  <marek.safar@gmail.com>
5248
5249         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
5250         expression.
5251         
5252 2008-04-08  Marek Safar  <marek.safar@gmail.com>
5253
5254         * expression.cs, ecore.cs: Implemented MemberInit expression.
5255         
5256 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
5257
5258         Fix mono/tests/exception4.cs
5259         * statement.cs (ExceptionStatement, TryCatch): Revert to using
5260         ec.NeedReturnLabel () rather emitting a 'nop'.
5261
5262         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
5263         simple heuristic.
5264         (TryCatch.SomeCodeFollows): Likewise.
5265         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
5266         for 'break', 'continue' and 'return' statements inside a try.
5267         We're fairly sure that the generated IL stream will have more
5268         instructions textually following the try.
5269         (FlowBranchingTryCatch): Likewise.
5270
5271         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
5272         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
5273         overrides.
5274
5275         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
5276         wrapper -- forward everything to CollectionForeach.
5277         (CollectionForeach.NonDisposableWrapper): New.
5278         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
5279         instead of a pop + branch to end.
5280
5281 2008-04-07  Marek Safar  <marek.safar@gmail.com>
5282
5283         A fix for bug #377485
5284         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
5285         Propagate location for extension method groups. Report conversion failure at
5286         right place.
5287
5288 2008-04-07  Marek Safar  <marek.safar@gmail.com>
5289
5290         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
5291         ListInit and Field expressions.
5292
5293 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
5294
5295         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
5296         Since $PC is always -1 inside the body of MoveNext, the fault
5297         handler is a no-op.
5298         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
5299         * statement.cs (ExceptionStatement.emit_finally): Likewise.
5300         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
5301
5302         The denouement!  Fix #324708
5303         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
5304         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
5305         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
5306         'finally' inside the finally clause.
5307
5308         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
5309         inside an iterator.  Don't emit the body of the 'finally' inside
5310         the finally clause yet.
5311
5312         Use the ResumableStatement infrastructure for MoveNext ()
5313         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
5314         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
5315         'old_resume_points'.  Move dispatcher upfront.
5316         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
5317         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
5318         in an enumerator.  This encodes the main fix in this patch series
5319         -- we can only jump into the first instruction of a try from the
5320         outside, but we want to emit try/finally regions in iterators and
5321         resume in the middle of them.
5322
5323 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
5324
5325         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
5326         of NeedReturnLabel here.
5327
5328         Introduce a common point for emitting try/finally to IL
5329         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
5330         features of the various subclasses, which are now driven by ...
5331         (ExceptionStatement.EmitPreTryBody): ... this and ...
5332         (ExceptionStatement.EmitTryBody): ... this and the original
5333         EmitFinallyBody.
5334         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
5335         Remove DoEmit and update to follow above protocol.
5336
5337         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
5338         of the dispatcher are the same, skip emitting the 'switch'.
5339         * iterator.cs (Iterator.EmitDispose): Update to changes.
5340
5341         Clean up handling of 'using' statement
5342         * statement.cs (UsingTemporary): New.  Carved out of ...
5343         (Using): ... this.  Simplify drastically.  Handle exactly
5344         one variable.
5345         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
5346         or Using as appropriate.  If there are multiple variable declared,
5347         create nested Using statements.
5348         (resource_acquisition): Kill.
5349
5350         * statement.cs (ExceptionStatement.EmitForDispose): Use
5351         EmitFinallyBody, not EmitFinally.
5352
5353         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
5354         * iterator.cs: Update to changes.
5355
5356         Start using the ResumableStatement infrastructure
5357         * statement.cs (ResumeableStatement.PrepareForDispose): New.
5358         (ResumableStatement.EmitForDispose): New.
5359         (ExceptionStatement): Override them.
5360         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
5361         EmitForDispose to create the body of the Dispose method.  Don't
5362         use OldResumePoint.
5363
5364         * iterator.cs (Iterator.AddResumePoint): Move here from ...
5365         * statement.cs (Toplevel.AddResumePoint): ... here.
5366         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
5367         * flowanalysis.cs (FlowBranchingIterator): New.
5368         * codegen.cs (EmitContext): Update to changes.
5369
5370         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
5371         (Iterator.old_resume_points): Rename from 'resume_points'.
5372         (Iterator.MoveNextStatement): Remove unused class.
5373
5374         New infrastructure for try/finally in iterators (still unused)
5375         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
5376         (FlowBranchingToplevel.AddResumePoint): Hook into
5377         ToplevelBlock.AddResumePoint.
5378         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
5379         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
5380         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
5381         resume points and assign program-counter values.
5382         (ExceptionBlock.AddResumePoint): Collect resume points for
5383         de-muxer at the top of try block.
5384         * iterators.cs (Yield.CheckContext): Simplify.
5385         (Yield.Resolve): Use FlowBranching.AddResumePoint.
5386
5387 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
5388
5389         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
5390         argument to an ExitStatement.
5391         (FlowBranchingException): Refactor saved origins code.
5392         * statement.cs (ExitStatement): Update to cahges.
5393         * iterator.cs (YieldBreak): Likewise.
5394
5395         * statement.cs (ResumableStatement): New.  Common base class for
5396         YieldReturn and ExceptionStatement.
5397         (ExitStatement): New.  Common base class for Return and YieldBreak.
5398         (Return): Update to changes.
5399         * iterator.cs (YieldBreak): Likewise.
5400         * lambda.cs (ContextualReturn): Likewise.
5401
5402         Fix #377028
5403         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
5404         emit a meaningful error message.
5405
5406         Fix #324765, #319508
5407         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
5408         (VariableInfo.SetAssigned): Set it.
5409         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
5410         determine if CS0219 or CS0168 is appropriate.  Don't use
5411         flow-analysis information.
5412         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
5413         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
5414         (EmitContext.EndFlowBranching): ... this.
5415
5416 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5417
5418         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
5419
5420 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5421
5422         A fix for bug #376508
5423         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
5424         ImplicitConversionExists.
5425
5426 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5427
5428         * expression.cs (Binary): Added remaining binary operators to expression
5429         tree builder.
5430
5431         * nullable.cs: Optimize shift with null argument.
5432
5433 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
5434
5435         Fix minor IL regression
5436         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
5437         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
5438         * cs-parser.jay (try_statement): Update to changes.
5439
5440         * statement.cs (TryFinally.need_exc_block): Delete.
5441         (TryFinally): Update to changes.
5442
5443         Now all ExceptionStatements are unconditional
5444         * statement.cs (CollectionForeach.DisposableWrapper): New.
5445         Extract out the try/finally code into a new wrapper.
5446         (CollectionForeach.Resolve): Use it to simplify the code.
5447
5448 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
5449
5450         Start at simplifying ExceptionStatement semantics a bit
5451         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
5452         * cs-parser.jay (try_statement): Update to changes.
5453         (opt_catch_clauses): Remove.
5454         * flowanalysis.cs: Update to changes.
5455         (FlowBranching.BranchingType.TryCatch): New.
5456         (FlowBranchingTryCatch): New.
5457
5458         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
5459         (FlowBranching.CreateBranching): Update to changes.
5460         (FlowBranchingBlock.AddSibling): Add sanity check.
5461         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
5462         Update to changes.
5463
5464         * iterators.cs (Iterator.MarkFinally): Remove.
5465         * statement.cs (ExceptionStatement): Update to changes.
5466
5467         Add support for skipping over finally blocks at runtime.  First
5468         in a series to fix #324708
5469         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
5470         (Iterator.EmitMoveNext): Initialize it.
5471         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
5472         branch over the body of the 'finally' clause.
5473
5474 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
5475
5476         Avoid lopsided use of Foo/DoFoo names
5477         * statement.cs (ExpressionStatement.EmitFinallyBody):
5478         Rename from EmitFinally.
5479         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
5480         * iterator.cs: Update to changes.
5481
5482 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5483
5484         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
5485         based on UserOperatorCall. More binary nullable operators clean up.
5486
5487 2008-04-02  Martin Baulig  <martin@ximian.com>
5488
5489         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
5490
5491 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5492
5493         * nullable.cs: Merge user and empty conversions when lifting expression
5494         trees.
5495         
5496         * expression.cs (StringConcat): Implemented expression tree representation.
5497
5498 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5499
5500         * nullable.cs: When lifting null literal and a user operator exists, no call 
5501         is made.
5502         
5503 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5504
5505         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
5506         null.
5507
5508 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5509
5510         * nullable.cs, expression.cs: Use namespace instead heavily nested
5511         monster abstract class.
5512
5513 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5514
5515         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
5516         lifting of null literal and user operators. Clean up of some temporary
5517         nullable hacks.
5518
5519 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
5520
5521         Fix #368224, test-629.cs
5522         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
5523         if it crossed an unwind-protect boundary.
5524         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
5525         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
5526         inside an unwind-protected region.
5527         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
5528         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
5529         'leave' instead of a 'br' if unwind-protected.
5530         (Iterator.EmitYieldBreak): Likewise.
5531
5532 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
5533
5534         * driver.cs: Only define versioninfo resources if no win32 resource
5535         file was specified.
5536
5537 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5538
5539         A fix for bug #372375
5540         * convert.cs: Fixed boxing of nullable types.
5541
5542 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5543
5544         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
5545         type.
5546
5547 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5548
5549         A fix for bug #374619
5550         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
5551         
5552 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5553
5554         * lambda.cs: Check return type only for invocation.
5555         
5556 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5557
5558         A fix for bug #374214
5559         * ecore.cs: Correctly report argument type mismatch.
5560
5561 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5562
5563         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
5564         and not rely on broken IsEnum.
5565
5566 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5567
5568         * nullable.cs: New file, extracted from generic.cs.
5569         
5570         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
5571
5572 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5573
5574         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
5575         predefined comparison operators and null literals.
5576         
5577         * report.cs: New warning ID.
5578         
5579 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5580
5581         A fix for bug #370577
5582         * lambda.cs: Check return type too.
5583
5584 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5585
5586         A fix for bug #372846
5587         * class.cs: Automatic properties can be declared as unsafe.
5588
5589 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5590
5591         * location.cs: Use string based concatenation.
5592         
5593         * expression.cs: LiftedBinaryOperator is gmcs only.
5594         
5595 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5596
5597         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
5598         conversions rules and expression trees.
5599
5600 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5601
5602         * delegate.cs: Use extension method source as delegate target.
5603
5604 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5605
5606         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
5607         binary operations to be purely based on binary operations and optimized
5608         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
5609         and other ET refactoring.
5610         
5611         * typemanager.cs: Fixed warning.
5612         
5613 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5614
5615         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5616         
5617         * symbolwriter.cs: Fixed.
5618
5619 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5620
5621         * anonymous.cs, driver.cs: Reset anonymous types counters.
5622
5623 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5624
5625         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5626         
5627         * class.cs: Use fullname for all type member definitions.
5628         
5629 2008-02-19  Martin Baulig  <martin@ximian.com>
5630
5631         * class.cs
5632         (IMethodData.EmitExtraSymbolInfo): New interface method.
5633         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5634         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5635         interface method here as an empty public virtual method.
5636
5637         * anonymous.cs
5638         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5639         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5640         CodeGen.SymbolWriter.SetRealMethodName().       
5641
5642 2008-02-18  Martin Baulig  <martin@ximian.com>
5643
5644         * anonymous.cs
5645         (ScopeInfo.EmitType): Override this and emit debugging
5646         information for captured variables.
5647         (RootScopeInfo.EmitType): Override this and emit symbol
5648         information for a captured `this'.
5649
5650 2008-02-15  Martin Baulig  <martin@ximian.com>
5651
5652         * iterators.cs: Emit debugging info.
5653
5654         * codegen.cs
5655         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5656         (EmitContext.OmitDebuggingInfo): New public property.
5657
5658         * statement.cs
5659         (While): Override Emit() and don't emit symbol info there; do it
5660         inside DoEmit() instead.
5661         (Block.Emit): Omit symbol information while emitting the scope
5662         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5663         block logic.
5664         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5665         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5666         .ctor to make `IsIterator' work.
5667
5668 2008-03-14  Martin Baulig  <martin@ximian.com>
5669
5670         * symbolwriter.cs: Added the new symbol writer function from the
5671         debugger's `terrania' branch; temporarily enclose them inside
5672         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5673         my vacations.
5674
5675 2008-03-14  Martin Baulig  <martin@ximian.com>
5676
5677         * symbolwriter.cs
5678         (SymbolWriter): Make this a public static class.
5679
5680         * codegen.cs
5681         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5682         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5683
5684 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5685
5686         A fix for bug #370577
5687         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5688         return type.
5689         
5690 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5691
5692         * typemanager.cs (CSharpName): Made 250 times faster.
5693
5694 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5695
5696         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5697         
5698 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5699
5700         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5701         crash when predefined field does not exist.
5702         
5703 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5704
5705         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5706         
5707 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5708
5709         * class.cs (FixedField): Don't crash when contructors are missing.
5710
5711 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5712
5713         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5714         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5715         check internal types accessibility for internal and external types.
5716         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5717
5718 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5719
5720         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5721         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5722         attribute.cs, statement: Use corect instance of predefined types (work
5723         related to #364674).
5724
5725 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5726
5727         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5728         
5729 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5730
5731         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5732         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5733         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5734         predefined types clean up, delayed predefined types members initialization
5735         (work related to #364674).
5736
5737 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5738
5739         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5740         
5741 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5742
5743         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5744         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5745         predefined types clean up (work related to #364674).
5746
5747 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5748
5749         * ecore.cs: Print an error message instead of throwing exception.
5750         
5751 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5752
5753         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5754         expression.cs, statement.cs: Unififed null literal representation.
5755
5756 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5757
5758         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5759         expression.cs: Refactored binary operators resolve phase and improved speed.
5760         The nullable code is still missing and won't work correctly, more fixes
5761         required.
5762
5763         It also fixes #323726, #324312, #324248, and many other unreported issues.
5764
5765 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5766
5767         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5768         instead of 'gmcs'.
5769
5770 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5771
5772         * ecore.cs: Clean-up and split BetterConversion.
5773         
5774 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5775
5776         Fix #363791
5777         * enum.cs (EnumMember.Value): Only access 'value' if
5778         ResolveValue says it's ok.
5779         (EnumMember.DoResolveValue): Don't set prev_member.value.
5780         (Enum.GetDefinition): Reverse arguments of Equals --
5781         EnumMember.Value can return 'null'.
5782
5783         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5784
5785 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5786
5787         * generic.cs, expression.cs: More ongoing work on expression trees.
5788         
5789 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5790
5791         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5792         handle missing matches when mutiple operators exist.
5793         
5794 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5795
5796         A fix for bug #363218
5797         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5798         initializers.
5799         
5800 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5801
5802         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5803         update. This time to deal correctly with SideEffectConstant expression used
5804         as an argument for another constant folding.
5805
5806 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5807
5808         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5809         MethodBuilder.
5810
5811 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5812
5813         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5814
5815 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5816
5817         A fix for bug #328136
5818         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5819         side is a false constant, because we still need to evaluate the right-hand
5820         side.
5821
5822         * statement.cs (If): Emit two types of boolean constants (simple constant,
5823         side-effect constant).
5824
5825 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5826
5827         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5828
5829         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5830         constants.
5831
5832 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5833
5834         A fix for bug #361457
5835         * ecore.cs (IsApplicable): Params methods have lower priority.
5836
5837         * support.cs: Return correct parameter modifier for params types.
5838
5839 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5840
5841         * generic.cs (TypeParameter): Cache attribute target name.
5842
5843         * support.cs: Removed unused variable.
5844
5845         * typemanager.cs: Removed debugging leftover.
5846
5847         * ecore.cs: Use local type instead of a property;
5848
5849         * class.cs (VerifyMembers): Consider also parent to test whether type member
5850         is local or public.
5851
5852         * expression.cs (FullMethodDesc): Removed.
5853
5854         * attribute.cs (IsValidArgumentType): Made static.
5855
5856 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5857
5858         Cleanup to be more readable.
5859         * Makefile (GMCS_PROFILE): Remove.
5860         (COMPILER_NAME): New helper.
5861
5862 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5863
5864         * cs-tokenizer.cs: if a conditional expression happens inside a
5865         (...) this also means that we do not need to de-ambiguate between
5866         an parenthesized expression and a cast.
5867
5868         Fixes 346484.
5869
5870         * constant.cs (SideEffectConstant): a constant value that happens
5871         to have a side effect.
5872
5873         Fixes the build regressions introduced by the fix for #359789
5874
5875 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5876
5877         * expression.cs (Conditional.Emit): when emitting the ternary
5878         operator, use local variables to generate code verifiable code.
5879
5880         The verifier cannot infer that the type on stack before the
5881         stloc.0 is executed is of type ParentB. This happens because the
5882         stack merge algorithm uses only parent types when deciding which
5883         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5884         335.
5885
5886         This code compiled with mcs is not verifiable under MS. The MS
5887         verifier picks the first common interface of Foo and Bar, which is
5888         wrong, but doesn't use a full join type of the 2 interfaces.
5889
5890         CSC uses a clever hack to compile such code in a verifiable
5891         way. It stores the intermediate values in a local variable with
5892         the expected type.
5893
5894         Fixes: #358102
5895
5896 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5897
5898         * expression.cs: Do not fold BitwiseAnd operators when the left
5899         side is a false constant, because we still need to evaluate the
5900         right-hand side.
5901
5902         Fixes #359789
5903
5904         * support.cs: Instead of throwing an InternalErrorException when
5905         the position of the stream is outside the boundary of our buffer,
5906         reset the state of the reader, and restart the reading from the
5907         beginning of the file.
5908
5909 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5910
5911         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5912
5913 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5914
5915         A fix for bug #361686
5916         * decl.cs: A protected types used inside a private class which parents
5917         derives from the protected class are accessible.
5918
5919 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5920
5921         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5922         the parameterless constructor.
5923
5924 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5925
5926         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5927         lookup methods to use standard member cache when doing member lookup.
5928
5929 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5930
5931         * driver.cs: Don't report full path for referenced module as assembly error.
5932
5933 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5934
5935         * Makefile: Fixed `qh' target to work on all machines.
5936
5937         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5938         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5939         and HasElementType with TypeManager implementation.
5940
5941 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5942
5943         A fix for bugs #325134, #359749
5944         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5945         first binds point to non-method member expression.
5946
5947 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5948
5949         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5950
5951 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5952
5953         A fix for bugs #321394, #323028
5954         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5955         Reworked naive IsAccessibleAs implementation to handle nested types.
5956
5957 2008-02-05  Jb Evain  <jbevain@novell.com>
5958
5959         * class.cs: use generic type comparison for parameters
5960         as well.
5961
5962 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5963
5964         A fix for bug #325372
5965         * class.cs: Use generic type comparison when testing method signatures.
5966
5967 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5968
5969         A fix for bug #357047
5970         * ecore.cs: Applied C# 3.0 changes to better conversion.
5971
5972 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5973
5974         A fix for bug #358374
5975         * cs-parser.jay: Correctly set modifiers for all constructor types.
5976
5977 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5978
5979         A fix for bug #355251
5980         * generic.cs: Added base class constraint based type inference.
5981
5982 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5983
5984         A fix for bug #357255
5985         * decl.cs: One more missing visibility check.
5986
5987 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5988
5989         * support.cs: Fixed broken return.
5990
5991 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5992
5993         * report.cs: Correctly reset warnings count after probing.
5994
5995 2008-01-25  Martin Baulig  <martin@ximian.com>
5996
5997         * namespace.cs
5998         (NamespaceEntry.SymbolFileID): Make this work again after
5999         MemberName.ToString() is gone.
6000
6001 2008-01-25  Marek Safar  <marek.safar@gmail.com>
6002
6003         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
6004         expressions.
6005
6006 2008-01-25  Marek Safar  <marek.safar@gmail.com>
6007
6008         * generic.cs: Use full implicit conversion for type inference fixing.
6009
6010 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6011
6012         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
6013         Fixed user operator conversions.
6014
6015 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6016
6017         * generic.cs: Do nullable type to null comparison optimization during
6018         resolve phase.
6019
6020 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6021
6022         A fix for bug #355163
6023         * generic.cs: Enabled l-value resolve on nullable expressions.
6024
6025 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6026
6027         A fix for bug #353986
6028         * class.cs: Ingore static ctors with parameters for any further checks.
6029
6030 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6031
6032         A fix for bug #354310
6033         * namespace.cs: Removed redundant check.
6034
6035 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6036
6037         A fix for bug #354928
6038         * expression.cs: ElementInitializers can be resolved only once.
6039
6040 2008-01-24  Marek Safar  <marek.safar@gmail.com>
6041
6042         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
6043         Condition expressions.
6044
6045 2008-01-23  Marek Safar  <marek.safar@gmail.com>
6046
6047         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
6048
6049 2008-01-22  Marek Safar  <marek.safar@gmail.com>
6050
6051         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
6052         not allowed.
6053
6054         * generic.cs: Implemented coalesce expression.
6055
6056 2008-01-22  Marek Safar  <marek.safar@gmail.com>
6057
6058         A fix for bug #355145
6059         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
6060         expression tree type inference.
6061
6062 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
6063
6064         Fix #354663
6065         * expression.cs (Binary.IsUnsignedType): Fix typo.
6066
6067 2008-01-22  Marek Safar  <marek.safar@gmail.com>
6068
6069         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
6070
6071 2008-01-22  Marek Safar  <marek.safar@gmail.com>
6072
6073         A fix for bug #355161
6074         * ecore.cs, expression.cs: Wider range of extension method supported
6075         expressions.
6076
6077 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
6078
6079         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
6080         AssemblyBuilder to operate in compiler context. Fixes mcs part of
6081         bug #354970.
6082
6083 2008-01-22  Marek Safar  <marek.safar@gmail.com>
6084
6085         A fix for bug #355148
6086         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
6087
6088 2008-01-22  Miguel de Icaza  <miguel@novell.com>
6089
6090         * expression.cs (CreateExpressionTree): Add support for or and
6091         logical or, and indent following the coding conventions.
6092
6093         * typemanager.cs (LinqExpression): renamed from
6094         ExpressionTreeManager, for a shorter name.
6095
6096         Use TypeManager.CoreLookupType to lookup types from our core
6097         assemblies and turn those into "Type" variables.
6098
6099         Consumers that previously used "Namespace" and "Type" from this
6100         class should instead use the TypeExpression which is a type that
6101         is fully resolved (without involving the regular C# resolution
6102         rules). 
6103
6104         This typically looks like this:
6105
6106         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
6107         new MemberAccess (texpr, name, type_arguments, loc)
6108
6109         This avoids the problem in: #355178
6110
6111 2008-01-21  Marek Safar  <marek.safar@gmail.com>
6112
6113         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
6114         feature in parser only as we do in other cases.
6115         
6116 2008-01-21  Marek Safar  <marek.safar@gmail.com>
6117
6118         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
6119         typemanager.cs: A refactoring of params arguments to reuse existing
6120         expressions (params -> array initializer) to emit params argument instead
6121         of specialized handling.
6122         It was required by expression tree implementation and it has other benefits
6123         as well, we now apply same optimization for params arguments as we do for
6124         array initializers.
6125         
6126 2008-01-18  Marek Safar  <marek.safar@gmail.com>
6127
6128         A fix for bug #353526
6129         * generic.cs: A type inference of params arguments may not required any
6130         temporary array creation.
6131         
6132 2008-01-18  Marek Safar  <marek.safar@gmail.com>
6133
6134         A fix for bug #353534
6135         * generic.cs, ecore.cs, expression.cs: A method group type inference is
6136         supported for delegates only.
6137         
6138 2008-01-18  Marek Safar  <marek.safar@gmail.com>
6139
6140         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
6141         type for more than 1 candidates.
6142         
6143 2008-01-18  Marek Safar  <marek.safar@gmail.com>
6144
6145         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
6146         expressions.
6147         
6148 2008-01-16  Marek Safar  <marek.safar@gmail.com>
6149
6150         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
6151         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
6152         operator) expressions. 
6153                 
6154 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
6155
6156         * statement.cs: Avoid declaring an IL variable for this_variable since it is
6157         not accessed from the generated IL.
6158
6159 2008-01-14  Marek Safar  <marek.safar@gmail.com>
6160
6161         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
6162         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
6163         statement.cs: The first expression tree implementation drop, mostly
6164         infrastructure work.
6165
6166 2008-01-14  Marek Safar  <marek.safar@gmail.com>
6167
6168         * ecore.cs (IsNestedChild): Refactored.
6169
6170 2008-01-11  Marek Safar  <marek.safar@gmail.com>
6171
6172         * lambda.cs: Don't use a cast on unknown expression statement.
6173
6174 2008-01-10  Geoff Norton  <gnorton@novell.com>
6175
6176         * cs-tokenizer.cs: One more token to distinguish between method and lambda
6177         arguments
6178
6179 2008-01-09  Marek Safar  <marek.safar@gmail.com>
6180
6181         * doc.cs: Report better /doc crash details.
6182         
6183 2008-01-09  Marek Safar  <marek.safar@gmail.com>
6184
6185         A fix for bug #352536
6186         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
6187
6188 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6189
6190         A fix for bug #352287
6191         * ecore.cs, expression.cs: Do `this' access checking in all member access
6192         expressions.
6193         
6194 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6195
6196         * rootcontext.cs, driver.cs: Switch to linq mode by default.
6197         
6198         * report.cs: Reset message stacks.
6199         
6200 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6201
6202         * generic.cs (InferInPhases): Correctly calculate params position.
6203         
6204 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6205
6206         * cs-tokenizer.cs: No need to parse full string when parsing lambda
6207         arguments.
6208
6209 2008-01-07  Marek Safar  <marek.safar@gmail.com>
6210
6211         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
6212         
6213         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
6214         
6215         * driver.cs: Updated --help option.
6216         
6217 2008-01-07  Marek Safar  <marek.safar@gmail.com>
6218
6219         * generic.cs (InferParamsTypeArguments): Removed.
6220         (InferInPhases): Add params type inference.
6221         (LowerBoundInference): Fixed scoring mechanism.
6222         
6223         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
6224         
6225 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
6226
6227         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
6228         byte array for unsigned "baked" assemblies.
6229
6230 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
6231
6232         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
6233         array for assemblies that are not strongnamed.
6234
6235 2008-01-04  Marek Safar  <marek.safar@gmail.com>
6236
6237         A fix for bug #351481
6238         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
6239         declaring type for nested generic types.
6240         
6241 2008-01-04  Marek Safar  <marek.safar@gmail.com>
6242
6243         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
6244         instead of ToString.
6245         
6246 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6247
6248         A fix for bug #351047
6249         * expression.cs (Binary.ResolveOperator): Allow equality operators between
6250         null and structs only when equality and inequality operators are defined
6251         either as an user-operators or predefined operators.
6252         
6253 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6254
6255         A fix for bug #351047
6256         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
6257         
6258 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6259
6260         A fix for bug #351257
6261         * cs-tokenizer.cs: Advance line number for '\r' correctly.
6262         
6263 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6264
6265         A fix for bug #351157
6266         * class.cs (Using): Fixed yet another broken cloning.
6267         
6268         (Block): Put back more sensible default value for statements.
6269         
6270 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
6271
6272         * codegen.cs: Allow AssemblyVersion with only major version component.
6273         Fixes bug #351055.
6274
6275 2007-12-29  Marek Safar  <marek.safar@gmail.com>
6276
6277         A fix for bug #324654
6278         * class.cs: Use FullName property as member name.
6279
6280 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6281
6282         A fix for bug #342117
6283         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
6284         constructor constraint.
6285
6286 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6287
6288         A fix for bug #338273
6289         * class.cs (ProbertyBase): Access modifier checks are required for overrides
6290         only.
6291
6292 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6293
6294         A fix for bug #350839
6295         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
6296
6297 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6298
6299         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6300         GHOP:
6301         
6302         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6303
6304         * statement.cs: Changed some Hashtables to use HybridDictionaries
6305         instead. It was observed that some HashTables only contained a few
6306         items in the vast majority of cases. Since HybridDictionary is
6307         more efficient on small sets (<10 elements), "known_variables"
6308         from class ExplicitBlock as well as "labels" and "constants " from
6309         class Block were changed to HybridDictionaries. 
6310
6311         Atsai results: (56216kb->54987kb)
6312
6313         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
6314
6315
6316 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6317
6318         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6319         GHOP:
6320         
6321         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6322         
6323         * expression.cs: foreach loop to for loop, saved on allocation of
6324         enumerator (59333kb->59141kb)
6325
6326         * statement.cs. Changed foreach loops to for loops, saved on
6327         allocation of enumerator (59141kb->59006kb)
6328
6329         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
6330         when constructed with no specified capacity. This was causing a
6331         few ArrayLists to allocate more memory than they would potentially
6332         need in the Block class and MemberCache class. Setting the
6333         ArrayLists to construct with a capacity of 1 saves some
6334         memory. (56216kb->55585kb)
6335
6336 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6337
6338         A fix for bug #347189 (2nd issue)
6339         * expression.cs (MemberAccess): Nested type can be found in base non-generic
6340         type.
6341
6342 2007-12-27  Miguel de Icaza  <miguel@novell.com>
6343         
6344         * report.cs: Do not use colors if stdout and stderr are not a
6345         terminal.
6346
6347 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6348
6349         A fix for bug #346998
6350         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
6351         overloads.
6352
6353 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6354
6355         A fix for bug #343465
6356         * class.cs: Explicit method name for nested types uses dots only.
6357
6358 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6359
6360         A fix for bug #343707
6361         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
6362
6363 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6364
6365         * ecore.cs: Report type inference errors only when arguments count matches
6366         parameter count.
6367         
6368         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
6369         
6370         * expression.cs, report.cs: New warning.
6371         
6372         * typemanager.cs: Catch anonymous method type too.
6373
6374 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6375
6376         A fix for bug #346379
6377         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
6378
6379 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6380
6381         A fix for bug #347359
6382         * expression.cs (Invocation): Don't resolve already resolved expression.
6383
6384 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6385
6386         A fix for bug #347189
6387         * class.cs (FixedField): Use non-dependent code only in the define phase.
6388
6389 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6390
6391         A fix for bug #348076
6392         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
6393
6394 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6395
6396         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
6397         discovered extension methods.
6398
6399 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6400
6401         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
6402         method.
6403
6404 2007-12-21  Miguel de Icaza  <miguel@novell.com>
6405
6406         * report.cs (ErrorMessage): Add support for using colors on
6407         terminals that support it. 
6408
6409 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6410
6411         * ecore.cs: Use information about expanded params for error reporting.
6412
6413 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6414
6415         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
6416         and logic for params overloads.
6417         
6418 2007-12-15  Miguel de Icaza  <miguel@novell.com>
6419
6420         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
6421         as this is also created from the parser.  Fixes #349034
6422
6423 2007-12-12  Miguel de Icaza  <miguel@novell.com>
6424
6425         * statement.cs (Throw.CloneTo): it is valid to have empty
6426         expressions for throw. 
6427
6428 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6429
6430         * cs-parser.jay: Set delegate constraint parsing region correctly.
6431
6432 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6433
6434         A fix for bug #345467
6435         * typemanager.cs (IsEqual): Compare generic parameters position only.
6436         
6437 2007-11-28  Marek Safar  <marek.safar@gmail.com>
6438
6439         * expression.cs (BaseAccess): Type arguments can be null.
6440
6441 2007-11-27  Raja R Harinath  <harinath@gmail.com>
6442
6443         * statement.cs (Block.Resolve): Ensure flow-branching tree is
6444         consistent even when an error has occured.
6445         (Switch.Resolve): Likewise.
6446
6447 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6448
6449         A fix for bug #334505
6450         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
6451         overrides.
6452         
6453 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6454
6455         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
6456         refactorings required to resolve extension methods correctly when mixing
6457         generics and non-generics members.
6458         
6459 2007-11-20  Marek Safar  <marek.safar@gmail.com>
6460
6461         A fix for bug #342584
6462         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
6463         conversion.
6464         
6465 2007-11-19  Marek Safar  <marek.safar@gmail.com>
6466
6467         A fix for bug #342512
6468         * delegate.cs: Use delegate argument expression when is available. Don't
6469         emit virtual call when class is sealed.
6470         
6471 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6472
6473         A fix for bug #325423
6474         * assign.cs (FieldInitializer): Use resolved expression for emit.
6475         
6476         * class.cs: Print less confusing error message.
6477         
6478 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6479
6480         * cs-tokenizer.cs: Removed GMCS ifdefs.
6481         
6482         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
6483         mcs.
6484         
6485         * cs-parser.jay: Disabled nullable check.
6486         
6487         * generic-mcs: Copied more generic stuff.
6488                 
6489 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6490
6491         * gcs-parser.jay: Merged to cs-parser.jay.
6492         
6493         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
6494         * *.csproj, *.sources: Updated to use only jay parser file.
6495
6496 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6497
6498         * gcs-parser.jay: Added nullable and default expression feature checks.
6499         
6500 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6501
6502         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
6503         it fixes many TODOs and hidden bugs.
6504         
6505         * expression: Removed duplicate error check.
6506
6507 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6508
6509         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
6510         implicitly type local variable only when it is used in a declaration.
6511
6512 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6513
6514         * attribute.cs: Use CS0612 for empty strings.
6515
6516 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6517
6518         * lambda.cs, statement.cs: Contextual return may act as a statement.
6519
6520 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6521
6522         A fix for a regression cause by #324222
6523         * class.cs: Don't report unused even when it implements an interface.
6524         
6525 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6526
6527         A fix for bug #341205
6528         * ecore.cs, expression.cs: Method group expression cannot do static
6529         method access with an instance reference check before overloading takes
6530         a place.
6531         
6532 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6533
6534         A fix for bug #325359
6535         * class.cs: Use predictable name for automatically generated property.
6536         
6537 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6538
6539         A fix for bug #324996
6540         * expression.cs (Is): Handle case where D is nullable and T is not
6541         correctly.
6542         
6543         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
6544         
6545 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6546
6547         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
6548         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
6549         Flush small error reporting changes.
6550         
6551 2007-11-09  Marek Safar  <marek.safar@gmail.com>
6552
6553         A fix for bug #324996
6554         * expression.cs: Rewrote Is expression implementation to work with
6555         generics, nullable types, anonymous method. A const result expression 
6556         uses existing infrastructure instead of custom not fully-featured one.
6557         
6558 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6559
6560         A fix for bug #340202
6561         * class.cs: Consider generics for volatile field.
6562
6563 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6564
6565         A fix for bug #335594
6566         * expression.cs: Use conversion rules when handling string addition.
6567         
6568 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6569
6570         A fix for bug #336651
6571         * expression.cs: Fixed a crash when probing is on.
6572         
6573 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6574
6575         A fix for bug #324242
6576         * covert.cs: Added a conversion from any nullable-type with an 
6577         underlying enum-type to the type System.Enum.
6578         
6579 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6580
6581         A fix for bug #324222
6582         * class.cs: Report all non-used event fields.
6583         
6584 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6585
6586         A fix for bug #325161
6587         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
6588         qualifier for generic types.
6589         
6590 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6591
6592         A fix for bug #322971
6593         * expression.cs, ecore.cs: Added intermediate result value check for
6594         indexers. 
6595         
6596 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6597
6598         A fix for bug #324754
6599         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
6600         when it was requested.
6601
6602 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6603
6604         A fix for bug #325101
6605         * expression.cs: Do type not value comparison for `is' expression.
6606
6607 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6608
6609         A fix for bug #320236
6610         * convert.cs: Don't apply user conversion on underlying target type.
6611
6612 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6613
6614         * expression.cs: Don't use unresolved expression for error reporting.
6615  
6616 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6617
6618         A fix for bugs #337712, #324490
6619         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6620         overloading resolution too.
6621         
6622         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6623         the process consistent and more robust.
6624         
6625         * expression.cs, linq.cs, report.cs: Update.
6626
6627 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6628
6629         A fix for bug #332909
6630         * attribute.cs: Resolve attributes in correct context using error
6631         handling procedure.
6632         
6633         * rootcontext.cs: Define Obsolete attribute members as core members.
6634         
6635 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6636
6637         * statement.cs: Removed unused methods.
6638         
6639 2007-10-31  Wade Berrier  <wberrier@novell.com>
6640
6641         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6642         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6643         during 'make dist')
6644
6645 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6646
6647         A fix for bug #338102
6648         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6649         methods registered as non-generics.
6650         
6651 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6652
6653         A fix for bugs #337712, #324490
6654         * delegate.cs: Delegate covariance and contravariance is not allowed for
6655         value types.
6656         
6657 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6658
6659         A fix for bug #337719 
6660         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6661         `from' keyword.
6662         
6663 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6664  
6665         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6666
6667 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6668  
6669         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6670         query expressions.
6671
6672 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6673
6674         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6675
6676 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6677  
6678         A fix for bug #334652
6679         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6680         extension methods when we have not found the best candidate in normal
6681         container.
6682
6683 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6684
6685         * AssemblyInfo.cs: Keep up-to-date.
6686
6687 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6688
6689         * Makefile: Fixed generics compiler name.
6690         
6691 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6692
6693         * lambda.test: removed, lambda parsing is done differently.
6694         
6695         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6696
6697 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6698
6699         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6700
6701 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6702
6703         * Makefile, *.sources : All C# compilers are in mcs folder.
6704         
6705         * *.cs: Use existing 2_1 define for smcs.
6706
6707 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6708
6709         A fix for bug #335847
6710         * assign.cs, expression.cs: Couple of changes to avoid creating a
6711         temporary variable for each object initializer assignment statement. It
6712         simplifies struct initialization too, otherwise two temporary variables
6713         would be required.
6714         Implemented optimization of redundant default element initializers.
6715         
6716 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6717
6718         A fix for bug #336766
6719         * expression.cs (Class.CheckBase): Use generic name when method is
6720         generic.
6721         
6722 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6723
6724         A fix for bug #334737
6725         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6726         variable and not variable argument for prepared copies.
6727
6728 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6729
6730         A fix for bug #325110
6731         * class.cs, expression.cs, attribute.cs: Use open generic method when
6732         checking conditional attribute.
6733         
6734 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6735
6736         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6737         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6738         FeatureIsNotAvailable.
6739
6740 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6741
6742         ** C# 3.0 Partial methods
6743         
6744         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6745         methods support. Because of member cache issue with generics only
6746         non-generics partial methods are fully supported.
6747         
6748 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6749         
6750         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6751         generics and to use member cache for member checking. It also improves
6752         performance and fixes remaining overloads issues.
6753         
6754 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6755         
6756         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6757         roottypes.cs, typemanager.cs:
6758                 
6759         A member cache creation logic changed to add members immediately and
6760         not rely on fallback. The member cache is now only prefered way
6761         how to access and find type declaration members. It saves 5 MB of memory
6762         during MWF compilation and makes code ready for more optimizations and
6763         clean-ups, it's also a pre-requirement for partial methods.
6764         
6765 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6766
6767         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6768         handling for generic parameters.
6769
6770 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6771         
6772         * class.cs (FixedField): Removed redundant volatile check.
6773         
6774 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6775         
6776         * class.cs, decl.cs: Fixed overload members verification to do only one
6777         check per possible collision.
6778         
6779 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6780         
6781         A fix for bug #325478
6782         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6783         and create only one disposable flags container.
6784         
6785 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6786         
6787         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6788         * statement.cs (Fixed): Fixed variables cloning.
6789         
6790 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6791         
6792         A fix for bug #333342
6793         * class.cs (EventField): Don't mark value type event as synchronized. 
6794         
6795 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6796         
6797         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6798         inference to identify best candidate method correctly.
6799         (ProperyExpr): A range variable is read only and cannot be modified.
6800         
6801 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6802         
6803         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6804         logic to identify best candidate method correctly.
6805         
6806 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6807         
6808         * location.cs (Equals, GetHashCode): Removed.
6809         
6810 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6811         
6812         * report.cs: Implemented message recorder. It is used mainly for lambda
6813         expressions to capture otherwise swallowed error messages.
6814         
6815         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6816
6817         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6818         and not at the top.
6819         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6820                 
6821         * expression.cs (MemberAccess): Always report lookup failure.
6822         
6823         * location.cs: Implemented Equals, GetHashCode.
6824         
6825         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6826         
6827 2007-10-10  Jb Evain  <jbevain@novell.com>
6828
6829         * codegen.cs: re-enable assembly version check.
6830
6831 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6832         
6833         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6834         checks.
6835         
6836         * namespace.cs (UsingAlias): Do correct version check.
6837         
6838 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6839         
6840         * expresison.cs, ecore.cs: Issue extension method error message when
6841         appropriate.
6842         
6843         * rootcontext.cs: Added ISO_2 compiler mode option.
6844
6845 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6846         
6847         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6848          message.
6849         
6850 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6851         
6852         * attribute.cs (GetString, GetBoolean): Work with both literal and
6853         constant.
6854         
6855         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6856         Moved method overload specific methods to MethodGroupExpr.
6857         
6858         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6859         it should be less memory consuming.
6860         
6861 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6862
6863         * codegen.cs: remove the assembly version check until the buildbot is
6864         fixed.
6865
6866 2007-10-07  Jb Evain  <jbevain@novell.com>
6867
6868         * attribute.cs (Attribute.GetString): if the value
6869         expression is a StringConstant, return its string value.
6870
6871 2007-10-07  Jb Evain  <jbevain@novell.com>
6872
6873         * typemanager.cs: add `assembly_version_attribute_type`.
6874         * codegen.cs: on attribute emission, check that the
6875         AssemblyVersionAttribute doesn't overflow.
6876
6877 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6878         
6879         A fix for bug #324677
6880         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6881         parent container of a scope container with currently resolved one. 
6882         
6883 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6884         
6885         A fix for bug #325534
6886         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6887         only.
6888         
6889 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6890         
6891         A fix for bug #327504
6892         * class.cs (Operator.Define): Refactored implicit and explicit user
6893         operator conversion rules.
6894         
6895 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6896         
6897         A fix for bug #327520
6898         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6899         
6900 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6901         
6902         A fix for bug #328022
6903         * class.cs (MethodData.Define): Use correct method to check whether
6904         a method implementents an accessor.
6905         
6906 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6907         
6908         A fix for bug #330069
6909         * statement.cs (Fixed.Resolve): Read the first array element only when
6910         an array is instantiated. 
6911         
6912 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6913         
6914         * expression.cs, assign.cs, generics.cs: Print correct operator when
6915         compound assignment is used.
6916         
6917 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6918         
6919         A fix for bug #325841
6920         * expression.cs (ArrayAccess): Use full argument cloning only for
6921         string compound concatenation.
6922         
6923 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6924         
6925         A fix for bug #328774
6926         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6927         assignment.
6928         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6929         assignment.
6930
6931 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6932
6933         Fix #328490
6934         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6935         Event accessibility checks here.  Remove some bogus code that
6936         accidently made GenericMethods work.
6937         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6938
6939 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6940         
6941         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6942         
6943         * statement.cs (Block): Refactored AddVariable to allow error handling
6944         customization.
6945         
6946         * generic.cs: New stub.
6947         
6948 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6949         
6950         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6951         flag.
6952         
6953 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6954
6955         * class.cs: Use partial container to record whether any partial part
6956         contains static field initializer and therefore default contructor has
6957         to be defined.
6958         
6959 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6960
6961         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6962         mono-list when only one of two partial parts has defined accessibility
6963         modifier.
6964         
6965 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6966
6967         A fix for bug #82845
6968         
6969         * class.cs (TypeContainer): Set correct resolve context for all field
6970         initializers.
6971         
6972 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6973
6974         * assign.cs: Fixed a crash when field is resolved twice with an error.
6975         
6976         * codegen.cs: Changed InFieldInitializer to be flag.
6977         
6978         * anonymous.cs, ecore.cs, expression.cs: Update after
6979         IsInFieldInitializer rename.
6980         
6981         * const.cs: Removed unused parameter.
6982         
6983         * class.cs: Changed the way how we resolve and emit field initializers.
6984         The field initilizers have to have access to contructor block to emit
6985         compiler generated code.
6986
6987 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6988
6989         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6990         generics use TypeContainer instead.
6991         
6992 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6993         
6994         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6995
6996         * lambda.cs (ResolveParameters): Use more powerful
6997         InflateGenericArgument.
6998         
6999         * parameters.cs: Better exception message.
7000                 
7001 2007-09-10  Marek Safar  <marek.safar@gmail.com>
7002
7003         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
7004         correct expression block type. 
7005         
7006         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
7007         
7008         * expression.cs (Invocation): Extracted method group resolve to
7009         DoResolveOverload.
7010         
7011 2007-09-07  Marek Safar  <marek.safar@gmail.com>
7012
7013         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
7014         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
7015         
7016         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
7017         generic extension methods.
7018
7019 2007-09-06  Marek Safar  <marek.safar@gmail.com>
7020
7021         A fix for bug #82676 (Do I get it right now?)
7022         * convert.cs (Binary.ResolveOperator): An interface is converted to the
7023         object before a standard conversion is applied.
7024         
7025 2007-09-06  Marek Safar  <marek.safar@gmail.com>
7026
7027         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
7028         #82676.
7029         
7030 2007-09-05  Marek Safar  <marek.safar@gmail.com>
7031
7032         A fix for bug #82676
7033         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
7034         non-generic interface types.
7035         
7036 2007-09-05  Marek Safar  <marek.safar@gmail.com>
7037
7038         A fix for bug #82690
7039         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
7040         
7041 2007-09-05  Marek Safar  <marek.safar@gmail.com>
7042
7043         A fix for bug #82571
7044         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
7045         modifier for container based methods.
7046         
7047 2007-09-05  Marek Safar  <marek.safar@gmail.com>
7048
7049         A fix for bug #82676
7050         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
7051         any interface-type T means to any of interface type T.
7052
7053 2007-09-04  Marek Safar  <marek.safar@gmail.com>
7054
7055         * namespace.cs: We have 2 versions of System.Core assembly.
7056
7057 2007-09-04  Marek Safar  <marek.safar@gmail.com>
7058
7059         A fix for bug #82652
7060         * class.cs (Class.GetClassBases): Compare types and not expressions.
7061
7062 2007-09-04  Marek Safar  <marek.safar@gmail.com>
7063
7064         A fix for bug #82620
7065         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
7066         actually never worked before.
7067         (IndexerAccess): Emit prepared arguments before they are modified.
7068         
7069 2007-09-04  Marek Safar  <marek.safar@gmail.com>
7070
7071         A fix for bug #82563
7072         * assign.cs: Revert wrong fix.
7073         
7074         * expression.cs (VariableReference.EmitAssign): Handle ref reference
7075         correctly.
7076         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
7077         Instead of ldelema/stdind we have to use temporary variables to handle
7078         cases like String.Concat (params string[]).
7079         
7080 2007-08-31  Marek Safar  <marek.safar@gmail.com>
7081
7082         * class.cs: EmitAttributes to Emit rename.
7083         
7084         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
7085         null.
7086         (MemberCore.HasClsCompliantAttribute): Don't depend on 
7087         GetClsCompliantAttributeValue execution.
7088         
7089 2007-08-31  Marek Safar  <marek.safar@gmail.com>
7090
7091         * anonymous.cs: Use shorter type prefix.
7092         
7093         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
7094         when exist.
7095         
7096         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
7097         variables when probing is on.
7098         
7099         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
7100         unresolved variables.
7101         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
7102         handle transparent identifiers.
7103         
7104 2007-08-26  Marek Safar  <marek.safar@gmail.com>
7105
7106         * attribute.cs (IsClsCompliant): Add nullable types test.
7107         
7108 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
7109
7110         * doc.cs : catch other types of exception than XmlException to
7111           report CS1570. Fixed bug #82565.
7112
7113 2007-08-23  Marek Safar  <marek.safar@gmail.com>
7114
7115         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
7116         The number of delegate parameters has to match.
7117         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
7118         arrays.
7119
7120 2007-08-21  Marek Safar  <marek.safar@gmail.com>
7121
7122         * anonymous.cs (AnonymousMethod): Generate private anonymous method
7123         to fix problem with private arguments.
7124
7125 2007-08-20  Marek Safar  <marek.safar@gmail.com>
7126
7127         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
7128         
7129         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
7130         
7131         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
7132         empty. Add cloning suport.
7133         
7134         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
7135
7136 2007-08-20  Marek Safar  <marek.safar@gmail.com>
7137
7138         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
7139         to create EmptyCast. It handles EmptyConstantCast specialization for
7140         constants.
7141         
7142 2007-08-18  Marek Safar  <marek.safar@gmail.com>
7143
7144         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
7145         (EmitArrayArgument): One routine for array arguments.
7146         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
7147         
7148 2007-08-17  Marek Safar  <marek.safar@gmail.com>
7149
7150         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
7151
7152 2007-08-17  Marek Safar  <marek.safar@gmail.com>
7153
7154         * anonymous.cs: MemberLookupFinal update.
7155
7156         * class.cs (ConstructorInitializer): Is expression based.
7157         
7158         * delegate.cs: MethodGroupExpr update.
7159         
7160         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
7161         messages.
7162         (Error_MemberLookupFailed): Customizable error override.
7163         (MethodGroupExpr): Keep queried type for later usage.
7164         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
7165         resolve.
7166         
7167         * expression.cs: Error_MemberLookupFailed refactoring.
7168         (New.DoResolve): Resolve as much as possible.
7169         (ElementInitializer.Error_MemberLookupFailed): Object initializer
7170         customization for invalid member types.
7171
7172         * statement.cs: MethodGroupExpr update.
7173         
7174 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7175
7176         * modifier.cs (Check): Check all modifiers and not only accessibility
7177         ones.
7178
7179 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7180
7181         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
7182         type and not an expression.
7183
7184 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7185
7186         * statement.cs (Catch.Clone): Type and variable can be null.
7187
7188 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7189
7190         A fix for bug #81979
7191         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
7192         I am really not sure whether this is the best fix.
7193         
7194         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
7195         only once.
7196         
7197 2007-08-14  Marek Safar  <marek.safar@gmail.com>
7198
7199         ** C# 3.0 Object and collection initializers (major re-write)
7200         
7201         * assign.cs (DoResolve): Initializers are not assign related.
7202         
7203         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
7204         used during collection or object initialization.
7205         
7206         * expression.cs (Error_InvalidArguments): Add initializers specific
7207         messages. More will come later because it requires some general
7208         refactoring.
7209         (New.DoResolve): Better error handling for unsafe types.
7210         (EmptyExpressionStatement): New class.
7211         (ElementInitializer): An object initializer expression.
7212         (CollectionElementInitializer): A collection initializer expression.
7213         (CollectionOrObjectInitializers): A block of object or collection
7214         initializers.
7215         (NewInitialize): New expression with element/object initializers.
7216         
7217         * statement.cs: Reverted object/collection initializer hacks.
7218         
7219         * typemanager.cs (CSharpName): Filter __arglist type.
7220         
7221 2007-08-09  Marek Safar  <marek.safar@gmail.com>
7222
7223         ** C# 3.0 Anonymous Types (update to the latest standard)
7224         
7225         * expression.cs (Binary.ResolveOperator): Threat all null based types
7226         same.
7227         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
7228         (AnonymousTypeParameter): Updated.
7229         
7230         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
7231         (AnonymousTypeClass): New anonymous type container.
7232         
7233         * class.cs (AddField): Return operation result.
7234         
7235         * generic.cs: Another empty TypeArguments overload.
7236         
7237         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
7238         are stored at top of normal hierarchy.
7239         
7240         * typemanager.cs (CSharpName): Filter anonymous types.
7241         
7242 2007-08-09  Marek Safar  <marek.safar@gmail.com>
7243
7244         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
7245         as single Concat call. How could we miss that :-(
7246         
7247 2007-08-08  Marek Safar  <marek.safar@gmail.com>
7248
7249         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
7250         
7251 2007-08-07  Miguel de Icaza  <miguel@novell.com>
7252
7253         * expression.cs: Fix the previous commit, the creation of the
7254         arguments array list needs also to be conditional on the arguments
7255         not being null.
7256
7257         * class.cs: Add a little bit of help to help narrow down problems.
7258
7259         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
7260         not try to copy in that case. 
7261
7262         * driver.cs: When building SMCS, include a new different set of
7263         default assemblies here.   Do this here so we can control whether
7264         to include the default assemblies with /noconfig.
7265
7266 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7267
7268         A fix for bug #81979
7269         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
7270         only.
7271
7272 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7273
7274         A fix for bug #82300
7275
7276         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
7277         we are in probing scope.
7278
7279 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7280
7281         A fix for bug #82301
7282
7283         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
7284         (Statement.CloneTo): Clone and not map children blocks.
7285
7286 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7287
7288         A fix for bug #82299
7289
7290         * expression.cs (LocalVariableReference.CloneTo): Remap local info
7291         variable too.
7292         
7293         * statement.cs (Statement.CloneTo): Clone variables before statements
7294         to allow remaping of local variables.
7295
7296 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7297
7298         A fix for bug #82296
7299
7300         * anonymous.cs,
7301         * report.cs: Log crash details for future clone problems.
7302         
7303         * statement.cs (Return.Clone): Don't clone non-existent expression.
7304
7305 2007-08-03  Raja R Harinath  <harinath@gmail.com>
7306
7307         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
7308         (Class.AddBasesForPart): Move CS0537 check here from ...
7309         * cs-parser.jay (class_declaration): ... here.  Move calling of
7310         'AddBasesForPart' to ...
7311         (class_bases): ... here.
7312         (struct_declaration, interface_declaration): Update to changes.
7313
7314 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7315
7316         A fix for bug #81923
7317
7318         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
7319         conversion is allowed.
7320
7321 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7322
7323         A fix for bug #81564
7324
7325         * ecore.cs (EventExpr): Add IsBase handling.
7326
7327         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
7328         too.    
7329         
7330 2007-08-02  Raja R Harinath  <harinath@gmail.com>
7331
7332         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
7333         * cs-parser.jay: Some whitespace cleanups.
7334         (current_delegate): New.
7335         (type_name): New.
7336         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
7337         a dummy code block, and use 'type_name' instead of 'member_name'.
7338         (interface_declaration, class_declaration): Likewise.
7339         (delegate_declaration): Likewise.  Rearrange slightly and use
7340         'current_delegate'.
7341         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
7342         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
7343
7344 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7345
7346         A fix for bug #82039
7347
7348         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
7349         available.
7350
7351         * typemanager.cs (CSharpName): Split to string overload.
7352
7353 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7354
7355         * expression.cs,
7356         * report.cs: Updated warning CS0472.
7357
7358 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7359
7360         A fix for bug #82181
7361         * cs-parser.jay,
7362         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
7363
7364 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7365
7366         A fix for bug #82277
7367         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
7368
7369 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7370
7371         ** C# 3.0 Type Inference (major bits are working)
7372         
7373         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
7374         (.ImplicitStandardConversionExists): Uses compatible.
7375         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
7376         (.InferReturnType): New method.
7377         (.Compatible): Refactored.
7378         (.ResolveParameters): Uses factory to create resolved parameters.
7379         (.CompatibleMethod): Add probing mode support.
7380         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
7381         clearly distinguish between 2 different operations.
7382         (LambdaMethod): Moved to lambda.cs.
7383         (AnonymousMethod): Removed unused fields and methods.
7384         (AnonymousDelegate): Simplified.
7385         
7386         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
7387         
7388         * convert. cs (ImplicitConversionStandard): Compatible works differently.
7389         
7390         * delegate.cs (Delegate): New mehods to reduce code duplication.
7391         (.GetConstructor): New method.
7392         (.GetInvokeMethod): New method.
7393         (DelegateCreation): Updated.
7394         
7395         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
7396         does not exist.
7397         (OverloadResolve): Made probing little bit faster.
7398         
7399         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
7400         when probing is on.
7401         
7402         * generic.cs (TypeInferenceContext): Dummy implementation.
7403         
7404         * iterators.cs: Updated after Resolve/Define rename.
7405         
7406         * lambda.cs (LambdaExpression)
7407         (.ResolveParameters): Handles both type of arguments and type inference too.
7408         
7409         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
7410         (InflateTypes): Updated.
7411         
7412         * support.cs (InflateTypes): Changed signature and updated.
7413         
7414         * typemanager.cs (LookupMemberCache): Better dynamic type check.
7415         (MemberLookup_FindMembers): More MS tricks.
7416         (GetParameterData): Ditto.
7417         (GetDelegateParameters): Uses quick path for dynamic types.
7418         
7419 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7420
7421         * class.cs (MethodData.Define): EmitContext is required for generic stuff
7422         only.
7423
7424 2007-07-31  Marek Safar  <marek.safar@gmail.com>
7425
7426         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
7427         syntax.
7428         
7429 2007-07-26  Jb Evain  <jbevain@novell.com>
7430
7431         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
7432         which takes a boolean 'report_errors', similar to the GetMethod.
7433         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
7434         in .net 2.1, do not report errors here.
7435
7436         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
7437         System.Runtime.CompilerServices.RequiredAttributeAttribute and
7438         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
7439         in .net 2.1.
7440
7441         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
7442         of the type InternalsVisibleToAttribute before the first call
7443         to CoreLookupType which is allowed to fail (third boolean parameter
7444         to true). Because, during the resolution for a type that is not
7445         immediately found, we try to check if the type is not defined in
7446         a friend assembly, and to do so, we need the
7447         InternalVisibleToAttribute.
7448
7449 2007-07-23  Miguel de Icaza  <miguel@novell.com>
7450
7451         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
7452         feature that allows structs to be compared against null and inline
7453         the result as true or false.
7454
7455         Notice that the same code is not permitted inside a generic block
7456         of code that would do:
7457
7458         class Foo<T> where T : struct {
7459             bool Eval (T x)
7460             {
7461                  return x == null;
7462             }
7463         }
7464
7465         It is only allowed if the type of T is not bound (no where
7466         clause).   In my opinion, this CSC 2 behavior is broken but people
7467         seem to be using it (IronRuby does, a few bug reports on bugzilla
7468         have it and some people have complained about it).
7469
7470         All of the users that depend on this behavior have code that is
7471         very likely broken. 
7472         
7473         * report.cs (Warning, Error): make these take object arguments,
7474         not strings, as that allows us to take advantage of Format.
7475
7476 2007-07-20  William Holmes  <billholmes54@gmail.com>
7477
7478         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
7479           Left member variable for the Count.
7480         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
7481           MemberName.CountTypeArguments to avoid a NRE. 
7482
7483         This code is contributed under the MIT X11 license
7484
7485 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7486
7487         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
7488
7489 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7490
7491         * doc.cs : generic method arguments are written as ``x while generic
7492           type arguments are `x. Combined with the previous change, fixed bug
7493           #79706.
7494
7495 2007-07-18  Raja R Harinath  <rharinath@novell.com>
7496
7497         Fix #82120
7498         * expression.cs (Binary.ResolveOperator): When converting
7499         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
7500
7501 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7502
7503         * doc.cs : when T: or whatever x: is specified, it does not really
7504           check the doc comment's syntax correctness. Fixed bug #82006.
7505
7506 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7507
7508         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
7509         LambdaExpression better.
7510         
7511         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
7512         
7513         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
7514         
7515         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
7516         as it can be generated.
7517         
7518         * expression.cs (Invocation.Error_InvalidArguments): Show correct
7519         modifiers.
7520         
7521         * lambda.cs (LambdaExpression): Refactored to share same code with
7522         AnonymousMethodExpression.
7523         
7524 2007-07-17  Marek Safar  <marek.safar@gmail.com>
7525
7526         * anonymous.cs (MakeName): Include host name for easier debugging.
7527         (LambdaMethod): New class for lambda spcecific stuff.
7528         
7529         * attribute.cs: Set EmitContext return type.
7530
7531         * class.cs: Set EmitContext return type.
7532         
7533         * codegen.cs (EmitContext): Return type cannot be null to stop messing
7534         with null/void meaning.
7535         
7536         * iterators.cs (ContainerType): Implemented.
7537         
7538         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
7539         
7540         * statement.cs (Return): Updated to lambda expressions.
7541         (Block.CloneTo): Parent can be null.
7542                 
7543 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7544
7545         A fix for bug #81917
7546         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
7547         
7548         * class.cs (FixedField): Check whether field is in unsafe scope.
7549
7550         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
7551         (FieldExpr.Emit): Fixed buffers cannot be volatile.
7552
7553         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
7554         FieldExpr.
7555         
7556         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
7557                 
7558 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7559
7560         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
7561         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
7562         from Report class.
7563
7564 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7565
7566         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
7567         
7568 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7569
7570         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
7571         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
7572         
7573         * codegen.cs(EmitContext): Add ProbingMode flag.
7574         
7575         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
7576         
7577         * driver.cs: For now set both warning values.
7578         
7579         * ecore.cs (SimpleName): Name is readonly.
7580         (MethodGroup.OverloadResolve): One quick path for probing.
7581         
7582         * expression.cs (Unary): Set Oper r/o.
7583         (Binary): Set Oper r/o.
7584         (ParameterReference): Set few instance variables as r/o.
7585         (ParameterReference.DoResolveBase): Don't capture aruments when 
7586         the probing is on.
7587         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
7588         (Arglist): arguments are private.
7589         (SizeOf): type is private and r/o.
7590         (MemberAccess): arguments are private.
7591
7592         * report.cs: Enhanced reporting on/off capabilities.
7593         
7594         * lambda.cs: Uses ec.IsInProbingMode.
7595         (ContextualReturn): Derives from return.
7596         
7597         * rootcontext.cs: For now set both warning values.
7598         
7599         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
7600         copy if one exists.
7601         (Return.Resolve): Don't die immediately.
7602         (Block.Resolve): Speed-up probing.
7603         (Block.CloneTo): Clone only child blocks.
7604
7605 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
7606
7607         * iterators.cs: reverted Miguel's latest change (r81925) as it
7608         breaks the build in System.
7609
7610 2007-07-13  Miguel de Icaza  <miguel@novell.com>
7611
7612         * iterators.cs (Yield.CheckContext): Check for the iterator type
7613         also here as we can call into Yield even in codepaths that are not
7614         directly checked by
7615         (MethodOrOperator is the only path that was checked).
7616
7617         In addition to the standard check, use a more specific check for
7618         constructors to report a more verbose error. 
7619
7620 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7621
7622         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7623         report the warning and continue 
7624
7625         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7626         values on the stack on the call to Emit.   Use EmitStatement if
7627         possible, or using Emit + Pop if not possible.   Fixes #82064
7628
7629 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7630
7631         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7632         avoid try...finally in some cases.
7633
7634 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7635
7636         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7637         
7638         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7639         instead of method. Re-use standard error handling.
7640         (ConstructorInitializer.Emit): Simplified.
7641         
7642         * delegate.cs: Updated after Invocation.EmitCall change.
7643         
7644         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7645         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7646         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7647         method and don't permanently changing input arguments.
7648         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7649         is resolved it has one of the candidates is the best one which is later
7650         used to emit. Removed a few unused method.
7651         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7652
7653         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7654         (Binary.ResolveOperator): Ditto.
7655         (ConditionalLogicalOperator.DoResolve): Ditto.
7656         (Invocation): Uses method group.
7657         (Invocation.DoResolve): Simplified.
7658         (Invocation.EmitCall): Removed useless is_static.
7659         (Invocation.Emit): Delegate to method group.
7660         (Invocation.EmitStatement): Simplified.
7661         (New): Uses method group.
7662         (MemberAccess.DoResolve): Don't destroy original expression.
7663         
7664         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7665         
7666 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7667
7668         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7669         
7670         * anonymous.cs,
7671         * lambda.cs: Add custom error message type.
7672
7673 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7674
7675         * lambda.cs: Simplified little bit.
7676         
7677         * parameter.cs: Introduced ImplicitLambdaParameter.
7678         (Parameters.CreateFullyResolved): New factory instead of ctor.
7679         
7680         * anonymous.cs,
7681         * class.cs,
7682         * delegate.cs: Updated parameter creation.
7683         
7684 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7685
7686         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7687         arguments.
7688         
7689         * generic.cs: Synchronized with gmcs.
7690         
7691 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7692
7693         * class.cs (Indexer): Check return type as soon as possible.
7694         
7695         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7696         members too.
7697         
7698         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7699         
7700         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7701         
7702         * parameter.cs (Parameter): Use expression type when it is available.
7703         
7704         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7705         method modifier for the first parameter only.
7706
7707 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7708
7709         A fix for bug #81938
7710         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7711         
7712         * constant.cs: Tide up an exception message.
7713
7714 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7715
7716         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7717         an uninitialized variable is used.
7718         
7719         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7720
7721 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7722
7723         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7724         not found error handling.
7725
7726         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7727         simplified.
7728         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7729         (ArrayCreation.DoResolve): Simplified.
7730         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7731         its own resolve process.
7732         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7733
7734 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7735
7736         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7737         more error details.
7738         
7739 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7740
7741         * cs-tokenizer.cs: Removed var related stuff.
7742         
7743         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7744         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7745         a type and a keyword at same time.
7746         
7747         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7748         matches to "var".
7749         
7750         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7751         implicitly typed arrays, more changes will follow.
7752         
7753         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7754         
7755 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7756
7757         * ecore.cs (VarExpr): Removed Handled field.
7758         
7759         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7760         build-in assign functionality.
7761         (ForEach.Resolve): Removed all implicitly typed local variable code and
7762         simplified.
7763         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7764         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7765
7766 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7767
7768         * assign.cs: Removed implicitly typed local variable check.
7769         
7770         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7771         referencing implicitly typed local variable.
7772         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7773         variable here.
7774         
7775         * statement.cs (Fixed): Removed unsupported implicitly typed local
7776         variable code.
7777
7778 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7779
7780         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7781
7782 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7783
7784         A fix for bugs #81855 and #76274
7785         * attribute.cs (AttachTo): Always set owner for global attributes to
7786         prefined owner.
7787         
7788         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7789         usefull too.
7790         
7791         * cs-parser.jay: Assembly and module attributes must precede all other
7792         elements except using clauses and extern alias declarations.
7793
7794 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7795
7796         A fix for bug #81748
7797         * cs-tokenizer.cs,
7798         * expression.cs: More checks for non ISO-1 features.
7799
7800 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7801
7802         A fix for bug #81807
7803         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7804         present inside switch statement and it is required by nullable check.
7805
7806 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7807
7808         A fix for bug #81840
7809         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7810         when type matching fails.
7811         
7812         * namespace.cs: Tiny error message change.
7813
7814 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7815
7816         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7817         reporting. Added automatic property check.
7818         
7819         * class.cs: Updated after CheckAbstractAndExtern relocation.
7820         (AEventPropertyAccessor.GetSignatureForError): Customized.
7821         
7822 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7823
7824         * class.cs (DefineBaseTypes): Base type can be undefined.
7825         
7826         * ecore.cs (TypeLookup): Minor refactoring.
7827         (DoResolveAsTypeStep): Removed redundant check.
7828
7829         * namespace.cs (Lookup): Removed redundant check.
7830                 
7831         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7832         ResolveAsTypeTerminal step.
7833         (BootstrapCorlib_*): Simplified.
7834         (PopulateCoreType): Core types can be now external.
7835
7836 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7837
7838         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7839          verification only.
7840          (InferTypeArguments): Infers anonymous expression type arguments.
7841          (Compatible): Split to Compatible and InferTypeArguments. 
7842         
7843         * lambda.cs: Updated.
7844
7845 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7846
7847         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7848
7849 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7850
7851         Fix #80477, cs0135-2.cs, cs0135-3.cs
7852         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7853         names to the "known" variables list.
7854         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7855         parameter names are also "known".
7856         (Block.CheckError136): Remove.
7857         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7858         null.
7859
7860 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7861
7862         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7863
7864 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7865
7866         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7867         internal error not an user error.
7868          
7869         * expression.cs (IsApplicable): Refactored to make debugging easier.
7870
7871         * support.cs: More tricks for non-mono runtimes.
7872         
7873         * typemanager.cs (CoreLookupType): Made public.
7874         (InitSystemCore): All linq specific stuff moved to linq.cs
7875
7876 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7877
7878         * typemanager.cs (CSharpSignature): One more missing build-in types
7879         replacement.
7880         More tricks for non-mono runtime.
7881
7882 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7883
7884         * statement.cs (Block.CheckError136_InParents): Remove.
7885         (Block.AddVariable): Use GetParameterInfo instead.
7886         (ToplevelBlock.ProcessArguments): Likewise.
7887
7888 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7889
7890         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7891         information too.
7892         (ToplevelBlock.GetParameterInfo): Split out of ...
7893         (ToplevelBlock.GetParameterRefernce): ... this.
7894         (ToplevelBlock.ParameterMap): Remove.
7895         * expression.cs (ParameterReference): Update to use
7896         ToplevelParameterInfo.
7897
7898         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7899         regression.
7900
7901         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7902         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7903
7904         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7905         (ToplevelBlock.ProcessParameters) ... here.
7906         (ToplevelBlock..ctor): Invoke it.
7907
7908         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7909         new parameters.
7910
7911         * statement.cs (IKnownVariable): New interface.
7912         (LocalInfo): Implement it.
7913         (ToplevelParameterInfo): New class.
7914         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7915         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7916         GetKnownVariableInfo.
7917
7918 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7919
7920         Partly speed up CS0136 error checks.
7921         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7922         'recurse' parameter.
7923         (Block.DoCheckError136): Only check errors in parameters.  Move
7924         local variable checks ...
7925         (Block.AddVariable): ... here, and ...
7926         (ToplevelBlock.ResolveMeta): ... here.
7927
7928 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7929
7930         * statement.cs (Block.IsChildOf): Remove.
7931
7932         * statement.cs (Statement.Clone): Move special case code ...
7933         (Block.CloneTo): ... here.
7934
7935 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7936
7937         * statement.cs (ToplevelBlock.container): Remove field.  It's
7938         redundant with 'Parent'.
7939         (ToplevelBlock.ContainerBlock): Remove accessor.
7940         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7941         child with parent here, ...
7942         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7943         current_block.
7944         (start_anonymous): Don't save current_block.
7945         (top_current_block): Remove.
7946
7947         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7948         (Block.Resolve): Update to changes.
7949         (Block..ctor): Move setting of "correct" 'Toplevel'
7950         and 'Explicit' fields to ...
7951         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7952
7953 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7954
7955         Kill Block.Implicit
7956         * statement.cs (Block.Implicit): Remove.
7957         (Block): Update to changes.
7958         * flowanalysis.cs: Likewise.
7959
7960         Mildly speed up CheckInvariantMeaningInBlock
7961         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7962         Recursively call AddKnownVariable to all enclosing blocks.
7963         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7964         Remove recursive calls.
7965         (Block): Update to changes.
7966
7967         New ExplicitBlock invariants
7968         * statement.cs (Block.Explicit): New field.  It points to the
7969         immediately enclosing non-implicit block.
7970         (Block..ctor): Maintain the invariant.
7971         * cs-parser.jay: Take advantage of invariant.
7972
7973         Introduce ExplicitBlock
7974         * statement.cs (ExplicitBlock): New.
7975         (ToplevelBlock): Derive from it.
7976         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7977         sense of flag.
7978         (Block.Implicit): Update to changes.
7979         * cs-parser.jay: Update to changes.
7980
7981         Remove unused field
7982         * codegen.cs (EmitContext.IsLastStatement): Remove.
7983         * statement.cs (Block.DoEmit): Update to changes.
7984
7985 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7986
7987         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7988         modifying current_block directly.
7989
7990 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7991         
7992         * class.cs: Implemented automatic properties (C# 3.0)
7993           Thanks to Marek for the help.
7994
7995 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7996
7997         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7998         variable as assigned, note also that all its components are
7999         assigned too.
8000         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
8001
8002 2007-05-19  Marek Safar  <marek.safar@gmail.com>
8003
8004         * anonymous.cs, class.cs: Emit Compiler generated attribute when
8005         member is marked as compiler generated.
8006         
8007         * decl.cs (MemberCore): Refactored ModFlags into property.
8008
8009         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
8010         (Check): Check only accessibility modifiers.
8011
8012 2007-05-18  Raja R Harinath  <rharinath@novell.com>
8013
8014         Track all assignable slots in one bit array
8015         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
8016         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
8017         logic from VariableMap constructor here.  Use the same 'offset'
8018         variable that's later used for computing offsets of local
8019         variables.
8020         * flowanalysis.cs (UsageVector.parameters): Remove.
8021         (UsageVector): Update to changes.
8022         (VariableMap): Remove.
8023
8024         Avoid creating ParameterMap in every block
8025         * statement.cs (Block.ParameterMap): Move ...
8026         (ToplevelBlock.ParameterMap): ... here.
8027         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
8028         only once.
8029         * flowanalysis.cs (FlowBranching.param_map): Remove.
8030         (FlowBranching.UsageVector): Update to changes.
8031         (FlowBranchingToplevel.CheckOutParameters): Likewise.
8032
8033         * statement.cs (Block.CloneTo): Clone Toplevel field too.
8034
8035         * expression.cs (ParameterReference): Distinguish between block
8036         where parameter was referenced and declared.
8037
8038 2007-05-18  Marek Safar  <marek.safar@gmail.com>
8039
8040         * flowanalysis.cs, statement.cs: Put back improved error handling.
8041
8042 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
8043         
8044         * assign.cs:
8045         * expression.cs:
8046           Imporved object and collection initialization (C# 3.0).
8047
8048 2007-05-15  Marek Safar  <marek.safar@gmail.com>
8049
8050         A fix for bug #81380
8051         * expression.cs (Is.DoResolve): Only value types have constant `is'
8052         behaviour.
8053
8054 2007-05-15  Raja R Harinath  <rharinath@novell.com>
8055
8056         * statement.cs (ToplevelBlock.child): Remove.
8057
8058 2007-05-15  Raja R Harinath  <harinath@gmail.com>
8059
8060         Rationalize ResolveMeta: refactoring
8061         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
8062         out constant handling code into ...
8063         (Block.DoResolveConstants): ... this.
8064
8065         Rationalize ResolveMeta: kill local_map
8066         * statement.cs (Block.local_map, Block.LocalMap): Remove.
8067         (Block.AssignableSlots): New.
8068         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
8069         for locals -- move code from VariableMap here.  Avoid unnecessary
8070         allocations.
8071         * flowanalysis.cs (FlowBranching.local_map): Remove.
8072         (FlowBranching..ctor): Use Block.AssignableSlots.
8073         (VariableMap): Remove unused constructors.
8074
8075 2007-05-11  Raja R Harinath  <rharinath@novell.com>
8076
8077         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
8078
8079 2007-05-11  Marek Safar  <marek.safar@gmail.com>
8080
8081         * typemanager.cs (IsFriendAssembly): Should not be called for building
8082         assembly.
8083
8084 2007-05-09  Marek Safar  <marek.safar@gmail.com>
8085
8086         * literal.cs (NullConstant): Print null in all cases.
8087         
8088         * expression.cs (Binary.ResolveOperator): Implemented delegate
8089          comparison based on C# 2.0 changes.
8090
8091 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
8092
8093         This code is contributed under the MIT X11 license
8094         
8095         The following enables support for several C# 3.0 language features:
8096         
8097         * cs-tokenizer.cs: Added support for the "var" keyword.
8098         
8099         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
8100           Added VarExpr class to facilitate type inferencing.
8101         
8102         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
8103           to support anonymous types.
8104         
8105         * assign.cs: Added support for type inferencing and initialization.
8106         
8107         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
8108         
8109         * expression.cs: Added implicit array support to ArrayCreation.
8110           Added 5 types and 1 interface:
8111           
8112           IInitializable                Implementing classes can inject initializing
8113                                         statements after object instantiation.
8114           
8115           Initializer                   Stores data for object initialization.
8116           
8117           AnonymousType                 An expression for anonymous types.
8118           
8119           AnonymousTypeParameter        Stores data about an anonymous type's field.
8120           
8121           NewInitialize                 An expression for object initialization.
8122           
8123           CollectionInitialize          An expression for collection initialization.
8124         
8125         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
8126           statements.
8127
8128 2007-05-06  Marek Safar  <marek.safar@gmail.com>
8129
8130         A fix for bug #81500
8131         * cs-tokenizer.cs: Add special handling for coalescing operator.
8132
8133 2007-05-06  Marek Safar  <marek.safar@gmail.com>
8134
8135         A fix for bug #81529
8136         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
8137         its value from base class until it is redefined.
8138
8139 2007-05-02  Raja R Harinath  <rharinath@novell.com>
8140
8141         Fix regression in cs0631-3.cs
8142         * cs-parser.jay (operator_declarator): Add opt_attributes to error
8143         fallback.  Make error fallback catch more cases.
8144
8145 2007-05-01  Miguel de Icaza  <miguel@novell.com>
8146
8147         * cs-parser.jay: Allow parameters in operator declarations to have
8148         attributes. 
8149
8150 2007-04-27  Miguel de Icaza  <miguel@novell.com>
8151
8152         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
8153         exists. 
8154
8155         * lambda.cs (ContextualReturn.Resolve): An expression is valid
8156         inside the ContextualReturn, it does not have to be an
8157         ExpressionStatement. 
8158
8159 2007-04-24  Miguel de Icaza  <miguel@novell.com>
8160
8161         * lambda.cs (ContextualReturn.Resolve): if the return type is not
8162         set, set it.
8163
8164 2007-04-23  Miguel de Icaza  <miguel@novell.com>
8165
8166         * anonymous.cs (AnonymousContainer): split the virtual Resolve
8167         method in two methods: ResolveNoDefine and Resolve.
8168
8169         ResolveNoDefine will stop just after ResolveTopBlock has been
8170         called.   
8171
8172         Resolve will then continue by creating a method and issuing the
8173         call to method.Define ().
8174
8175         (AnonymousMethod): Split and implement the new Resolve and
8176         ResolveNoDefine as well.
8177
8178         * lambda.cs (LambdaExpression): Split the anonymous method
8179         resolution code into a separate routine (CoreCompatibilityTest)
8180         from DoCompatibleTest.
8181
8182         (LambdaExpression.TryBuild): New method, this method tries to
8183         build the LambdaExpression with the given set of types to be used
8184         as the types for the various parameters of the lambda expression. 
8185
8186         If the compilation succeed with the given types, the infered type
8187         of the Anonymous method is returned, otherwise null is returned.
8188
8189 2007-04-23  Marek Safar  <marek.safar@gmail.com>
8190
8191         A fix for bug #81414
8192         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
8193
8194 2007-04-22  Miguel de Icaza  <miguel@novell.com>
8195
8196         * cs-tokenizer.cs: Change various identifiers here from the
8197         camelCasing to the recommended Linux-like style for instance
8198         variables from the Coding Guidelines. 
8199
8200 2007-04-19  Martin Baulig  <martin@ximian.com>
8201
8202         * convert.cs
8203         (Convert.ImplicitReferenceConversionCore): Allow conversions from
8204         System.Enum to System.ValueType.
8205
8206 2007-04-13  Martin Baulig  <martin@ximian.com>
8207
8208         Rewrote implicit reference conversions.  We need to distinguish
8209         between implicit reference conversions (13.1.4) and implicit
8210         boxing conversions (13.1.5).
8211
8212         According to the spec, there's an an implicit conversion
8213         "From a one-dimensional array-type S[] to IList<T> and base
8214         interfaces of this interface, provided there is an implicit
8215         reference conversion from S to T."  Note that this does not
8216         include boxing conversions.
8217
8218         * convert.cs
8219         (Convert.ImplicitTypeParameterBoxingConversion): New method.
8220         (Convert.ImplicitReferenceConversion): Split into
8221         ImplicitReferenceConversionCore() and
8222         ImplicitBoxingConversionExist().
8223         (Convert.ImplicitReferenceConversionExists): Use the new
8224         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
8225
8226 2007-04-12  Martin Baulig  <martin@ximian.com>
8227
8228         * convert.cs (Convert.ImplicitReferenceConversion): Move the
8229         `TypeManager.null_type' checks up to the top of the method.
8230
8231 2007-04-11  Marek Safar  <marek.safar@gmail.com>
8232
8233         A fix for bug #81350
8234         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
8235         extension methods.
8236
8237 2007-04-11  Martin Baulig  <martin@ximian.com>
8238
8239         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
8240         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
8241         to make this work for generic classes; fixes #79561.
8242
8243 2007-04-11  Martin Baulig  <martin@ximian.com>
8244
8245         * expression.cs (As): Add support for nullable types; fixes #79371.
8246
8247 2007-04-11  Martin Baulig  <martin@ximian.com>
8248
8249         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
8250         `type.FullName' is null; fixes #80243.
8251
8252 2007-04-11  Martin Baulig  <martin@ximian.com>
8253
8254         * expression.cs (Invocation.IsApplicable): Don't modify the method
8255         if type inference succeeded, but the method was not applicable.
8256         Fixes #81250.
8257
8258 2007-04-10  Marek Safar  <marek.safar@gmail.com>
8259
8260         A fix for bug #81324
8261         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
8262         internal and external namespaces containers.
8263
8264 2007-04-10  Martin Baulig  <martin@ximian.com>
8265
8266         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
8267         TypeManager.DropGenericMethodArguments() so we also call
8268         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
8269
8270 2007-04-10  Martin Baulig  <martin@ximian.com>
8271
8272         * iterators.cs (Iterator.CreateIterator): Don't crash if
8273         `method.ReturnType' is null.  This happens if something went wrong
8274         while resolving that typ (we already reported an error in this case).
8275
8276 2007-04-10  Martin Baulig  <martin@ximian.com>
8277
8278         * expression.cs (New.DoResolve): Don't call CheckComImport() on
8279         generic interfaces; report the CS0144 directly.
8280
8281 2007-04-10  Martin Baulig  <martin@ximian.com>
8282
8283         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
8284         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
8285
8286 2007-04-10  Martin Baulig  <martin@ximian.com>
8287
8288         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
8289
8290 2007-04-09  Raja R Harinath  <rharinath@novell.com>
8291
8292         A better fix
8293         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
8294         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
8295
8296         Fix #81338
8297         * statement.cs (For.Resolve): If resolution fails, use
8298         KillFlowBranching.
8299
8300 2007-04-08  Marek Safar  <marek.safar@gmail.com>
8301
8302         * anonymous.cs (MakeName): Make faster and zero-based.
8303         (VerifyExplicitParameterCompatibility): Back to mode where generic
8304         parameter is ignored.
8305         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
8306
8307         * class.cs (EmitType): Method can emit another new method.
8308
8309         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
8310
8311         * driver.cs: Updated.
8312
8313         * lambda.cs: Reuse predefined empty parameters.
8314
8315         * parameter.cs: Updated
8316
8317         * support.cs: Implemented InflateTypes.
8318
8319         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
8320         (InitSystemCore): Introduced to isolate 3.0 dependencies.
8321
8322 2007-04-03  Martin Baulig  <martin@ximian.com>
8323
8324         Fix #80632.
8325
8326         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
8327         version of TypeManager.IsOverride() which also works with generic
8328         types.  
8329
8330 2007-04-03  Martin Baulig  <martin@ximian.com>
8331
8332         Fix #81044.
8333
8334         * convert.cs
8335         (Convert.ExplicitReferenceConversion): We need to cast when
8336         converting from IList<T> to S[].
8337
8338 2007-04-01  Marek Safar  <marek.safar@gmail.com>
8339
8340         * decl.cs (FindExtensionMethods): Consider all candidates with same name
8341         at this level.
8342         
8343         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
8344
8345 2007-03-31  Marek Safar  <marek.safar@gmail.com>
8346
8347         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
8348         argument and return type inferring.
8349
8350         * codegen.cs (InferReturnType): Flag whether return can be inferred.
8351         (ReturnType): Turned to property.
8352
8353         * statement.cs (Return): Implemented return type inferring.
8354
8355         * support.cs (ReflectionParameters): Use local types if possible.
8356
8357 2007-03-30  Raja R Harinath  <rharinath@novell.com>
8358
8359         * flowanalysis.cs (FlowBranching.Reachability): Remove.
8360         (FlowBranching.UsageVector): Update to changes.
8361
8362         Prepare to kill 'Reachability'
8363         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
8364         argument of constructor.
8365
8366 2007-03-29  Raja R Harinath  <rharinath@novell.com>
8367
8368         Prepare to kill 'Reachability'
8369         * flowanalysis.cs (UsageVector.is_unreachable): New.
8370         (UsageVector): Update to maintain 'is_unreachable' in parallel to
8371         'reachability', and verify they're consistent.
8372
8373         Fix #81121
8374         * expression.cs (New.EmitStatement): Handle type parameters here too.
8375
8376 2007-03-29  Martin Baulig  <martin@ximian.com>
8377
8378         Fix #79148.
8379
8380         * anonymous.cs
8381         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
8382         CompilerGeneratedClass.
8383         (ScopeInfo.EmitScopeInstance): Make this protected.
8384         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
8385         `ec.CurrentAnonymousMethod.Scope == Scope'.
8386
8387         * statement.cs (Block.ScopeInfo): Make this a property.
8388
8389 2007-03-27  Raja R Harinath  <harinath@gmail.com>
8390
8391         Prepare to kill 'Reachability'
8392         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
8393         (FlowBranching.UsageVector.Reachability): Remove property.
8394         (FlowBranching.UsageVector.IsUnreachable): New property.
8395         (FlowBranching.UsageVector.ResetBarrier): New.
8396         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
8397         * codegen.cs, statement.cs: Update to changes.
8398
8399 2007-03-27  Martin Baulig  <martin@ximian.com>
8400
8401         Fix #81209.
8402
8403         * decl.cs
8404         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
8405         generic types.
8406
8407 2007-03-26  Raja R Harinath  <rharinath@novell.com>
8408
8409         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
8410         instead of TriState.  Remove all mention of TriState.
8411
8412         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
8413         replaced by a boolean.  Add boolean 'is_unreachable' field, check
8414         and maintain invariants.
8415
8416 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8417
8418         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
8419
8420 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8421
8422         * expression.cs: Stop using obsolete 2.0 opcodes.
8423
8424 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8425
8426         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
8427         one of the latests Martin's fixes.
8428
8429 2007-03-23  Miguel de Icaza  <miguel@novell.com>
8430
8431         * expression.cs: On BigEndian systems, swap the bytes, temporary
8432         solution until we get a new bitconverter class.
8433
8434 2007-03-23  Martin Baulig  <martin@ximian.com>
8435
8436         Fix #81158.
8437
8438         * decl.cs (MemberCache.AddMembers): Add generic methods both as
8439         "Method" and "Method`1".  Normally, a cache lookup is done on the
8440         "Method" form (ie. without the generic arity), but this one makes
8441         lookups on the full form work as well.
8442
8443 2007-03-22  Raja R Harinath  <rharinath@novell.com>
8444
8445         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
8446         unused properties.
8447
8448 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
8449         * class.cs: 
8450         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
8451         ordered_member_list, to TypeBuilder to store members to be defined
8452         in the order they were parsed in.
8453         - ordered_explicit_member_list contains all properties indexers
8454           and methods that are defined as explicit implementation of an
8455           interface or base class.
8456         - ordered_member_list contains all properties indexers and methods
8457           that are not defined as explicit implementation of an interface
8458           or base class.
8459
8460         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
8461         functionality in these removed classes has been replaced with 
8462         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
8463         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
8464
8465         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
8466         to CheckForDuplications inside GetMethod and SetMethod Define Method
8467         to handle method property and indexer name conflicts.
8468
8469         Fixes #79434
8470
8471         All code is contributed under the MIT/X11 license.
8472
8473 2007-03-20  Martin Baulig  <martin@ximian.com>
8474
8475         * class.cs (TypeContainer.Interfaces): Removed; they're now
8476         included in `TypeContainer.Types'.
8477
8478 2007-03-20  Martin Baulig  <martin@ximian.com>
8479
8480         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
8481
8482         * class.cs (TypeContainer.CreateType): New public method.  This is
8483         now called before DefineType() to create the TypeBuilders.
8484         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
8485         has already been created by CreateType().
8486         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
8487         don't resolve our base classes here; this has been moved into
8488         DefineBaseTypes().  We're now called from CreateType().
8489         (TypeContainer.DefineBaseTypes): New private method; resolve our
8490         base classes here.  We're now called from DefineType().
8491
8492         * rootcontext.cs
8493         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
8494         our types first to create all the TypeBuilders.  After that, call
8495         TypeContainer.DefineType() on all the types which'll resolve their
8496         base classes and setup the resolve order.
8497
8498 2007-03-20  Martin Baulig  <martin@ximian.com>
8499
8500         * class.cs (TypeContainer.Enums): Removed; they're now included in
8501         `TypeContainer.Types'.  
8502
8503 2007-03-20  Martin Baulig  <martin@ximian.com>
8504
8505         * class.cs
8506         (TypeContainer.DefineType): Don't call ResolveMembers() here.
8507         (TypeContainer.DoResolveMembers): Call DefineType() on our
8508         `compiler_generated' classes; moved here from DefineNestedTypes().
8509
8510         * rootcontext.cs
8511         (RootContext.ResolveTree): Call ResolveMembers() on all
8512         TypeContainer's in the `type_container_resolve_order'.
8513
8514 2007-03-19  Marek Safar  <marek.safar@gmail.com>
8515
8516         * class.cs: Use corlib to handle InternalMethodImplAttribute.
8517
8518 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8519
8520         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
8521         implementation flags.
8522
8523 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8524
8525         * class.cs: More optimizations for type parameters.
8526
8527 2007-03-15  Marek Safar  <marek.safar@gmail.com>
8528
8529         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
8530
8531         * ecore.cs, parameter.cs: More common code for both corlibs.
8532
8533         * typemanager.cs (IsGenericMethod): Simplified.
8534
8535 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8536
8537         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8538         'returns'.
8539         * statement.cs, iterators.cs, lambda.cs: Update to changes.
8540
8541         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
8542         unconditionally.  Simplify explanation.
8543         (Try.Resolve, Using.Resolve): Likewise.
8544
8545 2007-03-15  Martin Baulig  <martin@ximian.com>
8546
8547         Fix #80731.
8548
8549         * decl.cs (DeclSpace): If we're a partial class, use our
8550         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
8551
8552 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8553
8554         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8555         'throws'.
8556         (FlowBranching.UsageVector): Update to changes.
8557         (FlowBranching.MergeSiblings): Likewise.
8558         * statement.cs: Likewise.
8559
8560 2007-03-15  Martin Baulig  <martin@ximian.com>
8561
8562         Fix #79302.
8563
8564         * decl.cs
8565         (MemberCache): Added a special .ctor for type parameters.
8566
8567         * typemanager.cs
8568         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
8569         `MemberCache'.  
8570
8571 2007-03-09  Martin Baulig  <martin@ximian.com>
8572
8573         * enum.cs (Enum): Make this a TypeContainer.
8574         (EnumMember): Derive from `Const'.
8575
8576         * const.cs
8577         (Const.DoResolveValue): New protected virtual method; move most of
8578         the functionality of ResolveValue() here so we can override it in
8579         `EnumMember'.
8580         (Const.CreateConstantReference): Make this virtual.
8581
8582         * class.cs (Kind): Add `Kind.Enum'.
8583         (TypeContainer.Emit): Don't emit the enums here; they're already
8584         in the `RootContext.typecontainer_resolve_order'.
8585
8586         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
8587         here; they're already in the `typecontainer_resolve_order'.
8588
8589         * ecore.cs (EnumConstant.ConvertImplicitly): Add
8590         TypeManager.DropGenericTypeArguments().
8591
8592         * typemanager.cs
8593         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
8594         (TypeManager.IsEnumType): Likewise.
8595         (TypeManager.EnumToUnderlying): Likewise.
8596         (TypeManager.IsEqual): Add support for enums.
8597
8598 2007-03-12  Raja R Harinath  <rharinath@novell.com>
8599
8600         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
8601         DefaultParameterValueAttribute to be undefined, say if System.dll
8602         is not referenced.
8603
8604 2007-03-11  Marek Safar  <marek.safar@gmail.com>
8605
8606         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
8607         any mscorlib.
8608
8609 2007-03-10  Marek Safar  <marek.safar@gmail.com>
8610
8611         * class.cs, parameter.cs: Unified parameters verification.
8612
8613 2007-03-08  Martin Baulig  <martin@ximian.com>
8614
8615         * cs-parser.jay (constructor_header): Pass the location to the
8616         newly created TopLevelBlock.
8617
8618 2007-03-07  Martin Baulig  <martin@ximian.com>
8619
8620         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8621
8622 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8623
8624         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8625         with the changes from David, fixes the build.
8626
8627 2007-03-05  David Mitchell  <dmitchell@logos.com>
8628
8629         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8630         and its base interfaces to a one-dimensional array type S[],
8631         provided there is an implicit or explicit reference conversion
8632         from S to T.
8633
8634 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8635
8636         * cs-tokenizer.cs: Implemented basic linq grammar.
8637
8638         * driver.cs: Set linq lang version on demand.
8639
8640 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8641
8642         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8643
8644 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8645
8646         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8647         (Fixes #80455)
8648
8649         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8650         here.
8651         Check property and event extern attributes.
8652
8653         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8654         charset.
8655
8656 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8657
8658         A fix for bug #80407
8659         * ecore.cs: Don't report ambiguity error when methods have same parent.
8660
8661 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8662
8663         A fix for bug #80878
8664         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8665
8666 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8667
8668         * attribute.cs: Enable ExtensionAttribute presence test.
8669
8670 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8671
8672         * class.cs: Warn about missing GetHashCode only when Equals is override.
8673
8674         * decl.cs: Check accessibility of type arguments.
8675
8676         * typemanager.cs: Correctly report nullable array.
8677
8678 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8679
8680         * class.cs, report.cs: Capture more details when things go wrong.
8681
8682 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8683
8684         A fix for bug #80650
8685         * cs-parser.jay: Anonymous container starts at constructor declaration
8686         and not at block beginning because it has to be usable in constructor
8687         initializer.
8688
8689         * statement.cs: Use context location and not block one for error reporting.
8690
8691 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8692
8693         A fix for bug #78712
8694         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8695         too.
8696
8697 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8698
8699         A fix for bug #80493 by Atsushi Enomoto
8700         * cs-parser.jay: Ignore invalid attribute target.
8701
8702 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8703  
8704         * cs-tokenizer.cs: Ignore '\0' as white space character.
8705
8706 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8707
8708         * cs-parser.jay: Add support for lambda expressions to the mcs
8709         compiler as well.
8710
8711         * lambda.cs: Only clone when we are probing, not on the final call
8712         (Compatible is the final call). 
8713
8714         * statement.cs (CloneContext): Introduce class to provide block
8715         remapping during clone.
8716
8717         All statements Clone themselves now.
8718
8719         (Clone): special handling for blocks, when we clone a block, we
8720         register the block inside this routine, as children of the block
8721         might trigger a lookup. 
8722         
8723         * expression.cs: Add support for CloneContext in all expressions. 
8724         
8725 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8726  
8727         A fix for bug #80493
8728         * statement.cs: Report ambiguous warning when interfaces are not related.
8729
8730 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8731
8732         C# 3.0 extension methods.
8733
8734         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8735         cannot be used directly.
8736
8737         * class.cs (Class.Emit): Emit extension attribute if any class method
8738         is extension method.
8739         (Method.Define): Add basic extension method validation conditions.
8740         (Method.Emit): Emit extension attribute for method.
8741
8742         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8743         extension method exists. Currently we follow same approach as Microsoft
8744         does, emit even if a method or a class are private but this can change
8745         later.
8746
8747         * cs-parser.jay: Add handling of `this' keyword in method parameters
8748         context.
8749
8750         * decl.cs (DeclSpace.IsStaticClass): New property.
8751         (MemberCache.FindExtensionMethods): Looks for extension methods with
8752         defined name and extension type.
8753
8754         * doc.cs: Updated after OverloadResolve changes.
8755
8756         * driver.cs: Add new soft reference to System.Core.dll.
8757
8758         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8759         (ExtensionMethodGroupExpr): Represents group of extension methods.
8760
8761         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8762         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8763         to MethodGroupExpr and made non-static for easier customization.
8764         (Invocation.DoResolve): Add extension method lookup when no standard
8765         method was found.
8766         (MemberAccess.DoResolve): Try extension methods if no member exists.
8767
8768         * modifiers.cs: Add METHOD_EXTENSION modifier.
8769
8770         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8771         as well as candidate extension type.
8772         (ComputeNamespaces): When assembly constains extension methods registers
8773         them.
8774         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8775         extension method lookup.
8776         (Namespace.LookupExtensionMethod): Looks for extension method in this
8777         namespace.
8778         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8779         find a method which matches name and extensionType.
8780
8781         * parameter.cs (Parameter): Add This modifer.
8782         (HasExtensionMethodModifier): New property.
8783         (Resolve): Add extension parameter check.
8784         (ModFlags): turned to property to exclude this modifier as it is not real
8785         parameter modifier.
8786         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8787
8788         * support.cs (ParameterData): Add ExtensionMethodType.
8789         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8790
8791         * typemanager.cs: Add type and ctor extension attribute type.
8792
8793 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8794
8795         * report.cs (DisableErrors, EnableErrors): used to prevent error
8796         output when we are "trying" to compile various methods with
8797         different types. 
8798
8799         * ecore.cs (Expression): Add Clone method that calls the virtual
8800         CloneTo method.  The current CloneTo method in Expression throws
8801         an exception so we can track down all the places where this must
8802         be implemented (not using abstract, because that would be a lot of
8803         up-front-work before we can start testing the implementation
8804         idea). 
8805
8806         Important: we only need Clone capabilities for expressions created
8807         by the parser, as the expressions we will be cloning are
8808         expressions in the pre-resolved state.   This vastly simplifies
8809         the work required. 
8810         
8811         (SimpleName): Add CloneTo that does nothing.
8812         (EmptyCast): Add CloneTo.
8813         
8814         * expression.cs (Binary): Implement CloneTo.
8815         (Invocation.IsApplicable): Store the current ec in
8816         EmitContext.TempEc and restore it on return.  This is used so we
8817         do not have to sprinkle hundres of methods with an extra
8818         EmitContext, we know that the only user is the lambda expression
8819         ImplicitConversionExists code. 
8820         
8821         (Argument): Add Cloning capabilities.
8822         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8823         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8824         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8825         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8826         IndexerAccess): Add Clone capability.
8827
8828         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8829
8830         (Argument): Add cloning capability.
8831
8832         * assign.cs (Assign): Implement CloneTo.
8833
8834         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8835         
8836         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8837         version by calling Convert with the EmitContext (that we are
8838         currently storing in ec, this is not great, but will do for now,
8839         to avoid passing EmitContext parameters to hundreds of functions
8840         that do not need them now).
8841
8842         (SetExpression): Remove, it is not needed.
8843         
8844         (ContextualReturn): Implement CloneTo.
8845
8846         * statement.cs (Statement): Implement cloning infrastructure,
8847         similar to expressions.
8848
8849         (Block): Partial implementation of Clone for statements.
8850
8851         (Return): Implement clone.
8852         
8853         * constant.cs (Constant.CloneTo): New method, does nothing.
8854
8855         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8856         solution, until we decide how to exactly do this.  
8857         
8858 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8859  
8860         A fix for bug #80493
8861         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8862         a property is override we need to use second accessor.
8863
8864 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8865  
8866         A fix for bug #80418
8867         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8868         methods.
8869
8870 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8871
8872         Another fix for bug #80749
8873         * pending.cs: Abstract class has priority over interfaces.
8874
8875 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8876
8877         Another fix for bug #80749
8878         * pending.cs: Abstract class has priority over interfaces.
8879
8880 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8881
8882         Another fix for bug #80749
8883         * pending.cs: Abstract class has priority over interfaces.
8884
8885 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8886
8887         Another fix for bug #80749
8888         * pending.cs: Abstract class has priority over interfaces.
8889
8890 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8891
8892         * class.cs Better error message.
8893
8894         * driver.cs: Add shorter versions of -optimize option.
8895
8896 2007-02-13  Martin Baulig  <martin@ximian.com>
8897
8898         * class.cs (Constructor.Emit): Check the return value of
8899         ec.ResolveTopBlock() and return on error.
8900
8901 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8902
8903         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8904         message to fix error message regression.
8905
8906 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8907
8908         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8909
8910 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8911
8912         A fix for bug #80749
8913         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8914         its parent container.
8915
8916         * class.cs (DefineFieldInitializers): Each initializer can has different
8917         resolve context.
8918
8919         * const.cs: Updated.
8920
8921 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8922
8923         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8924         now all the heavy lifting to check that embedded statements or
8925         expressions have the right form is done in the ContextualReturn.
8926
8927         (ContextualReturn): New class.  
8928
8929         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8930         method that can be invoked to report 201, so we do not replicate
8931         this everywhere.
8932
8933         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8934         
8935         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8936         treating tabs as spaces. 
8937
8938 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8939
8940         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8941         * assign.cs: Use full implicit conversion for right side check.
8942
8943 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8944
8945         * statement.cs (Switch): Switch over boolean type is not standardized.
8946
8947 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8948
8949         A fix for bug #80755
8950         * decl.cs (FindBaseEvent): Don't use method cache for events.
8951
8952 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8953
8954         * cs-parser.jay: Better syntax error handling.
8955
8956         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8957         instead of underlying type value.
8958
8959 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8960
8961         * driver.cs: Check define identifier before is registered.
8962
8963         * namespace.cs: Use existing error message.
8964
8965         * report.cs: New warning.
8966
8967 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8968
8969         A fix for bug #80742
8970         * expression.cs: Delegate Invoke method can be called directly.
8971
8972 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8973
8974         A fix for bug #80676
8975         * class.cs (IsEntryPoint): The Main method can have params modifier.
8976
8977 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8978
8979         * parameter.cs (Parameter, Parameters): Add Clone method.
8980
8981         * anonymous.cs (Compatible): Turn method into virtual method, so
8982         LambdaExpression can implement a different behavior.
8983
8984         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8985         out the basic checking here, so it can be used by
8986         LambdaExpressions.
8987         
8988         * lambda.cs: Introduce "Compatible" function that will do the
8989         heavy lifting.
8990
8991 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8992
8993         * attribute.cs: Unified one error message.
8994
8995         * class.cs (Class): Use type attributes and not properties to test static
8996         class.
8997         (IsEntryPoint): Don's pass local variable.
8998
8999         * convert.cs: Removed duplicate check.
9000
9001         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
9002
9003         * driver.cs: Don't crash when soft reference does not exist.
9004
9005         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
9006         (UsingEntry): Removed redundant allocation.
9007
9008         * parameter.cs: Add fast path for type parameters.
9009
9010         * support.cs: Don't allocate attribute when it's not used.
9011
9012 2007-01-30  Miguel de Icaza  <miguel@novell.com>
9013
9014         * anonymous.cs
9015         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
9016         this into a virtual method, so we can override it in LambdaExpression.
9017
9018         * driver.cs: Improve diagnostics in case of failure. 
9019
9020         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
9021         write a function that is slightly more complex and that parses:
9022
9023         type identifier [, type identifier]* )
9024
9025         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
9026         this expression:
9027
9028                 (canEmpty ? i >= 0 : i > 0)
9029
9030 2007-01-30  Raja R Harinath  <rharinath@novell.com>
9031
9032         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
9033         exception on possibly valid code.
9034
9035 2007-01-29  Raja R Harinath  <rharinath@novell.com>
9036
9037         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
9038         Push/PopPosition.
9039         (parse_opt_type_arguments): Remove.  It's almost the same as
9040         parse_less_than.
9041         (parse_namespace_or_typename): Use parse_less_than.
9042
9043 2007-01-28  Miguel de Icaza  <miguel@novell.com>
9044
9045         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
9046         this bug took a few hours to find, because the state saved and
9047         restored by PushPosition and PopPosition was ignoring the state of
9048         parse_generic_less_than.
9049
9050         I can also now remove the handling of OP_LT and OP_GT, this solves
9051         the big mistery.
9052         
9053         * cs-tokenizer.cs: store the location for the ARROW token, we use
9054         that in the parser.
9055
9056         (PushPosition, PopPosition): save/restore also `current_token',
9057         restore `parse_generic_less_than' (was missing).
9058
9059         (parse_opt_type_arguments): use parse_type, not
9060         parse_namespace_or_typename to parse types.
9061
9062         * lambda.cs: Empty new file, will eventually have the lambda
9063         expression implementation.
9064
9065         * lambda.test: used to test the internal tokenizer. 
9066
9067         * report.cs (FeatureIsNotISO1): Rename from
9068         FeatureIsNotStandardized, because it was about the language level
9069         (1 vs 2) it was not about standarization.
9070
9071         (FeatureRequiresLINQ): New.
9072
9073         * support.cs (SeekableStreamReader): Only require that the reader
9074         is a TextReader, not a StreamReader, so we can plug StringReader. 
9075
9076         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
9077         given position in the input stream the following tokens can be
9078         parsed as a type followed by an identifier.
9079
9080         (is_punct): after a '(' if parse_type_and_parameter returns true,
9081         then return a special token OPEN_PARENS_LAMBDA which is used to
9082         avoid reduce/reduce errors in the grammar for the
9083         lambda_expression rules.
9084
9085         (parse_type): implement a type parser inside the
9086         tokenizer, the parser only returns true or false depending on
9087         whether the input at a given position can be parsed as a type.
9088
9089         (peek_token): new method used during type parsing.
9090
9091 2007-01-28  Raja R Harinath  <rharinath@novell.com>
9092
9093         Fix #80531
9094         * anonymous.cs (ScopeInfo.InflateParameters): New.
9095         (AnonymousContainer.Resolve): Use it to redirect types of
9096         delegate parameters.
9097
9098 2007-01-27  Raja R Harinath  <rharinath@novell.com>
9099
9100         Fix #80530
9101         * expression.cs (Error_InvalidArguments): Don't use two different
9102         messages for CS1503.  Use ExtraInformation and
9103         SymbolRelatedToPreviousError instead.
9104
9105         Fix #80358
9106         * decl.cs (DeclSpace.initialize_type_params): Don't access
9107         'type_params' of a partial class directly.
9108
9109 2007-01-26  Miguel de Icaza  <miguel@novell.com>
9110
9111         * constant.cs: Removed a handful of out-of-range checks that were
9112         not necessary. 
9113
9114 2007-01-25  Marek Safar  <marek.safar@gmail.com>
9115
9116         * expression.cs (CheckUselessComparison): Add additional check for char
9117         constants.
9118
9119         * namespace.cs: Fixed typo.
9120
9121 2007-01-23  Miguel de Icaza  <miguel@novell.com>
9122
9123         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
9124         gone, instead we inline the test, preventing the needless casts to
9125         longs, ulongs and doubles for the parameters, avoiding calls to
9126         methods that overchecked stuff, and instead inlined things
9127         nicely. 
9128
9129 2007-01-20  Marek Safar  <marek.safar@gmail.com>
9130
9131         * cs-parser.jay: Better parameter error handling.
9132
9133 2007-01-17  Marek Safar  <marek.safar@gmail.com>
9134
9135         A fix for bug #80368, #80522
9136         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
9137         whether array initializer contains constants only.
9138         (ArrayCreation.Emit): Use better formula to decide when
9139         are array initializers for static initialization.
9140         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
9141         have to emit even constants otherwise they are pre-initialized.
9142
9143 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
9144             Raja R Harinath  <rharinath@novell.com>
9145
9146         Fix emit order of 'get' vs. 'set'.
9147         * support.cs (Accessors): New.
9148         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
9149         Note the order in which accessors are declared in the source.
9150         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
9151         Refactored from Property.Define and Indexer.Define.
9152         (PropertyBase.DefineAccessors): New helper that calls the above in
9153         appropriate order as noted by the parser.
9154         (Property.Define, Indexer.Define): Update to changes.
9155         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
9156
9157 2007-01-17  Raja R Harinath  <rharinath@novell.com>
9158
9159         Fix cs0029-6.cs and gcs0029-2.cs (regression)
9160         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
9161         there's an implicit conversion from the current type to the target
9162         type before converting the underlying constant.
9163
9164 2007-01-16  Marek Safar  <marek.safar@gmail.com>
9165
9166         * const.cs (ResolveValue): Updated after constant conversion was made more
9167         generic.
9168
9169         * constant.cs (GetAttributableValue): constant to object conversion is
9170         used for attributes only.
9171         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
9172         constant conversions.
9173         (LongConstant.ConvertImplicitly): Ditto.
9174
9175         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
9176         (ImplicitConversionStandard): Handle constant conversion as extra step.
9177         It solves the issue when constant conversion was called indirectly like
9178         inside array initializer and constant folding was skipped.
9179
9180         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
9181         this change.
9182
9183         * statement.cs(ImplicitConversionStandard): Updated after constant
9184         conversion was made more generic.
9185
9186 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
9187
9188         * expression.cs (As.DoResolve): Use GenericConstraints instead of
9189         Constraints, solves the problem where the compiler incorrectly
9190         reported that a type parameter was not constrained to a class (Bug
9191         80518)
9192
9193 2007-01-14  Marek Habersack  <grendello@gmail.com>
9194
9195         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
9196
9197 2007-01-14  Marek Safar  <marek.safar@gmail.com>
9198
9199         A fix for bug #80368
9200         * assign.cs (FieldInitializer): New class implements field
9201         initializer statement.
9202
9203         * attribute.cs: Update after FieldMember rename.
9204
9205         * class.cs (PropertyBasedMember): New common class for property based
9206         types.
9207         (InterfaceMemberBase): New base class for all members which can be used as
9208         an interface members.
9209         (MethodCore): Moved really common code to InterfaceMemberBase.
9210         (Method.Define): Equal and GetHasCode detection is relevant for methods
9211         only.
9212         (MethodData.Define): Don't assume that public event implements an
9213         interface automatically.
9214         (MethodData.DefineMethodBuilder): Issue an error even if only extern
9215         modifier is used.
9216         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
9217         (FieldMember): Merged with FieldBase.
9218         (EventProperty.AEventPropertyAccessor): New specialization to check whether
9219         event extern modifier can be used.
9220         (EventField.EventFieldAccessor): Moved event field specific code here.
9221         (Event.AllowedModifiers): Even event can be extern.
9222         (Event.FindOutBaseMethod): New override specific to events.
9223         (Indexer.parameters): Reintroduce parameters because base class holds
9224         only properties common data.
9225         (Indexer.CheckForDuplications): Indexers are threated as methods so we
9226         need do extra parameters check.
9227
9228         * const.cs: Update after FieldMember rename.
9229
9230         * decl.cs (MemberCache.FindBaseEvent): New method.
9231
9232         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
9233         to reflect that indexer is now derived from PropertyBased.
9234
9235         * ecore.cs (GetMemberType): Made public.
9236         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
9237         obsolete event.
9238
9239         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
9240         
9241         * typemanager.cs (CSharpSignature): Correctly print event accessors.
9242         (RegisterEvent): Removed.
9243         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
9244         (GetPrivateFieldOfEvent): Renamed to GetEventField.
9245
9246 2007-01-11  Raja R Harinath  <rharinath@novell.com>
9247
9248         Fix #80249
9249         * statement.cs (CollectionForeach.TryType): Prefer generic
9250         GetEnumerator over non-generic variant.  Fix code to follow comments.
9251
9252 2007-01-09  Raja R Harinath  <rharinath@novell.com>
9253
9254         Fix #80446
9255         * support.cs (ReflectionParameter): Don't use an invalid index on
9256         the generic parameter data.
9257
9258 2007-01-08  Miguel de Icaza  <miguel@novell.com>
9259
9260         * driver.cs: Just add a tiny bit of infrastructure.
9261
9262 2007-01-02  Marek Safar  <marek.safar@gmail.com>
9263
9264         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
9265         where field type is struct from current assembly.
9266         
9267         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
9268         it is possible.
9269
9270 2007-01-02  Marek Safar  <marek.safar@gmail.com>
9271
9272         A fix for bug #80381
9273         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
9274         the core types.
9275
9276         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
9277         messages.
9278         (Namespace.LookupType): Always use core types from corlib when speficied.
9279
9280         * report.cs: A new warning.
9281
9282         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
9283         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
9284         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
9285
9286         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
9287         (InitCoreTypes): Set expression type of object_type and value_type
9288         immediately after lookup.
9289
9290 2007-01-01  Miguel de Icaza  <miguel@novell.com>
9291
9292         * cs-tokenizer.cs: Accept Pc class characters (Connector
9293         Punctuation) as valid identifiers.  Fixes #78259
9294
9295         * expression.cs (Invocation.DoResolve): Moved the check for the
9296         use of `this' for doing method calls to the Invocation resolution
9297         step, after overload resolution has taken place instead of doing
9298         the check at the low-level `This.DoResolve' level.
9299
9300         The `This.DoResolve'(appens before overload resolution, so it has
9301         no way of knowing if the method that will be called will be
9302         instace or static, triggering an erroneous report for cs0188 (Bug
9303         78113).
9304
9305         We now do the check for instance method invocations after we know
9306         what method will be called.
9307
9308         (This.CheckThisUsage): Move the actual use of this structure
9309         checking into its own method and expose it. 
9310
9311         * Everywhere that called Error_ValueCannotBeConverted: pass a new
9312         EmitContext.
9313
9314         Exceptions: Null.ConvertImplicitly,
9315         Constant.ImplicitConversionRequired as there are too many call
9316         sites for passing the ec. 
9317
9318         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
9319         EmitContext, if the value is null, then we do not try to provide
9320         the extra information from the error (If a userdefined conversion
9321         exists, as UserDefinedConversion requires a non null-EmitContext).
9322
9323         Fixes: #80347
9324
9325 2006-12-30  Raja R Harinath  <rharinath@novell.com>
9326
9327         * flowanalysis.cs (MyBitVector): Document some invariants.
9328         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
9329         introduced below, and add a couple of others, 
9330
9331 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9332
9333         * attribute.cs (GetMethodObsoleteAttribute): Uses new
9334         GetPropertyFromAccessor and GetEventFromAccessor.
9335         
9336         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
9337         overrides non-obsolete one.
9338         (Indexer.Define): Error message has been moved to the parser.
9339
9340         * cs-parser.jay: Better syntax errors handling.
9341
9342         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
9343         when an invocation has no arguments.
9344
9345         * ecore.cs: Removed not used caching.
9346
9347         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
9348         implementation.
9349
9350         * report.cs: Add a new warning.
9351
9352         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
9353
9354         * typemanager.cs (enumeration_type): Removed.
9355         (CSharpSignature): Reuses IsSpecialMethod.
9356         (IsEqual): Hack for MS BCL.
9357         (GetPropertyFromAccessor): New method.
9358         (GetEventFromAccessor): New method.
9359         (IsSpecialMethod): Fixed to handle more cases.
9360
9361 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9362
9363         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
9364         Made white spaces array static.
9365
9366         * ecore.cs (RemoveGenericArity): Optimized.
9367
9368         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
9369         10 times faster).
9370         (MyBitVector.initialize_vector): Simplified.
9371
9372 2006-12-22  Miguel de Icaza  <miguel@novell.com>
9373
9374         * ecore.cs: Am not entirely happy with this hack, but it seems to
9375         address the issue in 80257 (a small test case for
9376         CreativeDocs.NET). 
9377
9378         I set the MethodGroupExpr.Type to an internal compiler type
9379         (itself in this case) to force the resolution to take place.   Why
9380         it does not take place with a null is beyond me.
9381
9382 2006-12-20  Marek Safar  <marek.safar@gmail.com>
9383
9384         A fix for bug #80288
9385         * expression.cs (ResolveOperator): Consider user defined conversion for
9386         logical and operator too.
9387         (EmitBranchable): Optimization for logical and when full constant folding
9388         could not be applied but one operand is constant.
9389
9390 2006-12-19  Marek Safar  <marek.safar@gmail.com>
9391
9392         * class.cs (GetClassBases): Write 5 times every day, will never use
9393         FullName for error reporting.
9394
9395         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
9396
9397 2006-12-19  Martin Baulig  <martin@ximian.com>
9398
9399         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
9400         the symbol file info here.
9401
9402 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9403
9404         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
9405         of `elseif' is taking then following sections are not taking.
9406         Fixes an issue reported on mono mailing list.
9407
9408 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9409
9410         A fix for bug #80300
9411         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
9412         a caller is not taking.
9413
9414 2006-12-18  Raja R Harinath  <rharinath@novell.com>
9415
9416         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
9417         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
9418         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
9419         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
9420         * class.cs: Update to changes.
9421
9422 2006-12-17  Marek Safar  <marek.safar@gmail.com>
9423
9424         A fix for bug #79934
9425         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
9426         partial container.
9427
9428         * class.cs (ResolveMembers): Register an iterator in current container and
9429         not in shared one.
9430
9431 2006-12-16  Raja R Harinath  <rharinath@novell.com>
9432
9433         Fix test-543.cs
9434         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
9435         satisfy a params annotated parameter.
9436
9437 2006-12-16  Marek Safar  <marek.safar@gmail.com>
9438
9439         A fix for bug #77014
9440         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
9441         paramters correctly and not rely on hacks in Parameters class.
9442         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
9443         at any possition.
9444         (Invocation.VerifyArgumentsCompat): Ditto.
9445         (Invocation.EmitArguments): Changed to correctly emit params arguments at
9446         any possition.
9447
9448         * parameter.cs (HasParams): Don't assume that params is the last one.
9449
9450         * support.cs (ReflectionParameters.ctor): Look for params attribute
9451         correctly.
9452         (ReflectionParameters.ParameterType): Removed hack when we returned last
9453         parameter for out of range parameters.
9454         (ParameterName, ParameterModifier): Ditto.
9455
9456 2006-12-14  Marek Safar  <marek.safar@gmail.com>
9457
9458         A fix for bug #79987
9459         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
9460         when assembly is not CLS compliant but type is. I have no idea why is this
9461         allowed.
9462
9463         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
9464
9465 2006-12-13  Miguel de Icaza  <miguel@novell.com>
9466
9467         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
9468         in struct constructors, they are basically no-ops.
9469
9470 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9471
9472         * cs-tokenizer.cs (Position): Save preprocessor status too.
9473
9474 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9475
9476         A fix for bug #77794
9477         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
9478
9479 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9480
9481         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
9482         Fixes #69299.
9483         (pp_expr): Report error for an invalid expression.
9484         (handle_preprocessing_directive): Simplified; add more error checking.
9485
9486 2006-12-11  Marek Safar  <marek.safar@gmail.com>
9487
9488         A fix for bug #74939
9489         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
9490         directives handling.
9491
9492 2006-12-10  Marek Safar  <marek.safar@gmail.com>
9493
9494         A fix for bugs #80093, and #75984
9495         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
9496         logic, it seems to me as it worked before "by coincidence".
9497         (xtoken): Simplified to use reworked handle_preprocessing_directive.
9498         (cleanup): Enabled endif check.
9499
9500 2006-12-09  Marek Safar  <marek.safar@gmail.com>
9501
9502         A fix for bug #80162
9503         * statement.cs (CollectionForeach.TryType): Generics and non-generics
9504         enumerators are never ambiguous.
9505
9506 2006-12-08  Raja R Harinath  <rharinath@novell.com>
9507
9508         Fix #80060
9509         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
9510
9511 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9512
9513         A fix for bug #80144
9514         * class.cs (EventProperty.Define): Explicit implementation means
9515         that an even is used.
9516
9517 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9518
9519         Fixes the operators implementation (part II)
9520
9521         * cfold.cs (DoConstantNumericPromotions): Renamed to
9522         DoBinaryNumericPromotions and simplified.
9523         (BinaryFold): Couple of conversion fixes; simplified.
9524
9525         * constant.cs, ecore.cs, literal.cs
9526         (ToType): Renamed to ConvertImplicitly.
9527         (Reduce): Renamed to ConvertExplicitly.
9528
9529         * class.cs, convert.cs: Updated.
9530
9531         * expression.cs: TryReduce doesn't throw an exception.
9532
9533 2006-12-01  Marek Safar  <marek.safar@gmail.com>
9534
9535         A fix for bug #80108
9536         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
9537         compatible.
9538
9539 2006-11-30  Marek Safar  <marek.safar@gmail.com>
9540
9541         Fixes unary operators implementation (part I)
9542         Also fixes #80026
9543
9544         * cfold.cs (Error_CompileTimeOverflow): Made internal
9545
9546         * const.cs (IConstant): Changed to use reference to constant and
9547         not constant itself.
9548         Updated IConstant implementations.
9549
9550         * constant.cs (CreateConstant): New factory method.
9551         Updated IConstant implementation.
9552
9553         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
9554
9555         * ecore.cs: Updated to use CreateConstantReference.
9556
9557         * enum.cs: Reflects IConstant changes.
9558
9559         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
9560
9561         * literal.cs (NullConstant): Change to be independently usable.
9562
9563 2006-11-29  Martin Baulig  <martin@ximian.com>
9564
9565         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
9566         we need to emit the scope initializer before calling the base .ctor.
9567
9568         * anonymous.cs: Merged back from the new anonymous methods branch.
9569         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
9570
9571         * expression.cs (ParameterReference.DoResolveBase): Create a
9572         "normal" ScopeInfo when capturing parameters rather than using the
9573         root scope; this makes things work with anonymous methods having
9574         parameters.
9575
9576         * statement.cs
9577         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
9578
9579 2006-11-22  Marek Safar  <marek.safar@gmail.com>
9580
9581         A fix for bug #79987
9582         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
9583         check to a base class.
9584         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
9585         only when assembly has missing attribute.
9586         * report.cs: Update.
9587
9588 2006-11-21  Marek Safar  <marek.safar@gmail.com>
9589
9590         * cs-tokenizer.cs: Merged with gmcs version.
9591
9592 2006-11-20  Marek Safar  <marek.safar@gmail.com>
9593
9594         * cs-tokenizer.cs,
9595         * cs-parser.jay: Better error message when partial keyword is misplaced.
9596
9597 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
9598
9599         A fix for bug #79810
9600         report.cs: CS1058 only applies to 2.0 profile (gmcs).
9601         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
9602         a RuntimeWrappedException by default.
9603
9604 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9605
9606         A fix for bug #79843
9607         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
9608         implementation.
9609         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
9610
9611 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9612
9613         * driver.cs, namespace.cs: Uses faster IndexOf version.
9614
9615 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9616
9617         A fix for bug #79941
9618         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9619         operators.
9620         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9621         even if internal name is different.
9622         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9623         (UserDefinedConversion): Simplified as the operators cannot be internal.
9624         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9625         conversions.
9626         (MethodLookup): Replaced EmitContext with parentType.
9627         * expression.cs: Updated.
9628
9629 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9630
9631         * driver.cs (BadAssembly): Handle all the ugliness of
9632         DefineDynamicAssembly.
9633
9634 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9635
9636         Address parts of #58244 -- most of what's left is in the runtime
9637         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9638         CS1509 error checks, and handle them for all assembly loads, not
9639         just the first invocation.
9640         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9641         * codegen.cs (AssemblyClass.AddModule): ... here.
9642
9643 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9644
9645         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9646         IEnumerable<T> is ambiguous.
9647
9648 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9649
9650         A fix for bug #67689
9651         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9652         GetEnumerator is ambiguous.
9653
9654         * report.cs: Add new warning.
9655
9656 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9657
9658         A fix for bug #78602
9659         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9660         to protected member can be nested type.
9661
9662 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9663
9664         A fix for bug #78965
9665         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9666         to protected member must derive from current type.
9667
9668 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9669
9670         assign.cs: Reuses error method.
9671
9672         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9673         instead of type for constants.
9674         (Expression.Error_ValueAssignment): Common error method.
9675
9676         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9677         for any assignment.
9678
9679 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9680
9681         A fix for bug #79081
9682         * expression.cs (MemberAccess.DoResolve): Check nested type
9683         accessibility.
9684
9685 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9686
9687         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9688
9689 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9690
9691         A fix for bug #76591
9692         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9693
9694 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9695
9696         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9697         type forwarder of the same type multiple times.
9698
9699 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9700
9701         Fix #78820
9702         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9703         instance as an rvalue, even when we later resolve as an lvalue.
9704
9705 2006-10-25  Martin Baulig  <martin@ximian.com>
9706
9707         * anonymous.cs: Fix #79673.
9708
9709 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9710
9711         A fix for bug #79666
9712         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9713         ignored when is optimized (= default value) as its value is already set.
9714
9715 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9716
9717         A fix for bug #79724
9718         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9719         TypeContainer for type lookup.
9720
9721 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9722
9723         A fix for bug #79231
9724         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9725         * expression.cs (OverloadResolve): Always convert type name for
9726         an error message.
9727         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9728         other member.
9729
9730 2006-10-18  Martin Baulig <martin@ximian.com>
9731
9732         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9733
9734 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9735
9736         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9737         an int32, but requesting an int64 from the conversion
9738
9739 2006-10-12  Martin Baulig  <martin@ximian.com>
9740
9741         * anonymous.cs
9742         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9743         
9744 2006-10-12  Martin Baulig  <martin@ximian.com>
9745
9746         * statement.cs
9747         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9748
9749 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9750
9751         * convert.cs: Remove broken code: I was doing the "Existance"
9752         tests for Implicit conversions.
9753
9754 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9755
9756         * convert.cs: Added one missing case in
9757         ImplicitStandardConversionExists uint64 to intptr.
9758
9759         Fixes #59800
9760         
9761         * typemanager.cs (uintptr_type): another core known type.   
9762
9763         * ecore.cs (OperatorCast): routine used to do cast operations that
9764         depend on op_Explicit.  We could change some of the Decimal
9765         conversions to use this.
9766
9767         This one has a probe mechanism that checks both types for an op_
9768         which it coudl be used to eliminate two classes: CastToDecimal
9769         and CastFromDecimal.
9770
9771         * convert.cs: Implement the conversions documented in #59800
9772         
9773 2006-10-10  Martin Baulig  <martin@ximian.com>
9774
9775         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9776         before RootScope.ResolveMembers().
9777
9778         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9779         `CurrentType' if appropriate.
9780
9781 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9782
9783         A fix for bug #78568
9784         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9785         when contains binary operators.
9786         * cs-parser.jay: Updated.
9787
9788 2006-10-09  Martin Baulig  <martin@ximian.com>
9789
9790         * delegate.cs
9791         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9792         moved that into Define() and also do the other type parameter
9793         checks there.  Fixes #79094.  Added gtest-292.cs.
9794
9795         * expression.cs
9796         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9797         since that doesn't include type parameters; don't use `Ldelema'
9798         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9799
9800 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9801
9802         A fix for #77796
9803         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9804         conversion is allowed.
9805
9806 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9807
9808         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9809         error reporting when no error occurs.
9810
9811 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9812
9813         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9814         does not exist.
9815
9816 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9817
9818         Fix #79584
9819         * class.cs (DefineTypeBuilder): Check circular dependencies before
9820         setting the parent of the TypeBuilder.
9821         (CheckRecursiveDefinition): Don't use 'BaseType', since
9822         it may not be valid until after DefineTypeBuilder.  Use
9823         'base_type' instead.
9824
9825 2006-10-04  Martin Baulig  <martin@ximian.com>
9826
9827         Merged the Anonymous Methods patch.
9828
9829         * anonymous.cs, iterators.cs: The new anonymous methods code.
9830
9831         * statement.cs (Variable): New public abstract class.
9832         (LocalInfo.Variable): New public property.
9833         (LocalInfo.ResolveVariable): New public method.
9834         (Block.Flags): Add `IsIterator'.
9835         (Block.AddVariable): Improved the CS0136 check.
9836         (Block.AnonymousChildren): New public property.
9837         (Block.AddAnonymousChild): New public method.
9838         (ToplevelBlock): Update to use the new anonymous method framework.
9839         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9840         `ToplevelBlock'; this is required to correctly implement the
9841         CS0136 check.
9842         (Fixed, Using): Use `TemporaryVariable' instead of directly
9843         creating the `LocalBuilder'.
9844
9845         * parameter.cs (Parameter.ResolveVariable): New public method.
9846         (Parameters.ResolveVariable): Likewise.
9847
9848         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9849
9850         * class.cs (TypeContainer): Replaced the `iterators' list and
9851         corresponding methods with a list of `CompilerGeneratedClass'es.
9852         (TypeContainer.ResolveMembers): New public method.
9853         (Method): `IIteratorContainer' has been replaced by
9854         `IAnonymousHost'.
9855
9856         * expression.cs (VariableReference): New public abstract base
9857         class for `LocalVariableReference', `ParameterReference' and
9858         `This'.
9859
9860         * codegen.cs (EmitContext): Removed `capture_context',
9861         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9862         (EmitContext.EmitThis): Removed.
9863
9864         * cs-parser.jay: Replace `iterator_container' with
9865         `anonymous_host'.       
9866
9867 2006-10-04  Martin Baulig  <martin@ximian.com>
9868
9869         * generic.cs (GenericMethod): Don't make this abstract.
9870         (Constraints.Clone): Added dummy implementation.
9871
9872 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9873
9874         Fix #79577
9875         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9876         'declspaces'.  Avoid allocating arrays willy-nilly.
9877
9878         Fix #79553
9879         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9880         cases out of the switch.
9881
9882 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9883
9884         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9885         message when non-generic type is used with the type arguments.
9886         * expression.cs: Updated.
9887
9888 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9889
9890         Fix #79013
9891         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9892         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9893         Change semantics slightly.  Don't insist on having only one
9894         temporary EmptyExpression -- just throttle the creation of new ones.
9895
9896         Fix #79451
9897         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9898         non-interfaces too.  If no methods are found, don't try to create
9899         a MethodGroupExpr.
9900
9901 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9902
9903         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9904         generic type.
9905
9906         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9907         us produce better error message.
9908
9909 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9910
9911         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9912         of the `|' operator.
9913
9914         * report.cs: A new warning added.
9915
9916 2006-09-27  Martin Baulig  <martin@ximian.com>
9917
9918         * generic.cs (GenericMethod): Don't make this abstract.
9919
9920 2006-09-27  Martin Baulig  <martin@ximian.com>
9921
9922         * report.cs
9923         (InternalErrorException): Added overloaded ctor taking a params array.
9924
9925 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9926
9927         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9928         Fixed the cases when same error was reported twice.
9929
9930         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9931         now report symbol information.
9932
9933 2006-09-25  Martin Baulig  <martin@ximian.com>
9934
9935         * class.cs: Completely unified with the gmcs version.
9936
9937 2006-09-25  Martin Baulig  <martin@ximian.com>
9938
9939         * typemanager.cs (TypeManager.IsNullableType): New public function.
9940         (TypeManager.IsNullableTypeOf): Likewise.
9941         (TypeManager.IsNullableValueType): Likewise.
9942
9943         * class.cs (MethodCore): Added the `GenericMethod' argument from
9944         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9945
9946 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9947
9948         * convert.cs: Unify with gmcs version.
9949
9950 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9951
9952         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9953         verify them as well.
9954
9955         * report.cs: New warning.
9956
9957 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9958
9959         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9960         for anonymous block with out argument.
9961
9962 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9963
9964         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9965         not used private events only.
9966
9967 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9968
9969         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9970
9971         * const.cs (Const.Define): Check for constant type.
9972         (Const.IsConstantTypeValid): Looks for valid constant types.
9973
9974         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9975
9976         * ecore.cs (EmptyConstantCast): New common class for all constant based
9977         EmptyCast(s).
9978
9979         * expression.cs (Is.DoResolve): Handle null constant especially.
9980         (New.DoResolve): Check for new void().
9981         (MemberAccess.DoResolve): Cope with all kind of nulls.
9982
9983         * literal.cs (NullConstant): Uses EmptyConstantCast.
9984         (NullDefault): Based on EmptyConstantCast.
9985         (NullLiteral): Uses EmptyConstantCast.
9986
9987         * statement.cs (Block.ResolveMeta): Check for constant type.
9988
9989 2006-09-22  Martin Baulig  <martin@ximian.com>
9990
9991         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9992
9993 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9994
9995         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9996         not the null type.
9997
9998         Fix part of #79451
9999         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
10000         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
10001         code slightly.
10002
10003 2006-09-22  Martin Baulig  <martin@ximian.com>
10004
10005         * ecore.cs: Merged with the gmcs version.
10006
10007         * generic.cs (ConstructedType): New dummy class.
10008         (TypeArguments): Don't make this abstract.
10009
10010         * typemanager.cs
10011         (TypeManager.IsGenericTypeDefinition): New method.
10012         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
10013
10014 2006-09-22  Raja R Harinath  <rharinath@novell.com>
10015
10016         * expression.cs (ComposedCast): Check for arrays of TypedReference
10017         before creating the type, not after.
10018
10019 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
10020
10021         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
10022         after ToType change.
10023
10024         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
10025         when constant must be implicitly convertible.
10026
10027         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
10028
10029         * ecore.cs (NullCast): Derives from NullConstant.
10030
10031         * expression.cs (Is.DoResolve): Removed useless variables.
10032         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
10033         (New.Constantify): Add enum support.
10034         (MemberAccess.DoResolve): Add warning when accessing null constant or
10035         variable.
10036
10037         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
10038         property.
10039
10040         * literal.cs (NullConstant): New abstract class with common
10041         functionality for all null specializations.
10042         (NullDefault): Represents default(X) when result can be
10043         reduced to null.
10044         (NullLiteral): Updated.
10045
10046         * report.cs: Add new warning.
10047
10048 2006-09-21  Martin Baulig  <martin@ximian.com>
10049
10050         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
10051
10052 2006-09-21  Martin Baulig  <martin@ximian.com>
10053
10054         * generic.cs (GenericConstraints): New dummy class.
10055         (Constraints): Likewise.
10056         (TypeParameter): Likewise.
10057         (TypeParameterName): Likewise.
10058         (GenericMethod): Likewise.
10059
10060         * typemanager.cs (TypeManager.GetGenericArguments): New method.
10061
10062         * decl.cs: Merged with the gmcs version.
10063
10064 2006-09-21  Raja R Harinath  <rharinath@novell.com>
10065
10066         * generic.cs (TypeParameter): Implement IMemberContainer.
10067         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
10068
10069         * rootcontext.cs: Unify with gmcs version.
10070
10071         * report.cs: Unify with gmcs version.
10072         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
10073         from gmcs/generics.cs.
10074         * generics.cs (TypeParameter): New dummy class.
10075
10076         * support.cs: Unify with gmcs version.
10077
10078 2006-09-20  Raja R Harinath  <rharinath@novell.com>
10079
10080         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
10081         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
10082
10083         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
10084         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
10085         * mcs.exe.sources: Add generic.cs.
10086
10087         * codegen.cs: Unify with gmcs version.
10088
10089         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
10090         (EmitContext): Add GenericDeclContainer implementation.
10091         * decl.cs (MemberCore, DeclSpace): Likewise.
10092         * namespace.cs: Remove #ifdef GMCS_SOURCE.
10093
10094         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
10095         MCS TypeManager has a corresponding dummy method.
10096
10097 2006-09-19  Martin Baulig  <martin@ximian.com>
10098
10099         * expression.cs: Completely merged with the gmcs version.
10100
10101 2006-09-19  Martin Baulig  <martin@ximian.com>
10102
10103         * expression.cs (Invocation): Merged with the gmcs version.
10104         (ArrayAccess.GetStoreOpcode): Likewise.
10105
10106 2006-09-19  Martin Baulig  <martin@ximian.com>
10107
10108         * typemanager.cs
10109         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
10110         (TypeManager.IsGenericMethodDefinition): Likewise.
10111
10112 2006-09-19  Martin Baulig  <martin@ximian.com>
10113
10114         * typemanager.cs
10115         (TypeManager.IsEqual): Moved the gmcs implementation here.
10116         (TypeManager.DropGenericTypeArguments): Likewise.
10117         (TypeManager.DropGenericMethodArguments): Likewise.
10118         (TypeManager.GetTypeArguments): Moved here from gmcs.
10119         (TypeManager.HasGenericArguments): Likewise.
10120
10121 2006-09-19  Martin Baulig  <martin@ximian.com>
10122
10123         * expression.cs (Binary): Merged with the gmcs version.
10124
10125 2006-09-19  Martin Baulig  <martin@ximian.com>
10126
10127         * expression.cs (Probe, As, Is): Merged with the gmcs version.
10128
10129 2006-09-19  Martin Baulig  <martin@ximian.com>
10130
10131         * typemanager.cs: Merged with the gmcs version.
10132
10133 2006-09-16  Raja R Harinath  <rharinath@novell.com>
10134
10135         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
10136         * driver.cs: Likewise.
10137
10138 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
10139
10140         A fix for #79401
10141         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
10142         only if parent type is class.
10143         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
10144         update.
10145
10146 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
10147
10148         * cs-parser.jay,
10149         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
10150         keywords are used.
10151         * typemanager.cs(CSharpName): Converts NullType to null.
10152
10153 2006-09-15  Martin Baulig  <martin@ximian.com>
10154
10155         * typemanager.cs
10156         (TypeManager.GetMethodName): Added mcs implementation.
10157         (TypeManager.IsEqual): Likewise.
10158
10159         * ecore.cs
10160         (SimpleName.RemoveGenericArity): Added dummy implementation.
10161
10162         * pending.cs: Merged with the gmcs version.     
10163
10164 2006-09-15  Martin Baulig  <martin@ximian.com>
10165
10166         * statement.cs: Merge with the gmcs version.
10167
10168 2006-09-15  Martin Baulig  <martin@ximian.com>
10169
10170         * statement.cs (Switch): Merge with the gmcs implementation
10171         (without nullables), which is newer.
10172
10173 2006-09-15  Martin Baulig  <martin@ximian.com>
10174
10175         * statement.cs (Block.Variables): Make this public.
10176         (ToplevelBlock.Parameters): Make this a property.
10177         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
10178
10179 2006-09-15  Martin Baulig  <martin@ximian.com>
10180
10181         * namespace.cs: Merge with the gmcs version.
10182
10183 2006-09-15  Martin Baulig  <martin@ximian.com>
10184
10185         * decl.cs (MemberName): Minor code cleanups.
10186
10187 2006-09-15  Martin Baulig  <martin@ximian.com>
10188
10189         * parameter.cs: Merge with the gmcs version.
10190
10191 2006-09-15  Martin Baulig  <martin@ximian.com>
10192
10193         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
10194         and an error in mcs.
10195
10196 2006-09-15  Martin Baulig  <martin@ximian.com>
10197
10198         * flowanalysis.cs: Merged from GMCS; added the generics code into
10199         a `GMCS_SOURCE' conditional so we can share this file.
10200
10201 2006-09-08  Martin Baulig  <martin@ximian.com>
10202
10203         * typemanager.cs (TypeManager.interlocked_type): New public field.
10204         (TypeManager.int_interlocked_compare-exchange): New public field.
10205         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
10206         enumerator types here and call InitGenericCoreTypes().
10207         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
10208         after calling InitEnumUnderlyingTypes().
10209
10210         * rootcontext.cs
10211         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
10212         `classes_second_stage'. 
10213
10214 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
10215
10216         * assign.cs, ecore.cs, expression.cs: Share error message text.
10217         * class.cs (FieldMember.Define): Check for varible of static type.
10218         * driver.cs (LoadAssembly): Uses error output for errors.
10219         * statement.cs: Updated.
10220
10221 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
10222
10223         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
10224         type instance.
10225
10226 2006-09-07  Martin Baulig  <martin@ximian.com>
10227
10228         * driver.cs
10229         (MainDriver): Revert r62663 from Marek; see #70506 for details.
10230
10231 2006-08-29  Miguel de Icaza  <miguel@novell.com>
10232
10233         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
10234         
10235 2006-08-17  Miguel de Icaza  <miguel@novell.com>
10236
10237         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
10238         #52019 and #79064, the use of the \uXXXX sequence in source code
10239         to represent unicode characters.
10240
10241 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
10242
10243         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
10244         support.
10245         * class.cs, ecore.cs, statement.cs: Merged to one error message.
10246
10247 2006-08-13  Miguel de Icaza  <miguel@novell.com>
10248
10249         * assign.cs: Catch attempts to assign to a method groups in += and
10250         report as 1656
10251
10252 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
10253
10254         A fix for #79056
10255         * cs-parser.jay: Don't destroy current array type by typeof of array's.
10256
10257 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
10258
10259         * class.cs (Method.Define): Issue a warning when generic method looks like
10260         an entry point.
10261         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
10262         as well.
10263
10264 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
10265  
10266         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
10267         looking for ctor.
10268         * decl.cs (MemberCache.FindMembers): When container is interface we need to
10269         search all base interfaces as a member can be ambiguous.
10270         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
10271         Constructor member type filter. 
10272         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
10273         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
10274         reporting for returned memberinfos.
10275         * report.cs: Updated.
10276         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
10277         version to work on all runtimes.
10278         (TypeManager.RealMemberLookup): Removed members filtering.
10279
10280 2006-08-08  Raja R Harinath  <rharinath@novell.com>
10281
10282         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
10283         (PropertyExpr.EmitAssign): Likewise.
10284         * expression.cs (Indirection.EmitAssign): Likewise.
10285         (LocalVariableReference.EmitAssign): Likewise.
10286         (ParameterReference.EmitAssign): Likewise.
10287         (Invocation.EmitArguments): Likewise.
10288         (ArrayAccess.EmitAssign): Likewise.
10289         (IndexerAccess.EmitAssign): Likewise.
10290         (This.EmitAssign): Likewise.
10291         (ConditionalLogicalOperator.Emit): Likewise.
10292
10293         Fix #79026
10294         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
10295         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
10296         leave it in after returning it.
10297         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
10298
10299 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
10300
10301         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
10302         message.
10303
10304 2006-08-03  Raja R Harinath  <rharinath@novell.com>
10305
10306         Fix cs0146-3.cs and cs0146-4.cs.
10307         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
10308         enclosing types don't depend on the current type.
10309
10310 2006-08-02  Raja R Harinath  <rharinath@novell.com>
10311
10312         Fix #77963
10313         * class.cs (TypeContainer.DoDefineMembers): Use
10314         FindBaseMemberWithSameName on Parent, since we're interested in
10315         whether we hide inherited members or not.
10316         (FindBaseMemberWithSameName): Make slightly more robust.
10317
10318         Fix the non-generic testcase from #77396
10319         * decl.cs (DeclSpace.DeclContainer): Remove override.
10320
10321         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
10322         declspaces for doppelgangers too.
10323         (UsingEntry): Implement IResolveContext.
10324         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
10325         'this' as the resolve context.
10326         (LocalAliasEntry): Likewise.
10327
10328         Implement parts of #77403
10329         * roottypes.cs (RootDeclSpace): New.  Used to represent the
10330         toplevel declaration space.  Each namespace declaration introduces
10331         a "partial" root declaretion space.
10332         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
10333         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
10334         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
10335         from 'current_namespace.SlaveDeclSpace'.
10336         (namespace_declaration): Likewise.
10337         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
10338         check.  It can't happen now.
10339         * decl.cs (DeclSpace.LookupType): Likewise.
10340         * driver.cs (MainDriver): Sanity check.
10341
10342 2006-08-01  Raja R Harinath  <rharinath@novell.com>
10343
10344         * decl.cs (DeclSpace.FindNestedType): Remove.
10345         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
10346         LookupTypeContainer to get the container of the nested type.
10347         * class.cs (TypeContainer.FindNestedType): Make non-override.
10348
10349 2006-07-31  Raja R Harinath  <rharinath@novell.com>
10350
10351         * decl.cs (DeclSpace.PartialContainer): Move field from ...
10352         * class.cs (TypeContainer.PartialContainer): ... here.
10353         (TypeContainer.AddBasesForPart): New helper.
10354         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
10355         instead.
10356         * cs-parser.jay (current_class): Convert to DeclSpace.
10357         (struct_declaration, interface_declaration, class_declaration):
10358         Use AddBasesForPart instead of .Bases directly.
10359         * const.cs, iterators.cs: Update to changes.
10360
10361 2006-07-28  Raja R Harinath  <rharinath@novell.com>
10362
10363         * class.cs (TypeContainer.AddMemberType): Rename from
10364         AddToTypeContainer.
10365         (TypeContainer.AddMember): Rename from AddToMemberContainer.
10366         (AddTypeContainer): New.  Combine AddClassOrStruct and
10367         AddInterface.
10368         (AddPartial): Update.  Add 'is_partial' argument.
10369         * roottypes.cs: Update to changes.
10370         * cs-parser.jay (push_current_class): New helper for handling
10371         current_container and current_class.
10372         (struct_declaration, interface_declaration, class_declaration):
10373         Use it.
10374
10375 2006-07-26  Raja R Harinath  <rharinath@novell.com>
10376
10377         * roottypes.cs: Rename from tree.cs.
10378
10379         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
10380         * tree.cs (Tree, ITreeDump): Remove types.
10381         * rootcontext.cs (tree, Tree): Remove fields.
10382         (root, ToplevelTypes): New.
10383         * *.cs: Update to rename.
10384
10385         * tree.cs (Tree.RecordDecl): Remove.
10386         (RootTypes.AddToTypeContainer): Record the toplevel type in its
10387         namespace here.
10388         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
10389
10390 2006-07-23  Raja R Harinath  <harinath@gmail.com>
10391
10392         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
10393         DoFlowAnalysis and OmitStructFlowAnalysis here.
10394         (ec.With): Rename from WithUnsafe and generalize.
10395         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
10396         (ec.WithFlowAnalyis): New.
10397         * ecore.cs, expression.cs, statement.cs: Update.
10398
10399 2006-07-22  Raja R Harinath  <harinath@gmail.com>
10400
10401         * statement.cs (Block.ResolveMeta): Simplify slightly.
10402
10403         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
10404         multiple boolean fields.  Convert InUnsafe, constant_check_state,
10405         check_state to flags.
10406         (CheckState, ConstantCheckState): Update.
10407         (InUnsafe): New read-only property.
10408         (FlagsHandle): Rename from CheckStateHandle and convert to handle
10409         arbitrary flags.
10410         (WithUnsafe): New helper similar to WithCheckState.
10411         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
10412         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
10413
10414 2006-07-21  Raja R Harinath  <rharinath@novell.com>
10415
10416         Make comparisons use the same IL irrespective of whether they're
10417         in a 'checked' or 'unchecked' context: one of the issues in #78899
10418         * codegen.cs (EmitContext.CheckState): Make read-only property.
10419         (EmitContext.ConstantCheckState): Likewise.
10420         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
10421         helper that implement a save/restore stack for CheckState
10422         values.  This is the only way to change check-state.
10423         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
10424         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
10425         (CheckedExpr.EmitBranchable): New forwarding method.
10426         (UnCheckedExpr): Likewise.
10427         * statement.cs (Block.ResolveMeta): Use WithCheckState.
10428         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
10429         (Checked.Resolve, checked.DoEmit): Likewise.
10430
10431 2006-07-20  Miguel de Icaza  <miguel@novell.com>
10432
10433         * anonymous.cs: Cache the resolved anonymous delegate, and return
10434         this so that the ResolveTopBlock is only triggered once, not
10435         twice.
10436
10437         Currently we trigger ResolvetopBlock twice due to a first pass of
10438         argument check compatibility, and a second pass that does the
10439         actual resolution.   
10440         
10441 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10442
10443         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
10444         modifiers.
10445         * rootcontext.cs (Reset): Add helper_classes.
10446
10447 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10448
10449         A fix for #78860
10450         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
10451         correctly.
10452
10453 2006-07-13  Miguel de Icaza  <miguel@novell.com>
10454
10455         * statement.cs (Lock): Handle expressions of type
10456         TypeManager.null_type specially.  Fixes #78770
10457
10458 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10459
10460         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
10461         to an event.
10462
10463 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10464
10465         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
10466         for accessors as well.
10467         * ecore.cs (EventExpr): Add AccessorTable.
10468
10469 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
10470
10471         A fix for #78738
10472         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
10473         for CS0122 where appropriate.
10474         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
10475         level attributes.
10476         (Filter): Assembly can be null in the case of top level attributes.
10477
10478 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
10479
10480         A fix for #78690
10481
10482         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
10483         is done at global level.
10484
10485 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10486
10487         A fix for #77002, Implemented TypeForwarder support.
10488
10489         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
10490         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
10491         * typemanager.cs (): Add type_forwarder_attr_type.
10492
10493 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10494
10495         * report.cs: Add CS0469 warning.
10496
10497 2006-06-21  Martin Baulig  <martin@ximian.com>
10498
10499         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
10500         the `try'-block, so we also report CS0016 etc. there.
10501
10502 2006-06-21  Martin Baulig  <martin@ximian.com>
10503
10504         * delegate.cs
10505         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
10506
10507 2006-06-21  Martin Baulig  <martin@ximian.com>
10508
10509         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
10510         also report CS1686 for parameters.
10511
10512 2006-06-21  Martin Baulig  <martin@ximian.com>
10513
10514         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
10515         instead of an error if the value is not implicitly convertible to
10516         the switch types; fixes #77964.
10517
10518 2006-06-21  Raja R Harinath  <rharinath@novell.com>
10519
10520         Fix #78673
10521         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
10522         FieldBuilder is null.
10523
10524         Fix #78662
10525         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
10526         'left' and 'right' before error-checking.
10527
10528 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
10529
10530         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
10531         Fixed bug #78601.
10532         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
10533         (FieldExpr.DoResolve): likewise.
10534         (PropertyExpr.InstanceResolve): likewise.
10535         (EventExpr.InstanceResolve): likewise. 
10536
10537 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
10538
10539         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
10540         attribute applicable tests for attribute argument.
10541
10542 2006-06-02  Raja R Harinath  <rharinath@novell.com>
10543
10544         Fix #78079
10545         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
10546         (Binary.OverloadResolve_PredefinedIntegral): New.
10547         (Binary.OverloadResolve_PredefinedFloating): New.
10548         (Binary.OverloadResolve_PredefinedString): New.
10549         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
10550         Follow the standard more closely, and treat numeric promotions in
10551         terms of overload resolution.
10552         (Binary.CheckShiftArguments): Simplify.
10553
10554 2006-06-01  Raja R Harinath  <rharinath@novell.com>
10555
10556         * flowanalysis.cs (MyBitVector): Simplify representation.
10557         (MyBitVector.Clone): Avoid allocating BitArray.
10558         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
10559         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
10560         (*): Update.  Change all references to MyBitVector.And and
10561         MyBitVector.Or to &= and |=.
10562
10563 2006-05-29  Raja R Harinath  <rharinath@novell.com>
10564
10565         Fix cs0231-[34].cs.
10566         * cs-parser.jay (formal_parameter_list): Extend the pattern below
10567         to param arguments too.
10568
10569 2006-05-26  Miguel de Icaza  <miguel@novell.com>
10570
10571         * cs-parser.jay: Catch another parsing form for arglist being
10572         followed by other arguments.  Fixes #78313.
10573
10574 2006-05-24  Raja R Harinath  <rharinath@novell.com>
10575
10576         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
10577         checking of out parameters to ...
10578         (FlowBranchingToplevel.Merge): ... here.
10579         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
10580         set, propagate the origin upward, and only complain if there was
10581         no other error.
10582         (FlowBranchingException.AddContinueOrigin): Likewise.
10583         (FlowBranchingException.AddReturnOrigin): Likewise.
10584         (FlowBranchingException.AddGotoOrigin): Likewise.       
10585
10586 2006-05-23  Raja R Harinath  <rharinath@novell.com>
10587
10588         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
10589         unreachable, skip it.
10590         (FlowBranchingException.Merge): Always propagate jumps, even if
10591         the finally block renders subsequent code unreachable.
10592
10593 2006-05-18  Raja R Harinath  <rharinath@novell.com>
10594
10595         Fix #77601
10596         * statement.cs (Goto.Resolve): Move responsibility for resolving
10597         'goto' to FlowBranching.AddGotoOrigin.
10598         (Goto.SetResolvedTarget): New.  Callback to set the
10599         LabeledStatement that's the target of the goto.
10600         (Goto.DoEmit): Use Leave instead of Br when crossing an
10601         unwind-protect boundary.
10602         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
10603         LookupLabel and adjust to new semantics.
10604         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
10605         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
10606         Goto.SetResolvedTarget to update target.
10607         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
10608         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
10609         AddBreakOrigin & co.  Delay propagation until ...
10610         (FlowBranchingException.Merge): ... this.
10611
10612         * statement.cs (Block.Resolve): Always depend on flow-branching to
10613         determine unreachability.  Kill workaround that originally emitted
10614         only one statement after an "unreachable" label (see infloop in
10615         test-515.cs).
10616
10617         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10618         This is still "wrong", but anything better would probably need a
10619         multi-pass algorithm.
10620         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10621         usage vector.  Force current usage vector to be reachable, to
10622         optimistically signify backward jumps.
10623         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10624         detected.
10625         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10626         detected, return the original salted-away usage vector instead,
10627         updated with appropriate changes.  Print unreachable warning if
10628         necessary.
10629         * statement.cs (Block.Resolve): Don't print unreachable warning on
10630         a labeled statement.
10631
10632 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10633
10634         * driver.cs: Pass filename without path to AssemblyBuilder's 
10635         AddResourceFile. Fixes bug #78407.
10636
10637 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10638
10639         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10640         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10641         (FlowBranching.MergeChild): Overwrite
10642         reachability information from Labeled branchings too.
10643
10644 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10645
10646         * statement.cs (Goto.Resolve): Merge jump origins here ...
10647         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10648
10649         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10650         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10651         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10652         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10653         here, ...
10654         * statement.cs (Goto.Resolve): ... not here.
10655         (Goto.Emit): Remove CS1632 check.
10656
10657 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10658
10659         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10660         error message.
10661
10662 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10663
10664         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10665         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10666         (FlowBranchingException.Label): Likewise.
10667
10668         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10669         given value.
10670         (MyBitVector.Or): Use it to avoid losing information (Count).
10671         (FlowBranching.MergeOrigins): Likewise.
10672
10673         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10674         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10675         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10676         (UsageVector.ToString): Simplify.
10677         (UsageVector.MergeSiblings): Move here from ...
10678         (FlowBranching.Merge): ... here.
10679         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10680         not a MyBitVector.
10681
10682 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10683
10684         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10685         null bitvector is treated as all-true.
10686
10687         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10688         (MyBitVector): Rationalize invariants.  'vector != null' implies
10689         that we have our own copy of the bitvector.  Otherwise,
10690         'InheritsFrom == null' implies all inherited bits are true.
10691
10692 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10693
10694         * statement.cs (LocalInfo): Add IsConstant.
10695         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10696         local variable for constants.
10697
10698 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10699
10700         * flowanalysis.cs (MyBitVector.Empty): New.
10701         (MyBitVector): Don't allow InheritedFrom to be null.
10702         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10703         (UsageVector, FlowBranching): Update to changes.
10704
10705         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10706         recursion.  The 'Parent == null' condition isn't sufficient for
10707         anonymous methods.
10708         (FlowBranching.AddBreakOrigin): Likewise.
10709         (FlowBranching.AddContinueOrigin): Likewise.
10710         (FlowBranching.AddReturnOrigin): Likewise.
10711         (FlowBranching.StealFinallyClauses): Likewise.
10712         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10713         (FlowBranching.CheckOutParameters): Likewise.
10714         (FlowBranchingToplevel): Terminate all the above recursions here.
10715         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10716         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10717
10718         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10719         toplevel block.
10720         (FlowBranchingToplevel): New.  Empty for now.
10721         (FlowBranching.MergeTopBlock): Update.
10722         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10723         branching for the anonymous delegate.
10724         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10725
10726         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10727         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10728         information at the start of the merge.  Reorganize.
10729
10730 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10731
10732         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10733
10734 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10735
10736         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10737         to newly introduced ctor.
10738
10739         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10740         message to one place.
10741         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10742         global namespace.
10743
10744 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10745
10746         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10747
10748         * ecore.cs (Expression.ResolveAsConstant): Updated.
10749
10750         * statement.cs (ResolveMeta): Updated.
10751
10752 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10753
10754         * cs-parser.jay: __arglist cannot be used in initializer.
10755
10756 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10757
10758         A fix for #77879
10759         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10760         private types.
10761
10762 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10763
10764         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10765         (LabeledStatement): Add 'name' parameter.
10766         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10767         (Block.AddLabel): Update to changes.
10768         * cs-parser.jay (labeled_statement): Likewise.
10769
10770         * flowanalysis.cs (BranchingType.Labeled): New.
10771         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10772         (FlowBranchingLabeled): New.  Does nothing for now, but will
10773         eventually handle 'goto' flows.
10774         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10775         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10776         that's terminated ...
10777         (Block.Resolve): ... here.
10778
10779         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10780         (UsageVector.MergeFinallyOrigins): Likewise.
10781         (FlowBranching.InTryOrCatch): Likewise.
10782         (FlowBranching.AddFinallyVector): Likewise.
10783         (FlowBranchingException): Update to changes.
10784
10785         Fix #78290
10786         * statement.cs (Return.Resolve): Move error checking to ...
10787         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10788         (FlowBranchingException): Handle return origins like break and
10789         continue origins.
10790         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10791
10792 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10793
10794         A fix for #76122
10795         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10796         filter.
10797
10798 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10799
10800         A fix for #77543
10801         * class.cs (MethodData.Define): Do public accessor check only when method
10802         implements an interface.
10803
10804 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10805
10806         Remove special handling of 'break'
10807         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10808         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10809         (UsageVector.Break): Remove.
10810         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10811         reachability.
10812         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10813
10814         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10815         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10816
10817 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10818
10819         A fix for #75726
10820         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10821         be the interface member.
10822
10823 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10824
10825         A fix for #60069
10826         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10827         for emitting small (int) values.
10828
10829 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10830
10831         Fix #59427
10832         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10833         control-flow passes through the 'finally' after merging-in all the
10834         control-flows from 'try' and the 'catch' clauses.
10835
10836         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10837         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10838         always true at the only non-recursive entry point.
10839         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10840         FlowBranchingBreakable.
10841         (FlowBranchingLoop): Remove.
10842         * statement.cs (Return.DoResolve): Update to changes.
10843
10844         Fix #76471, #76665
10845         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10846         (FlowBranching.CreateBranching): Handle it: create a
10847         FlowBranchingContinuable.
10848         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10849         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10850         except that it handles the 'continue' command.
10851         (FlowBranching.UsageVector.MergeOrigins): Rename from
10852         MergeBreakOrigins.
10853         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10854         except that it overrides AddContinueOrigin.
10855         (FlowBranchingException): Override AddContinueOrigin, similar to
10856         AddBreakOrigin.
10857         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10858         Create a new branching around the embedded statement.
10859         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10860         control flow after the embedded statement.
10861         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10862
10863         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10864         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10865         FlowBranchingBreakable.
10866         (FlowBranchingSwitch): Remove.
10867
10868         Fix test-503.cs
10869         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10870         error reporting to ...
10871         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10872         Rename from 'AddBreakVector'.  Add new location argument.  Return
10873         a bool indicating whether the 'break' crosses an unwind-protect.
10874         (FlowBranchingException.AddBreakOrigin): Add.
10875         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10876         flowbranching after updating with the effects of the 'finally'
10877         clause.
10878         (FlowBranchingBreakable): New common base class for
10879         FlowBranchingLoop and FlowBranchingSwitch.
10880
10881         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10882         embedded statement.
10883         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10884
10885 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10886
10887         * statement.cs (Do.Resolve): If the loop is infinite, set the
10888         barrier.
10889         (While.Resolve, For.Resolve): Set a barrier after the embedded
10890         statement.  There's no direct control flow that goes from the end
10891         of the embedded statement to the end of the loop.
10892         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10893         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10894         above ensure that the reachability is correctly computed.
10895
10896         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10897         (UsageVector.MergeBreakOrigins): If the current path is
10898         unreachable, treat it as if all parameters/locals are initialized.
10899         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10900         infinite loops before merging-in break origins.
10901
10902         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10903         (Reachability.Reachable): Split part into ...
10904         (Reachability.Unreachable): ... this.  Simplify.
10905         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10906
10907         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10908         (Reachability.SetThrowsSometimes): Likewise.
10909         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10910         TriState.Always, use corresponding property.
10911         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10912         (Block.Resolve): Likewise.  Remove some redundant checks.
10913
10914 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10915
10916         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10917         (Reachability.Meet): Don't bother checking AlwaysThrows --
10918         barrier is always set.
10919         (FlowBranchingBlock.Merge): Likewise.
10920
10921 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10922
10923         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10924         checks for unreachable.
10925
10926 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10927
10928         A fix for #77980
10929         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10930
10931         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10932         whether field is really assigned.
10933
10934 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10935
10936         * flowanalysis.cs (Reachability): Make 4-argument constructor
10937         private.
10938         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10939         (Reachability.Always): Rename from the highly misleading
10940         'Reachability.Never'.
10941         (FlowBranching.Merge): Update to changes.  Mark an impossible
10942         situation with a 'throw'.
10943         (*): Update to changes.
10944
10945 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10946
10947         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10948         Remove 'Undefined'.
10949         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10950         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10951         (*): Update to changes.
10952         * statement.cs: Update to changes.
10953
10954 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10955
10956         A fix for #78049
10957         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10958
10959 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10960
10961         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10962         dummy UsageVector.
10963
10964         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10965         argument to two arguments: an usage-vector and a bool.  Move call
10966         to FlowBranching.Merge () ...
10967         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10968
10969         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10970         handling of loop and switch reachability to ...
10971         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10972
10973 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10974
10975         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10976         handling to FlowBranchingLoop.InLoop.
10977         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10978
10979 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10980
10981         A fix for #78115
10982         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10983         anonymous method is allowed from AnonymousContainer here.
10984
10985         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10986
10987 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10988
10989         Fix #78156
10990         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10991
10992 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10993
10994         A fix for #49011.
10995         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10996         (DoubleConstant.Reduce): Ditto.
10997
10998 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10999
11000         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
11001         Remove 'lvalue_right_side' argument.  Move parts to ...
11002         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
11003         (LocalVariable.DoResolveLValue): ... these.
11004
11005 2006-04-21  Raja R Harinath  <rharinath@novell.com>
11006
11007         Fix cs1655.cs
11008         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
11009         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
11010         (LocalVariableReference.DoResolveBase): Use it to implement new
11011         CS1655 check.
11012         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
11013         (Argument.Resolve): Simplify.  Move CS1510 check ...
11014         * ecore.cs (Expression.ResolveLValue): ... here.
11015         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
11016         (PropertyExpr.DoResolveLValue): Likewise.
11017         (FieldExpr.Report_AssignToReadonly): Likewise.
11018         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
11019         LValueMemberAccess or LValueMemberOutAccess on instance depending
11020         on it.
11021         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
11022         DoResolve as appropriate.
11023
11024 2006-04-20  Raja R Harinath  <rharinath@novell.com>
11025
11026         Fix #75800
11027         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
11028         implicit conversions on 'out' and 'ref' arguments.
11029
11030         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
11031         improve clarity.  Remove dead code.
11032
11033         Fix #66031
11034         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
11035         (Catch.Resolve): Resolve VarBlock if it exists.
11036
11037 2006-04-19  Miguel de Icaza  <miguel@novell.com>
11038
11039         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
11040         twice, this was some residual code, the enumerator was emitted
11041         properly in the two branche of if later.
11042
11043 2006-04-19  Raja R Harinath  <rharinath@novell.com>
11044
11045         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
11046         cast is never an lvalue.
11047         (Cast.DoResolve, Cast.ResolveRest): Combine.
11048         (Argument.Emit): Simplify slightly.  Move 'Expr is
11049         IMemoryLocation' check ...
11050         (Argument.Resolve): ... here.
11051         (Argument.Error_LValueRequired): Remove.  Inline into only user.
11052
11053         Simplifications.  Fix cs0191-2.cs
11054         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
11055         CS1649 and CS1651 to ...
11056         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
11057         the actual selection of the error code and message to a lookup
11058         table.  Add a dummy return value to simplify callsites.
11059         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
11060         readonly fields of other instances of the same type.  Move CS0197
11061         warning from ...
11062         * expression.cs (Argument.Resolve): ... here.  Simplify code.
11063         Ensure that ec.InRefOutArgumentResolving is only set during LValue
11064         resolution of an out or ref argument.  The code simplification
11065         above uses this invariant.
11066
11067 2006-04-18  Raja R Harinath  <rharinath@novell.com>
11068
11069         Possibly fix #77752.  Fix cs1690-[4-7].cs.
11070         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
11071         CheckMarshallByRefAccess.  Drop parameter.
11072         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
11073         warning.
11074         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
11075         InstanceExpression.
11076         * report.cs (AllWarnings): Add CS1690.
11077         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
11078         for ref access too.
11079         (LocalVariableReference.DoResolveBase): Update.
11080
11081 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
11082
11083         * class.cs (MethodOrOperator): Moved common parts from method class.
11084         detect obsolete attributes.
11085         (Method.Define): Simplified as it reuses code from base.
11086         (Constructor.ValidAttributeTargets): Fixed issue found during
11087         refactoring.
11088         (Destructor.ValidAttributeTargets): Fixed issue found during
11089         refactoring.
11090         (Operator): Finished refactoring set off by #78020. Operator class is now
11091         ordinary method class.
11092
11093         * anonymous.cs: Updated.
11094
11095         * decl.cs (DeclSpace): Add IsGeneric
11096
11097 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
11098
11099         * class.cs (Constructor.Emit): Don't emit the attributes twice.
11100
11101 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
11102
11103         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
11104         detect obsolete attributes.
11105         (Method.CreateEmitContext): Moved to MethodOrOperator.
11106
11107 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
11108
11109         A fix for #78048.
11110         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
11111         customized exception to make crash detection easier.
11112         (MethodOrOperator): Started to work on new base class for methods and
11113         operators.
11114         (Method): Derives from MethodOrOperator.
11115         (Constructor.Emit): Emits its own attributes.
11116         (AbstractPropertyEventMethod.Emit): Ditto.
11117         (Operator): Derives from MethodOrOperator, will refactor fully in extra
11118         patch.
11119         (Operator.Emit): It's temporary more tricky than should be.
11120         
11121         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
11122
11123         * report.cs (InternalErrorException): Add ctor with inner exception.
11124
11125 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
11126
11127         A fix for #76744.
11128         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
11129         only not visible.
11130
11131 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
11132
11133         A fix for #77916.
11134         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
11135         array.
11136
11137 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
11138
11139         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
11140         attribute is present and Guid not.
11141         (Interface.ApplyAttributeBuilder): Ditto.
11142
11143         * attribute.cs: Add error message.
11144
11145 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
11146
11147         A fix for #78020.
11148
11149         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
11150         sources (it's composite) so hold them in extra array as they are used in
11151         Emit phase only. It worked in the previous versions by mistake.
11152         (Attribute.Emit): Emit attribute for more owners when exist.
11153
11154         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
11155         it has now different behaviour.
11156
11157 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
11158
11159         * constant.cs (Constant.IsDefaultInitializer): New method.
11160
11161         * class.cs: Updated.
11162
11163         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
11164         re-initialize default values. It saves KBs almost for every assembly.
11165         Thanks Zoltan for the idea.
11166         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
11167         (ArrayCreation.DoResolve): Resolve only once.
11168         (ArrayCreation.Emit): Emit static initializer only when it is faster.
11169         (ArrayCreation.GetAttributableValue): Cope with optimized values.
11170
11171 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
11172
11173         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
11174         From #77961.
11175
11176 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
11177
11178         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
11179         in an embedded statement too.
11180
11181 2006-04-01  Raja R Harinath  <rharinath@novell.com>
11182
11183         Fix #77958
11184         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
11185
11186 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
11187
11188         A fix for #77966.
11189
11190         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
11191         was not specified.
11192
11193         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
11194
11195 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
11196
11197         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
11198         phase.
11199
11200         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
11201         LocalTemporary change.
11202
11203         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
11204         TypeContainer.
11205         (ClassOrStruct.DefineFieldInitializers): Implemented static field
11206         initializers optimization.
11207         (ClassOrStruct.TypeAttr): Moved from modifiers.
11208         (Constructor.CheckBase): Don't crash when static ctor has parameters.
11209         (FieldBase.ResolveInitializer): Resolves initializer.
11210         (FieldBase.HasDefaultInitializer): New property.
11211
11212         * cs-parser.jay: Removed message.
11213
11214         * expression.cs (CompilerGeneratedThis): New specialization.
11215
11216         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
11217
11218 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
11219
11220         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
11221
11222 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
11223
11224         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
11225         be now EnumConstants only.
11226
11227 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
11228
11229         * attribute.cs, driver.cs: Reset more caches.
11230
11231 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11232
11233         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
11234
11235 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11236
11237         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
11238         for easier reuse. Updated all overrides.
11239         (IntegralConstant): New base class for all integral constants.
11240         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
11241         of the constant range, report custom error.
11242         (UIntConstant.Reduce): Fixed uint conversion.
11243
11244         * ecore.cs, literal.cs: Reduce updates.
11245
11246 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11247
11248         A fix for #75813.
11249
11250         * class.cs (Constructor.Define): Removed extra if for default ctors.
11251         A patch from Atsushi Enomoto.
11252
11253 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11254
11255         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
11256         GetAttributableValue.
11257
11258         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
11259         when required.
11260
11261         * convert.cs (ImplicitConversionRequired): Error message moved to
11262         DoubleLiteral.
11263
11264         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
11265         automatic implicit conversion of an output value.
11266         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
11267
11268         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
11269         conversion.
11270         (TypeOf.GetAttributableValue): Add extra handling for object type.
11271
11272         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
11273         special error message.
11274
11275 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
11276
11277         * class.cs (Constructor.Emit): Don't crash when struct ctor is
11278         InternalCall.
11279         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
11280         compatible with MS runtime.
11281
11282 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
11283
11284         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
11285         attribute arguments here.
11286
11287         * class.cs (Indexer.Define): The check was moved to attribute class.
11288
11289 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
11290
11291         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
11292         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
11293         easier.
11294
11295 2006-03-22  Raja R Harinath  <rharinath@novell.com>
11296
11297         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
11298         mcs to keep code differences small.
11299         * attribute.cs (Attribute.GetParameterDefaultValue): New.
11300         * typemanager.cs (parameter_default_value_attribute_type): New.
11301         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
11302         CS1908 check.
11303
11304 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11305
11306         * expression.cs (StringConcat.Append): Reverted back to no warning state.
11307
11308 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11309
11310         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
11311
11312         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
11313         the blocks too.
11314
11315 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
11316
11317         * doc-bootstrap.cs : fix build.
11318
11319 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11320
11321         * expression.cs (StringConcat.Append): Issue a warning when empty string
11322         is going to append.
11323
11324 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11325
11326         * assign.cs (CompoundAssign.ResolveSource): Removed.
11327
11328         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
11329         clean up.
11330
11331         * class.cs (TypeContainer.FindMethods): Removed.
11332         (TypeContainer.CheckMemberUsage): Made static.
11333
11334         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
11335
11336         * constant.cs (CheckRange): Removed unused type argument.
11337         (CheckUnsigned): Removed unused type argument.
11338
11339         * cs-parser.jay: Updated after MemberAccess clean up.
11340         Uses Length for empty string test.
11341
11342         * cs-tokenizer.cs: Uses Length for empty string test.
11343         (IsCastToken): Made static.
11344         (is_hex): Made static.
11345         (real_type_suffix): Made static.
11346
11347         * decl.cs (SetupCache): Made static.
11348         (OnGenerateDocComment): Removed unused ds argument.
11349
11350         * delegate.cs (VerifyDelegate): Removed unused argument.
11351
11352         * doc.cs: Uses Length for empty string test.
11353
11354         * driver.cs: Uses Length for empty string test.
11355
11356         * enum.cs (IsValidEnumType): Made static
11357
11358         * expression.cs (EnumLiftUp): Removed unused argument.
11359         (ResolveMethodGroup): Ditto.
11360         (BetterConversion): Ditto.
11361         (GetVarargsTypes): Ditto.
11362         (UpdateIndices): Ditto.
11363         (ValidateInitializers): Ditto.
11364         (MemberAccess.ctor): Ditto.
11365         (GetIndexersForType): Ditto.
11366
11367         * flowanalysis.cs: (MergeFinally): Removed unused argument.
11368
11369         * iterators.cs: Updated after MemberAccess clean up.
11370
11371         * location.cs: Uses Length for empty string test.
11372
11373         * namespace.cs: Uses Length for empty string test.
11374
11375          * report.cs (CheckWarningCode): Made static.
11376
11377         * statement.cs (LabeledStatement): Removed unused argument.
11378
11379         * typemanager.cs (FilterNone): Removed.
11380
11381 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11382
11383         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
11384         obsolete.
11385
11386         * class.cs: Updated.
11387
11388 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11389
11390         * cs-parser.jay.cs: __arglist is not allowed for delegates.
11391
11392 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11393
11394         A fix for #77822.
11395
11396         * expression.cs (VerifyArgumentsCompat): Reverted to double error
11397         reporting, it's more tricky than I thought.
11398
11399 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11400
11401         A fix for #77816.
11402
11403         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
11404         host container.
11405         (AnonymousMethod.ImplicitStandardConversionExists): New method.
11406         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
11407         Add more error reporting; Fixed issue with params.
11408
11409         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
11410
11411         * cs-parser.jay: AnonymousMethod requires host container.
11412
11413         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
11414
11415 2006-03-18  Raja R Harinath  <harinath@gmail.com>
11416
11417         * class.cs: Change 'TypeContainer ds' constructor argument to
11418         'DeclSpace parent'.  Some classes were missed below due to
11419         different naming convention.
11420
11421         * class.cs (MemberCore.Parent): Delete.  This makes the
11422         ParentContainer changes below enforceable by the compiler.
11423
11424         Treat pointers to enclosing declaration space as 'DeclSpace', not
11425         'TypeContainer'.
11426         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
11427         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
11428
11429         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
11430         of TypeContainer.
11431         (Block.AddThisVariable): Likewise.
11432         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
11433         (AbstractPropertyEventMethod.Emit): Likewise.
11434         (AbstractPropertyEventMethod.EmitMethod): Likewise.
11435         (GetMethod.Define, SetMethod.Define): Likewise.
11436         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
11437         (DelegateMethod.EmitMethod): Likewise.
11438
11439         Fix regression test-partial-13.cs.
11440         Rationalize use of PartialContainer.  Ensure that the partial
11441         class semantics can be tied to type-correctness, i.e., any
11442         violation will cause a compile error.
11443         * class.cs, const.cs: Access all fields that belong to class
11444         TypeContainer via ParentContainer.  Arguments of EmitContexts and
11445         Resolve()-like functions still use 'Parent'.
11446
11447         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
11448         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
11449         (PropertyMethod.CheckModifiers): Remove unused argument.
11450         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
11451         DeclSpace.
11452
11453 2006-03-17  Raja R Harinath  <harinath@gmail.com>
11454
11455         Make semantics of PartialContainer simpler.
11456         * decl.cs (DeclSpace.IsPartial): Remove.
11457         * class.cs (TypeContainer.IsPartial): Likewise.
11458         (TypeContainer..ctor): Set PartialContainer to point to self.
11459         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
11460         (TypeContainer.FindNestedType): Likewise.
11461         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
11462
11463 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
11464
11465         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
11466
11467 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11468
11469         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
11470         classes.
11471
11472 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11473
11474         * class.cs (Operator.Define): An error for base conversion was not
11475         reported correctly.
11476
11477 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
11478
11479         * iterator.cs : yield break is allowed in try statement which has
11480           catch clauses. Fixed bug #77767.
11481
11482 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
11483
11484         A fix for #77593, #77574.
11485
11486         * class.cs (MethodCore.CheckBase): Another if for operator.
11487
11488 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
11489
11490         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
11491         were not resolved
11492
11493         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
11494         (DelegateCreation.ImplicitStandardConversionExists): New method for just
11495         conversion test.
11496         
11497         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
11498         not needed.
11499
11500         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
11501         Updated after another emitcontext usage was clean up. It should help us to
11502         synchronize with gmcs easier.
11503
11504 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
11505
11506         A fix for #77353.
11507
11508         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
11509         (Event.Define): ditto
11510         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
11511
11512         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
11513         Removed redundant code and set NewSlot for Invoke method too.
11514
11515         * parameter.cs (Parameters.ctor): Add custom, type ctor.
11516         (Parameters.MergeGenerated): New method. Use this method when you merge
11517         compiler generated argument with user arguments.
11518
11519 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
11520
11521         * attribute.cs (ResolveAsTypeTerminal): Removed.
11522
11523         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
11524         specialization for predefined types; 30% speed up.
11525         Finally placed obsolete check to right place.
11526         (Expression.ResolveType): Removed.
11527
11528         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
11529         Updated after ResolveType was removed.
11530
11531         * expression.cs (Cast.ctor): Check void cast.
11532         (Binary.ResolveAsTypeTerminal): Is never type.
11533         (Conditional.ResolveAsTypeTerminal): Is never type.
11534
11535         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
11536
11537 2006-03-01  Raja R Harinath  <rharinath@novell.com>
11538
11539         Fix #77679.
11540         * expression.cs (ParameterReference.DoResolveBase): Change return
11541         type to bool.
11542         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
11543         Update.
11544
11545         Fix #77628.
11546         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
11547
11548         Fix #77642.
11549         * typemanager.cs (GetFullNameSignature): Don't nullref on
11550         protected accessors.
11551
11552 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
11553
11554         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
11555         these two separated members to simplify the code.
11556         (Attribute.Resolve): Refactored to use new fields and methods.
11557         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
11558         implemented obsolete attribute checking.
11559         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
11560         implemented obsolete checking again. It look line never ending quest ;-)
11561         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
11562
11563         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
11564
11565         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
11566
11567         *class.cs (Property.Define): Add RegisterProperty call.
11568
11569         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
11570         argument groups (only 2).
11571
11572         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
11573         encoding expression to arguments.
11574         (Expression.ExprClassToResolveFlags): Just turned to property.
11575
11576         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
11577         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
11578         optimized as well as implemented support for zero-length attributes.
11579
11580         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
11581         Add caching of PropertyInfo's.
11582
11583 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11584
11585         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
11586         error multiple times.
11587
11588 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11589
11590         New partial class implementation.
11591         A fix for #77027, #77029, #77403
11592
11593         * attribute.cs (Attributable): Made attributes protected.
11594
11595         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
11596         the replacements of ClassPart and PartialContainer.
11597         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
11598         (TypeContainer.AddInterface): Ditto.
11599         (TypeContainer.AddPartial): The main method for partial classes. It checks
11600         for errors and merges ModFlags and attributes. At the end class is added to
11601         partial_parts list.
11602         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
11603         required here.
11604         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
11605         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
11606         from the rest of partial classes.
11607         (TypeContainer.GetClassBases): Simplified.
11608         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
11609         DefineType.
11610         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
11611         (TypeContainer.HasExplicitLayout): Uses Flags now.
11612         (PartialContainer): Removed.
11613         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
11614         (StaticClass): Was merged with Class.
11615         (Class.GetClassBases): class and static class bases are verified here.
11616         (Class.TypeAttr): Added static attributes when class is static.
11617         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11618         (MemberBase): In some cases we need to call parent container for partial
11619         class. It should be eliminated but it's not easy now.
11620
11621         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11622
11623         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11624         partial classed to accumulate class comments.
11625         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11626
11627         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11628
11629         * driver.cs (MainDriver): Tree.GetDecl was removed.
11630
11631         * modifiers.cs (Modifiers): Add partial modifier.
11632
11633         * tree.cs (Tree.decl): Removed.
11634         (RootTypes): Started to use this class more often for root types
11635         specializations.
11636
11637 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11638
11639         A fix for #77615
11640
11641         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11642         external interface does not have an attribute.
11643
11644 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11645
11646         Another prerequisites for new partial classs implementation.
11647         
11648         * attribute.cs (Attribute.Equal): Implemented.
11649         (Attribute.Emit): Changed as attributes can be applied more than twice.
11650         (Attributes.Emit): Check for duplicate attributes here.
11651
11652         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11653         as a parameter, clean-up.
11654
11655 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11656
11657         A fix for #77485
11658
11659         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11660         contains obsolete attribute check which can in some cases look for base
11661         type of current class which is not initialized yet.
11662         (TypeContainer.BaseType): Replacement of ptype.
11663
11664         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11665
11666 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11667
11668         First of prerequisites for new partial classs implemention.
11669         
11670         * attribute.cs (Attributable): Extended by ResolveContext;
11671         Attributes finally have correct context for resolving in all cases.
11672         (AttachTo): Attribute owner is assigned here.
11673
11674         * codegen.cs (IResolveContext): Introduce new interface to hold
11675         all information needed in resolving phase.
11676         (EmitContext): Implements IResolveContext; more clean-up needed here.
11677         
11678         * decl.cs (MemberCore): Implemented IResolveContext.
11679
11680         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11681         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11682         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11683         Refactored to use new IResolveContext instead of EmitContext; cleanup
11684
11685 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11686
11687         * codegen.cs (EmitScopeInitFromBlock): check here the
11688         capture_context, there is no need to make two calls to the
11689         EmitContext. 
11690
11691         * anonymous.cs: Add some debugging messages that might help me
11692         track other instances of this problem in the future (the
11693         regression of test 467).
11694
11695         * cs-parser.jay: track the variable block, as we need to initalize
11696         any captured variables declared in this block for the "catch"
11697         portion of the "Try" statement.
11698
11699         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11700         scope initialization for captured variables. 
11701
11702         Also, move the emit for the variables after the block location has
11703         been marked.
11704
11705 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11706
11707         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11708
11709 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11710
11711         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11712         commit yesterday, the initialization for the roots is necessary.
11713         What is not necessary is the scope activation.
11714
11715 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11716
11717         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11718         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11719         CS0206 checks.
11720         (Argument.Resolve): Remove CS0206 checks.
11721
11722 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11723
11724         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11725         scopes for all the roots, the scopes will now be emitted when the
11726         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11727
11728         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11729         code.  This reduces a lot of existing cruft.
11730         
11731         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11732         that the ScopeInfo is generated as we enter the scope, not at the
11733         time of use, which is what we used to do before.
11734
11735         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11736         every time a Block is about to be emitted if we have a
11737         CaptureContext. 
11738
11739 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11740
11741         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11742         (Reset): Update.
11743         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11744
11745         * typemanager.cs (cons_param_array_attribute): Make private.
11746         (Reset): Set it to null.
11747         (InitCoreHelpers): Don't initialize it.
11748         (ConsParamArrayAttribute): New.  Initialize it as needed.
11749         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11750
11751 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11752
11753         * expression.cs: There might be errors reported during the
11754         selection of applicable methods.  If there are errors, do not
11755         continue execution as it will lead the compiler to crash.
11756
11757 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11758
11759         * expression.cs: Member access is not allowed on anonymous
11760         methods.  Fixes #77402.
11761
11762 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11763
11764         Fix #77401
11765         * cs-parser.jay (VariableDeclaration): Don't set
11766         current_array_type to null.
11767         (field_declaration, event_declaration, declaration_statement):
11768         Set it to null here.
11769
11770 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11771
11772         * typemanager.cs (GenericParameterPosition): New.
11773         * doc.cs: Use it.
11774
11775 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11776
11777         * doc.cs : To process "include" elements, first we should create
11778           another list than XmlNodeList, because it could result in node
11779           removal, which could result in that the XmlNodeList gives up
11780           yielding next node.
11781
11782           (Also made code identical to gmcs again.)
11783
11784 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11785
11786         * ecore.cs: Introduce an error report that we were not catching
11787         before, if not silent, we must report the error.  Gonzalo ran into
11788         it.
11789
11790 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11791
11792         A fix for bug: #76957
11793         
11794         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11795         ComputeMethodHost before creating the method, this is a new
11796         requirement. 
11797
11798         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11799         that this method references (RegisterScope).  The actual scope
11800         where the method is hosted is computed with the ComputeMethodHost
11801         before we create the method.
11802
11803         Moved the Deepest routine here.
11804
11805         (AnonymousContainer.ComputeMethodHost): New routine used to
11806         compute the proper ScopeInfo that will host the anonymous method.
11807
11808         (ScopeInfo): Deal with multiple roots.  The problem was that we
11809         did not have a unique root where all ScopeInfos could be hanged
11810         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11811         of roots.  
11812
11813         Remove AdjustMethodScope which is now computed at the end.  Remove
11814         LinkScope which did a partial link, instead link all ScopeInfos
11815         before code generation from the new "LinkScopes" routine. 
11816
11817         Simplify all the Add* routines as they no longer need to maintain
11818         the tree, they just need to record that they are using variables
11819         from a ScopeInfo.
11820
11821         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11822         routines to produce the forest of ScopeInfo trees.
11823
11824         * class.cs (TypeContainer.AppendMethod): This is just like
11825         AddMethod, but ensures that an interface implementation method
11826         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11827         methods, but at the end.
11828
11829         We use this functionality to ensure that the generated MoveNext
11830         method in the iterator class is resolved/emitted before the
11831         enumerator methods created.   
11832
11833         This is required because the MoveNext method computes the right
11834         ScopeInfo for the method.  And the other methods will eventually
11835         need to resolve and fetch information computed from the anonymous
11836         method. 
11837
11838 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11839             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11840
11841         Fix rest of #76995.
11842         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11843         the 'aliases' hash.
11844         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11845         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11846
11847 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11848
11849         Fix #76656, cs0231-2.cs.
11850         * cs-parser.jay (formal_parameter_list): Make error case catch
11851         more issues.
11852         (parenthesized_expression_0): Add CS1026 check.
11853         (invocation_expression): Remove unused { $$ = lexer.Location }.
11854
11855 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11856
11857         Fix #76824.
11858         * cs-parser.jay (statement_expression): Don't list out the
11859         individual statement-expressions.  Convert syntax error into
11860         CS0201 check.
11861
11862 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11863
11864         Fix #76874.
11865         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11866         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11867         CheckIntermediateModification.
11868         (FieldExpr.DoResolve): Add new two-argument version that
11869         allows us to resolve the InstanceExpression as an lvalue.
11870         The one-argument variant is now just a wrapper.
11871         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11872         Resolve the lhs as an lvalue if the it has a value type.
11873         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11874         from Assign.DoResolve.
11875         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11876         resolved as an lvalue.
11877         (PropertyExpr.DoResolve): Update.
11878         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11879         has a value type.  Move CS1612 check here from
11880         CheckIntermediateModification.
11881         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11882         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11883         'right_side' of a ResolveLValue on an 'out' argument.
11884         (EmptyExpression.LValueMemberAccess): New.  Used as the
11885         'right_side' of a propagated ResolveLValue on a value type.
11886         (LocalVariableReference.DoResolveBase): Recognize
11887         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11888         Add CS1654 check.
11889         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11890         EmptyExpression.Null.
11891
11892 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11893
11894         * typemanager.cs : added IsGenericParameter(). In mcs it always
11895           return false.
11896         * doc.cs : for generic parameters, use GenericParameterPosition,
11897           not FullName.
11898
11899 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11900
11901         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11902
11903 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11904
11905         This fixes the problem where we used ldfld instead of ldflda to
11906         load the "THIS" pointer on captured parameters, when THIS is a
11907         value type.  See bug #77205.
11908         
11909         * iterators.cs (CapturedThisReference.Emit): Pass false to
11910         EmitThis (we do not need the address).
11911
11912         * codegen.cs (EmitThis): it needs to know whether we need the
11913         address of `this' or not.  This is used by value types.  
11914
11915         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11916         every other call passes false.
11917
11918 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11919
11920         Fix #77221.
11921         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11922         GetOverride.
11923         * expression.cs (Invocation.OverloadResolve): Update.
11924         (Invocation.DoResolve): Avoid double resolution of invocation.
11925
11926 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11927
11928         Fix #77180.
11929         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11930         unary negation of floating point types as 0-expr; negation cannot
11931         overflow in floating point types.
11932
11933         Fix #77204.
11934         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11935         on operands of 'void' type.
11936
11937         Fix #77200.
11938         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11939         and ExclusiveOr for boolean constants too.
11940
11941 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11942
11943         Fix #75636.
11944         * expression.cs (Invocation.OverloadResolve): Replace reflected
11945         override methods with their base virtual methods, rather than
11946         skipping over them.
11947         * typemanager.cs (TypeManager.GetOverride): New.
11948
11949 2006-01-05  Jb Evain  <jbevain@gmail.com>
11950
11951         * class.cs (Property.Define, Indexer.Define): do not tag the
11952         properties as SpecialName | RTSpecialName.
11953
11954 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11955
11956         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11957         doing a low-level comparission of parameter types.  It was lacking
11958         a check for __argslist. 
11959
11960 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11961
11962         * expression.cs (ParameterReference.DoResolveBase): Allow
11963         reference parameters if they are local to this block. 
11964
11965         This allows the ref and out parameters of a delegate to be used in
11966         an anonymous method, for example:
11967
11968         delegate void set (out int x);
11969
11970         set s = delegate (out int x){
11971                 x = 0;
11972         };
11973
11974         This is used by functionality introduced late in the C# language.
11975         
11976         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11977         method that take ref and out parameters. 
11978
11979         Fixes #77119 which was a late change in the spec.
11980
11981 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11982
11983         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11984         parent if its the same scope.  Fixes #77060.
11985
11986 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11987
11988         * driver.cs: Report the case of no source files and no -out:
11989         argument provided.
11990
11991 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11992
11993         Fix #77035.
11994         * expression.cs (ComposedCast.GetSignatureForError): Define.
11995
11996 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11997
11998         Fix #76995
11999
12000         * namespace.cs (NamespaceEntry): Add extern_aliases as a
12001         ListDictionary, to contain the ExternAliasEntry entries (in
12002         addition to the NamespaceEntry.aliases hashtable). This field is
12003         shared between the original entry and its doppelganger (bodyless 
12004         copy of it).
12005         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
12006         extern_aliases field.
12007         (NamespaceEntry.Lookup): Move the IsImplicit check after the
12008         lookup in extern_aliases.
12009
12010 2005-12-16  Raja R Harinath  <rharinath@novell.com>
12011
12012         Fix #77006.
12013         * class.cs (TypeContainer.Mark_HasEquals): New.
12014         (TypeContainer.Mark_HasGetHashCode): New.
12015         (ClassPart): Override them.
12016         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
12017
12018         Fix #77008.
12019         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
12020         'parent' argument to the base constructor.
12021
12022         Remove all mention of TypeContainer from decl.cs.
12023         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
12024         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
12025         (DeclSpace.DeclSpace): Likewise.
12026         (DeclSpace.DefineMembers): Remove unused argument.
12027         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
12028         debugging check -- we don't care if the debug code throws an
12029         InvalidCastException instead of an InternalErrorException.
12030         * class.cs (TypeContainer.DefineMembers): Update to changes.
12031         (TypeContainer.DoDefineMembers): Likewise.
12032         (TypeContainer.GetMethods): Likewise.
12033         (PropertyMember.Define): Likewise.
12034         (MemberBase.Parent): New property that forwards to
12035         MemberCore.Parent, but ensures that we get a TypeContainer.
12036         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
12037         (RootContext.PopulateTypes): Likewise.  Remove special case code
12038         for !RootContext.StdLib: DefineMembers is idempotent.
12039
12040 2005-12-14  Miguel de Icaza  <miguel@novell.com>
12041
12042         * convert.cs (ExplicitConversionCore): Check the return value from
12043         ExplicitConversionCore which can return null on failure.  Fixes #76914
12044
12045 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
12046
12047         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
12048
12049 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
12050
12051         * doc.cs : The search for referenced namespace was insufficient to
12052           get global one as it used to do. Fixed bug #76965.
12053
12054 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
12055
12056         * doc.cs : check name in cref in the last phase that whether it is
12057           namespace or not.
12058
12059 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
12060
12061         * cs-tokenizer.cs : reverted the latest change: it somehow broke
12062           Mono.C5.
12063
12064 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
12065
12066         * doc.cs : so it turned out that we cannot skip override check for 
12067           interface members. Fixed bug #76954.
12068
12069 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
12070
12071         * cs-tokenizer.cs : fixed bug #75984:
12072           - #warning and #error should not be handled when the source line
12073             is disabled.
12074           - #line is not checked strictly when the source line is disabled.
12075           - #define and #undef is on the other hand checked strictly at any
12076             state.
12077
12078 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
12079
12080         * cs-tokenizer.cs : missing Location (actually, filename) in one of
12081           CS1027 report.
12082
12083 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
12084
12085         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
12086
12087         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
12088         event initializers.
12089         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
12090         (FieldBase.Initializer): Initializer is now optional.
12091         (EventField.Define): Only event field can have initializer.
12092
12093         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
12094
12095         * const.cs (Const): Reuse initializer.
12096
12097         * cs-parser.jay: Updated after FieldBase changes.
12098         Added current_array_type to simplify array initializers.
12099
12100         * ecore.cs (NullCast.IsDefaultValue): Implemented.
12101
12102         * expression.cs, iterators.cs: Updated.
12103
12104         * namespace.cs (NamespaceEntry): Made UsingFound private.
12105
12106 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
12107
12108         * parameterCollection.cs: Obsolete, removed.
12109         * parser.cs: Obsolete, removed.
12110
12111 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
12112
12113         Fix #76849.
12114         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
12115
12116         * enum.cs (Enum.Define): Set obsolete context here.
12117
12118 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
12119
12120         * doc.cs :
12121           - FindDocumentedMember() now expects 1) paramList as null
12122             when "we don't have to check the number of parameters" and
12123             2) Type.EmptyTypes when "there is no arguments".
12124           - Introduced FoundMember struct to hold the exact type which was
12125             used to find the documented member (the above change broke
12126             test-xml-044; it might be better just to use DeclaringType than
12127             what MS does, like this change does, but it depends on usage.)
12128
12129 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
12130
12131         * doc.cs : documented member might be from DeclaringType for nested
12132           types. Fixed bug #76782.
12133
12134 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
12135
12136         * anonymous.cs: Have the param code handle leaving copies on the
12137         stack etc. Allows anonymous params to take part in the assignment
12138         code (++, +=, etc). Fixes bug #76550
12139
12140         * expression.cs: Handle the prepare_for_load/leave_copy by passing
12141         it down to the anon code.
12142
12143         * iterators.cs: Use dummy var here
12144
12145         * codegen.cs: Handle new vars
12146
12147 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
12148
12149         Fix #76849.
12150         * class.cs (MethodData.Define): Set proper Obsolete context.
12151
12152         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
12153         obsolete context.
12154         (FieldExpr.DoResolve): Ditto.
12155
12156 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
12157
12158         Fix #76849.
12159         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
12160         parent is not obsolete.
12161
12162 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
12163
12164         * doc.cs : (FindDocumentedMember) find parameterless members first
12165           and get CS0419 in the early stage. Fixed first case of bug #76727.
12166
12167 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
12168
12169         Fix #76859.
12170         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
12171         no error was reported.
12172
12173         *expression.cs (Binary.DoResolve): left can be null.
12174
12175 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
12176
12177         Fix #76783.
12178         * class.cs (MethodData.Emit): Parameters should be labeled first.
12179
12180 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
12181
12182         Fix #76761.
12183         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
12184
12185 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
12186
12187         * attribute.cs (AreParametersCompliant): Moved to Parameter.
12188
12189         * class.cs (MethodCore): Parameter clean up.
12190         (IMethodData): Added ParameterInfo.
12191         (MethodData): Parameter clean up.
12192         (Indexer.Define): Parameter clean up.
12193
12194         * anonymous.cs,
12195         * codegen.cs,
12196         * cs-parser.jay,
12197         * decl.cs,
12198         * doc.cs,
12199         * ecore.cs,
12200         * flowanalysis.cs,
12201         * iterators.cs,
12202         * pending.cs,
12203         * statement.cs,
12204         * typemanager.cs: Parameter clean up.
12205
12206         * delegate.cs (Define): Get rid of duplicated code.
12207
12208         * expression.cs (ParameterReference): Removed useless parameters
12209         and simplified.
12210         (Invocation): Ditto.
12211
12212         * parameter.cs (ParamsParameter): New class, params specialization.
12213         (ArglistParameter): Attemp to separate arglist.
12214         (Parameter): Refactored to be reusable and faster.
12215         (Parameter.Modifier): Made understandable.
12216         (Parameters): Changed to be used as a class for `this' assembly
12217         parameters. Refactored to use new specialized classes.
12218
12219         * support.cs (ParameterData): Added Types property.
12220         (InternalParameters): Deleted.
12221
12222 2005-08-20  Martin Baulig  <martin@ximian.com>
12223
12224         Merging this patch from GMCS to fix #75867.
12225
12226         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12227         scope if we don't already have it.
12228
12229 2005-11-17  Martin Baulig  <martin@ximian.com>
12230
12231         * anonymous.cs
12232         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
12233         inherit the scope from our parent.  Fixes #76653.
12234
12235 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12236
12237         * doc.cs : the previous patch does not actually fix the bug.
12238           PropertyInfo override check is now implemented and really fixed it.
12239         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
12240
12241 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12242
12243         * doc.cs : apply "override filter" also to properties.
12244           Fixed bug #76730.
12245
12246 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12247
12248         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
12249           no need to check overrides. For classes, omit those results from 
12250           interfaces since they must exist in the class. Fixed bug #76726.
12251
12252 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12253
12254         * typemanager.cs : (GetFullNameSignature) differentiate indexers
12255           with different parameters. Fixed the second problem in #76685.
12256
12257 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12258
12259         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
12260           get expected 'protected' access in CheckValidFamilyAccess()).
12261           Fixed bug #76692.
12262
12263 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12264
12265         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
12266           Fixed bug #76705.  CS1569 was incorrectly commented out.
12267
12268 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
12269
12270         * doc.cs : use Invocation.IsOverride() to do real override check.
12271         * expression.cs : made Invocation.IsOverride() internal.
12272
12273 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
12274
12275         * doc.cs : use TypeManager.FindMembers() instead of (possible)
12276           TypeBuilder.FindMembers() and filter overriden base members out.
12277           Fixed bug #76990.
12278
12279 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12280
12281         * doc.cs : ref/out parameters are represented as '@' (instead of
12282           '&' in type FullName). Fixed bug #76630 (additionally crefs).
12283
12284 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12285
12286         * doc.cs : when there was no '.' in cref to methods in doc comment,
12287           then parameters were missing in the output. Fixed bug #76691.
12288
12289 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12290
12291         * driver.cs : don't output docs when there is an error.
12292           Fixed bug #76693.
12293
12294 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12295
12296         * doc.cs :
12297           Now it should detect indexers. Fixed primary concern in bug #76685.
12298           Fixed CS0419 message to not show the identical member signature in
12299           the message.
12300
12301 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12302
12303         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
12304           instead of Type.FindMembers() since it does not handle events.
12305           Fixed bug #71604.
12306
12307 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
12308
12309         * codegen.cs: Fixed typo (speficied -> specified).
12310
12311 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12312
12313         Fix #76369.
12314         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
12315
12316 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12317
12318         * attribute.cs: Changed error message.
12319
12320         * cs-tokenizer.cs: One more check.
12321
12322 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12323
12324         * statement.cs (Block.Resolve): Ignore empty statement.
12325
12326 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12327
12328         * report.cs: Made error/warning methods more strict to avoid
12329         their misuse.
12330
12331         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
12332         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
12333         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
12334         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
12335
12336 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
12337
12338         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
12339         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
12340
12341         * class.cs (TypeContainer.IsComImport): New property.
12342         (Constructor.Define): Create proper ctor for ComImport types.
12343
12344         * expression.cs (New.CheckComImport): Fixed.
12345
12346 2005-11-07  Miguel de Icaza  <miguel@novell.com>
12347
12348         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
12349         that a parameter has been captured does not mean that we do not
12350         have to do the rest of the processing.  This fixes the second part
12351         of #76592.  If there was another anonymous method capturing
12352         values in the past, the Scope would never be set for the second
12353         method that captured the same parameter.
12354
12355         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
12356         properly manipulate the stack.   Second part of fix for #76592.
12357
12358         * expression.cs (New): Add support for invoking "new" on
12359         interfaces that have been flagged with the ComImport attribute and
12360         the CoClass.  Fixes #76637 
12361
12362         * statement.cs (Try.DoEmit): When a variable is captured, do not
12363         try to emit the vi.LocalBuilder variable as it has been captured.
12364         Create a temporary variable and store the results on the
12365         FieldBuilder.  Fixes #76642
12366
12367 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
12368
12369         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
12370
12371         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
12372
12373         * expression.cs (Binary.DoResolve): Added && optimalization.
12374     
12375         * typemanager.cs (AddUserType): Removed useless argument.
12376
12377 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
12378
12379         * statement.cs (Block.variables): Uses ListDictionary.
12380
12381 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12382
12383         Fix #75969.
12384         * class.cs (PartialContainer.EmitType): Customized to emit
12385         security attributes.
12386         (ClassPart.ApplyAttributeBuilder): Transform security attribute
12387         for partial classes.
12388
12389 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12390
12391         Fix #76599.
12392         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
12393         access has to be fixed.
12394         
12395         * typemanager.cs (IsUnmanagedType): Wrong common field type.
12396
12397 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
12398
12399         Fix #76590.
12400         * ecore.cs (NullCast.Reduce): Implemented.
12401
12402         * expression.cs (ArrayCreation.CheckIndices): Correcly check
12403         constant type.
12404         
12405         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
12406         properly.
12407         (Foreach.Resolve): Catch null properly.
12408
12409 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12410  
12411         * cs-tokenizer.cs: Warning text fix.
12412
12413         * driver.cs: AllWarningNumbers exposed on public interface.
12414
12415         * report.cs (): Reviewed warning numbers.
12416         (IsValidWarning): Use binary search.
12417
12418 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12419  
12420         * driver.cs: Implemeted resource visibility.
12421         (Resources): New class for code sharing between /res: and
12422         /linkres:
12423  
12424 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
12425
12426         Fix #76568.
12427         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
12428         folding.
12429         
12430         * convert (Convert.ImplicitReferenceConversion): NullCast holds
12431         contants only.
12432         
12433         * ecore.cs (NullCast): Child is contant only.
12434         
12435         * literal.cs (NullLiteral.Reduce): null can be converted to any
12436         reference type.
12437
12438 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
12439
12440         * driver.cs: Use Encoding.Default as default code page instead
12441           of ISO-28591.
12442
12443 2005-10-27  Raja R Harinath  <rharinath@novell.com>
12444
12445         Fix #76085.
12446         * expression.cs (Invocation.Error_InvalidArguments): Handle
12447         __arglist parameters.
12448         (Invocation.VerifyArgumentsCompat): Likewise.
12449         * support.cs (ReflectionParameters.GetSignatureForError): Print
12450         __arglist parameters.
12451         (InternalParamters.GetSignatureForError): Likewise.
12452         * parameter.cs (Parameters.GetSignatureForError): Likewise.
12453
12454 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
12455
12456         * attribute.cs (GetPropertyValue): Made public.
12457
12458         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
12459         Resolve.
12460         Add new property WrapNonExceptionThrows to handle 2.0 assembly
12461         attribute.
12462         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
12463         is not defined.
12464         
12465         * driver.cs: Reflect method name change.
12466         
12467         * statement.cs (Try.Resolve): Warn when try has both general
12468         exception handlers.
12469         
12470         * typemanager.cs: runtime_compatibility_attr_type new predefined
12471         type.
12472
12473 2005-10-26  Raja R Harinath  <harinath@gmail.com>
12474
12475         Fix #76419.
12476         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
12477         treat it as an empty parameter list.
12478
12479 2005-10-26  Raja R Harinath  <rharinath@novell.com>
12480
12481         Fix #76271.     
12482         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
12483         ResolveAsTypeStep silent.
12484         * statement.cs (Block.AddConstant): Mark block as used.
12485         (Block.ResolveMeta): Avoid piling on error messages
12486         if a constant initializer resolution fails.
12487
12488 2005-10-25  Raja R Harinath  <rharinath@novell.com>
12489
12490         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
12491         Remove.
12492         (NamespaceEntry.VerifyAllUsing): New.
12493         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
12494         behaviour.  Delegates actual resolution of alias to ...
12495         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
12496         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
12497         Update.
12498         * driver.cs (Driver.MainDriver): Update.
12499         
12500         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
12501         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
12502         property.
12503         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
12504         Remove.
12505         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
12506         RootNamespace.DefineNamespacesForAll.
12507
12508 2005-10-24  Raja R Harinath  <harinath@gmail.com>
12509
12510         * typemanager.cs (assemblies, external_aliases, modules)
12511         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
12512         (ComputeNamespaces, GetRootNamespace): Remove extra staging
12513         overhead.  Move resposibility ...
12514         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
12515         * driver.cs, attribute.cs, codegen.cs: Update to changes.
12516
12517 2005-10-23  Raja R Harinath  <harinath@gmail.com>
12518
12519         * namespace.cs (RootNamespace.all_namespaces): Renamed from
12520         cached_namespaces.  Improve usage.
12521         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
12522         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
12523         Move from GlobalRootNamespace and simplify.
12524         (RootNamespace.Global): Make instance variable.
12525         (RootNamespace.RootNamespace): Add "alias name" parameter.
12526         (GlobalRootNamespace): Simplify drastically.
12527         (Namespace.Lookup): Don't use GetNamespace.
12528         * typemanager.cs (GetRootNamespace): Rename from
12529         ComputeNamespaceForAlias.
12530         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
12531
12532 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12533
12534         * anonymous.cs (AnonymousContainer): Don't crash when container
12535         doesn't exist.
12536
12537 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12538
12539         * expression.cs (Binary.DoResolve): Warn when comparing same
12540         values.
12541
12542 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12543
12544         Fix #76486.
12545         * expression.cs (Binary.DoResolve): It looks like there are no
12546         convetsion rules in enum context.
12547
12548 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
12549
12550         Add support for extern alias qualifiers.
12551         * typemanager.cs: Move some LookupTypeReflection code
12552         to namespace.cs, to have cleaner code. Added some methods
12553         to help us keep track of the extern aliased references.
12554         * driver.cs: Add suport for extern alias assemblies on command
12555         line and check for their warnings/errors. Also keep track of the
12556         extern aliased assemblies.
12557         * namespace.cs: Move the global functionality of Namespace
12558         to GlobalRootNamespace/RootNamespace. Now the global namespace
12559         is GlobalRootNamespace.Globa. Also the code moved from 
12560         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
12561         Finally added LocalAliasEntry (AliasEntry before) and
12562         ExternAliasEntry, to handle alias statements.
12563         * cs-parser.jay: Add support in the grammar for extern alias
12564         statement.
12565         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
12566         Update callings to Namespace (now in GlobalRootNamespace).
12567
12568 2005-10-18  Raja R Harinath  <rharinath@novell.com>
12569
12570         Fix #76371.
12571         * class.cs (TypeContainer.DefineType): Move updating of
12572         topological sort earlier in the code.
12573         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
12574
12575 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
12576
12577         Fix #76273.
12578         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
12579         
12580         * constant.cs (Constant.TryReduce): Moved from Cast class.
12581         (Reduce): Made little bit more OO and fixed missing conversions.
12582         
12583         * ecore.cs (Reduce): Implemented.
12584         (Binary.EnumLiftUp): New method to upgrade values to enum values.
12585         
12586         * literal.cs (Reduce): Implemented.
12587         
12588         * class.cs: Reverted Miguel's wrong commit.
12589
12590 2005-10-14  Miguel de Icaza  <miguel@novell.com>
12591
12592         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
12593
12594 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
12595
12596         * cs-parser.jay, expression.cs : CS0214 was missing error location
12597           for constants. Fixed bug #76404.
12598
12599 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
12600
12601         Fix #76370.
12602         * convert.cs (ExplicitConversionCore): Fixed object->enum
12603         conversion.
12604
12605 2005-10-10  Raja R Harinath  <rharinath@novell.com>
12606
12607         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
12608         InstanceExpression.
12609         (PropertyExpr.EmitCall): Likewise.
12610         * expression.cs (Invocation.EmitArguments): Handle case where
12611         arguments == null.
12612         (Invocation.EmitCall): Avoid allocating temporary variable if
12613         there are no arguments.
12614
12615 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12616
12617         Fix #76323.
12618         * convert.cs (ImplicitConversionStandard): Move conversion of
12619         void* to arbitrary pointer types ...
12620         (ExplicitConversionStandard): .. here.
12621         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12622         error to always print typenames.
12623
12624 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12625
12626         * convert.cs (GetConversionOperator): Rename from
12627         GetConversionOperators.  Move operator selection code from ...
12628         (UserDefinedConversion): ... here.
12629
12630 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12631
12632         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12633         conversion.
12634
12635 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12636
12637         * assign.cs (Assign.DoResolve): Error method changed.
12638
12639         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12640         
12641         * const.cs (ResolveValue): Reset in_transit immediately.
12642         
12643         * constant.cs: Error method changed.
12644         
12645         * convert.cs: Removed useless location parameter.
12646         (ExplicitNumericConversion): Don't do double enum check.
12647         (ExplicitConversionCore): Renamed from ExplicitConversion.
12648         (ExplicitUnsafe): Extracted from ExplicitConversion.
12649         (ExplicitConversion): Uses for error reporting.
12650         
12651         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12652         error messages.
12653         (ResolveBoolean): Uses common error method.
12654         (CastToDecimal): Get rid of ec.
12655         (CastFromDecimal): Optimized.
12656         (ConvCast): Get rid of ec.
12657         
12658         * enum.cs (ResolveValue): Reset in_transit immediately.
12659         (Emit): Return after first error.
12660         
12661         * expression.cs: Convert changes.
12662         
12663         * literal.cs: Error method changed.
12664         
12665         * statement.cs: Error method changed.
12666
12667 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12668
12669         * support.cs (SeekableStreamReader.Position): Don't error out when
12670         the requested position is just beyond the end of the current
12671         buffered data.
12672
12673 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12674
12675         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12676         try to keep in sync with the byte count of the underlying Stream.
12677         However, this limits us to a window size of 2048 characters: i.e.,
12678         the maximum lookahead of our lexer/parser can be 2048 characters.
12679
12680 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12681
12682         Fix #76255.
12683         * driver.cs: Fix compilation files with full root path.
12684
12685 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12686
12687         * report.cs (SymbolRelatedToPreviousError): Format the output so
12688         it does not use an open parenthesis that is never closed. 
12689
12690         * driver.cs: Follow coding guidelines
12691
12692 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12693
12694         Fix #72930.
12695         * const.cs (Const.ResolveValue): Check for assigning non-null
12696         value to reference type.
12697
12698 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12699
12700         * anonymous.cs: Implemented ExprClassName.
12701         
12702         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12703         delegate.
12704         
12705         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12706         check.
12707         
12708         * class.cs (StaticClass.DefineContainerMembers): Report protected
12709         members as error.
12710         
12711         * codegen.cs: if(ed) PRODUCTION.
12712         
12713         * convert.cs (Error_CannotImplicitConversion): Better error
12714         distinction.
12715         
12716         * cs-parser.jay: More error checks.
12717         
12718         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12719         
12720         * driver.cs (CSCParseOption): Enabled wrong option check.
12721         
12722         * ecore.cs (Expression.ExprClassName): Turned to property.
12723         (MemberExpr.CheckIntermediateModification): For checking boxed
12724         value types     modification.
12725         
12726         * statement.cs (Fixed.Resolve): Expression type must be
12727         convertible to fixed type.
12728         (CollectionForeach.GetEnumeratorFilter,TryType):
12729         Small refactoring for easier error checking.
12730
12731 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12732
12733         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12734         attributes.
12735         
12736         * class.cs (GeneratedBaseInitializer): New class for customization
12737         compiler generated initializers.
12738         (MemberBase.DoDefine): Check Obsolete attribute here.
12739         (FieldMember.DoDefine): Ditto.
12740         
12741         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12742         constants.
12743         
12744         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12745         (MemberCore.GetObsoleteAttribute): Removed argument.
12746         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12747         (MemberCore.CheckObsoleteType): New helper.
12748         
12749         * delegate.cs,
12750         * enum.cs,
12751         * statement.cs: Updates after MemberCore changes.
12752         
12753         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12754         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12755         
12756         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12757         obsolete attribute for compiler construct.
12758         (As.DoResolve): Cache result.
12759         
12760         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12761
12762 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12763
12764         Fix #76133.
12765         * expression.cs (This.VerifyFixed): In a value type T, the type of
12766         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12767         value type R, 'this' is treated as a value parameter.
12768
12769 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12770
12771         * statement.cs (Lock): Use the TemporaryVariable class instead of
12772         manually using local variables as those do not work when variables
12773         are captured.
12774
12775         * ecore.cs: Moved the TemporaryVariable class from being a nested
12776         class inside Foreach to be a public class that can be employed in
12777         other places. 
12778
12779 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12780
12781         * cs-parser.jay: interface_accessors replaced by
12782         accessor_declarations.
12783
12784         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12785         location.
12786         
12787         * statement.cs (GotoCase.Resolve): Convert null constant to
12788         null case.
12789         (SwitchLabel.ResolveAndReduce): Ditto.
12790         (SwitchLabel.NullStringCase): Custom null stamp.
12791         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12792         
12793         typemanager.cs (CSharpSignature): Don't skip first argument
12794         for full names.
12795
12796 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12797
12798         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12799
12800         * location.cs (InEmacs): in this mode, do not report column
12801         location as it confuses Emacs.
12802
12803 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12804
12805         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12806         expression.cs, iterators.cs, literal.cs: Store constants and
12807         literals location.
12808         
12809         * class.cs (MemberBase.ShortName): Pass location.
12810         
12811         * cs-parser.jay: Some location fixes.
12812         
12813         * ecore.cs (Expression.Location): Made virtual.
12814
12815 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12816
12817         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12818         if the underlying types are the same, otherwise we need to produce
12819         code that will do the proper cast.
12820
12821         This was exposed by Marek's constant rewrite which produced
12822         invalid code for the call site:
12823
12824         enum X : long { a }
12825         void Method (X v) {}
12826
12827         Method ((X) 5)
12828
12829         This fixes test-49.cs
12830
12831 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12832
12833         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12834           Type/Object should be allowed as well. Fixed bug #75968.
12835
12836 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12837
12838         * expression.cs : (Binary.DoResolve): when one is enum constant and
12839           another is constant 0, then return enum one *as enum type*.
12840           Fixed bug 74846.
12841
12842 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12843
12844         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12845         internal.
12846
12847         Fix #75941.
12848         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12849         flow-branching for LocalVariableReferences in case we were invoked
12850         from a MemberAccess.
12851         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12852         Carved out of ...
12853         (LocalVariableReference.DoResolveBase): ... this.
12854         (MemberAccess.Resolve): Do the check that was disabled during
12855         SimpleNameResolve.
12856
12857 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12858
12859         * class.cs :
12860           (PartialContainer.Create): check abstract/sealed/static strictly
12861           but abstract/sealed can exist only at one side. Fixed bug #75883.
12862
12863 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12864
12865         Fix #75945.
12866         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12867         specified, don't default to UnmanagedType.I4.
12868
12869 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12870
12871         * expression.cs : conditional operator should check possibly
12872           incorrect assign expression. Fixed bug #75946.
12873
12874 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12875
12876         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12877           Reverting the change. gmcs is much complex than mcs on this matter.
12878
12879 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12880
12881         * cs-tokenizer.cs : To read another token ahead of the actual 
12882           consumption, use new SavedToken and cache token instead of moving
12883           back the stream with SeekableStreamReader (it seemed problematic).
12884         * cs-parser.jay,
12885           driver.cs : Thus use StreamReader directly.
12886         * support.cs : Thus removed SeekableStreamReader.
12887
12888 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12889
12890         Fix #75934.
12891         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12892         (ScopeInfo.EmitScopeType): Use it to construct field names from
12893         names of captured locals.
12894
12895         Fix #75929.
12896         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12897         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12898         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12899         (ExplicitConversion): Remove enum cases already handled by
12900         implicit conversion.  Move implicit conversion check to the beginning.
12901         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12902         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12903         Don't treat System.Enum as a struct.
12904
12905 2005-08-30  Jb Evain  <jbevain@gmail.com>
12906
12907         * attribute.cs: handles as expression in parameters.
12908
12909 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12910
12911         Fix #75802.
12912         * class.cs (TypeContainer.VerifyClsName): Don't use a
12913         PartialContainer when verifying CLS compliance.
12914         (AbstractPropertyEventMethod): Set Parent here, ...
12915         (PropertyMethod): ... not here.
12916
12917 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12918
12919         * attribute.cs : escaped attribute name should not be allowed to be
12920           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12921
12922 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12923
12924         Fix #75927.
12925         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12926         when converting a long constant to unsigned long.
12927         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12928         detect where IsApplicable and VerifyArgumentsCompat disagree.
12929
12930 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12931         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12932
12933         Fix #75848.
12934         * class.cs (TypeContainer.CanElideInitializer): New helper.
12935         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12936         can safely emitting the initializer of a field.
12937
12938 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12939
12940         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12941           allowed inside a switch (without loop). Fixed bug #75433.
12942
12943 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12944
12945         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12946         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12947
12948 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12949
12950         * driver.cs : kinda reverting the default encoding changes (not exact 
12951           revert since I noticed that "codepage:reset" might not work fine).
12952
12953 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12954
12955         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12956           Location. Now getter and setter store location correctly.
12957           (errors/cs0111-12.cs now reports the expected location.)
12958
12959 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12960
12961         * driver.cs : Use default encoding on the environment.
12962           Removed (now that) extra parameter for SeekableStreamReader.
12963         * support.cs : (SeekableStreamReader) third .ctor() argument for
12964           StreamReader is not required (always true). preamble size could
12965           be acquired in simpler and safe way.
12966
12967 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12968
12969         * cs-parser.jay: report CS0642 at warning level 3
12970           and report CS0642 for an if else statement also
12971           fixes bug #74745. Patch by John Luke (and a bit
12972           modified by me).
12973           Removed extra CS0642 warning check for "while",
12974           "for" and "fixed".
12975         * statement.cs: In Block.Resolve(), CS0642 check
12976           is reimplemented to check a sequence of an empty
12977           statement and a block.
12978
12979           Both fix bug #66777.
12980
12981 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12982
12983         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12984         detection until I fix it.
12985         
12986         * cs-tokenizer.cs: Changed error message.
12987         
12988         * cs-parser.jay: Fixed 2 error locations.
12989         
12990         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12991         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12992         properties.
12993         
12994         * enum.cs (GetSignatureForError): Fixed.
12995         
12996         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12997         method detection.
12998         
12999         * class.cs,
13000         * typemanager.cs (RegisterProperty): Removed.
13001         
13002         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
13003
13004 2005-08-24  Raja R Harinath  <rharinath@novell.com>
13005
13006         Fix #75874.
13007         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
13008         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
13009
13010 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13011
13012         * expression.cs : tiny fix is required for not warning positive ulong.
13013           See test-441.cs.
13014
13015 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13016
13017         * expression.cs : add CS0652 check for constant and integral
13018           expression. Fixed bug #53974.
13019
13020 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13021
13022         * expression.cs : in DoNumericPromotions(), check if there is implicit
13023           conversion overload for string (to check CS0034). Fixed bug #52492.
13024
13025 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13026
13027         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
13028
13029 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13030
13031         * ecore.cs : report location when it is *not* Null.
13032
13033 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
13034
13035         * codegen.cs,
13036           ecore.cs,
13037           flowanalysis.cs,
13038           expression.cs:
13039           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
13040           correctly. Fixed bug #75721.
13041
13042 2005-08-23  Raja R Harinath  <rharinath@novell.com>
13043
13044         * support.cs (SeekableStreamReader.Position): Avoid an expensive
13045         loop that performs 'min (pos, char_count)'.
13046
13047         Fix #75862.
13048         * expression.cs (Unary.ResolveOperator): Don't discard implicit
13049         converted value in Operator.OnesComplement.
13050
13051 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
13052
13053         * anonymous.cs: If the anon method is pulled into a helper class,
13054         it needs to be `internal' not `private'. Fixes runtime behavior on
13055         msft. bug #75704
13056
13057 2005-08-20  Martin Baulig  <martin@ximian.com>
13058
13059         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
13060         scope if we don't already have it.
13061
13062         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
13063         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
13064         fixes #75867.
13065
13066 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
13067
13068         Fix #75803
13069         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
13070         is a partial class.
13071
13072 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
13073
13074         The big constants rewrite
13075         Fix #75746, #75685 and more
13076         As a side effect saved 1MB for MWF ;-)
13077         
13078         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
13079         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
13080         enum based for corlib compilation.
13081         
13082         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
13083         subtractions.
13084         
13085         * class.cs (FixedField.Define): Use ResolveAsConstant.
13086         
13087         * const.cs (IConstant): Interface constants and enums.
13088         (Const.ResolveValue): New method for constant resolvning.
13089         (ExternalConstant): Constants from imported assemblies.
13090         
13091         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
13092         conversion; like enums.
13093         (Constant.ToType): Converts this constant to different type.
13094         (Constant.Increment): Adds 1.
13095         
13096         * convert.cs (ImplicitConversionRequired): Simplified.
13097         
13098         * cs-parser.jay: Create EnumMember directly.
13099         
13100         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
13101         
13102         * doc.cs (GenerateEnumDocComment): Removed.
13103         
13104         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
13105         (ConvertIntLiteral): Removed.
13106         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
13107         
13108         * enum.cs (EnumMember): Implement IConstant.
13109         (Enum.IsValidEnumConstant): Removed.
13110         (Enum.GetNextDefaultValue): Removed.
13111         (Enum.FindMembers): Updated.
13112         (Enum.GenerateDocComment): Iterate enum members.
13113         
13114         * expression.cs (Cast.TryReduce): Handle enums correctly.
13115         (New.Constantify): Made public.
13116         (MemberAccess.DoResolve): Removed contant specific if(s).
13117         
13118         * literal.cs (NullLiteral): Implement new abstract methods.
13119         
13120         * statement.cs (GotoCase.Resolve): Use new constant methods.
13121         (SwitchLabel.ResolveAndReduce): Use new constant methods.
13122         
13123         * typemanager.cs (LookupEnum): Removed.
13124         (IsEnumType): Fixed to work with corlib.
13125         (RegisterConstant): Removed.
13126         (LookupConstant): Removed.
13127         (GetConstant): Changed to work with IConstant.
13128
13129 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
13130
13131         * location.cs : Fixed overflown (>255) column number.
13132
13133 2005-08-03  Raja R Harinath  <rharinath@novell.com>
13134
13135         First cut of the qualified-alias-member feature.
13136         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
13137         token.
13138         * cs-parser.jay (DOUBLE_COLON): New token.
13139         (namespace_or_type_name): Add rule for recognizing
13140         qualified-alias-members.
13141         (primary_expression): Likewise.
13142         (element_access): Allow QualifiedAliasMember as a possible
13143         type-bearing expression.
13144         (local_variable_type, local_variable_pointer_type): Likewise.
13145         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
13146         aliases in the current and enclosing namespace declarations.
13147         (NamespaceEntry.UsingAlias): Add CS0440 warning.
13148         * decl.cs (MemberName.is_double_colon): New.
13149         (MemberName.MemberName): Add new constructor for alias-member.
13150         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
13151         * expression.cs (QualifiedAliasMember): New expression type.
13152
13153 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
13154
13155         * location.cs : it borked when no argument was specified.
13156
13157 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
13158
13159         * location.cs : tiny ToString() format fix.
13160
13161 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
13162
13163         * statement.cs : oops, it was missing.
13164
13165 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
13166
13167         A set of fixes for precise line/column location.
13168
13169         * location.cs :
13170           "token" field now holds a file/line "delta", a line number offset 
13171           from the segment, and a column number. See also:
13172           http://lists.ximian.com/pipermail/mono-devel-list/2004-
13173           December/009508.html
13174           Removed static IsNull. Use instance IsNull property instead.
13175         * cs-tokenizer.cs :
13176           For some tokens it stores Location. For Identifier it stores
13177           LocatedToken which is a pair of string name and location.
13178           Column numbers are adjusted only at getChar().
13179         * report.cs :
13180           Use Location.ToString() for reporting (it now contains column).
13181         * cs-parser.jay :
13182           Largely modified to use LocatedToken instead of
13183           string (IDENTIFIER), and to acquire Location from some tokens.
13184         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
13185           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
13186           codegen.cs :
13187           Now MemberName holds Location. DeclSpace.ctor() receives Location
13188           as a parameter. Removed extra parameters to all derived classes.
13189           Replaced Location.IsNull() with instance property.
13190         * assign.cs, expression.cs :
13191           Added .ctor() overload that omits Location.
13192         * attribute.cs :
13193           Added "nameEscaped" flag that indicates the identifier was escaped
13194           in the source file. This fixes bug #57047.
13195
13196 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
13197
13198         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
13199         New method, looking for lo-case imported cls type.
13200
13201         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
13202         here.
13203
13204         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
13205
13206         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
13207
13208         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
13209         all_imported_types.
13210         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
13211
13212         Optimized to save 3.5 MB for SWF compilation.
13213
13214 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
13215
13216         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
13217         (PartialContainer.Create): Moved logic AddToContainer.
13218         (PartialContainer.MarkForDuplicationCheck): Shares name.
13219         
13220         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
13221         place.
13222         
13223         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
13224         initialization.
13225         (Namespace.GetSignatureForError): New method.
13226         
13227         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
13228         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
13229
13230 2005-08-01  Raja R Harinath  <rharinath@novell.com>
13231
13232         Fix #75669.
13233         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
13234         member lookup rather than qualifier_type, since qualifier_type can
13235         be null.
13236
13237 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
13238
13239         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
13240         enum member.
13241
13242 2005-07-31  Miguel de Icaza  <miguel@novell.com>
13243
13244         * statement.cs: Copy the local exception into the exception
13245         captured local.  Fixes 75674
13246
13247 2005-07-31  Raja R Harinath  <harinath@gmail.com>
13248
13249         Fix #75658.
13250         * expression.cs (Invocation.OverloadResolve): Don't report error
13251         CS1501 if error CS1502 has been reported.
13252         (New.DoResolve): Delegate CS1501 reporting to
13253         Invocation.OverloadResolve.
13254
13255         Fix #75656.
13256         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
13257         invariant-meaning-in-block property in an enclosing block if
13258         necessary.
13259
13260 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
13261
13262         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
13263         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
13264         (Switch.CheckSwitch): Just save 50kb for SWF.
13265
13266 2005-07-27  Martin Baulig  <martin@ximian.com>
13267
13268         * anonymous.cs (CaptureContext.AddField): Added
13269         `AnonymousContainer am' argument; compute its toplevel scope if
13270         it's not already computed.  Fixes #75649.
13271
13272 2005-07-26  Raja R Harinath  <rharinath@novell.com>
13273
13274         Fix #75628.
13275         * class.cs (Constructor.Emit): Reset block to null if the block
13276         resolve fails.
13277
13278 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
13279
13280         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
13281
13282 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
13283
13284         * class.cs (MethodData.Define): Check whether accessor implementing
13285         interface is public.
13286
13287         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
13288
13289 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
13290
13291         Fix #57245
13292         * namespace.cs (LookupType): Moved same type check to...
13293         
13294         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
13295         with the same name.
13296
13297 2005-07-21  Raja R Harinath  <rharinath@novell.com>
13298
13299         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
13300         already found a typebuilder.
13301         * class.cs (MethodCore.IsDuplicateImplementation): Compare
13302         MemberNames, not strings.
13303
13304         * const.cs (Error_ExpressionMustBeConst): 
13305         Rename from Error_EpressionMustBeConst.
13306         * const.cs, class.cs, statement.cd: Update.
13307
13308 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
13309
13310         Fix #65573
13311
13312         * const.cs (Const.LookupConstantValue): Report missing contant expression
13313         everytime.
13314         (Error_EpressionMustBeConstant): Only one error method.
13315
13316         * class.cs, statement.c: Updated.
13317
13318 2005-07-20  Raja R Harinath  <rharinath@novell.com>
13319
13320         * statement.cs (Block.Flags): Add back HasVarargs.
13321         (Block.flags): Make protected.
13322         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
13323
13324         * typemanager.cs (types, typecontainers, user_types): Remove.
13325         (UserTypes, TypeContainers): Likewise.
13326         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
13327         (CleanUp, Reset): Update.
13328         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
13329         (GetNestedType): Use Type.GetNestedType.
13330         (CoreLookupType): Take two arguments, the namespace and the
13331         basename of the type.  Update to use the Namespace.Lookup
13332         mechanism.
13333         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
13334         (RealMemberLookup): Use IsNestedChildOf instead of playing with
13335         string concatenation and substring matches.
13336         * class.cs, enum.cs, delegate.cs: Update to changes.
13337
13338 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
13339
13340         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
13341         Expression and made virtual.
13342
13343         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
13344         (ImplicitStandardConversionExists): Fixed `byte' typo ?
13345
13346         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
13347
13348         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
13349         error message.
13350
13351         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
13352         change.
13353
13354 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
13355
13356         Fix #57707
13357         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
13358         AssemblyCultureAttribute is not used on executable.
13359
13360         * rootcontext.cs,
13361         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
13362
13363 2005-07-16  Raja R Harinath  <rharinath@novell.com>
13364
13365         Fix #60638.
13366         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
13367         New.  Reports CS0252/CS0253.
13368         Mostly taken from preliminary patch by Duncak Mak.
13369         (Binary.DoResolveOperator): Store results of operator lookup.
13370         Use them to detect if we need to warn about unintended reference
13371         comparisons.
13372
13373 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13374
13375         Fix #72969.
13376         * namespace.cs (Namespace.Lookup): Add back location parameter.
13377         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
13378         * delegate.cs, ecore.cs, expression.cs: Update to changes.
13379
13380         * codegen.cs (EmitContext.DeclSpace): Make readonly.
13381         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
13382         (Namespace.LookupType): ... this.
13383         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
13384         of namespaces.
13385         * typemanager.cs (LookupTypeReflection): Remove buggy code that
13386         purported to handle pointers.
13387         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
13388         CoreLookupType.
13389
13390 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
13391
13392         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
13393         type as namespace.
13394
13395 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13396
13397         * namespace.cs (Namespace.Lookup): Drop location parameter.
13398         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
13399         (NamespaceEntry.Lookup): ... this.
13400         (NamespaceEntry.Error_AmbiguousTypeReference):
13401         Move here from DeclSpace.
13402         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
13403         names ...
13404         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
13405         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
13406         Move to NamespaceEntry.
13407         * delegate.cs, expression.cs: Update to changes.
13408
13409 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
13410
13411         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
13412         CheckAttributeType and refactored.
13413         (Attribute.ResolvePossibleAttributeType): Changed to reuse
13414         ResolveAsTypeTerminal error handling.
13415         (ResolveAsTypeTerminal): Introduced because of global attributes extra
13416         handling.
13417         (GetSignatureForError): Print errors in same way.
13418
13419         * class.cs,
13420         * codegen.cs: Reflect attribute GetSignatureForError change.
13421
13422         * ecore.cs,
13423         * expression.cs: Add silent parameter to ResolveAsTypeStep.
13424
13425         * namespace.cs (UsingEntry): Refactored to make fields private.
13426
13427         * assign.cs,
13428         statement.cs: Error_UnexpectedKind has extra parameter.
13429
13430 2005-07-14  Raja R Harinath  <rharinath@novell.com>
13431
13432         * ecore.cs (IAlias): Remove.
13433         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
13434         that implement the interface.
13435         * namespace.cs (Namespace): Likewise.
13436         (Namespace.declspaces): Renamed from 'defined_names'.
13437         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
13438         DeclSpace instead of an IAlias.
13439         * tree.cs (Tree.AddDecl): Update.
13440
13441 2005-07-12  Raja R Harinath  <rharinath@novell.com>
13442
13443         * statement.cs (Block.Flags); Remove HasVarargs.
13444         (Block.HasVarargs): Move to ToplevelBlock.
13445         (Block.ThisVariable, Block.AddThisVariable): Likewise.
13446         (Block.Variables): Make protected.  Initialize variable hashtable
13447         if necessary.
13448         (Block.AddVariable): Update.
13449         (Block.Resolve): Update to changes.
13450         (ToplevelBlock.HasVarargs): New boolean.
13451         (ToplevelBlock.ThisVariable): Move here from Block.
13452         (ToplevelBlock.AddThisVariable): Likewise.
13453         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
13454         * expression.cs (This.ResolveBase): Update to changes.
13455         (ArglistAccess.DoResolve): Likewise.
13456
13457 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13458
13459         Fix #75321
13460         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
13461
13462         * class.cs (TypeContainer.VerifyMembers): Distinguish between
13463         not used and not used & assigned.
13464         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
13465
13466 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13467
13468         Fix #75053
13469         * expression.cs (Is.DoResolve): null is never provided type.
13470
13471 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
13472
13473         Fix #52496
13474         * cs-parser.jay: Less strict event error rule to catch more errors.
13475
13476 2005-07-08  Martin Baulig  <martin@ximian.com>
13477
13478         Fix test-iter-10.cs - distinguish whether we `yield' in a property
13479         gettter (allowed) or setter (not allowed).
13480
13481         * class.cs (Accessor): Implement IIteratorContainer.
13482         (Accessor.Yields): New public field.
13483         (PropertyBase.PropertyMethod.Define): Handle iterators on a
13484         per-accessor basis.
13485
13486         * cs-parser.jay
13487         (get_accessor_declaration, set_accessor_declaration): Set the
13488         `yields' flag on the accessor, not the property.
13489         (property_declaration): Do the iterators check on a per-accessor
13490         basis and not for the whole property.
13491
13492 2005-07-08  Martin Baulig  <martin@ximian.com>
13493
13494         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
13495         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
13496
13497 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
13498
13499         Fix #74975
13500         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
13501         (ExtractSecurityPermissionSet): Cope with self referencing security
13502         attributes properly.
13503
13504         * driver.cs (SetOutputFile): Made public property OutputFile.
13505
13506 2005-07-07  Raja R Harinath  <rharinath@novell.com>
13507
13508         Fix #75486.
13509         * class.cs (TypeContainer.first_nonstatic_field): Rename from
13510         has_nonstatic_fields.  Make into a FieldBase pointer.
13511         (TypeContainer.AddField): Add CS0282 check.
13512         (TypeContainer.EmitType): Update.
13513
13514 2005-07-06  Miguel de Icaza  <miguel@novell.com>
13515
13516         * cs-tokenizer.cs (consume_identifier): Do not create strings to
13517         compare if they start with __.
13518
13519 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13520
13521         * statement.cs (Switch.SwitchGoverningType): Only look at
13522         UserCasts that don't need implicit standard conversions to one of
13523         the allowed switch types (Fixes test-322.cs).
13524         (LocalInfo.Resolve): Re-enable sanity-test.
13525
13526 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
13527
13528         * cs-tokenizer.cs (consume_identifier): Detect double undescores
13529         
13530         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
13531         
13532         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
13533
13534 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13535
13536         Fix #75472.
13537         * ecore.cs (SimpleName.GetSignatureForError): Add.
13538         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
13539         (MemberAccess.GetSignatureForError): Add.
13540
13541 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
13542  
13543         The big error and warning messages review.
13544         
13545         * anonymous.cs,
13546         * assign.cs,
13547         * attribute.cs,
13548         * class.cs,
13549         * codegen.cs,
13550         * convert.cs,
13551         * cs-parser.jay,
13552         * cs-tokenizer.cs,
13553         * decl.cs,
13554         * delegate.cs,
13555         * doc.cs,
13556         * driver.cs,
13557         * ecore.cs,
13558         * enum.cs,
13559         * expression.cs,
13560         * flowanalysis.cs,
13561         * iterators.cs,
13562         * literal.cs,
13563         * location.cs,
13564         * modifiers.cs,
13565         * namespace.cs,
13566         * parameter.cs,
13567         * pending.cs,
13568         * report.cs,
13569         * rootcontext.cs,
13570         * statement.cs,
13571         * support.cs,
13572         * tree.cs,
13573         * typemanager.cs: Updated.
13574         
13575         * class.cs: (MethodCore.SetYields): Moved here to share.
13576         (PropertyMethod.Define): Moved iterator setup here.
13577         
13578         * iterators.cs: Add orig_method to have full access to parent
13579         container.
13580
13581 2005-07-05  Raja R Harinath  <rharinath@novell.com>
13582
13583         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
13584         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
13585         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
13586         variable of struct type.
13587         * expression.cs (Unary.ResolveOperator): Update to change.
13588         (Indirection.VerifyFixed): Likewise.
13589         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
13590         (ParameterReference.VerifyFixed): Value parameters are fixed.
13591         (This.VerifyFixed): Treat 'this' as a value parameter.
13592         * statement.cs (LocalInfo.IsFixed): Remove.
13593
13594 2005-07-01  Martin Baulig  <martin@ximian.com>
13595
13596         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
13597         `ec.EmitThis ()' to get the correct scope.
13598
13599 2005-07-01  Martin Baulig  <martin@ximian.com>
13600
13601         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
13602         instance is a ParameterReference; fixes #75299.
13603
13604 2005-07-01  Martin Baulig  <martin@ximian.com>
13605
13606         Reverted Marek's latest patch (r46725):
13607         - it contains structural changes which are neither mentioned in
13608           the ChangeLog nor explained anywhere; for example the additional
13609           argument of EmitContext's and Iterator's .ctor's and the
13610           TypeContainer.DefineMembers() change.
13611         - structural changes like this should go in in seperate patches
13612           and not be hidden in a huge patch which just seems to affect
13613           warnings and errors.
13614           a big and hard to understand patch.
13615         - it breaks iterators and causes regressions, for instance in
13616           test-iter-03.cs.      
13617
13618 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13619
13620         Fix #75412.
13621         * expression.cs (Indexers.map): Remove.
13622         (Indexers.Append): Filter out inaccessible setters and getters.
13623         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13624
13625         Fix #75283.
13626         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13627         Refactored from ...
13628         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13629         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13630         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13631         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13632
13633 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13634
13635         Fix #75322
13636         * class.cs (FieldBase.GetInitializerExpression): One more field
13637         for backup.
13638
13639 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13640
13641         * pending.cs: Do not define a proxy if the base method is virtual,
13642         it will be picked up by the runtime (bug 75270).
13643
13644 2005-06-08  Martin Baulig  <martin@ximian.com>
13645
13646         The big Iterators rewrite :-)
13647
13648         * iterators.cs: Rewrite this to use the anonymous methods framework.
13649
13650         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13651         before the TypeContainers; see 2test-21.cs.
13652
13653         * class.cs
13654         (TypeContainer.DefineType): Don't create a new EmitContext if we
13655         already have one (this only happens if we're an Iterator).
13656         (TypeContainer.Define): Also call Define() on all our iterators.
13657         (Method.CreateEmitContext): Added support for iterators.
13658
13659         * anonymous.cs
13660         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13661         (AnonymousContainer.CreateMethodHost): Moved here from
13662         AnonymousMethod and made abstract.
13663         (AnonymousContainer.CreateScopeType): New abstract method.
13664         (AnonymousContainer.IsIterator): New public property.
13665         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13666         get the ScopeTypeBuilder rather than manually defining it here. 
13667         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13668         iterators here.
13669
13670         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13671         before RootContext.DefineTypes().
13672
13673         * codegen.cs (EmitContext.RemapToProxy): Removed.
13674         (EmitContext.CurrentAnonymousMethod): Changed type from
13675         AnonymousMethod -> AnonymousContainer.
13676         (EmitContext.ResolveTopBlock): Protect from being called twice.
13677         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13678         (EmitContext.EmitThis): Removed the iterators hacks; use the
13679         anonymous methods framework for that.
13680
13681         * statement.cs
13682         (ToplevelBlock.Container): Make this a property, not a field.
13683         (ToplevelBlock.ReParent): New public method; move the
13684         ToplevelBlock into a new container.
13685         (Foreach.TemporaryVariable): Simplify.
13686
13687 2005-06-05  Martin Baulig  <martin@ximian.com>
13688
13689         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13690         (Block.AddTemporaryVariable): New public method; creates a new
13691         `LocalInfo' for a temporary variable.
13692         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13693         variables here.
13694         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13695         non-iterator variables.
13696
13697 2005-06-05  Martin Baulig  <martin@ximian.com>
13698
13699         * statement.cs (Foreach.TemporaryVariable): Create the
13700         LocalBuilder in the Emit phase and not in Resolve since in some
13701         situations, we don't have an ILGenerator during Resolve; see
13702         2test-19.cs for an example.
13703
13704 2005-06-04  Martin Baulig  <martin@ximian.com>
13705
13706         **** Merged r45395 from GCS ****
13707
13708         The big Foreach rewrite - Part II.
13709
13710         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13711         with `PropertyInfo ienumerator_getcurrent'.
13712
13713         * codegen.cs (VariableStorage): Removed.
13714
13715         * statement.cs
13716         (Foreach): Derive from Statement, not ExceptionStatement.
13717         (Foreach.CollectionForeach): New nested class.  Moved all the code
13718         dealing with collection foreach here.
13719         (Foreach.ForeachHelperMethods): Removed.
13720         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13721
13722 2005-05-23  Martin Baulig  <martin@ximian.com>
13723
13724         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13725         don't need to.  Fix #75014.
13726
13727 2005-05-20  Martin Baulig  <martin@ximian.com>
13728
13729         Merged r44808 from GMCS.
13730
13731         * class.cs (TypeContainer.CircularDepException): Removed.
13732         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13733         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13734         (CS0146) and interface (CS0529) dependencies here.
13735
13736 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13737
13738         * expression.cs (Invocation.EmitCall): Fix initialization
13739         'this_call' to reflect current behaviour.  Fix indentation.
13740
13741         * convert.cs (FindMostEncompassedType): Add two trivial special
13742         cases (number_of_types == 0 || number_of_types == 1).
13743         (FindMostEncompasingType): Likewise.
13744
13745 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13746
13747         Some cleanups preparing for the fix of #75283.
13748         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13749         error testing.
13750         (EventExpr.InstanceResolve): Likewise.
13751         (EventExpr.DoResolve): Remove redundant checks.
13752
13753 2005-06-10  Duncan Mak  <duncan@novell.com>
13754
13755         * cs-tokenizer.cs (process_directives): New flag for controlling
13756         the processing of preprocessor directives.
13757         (x_token): After seeing a '#', return Token.NONE instead of going
13758         to handle_preprocessing_directive() when not processing
13759         directives. This avoids unnecessary processing during the token peek in
13760         is_punct().
13761
13762         This fixes #74939.
13763
13764         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13765         the existing error reporting methods instead of Report.Error.
13766
13767         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13768         after Raja's rewrite.
13769
13770 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13771
13772         * class.cs: Small fix.
13773
13774 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13775
13776         Fix #75160.
13777         * class.cs (GetPartialBases): Fix return value check of
13778         part.GetClassBases.
13779
13780 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13781
13782         Ensure that partial classes are registered in their enclosing
13783         namespace.  Initial part of fix of #75160.
13784         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13785         Register declspace with namespace here, not in
13786         DeclSpace.RecordDecl.
13787         * cs-parser.jay: Pass namespace to RecordDecl.
13788         * class.cs (PartialContainer.Create): Likewise.
13789         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13790         called.
13791         * decl.cs (Declspace.RecordDecl): Remove.
13792         * namespace.cs (NamespaceEntry.DefineName): Remove.
13793
13794 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13795
13796         * rootcontext.cs: Reset TargetExt as well.
13797
13798 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13799
13800         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13801         -langversion:ISO-1.
13802
13803 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13804
13805         Fix #75080, cs0119.cs.
13806         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13807         of ...
13808         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13809         allowing ExprClass.Type and ExprClass.Namespace for
13810         ResolveFlags.VariableOrValue.
13811         (Expression.Resolve) [1-argument variant]: Change default resolve
13812         flags based on language version.
13813         (Expression.Error_UnexpectedKind): Use a simple string array
13814         rather than an ArrayList.
13815         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13816         not ExprClass.Type.
13817         (TypeOfVoid.DoResolve): Likewise.
13818         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13819         flags argument -- it always has the same value.
13820
13821 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13822
13823         Fix #75081.
13824         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13825         Use it in the error message.
13826         * assign.cs, expression.cs, statement.cs: Update.
13827
13828 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13829
13830         Fix #75088.
13831         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13832         the "almostMatchedMember" case too.
13833         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13834         that failed the accessibility checks to 'almost_match'.
13835
13836 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13837
13838         * attribute.cs: Use internal MethodBuilder methods to set
13839         ExactSpelling and SetLastError on PInvoke methods, instead
13840         of passing them via charset.  Fixes #75060.
13841
13842 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13843
13844         * parameter.cs (Parameter): Remove TODO comment.
13845         (Parameter.DefineParameter): Remove Location parameter.
13846         (Parameters.LabelParameters): Likewise.
13847         * class.cs (Constructor.Emit): Update to change.
13848         (MethodData.Emit): Likewise.
13849         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13850         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13851
13852 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13853
13854         * parameter.cs,
13855           Removed Parameters.Location and added Parameter.Location instead.
13856           Removed Location parameter from Emit() and GetSignature().
13857         * anonymous.cs,
13858           class.cs,
13859           cs-parser.jay,
13860           delegate.cs,
13861           iterators.cs,
13862           statement.cs :
13863           Modified all related calls.
13864
13865 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13866
13867         Improve user-defined conversion handling.
13868         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13869         applicable operators.
13870         (AddConversionOperators): New.  Helper for GetConversionOperators.
13871         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13872         there is only one most encompassed/encompassing type.
13873         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13874         "applicable operator" handling.
13875         (UserConversion): Move cache here from GetConversionOperators.
13876         Directly cache the chosen operator, rather than the whole
13877         MethodGroup.
13878         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13879         case.  Allow conversion of decimal to sbyte and byte too.
13880         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13881         New static methods.  Used to avoid allocating EmptyExpressions in
13882         convert.cs.
13883
13884 2005-05-24  Duncan Mak  <duncan@novell.com>
13885
13886         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13887         another class, used in Convert.ExplicitNumericConversion.
13888         (CastToDecimal): New class, similar to above, but casts to
13889         System.Decimal, used in Convert.ImplicitNumericConversion and also
13890         in explicit convesion from double/float to decimal.
13891
13892         * convert.cs (ImplicitNumericConversion): Handle implicit
13893         conversions to System.Decimal.
13894         (ExplicitNumericConversion): handle explicit conversions to
13895         System.Decimal.
13896
13897         This fixes #68711.
13898         
13899 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13900
13901         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13902         know the type at this stage, just break through.   Fixes #75008 
13903
13904 2005-05-19  Martin Baulig  <martin@ximian.com>
13905
13906         * delegate.cs
13907         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13908         to disable error reporting.
13909
13910         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13911         here since we don't want to report an error; see the new test-336.cs.
13912
13913 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13914
13915         * statement.cs (ToplevelBlock.GetParameterReference)
13916         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13917         Move here from class Block.
13918         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13919         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13920
13921 2005-05-18  Martin Baulig  <martin@ximian.com>
13922
13923         Fix #74978.
13924
13925         * flowanalysis.cs
13926         (FlowBranching.Reachability): Add non-static public And() and Or()
13927         methods.
13928         (FlowBranchingSwitch): New class; do the `break_origins' thing
13929         like in FlowBranchingLoop.
13930         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13931         reachability, not just locals and parameters.
13932         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13933         switch; MergeBreakOrigins() now takes care of that.
13934
13935 2005-05-18  Martin Baulig  <martin@ximian.com>
13936
13937         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13938         a loop and may leave it, reset the barrier; fixes #74974.
13939
13940 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13941         
13942         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13943         is back.
13944         
13945         * cs-parser.jay: Catch more lexical errors.
13946         
13947         * report.cs: Add one more Error method.
13948         
13949         * rootcontext.cs,
13950         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13951
13952 2005-05-17  Martin Baulig  <martin@ximian.com>
13953
13954         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13955         #70970. 
13956
13957 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13958
13959         Fix test-382.cs.  Emit values of decimal constants.
13960         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13961         Carved out of ...
13962         (TypeContainer.AddField): ... this.
13963         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13964         with initializers to include 'Const's.
13965         (ClassPart.RegisterFieldForInitialization): Forward to
13966         PartialContainer.
13967         * const.cs (Const.Const): Pass initializer to base class.
13968         (Const.Define): In case of decimal constants, register them for
13969         initialization in a static constructor.
13970
13971 2005-05-14  Martin Baulig  <martin@ximian.com>
13972
13973         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13974         do not call ResolveUnreachable() on unreachable statements in
13975         here, see the comment in the source code.
13976
13977 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13978
13979         Fix #74934.
13980         * expression.cs (BinaryResolveOperator): If one of the operands of
13981         an equality comparison is 'null' and the other is a pointer type,
13982         convert the null to a NullPointer.
13983         * convert.cs (ImplicitReferenceConversion): If the expression is a
13984         NullLiteral and the target type is a pointer type, return a
13985         NullPointer instead.
13986         (ImplicitConversionStandard): Likewise.
13987
13988 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13989         
13990         * cs-parser.jay: Set readonly context based on special constructs.
13991         
13992         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13993         readonly variable error handling.
13994         
13995         * rootcontext.cs (EmitCode): Don't verify members when error
13996         occurred.
13997         
13998         * statement.cs (LocalInfo): Add reaodnly context information.
13999         (SetReadOnlyContext, GetReadOnlyContext): New methods.
14000
14001 2005-05-13  Raja R Harinath  <rharinath@novell.com>
14002
14003         * statement.cs (Block.Resolve): Revert change below.  Modify fix
14004         for #74041 to initialize 'resolved' to false only for explicit
14005         blocks.  Fixes #74873.
14006
14007 2005-05-12  Raja R Harinath  <harinath@gmail.com>
14008
14009         Fix #74920.
14010         * typemanager.cs (unmanaged_enclosing_types): New.
14011         (IsUnmanagedType): Avoid infloops by using
14012         'unmanaged_enclosing_types' to talk with recursive invocations.
14013
14014 2005-05-13  Martin Baulig  <martin@ximian.com>
14015
14016         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
14017         instance variable, not a local.  Fix #74873.
14018         (Block.ResolveUnreachable): Set it to true here.
14019
14020 2005-05-11  Duncan Mak  <duncan@novell.com>
14021
14022         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
14023         continuing to process for 'arg'.
14024         (handle_preprocessing_directive): Check the argument of the #endif
14025         directive and report error CS1025 if there are any trailing
14026         characters.
14027
14028         According to the C# spec, having even whitespace after the #endif
14029         directive is illegal; however, because we call arg.TrimEnd ()
14030         beforehand, we have the same behavior as csc, allowing whitespace
14031         after the directive.
14032
14033         Fixes #74892.
14034
14035 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
14036
14037         Fix #74863.
14038         
14039         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
14040         (Constructor.GetObsoleteAttribute): Implemented correctly.
14041
14042 2005-05-10  Martin Baulig  <martin@ximian.com>
14043
14044         * support.cs (ReflectionParameters.ParameterModifier): Use
14045         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
14046         and `ParameterAttributes.In'.  Fixes #74884.
14047
14048 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
14049
14050         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
14051         
14052         * expression.cs (Argument.GetParameterModifier): Turned to property.
14053         (Invocation.Error_InvalidArguments): Add more descriptive errors.
14054         
14055         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
14056         its C# equivalent.
14057         
14058 2005-05-09  Raja R Harinath  <rharinath@novell.com>
14059
14060         Fix #74852.
14061         * decl.cs (MemberCache.AddMethods): Register override methods,
14062         rather than non-override methods.
14063         * typemanager.cs (RegisterOverride): New.
14064         (IsOverride): Update.
14065
14066 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
14067
14068         Fix #73105.
14069         
14070         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
14071         recursive declaration.
14072         
14073         * statement.cs (Block.ResolveMeta): Report any error in resolving.
14074         
14075 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
14076
14077         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
14078         
14079         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
14080
14081 2005-05-05  Raja R Harinath  <rharinath@novell.com>
14082
14083         Fix #74797.
14084         * decl.cs (DeclSpace.FamilyAccessible): 
14085         Use TypeManager.IsNestedFamilyAccessible.
14086
14087         Fix reopened #64812.
14088         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
14089         internal'.
14090
14091 2005-05-04  Raja R Harinath  <rharinath@novell.com>
14092             Abin Thomas  <projectmonokochi@rediffmail.com>
14093             Anoob V E  <projectmonokochi@rediffmail.com>
14094             Harilal P R  <projectmonokochi@rediffmail.com>
14095
14096         Fix #64812.
14097         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
14098         allow access to all static members.
14099
14100 2005-05-04  Martin Baulig  <martin@ximian.com>
14101
14102         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
14103
14104 2005-05-04  Martin Baulig  <martin@ximian.com>
14105
14106         Fix #74655.
14107
14108         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
14109         section at the end; make things work if `default' is not the last
14110         section.        
14111
14112 2005-05-04  Martin Baulig  <martin@ximian.com>
14113
14114         Fix #70400.
14115
14116         * statement.cs (Switch): Replaced the `got_default' field with a
14117         `default_section' one.
14118         (Switch.CheckSwitch): Set `default_section' here.
14119         (Switch.Resolve): If we're a constant switch and the constant is
14120         not found, use the default section.
14121
14122 2005-05-03  Martin Baulig  <martin@ximian.com>
14123
14124         * expression.cs (ArrayAccess.EmitGetLength): New public method.
14125
14126         * statement.cs (Foreach.ArrayForeach): New nested class.
14127         (Foreach.TemporaryVariable): New nested class.
14128         (Foreach.EmitArrayForeach): Removed; this is now in the new
14129         ArrayForeach class.
14130
14131 2005-05-03  Raja R Harinath  <rharinath@novell.com>
14132
14133         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
14134         more conservative.
14135         (VerifyPendingMethods): Revert change below.
14136
14137         * typemanager.cs (IsOverride, RegisterNonOverride): New.
14138         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
14139         that used to trigger warning -28.  Remove warning -28.
14140         * expression.cs (Invocation.OverloadResolve): Use
14141         TypeManager.IsOverride to distinguish override methods.
14142
14143         Fix #74773.
14144         * pending.cs (VerifyPendingMethods): If a base type implements the
14145         requested interface, don't bother checking individual methods of
14146         the base type.  As a side-effect, this prevents the creation of
14147         unnecessary proxies.
14148
14149 2005-05-02  Martin Baulig  <martin@ximian.com>
14150
14151         Fix #70182.
14152
14153         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
14154         Also `And' the locals if the old vector is null.
14155         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
14156         null; in this case we basically reset all the variables.        
14157
14158 2005-05-02  Martin Baulig  <martin@ximian.com>
14159
14160         Fix #74529.
14161
14162         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
14163         Added `FlowBranching branching' argument; always `and' the
14164         variables instead of `or'ing them unless we're an infinite loop.
14165
14166         * statement.cs (While.Resolve): Create a new sibling unless we're
14167         infinite.       
14168
14169 2005-05-02  Martin Baulig  <martin@ximian.com>
14170
14171         Fix #70140.
14172
14173         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
14174         arguments; use it instead of creating a new TopLevelBlock.
14175         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
14176         our ConstructorInitializer.
14177
14178         * statement.cs
14179         (TopLevelBlock.TopLevelBranching): New public property.
14180         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
14181         and create our `TopLevelBranching'.
14182
14183         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
14184         anonymous method host, use `block.TopLevelBranching' rather than
14185         creating a new branching.
14186
14187 2005-04-20  Miguel de Icaza  <miguel@novell.com>
14188
14189         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
14190         a ScopeInfo, if any of the current children is a child of the new
14191         entry, move those children there.
14192
14193 2005-04-30  Martin Baulig  <martin@ximian.com>
14194
14195         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
14196         at the beginning of a SwitchSection.  Fix #73335.
14197
14198 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
14199
14200         Fix #74378
14201         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
14202         
14203         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
14204         (FieldExpr.DoResolve): Obsolete members are ignored for field
14205         initializers.
14206         
14207 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
14208
14209         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
14210         of arrays detection.
14211
14212         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
14213         verification.
14214         (Field.VerifyClsCompliance): Volatile fields are not compliant.
14215
14216         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
14217         arrays report.
14218
14219 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
14220
14221         * cs-parser.jay: Use the prefered version of -unsafe in error
14222         message.
14223
14224 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
14225
14226         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
14227         circumstances.
14228
14229 2005-04-20  John Luke  <john.luke@gmail.com>
14230
14231         * driver.cs: fix typo in error message, --outout to --output
14232
14233 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
14234
14235         * codegen.cs (InRefOutArgumentResolving): New field.
14236         
14237         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
14238         fields outside contructor.
14239         
14240         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
14241         
14242 2005-04-19  Miguel de Icaza  <miguel@novell.com>
14243
14244         * anonymous.cs (CaptureContext.EmitParameterInstance): The
14245         parameter code was not completed ever, so it was not as up-to-date
14246         as local variables.  Must finish it.
14247
14248         The bug fix was to compare the Toplevel of the block, not the
14249         current block.  Thanks for Ben for pointing this out. 
14250
14251 2005-04-19  Raja R Harinath  <rharinath@novell.com>
14252
14253         * decl.cs (AddMethods): Use the declaring type of the problem
14254         method to determine if we want to squash a warning.
14255
14256 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
14257
14258         * attribute.cs: Removed debug output.
14259
14260         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
14261         
14262         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
14263         Report.Stderr.
14264         
14265 2005-04-18  Raja R Harinath  <rharinath@novell.com>
14266
14267         Fix #74481.
14268         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
14269         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
14270         all null comparisons against reference types.
14271
14272 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
14273
14274         Fix# 74565
14275         * class.cs (TypeContainer.CircularDepException) New nested
14276         exception class.
14277         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
14278         (TypeContainer.DefineType): Removed error, reset InTransit before
14279         exit.
14280         (Class.DefineType): Throw exception when is in Transit.
14281         Catch exception and report error.
14282         (Struct.DefineType): Throw exception when is in Transit.
14283         Catch exception and report error.
14284         (Interface.DefineType): Throw exception when is in Transit.
14285         Catch exception and report error.
14286
14287         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
14288         handle nested exception handlers.
14289
14290         * flowanalysis.cs (InTryWithCatch): New method, search for try with
14291         a catch.
14292
14293         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
14294         InFinally and InCatch storage.
14295
14296         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
14297         (Catch.Resolve): Set and Restore ec.InCatch.
14298         (Try.Resolve): Set and Restore ec.InFinally.
14299         (Try.HasCatch): True when try has catch.
14300
14301 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
14302
14303         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
14304           for the same event member, so exclude such cases from warning 419.
14305           Fixed bug #74633.
14306
14307 2005-04-16  Miguel de Icaza  <miguel@novell.com>
14308
14309         * expression.cs (Binary.ResolveOperator): Apply patch from John
14310         Luke to fix bug 59864: operators &, | and ^ on enumerations
14311         require that the same enum type on both sides.
14312
14313         * driver.cs: Add warnings to old flag usage, this is to assist
14314         people who produce Makefiles and hope that the Makefiles will be
14315         used on Windows.
14316
14317         * class.cs (TypeContainer.EmitType): Moved the definition of the
14318         special $PRIVATE$ field from the resolve phase to the Emit phase.
14319         During resolve we do not know if we are a struct with
14320         HasExplicitLayout, we know this only after the attributes for the
14321         type are emitted.
14322
14323         Set the FieldOffset to zero on the dummy field that we create for
14324         the class.   Fixes 74590.
14325
14326 2005-04-16  Raja R Harinath  <rharinath@novell.com>
14327
14328         Fix #73834.
14329         * ecore.cs (PropertyExpr.resolved): New.
14330         (DoResolve): Use it to handle a case of double resolution here.
14331         Handle a case of identical-name-and-type-name.
14332         * expression.cs (ArrayCreation.CheckIndices): Avoid double
14333         resolution by storing the results of expression resolution back
14334         into the "probes" array.
14335
14336 2005-04-15  Raja R Harinath  <rharinath@novell.com>
14337
14338         Fix cs0208-7.cs and cs0208-8.cs.
14339         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
14340         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
14341         error reporting to point out the reason a struct is not unmanaged.
14342
14343 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14344
14345         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
14346           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
14347
14348 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14349
14350         Fix #74528.
14351         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
14352         IdenticalNameAndTypeName here.
14353         (EventExpr.InstanceResolve): Likewise.
14354
14355 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
14356
14357         C# 2.0 DefaultCharSetAttribute implementation
14358         
14359         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
14360         which allows us to set GlobalNamespace for every resolve.
14361         (Attribute.ResolveArguments): Cut from Resolve.
14362         (Attribute.GetCharSetValue): Returns CharSet named argument.
14363         (Attribute.DefinePInvokeMethod): Gets default charset from
14364         module settings.
14365         (GlobalAttribute.ResolveAsTypeStep): Override.
14366         (GlobalAttribute.ResolveArguments): Override.
14367         
14368         * class.cs (TypeAttr): Is protected.
14369         
14370         * codegen.cs (ModuleClass.DefaultCharSet): New member.
14371         (ModuleClass.DefaultCharSetType): New memeber.
14372         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
14373         
14374         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
14375         charset from module.
14376         
14377         * delegate.cs (TypeAttr): Override.
14378         (Delegate.DefineType): Use this TypeAttr.
14379         
14380         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
14381         at very early stage (before types are defined) to resolve model
14382         module attributes. It will probably not work with corlib but it
14383         should be ok.
14384         
14385         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
14386         charset from module.
14387         
14388         * typemanager.cs (default_charset_type): New type.
14389
14390 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14391
14392         * decl.cs (MemberCache.AddMethods): Don't warn if
14393         System.Object.Finalize has buggy MethodAttributes.
14394
14395         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
14396         removed below.
14397
14398 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14399
14400         * doc.cs : detect ambiguous reference to overloaded members.
14401           Fixed bug #71603. MS 1.1 csc does not detect it.
14402
14403 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14404
14405         * doc.cs : delegates must not be referenced with parameters.
14406           Fixed bug #71605.
14407
14408 2005-04-12  Miguel de Icaza  <miguel@novell.com>
14409
14410         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
14411
14412 2005-04-10  Miguel de Icaza  <miguel@novell.com>
14413
14414         * driver.cs (MainDriver): Stop processing if the CLS stage found
14415         errors. 
14416
14417         (CompilerCallableEntryPoint.InvokeCompiler): Always
14418         reset after execution;   Take a TextWriter argument for the
14419         output.
14420
14421         * report.cs: Use the error stream instead of hardcoding stderr. 
14422
14423 2005-04-09  Miguel de Icaza  <miguel@novell.com>
14424
14425         * class.cs: Reduce code paths to test, too small of an
14426         optimization to make it worth the extra testing.  Always perform
14427         it. 
14428
14429 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14430
14431         Fix #74510.
14432         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
14433         operators that had errors reported on them.
14434
14435 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
14436
14437         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
14438         argument types.
14439         (Attribute.Resolve): Add named argument type checking.
14440         
14441         * class.cs (FixedField.Define): Use IsPrimitiveType
14442         
14443         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
14444         
14445         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
14446         unsafe parameter types.
14447         
14448         * statement.cs (Using.ResolveExpression): Add better error description.
14449         
14450         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
14451         
14452 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14453
14454         Fix #74484.
14455         * attribute.cs (Attribute.GetAttributeUsage): Resolve
14456         AttributeUsageAttribute in the emitcontext of the attribute class,
14457         not in the emitcontext of the attributable entity it was attached to.
14458         * cs-parser.jay: Use 'current_class', not 'current_container',
14459         when creating a GlobalAttribute.
14460
14461 2005-04-08  Alp Toker  <alp@atoker.com>
14462
14463         * pending.cs: The fix to #58413 failed to compile methods implementing
14464         interfaces with/without params modifiers and vice versa, even though
14465         params modifiers aren't part of the signature. Make the modifier check
14466         less strict as in csc.
14467
14468 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
14469             Anoob V E  <projectmonokochi@rediffmail.com>
14470             Harilal P R  <projectmonokochi@rediffmail.com>
14471
14472         Fix #58413.
14473         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
14474         modifiers of pending methods.
14475         (PendingImplementation.PendingImplementation): Initialize it.
14476         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
14477         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
14478         with ParameterData.  Add check for modifiers.
14479         * class.cs (MethodData.Define): Update to changes.
14480
14481 2005-04-07  Raja R Harinath  <rharinath@novell.com>
14482
14483         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
14484
14485 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
14486
14487         * class.cs (PropertyMethod.Define): Check private accessor in abstract
14488         property.
14489         
14490         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
14491         
14492         * rootcontext.cs,
14493         * typemanager.cs: Registered RequiredAttributeAttribute.
14494         
14495 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
14496
14497         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
14498         Warning CS0169 is back at level 3.
14499         (IMethodData.SetMemberIsUsed): New method.
14500         
14501         * decl.cs (IsUsed): New value; moved from FieldBase.Status
14502         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
14503         
14504         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
14505
14506         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
14507         contants.
14508         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
14509         is used.
14510         
14511         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
14512         is used.
14513         
14514         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
14515         to avoid the problems with nested types.
14516
14517 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
14518             Anoob V.E  <projectmonokochi@rediffmail.com>
14519             Harilal P.R  <projectmonokochi@rediffmail.com>
14520             Raja R Harinath  <rharinath@novell.com>
14521
14522         Fix #73820.
14523         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
14524         attribute.
14525         * typemanager (GetConstructor): Make public.
14526
14527 2005-04-05  John Luke  <john.luke@gmail.com>
14528             Raja R Harinath  <rharinath@novell.com>
14529
14530         Fix #62232.
14531         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
14532         struct too.  Return false quicker in a few cases.
14533         (VerifyUnManaged): Use it.
14534
14535 2005-04-05  Raja R Harinath  <rharinath@novell.com>
14536
14537         Fix #74041.
14538         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
14539         not 'unreachable_seen'.
14540
14541 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
14542
14543         * attribute.cs (Attribute.GetValue): Removed unused.
14544         
14545         * codegen.cs (CodeGen.TrimExt): Removed unused.
14546         
14547         * cs-parser.jay (output): Removed unused.
14548         
14549         * cs-tokenizer.cs (hex_digits): Removed unused.
14550         
14551         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
14552         
14553         * expression.cs (Indirection.LoadExprValue): Removed unused.
14554         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
14555         
14556         * iterators.cs (Iterator.param_types): Removed unused.
14557         
14558         * statement.cs (Goto.block): Removed unused.
14559         (ToplevelBlock.did): Removed unused.
14560         (Switch.ResolveConstantSwitch): Removed unused.
14561
14562 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
14563
14564         * rootcontext.cs: Allow mcs to bootstrap with the compilation
14565         resetting thingy.
14566
14567 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14568
14569         Fix #74232 and cs0208-3.cs.
14570         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
14571         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
14572         unmanaged type.  Don't use FieldBuilders when 't' is a
14573         TypeBuilder.  Use ModFlags and MemberType fields.
14574         * class.cs (MemberBase.member_type): Rename from MemberType.
14575         (MemberBase.MemberType): New property.  Determines member_type on
14576         demand.
14577         (MemberBase.DoDefine): Don't initialize MemberType here.
14578         (FieldMember.Define): Likewise.
14579
14580 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
14581
14582         Fix #74241
14583         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
14584         Attributes are emitted there.
14585         
14586 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14587
14588         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
14589         keyword in 'partial enum' too.
14590         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
14591         is not allowed).
14592         Report from Kamil Skalski <nazgul@omega.pl>.
14593
14594         Fix #74309.
14595         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
14596         have partial containers too.
14597
14598         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
14599         in block' checks to Block.CheckInvariantMeaningInBlock.
14600         * statement.cs (Block.GetKnownVariableInfo): Make private.
14601         (Block.IsVariableUsedInChildBlock): Remove.
14602         (Block.IsVariableUsedInBlock): Likewise.
14603         (Block.CheckInvariantMeaningInBlock): New.  Show location of
14604         conflicting declaration.
14605         (Block.AddVariable): Make error messages less long-winded and more
14606         specific.  Show location of conflicting declaration.
14607         * parameter.cs (Parameters.Location): New readonly property.
14608
14609 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14610
14611         Clean up semantics of invoking ResolveMemberAccess.
14612         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
14613         can have an instance, ensure that we pass in a non-TypeExpression
14614         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14615         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14616         argument.  Update to changes and simplify.
14617         (FieldExpr.Emitinstance): Remove CS0120 check.
14618         (PropertyExpr.EmitInstance): Likewise.
14619         * expression.cs (Argument.Resolve): Likewise.
14620         (Invocation.DoResolve): Update to changes in semantics of
14621         InstanceExpression.
14622
14623 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14624
14625         Fix #74241
14626         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14627         customization.
14628         
14629         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14630
14631 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14632
14633         Fix difference in behaviour with commandline invocation.
14634         * driver.cs (Driver.Reset): New.
14635         (CompilerCallableEntryPoint): Call it.
14636
14637         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14638         variable" warnings if the boolean expression failed to resolve.
14639
14640 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14641
14642         * attribute.cs: Fix the union of several permissions when some of them
14643         are unrestricted (so the result isn't an unrestricted permission set).
14644         Fix #74036.
14645
14646 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14647
14648         * ecore.cs (MemberExpr): New class.  Convert from interface
14649         IMemberExpr.
14650         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14651         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14652         error checks.
14653         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14654         (MethodGroupExpr.IsExplicitImpl): Remove.
14655         (Expression.GetFieldFromEvent): Remove.
14656         (SimpleName.MemberStaticCheck): Remove.
14657         (SimpleName.DoSimpleNameResolve): Update to changes.
14658         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14659         (MemberAccess.IdenticalNameAndTypeName): Remove.
14660         (MemberAccess.error176): Move to MemberExpr.
14661         (MemberAccess.DoResolve): Update to changes.
14662         (BaseAccess.DoResolve): Likewise.
14663
14664 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14665
14666         C# 2.0 Conditional attribute class implementation
14667         
14668         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14669         Analyzes class whether it has attribute which has ConditionalAttribute
14670         and its condition is not defined.
14671         
14672         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14673         (Class.IsExcluded): New method. Search for at least one defined
14674         condition in ConditionalAttribute of attribute class.
14675
14676 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14677
14678         * ecore.cs (PropertyExpr): Derive from Expression, not
14679         ExpressionStatement.
14680         (PropertyExpr.EmitStatement): Remove.
14681
14682 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14683
14684         Fix #74060.
14685         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14686         internal field "value__" of an enum be private.  The examples for
14687         "value__" that I found on MSDN all used FieldAttributes.Private.
14688
14689         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14690         Don't mention IL method attribute names.
14691
14692         Fix #47991.  Remove a TODO.
14693         * statement.cs (Block.Toplevel): Make into a field.
14694         (Block.Parameters): Move into ToplevelBlock.
14695         (Block.known_variables): Rename from child_variable_names.
14696         (Block.Block): Remove variants that take Parameters.  Initialize
14697         'Toplevel' with the immediately surrounding toplevel block.
14698         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14699         LocalInfo parameter.
14700         (Block.GetKnownVariableInfo): New.
14701         (Block.IsVariableNameUsedInChildBlock): Update.
14702         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14703         the block, even though it may not be in scope.
14704         (Block.AddVariable): Remove Parameters parameter.  Use
14705         Toplevel.Parameters instead.
14706         (Block.AddConstant): Remove Parameters parameter.
14707         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14708         (Block.IsParamaterReference): Likewise.
14709         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14710         (ToplevelBlock.Parameters): New.  Moved from Block.
14711         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14712         initialize Parameters to a non-null value.
14713         * cs-parser.jay: Update to changes.
14714         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14715         simple names that mean different things in the same block.  Use
14716         Block.IsVariableNameUsedInBlock.
14717
14718 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14719
14720         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14721         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14722         GetTypeHandle.  It is possible for a reflected type to derive from
14723         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14724         System.Array during mscorlib compilation).
14725         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14726         contain a method_hash, don't create one either.  Don't create a
14727         deep copy of the base cache's method_hash.
14728         (MemberCache.SetupCache): Rename back from DeepCopy.
14729         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14730         already initialized.  If we see an override function, add its
14731         underlying base virtual function to the member_hash too.
14732
14733         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14734
14735 2005-03-26  Raja R Harinath  <harinath@acm.org>
14736
14737         Fix #73038.
14738         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14739         fails to resolve, ensure that the LHS is still resolved as an
14740         lvalue.
14741
14742 2005-03-25  Raja R Harinath  <harinath@acm.org>
14743
14744         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14745         ec.ContainerType.
14746         (Enum.current_ec): Remove.
14747         (Enum.LookupEnumValue): Remove EmitContext argument.
14748         Just uses the one created during DefineType.
14749         (Enum.FindMembers): Update.
14750         * expression.cs (MemberAccess.DoResolve): Update.
14751
14752 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14753
14754         * assign.cs (Assign.DoResolve): Check for CS1717 when
14755         source and target are same (uses Equals).
14756
14757         * expression.cs (LocalVariableReference, ParameterReference,
14758         This): Implemented Equals, GetHashCode.
14759
14760         * statement.cs (Block.GetParameterReference): Removed useless
14761         local variable.
14762
14763 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14764
14765         Fix cs0128.cs
14766         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14767         blocks before deciding whether the error is cs0136 or cs0128.
14768
14769         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14770         (using_alias_directive, using_namespace_directive): Pass
14771         MemberName, not an expression to Namespace.UsingAlias and
14772         Namespace.Using.
14773         (MakeName): Use the MemberName of the namespace.
14774         * namespace.cs (Namespace.MemberName): New.
14775         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14776         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14777         Likewise.
14778         * decl.cs (MemberName.Name): Make readonly.
14779         (MemberName.FromDotted): New "constructor".
14780         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14781         (MemberCore.Name): Compute from MemberName on demand.
14782         (MemberCore.SetMemberName): Provide a way to change the
14783         MemberName.
14784         (MemberCore.AddToContainer): Don't take a fullname parameter.
14785         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14786         fully qualified name of the container to the member name.
14787         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14788         only if the type is a member of the root container.
14789         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14790         MemberName.Left rather than searching for an embedded ".".
14791         (PartialContainer.CreatePart): Update to changes in RootContext.
14792         (MemberBase.ShortName): Turn into a property.  Use
14793         MemberCore.SetMemberName.
14794         (MemberBase.ExplicitInterfaceName): Remove.
14795         (MemberBase.UpdateMemberName): Remove.
14796         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14797         (PropertyBase.SetMemberName): New override.
14798         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14799         (Tree.GetDecl): New.
14800         (Tree.AllDecls): Rename from Decls.
14801         * attribute.cs, enum.cs, report.cs: Update to changes.
14802         * driver.cs (MainDriver): Use MemberName.FromDotted on
14803         RootContext.MainClass.
14804
14805 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14806
14807         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14808         checks.
14809
14810         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14811
14812 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14813
14814         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14815         property accessor modifiers.
14816
14817         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14818         fixed buffer attribute (CS1716).
14819         (PropertyMethod.HasCustomAccessModifier): When property accessor
14820         has custom modifier.
14821
14822         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14823         modifiers.
14824         (PropertyExpr.DoResolveLValue): Add CS0272.
14825
14826 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14827
14828         * convert.cs: When converting to a pointer, use the proper Conv.U
14829         or Conv.I depending on the source data type.
14830
14831         * cs-tokenizer.cs: Make the size for large decimal constants,
14832         fixes #72957.
14833
14834 2005-03-17  Martin Baulig  <martin@ximian.com>
14835
14836         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14837         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14838
14839 2005-03-17  Martin Baulig  <martin@ximian.com>
14840
14841         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14842         to bool so we can return an error condition.
14843         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14844         returned an error.
14845
14846 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14847
14848         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14849         attributes.
14850
14851 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14852
14853         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14854         Refactor to avoid traversing the list of assemblies, and to avoid
14855         string concatenation.
14856         * typemanager.cs (guid_attr_type): Remove.
14857         (negative_hits, pointers, references): Remove hashes.
14858         (type_hash): New.
14859         (GetConstructedType): New.  Uses type_hash to handle constructed
14860         types (arrays, references, pointers).
14861         (GetReferenceType, GetPointerType): Use it.
14862         (GetNestedType): New.  Uses type_hash to handle nested types of
14863         reflected types.
14864         (LookupType, LookupTypeDirect): Remove.
14865         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14866         'types' hash and LookupTypeReflection directly.
14867         (params_string, params_object): Use GetConstructedType.
14868         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14869         top-level types.
14870         (Namespace.Lookup): Use cached_types.
14871         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14872         provided by old TypeManager.LookupType.
14873         * rootcontext.cs (MakeFQN): Remove.
14874         * decl.cs (DeclSpace.MakeFQN): Likewise.
14875         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14876         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14877         TypeManager.GetConstructedType.
14878         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14879
14880 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14881
14882         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14883         indexers.
14884
14885         * cs-parser.jay: Reports CS1527 for any namespace element.
14886
14887         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14888         Added CS0407.
14889
14890         * expression.cs (ParameterReference.IsAssigned): Changed error to
14891         CS0269.
14892         (Error_WrongNumArguments): Moved CS0245 detection here.
14893
14894         * statement.cs (Return.Resolve): Add CS1622 report.
14895
14896 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14897
14898         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14899
14900 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14901
14902         * attribute.cs expression.cs: Get rid of some allocations.
14903
14904 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14905
14906         * doc.cs : just eliminate the latest change.
14907
14908 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14909
14910         * doc.cs : commented out the latest change. It breaks xml-030.cs
14911
14912 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14913
14914         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14915           fail. So invoke CreateType() in FindDocumentedType().
14916
14917 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14918
14919         * cs-tokenizer.cs : added IsKeyword().
14920         * doc.cs : Detect keyword incorrectly used as identifier.
14921           Allow identifiers prefixed by @.
14922
14923 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14924
14925         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14926         It caused exception in namespace resolving (again!).
14927         
14928         * class.cs (Class.ctor): Removed exit.
14929         (PropertyMethod.ctor): ditto.
14930         
14931         * codegen.cs (Codegen.Reset): Reset static data.
14932         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14933         
14934         * cs-tokenizer.cs (Cleanup): Removed.
14935         
14936         * driver.cs (GetSystemDir): Rewrote to one line command.
14937         It caused problem with unloaded dynamic modules.
14938         (UnixParseOption): Removed Exit.
14939         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14940         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14941         Now can be mcs used as library.
14942         
14943         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14944         empty location.
14945         
14946         * location.cs (Reset): Reset static data.
14947         
14948         * namespace.cs (Reset): Reset static data.
14949         
14950         * report.cs (Report.Reset): Reset static data.
14951         
14952         * rootcontext.cs (RootContext.Reset): Reset static data.
14953         
14954         * tree.cs (RootTypes.ctor): Use Location.Null
14955         
14956         * typemanager.cs (TypeManager.Reset): Reset static data.
14957         (CoreLookupType): Removed Exit.
14958         (TypeHandle.Reset): Reset static data.
14959         
14960 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14961
14962         Fix #73516.
14963         * typemanager.cs (ComputeNamespaces): Import namespaces from
14964         referenced modules too.
14965
14966 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14967
14968         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14969         than '.'.
14970
14971 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14972
14973         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14974         enclosing DeclSpace.  This ensures that a name-lookup populates
14975         more caches and there are fewer 'TypeExpression's.  Carve out
14976         nested type lookup into ...
14977         (LookupNestedTypeInHierarchy): ... this.
14978
14979 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14980
14981         Clean up a few partial-class semantics.  
14982         Fixes test-357.cs and cs1618-2.cs.
14983         * cs-parser.jay (struct_declaration): Use 'current_class' as
14984         parent of newly-created struct.  Remove call to Register ().
14985         Use 'pop_current_class' to complete handing the current struct.
14986         (interface_declaration): Likewise.
14987         (class_declaration): Likewise.
14988         (enum_declaration): Use 'current_class' as parent of newly created
14989         enum.
14990         (delegate_declaration): Likewise.
14991         (pop_current_class): New function.  This is used to handle closing
14992         up the 'current_class' and 'current_container', and pointing them
14993         to the enclosing class/container.
14994         (CSharpParser): Initialize 'current_class' too.
14995         * decl.cs (MemberCore): Add check for invariant: a partial
14996         container is not a parsed entity, and thus does not enclose any
14997         parsed members.
14998         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14999         (DeclSpace.BaseTypeExpr): Use it.
15000         (DeclSpace.LookupType): Add check for invariant.
15001         * class.cs (TypeContainer): Add check for invariant: a nested
15002         class should have the same NamespaceEntry as its enclosing class.
15003         (TypeContainer.EmitFieldInitializers): Make virtual.
15004         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
15005         MemberCore.
15006         (TypeContainer.Register): Remove.
15007         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
15008         null.  Use TypeResolveEmitContext for resolving base types and
15009         interfaces.  Move initialization of Parts.TypeBuilder here from
15010         ...
15011         (TypeContainer.DefineNestedTypes): ... here.
15012         (PartialContainer): Take a Namespace not a NamespaceEntry.
15013         (PartialContainer.Create): Don't use Register.  Call the
15014         appropriate Add... function directly.
15015         (ClassPart): Take both the PartialContainer and the enclosing
15016         class as constructor arguments.
15017         (ClassPart.EmitFieldInitializers): Override.
15018         (ClassPart.PartFindNestedTypes): Remove.
15019         (FieldBase.GetInitializerExpression): Resolve the initializer
15020         expression in the emit context of the enclosing class.
15021         * tree.cs (RootTypes): Remove Register ().
15022         
15023 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
15024
15025         * cs-parser.jay: Removed CS0134.
15026         
15027         * driver.cs: Removed CS1901.
15028         
15029         * expression.cs (SizeOf.DoResolve): Don't report CS0233
15030         for predefined types.
15031
15032 2005-03-07  Duncan Mak  <duncan@novell.com>
15033
15034         * codegen.cs (Save):  Catch UnauthorizedAccessException as
15035         well. Fixes bug #73454.
15036
15037 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
15038
15039         * cs-tokenizer.cs (xtoken): Add CS1035.
15040         
15041         * class.cs (MethodData.Define): Add CS0683.
15042         (FieldMember.ctor): Add CS0681.
15043
15044 2005-03-07  Raja R Harinath  <rharinath@novell.com>
15045
15046         * ecore.cs (SimpleName.DoResolve): Rename from
15047         SimpleName.DoResolveAllowStatic.
15048         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
15049         Pass 'intermediate' flag to MemberStaticCheck.
15050         (SimpleName.MemberStaticCheck): Skip "static check" only in case
15051         of "intermediate" lookups via MemberAccess.
15052         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
15053         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
15054
15055 2005-03-07  Raja R Harinath  <rharinath@novell.com>
15056
15057         Fix #73394.
15058         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
15059         slipped in because of variable names that are identical to a
15060         builtin type's BCL equivalent ('string String;', 'int Int32;').
15061         (PropertyExpr.EmitInstance): Likewise.
15062
15063 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
15064
15065         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
15066         
15067         * report.cs (warning_ignore_table): Made public.
15068
15069 2005-03-04  Raja R Harinath  <rharinath@novell.com>
15070
15071         Fix #73282.
15072         * class.cs (MethodData.Emit): Pass 'container' to
15073         container.GetObsoleteAttribute instead of 'container.Parent'.
15074
15075 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
15076
15077         * cs-parser.jay: Add 1534 error test.
15078
15079         * iterators.cs (Yield.CheckContext): Add error 1629.
15080         (Iterator.ctor): Save unsafe modifier.
15081         (MoveNextMethod.DoEmit): Restore unsafe context.
15082
15083         * namespace.cs (UsingAlias): Better error message.
15084
15085 2005-03-03  Dan Winship  <danw@novell.com>
15086
15087         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
15088         the warning message [#73219]
15089
15090 2005-03-03  Raja R Harinath  <rharinath@novell.com>
15091
15092         Fix compile with MCS 1.0.0.0.
15093         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
15094         w_restore to not depend on string constant folding.
15095
15096 2005-03-03  Raja R Harinath  <rharinath@novell.com>
15097
15098         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
15099         CS0246 check to users who passed 'silent = false'.
15100         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
15101         check.
15102         (SimpleName.SimpleNameResolve): Update.
15103         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
15104         (MemberAccess.IdenticalNameAndTypeName): Update.
15105         * doc.cs (FindDocumentedTypeNonArray): Update.
15106
15107 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
15108
15109         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
15110         * parameters.cs (ComputeAndDefineParameters): Remove.
15111         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
15112         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
15113         Use GetParameterInfo.
15114
15115 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
15116
15117         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
15118
15119 2005-03-02  Raja R Harinath  <rharinath@novell.com>
15120
15121         Unify DeclSpace.LookupType and DeclSpace.FindType.
15122         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
15123         is in charge of defining nested types on demand.
15124         (DeclSpace.LookupType): Use it when the current_type is a
15125         TypeBuilder.  Use LookupTypeDirect for reflected types.
15126         (DeclSpace.FindType): Remove.
15127         (DeclSpace.LookupInterfaceOrClass): Likewise.
15128         (DeclSpace.DefineTypeAndParents): Likewise.
15129         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
15130         DeclSpace.LookupType.
15131         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
15132         * typemanager.cs (LookupType): Simplify.
15133         (AddUserType): Remove type from negative_hits.
15134         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
15135         * class.cs (TypeContainer.FindMembers): Move handling of nested
15136         types ...
15137         (TypeContainer.FindMembers_NestedTypes): ... here.
15138         (TypeContainer.FindNestedType): Implement override.
15139         (ClassPart.FindNestedType): Delegate to PartialContainer.
15140         (ClassPart.PartFindNestedType): Looks up the nested types of the
15141         part alone.
15142
15143 2005-03-02  Martin Baulig  <martin@ximian.com>
15144
15145         * class.cs (TypeContainer.DoDefineMembers): We also need a default
15146         static constructor in static classes.
15147
15148 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
15149
15150         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
15151         sizeParamIndex is not specified.
15152
15153 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
15154
15155         Fix #73117
15156         * report.cs (WarningMessage.IsEnabled): Missing null check.
15157
15158 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
15159
15160         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
15161         in the fields and not in the properties.
15162
15163 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
15164
15165         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
15166         fields as well.
15167
15168 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
15169
15170         * attribute.cs: Small refactoring (improved robustness).
15171         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
15172         (ValidateGuid): Removed.
15173         (Resolve): Removed referenced to above mentioned.
15174         (GetAttributeUsage): Made private and changed to work without
15175         class assistance.
15176         (GetIndexerAttributeValue): Don't crash.
15177         (GetConditionalAttributeValue): Ditto.
15178         (GetClsCompliantAttributeValue): Ditto.
15179         (ExtractSecurityPermissionSet): All attributes exceptions are
15180         error 648.
15181         (GetPropertyValue): New helper.
15182         (GetMethodImplOptions): New method.
15183         (DefinePInvokeMethod): Reuse common code. Implemented handling of
15184         some missing properties.
15185         
15186         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
15187         (Method.ApplyAttributeBuilder): Updated.
15188         
15189         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
15190         exception.
15191
15192 2005-02-28  Raja R Harinath  <rharinath@novell.com>
15193
15194         Fix #73052.
15195         * report.cs (Report.SymbolRelatedToPreviousError): Handle
15196         non-simple types (array, pointer, reference).
15197
15198 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
15199
15200         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
15201
15202         * class.cs (MethodCore.IsDuplicateImplementation): Special error
15203         for operators.
15204         (Method.CheckBase): Catch wrong destructor here.
15205         (MethodData.Define): Add errors 550, 668.
15206
15207         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
15208
15209         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
15210
15211         * pending.cs (VerifyPendingMethods): Add error 551.
15212
15213         * typemanager.cs (CSharpName): Next error report helper.
15214
15215 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
15216
15217         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
15218         attributes. Removed useless attribute double check.
15219         It saves almost 2MBs for corlib.
15220
15221 2005-02-25  Raja R Harinath  <rharinath@novell.com>
15222
15223         Fix #72924.
15224         * statement.cs (ExpressionStatement.Resolve): Make robust to being
15225         called twice in case of error.
15226
15227 2005-02-23  Chris Toshok  <toshok@ximian.com>
15228
15229         Fix compiler portions of #72827.
15230         * statement.cs (Block.Emit): call Begin/EndScope on the
15231         EmitContext instead of the ILGenerator.
15232
15233         * codegen.cs (EmitContext.BeginScope): new method, call
15234         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
15235         we have one.)
15236         (EmitContext.BeginScope): same, but EndScope and CloseScope
15237
15238         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
15239         offset and call the superclass's OpenScope(int) with it.
15240         (SymbolWriter.CloseScope): get the current il
15241         offset and call superclass's CloseScope(int) with it.
15242
15243 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
15244
15245         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
15246         CS1677 for out and ref as well.
15247
15248         * class.cs (Method.Define): Add error CS1599 detection.
15249         
15250         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
15251         
15252         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
15253         
15254         * delegate.cs (Delegate.Define): Add error CS1599 detection.
15255         
15256         * support.cs.cs (ModifierDesc): New helper method.
15257
15258 2005-02-23  Raja R Harinath  <rharinath@novell.com>
15259             Abin Thomas  <projectmonokochi@rediffmail.com>
15260             Anoob V E  <projectmonokochi@rediffmail.com>
15261             Harilal P R  <projectmonokochi@rediffmail.com>
15262
15263         Fix #57851, #72718.
15264         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
15265         MemberLookup (used for error reporting) actually returns a result.
15266         Fix error report number (122, not 112).
15267
15268 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
15269             Anoob V E  <projectmonokochi@rediffmail.com>
15270             Harilal P R  <projectmonokochi@rediffmail.com>
15271
15272         Fix #71134.
15273         * pending.cs (PendingImplementation.GetAbstractMethods):
15274         Find NonPublic members too.
15275
15276 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
15277
15278         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
15279         Fixed error 217.
15280         
15281         * class.cs (MethodCore.CheckMethodAgainstBase):
15282         Add error 239 report.
15283
15284 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15285
15286         Fix #68955.
15287         * expression.cs (Invocation.IsApplicable): Make public.
15288         (Invocation.IsParamsMethodApplicable): Likewise.
15289         * delegate.cs (Delegate.VerifyApplicability): Don't use
15290         Invocation.VerifyArgumentCompat for parameter applicability
15291         testing.  Use Invocation.IsApplicable and
15292         Invocation.IsParamsMethodApplicable.
15293
15294 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15295
15296         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
15297         
15298         * class.cs (Operator.Define): Add error 217 report.
15299         
15300 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15301
15302         * namespace.cs (UsingEntry.Resolve): Undo change below.
15303
15304 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15305
15306         Fix #72756.
15307         * ecore.cs (Expression.MemberLookupFailed): Add argument to
15308         disable the error message when the extended MemberLookup also
15309         fails.
15310         (Expression.MemberLookupFinal): Update.
15311         (SimpleName.DoSimpleNameResolve): Update.
15312         * expression.cs (MemberAccess.ResolveNamespaceOrType):
15313         Don't use MemberLookupFinal.
15314         (New.DoResolve): Update.
15315         (BaseAccess.CommonResolve): Update.
15316
15317 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15318
15319         Fix #72732.
15320         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
15321         occured previously, don't resolve again.
15322
15323 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15324
15325         Fix #69949
15326         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
15327         argument. Call ResolveAttributeUsage for unresolved.
15328         when types doesn't match ctor arguments.
15329         
15330         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
15331         for nested attribute classes.
15332         (Class.attribute_usage): Removed.
15333         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
15334         for attribute class.
15335         
15336         * ecore.cs (IsAttribute): Removed.
15337         
15338         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
15339         
15340         * rootcontext.cs (RegisterAttribute): Removed, attributes are
15341         now normal types.
15342         (attribute_types): Removed.
15343         (EmitCode): Global attributes are emited as the latest.
15344
15345 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
15346
15347         * class.cs (EmitFieldInitializers): Don't emit field initializer
15348         for default values when optimilization is on.
15349         
15350         * constant.cs (Constant.IsDefaultValue): New property.
15351         
15352         * driver.cs: Add /optimize handling.
15353         
15354         * constant.cs,
15355         * ecore.cs,
15356         * literal.cs: Implement new IsDefaultValue property.
15357         
15358         * rootcontext.cs (Optimize): New field, holds /optimize option.
15359
15360 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15361
15362         Fix crasher in re-opened #72347.
15363         * namespace.cs (Namespace.Lookup): Return null if
15364         DeclSpace.DefineType returns null.
15365
15366         Fix #72678.
15367         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
15368
15369 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15370
15371         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
15372         now returns null if it cannot resolve to an lvalue.
15373         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
15374         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
15375         returned null.  Remove check for SimpleName.
15376         (EventExpr.DoResolveLValue): New.
15377         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
15378         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
15379         error from ...
15380         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
15381         avoid CS0131 error.
15382         (Unary.ResolveOperator): Move CS0211 check ...
15383         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
15384         CS0131 error.
15385         (Unary.DoResolveLValue): Simplify.
15386         (AddressOf.DoResolveLValue): New.
15387         (ArrayAccess.DoResolveLValue): New.
15388
15389 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
15390
15391         * attribute.cs (Attribute.Resolve): Add arguments casting for
15392         when types doesn't match ctor arguments.
15393
15394 2005-02-16  Raja R Harinath  <rharinath@novell.com>
15395
15396         Fix parts of #63202.
15397         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
15398         lookup of operator in base type.  Ensure that all checks happen
15399         when the operator resolves to an "op_..." method.
15400
15401 2005-02-15  Raja R Harinath  <rharinath@novell.com>
15402
15403         Fix #71992.
15404         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
15405         'ignore_cs0104' parameter.  Pass it to ...
15406         (NamespaceEntry.Lookup): ... this.
15407         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
15408         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
15409         (TypeLookupExpression.DoResolveAsTypeStep): Update.
15410         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
15411         Update.  Request that cs0104 errors be ignored.
15412         (ComposedCast.ResolveAsTypeStep): Update.
15413
15414 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15415
15416         Fix #59209.
15417         * expression.cs (Invocation.BetterFunction): Remove support for
15418         comparing virtual functions and their overrides.
15419         (Invocation.IsOverride): New.
15420         (Invocation.OverloadResolve): Don't consider 'override' functions
15421         during candidate selection.  Store them in a lookaside list.
15422         If the selected method is a 'virtual' function, use the list to
15423         find any overrides that are closer to the LHS type.
15424
15425 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
15426
15427         * expression.cs (New.DoResolve): Add complex core type reduction.
15428         (New.Constantify): Converts complex core type syntax like 'new int ()'
15429         to simple constant.
15430         
15431 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15432
15433         * decl.cs (EntryType.EntryType): New constructor to create an
15434         updated copy of a cache entry.
15435         (MemberCache.AddMethods): Use it.
15436         (MemberCache.ClearDeclaredOnly): Remove.
15437         (MemberCache.MemberCache): Update.
15438
15439 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15440
15441         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
15442         variable.  This one is represents the actual low-level declaration
15443         of the method, as opposed to the semantic level `IsStatic'.   
15444
15445         An anonymous method which is hosted into a static method might be
15446         actually an instance method.  IsStatic would reflect the
15447         container, while MethodIsStatic represents the actual code
15448         generated.
15449
15450         * expression.cs (ParameterReference): Use the new MethodIsStatic
15451         instead of IsStatic.
15452
15453         * anonymous.cs (AnonymousMethod.Compatible): Pass the
15454         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
15455         set on the current EmitContext. 
15456
15457         * expression.cs (Cast): Overload DoResolveLValue so we can pass
15458         resolve our casted expression as an LValue.  This triggers the
15459         proper LValue processing that is later required by Assign.
15460
15461         This fixes 72347.
15462
15463         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
15464
15465 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
15466
15467         C# 2.0 Fixed buffer implementation
15468
15469         * anonymous.cs: Update after RegisterHelperClass renaming.
15470
15471         * attribute.cs (AttributeTester.fixed_buffer_cache):
15472         Cache of external fixed buffers.
15473         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
15474         implementation if field is fixed buffer else null.
15475
15476         * class.cs
15477         (TypeContainer.AddField): Accept FieldMember instead of Field.
15478         (FieldBase.IsFieldClsCompliant): Extracted code from
15479         VerifyClsCompliance descendant customization.
15480         (FixedField): New class handles fixed buffer fields.
15481         (FixedFieldExternal): Keeps information about imported fixed
15482         buffer.
15483         (IFixedField): Make access to internal or external fixed buffer
15484         same.
15485
15486         * cs-parser.jay: Add fixed buffer parsing.
15487
15488         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
15489         buffer.
15490
15491         * expression.cs (Indirection): Extended implementation to accept
15492         fixed buffer field.
15493         (PointerArithmetic.Emit): Get element from fixed buffer as well.
15494         (ElementAccess.MakePointerAccess): Get type as parameter.
15495         (DoResolve): Add fixed buffer field expression conversion.
15496         (DoResolveLValue): Ditto.
15497         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
15498         (ArrayPtr): Derives from FixedBufferPtr.
15499         (ArrayPtr.Emit): Add extra emit for array elements.
15500
15501         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
15502
15503         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
15504         for compiler generated types.
15505         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
15506
15507         * statement.cs (Fixed): Refactored to be easier add fixed buffer
15508         and consume less memory.
15509         (Fixed.Resolve): Add fixed buffer case.
15510
15511         * typemanager.cs (compiler_generated_attr_ctor,
15512         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
15513         (HasElementType): Add our own implementation to work on every
15514         runtime.
15515
15516 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15517
15518         * anonymous.cs (CaptureContext): Track whether `this' has been
15519         referenced.   
15520
15521         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
15522         only captured `this' if it was implicitly done (instance
15523         methods/variables were used). 
15524
15525         * codegen.cs (EmitContext.CaptureThis): New method to flag that
15526         `this' must be captured.
15527
15528 2005-01-30  Miguel de Icaza  <miguel@novell.com>
15529  
15530         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
15531         is null it means that there has been no need to capture anything,
15532         so we just create a sibling.
15533
15534         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
15535
15536         Just a partial fix.  The other half is fairly elusive.
15537         
15538 2005-02-10  Raja R Harinath  <rharinath@novell.com>
15539
15540         Fix #52586, cs0121-4.cs.
15541         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
15542         and return a hashtable.
15543         (MemberCache.ClearDeclaredOnly): New.
15544         (MemberCache.MemberCache): Update to change.  Make a deep copy of
15545         the method_hash of a base type too.
15546         (MemberCache.AddMethods): Adapt to having a deep copy of the base
15547         type methods.  Overwrite entries with the same MethodHandle so
15548         that the ReflectedType is correct.  The process leaves in base
15549         virtual functions and their overrides as distinct entries.
15550         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
15551         matters since it was boxed in a ArrayList before.
15552         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
15553         modifier.
15554         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
15555         case of a virtual function and its override (choose the overload
15556         as better).
15557         (Invocation.OverloadResolve): Avoid 'override' members during
15558         'applicable_type' calculation.
15559
15560 2005-02-09  Raja R Harinath  <rharinath@novell.com>
15561
15562         Combine two near-redundant caches.
15563         * typemanager.cs (method_params): Rename from method_internal_params.
15564         (TypeManager.GetParameterData): New.  Replace
15565         Invocation.GetParameterData.
15566         (TypeManager.LookupParametersByBuilder): Remove.
15567         * expression.cs (Invocation.method_parameter_cache): Remove.
15568         (Invocation.GetParameterData): Remove.
15569         Update to changes.
15570         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
15571         Update to changes.
15572
15573 2005-02-08  Raja R Harinath  <rharinath@novell.com>
15574
15575         Fix #72015.
15576         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
15577         TypeManager.multicast_delegate_type is null, resolve it by looking
15578         up "System.MulticastDelegate".
15579         * rootcontext.cs (RootContext.ResolveCore): Simplify.
15580
15581 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
15582             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
15583             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
15584
15585         Fix cs0164.cs.
15586         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
15587         (LabeledStatement.AddReference): New.  Set 'referenced'.
15588         (Goto.Resolve): Use it.
15589
15590 2005-02-05  John Luke  <john.luke@gmail.com>
15591
15592         * driver.cs: remove duplicate -doc line in Usage ()
15593
15594 2005-02-04  Raja R Harinath  <rharinath@novell.com>
15595
15596         * location.cs (Location.AddFile): Fix CS2002 error report.
15597
15598 2005-02-02  Martin Baulig  <martin@ximian.com>
15599
15600         * delegate.cs (Delegate.DefineType): Report an internal error if
15601         TypeManager.multicast_delegate_type is null.  See bug #72015 for
15602         details.        
15603
15604 2005-02-02  Raja R Harinath  <rharinath@novell.com>
15605
15606         Fix a crasher in a variant of #31984.
15607         * const.cs (Constant.CheckBase): New override that defers the
15608         new-or-override check in case the base type hasn't been populated
15609         yet.
15610         (Constant.Define): Ensure the new-or-override check is performed.
15611
15612 2005-02-01  Duncan Mak  <duncan@ximian.com>
15613
15614         * const.cs (LookupConstantValue): Check that `ce' is not null
15615         before calling GetValue ().
15616
15617 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15618
15619         Fix test-334.cs (#69519).
15620         * cs-parser.jay (using_alias_directive): Pass in an expression to
15621         NamespaceEntry.UsingAlias.
15622         (using_namespace_directive): Pass in an expression to
15623         NamespaceEntry.Using.
15624         (namespace_name): Don't flatten to a string.
15625         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15626         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15627         ResolveAsTypeStep.
15628         (NamespaceEntry.UsingEntry): Likewise.
15629         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15630         changes.
15631         (NamespaceEntry.LookupForUsing): Remove.
15632         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15633         names.
15634         (NamespaceEntry.Lookup): Remove support for dotted names.
15635
15636 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15637
15638         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15639         split into two.
15640         (NamespaceEntry.ImplicitParent): Compute on demand.
15641         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15642         parallels the current.
15643         (NamespaceEntry.LookupForUsing): Use it.
15644         (NamespaceEntry.Lookup): If the current namespace-entry is
15645         implicit, don't search aliases and using tables.
15646
15647 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15648
15649         Fix #31984.
15650         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15651         BaseCache here.
15652         (TypeContainer.BaseCache): Compute on demand.
15653         (TypeContainer.FindMembers): Define constants and types if they're
15654         not already created.
15655         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15656         check.
15657         * const.cs (Constant.Define): Make idempotent.
15658
15659 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15660
15661         * pending.cs: Produce better code (no nops produced by using Ldarg
15662         + value).
15663         
15664         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15665         i - 1' it should be arg + 1.
15666
15667         Fixes bug #71819.
15668
15669 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15670
15671         * attribute.cs (Attribute.CheckAttributeType): Make private
15672         non-virtual.
15673         (Attribute.ResolveType): Make virtual.
15674         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15675         handling of RootContext.Tree.Types.
15676
15677 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15678
15679         Update attribute-handling to use the SimpleName/MemberAccess
15680         mechanisms.
15681         * cs-parser.jay (attribute): Pass in an expression to the
15682         constructors of Attribute and GlobalAttribute.
15683         * attribute.cs (Attribute): Take an expression for the name.
15684         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15685         passed in attribute name expression.
15686         (Attribute.CheckAttributeType): Use it.
15687         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15688         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15689         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15690         argument to prevent error messages if the lookup fails.
15691
15692 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15693
15694         * expression.cs (Indirection): Implemented IVariable interface
15695         to support indirection in AddressOf operator.
15696         (PointerArithmetic.Emit): Add optimalization for case where
15697         result can be precomputed.
15698
15699 2005-01-26  Martin Baulig  <martin@ximian.com>
15700
15701         * class.cs (TypeContainer.AttributeTargets): Return the correct
15702         AttributeTargets depending on our `Kind' instead of throwing an
15703         exception; fixes #71632.
15704
15705 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15706
15707         Fix #71257
15708         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15709         constant members.
15710
15711 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15712
15713         Fix #71602.
15714         * expression.cs (MemberAccess.DoResolve): Don't complain with
15715         cs0572 when the LHS of a member access has identical name and type
15716         name.
15717
15718 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15719
15720         Fix #71651, #71675
15721         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15722         CreatePermission.
15723         Create custom PermissionSet only for PermissionSetAttribute.
15724
15725 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15726
15727         Fix #71649
15728         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15729         delegates in static class.
15730
15731 2005-01-24  Martin Baulig  <martin@ximian.com>
15732
15733         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15734         merging an implicit block, just use its reachability.
15735
15736         * statement.cs (Block.Resolve): Make the unreachable code check
15737         work wrt. implicit blocks; see test-337 from #63842.
15738
15739 2005-01-21  Alp Toker  <alp@atoker.com>
15740  
15741         * cs-parser.jay: destructor_declaration's container is PartialContainer
15742         not Class when partial types are used, so use Kind prop instead of
15743         'is'.
15744         
15745 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15746
15747         * cs-parser.jay: Improve error reporting when an interface
15748         declares new types.
15749
15750 2005-01-20  Dick Porter  <dick@ximian.com>
15751
15752         * support.cs: SeekableStreamReader fix from Sandor Dobos
15753         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15754         chars are read.  Fixes bug 70369.
15755
15756 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15757
15758         * cs-parser.jay (catch_clause): Simplify current_block handling
15759         somewhat.
15760
15761 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15762
15763         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15764         code with ImplicitStandardConversion to handle the implicit
15765         conversion of method groups into valid delegate invocations. 
15766
15767         The problem is that in parameter handling we were using this code
15768         path.  Fixes bug #64698
15769
15770 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15771
15772         * cs-parser.jay: Fix several infelicities.
15773         - Avoid assigning to the parser value stack.  Code like 
15774           '$3 = null' is unclean.  Synthesize a value for the code block
15775           instead. 
15776         - Avoid using oob_stack for storing location information.  Use ...
15777         (_mark_): ... this.  New (empty) rule.  Saves the current location
15778         in $$.
15779         (foreach_statement): Avoid using oob_stack for current_block
15780         handling.  Use technique used in for_statement and
15781         using_statement.  Synthesize a value for the code block to store
15782         additional intermediate information.
15783
15784 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15785
15786         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15787         of a different type is only allowed to private fields of a
15788         containing type, not on fields of a base class.
15789
15790         See test-174.cs and error cs0122-9.cs
15791
15792 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15793
15794         Fix test-335.cs (bug #58126).
15795         * cs-parser.jay (argument): Split out non-expression parts of the
15796         rule into 'non_simple_argument'.
15797         (invocation_expression): Support parenthesized invocations with
15798         multiple arguments, and with single non-simple arguments.
15799
15800 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15801
15802         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15803         places.
15804
15805 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15806
15807         Fix cs0038-1.cs, cs1640-6.cs.
15808         * ecore.cs (Expression.Resolve): Remove special-case for
15809         SimpleName in error-handling.
15810         (Expression.almostMatchedMembers): Relax access permission to
15811         protected.
15812         (Expression.MemberLookupFailed): Handle duplicates in
15813         almostMatchedMembers list.
15814         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15815         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15816         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15817         overload if the passed in MemberInfo is a MethodBase.
15818
15819 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15820
15821         Fix #70749
15822         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15823         for non-CAS & merge permission sets properly.
15824
15825 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15826
15827         Improve standard-compliance of simple name and member access 
15828         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15829         * ecore.cs (FullNamedExpression): New abstract base class 
15830         for Namespaces and TypeExpressions.
15831         (ResolveFlags.SimpleName): Remove.
15832         (SimpleName): Remove support for dotted names.
15833         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15834         DeclSpace.FindType and DeclSpace.LookupType.
15835         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15836         (Expression.ExprClassName): Make member function.
15837         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15838         a namespace.  Remove creation of dotted "SimpleName"s.
15839         (MemberAccess.DoResolve): Likewise.
15840         * decl.cs (DeclSpace.Cache): Make private.
15841         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15842         (DeclSpace.FindType): Update.
15843         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15844         FullNamedExpression.
15845         * namespace.cs (Namespace): Derive from FullNamedExpression
15846         so that it can be part of expression resolution.
15847         (Namespace.Lookup): Return an FullNamedExpression.
15848         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15849         namespace.
15850         * rootcontext.cs (NamespaceLookup): Remove.
15851         (LookupType): Move to DeclSpace.
15852         * attribute.cs (CheckAttributeType): Update.
15853         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15854         (FindDocumentedTypeNonArray): Likewise.
15855
15856 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15857
15858         Fix cs0509.cs, cs1632.cs.
15859         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15860         is the same as IsInterface.
15861         (TypeContainer.GetClassBases): Likewise.
15862         * statement.cs (LabeledStatement.ig): New field.
15863         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15864         label.
15865         (LabeledStatement.DoEmit): Check that the label was created with
15866         the same ILGenerator.
15867
15868 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15869
15870         Fix #71058
15871         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15872         accessors to its properties.
15873
15874         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15875         from accessors to property.
15876         
15877 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15878
15879         Fix #70722
15880         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15881         only for overrides.
15882         
15883 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15884
15885         * attribute.cs: Check for null and empty strings.  
15886
15887         I have lost another battle to Paolo.
15888
15889 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15890
15891         Fix #70942
15892         * class.cs (PropertyMethod): Set Parent field in ctors.
15893         (SetMethod.InternalParameters): Add unsafe switch hack.
15894         Override MarkForDuplicationCheck where it is appropriate.
15895
15896         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15897         It says whether container allows members with the same name.
15898         Base default is no.
15899         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15900         Removed is_method parameter.
15901
15902 2005-01-06  Duncan Mak  <duncan@ximian.com>
15903
15904         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15905         because the previous change led to incorrect reporting of CS1032
15906         ("Cannot define/undefine preprocessor symbols after first token in
15907         file"). Instead of using `tokens_seen' as the only flag that
15908         triggers CS1040, introduce `comments_seen'. This new flag is used
15909         to signify having seen comments on the current line, so it is
15910         unset after a newline.
15911
15912 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15913
15914         * doc.cs : When searching for a type, find nested type too.
15915           This fixes bug #71040.
15916
15917 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15918
15919         * doc.cs :
15920           - Warn missing member comment on those classes which also does not
15921             have doc comments. Fixed bug #71041.
15922           - Don't warn missing doc comment on default constructor.
15923             Fixed bug #71042.
15924
15925 2005-01-06  Duncan Mak  <duncan@ximian.com>
15926
15927         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15928         comments, set `tokens_seen' to true. This allows us to detect
15929         misplaced preprocessor directives (i.e. not at the beginning of
15930         the a line, nor after whitespaces). In that case, report error
15931         CS1040. This fixes bug #56460.
15932
15933         * cs-parser.jay (interface_member_declaration): Add checks for
15934         IsExplicitImpl, and report CS0541 error if an interface member is
15935         defined as an explicit interface declaration.
15936
15937 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15938
15939         Fix #70817
15940         * class.cs (PropertyMethod): Set Parent field in ctors.
15941         (SetMethod.InternalParameters): Add unsafe switch hack.
15942         
15943         * decl.cs (MemberCore.Parent): Cannot be readonly.
15944
15945 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15946
15947         * decl.cs (DeclSpace.ResolveType): Remove.
15948         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15949         Merge in code from ...
15950         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15951         * class.cs, enum.cs: Update to changes.
15952
15953 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15954
15955         * anonymous.cs: Ensure that we init the scope of our parent if it
15956         has not been initialized yet.
15957
15958 2004-12-30  Duncan Mak  <duncan@ximian.com>
15959
15960         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15961         if field.FieldBuilder is null. Fixes #70758.
15962
15963         * convert.cs: Fixed some typos and updated some of the comments.
15964         (ImplicitStandardConversionExists):
15965         (TryImplicitIntConversion): If `target_type' is an interface and
15966         the type of `ic' implements this interface, return true or a new
15967         BoxedCast instead of null. This fixes #70468.
15968
15969 2004-12-29  Duncan Mak  <duncan@ximian.com>
15970
15971         * expression.cs (Argument.Emit): Check that Expr is
15972         IMemoryLocation before casting to it, and report CS1510 otherwise.
15973
15974         This fixes #70402.
15975
15976 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15977
15978         * statement.cs (Block.ThisVariable): remove the recursion here, to
15979         make the --profile more sane.
15980
15981 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15982
15983         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15984         assembly, by JB Evain.
15985
15986 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15987
15988         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15989           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15990         "parent" refers to enclosing type/class.  "base" refers to superclass.
15991
15992 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15993
15994         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15995         Ensure that we only have GlobalAttributes.
15996         * attribute.cs (Attribute.Emit): Make non-virtual.
15997         (GlobalAttribute.Emit): Remove.
15998         (Attribute.Resolve): Make virtual.
15999         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
16000         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
16001         the argument. Don't create one.
16002         (Attribute.GetObsoleteAttribute): Likewise.
16003         (Attribute.GetClsCompliantAttributeValue): Likewise.
16004         * class.cs, decl.cs: Update to changes.
16005
16006 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
16007
16008         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
16009         
16010         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
16011         
16012         * statement.cs (Foreach.Resolve): Add error 186 report.
16013
16014 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
16015
16016         * expression.cs (Conditional.DoResolve): Add warning 429.
16017         
16018         * statement.cs (If.Resolve): Add warning 665.
16019
16020 2004-12-16  Raja R Harinath  <rharinath@novell.com>
16021
16022         New invariant: RootContext.Tree.Types.NamespaceEntry == null
16023         except when in the parser, and in GlobalAttribute.
16024         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
16025         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
16026         RootContext.Tree.Types.NamespaceEntry once work is done.
16027         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
16028         and resets RootContext.Tree.Types.NamespaceEntry.
16029
16030 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
16031
16032         * cs-parser.jay: Don't create a block for every variable.
16033
16034 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
16035
16036         * location.cs: Provide extra information.
16037
16038         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
16039         variables from the captured environment, it is the ldarg_0.
16040
16041 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
16042
16043         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
16044         find a conclusion.
16045         
16046         * class.cs: Changed warning level for 169 to avoid developer
16047         displeasure from warning flooding. It will be changed back when they
16048         fix most of current BCL warnings.
16049         
16050         * RootContext.cs: Pushed default WarningLevel to 3.
16051         
16052         * statement.cs: Removed unused variable.
16053
16054 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
16055
16056         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
16057         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
16058         Add error 502 report.
16059         (StaticClass.DefineType): Add error 441 report.
16060         (Class.AllowedModifiersProp): New virtual property as temporary
16061         extension to AllowedModifiers.
16062         (Class.DefineType): Add error 418 report. Moved ModFlags check here
16063         to share implementation with StaticClass and don't call virtual
16064         methods from ctor.
16065         
16066         * driver.cs (MainDriver): Add error 1558 test.
16067
16068         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
16069         report. Moved error 36 test here.
16070
16071         * statement.cs (Throw.Resolve): Add error 724 report.
16072
16073         * typemanager.cs: Add out_attribute_type core type.
16074         
16075 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
16076
16077         * class.cs (TypeContainer.VerifyClsCompliance): Add error
16078         3018 report.
16079         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
16080
16081         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
16082         3017 report.
16083         
16084         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
16085
16086         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
16087         Add error 3023 report.
16088         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
16089
16090         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
16091         implementation.
16092
16093 2004-12-12  John Luke  <john.luke@gmail.com>
16094
16095         * driver.cs (AddArgs): take -- into account when
16096         adding arguments, fixes bug 65710 
16097
16098 2004-12-12  Martin Baulig  <martin@ximian.com>
16099
16100         * expression.cs (Unary.TryReduceNegative): Added support for
16101         SByteConstant and ByteConstant.
16102         (Unary.Reduce): Check error values from TryReduceNegative().
16103
16104 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
16105
16106         * attributes.cs (Attribute.Resolve): Avoid multiple error report
16107         and report exception as error 182.
16108
16109 2004-12-10  Raja R Harinath  <rharinath@novell.com>
16110
16111         * driver.cs (Main): Fix message when there are warnings.
16112
16113 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
16114
16115         * delegate.cs: Fixed my fix from yesterday, sorry about that.
16116
16117 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
16118
16119         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
16120         Reduced number of warnings.
16121         
16122         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
16123
16124 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
16125
16126         * driver.cs: Removed message.
16127
16128         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
16129
16130 2004-12-08    <vargaz@freemail.hu>
16131
16132         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
16133
16134 2004-12-08  Martin Baulig  <martin@ximian.com>
16135
16136         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
16137         instead of a CS3002 for properties and indexer.
16138
16139 2004-12-08  Martin Baulig  <martin@ximian.com>
16140
16141         * decl.cs (MemberName.ToString): Make this work again.
16142
16143 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
16144
16145         * attribute.cs (Resolve): Add error 591 detection.
16146
16147         * class.cs (FieldMember.Define): Add error 1547 detection.
16148         (Indexer.Define): Add error 620 detection.
16149         (Operator.Define): Add error 590 detection.
16150
16151         * ecore.cs: Missing argument for error 79.
16152
16153         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
16154         detection.
16155
16156 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
16157
16158         Fix #70106
16159         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
16160         only.
16161
16162 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
16163
16164         * cs-parser.jay : handle doc comments on implicit/explicit operators.
16165           Some operator comments were suppressed.
16166         * doc.cs : Implicit/explicit operator name in doc comments are like
16167           "op_Explicit(type)~returnType", so added suffix handling.
16168
16169 2004-12-07  Martin Baulig  <martin@ximian.com>
16170
16171         * decl.cs
16172         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
16173         (MemberCore.GetClsCompliantAttributeValue): Likewise.
16174         (DeclSpace.ec): New protected field; store the EmitContext here.
16175         (DeclSpace.EmitContext): New public property; moved here from
16176         `TypeContainer'.
16177         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
16178         EmitContext.
16179
16180         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
16181         (Enum.Emit): Don't create a new EmitContext.
16182
16183         * delegate.cs (Delegate.DefineType): Always create the
16184         EmitContext.
16185
16186         * iterators.cs (Iterators.DefineIterator): Create a new
16187         EmitContext and store it in `ec'.
16188
16189 2004-08-24  Martin Baulig  <martin@ximian.com>
16190
16191         * typemanager.cs
16192         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
16193         this for accessibility checks.
16194         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
16195         IsNestedFamilyAccessible.
16196         (TypeManager.IsSubclassOf): New method, do what the name actually
16197         says.   
16198
16199 2004-12-06  Raja R Harinath  <rharinath@novell.com>
16200
16201         Fix crash on cs0657-17.cs.
16202         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
16203         Use RootContext.Tree.Types, not 'new RootTypes ()'.
16204         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
16205         the case where the NamespaceEntry gets overwritten.
16206
16207 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
16208
16209         Fixed #69195, #56821
16210         * ecore.cs (ResolveBoolean): Tiny refactoring.
16211
16212         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
16213         of right expression resolving when left is false constant and
16214         operator is LogicalAnd OR true constant and operator is LogicalOr.
16215
16216         * statement.cs (ResolveUnreachable): Always reports warning.
16217
16218 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
16219
16220         * class.cs: Distinguish between 1721 and 1722 (just a little help
16221         for the programmer).
16222
16223 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
16224
16225         * delegate.cs: Only allow this on new versions of the language. 
16226
16227 2004-12-02  Duncan Mak  <duncan@ximian.com>
16228
16229         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
16230         Expression class.
16231         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
16232         here as a static method. Take an additional bool out parameter
16233         `must_do_cs1540_check' for signaling to InstanceResolve.
16234         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
16235         member field from PropertyExpr class and made it an argument of
16236         the method instead.
16237         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
16238         check for MarshalByRefObject, and report CS0122 instead of CS1540.
16239         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
16240         and `remove_accessor' as well as InstanceResolve: report CS0122
16241         where applicable.
16242
16243         Fixes #70129.
16244
16245 2004-12-03  Raja R Harinath  <rharinath@novell.com>
16246
16247         Fix test-327.cs, test-328.cs, and put in early infrastructure
16248         for eventually fixing #52697.
16249         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
16250         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
16251         from other methods.
16252         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
16253         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
16254         (VerifyUsing, error246): Update.
16255         * rootcontext.cs (RootContext.NamespaceLookup): Just use
16256         'NamespaceEntry.LookupNamespaceOrType'.
16257
16258 2004-12-03  Martin Baulig  <martin@ximian.com>
16259
16260         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
16261         method as our child, call AnonymousMethod.Compatible() on it.
16262
16263 2004-12-03  Raja R Harinath  <rharinath@novell.com>
16264
16265         Disable XML documentation support in 'basic' profile.
16266         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
16267         Redirect XmlElement to System.Object.
16268         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
16269         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
16270         * mcs.exe.sources: Add doc-bootstrap.cs.
16271         * doc-bootstrap.cs: New file.  Contains empty stub implementation
16272         of doc.cs.
16273
16274 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
16275
16276         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
16277           comments are allowed.
16278
16279 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16280
16281         * delegate.cs: Add checks for subtypes in paramaters and return values
16282         in VerifyMethod () to add support for Covariance/Contravariance
16283         in delegates.
16284         
16285 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
16286
16287         * report.cs: Remove extra closing parenthesis.
16288
16289         * convert.cs (Error_CannotImplicitConversion): If the name of the
16290         types are the same, provide some extra information.
16291
16292         * class.cs (FieldBase): Use an unused bit field from the field to
16293         encode the `has_offset' property from the FieldMember.  This saves
16294         a couple of Ks on bootstrap compilation.
16295
16296         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
16297         method as our child, return the AnonymousMethod resolved
16298         expression.
16299
16300         * expression.cs (New.DoResolve): Allow return values from
16301         NewDelegate to also include AnonymousMethods.
16302
16303         Fixes #70150.
16304
16305 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
16306
16307         Fix bug #70102
16308         * attribute.cs (Resolve): Improved implementation of params
16309         attribute arguments.
16310
16311         * support.cs (ParameterData): Add HasParams to be faster.
16312
16313 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
16314
16315         all things are for /doc support:
16316
16317         * doc.cs: new file that supports XML documentation generation.
16318         * mcs.exe.sources: added doc.cs.
16319         * driver.cs:
16320           Handle /doc command line option.
16321           Report error 2006 instead of 5 for missing file name for /doc.
16322           Generate XML documentation when required, after type resolution.
16323         * cs-tokenizer.cs:
16324           Added support for picking up documentation (/// and /** ... */),
16325           including a new XmlCommentState enumeration.
16326         * cs-parser.jay:
16327           Added lines to fill Documentation element for field, constant,
16328           property, indexer, method, constructor, destructor, operator, event
16329           and class, struct, interface, delegate, enum.
16330           Added lines to warn incorrect comment.
16331         * rootcontext.cs :
16332           Added Documentation field (passed only when /doc was specified).
16333         * decl.cs:
16334           Added DocComment, DocCommentHeader, GenerateDocComment() and
16335           OnGenerateDocComment() and some supporting private members for
16336           /doc feature to MemberCore.
16337         * class.cs:
16338           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
16339         * delegate.cs:
16340           Added overriden DocCommentHeader.
16341         * enum.cs:
16342           Added overriden DocCommentHeader and GenerateDocComment().
16343
16344 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
16345
16346         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
16347         unwrapping the enumeration values, chain to
16348         DoConstantNumericPromotions again, so we can promote things to the
16349         fundamental types (takes care of enums that are bytes, sbytes).
16350
16351         Fixes bug #62054.
16352
16353 2004-12-01  Raja R Harinath  <rharinath@novell.com>
16354
16355         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
16356         Fix long-standing bug in type-lookup.  Use FindType instead of
16357         LookupType when ec.ResolvingTypeTree.
16358         (Attribute.ResolveType, Attribute.Resolve)
16359         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
16360         Update to changes.
16361         (Attributes.Search): Remove internal version.  Update.
16362         (Attributes.SearchMulti): Update.
16363         (Attributes.GetClsCompliantAttribute): Remove.
16364         (Attributes.GetIndexerNameAttribute): Remove.
16365         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
16366         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
16367         * class.cs (Indexer.Define): Likewise.
16368
16369 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
16370
16371         Fix bug #68790
16372         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
16373         MarshallByReference members access.
16374
16375         * expression.cs: Use CheckMarshallByRefAccess;
16376         Better error CS0197 message.
16377
16378         * report.cs: Print whole related error message.
16379
16380 2004-11-30  Raja R Harinath  <rharinath@novell.com>
16381
16382         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
16383         the current directory to help debugging.
16384
16385 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16386
16387         * class (GetClassBases): Better error 60 report.
16388         (EventProperty): Disabled warning 67 detection.
16389
16390 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16391
16392         Fix bug #60324
16393         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
16394
16395         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
16396         precise values.
16397
16398 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16399
16400         Fix bug #49488
16401         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
16402
16403         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
16404
16405 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
16406
16407         * attribute.cs (Attribute.Resolve): Refine error reporting and
16408         report a cs0117 if the identifier does not exist, to distinguish
16409         from 0617 which is a miss-use of the actual identifier.
16410
16411         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
16412         between cs0070 and cs0079.
16413
16414         * class.cs (MemberBase.DoDefine): When reporting a wrong
16415         accessibility level, we use MethodCore to compare instead of
16416         Method (this was a regression in some refactoring effort).
16417
16418         So now we correctly report cs0056 again.
16419
16420         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
16421         testing the target_type (which was known to be object_type) and
16422         not the source type (which is anonymous_method).
16423
16424         Fixed reporting of error cs1660.
16425
16426         * expression.cs (UserCast.Source): Expose the underlying cast.
16427
16428         * statement.cs (Switch.SwitchGoverningType): Sort the list of
16429         allowed types to find a match to int32 first (most common).
16430
16431         In addition, it ignores any ImplicitUserConversions that did an
16432         internal implicit conversion (as the switch statement allows only
16433         one integral conversion to exist).
16434
16435         * class.cs (PartialContainer.Create): rename `name' to
16436         `member_name' for clarity.  Then replace the string calls with a
16437         call to MemberName.GetPartialName, as now using
16438         MemberName.ToString is an error (this is due to the side effects
16439         it had, that were fixed in the past).
16440
16441         This will restore the error reporting on a number of partial class
16442         errors that were missusing this (and getting an exception as a
16443         results, which is now just a plain textual warning, because
16444         yyparse debug output would crash otherwise).
16445
16446 2004-11-26  Raja R Harinath  <rharinath@novell.com>
16447
16448         * Makefile (PROGRAM_INSTALL_DIR): Remove.
16449
16450 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16451
16452         * rootcontext.cs (LookupType): Make sure to cache lookups that
16453         don't give us a negative result. This saves about 5% of corlib
16454         compilation time.
16455
16456 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16457
16458         * report.cs (AbstractMessage.Print): messages are sent to stderr
16459
16460         * class.cs (TypeContainer.GetClassBases): It is an error to have a
16461         non-interface in the list of interfaces (at this point, either
16462         parent was properly set, or a base class is being listed in the
16463         interfaces section).
16464
16465         This flags error 1722, and resolves the crash from bug 69259.
16466
16467 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16468
16469         * statement.cs (Using.EmitExpressionFinally): make this work right
16470         for valuetypes. Fixes 69926.
16471
16472 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16473
16474         * const.cs (Const.ChangeType): Cope with the "0 literal can be
16475         converted to an enum" here, before we try to change the underlying
16476         type.  This code exists, but it is a different code path than the
16477         one used while encoding constants.
16478
16479         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
16480         old bug: when converting from the null literal to a pointer,
16481         return an EmptyCast, not the NullLiteral.
16482
16483         This fixes #69921, the recent null_type changes probably made this
16484         bug more prominent.
16485
16486         (ImplicitReferenceConversionExists): In addition, resynchronized
16487         the code here, so it matches the same code in
16488         ImplicitReferenceConversionExists for the `from any class-type S
16489         to any interface-type T'.
16490         
16491
16492 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
16493
16494         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
16495
16496 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
16497
16498         * cs-parser.jay: Use verbosity accordingly. 
16499
16500 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16501
16502         * expression.cs (Unary.ResolveOperator): Do not report warning;
16503         AddressOf reads from variable.
16504         
16505         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
16506
16507 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16508
16509         Fix bug #69462
16510
16511         * attribute.cs (Attributable): Removed CheckTargets.
16512         (Attributes.Emit): Explicit attribute targets are tested here.
16513
16514         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
16515         not enabled for interfaces.
16516
16517         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
16518         (GetAssemblyName): Ouch next bug there.
16519
16520 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16521
16522         * expression.cs: Error 275 added.
16523         
16524 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
16525
16526         Fix bug #69177 (Implemented decimal constant support)
16527
16528         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
16529         (BinaryFold): Add DecimalConstant.
16530
16531         * const.cs (Define): Decimal constant 
16532         (is not constant.
16533         (ChangeType): Add decimal type handling.
16534         (LookupConstantValue): Don't set value for decimal type but
16535         emit DecimalConstantAttribute. Needed for constant optimization.
16536
16537         * constant.cs (ToDecimal): New method.
16538         (ConvertToDecimal): New method.
16539         (IntConstant): Implemented ConvertToDecimal.
16540         (DecimalConstant.Emit): Emit optimized version for decimals in
16541         int range.
16542
16543         * expression.cs (ResolveOperator): Changed order of constant
16544         reduction to work correctly with native types which have
16545         overloaded operators.
16546         (ResolveMemberAccess): Extract constant value from attribute
16547         for decimal type.
16548
16549         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
16550
16551         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
16552         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
16553         (ChangeType): Decimal is special.
16554         (TypeToCoreType): Add decimal type.
16555
16556 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16557
16558         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
16559         decimal types.
16560
16561 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16562
16563         * class.cs (EventField.ApplyAttributeBuilder): Fix error
16564         test cs1667-5.cs.
16565
16566 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16567
16568         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
16569
16570         * pending.cs (PendingImplementation): Grab only interfaces.
16571
16572 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16573
16574         * statement.cs (ForeachHelperMethods): Add location member and
16575         error 202 detection.
16576
16577 2004-11-19  Raja R Harinath  <rharinath@novell.com>
16578
16579         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
16580         automatically handled by executable.make.
16581         (PROGRAM): Make profile-specific.
16582
16583 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
16584
16585         * expression.cs (DoResolveBase): Fixed wrong warning for out
16586         variables.
16587
16588 2004-11-18  Martin Baulig  <martin@ximian.com>
16589
16590         Merged latest changes into gmcs.  Please keep this comment in
16591         here, it makes it easier for me to see what changed in MCS since
16592         the last time I merged.
16593
16594 2004-11-17  Raja R Harinath  <rharinath@novell.com>
16595
16596         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
16597         (TypeHandle.GetMemberCache): New.
16598         (TypeHandle.TypeHandle): Update.
16599         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
16600         (TypeManager.LookupParentInterfacesCache):
16601         Rename from LookupInterfaceCache.  Optimize slightly.
16602         (TypeManager.MemberLookup_FindMembers): Update.
16603         * decl.cs (MemberCache.MemberCache): Set Container to null in the
16604         multi-type variant.
16605         (AddCacheContents): Rename from AddHashtable.
16606         * class.cs (TypeContainer.parent_container): Remove.
16607         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
16608         (TypeContainer.DoDefineMembers): Don't initialize it.
16609         Update to name changes.
16610         
16611 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
16612
16613         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
16614         that factors the code to check access modifiers on override.  
16615
16616         (PropertyBase): Use the code here.
16617
16618         Patch from Lluis S'anchez, fixes bug #69361.
16619
16620 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16621
16622         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16623         routine that is used to report the use of a captured variable
16624         whose address has been taken.
16625
16626         There are two checks: one when variables are being captured and
16627         the other check is when the address of a variable is taken. 
16628         
16629         (because an anonymous methods might be resolved before *or* after
16630         the address has been taken) and 
16631
16632         * expression.cs (Conditional.DoResolve): Remove the special
16633         casing that Martin added to trueExpr and falseExpr being both
16634         NullLiteral.  We get the right behavior now just by introducing
16635         the null_type into the compiler. 
16636
16637         * convert.cs (ExplicitConversion): Change the code to use
16638         null_type instead of testing `expr is NullLiteral'.
16639         (ImplicitConversionStandard): use null_type too.
16640         (ImplicitReferenceConversionExists): use null_type too.
16641         (ImplicitReferenceConversion): use null_type too.
16642
16643         * literal.cs: The type of `NullLiteral' is now null_type instead
16644         of object_type. 
16645         (Resolve): Set the type here.
16646
16647         * typemanager.cs: Introduce null_type.
16648
16649 2004-11-17  Martin Baulig  <martin@ximian.com>
16650
16651         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16652         direction, like FindMembers() does.  Fixes #69546, testcase is in
16653         test-315.cs.    
16654
16655 2004-11-16  Martin Baulig  <martin@ximian.com>
16656
16657         This is based on a patch from Marek Safar, see bug #69082.
16658         Fixes bugs #63705 and #67130.
16659
16660         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16661         method; create a MemberCache for an interface type and cache the
16662         result.
16663
16664         * decl.cs (IMemberContainer.ParentContainer): Removed.
16665         (IMemberContainer.ParentCache): New property.
16666         (MemberCache.SetupCacheForInterface): Removed.
16667         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16668         to create a cache for an interface's "parent".
16669
16670         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16671         interfaces too.
16672
16673 2004-11-16  Martin Baulig  <martin@ximian.com>
16674
16675         Merged back from gmcs; these changes already went into gmcs a
16676         couple of weeks ago.
16677
16678         * typemanager.cs
16679         (TypeManager.AddUserType): Removed the `ifaces' argument.
16680         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16681         `TypeExpr []'.
16682         (TypeManager.AddUserInterface): Removed.
16683         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16684         `TypeExpr []'.
16685         (TypeManager.GetInterfaces): Likewise.
16686         (TypeManager.GetExplicitInterfaces): Likewise.
16687
16688         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16689
16690         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16691         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16692
16693 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16694
16695         * statement.cs: Avoid adding bools to a hashtable.
16696
16697 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16698
16699         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16700         calling an unsafe method from a safe location.
16701
16702 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16703
16704         Fix #69167
16705         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16706
16707 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16708
16709         * namespace.cs (VerifyUsing): use GetPartialName instead of
16710         ToString. 
16711
16712 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16713
16714         * statement.cs (Return.Resolve): Fix regression in typo: if
16715         `in_exc', we have to request a NeedReturnLabel, this was a typo
16716         introduced in the anonymous method check-in.  Fixes #69131.
16717
16718         * Indexers were using the ShortName when defining themselves,
16719         causing a regression in the compiler bootstrap when applying the
16720         patch from 2004-11-02 (first part), now they use their full name
16721         and the bug is gone.
16722
16723 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16724
16725         * driver.cs: Strip the path from the names of embedded resources. Fixes
16726         #68519.
16727
16728 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16729
16730         Fix error message regression: cs0104-2.cs.
16731         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16732         (AliasEntry.Resolve): Update.
16733         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16734         'silent' flag.
16735         (RootContext.LookupType): Update.
16736
16737 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16738
16739         * cs-parser.jay: Add support for handling accessor modifiers
16740         * class: Add support port accessor modifiers and error checking,
16741         define PropertyMethod.Define as virtual (not abstract anymore)
16742         * ecore.cs: Add checking for proeprties access with access modifiers
16743         * iterators.cs: Modify Accessor constructor call based in the modified
16744         constructor
16745 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16746
16747         * expression.cs (StringConcat): Handle being called twice,
16748         as when we have a concat in a field init with more than two
16749         ctors in the class
16750
16751 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16752
16753         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16754         special case explicit implementations, we should always produce
16755         the .property or .event declaration.
16756         
16757         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16758         since it will not return correct data if people use this
16759         unresolved in the presence of using statements (see test-313).
16760
16761         * class.cs (MethodData.Define): If we are an explicit interface
16762         implementation, set the method name to the full name of the
16763         interface plus the name of the method.  
16764
16765         Notice that using the method.MethodName.GetFullName() does not
16766         work, as it will only contain the name as declared on the source
16767         file (it can be a shorthand in the presence of using statements)
16768         and not the fully qualifed type name, for example:
16769
16770         using System;
16771
16772         class D : ICloneable {
16773                 object ICloneable.Clone ()  {
16774                 }
16775         }
16776
16777         Would produce a method called `ICloneable.Clone' instead of
16778         `System.ICloneable.Clone'.
16779
16780         * namespace.cs (Alias.Resolve): Use GetPartialName.
16781         
16782 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16783
16784         * cs-parser.jay: Add error 1055 report.
16785
16786 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16787
16788         * assign.cs (Assign.DoResolve): Only do the transform of
16789         assignment into a New if the types are compatible, if not, fall
16790         through and let the implicit code deal with the errors and with
16791         the necessary conversions. 
16792
16793 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16794
16795         * cs-parser.jay: Add error 1031 report.
16796
16797         * cs-tokenizer.cs: Add location for error 1038.
16798
16799 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16800
16801         * cs-parser.jay: Add error 1016 report.
16802
16803 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16804
16805         * cs-parser.jay: Add errors 1575,1611 report.
16806
16807 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16808
16809         * cs-parser.jay: Add error 1001 report.
16810
16811 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16812
16813         Fix #68850
16814         * attribute.cs (GetMarshal): Add method argument for
16815         caller identification.
16816
16817         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16818         agument for GetMarshal and RuntimeMissingSupport.
16819
16820 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16821
16822         * attribute.cs (ExtractSecurityPermissionSet): Removed
16823         TypeManager.code_access_permission_type.
16824
16825         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16826
16827 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16828
16829         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16830         for obsolete use of a variable here.   Fixes regression on errors
16831         cs0619-25 and cs0619-26.
16832
16833 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16834
16835         Fix #62358, implemented security attribute encoding.
16836
16837         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16838         Tests permitted SecurityAction for assembly or other types.
16839         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16840         data from SecurityPermissionAttribute to PermisionSet class.
16841
16842         * class.cs (ApplyAttributeBuilder): Added special handling
16843         for System.Security.Permissions.SecurityAttribute based types.
16844
16845         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16846         special handling for System.Security.Permissions.SecurityAttribute
16847         based types.
16848
16849         * enum.cs (ApplyAttributeBuilder): Added special handling
16850         for System.Security.Permissions.SecurityAttribute based types.
16851
16852         * parameter.cs (ApplyAttributeBuilder): Added special handling
16853         for System.Security.Permissions.SecurityAttribute based types.
16854
16855         * rootcontext.cs: Next 2 core types.
16856
16857         * typemanager.cs (TypeManager.security_permission_attr_type):
16858         Built in type for the SecurityPermission Attribute.
16859         (code_access_permission_type): Build in type.
16860
16861 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16862
16863         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16864         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16865         all of this information into
16866         EmitContext.EmitCapturedVariableInstance.
16867         
16868         * codegen.cs (EmitCapturedVariableInstance): move here the
16869         funcionality of emitting an ldarg.0 in the presence of a
16870         remapping.   This centralizes the instance emit code.
16871
16872         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16873         then emit a load of this: it means that we have reached the
16874         topmost ScopeInfo: the one that contains the pointer to the
16875         instance of the class hosting the anonymous method.
16876
16877         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16878         captures to the topmost CaptureContext.
16879
16880 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16881
16882         * expression.cs (LocalVariableReference): Move the knowledge about
16883         the iterators into codegen's EmitCapturedVariableInstance.
16884
16885 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16886
16887         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16888         all code paths return a value from an anonymous method (it is the
16889         same as the 161 error, but for anonymous methods).
16890
16891 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16892
16893         The introduction of anonymous methods in the compiler changed
16894         various ways of doing things in the compiler.  The most
16895         significant one is the hard split between the resolution phase
16896         and the emission phases of the compiler.
16897
16898         For instance, routines that referenced local variables no
16899         longer can safely create temporary variables during the
16900         resolution phase: they must do so from the emission phase,
16901         since the variable might have been "captured", hence access to
16902         it can not be done with the local-variable operations from the runtime.
16903         
16904         * statement.cs 
16905
16906         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16907         is a toplevel block.
16908
16909         (ToplevelBlock): A new kind of Block, these are the blocks that
16910         are created by the parser for all toplevel method bodies.  These
16911         include methods, accessors and anonymous methods.
16912
16913         These contain some extra information not found in regular blocks:
16914         A pointer to an optional CaptureContext (for tracking captured
16915         local variables and parameters).  A pointer to the parent
16916         ToplevelBlock.
16917         
16918         (Return.Resolve): Catch missmatches when returning a value from an
16919         anonymous method (error 1662).
16920         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16921         phase.
16922
16923         (Break.Resolve): ditto.
16924
16925         (SwitchLabel): instead of defining the labels during the
16926         resolution phase, we now turned the public ILLabel and ILLabelCode
16927         labels into methods called GetILLabelCode() and GetILLabel() that
16928         only define the label during the Emit phase.
16929
16930         (GotoCase): Track the SwitchLabel instead of the computed label
16931         (its contained therein).  Emit the code by using
16932         SwitchLabel.GetILLabelCode ().
16933
16934         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16935         whether the Local has been captured or not.
16936
16937         (LocalInfo.IsCaptured): New property, used to tell whether the
16938         local has been captured.
16939         
16940         * anonymous.cs: Vastly updated to contain the anonymous method
16941         support.
16942
16943         The main classes here are: CaptureContext which tracks any
16944         captured information for a toplevel block and ScopeInfo used to
16945         track the activation frames for various local variables.   
16946
16947         Each toplevel block has an optional capture context associated
16948         with it.  When a method contains an anonymous method both the
16949         toplevel method and the anonymous method will create a capture
16950         context.   When variables or parameters are captured, they are
16951         recorded on the CaptureContext that owns them, for example:
16952
16953         void Demo () {
16954              int a;
16955              MyDelegate d = delegate {
16956                  a = 1;
16957              }
16958         }
16959
16960         Here `a' will be recorded as captured on the toplevel
16961         CapturedContext, the inner captured context will not have anything
16962         (it will only have data if local variables or parameters from it
16963         are captured in a nested anonymous method.
16964
16965         The ScopeInfo is used to track the activation frames for local
16966         variables, for example:
16967
16968         for (int i = 0; i < 10; i++)
16969                 for (int j = 0; j < 10; j++){
16970                    MyDelegate d = delegate {
16971                         call (i, j);
16972                    }
16973                 }
16974
16975         At runtime this captures a single captured variable `i', but it
16976         captures 10 different versions of the variable `j'.  The variable
16977         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16978         recorded on a child.  
16979
16980         The toplevel ScopeInfo will also track information like the `this'
16981         pointer if instance variables were referenced (this is necessary
16982         as the anonymous method lives inside a nested class in the host
16983         type of the method). 
16984
16985         (AnonymousMethod): Expanded to track the Toplevel, implement
16986         `AnonymousMethod.Compatible' to tell whether an anonymous method
16987         can be converted to a target delegate type. 
16988
16989         The routine now also produces the anonymous method content
16990
16991         (AnonymousDelegate): A helper class that derives from
16992         DelegateCreation, this is used to generate the code necessary to
16993         produce the delegate for the anonymous method that was created. 
16994
16995         * assign.cs: API adjustments for new changes in
16996         Convert.ImplicitStandardConversionExists.
16997
16998         * class.cs: Adjustments to cope with the fact that now toplevel
16999         blocks are of type `ToplevelBlock'. 
17000
17001         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
17002         insteda of standard blocks.
17003
17004         Flag errors if params arguments are passed to anonymous methods.
17005
17006         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
17007         `CurrentAnonymousMethod' which points to the current Anonymous
17008         Method.  The variable points to the AnonymousMethod class that
17009         holds the code being compiled.  It is set in the new EmitContext
17010         created for the anonymous method.
17011
17012         (EmitContext.Phase): Introduce a variable and an enumeration to
17013         assist in enforcing some rules about when and where we are allowed
17014         to invoke certain methods (EmitContext.NeedsReturnLabel is the
17015         only one that enfonces this right now).
17016
17017         (EmitContext.HaveCaptureInfo): new helper method that returns
17018         whether we have a CapturedContext initialized.
17019
17020         (EmitContext.CaptureVariable): New method used to register that a
17021         LocalInfo must be flagged for capturing. 
17022
17023         (EmitContext.CapturedParameter): New method used to register that a
17024         parameters must be flagged for capturing. 
17025         
17026         (EmitContext.CapturedField): New method used to register that a
17027         field must be flagged for capturing. 
17028
17029         (EmitContext.HaveCapturedVariables,
17030         EmitContext.HaveCapturedFields): Return whether there are captured
17031         variables or fields. 
17032
17033         (EmitContext.EmitMethodHostInstance): This is used to emit the
17034         instance for the anonymous method.  The instance might be null
17035         (static methods), this (for anonymous methods that capture nothing
17036         and happen to live side-by-side with the current method body) or a
17037         more complicated expression if the method has a CaptureContext.
17038
17039         (EmitContext.EmitTopBlock): Routine that drives the emission of
17040         code: it will first resolve the top block, then emit any metadata
17041         and then emit the code.  The split is done so that we can extract
17042         any anonymous methods and flag any captured variables/parameters.
17043         
17044         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
17045         during this phase, the ILGenerator should not be used as labels
17046         and local variables declared here might not be accessible to any
17047         code that is part of an anonymous method.  
17048
17049         Exceptions to this include the temporary variables that are
17050         created by some statements internally for holding temporary
17051         variables. 
17052         
17053         (EmitContext.EmitMeta): New routine, in charge of emitting all the
17054         metadata for a cb
17055
17056         (EmitContext.TemporaryReturn): This method is typically called
17057         from the Emit phase, and its the only place where we allow the
17058         ReturnLabel to be defined other than the EmitMeta.  The reason is
17059         that otherwise we would have to duplicate a lot of logic in the
17060         Resolve phases of various methods that today is on the Emit
17061         phase. 
17062
17063         (EmitContext.NeedReturnLabel): This no longer creates the label,
17064         as the ILGenerator is not valid during the resolve phase.
17065
17066         (EmitContext.EmitThis): Extended the knowledge in this class to
17067         work in anonymous methods in addition to iterators. 
17068
17069         (EmitContext.EmitCapturedVariableInstance): This emits whatever
17070         code is necessary on the stack to access the instance to a local
17071         variable (the variable will be accessed as a field).
17072
17073         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
17074         EmitContext.EmitAddressOfParameter): Routines to support
17075         parameters (not completed at this point). 
17076         
17077         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
17078         will also remove the parameters.
17079
17080         * convert.cs (Convert): Define a `ConstantEC' which points to a
17081         null.  This is just to prefity some code that uses
17082         ImplicitStandardConversion code and do not have an EmitContext
17083         handy.
17084
17085         The idea is to flag explicitly that at that point in time, it is
17086         known that the conversion will not trigger the delegate checking
17087         code in implicit conversions (which requires a valid
17088         EmitContext). 
17089
17090         Everywhere: pass new EmitContext parameter since
17091         ImplicitStandardConversionExists now requires it to check for
17092         anonymous method conversions. 
17093
17094         (Convert.ImplicitStandardConversionExists): If the type of an
17095         expression is the anonymous_method_type, and the type is a
17096         delegate, we invoke the AnonymousMethod.Compatible method to check
17097         whether an implicit conversion is possible. 
17098
17099         (Convert.ImplicitConversionStandard): Only do implicit method
17100         group conversions if the language level is not ISO_1.
17101
17102         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
17103         MethodInfo for the Invoke method.  used by Delegate and
17104         AnonymousDelegate.
17105
17106         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
17107         method conversions if the target type is a delegate.
17108
17109         Removed extra debugging nops.
17110
17111         (LocalVariableReference): Turn the `local_info' into a public
17112         field. 
17113
17114         Add `prepared' field, the same hack used for FieldExprs to cope
17115         with composed assignments, as Local variables do not necessarily
17116         operate purely on the stack as they used to: they can be captured
17117         fields. 
17118
17119         Add `temp' for a temporary result, like fields.
17120
17121         Refactor DoResolve and DoResolveLValue into DoResolveBase.
17122
17123         It now copes with Local variables that are captured and emits the
17124         proper instance variable to load it from a field in the captured
17125         case. 
17126
17127         (ParameterReference.DoResolveBase): During the resolve phase,
17128         capture parameters if we are in an anonymous method.
17129
17130         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
17131         anonymous method, use the EmitContext helper routines to emit the
17132         parameter reference.
17133
17134         * iterators.cs: Set RemapToProxy to true/false during the
17135         EmitDispose class.
17136
17137         * parameters.cs (GetParameterByName): New helper method. 
17138
17139         * typemanager.cs (anonymous_method_type) a new type that
17140         represents an anonyous method.  This is always an internal type,
17141         used as a fencepost to test against the anonymous-methodness of an
17142         expression. 
17143         
17144 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
17145
17146         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
17147         561 report.
17148         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
17149
17150 2004-10-18  Martin Baulig  <martin@ximian.com>
17151
17152         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
17153         `Type' directly, but call ResolveType() on it.
17154         (Catch.Resolve): Likewise.
17155         (Foreach.Resolve): Likewise.
17156
17157 2004-10-18  Martin Baulig  <martin@ximian.com>
17158
17159         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
17160         `Type' directly, but call ResolveType() on it.
17161         (Probe.DoResolve): Likewise.
17162         (ArrayCreation.LookupType): Likewise.
17163         (TypeOf.DoResolve): Likewise.
17164         (SizeOf.DoResolve): Likewise.
17165
17166 2004-10-18  Martin Baulig  <martin@ximian.com>
17167
17168         * expression.cs (Invocation.BetterFunction): Put back
17169         TypeManager.TypeToCoreType().
17170
17171 2004-10-18  Raja R Harinath  <rharinath@novell.com>
17172
17173         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
17174         the ResolveType.
17175
17176 2004-10-18  Martin Baulig  <martin@ximian.com>
17177
17178         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
17179         `Type' directly, but call ResolveType() on it.
17180
17181 2004-10-18  Martin Baulig  <martin@ximian.com>
17182
17183         * class.cs (FieldMember.Define): Don't access the TypeExpr's
17184         `Type' directly, but call ResolveType() on it.
17185         (MemberBase.DoDefine): Likewise.
17186
17187         * expression.cs (New.DoResolve): Don't access the TypeExpr's
17188         `Type' directly, but call ResolveType() on it.
17189         (ComposedCast.DoResolveAsTypeStep): Likewise.
17190
17191         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
17192         `Type' directly, but call ResolveType() on it.
17193
17194 2004-10-17  John Luke  <john.luke@gmail.com>
17195
17196         * class.cs (Operator.GetSignatureForError): use CSharpName
17197
17198         * parameter.cs (Parameter.GetSignatureForError): Returns
17199         correct name even if was not defined.
17200
17201 2004-10-13  Raja R Harinath  <rharinath@novell.com>
17202
17203         Fix #65816.
17204         * class.cs (TypeContainer.EmitContext): New property.
17205         (DefineNestedTypes): Create an emitcontext for each part.
17206         (MethodCore.DoDefineParameters): Use container's emitcontext.
17207         Pass type array to InternalParameters.
17208         (MemberBase.DoDefine): Use container's emitcontext.
17209         (FieldMember.Define): Likewise.
17210         (Event.Define): Likewise.
17211         (SetMethod.GetParameterInfo): Change argument to EmitContext.
17212         Pass type array to InternalParameters.
17213         (SetIndexerMethod.GetParameterInfo): Likewise.
17214         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
17215         * delegate.cs (Define): Pass emitcontext to
17216         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
17217         array to InternalParameters.
17218         * expression.cs (ParameterReference.DoResolveBase): Pass
17219         emitcontext to GetParameterInfo.
17220         (ComposedCast.DoResolveAsTypeStep): Remove check on
17221         ec.ResolvingTypeTree.
17222         * parameter.cs (Parameter.Resolve): Change argument to
17223         EmitContext.  Use ResolveAsTypeTerminal.
17224         (Parameter.GetSignature): Change argument to EmitContext.
17225         (Parameters.ComputeSignature): Likewise.
17226         (Parameters.ComputeParameterTypes): Likewise.
17227         (Parameters.GetParameterInfo): Likewise.
17228         (Parameters.ComputeAndDefineParameterTypes): Likewise.
17229         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
17230         * support.cs (InternalParameters..ctor): Remove variant that takes
17231         a DeclSpace.
17232         * typemanager.cs (system_intptr_expr): New.
17233         (InitExpressionTypes): Initialize it.
17234
17235 2004-10-12  Chris Toshok  <toshok@ximian.com>
17236
17237         * cs-parser.jay: fix location for try_statement and catch_clause.
17238
17239 2004-10-11  Martin Baulig  <martin@ximian.com>
17240
17241         * report.cs: Don't make --fatal abort on warnings, we have
17242         -warnaserror for that.
17243
17244 2004-10-07  Raja R Harinath  <rharinath@novell.com>
17245
17246         More DeclSpace.ResolveType avoidance.
17247         * decl.cs (MemberCore.InUnsafe): New property.
17248         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
17249         with newly created EmitContext.
17250         (FieldMember.Define): Likewise.
17251         * delegate.cs (Delegate.Define): Likewise.
17252         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
17253         only if normal name-lookup fails.
17254         (TypeExpr.DoResolve): Enable error-checking.
17255         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
17256         (SizeOf.DoResolve): Likewise.
17257         (ComposedCast.DoResolveAsTypeStep): Likewise.
17258         (StackAlloc.DoResolve): Likewise.
17259         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
17260         (Block.Unsafe): New property.
17261         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
17262         (Unsafe): Set 'unsafe' flag of contained block.
17263         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
17264         (Fixed.Resolve): Likewise.
17265         (Catch.Resolve): Likewise.
17266         (Using.ResolveLocalVariableDecls): Likewise.
17267         (Foreach.Resolve): Likewise.
17268
17269 2004-10-05  John Luke <john.luke@gmail.com>
17270
17271         * cs-parser.jay: add location to error CS0175
17272
17273 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
17274
17275         * ecore.cs (Expression.Constantity): Add support for turning null
17276         into a constant.
17277
17278         * const.cs (Const.Define): Allow constants to be reference types
17279         as long as the value is Null.
17280
17281 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
17282
17283         * namespace.cs (NamespaceEntry.Using): No matter which warning
17284         level is set, check if this namespace name has already been added.
17285
17286 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
17287
17288         * expression.cs: reftype [!=]= null should always use br[true,false].
17289         # 67410
17290
17291 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
17292
17293         Fix #67108
17294         * attribute.cs: Enum conversion moved to 
17295         GetAttributeArgumentExpression to be applied to the all
17296         expressions.
17297
17298 2004-10-01  Raja R Harinath  <rharinath@novell.com>
17299
17300         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
17301         * class.c (TypeContainer.DefineType): Flag error if
17302         base types aren't accessible due to access permissions.
17303         * decl.cs (DeclSpace.ResolveType): Move logic to
17304         Expression.ResolveAsTypeTerminal.
17305         (DeclSpace.ResolveTypeExpr): Thin layer over
17306         Expression.ResolveAsTypeTerminal.
17307         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
17308         Refactor code into NestedAccess.  Use it.
17309         (DeclSpace.NestedAccess): New.
17310         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
17311         argument to silence errors.  Check access permissions.
17312         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
17313         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
17314         (Cast.DoResolve): Likewise.
17315         (New.DoResolve): Likewise.
17316         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
17317         (TypeOf.DoResolve): Likewise.
17318
17319         * expression.cs (Invocation.BetterConversion): Return the Type of
17320         the better conversion.  Implement section 14.4.2.3 more faithfully.
17321         (Invocation.BetterFunction): Make boolean.  Make correspondence to
17322         section 14.4.2.2 explicit.
17323         (Invocation.OverloadResolve): Update.
17324         (Invocation): Remove is_base field.
17325         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
17326         (Invocation.Emit): Likewise.
17327
17328 2004-09-27  Raja R Harinath  <rharinath@novell.com>
17329
17330         * README: Update to changes.
17331
17332 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
17333
17334         * cs-parser.jay: Reverted 642 warning fix.
17335
17336 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17337
17338         Fix bug #66615
17339         * decl.cs (FindMemberWithSameName): Indexer can have more than
17340         1 argument.
17341
17342 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17343
17344         * expression.cs (LocalVariableReference.DoResolveLValue):
17345         Do not report warning 219 for out values.
17346         (EmptyExpression.Null): New member to avoid extra allocations.
17347
17348 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17349
17350         * cs-parser.jay: Fix wrong warning 642 report.
17351
17352         * cs-tokenizer.cs (CheckNextToken): New helper;
17353         Inspect next character if is same as expected.
17354
17355 2004-09-23  Martin Baulig  <martin@ximian.com>
17356
17357         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
17358         (Convert.ImplicitReferenceConversionExists): Likewise.
17359
17360 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17361
17362         * class.cs (Operator.Define): Add error 448 and 559 report.
17363
17364 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17365
17366         * class.cs (MemberBase.IsTypePermitted): New protected
17367         method for checking error CS0610.
17368
17369 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17370
17371         * class.cs (TypeContainer.HasExplicitLayout): New property
17372         Returns whether container has StructLayout attribute set Explicit.
17373         (FieldMember): New abstract class for consts and fields.
17374         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
17375         (Field): Reuse FieldMember.
17376
17377         * const.cs (Const): Reuse FieldMember.
17378
17379         * rootcontext.cs: EmitConstants call moved to class.
17380
17381 2004-09-22  Martin Baulig  <martin@ximian.com>
17382
17383         Thanks to Peter Sestoft for this bug report.
17384
17385         * expression.cs (Conditional): If both the `trueExpr' and the
17386         `falseExpr' is a NullLiteral, return a NullLiteral.
17387
17388 2004-09-22  Martin Baulig  <martin@ximian.com>
17389
17390         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
17391         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
17392         for the "get_Current" call.
17393
17394 2004-09-22  Martin Baulig  <martin@ximian.com>
17395
17396         Marek and me just fixed one of our oldest bugs: #28562 :-)
17397
17398         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
17399
17400         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
17401         we're an EnumConstant, just return that.
17402         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
17403         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
17404         to get the value which'll actually be written into the attribute.
17405         However, we have to use GetValue() to access the attribute's value
17406         in the compiler.        
17407
17408 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17409
17410         * constant.cs (Constant.IsNegative): New abstract property
17411         IsNegative.
17412
17413         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
17414         (StackAlloc.DoResolve): Reused IsNegative.
17415
17416 2004-09-21  Martin Baulig  <martin@ximian.com>
17417
17418         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
17419         if we're used in an iterator, we may be called from different
17420         methods.
17421
17422         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
17423         we actually have an exception block.
17424
17425 2004-09-20  John Luke <jluke@cfl.rr.com>
17426
17427         * class.cs, cs-parser.jay: Improve the error report for 1520:
17428         report the actual line where the error happens, not where the
17429         class was declared.
17430
17431         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
17432         Pass location information that was available elsewhere.
17433
17434 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
17435
17436         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
17437         runtime to delay sign assemblies.
17438
17439 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17440
17441         * cs-parser.jay: Do not report the stack trace, this is barely
17442         used nowadays.
17443
17444 2004-08-22  John Luke  <john.luke@gmail.com>
17445  
17446         * driver.cs : check that a resource id is not already used
17447         before adding it, report CS1508 if it is, bug #63637
17448
17449 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17450
17451         * ecore.cs: Removed dead code.
17452
17453 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
17454
17455         * class.cs: Do not report warning CS0067 on the interfaces.
17456
17457 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17458
17459         * cs-parser.jay: Add error 504 report.
17460
17461 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17462
17463         * rootcontext.cs: WarningLevel is 4 by default now.
17464
17465         * statement.cs (Fixed.Resolve): Do not null
17466         VariableInfo.
17467
17468 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17469
17470         Fixed bug #55780
17471         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
17472         deep search when property is not virtual.
17473         (PropertyExpr.ResolveAccessors): Make one call for both
17474         accessors.
17475
17476 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17477
17478         Fixed bug #65766
17479         * statement.cs: Error 152 report constains also location.
17480
17481 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17482
17483         Fixed bug #65766
17484         * const.cs: Explicitly set constant as static.
17485
17486 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17487
17488         Fixed bug #64226
17489         * cs-parser.jay: Add error 1017 report.
17490
17491 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17492
17493         Fixed bug #59980, #64224
17494         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
17495
17496         * typemanager.cs (IsSpecialMethod): Simplified
17497
17498 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17499
17500         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
17501         condition with better params.
17502
17503 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17504
17505         Fixed bug #65238
17506         * attribute.cs (Resolve): Property has to have both
17507         accessors.
17508
17509 2004-09-14  Martin Baulig  <martin@ximian.com>
17510
17511         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
17512
17513 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17514
17515         Fixed bug #61902
17516         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
17517         called and is obsolete then this member suppress message
17518         when call is inside next [Obsolete] method or type.
17519
17520         * expression.cs: Use TestObsoleteMethodUsage member.
17521
17522 2004-09-14  Martin Baulig  <martin@ximian.com>
17523
17524         * cs-parser.jay: Sync a bit with the GMCS version.
17525
17526 2004-09-14  Martin Baulig  <martin@ximian.com>
17527
17528         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
17529         (CSharpParser.yacc_verbose_flag): New public field.
17530
17531         * genericparser.cs: Removed.
17532
17533 2004-09-14  Raja R Harinath  <rharinath@novell.com>
17534
17535         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
17536
17537 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
17538
17539         * class.cs (MethodCore.CheckBase): Fix bug #65757.
17540
17541 2004-09-10  Martin Baulig  <martin@ximian.com>
17542
17543         Backported my MemberName changes from GMCS into MCS.
17544
17545         - we are now using a special `MemberName' class instead of using
17546         strings; in GMCS, the `MemberName' also contains the type
17547         arguments.
17548
17549         - changed the grammar rules a bit:
17550           * the old `member_name' is now a `namespace_or_type_name':
17551             The rule is that we use `namespace_or_type_name' everywhere
17552             where we expect either a "member name" (GetEnumerator) or a
17553             "member name" with an explicit interface name
17554             (IEnumerable.GetEnumerator).
17555             In GMCS, the explicit interface name may include type arguments
17556             (IEnumerable<T>.GetEnumerator).
17557           * we use `member_name' instead of just `IDENTIFIER' for
17558             "member names":
17559             The rule is that we use `member_name' wherever a member may
17560             have type parameters in GMCS.       
17561
17562         * decl.cs (MemberName): New public class.
17563         (MemberCore.MemberName): New public readonly field.
17564         (MemberCore.ctor): Take a `MemberName' argument, not a string.
17565         (DeclSpace): Likewise.
17566
17567         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
17568         * enum.cs (Enum.ctor): Likewise.
17569
17570         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
17571         MemberName.     
17572         (AliasEntry.ctor): Take a MemberName, not an Expression.
17573         (AliasEntry.UsingAlias): Likewise.
17574
17575         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
17576         (IMethodData.MemberName): Changed type from string to MemberName.
17577         (MemberBase.ExplicitInterfaceName): Likewise.
17578         (AbstractPropertyEventMethod.SetupName): Make this private.
17579         (AbstractPropertyEventMethod.ctor): Added `string prefix'
17580         argument; compute the member name here.
17581         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
17582         on the `member.MemberName' and the `prefix'.
17583
17584         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
17585         not `type_name'.
17586         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
17587         thus, we get a `MemberName' instead of a `string'.  These
17588         declarations may have type parameters in GMCS.
17589         (interface_method_declaration, delegate_declaration): Likewise.
17590         (class_declaration, interface_declaration): Likewise.
17591         (method_header): Use `namespace_or_type_name' instead of
17592         `member_name'.  We may be an explicit interface implementation.
17593         (property_declaration, event_declaration): Likewise.
17594         (member_name): This is now just an `IDENTIFIER', not a
17595         `namespace_or_type_name'.
17596         (type_name, interface_type): Removed.
17597         (namespace_or_type_name): Return a MemberName, not an Expression.
17598         (primary_expression): Use `member_name' instead of `IDENTIFIER';
17599         call GetTypeExpression() on the MemberName to get an expression.
17600         (IndexerDeclaration.interface_type): Changed type from string to
17601         MemberName.
17602         (MakeName): Operate on MemberName's instead of string's.
17603
17604 2004-09-13  Raja R Harinath  <rharinath@novell.com>
17605
17606         Fix bug #55770.
17607         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
17608         (NamespaceEntry.Lookup): Add new argument to flag if we want the
17609         lookup to avoid symbols introduced by 'using'.
17610         * rootcontext.cs (NamespaceLookup): Update.
17611
17612 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17613
17614         * class.cs (TypeContainer.DoDefineMembers): Do not call
17615         DefineDefaultConstructor for static classes.
17616
17617 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17618
17619         * attribute.cs (Attribute.Resolve): Add error 653 report.
17620
17621         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17622         report.
17623         (Method.ApplyAttributeBuilder): Add error 685 report.
17624         (Operator.Define): Add error 564 report.
17625
17626         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17627
17628         * expression.cs (Invocation.DoResolve): Add error
17629         245 and 250 report.
17630
17631         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17632         error 674 report.
17633
17634 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17635
17636         * class.cs (ConstructorInitializer.Resolve):
17637         Wrong error number (515->516).
17638
17639 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17640
17641         * class.cs (Indexer.Define): Add error 631 report.
17642
17643 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17644
17645         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17646
17647 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17648
17649         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17650
17651 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17652
17653         * cs-parser.jay: Added error CS0241 report.
17654
17655 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17656
17657         * cs-parser.jay (fixed_statement): Introduce a scope for the
17658         declaration in the 'fixed' statement.
17659
17660 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17661
17662         * cs-parser.jay: Added CS0230 error report.
17663
17664 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17665
17666         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17667
17668 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17669
17670         * expression.cs (Argument.Resolve): Added error CS0192 and
17671         CS0199 report.
17672
17673 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17674
17675         C# 2.0 #pragma warning feature
17676
17677         * cs-tokenizer.cs (PreProcessPragma): New method; 
17678         Handles #pragma directive.
17679
17680         * report.cs (WarningRegions): New class; Support
17681         class for #pragma warning directive. It tests whether
17682         warning is enabled for a given line.
17683
17684 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17685
17686         * const.cs: Add more descriptive error report, tahnks to
17687         Sebastien. 
17688
17689 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17690
17691         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17692
17693 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17694
17695         * expression.cs: Apply patch from Ben: Remove dead code from
17696         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17697         as that code just threw an exception anwyays.
17698
17699         * const.cs: Remove the call to the turnintoconstant, for details
17700         see bug: #63144
17701         
17702         * literal.cs: The type of the null-literal is the null type;  So
17703         we use a placeholder type (literal.cs:System.Null, defined here)
17704         for it.
17705
17706         * expression.cs (Conditional.DoResolve): Remove some old code that
17707         is no longer needed, conversions have been fixed.
17708
17709         (ArrayCreationExpression.DoResolve): Return false if we fail to
17710         resolve the inner expression.
17711
17712 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17713
17714         Fix test-290.cs.
17715         * cs-parser.jay (delegate_declaration): Record a delegate
17716         declaration as a type declaration.
17717         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17718
17719 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17720
17721         * parameter.cs: Do not crash if the type can not be resolved. 
17722
17723         * expression.cs: Report errors with unsafe pointers, fixes #64896
17724
17725 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17726
17727         * expression.cs: Pointer arith always needs to do a conv.i
17728         if the operand is a long. fix 65320
17729
17730 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17731
17732         Fixed cs0619-37.cs, cs0619-38.cs
17733
17734         * enum.cs (GetObsoleteAttribute): Removed.
17735
17736         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17737         on Enum member is double staged. The first is tested member
17738         and then enum.
17739
17740 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17741
17742         Fixed #56986, #63631, #65231
17743
17744         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17745         adds member to name container.
17746         (TypeContainer.AddToTypeContainer): New method, adds type to
17747         name container.
17748         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17749         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17750         AddOperator): Simplified by reusing AddToMemberContainer.
17751         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17752         instead of field.
17753         (Method.CheckForDuplications): Fixed implementation to test all
17754         possibilities.
17755         (MemberBase): Detection whether member is explicit interface
17756         implementation is now in constructor.
17757         (MemberBase.UpdateMemberName): Handles IndexerName.
17758         (Accessor): Changed to keep also location information.
17759         (AbstractPropertyEventMethod): Is derived from MemberCore.
17760         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17761         will be emited or not.
17762         (PropertyBase.AreAccessorsDuplicateImplementation):
17763         Tests whether accessors are not in collision with some method.
17764         (Operator): Is derived from MethodCore to simplify common
17765         operations.
17766
17767         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17768         must be performed.
17769         (DeclSpace.AddToContainer): Adds the member to defined_names
17770         table. It tests for duplications and enclosing name conflicts.
17771
17772         * enum.cs (EnumMember): Clean up to reuse the base structures
17773
17774 2004-09-03  Martin Baulig  <martin@ximian.com>
17775
17776         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17777         into TypeContainer, to make partial classes work again.
17778
17779 2004-09-03  Martin Baulig  <martin@ximian.com>
17780
17781         * rootcontext.cs (RootContext.V2): Removed.
17782
17783 2004-03-23  Martin Baulig  <martin@ximian.com>
17784
17785         * expression.cs (Invocation.OverloadResolve): Added `bool
17786         may_fail' argument and use it instead of the Location.IsNull() hack.
17787
17788 2004-09-03  Martin Baulig  <martin@ximian.com>
17789
17790         Merged latest changes into gmcs.  Please keep this comment in
17791         here, it makes it easier for me to see what changed in MCS since
17792         the last time I merged.
17793
17794 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17795
17796         Fix #61128.
17797         * expression.cs (BetterConversion): Don't allow either conversion 
17798         to be null.  Remove redundant implicit conversion test when 'q ==
17799         null' -- when this function is invoked, we already know that the
17800         implicit conversion exists.
17801         (BetterFunction): Assume that 'best' is non-null.  Remove
17802         redundant reimplementation of IsApplicable when 'best' is null.
17803         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17804         number of arguments.
17805         (IsAncestralType): Extract from OverloadResolve.
17806         (OverloadResolve): Make robust to the MethodGroupExpr being
17807         unsorted.  Implement all the logic of Section 14.5.5.1, and
17808         support overloading of methods from multiple applicable types.
17809         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17810
17811         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17812         (RealError, Warning): Append type of report to related symbol.
17813
17814 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17815
17816         * enum.cs: Fixed CLS-Compliance checks for enum members.
17817         Error tests cs3008-8.cs, cs3014-8.cs
17818
17819 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17820
17821         Fixed bug #62342, #63102
17822         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17823         like ImplementMethod.
17824
17825 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17826
17827         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17828         Fixed bug #65170.
17829
17830 2004-09-02  Martin Baulig  <martin@ximian.com>
17831
17832         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17833         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17834         on the MethodBase.
17835
17836 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17837
17838         C# 2.0 Static classes implemented
17839
17840         * class.cs (TypeContainer): instance_constructors,
17841         initialized_fields, initialized_static_fields,
17842         default_constructor, base_inteface_types are protected to be
17843         accessible from StaticClass.
17844         (TypeContainer.DefineDefaultConstructor): New virtual method
17845         for custom default constructor generating
17846         (StaticClass): New class to handle "Static classes" feature.
17847
17848         * cs-parser.jay: Handle static keyword on class like instance
17849         of StaticClass.
17850
17851         * driver.cs: Added "/langversion" command line switch with two
17852         options (iso-1, default).
17853
17854 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17855
17856         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17857
17858 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17859
17860         * delegate.cs: Style.
17861
17862 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17863
17864         * delegate.cs: Add seperate instance expr field for miguel.
17865
17866 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17867
17868         * PointerArithmetic (Resolve): make sure we are not doing
17869         pointer arith on void*. Also, make sure we are resolved
17870         by not setting eclass until resolve.
17871
17872         All callers: Make sure that PointerArithmetic gets resolved.
17873
17874 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17875
17876         * ArrayCreation (LookupType): If the type does not resolve 
17877         to an array, give an error.
17878
17879 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17880
17881         * statement.cs (Try.Resolve): Fixed bug #64222
17882
17883 2004-08-27  Martin Baulig  <martin@ximian.com>
17884
17885         * class.cs
17886         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17887         crash here.     
17888
17889 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17890
17891         * ecore.cs (Constantify): Get underlying type via
17892         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17893         Windows in special cases.
17894
17895 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17896
17897         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17898         for obtaining also private methods.
17899         (GetRemoveMethod): Used GetRemoveMethod (true)
17900         for obtaining also private methods.
17901
17902 2004-08-24  Martin Baulig  <martin@ximian.com>
17903
17904         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17905         MethodAttributes.HideBySig for operators.
17906
17907 2004-08-23  Martin Baulig  <martin@ximian.com>
17908
17909         Back to the old error reporting system :-)
17910
17911         * report.cs (Message): Removed.
17912         (Report.MessageData, ErrorData, WarningData): Removed.
17913         (Report.Error, Warning): Back to the old system.
17914
17915 2004-08-23  Martin Baulig  <martin@ximian.com>
17916
17917         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17918
17919         * class.cs (TypeContainer.ParentContainer): New public virtual
17920         method; replaces the explicit interface implementation.
17921         (ClassPart.ParentContainer): Override.
17922
17923 2004-08-23  Martin Baulig  <martin@ximian.com>
17924
17925         * statement.cs (Switch): Added support for constant switches; see
17926         #59428 or test-285.cs.
17927
17928 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17929
17930         Fixed bug #62740.
17931         * statement.cs (GetEnumeratorFilter): Removed useless
17932         logic because C# specs is strict. GetEnumerator must be
17933         public.
17934
17935 2004-08-22  Martin Baulig  <martin@ximian.com>
17936
17937         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17938         a switch and may break, reset the barrier.  Fixes #59867.
17939
17940 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17941
17942         CLS-Compliance speed up (~5% for corlib)
17943
17944         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17945         New method. Tests container for CLS-Compliant names
17946
17947         * class.cs (TypeContainer.VerifyClsName): New method.
17948         Checks whether container name is CLS Compliant.
17949         (Constructor): Implements IMethodData.
17950
17951         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17952         low-case table for CLS Compliance test.
17953         (MemberCache.VerifyClsParameterConflict): New method.
17954         Checks method parameters for CS3006 error.
17955
17956         * enum.cs (EnumMember): Is derived from MemberCore.
17957         (Enum.VerifyClsName): Optimized for better performance.
17958
17959 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17960
17961         * report.cs: Renamed Error_T to Error and changed all
17962         references.
17963
17964 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17965
17966         * class.cs (TypeContainer.IndexerArrayList): New inner class
17967         container for indexers.
17968         (TypeContainer.DefaultIndexerName): New constant for default
17969         indexer name. Replaced all "Item" with this constant.
17970         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17971
17972         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17973         DefaultMemberAttribute constructor.
17974
17975 2004-08-05  Martin Baulig  <martin@ximian.com>
17976
17977         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17978         Fix bug #59429.
17979
17980 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17981
17982         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17983         multi platforms problem.
17984
17985         * compiler.csproj: Included shared files.
17986
17987 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17988
17989         Fix bug 60333, 55971 in the more general way
17990         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17991         Added arg_type argument for constant conversion.
17992         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17993
17994 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17995
17996         Fix bug #59760
17997         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17998         OperatorArrayList, MethodCoreArrayList for typecontainer
17999         containers. Changed class member types to these new types.
18000         (MethodArrayList.DefineMembers): Added test for CS0659.
18001
18002 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
18003
18004         * cfold.cs: Synchronize the folding with the code in expression.cs
18005         Binary.DoNumericPromotions for uint operands.
18006
18007         * attribute.cs: Revert patch from Raja, it introduced a regression
18008         while building Blam-1.2.1 (hard to isolate a test case).
18009
18010 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
18011
18012         Fix for #55382
18013         * class.cs:
18014         (TypeContainer.Define): Renamed to DefineContainerMembers because of
18015         name collision.
18016         (MethodCore.parent_method): New member. The method we're overriding
18017         if this is an override method.
18018         (MethodCore.CheckBase): Moved from Method class and made common.
18019         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
18020         private.
18021         (MethodCore.CheckForDuplications): New abstract method. For custom
18022         member duplication search in a container
18023         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
18024         method and its return type.
18025         (Event.conflict_symbol): New member. Symbol with same name in the
18026         parent class.
18027
18028         * decl.cs:
18029         (MemberCache.FindMemberWithSameName): New method. The method
18030         is looking for conflict with inherited symbols.
18031
18032 2004-08-04  Martin Baulig  <martin@ximian.com>
18033
18034         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
18035
18036         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
18037
18038 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
18039
18040         * report.cs (Message): New enum for better error, warning reference in
18041         the code.
18042         (MessageData): New inner abstract class. It generally handles printing of
18043         error and warning messages.
18044         Removed unused Error, Warning, Message methods.
18045
18046 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
18047
18048         Fix for cs0592-8.cs test
18049         * attribute.cs
18050         (Attributable.ValidAttributeTargets): Made public.
18051         (Attribute.ExplicitTarget): New member for explicit target value.
18052         (Attribute.CheckTargets): Now we translate explicit attribute
18053         target to Target here.
18054
18055 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
18056
18057         * ecore.cs (MethodGroupExpr): new IsBase property.
18058
18059         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
18060
18061         * delegate.cs (DelegateCreation): store a MethodGroupExpr
18062         rather than an instance expr.
18063
18064         (DelegateCreation.Emit): Use the method group rather than
18065         the instance expression. Also, if you have base.Foo as the
18066         method for a delegate, make sure to emit ldftn, not ldftnvirt.
18067
18068         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
18069
18070         (NewDelegate.DoResolve): Only check for the existance of Invoke
18071         if the method is going to be needed. Use MethodGroupExpr.
18072
18073         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
18074
18075         * expression.cs: For pointer arith., make sure to use
18076         the size of the type, not the size of the pointer to
18077         the type.
18078
18079 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
18080
18081         Fix for #60722
18082         * class.cs (Class): Added error CS0502 test.
18083
18084 2004-08-03  John Luke  <jluke@cfl.rr.com>
18085             Raja R Harinath  <rharinath@novell.com>
18086
18087         Fix for #60997.
18088         * attribute.cs (Attribute.complained_before): New flag.
18089         (Attribute.ResolveType, Attribute.Resolve),
18090         (Attribute.DefinePInvokeMethod): Set it.
18091         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
18092         
18093 2004-08-03  Martin Baulig  <martin@ximian.com>
18094
18095         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
18096         use a user-defined operator; we still need to do numeric
18097         promotions in case one argument is a builtin type and the other
18098         one has an implicit conversion to that type.  Fixes #62322.
18099
18100 2004-08-02  Martin Baulig  <martin@ximian.com>
18101
18102         * statement.cs (LocalInfo.Flags): Added `IsThis'.
18103         (LocalInfo.IsThis): New public property.
18104         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
18105
18106 2004-08-01  Martin Baulig  <martin@ximian.com>
18107
18108         * class.cs (TypeContainer.GetClassBases): Don't set the default
18109         here since we may get called from GetPartialBases().
18110         (TypeContainer.DefineType): If GetClassBases() didn't return a
18111         parent, use the default one.
18112
18113 2004-07-30  Duncan Mak  <duncan@ximian.com>
18114
18115         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
18116
18117 2004-07-30  Martin Baulig  <martin@ximian.com>
18118
18119         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
18120
18121         * class.cs (SourceMethod): New public class, derive from the
18122         symbol writer's ISourceMethod.
18123         (Method): Use the new symbol writer API.
18124
18125         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
18126         as argument and use the new symbol writer.
18127
18128         * location.cs
18129         (SourceFile): Implement the symbol writer's ISourceFile.
18130         (Location.SymbolDocument): Removed.
18131         (Location.SourceFile): New public property.
18132
18133         * symbolwriter.cs: Use the new symbol writer API.
18134
18135 2004-07-30  Raja R Harinath  <rharinath@novell.com>
18136
18137         * Makefile (install-local): Remove.  Functionality moved to
18138         executable.make.
18139
18140 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
18141
18142         * Makefile: Install mcs.exe.config file together with mcs.exe.
18143         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
18144         correct runtime version.
18145         
18146 2004-07-25  Martin Baulig  <martin@ximian.com>
18147
18148         * class.cs
18149         (TypeContainer.RegisterOrder): Removed, this was unused.
18150         (TypeContainer, interface_order): Removed.
18151         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
18152         TypeContainer as argument since we can also be called with a
18153         `PartialContainer' for a partial class/struct/interface.
18154         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
18155         of checking whether we're an `Interface' - we could be a
18156         `PartialContainer'.
18157         (PartialContainer.Register): Override; call
18158         AddClass()/AddStruct()/AddInterface() on our parent.
18159
18160         * cs-parser.jay (interface_member_declaration): Add things to the
18161         `current_container', not the `current_class'.
18162
18163         * rootcontext.cs (RegisterOrder): The overloaded version which
18164         takes an `Interface' was unused, removed.
18165
18166         * typemanager.cs (TypeManager.LookupInterface): Return a
18167         `TypeContainer', not an `Interface'.
18168         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
18169         contain a `PartialContainer' for an interface, so check it's
18170         `Kind' to figure out what it is.
18171
18172 2004-07-25  Martin Baulig  <martin@ximian.com>
18173
18174         * class.cs (Class.DefaultTypeAttributes): New public constant.
18175         (Struct.DefaultTypeAttributes): Likewise.
18176         (Interface.DefaultTypeAttributes): Likewise.
18177         (PartialContainer.TypeAttr): Override this and add the
18178         DefaultTypeAttributes.
18179
18180 2004-07-25  Martin Baulig  <martin@ximian.com>
18181
18182         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
18183         we can just use the `Parent' field instead.
18184
18185 2004-07-25  Martin Baulig  <martin@ximian.com>
18186
18187         * class.cs (TypeContainer.Emit): Renamed to EmitType().
18188
18189 2004-07-25  Martin Baulig  <martin@ximian.com>
18190
18191         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
18192         our parts before defining any methods.
18193         (TypeContainer.VerifyImplements): Make this virtual.
18194         (ClassPart.VerifyImplements): Override and call VerifyImplements()
18195         on our PartialContainer.
18196
18197 2004-07-25  Martin Baulig  <martin@ximian.com>
18198
18199         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
18200
18201         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
18202         argument, we can just use the `Parent' field instead.
18203
18204         * class.cs
18205         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
18206         (MemberBase.DoDefine): Likewise.
18207
18208 2004-07-24  Martin Baulig  <martin@ximian.com>
18209
18210         * decl.cs (MemberCore.Parent): New public field.
18211         (DeclSpace.Parent): Moved to MemberCore.
18212
18213         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
18214         (MemberBase.ctor): Added TypeContainer argument, pass it to our
18215         parent's .ctor.
18216         (FieldBase, Field, Operator): Likewise.
18217         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
18218         (EventField, Event): Likewise.
18219
18220 2004-07-23  Martin Baulig  <martin@ximian.com>
18221
18222         * class.cs (PartialContainer): New public class.
18223         (ClassPart): New public class.
18224         (TypeContainer): Added support for partial classes.
18225         (TypeContainer.GetClassBases): Splitted some of the functionality
18226         out into GetNormalBases() and GetPartialBases().
18227
18228         * cs-tokenizer.cs (Token.PARTIAL): New token.
18229         (Tokenizer.consume_identifier): Added some hacks to recognize
18230         `partial', but only if it's immediately followed by `class',
18231         `struct' or `interface'.
18232
18233         * cs-parser.jay: Added support for partial clases.
18234
18235 2004-07-23  Martin Baulig  <martin@ximian.com>
18236
18237         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
18238         a `DeclSpace' and also made it readonly.
18239         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
18240         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
18241         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
18242
18243         * cs-parser.jay: Pass the `current_class', not the
18244         `current_container' (at the moment, this is still the same thing)
18245         to a new Method, Property, Event, Indexer or Constructor.
18246
18247 2004-07-23  Martin Baulig  <martin@ximian.com>
18248
18249         * cs-parser.jay (CSharpParser): Added a new `current_class' field
18250         and removed the `current_interface' one.
18251         (struct_declaration, class_declaration, interface_declaration):
18252         Set `current_class' to the newly created class/struct/interface;
18253         set their `Bases' and call Register() before parsing their body.
18254
18255 2004-07-23  Martin Baulig  <martin@ximian.com>
18256
18257         * class.cs (Kind): New public enum.
18258         (TypeContainer): Made this class abstract.
18259         (TypeContainer.Kind): New public readonly field.
18260         (TypeContainer.CheckDef): New public method; moved here from
18261         cs-parser.jay.
18262         (TypeContainer.Register): New public abstract method.
18263         (TypeContainer.GetPendingImplementations): New public abstract
18264         method.
18265         (TypeContainer.GetClassBases): Removed the `is_class' and
18266         `is_iface' parameters.
18267         (TypeContainer.DefineNestedTypes): Formerly known as
18268         DoDefineType().
18269         (ClassOrStruct): Made this class abstract.
18270
18271         * tree.cs (RootTypes): New public type. 
18272
18273 2004-07-20  Martin Baulig  <martin@ximian.com>
18274
18275         * tree.cs (Tree.RecordNamespace): Removed.
18276         (Tree.Namespaces): Removed.
18277
18278         * rootcontext.cs (RootContext.IsNamespace): Removed.
18279
18280         * cs-parser.jay (namespace_declaration): Just create a new
18281         NamespaceEntry here.
18282
18283 2004-07-20  Martin Baulig  <martin@ximian.com>
18284
18285         * statement.cs (ExceptionStatement): New abstract class.  This is
18286         now used as a base class for everyone who's using `finally'.
18287         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
18288         our local variables before using them.
18289
18290         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
18291         virtual method.  This is used by Yield.Resolve() to "steal" an
18292         outer block's `finally' clauses.
18293         (FlowBranchingException): The .ctor now takes an ExceptionStatement
18294         argument.
18295
18296         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
18297         version which takes an ExceptionStatement.  This version must be
18298         used to create exception branchings.
18299
18300         * iterator.cs
18301         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
18302         (Iterator.EmitMoveNext): Added exception support; protect the
18303         block with a `fault' clause, properly handle 'finally' clauses.
18304         (Iterator.EmitDispose): Run all the `finally' clauses here.
18305
18306 2004-07-20  Martin Baulig  <martin@ximian.com>
18307
18308         * iterator.cs: This is the first of a set of changes in the
18309         iterator code.  Match the spec more closely: if we're an
18310         IEnumerable, then GetEnumerator() must be called.  The first time
18311         GetEnumerator() is called, it returns the current instance; all
18312         subsequent invocations (if any) must create a copy.
18313
18314 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
18315
18316         * expression.cs: Resolve the constant expression before returning
18317         it. 
18318
18319 2004-07-19  Martin Baulig  <martin@ximian.com>
18320
18321         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
18322         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
18323         the return type of the new EmitContext.
18324
18325 2004-07-18  Martin Baulig  <martin@ximian.com>
18326
18327         * class.cs (Property.Define): Fix iterators.
18328
18329         * iterators.cs (Iterator.Define): Moved the
18330         `container.AddInterator (this)' call here from the .ctor; only do
18331         it if we resolved successfully.
18332
18333 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
18334
18335         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
18336         `true' for preprocessing directives that we parse.  The return
18337         value indicates whether we should return to regular tokenizing or
18338         not, not whether it was parsed successfully.
18339
18340         In the past if we were in: #if false ... #line #endif, we would
18341         resume parsing after `#line'.  See bug 61604.
18342
18343         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
18344         building: IsEnumType should return true only for enums, not for
18345         enums or System.Enum itself.  This fixes #61593.
18346
18347         Likely what happened is that corlib was wrong: mcs depended on
18348         this bug in some places.  The bug got fixed, we had to add the
18349         hack, which caused bug 61593.
18350
18351         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
18352         that was a workaround for the older conditions.
18353
18354 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
18355
18356         * assign.cs: IAssignMethod has a new interface, as documented
18357         inline. All assignment code now uses this new api.
18358
18359         * ecore.cs, expression.cs: All classes which implement
18360         IAssignMethod now use the new interface.
18361
18362         * expression.cs (Invocation): add a hack to EmitCall so that
18363         IndexerAccess can be the target of a compound assignment without
18364         evaluating its arguments twice.
18365
18366         * statement.cs: Handle changes in Invocation api.
18367
18368 2004-07-16  Martin Baulig  <martin@ximian.com>
18369
18370         * iterators.cs: Rewrote this.  We're now using one single Proxy
18371         class for both the IEnumerable and the IEnumerator interface and
18372         `Iterator' derives from Class so we can use the high-level API.
18373
18374         * class.cs (TypeContainer.AddIterator): New method.
18375         (TypeContainer.DoDefineType): New protected virtual method, which
18376         is called from DefineType().
18377         (TypeContainer.DoDefineMembers): Call DefineType() and
18378         DefineMembers() on all our iterators.
18379         (TypeContainer.Emit): Call Emit() on all our iterators.
18380         (TypeContainer.CloseType): Call CloseType() on all our iterators.
18381
18382         * codegen.cs (EmitContext.CurrentIterator): New public field.
18383
18384 2004-07-15  Martin Baulig  <martin@ximian.com>
18385
18386         * typemanager.cs
18387         (TypeManager.not_supported_exception_type): New type.   
18388
18389 2004-07-14  Martin Baulig  <martin@ximian.com>
18390
18391         * iterators.cs: Use real error numbers.
18392
18393 2004-07-14  Martin Baulig  <martin@ximian.com>
18394
18395         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
18396         requires this to be a System.Collection.IEnumerable and not a
18397         class implementing that interface.
18398         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
18399
18400 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
18401
18402         * class.cs: Fixed previous fix, it broke some error tests.
18403
18404 2004-07-12  Martin Baulig  <martin@ximian.com>
18405
18406         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
18407         Fixes #61293.
18408
18409 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
18410
18411         * assign.cs (LocalTemporary): Add new argument: is_address,If
18412         `is_address' is true, then the value that we store is the address
18413         to the real value, and not the value itself.
18414         
18415         * ecore.cs (PropertyExpr): use the new local temporary
18416         stuff to allow us to handle X.Y += z (where X is a struct)
18417
18418 2004-07-08  Martin Baulig  <martin@ximian.com>
18419
18420         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
18421         not always return, just like we're doing in Using.Resolve().
18422
18423 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
18424
18425         * cs-parser.jay (fixed_statement): flag this as Pinned.
18426
18427 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
18428
18429         * typemanager.cs (TypeManager): Removed MakePinned method, this
18430         mechanism is replaced with the .NET 2.x compatible mechanism of
18431         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
18432
18433         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
18434         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
18435         `IsFixed' property which has a different meaning.
18436
18437 2004-07-02  Raja R Harinath  <rharinath@novell.com>
18438
18439         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
18440         visible from inside a nested class, not just the names of the
18441         immediately enclosing class.
18442         Fix for bug #60730.
18443
18444 2004-06-24  Raja R Harinath  <rharinath@novell.com>
18445
18446         * expression.cs (BetterConversion): Remove buggy special-case
18447         handling of "implicit constant expression conversions".  At this
18448         point, we already know that the conversion is possible -- we're
18449         only checking to see which is better.
18450
18451 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18452
18453         * cs-parser.jay: Added error CS0210 test.
18454
18455 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18456
18457         * cs-parser.jay: Added error CS0134 test.
18458
18459 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18460
18461         Fix bug #52507
18462         * cs-parser.jay: Added error CS0145 test.
18463
18464 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18465
18466         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
18467
18468 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
18469         
18470         * expression.cs (StackAlloc.Resolve): The argument may not
18471         be a constant; deal with this case.
18472         
18473 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
18474
18475         * attribute.cs (IndexerName_GetIndexerName): Renamed to
18476         GetIndexerAttributeValue.
18477         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
18478
18479         * class.cs (Indexer.Define): Added error tests for CS0415,
18480         CS0609.
18481
18482 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
18483
18484         * attribute.cs (Attribute.Resolve): Keep field code in sync with
18485         property code.
18486
18487 2004-06-23  Martin Baulig  <martin@ximian.com>
18488
18489         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
18490         neither return nor throw, reset the barrier as well.  Fixes #60457.
18491
18492 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
18493
18494         * class.cs : EventAttributes is now set to None by default.
18495           This fixes bug #60459.
18496
18497 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18498
18499         Fix bug #60219
18500         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18501         Don't throw exception but return null (it's sufficient now).
18502
18503 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18504
18505         * typemanager.cs (GetArgumentTypes): Faster implementation.
18506
18507 2004-06-18  Martin Baulig  <martin@ximian.com>
18508
18509         * attribute.cs (Attribute.Resolve): Check whether we're an
18510         EmptyCast which a Constant child.  Fixes #60333.
18511
18512 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
18513
18514         * statement.cs (EmitCollectionForeach): Account for the fact that
18515         not all valuetypes are in areas which we can take the address of.
18516         For these variables, we store to a temporary variable. Also, make
18517         sure that we dont emit a `callvirt' on a valuetype method.
18518
18519 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18520
18521         * expression.cs (StackAlloc.DoReSolve): Added test for
18522         negative parameter (CS0247).
18523
18524 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18525
18526         Fix bug #59792
18527         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
18528
18529 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18530
18531         Fix bug #59781
18532         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
18533         ulong.
18534
18535 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18536
18537         Fix bug #58254 & cs1555.cs, cs1556.cs
18538         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
18539
18540 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18541
18542         * cs-parser.jay: Added error CS1669 test for indexers.
18543
18544 2004-06-11  Martin Baulig  <martin@ximian.com>
18545
18546         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
18547         call this twice: for params and varargs methods.
18548
18549 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18550
18551         * class.cs:
18552         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
18553
18554 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18555
18556         * attribute.cs (Attribute.GetValidTargets): Made public.
18557
18558         * class.cs: 
18559         (AbstractPropertyEventMethod): New class for better code sharing.
18560         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
18561         CS1667 report.
18562         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
18563
18564 2004-06-11  Raja R Harinath  <rharinath@novell.com>
18565
18566         Fix bug #59477.
18567         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
18568         that the call to Resolve is part of a MemberAccess.
18569         (Expression.Resolve): Use it for SimpleName resolution.
18570         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
18571         Add 'intermediate' boolean argument.
18572         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
18573         error message when the SimpleName can be resolved ambiguously
18574         between an expression and a type.
18575         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
18576         public.
18577         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
18578         call on the left-side.
18579
18580 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18581
18582         * class.cs:
18583         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
18584
18585 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18586
18587         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
18588
18589 2004-06-11  Martin Baulig  <martin@ximian.com>
18590
18591         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
18592         varargs methods if applicable.
18593
18594 2004-06-11  Martin Baulig  <martin@ximian.com>
18595
18596         * expression.cs (Invocation.EmitCall): Don't use
18597         `method.CallingConvention == CallingConventions.VarArgs' since the
18598         method could also have `CallingConventions.HasThis'.
18599
18600 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18601
18602         * class.cs (Event.GetSignatureForError): Implemented.
18603         Fixed crash in error test cs3010.cs
18604
18605 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
18606
18607         * cs-tokenizer.cs: Change the way we track __arglist to be
18608         consistent with the other keywords.
18609
18610 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
18611
18612         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
18613         tomorrow.
18614
18615 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18616
18617         * codegen.cs: Check that all referenced assemblies have a strongname
18618         before strongnaming the compiled assembly. If not report error CS1577.
18619         Fix bug #56563. Patch by Jackson Harper.
18620         * typemanager.cs: Added a method to return all referenced assemblies.
18621         Fix bug #56563. Patch by Jackson Harper.
18622
18623 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18624
18625         * class.cs:
18626         (Method.ApplyAttributeBuilder): Moved and added conditional
18627         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18628
18629         * delegate.cs:
18630         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18631
18632 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18633
18634         Fixed #59640
18635         * class.cs: (EventField.attribute_targets): Changed default target.
18636
18637 2004-06-08  Martin Baulig  <martin@ximian.com>
18638
18639         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18640
18641 2004-06-08  Martin Baulig  <martin@ximian.com>
18642
18643         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18644
18645 2004-06-07  Martin Baulig  <martin@ximian.com>
18646
18647         Added support for varargs methods.
18648
18649         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18650         keyword.
18651
18652         * cs-parser.jay: Added support for `__arglist'.
18653
18654         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18655
18656         * expression.cs (Argument.AType): Added `ArgList'.
18657         (Invocation): Added support for varargs methods.
18658         (ArglistAccess): New public class.
18659         (Arglist): New public class.
18660
18661         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18662
18663         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18664         a method's top-level block if the method has varargs.
18665
18666         * support.cs (ReflectionParameters, InternalParameters): Added
18667         support for varargs methods.    
18668
18669 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18670
18671         * class.cs: Provide location in indexer error report.
18672
18673         * driver.cs: Use standard names.
18674
18675         * namespace.cs: Catch the use of using after a namespace has been
18676         declared also on using aliases.
18677
18678 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18679
18680         Bug #50820.
18681         * typemanager.cs (closure_private_ok, closure_invocation_type)
18682         (closure_qualifier_type, closure_invocation_assembly)
18683         (FilterWithClosure): Move to ...
18684         (Closure): New internal nested class.
18685         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18686         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18687         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18688         (MemberLookup, MemberLookupFailed): Use it.
18689         * expression.cs (New.DoResolve): Treat the lookup for the
18690         constructor as being qualified by the 'new'ed type.
18691         (Indexers.GetIndexersForTypeOrInterface): Update.
18692
18693 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18694
18695         * attribute.cs
18696         (GetConditionalAttributeValue): New method. Returns
18697         condition of ConditionalAttribute.
18698         (SearchMulti): New method.  Returns all attributes of type 't'.
18699         Use it when attribute is AllowMultiple = true.
18700         (IsConditionalMethodExcluded): New method.
18701
18702         * class.cs
18703         (Method.IsExcluded): Implemented. Returns true if method has conditional
18704         attribute and the conditions is not defined (method is excluded).
18705         (IMethodData): Extended interface for ConditionalAttribute support.
18706         (PropertyMethod.IsExcluded): Implemented.
18707
18708         * decl.cs
18709         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18710
18711         * expression.cs
18712         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18713         on the method.
18714
18715 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18716
18717         * expression.cs (ArrayCreationExpression): Make this just an
18718         `expression'. It can't be a statement, so the code here was
18719         dead.
18720
18721 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18722
18723         Fixed #59072
18724         * typemanager.cs (GetFullNameSignature): New method for
18725         MethodBase types.
18726
18727 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18728
18729         Fixed #56452
18730         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18731         Use this method when MethodBuilder is null.
18732         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18733         Added test for error CS0626 (MONO reports error for this situation).
18734         (IMethodData.GetSignatureForError): Extended interface.
18735
18736 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18737
18738         * attribute.cs
18739         (AttributeTester.GetObsoleteAttribute): Returns instance of
18740         ObsoleteAttribute when type is obsolete.
18741
18742         * class.cs
18743         (TypeContainer.VerifyObsoleteAttribute): Override.
18744         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18745         (MethodCode.VerifyObsoleteAttribute): Override.
18746         (MemberBase.VerifyObsoleteAttribute): Override.
18747
18748         * decl.cs
18749         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18750         and report proper error.
18751
18752         *delegate.cs
18753         Delegate.VerifyObsoleteAttribute): Override.
18754
18755         * ecore.cs
18756         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18757         and report proper error.
18758         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18759
18760         * enum.cs
18761         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18762         and enum member.
18763
18764         * expression.cs
18765         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18766         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18767         Added test for ObsoleteAttribute.
18768
18769         * statement.cs
18770         (Catch): Derived from Statement.
18771
18772 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18773  
18774         Fixed bug #59071 & cs0160.cs
18775  
18776         * statement.cs (Try.Resolve): Check here whether order of catch
18777         clauses matches their dependencies.
18778
18779 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18780
18781         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18782         caused a regression: #59343.  Referencing nested classes from an
18783         assembly stopped working.
18784
18785 2004-05-31  Martin Baulig  <martin@ximian.com>
18786
18787         MCS is now frozen for beta 2.
18788
18789 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18790
18791         * convert.cs: add a trivial cache for overload operator resolution.
18792
18793 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18794
18795         * decl.cs: If possible, use lookuptypedirect here. We can only do
18796         this if there is no `.' after the namespace. Avoids using
18797         LookupType, which does lots of slow processing.
18798         (FindNestedType) New method, does what it says :-).
18799         * namespace.cs: use LookupTypeDirect.
18800         * rootcontext.cs: use membercache, if possible.
18801         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18802
18803 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18804
18805         * expression.cs:
18806         According to the spec, 
18807
18808         In a member access of the form E.I, if E is a single identifier,
18809         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18810         field, property, localvariable, or parameter with the same type as
18811         the meaning of E as a type-name (§3.8), then both possible
18812         meanings of E are permitted.
18813
18814         We did not check that E as a simple-name had the same type as E as
18815         a type name.
18816
18817         This trivial check gives us 5-7% on bootstrap time.
18818
18819 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18820
18821         * expression.cs (Invocation.OverloadResolve): Avoid the
18822         use of hashtables and boxing here by allocating on demand.
18823
18824 2004-05-30  Martin Baulig  <martin@ximian.com>
18825
18826         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18827         we're doing a silent lookup.  Don't try to lookup nested types in
18828         TypeManager.object_type (thanks to Ben Maurer).
18829
18830 2004-05-30  Martin Baulig  <martin@ximian.com>
18831
18832         Committing a patch from Ben Maurer.
18833
18834         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18835
18836 2004-05-29  Martin Baulig  <martin@ximian.com>
18837
18838         * class.cs (IMethodData.ShouldIgnore): New method.
18839
18840         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18841         `Location' argument, we don't need it anywhere.  Use
18842         `IMethodData.ShouldIgnore ()' instead of
18843         `MethodData.GetMethodFlags ()'.
18844         (TypeManager.AddMethod): Removed.
18845         (TypeManager.AddMethod2): Renamed to AddMethod.
18846
18847 2004-05-29  Martin Baulig  <martin@ximian.com>
18848
18849         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18850
18851         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18852         converting from a class type S to an interface type and we already
18853         have an object on the stack, don't box it again.  Fixes #52578.
18854
18855 2004-05-29  Martin Baulig  <martin@ximian.com>
18856
18857         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18858         Added support for `params' parameters.  Fixes #59267.
18859
18860 2004-05-29  Martin Baulig  <martin@ximian.com>
18861
18862         * literal.cs (NullPointer): Provide a private .ctor which sets
18863         `type' to TypeManager.object_type.  Fixes #59048.
18864
18865 2004-05-29  Martin Baulig  <martin@ximian.com>
18866
18867         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18868         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18869
18870         * ecore.cs (EventExpr.instance_expr): Make the field private.
18871
18872 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18873
18874         Fixed bug #50080 & cs0214-2.cs
18875         * expression.cs (Cast.DoResolve): Check unsafe context here.
18876         
18877         * statement.cs (Resolve.DoResolve): Likewise.
18878
18879 2004-05-26  Martin Baulig  <martin@ximian.com>
18880
18881         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18882
18883         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18884         (RootContext.LookupType): Pass down the `silent' flag.
18885
18886 2004-05-25  Martin Baulig  <martin@ximian.com>
18887
18888         * expression.cs
18889         (MethodGroupExpr.IdenticalTypeName): New public property.
18890         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18891         expression actually refers to a type.
18892
18893 2004-05-25  Martin Baulig  <martin@ximian.com>
18894
18895         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18896         for #56176 and made it actually work.
18897
18898 2004-05-25  Martin Baulig  <martin@ximian.com>
18899
18900         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18901         (FieldExpr, PropertyExpr): Override and implement
18902         CacheTemporaries.  Fixes #52279.
18903
18904 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18905
18906         * location.cs: In the new compiler listing a file twice is a
18907         warning, not an error.
18908
18909 2004-05-24  Martin Baulig  <martin@ximian.com>
18910
18911         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18912         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18913
18914 2004-05-24  Martin Baulig  <martin@ximian.com>
18915
18916         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18917         walking the `using' list.  Fixes #53921.
18918
18919 2004-05-24  Martin Baulig  <martin@ximian.com>
18920
18921         * const.cs (Const.LookupConstantValue): Added support for
18922         EmptyCast's; fixes #55251.
18923
18924 2004-05-24  Martin Baulig  <martin@ximian.com>
18925
18926         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18927         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18928         which does the CS0135 check.  The reason is that we first need to
18929         check whether the variable actually exists.
18930
18931 2004-05-24  Martin Baulig  <martin@ximian.com>
18932
18933         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18934         than RootContext.LookupType() to find the explicit interface
18935         type.  Fixes #58584.
18936
18937 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18938
18939         * Makefile: Simplify.  Use executable.make.
18940         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18941
18942 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18943
18944         * decl.cs:
18945         * enum.cs:
18946         Use the invariant culture when doing String.Compare for CLS case
18947         sensitivity.
18948         
18949 2004-05-23  Martin Baulig  <martin@ximian.com>
18950
18951         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18952         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18953
18954         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18955         
18956 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18957
18958         * class.cs (MemberBase.Define): Reuse MemberType member for 
18959         resolved type. Other methods can use it too.
18960
18961 2004-05-23  Martin Baulig  <martin@ximian.com>
18962
18963         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18964         the variable also exists in the current block (otherwise, we need
18965         to report a CS0103).  Fixes #58670.
18966
18967 2004-05-23  Martin Baulig  <martin@ximian.com>
18968
18969         * flowanalysis.cs (Reachability.Reachable): Compute this
18970         on-the-fly rather than storing it as a field.
18971
18972 2004-05-23  Martin Baulig  <martin@ximian.com>
18973
18974         * flowanalysis.cs (Reachability.And): Manually compute the
18975         resulting `barrier' from the reachability.      
18976        
18977 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18978
18979         Fix bug #57835
18980         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18981         instance of ObsoleteAttribute when symbol is obsolete.
18982
18983         * class.cs
18984         (IMethodData): Extended interface for ObsoleteAttribute support.
18985
18986 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18987
18988         * attribute.cs: Fix bug #55970
18989
18990 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18991
18992         Fix bug #52705
18993         * attribute.cs
18994         (GetObsoleteAttribute): New method. Creates the instance of
18995         ObsoleteAttribute.
18996         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18997         ObsoleteAttribute when member is obsolete.
18998         (AttributeTester.Report_ObsoleteMessage): Common method for
18999         Obsolete error/warning reporting.
19000
19001         * class.cs
19002         (TypeContainer.base_classs_type): New member for storing parent type.
19003
19004         * decl.cs
19005         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
19006         for this MemberCore.
19007
19008 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
19009
19010         * attribute.cs, const.cs: Fix bug #58590
19011
19012 2004-05-21  Martin Baulig  <martin@ximian.com>
19013
19014         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
19015         out parameters if the end of the method is unreachable.  Fixes
19016         #58098. 
19017
19018 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
19019
19020         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
19021         Hari was right, why extra method.
19022
19023 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
19024
19025         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
19026
19027 2004-05-20  Martin Baulig  <martin@ximian.com>
19028
19029         Merged this back from gmcs to keep the differences to a minumum.
19030
19031         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
19032         instead of a Declspace.
19033         (Attribute.ResolveType): Likewise.
19034         (Attributes.Search): Likewise.
19035         (Attributes.Contains): Likewise.
19036         (Attributes.GetClsCompliantAttribute): Likewise.
19037
19038         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
19039         argument.
19040         (MethodData.ApplyAttributes): Take an EmitContext instead of a
19041         DeclSpace.
19042
19043 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
19044
19045         Fix bug #58688 (MCS does not report error when the same attribute
19046         is assigned twice)
19047
19048         * attribute.cs (Attribute.Emit): Distinction between null and default.
19049
19050 2004-05-19  Raja R Harinath  <rharinath@novell.com>
19051
19052         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
19053         of a top-level attribute without an attribute target.
19054         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
19055         Make non-static.
19056         (Attribute.Conditional_GetConditionName), 
19057         (Attribute.Obsolete_GetObsoleteMessage): Update.
19058         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
19059         part of ScanForIndexerName.
19060         (Attribute.CanIgnoreInvalidAttribute): New function.
19061         (Attribute.ScanForIndexerName): Move to ...
19062         (Attributes.ScanForIndexerName): ... here.
19063         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
19064         (Attributes.Search): New internal variant that can choose not to
19065         complain if types aren't resolved.  The original signature now
19066         complains.
19067         (Attributes.GetClsCompliantAttribute): Use internal variant, with
19068         complaints suppressed.
19069         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
19070         only if it not useful.
19071         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
19072         top-level for attributes that are shared between the assembly
19073         and a top-level class.
19074         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
19075         * class.cs: Update to reflect changes.
19076         (DefineIndexers): Fuse loops.
19077         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
19078         a couple more variants of attribute names.
19079
19080 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
19081
19082         Fix bug #52585 (Implemented explicit attribute declaration)
19083
19084         * attribute.cs:
19085         (Attributable.ValidAttributeTargets): New abstract method. It gets
19086         list of valid attribute targets for explicit target declaration.
19087         (Attribute.Target): It holds target itself.
19088         (AttributeSection): Removed.
19089         (Attribute.CheckTargets): New method. It checks whether attribute
19090         target is valid for the current element.
19091
19092         * class.cs:
19093         (EventProperty): New class. For events that are declared like
19094         property (with add and remove accessors).
19095         (EventField): New class. For events that are declared like field.
19096         class.cs
19097
19098         * cs-parser.jay: Implemented explicit attribute target declaration.
19099
19100         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
19101         Override ValidAttributeTargets.
19102
19103         * parameter.cs:
19104         (ReturnParameter): Class for applying custom attributes on 
19105         the return type.
19106         (ParameterAtribute): New class. Class for applying custom
19107         attributes on the parameter type.
19108
19109 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
19110
19111         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
19112         definitions. 
19113
19114         (Method): Allow UNSAFE here.
19115
19116         * modifiers.cs: Support unsafe reporting.
19117
19118 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
19119
19120         * decl.cs: Fix bug #58478.
19121
19122 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19123
19124         * statement.cs: When checking for unreachable code on an EmptyStatement,
19125         set the location. Fixes bug #58488.
19126
19127 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
19128
19129         * driver.cs: Add -pkg handling.
19130
19131         From Gonzalo: UseShelLExecute=false
19132
19133 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
19134
19135         * attribute.cs:
19136         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
19137         for attribute.
19138         (Attribute.IsClsCompliaceRequired): Moved to base for better
19139         accesibility.
19140         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
19141         when attribute is AttributeUsageAttribute.
19142         (Attribute.GetValidTargets): Simplified.
19143         (Attribute.GetAttributeUsage): New method returns AttributeUsage
19144         attribute for this type.
19145         (Attribute.ApplyAttributes): Method renamed to Emit and make
19146         non-static.
19147         (GlobalAttributeSection): New class for special handling of global
19148         attributes (assembly, module).
19149         (AttributeSection.Emit): New method.
19150
19151         * class.cs: Implemented Attributable abstract methods.
19152         (MethodCore.LabelParameters): Moved to Parameter class.
19153         (Accessor): Is back simple class.
19154         (PropertyMethod): Implemented Attributable abstract class.
19155         (DelegateMethod): Implemented Attributable abstract class.
19156         (Event): New constructor for disctintion between normal Event
19157         and Event with accessors.
19158
19159         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
19160
19161         * codegen.cs, const.cs, decl.cs, delegate.cs:
19162         (CommonAssemblyModulClass): Implemented Attributable abstract class
19163         and simplified.
19164
19165         * enum.cs: Implement IAttributeSupport interface.
19166         (EnumMember): New class for emum members. Implemented Attributable
19167         abstract class
19168
19169         * parameter.cs:
19170         (ParameterBase): Is abstract.
19171         (ReturnParameter): New class for easier [return:] attribute handling.
19172
19173         * typemanager.cs: Removed builder_to_attr.
19174
19175 2004-05-11  Raja R Harinath  <rharinath@novell.com>
19176
19177         Fix bug #57151.
19178         * attribute.cs (Attribute.GetPositionalValue): New function.
19179         * class.cs (TypeContainer.VerifyMembers): New function.
19180         (TypeContainer.Emit): Use it.
19181         (ClassOrStruct): New base class for Class and Struct.
19182         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
19183         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
19184         class.
19185         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
19186         then each non-static field should have a FieldOffset attribute.
19187         Otherwise, none of the fields should have a FieldOffset attribute.
19188         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
19189         and FieldOffset attributes.
19190         * typemanager.cs (TypeManager.struct_layout_attribute_type)
19191         (TypeManager.field_offset_attribute_type): New core types.
19192         (TypeManager.InitCoreTypes): Initialize them.
19193
19194 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
19195
19196         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
19197         Return correct type.
19198         From bug #58270.
19199
19200 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
19201
19202         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
19203         be implicitly converted to ulong.
19204         
19205         * expression.cs: The logic for allowing operator &, | and ^ worked
19206         was wrong, it worked before because we did not report an error in
19207         an else branch.  Fixes 57895.
19208
19209         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
19210         allow volatile fields to be reference types.
19211
19212 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
19213
19214         * driver.cs: Add support for /debug-
19215
19216 2004-05-07  Raja R Harinath  <rharinath@novell.com>
19217
19218         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
19219         Add a 'complain' parameter to silence errors.
19220         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
19221         silently overlooked type-resolutions.
19222         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
19223         to reflect changes.
19224         (Attributes.Search): New function.
19225         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
19226         (Attributes.GetAttributeFullName): Remove hack.
19227         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
19228         Update to reflect changes.
19229         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
19230         Use Attributes.Search instead of nested loops.
19231
19232 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
19233
19234         * decl.cs:
19235         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
19236         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
19237         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
19238
19239         * report.cs: (Report.Warning): Renamed to Warning_T because of
19240         parameter collision.
19241
19242 2004-05-05  Raja R Harinath  <rharinath@novell.com>
19243
19244         * expression.cs (MemberAccess.ResolveMemberAccess):
19245         Exit with non-zero status after Report.Error.
19246         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
19247         Likewise.
19248         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
19249
19250 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
19251
19252         * support.cs: Don't hang when the file is empty.
19253
19254 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
19255
19256         * support.cs: In SeekableStreamReader, compute the preamble size of the
19257           underlying stream. Position changes should take into account that initial
19258           count of bytes.
19259
19260 2004-05-03  Todd Berman  <tberman@sevenl.net>
19261
19262         * driver.cs: remove unused GetSysVersion function.
19263
19264 2004-05-03  Todd Berman  <tberman@sevenl.net>
19265
19266         * driver.cs: Remove the hack from saturday, as well as the hack
19267         from jackson (LoadAssemblyFromGac), also adds the CWD to the
19268         link_paths to get that bit proper.
19269
19270 2004-05-01  Todd Berman  <tberman@sevenl.net>
19271
19272         * driver.cs: Try a LoadFrom before a Load, this checks the current
19273         path. This is currently a bug in mono that is be fixed, however, this
19274         provides a workaround for now. This will be removed when the bug
19275         is fixed.
19276
19277 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
19278
19279         * CryptoConvert.cs: Updated to latest version. Fix issue with 
19280         incomplete key pairs (#57941).
19281
19282 2004-05-01  Todd Berman  <tberman@sevenl.net>
19283
19284         * driver.cs: Remove '.' from path_chars, now System.* loads properly
19285         from the GAC
19286
19287 2004-04-30  Jackson Harper  <jackson@ximian.com>
19288
19289         * codegen.cs: Open keys readonly.
19290         
19291 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19292
19293         * typemanager.cs: don't report cyclic struct layout when a struct
19294         contains 2 or more fields of the same type. Failed for Pango.AttrShape
19295         which has 2 Pango.Rectangle fields.
19296
19297 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19298
19299         * expression.cs: Handle IntPtr comparisons with IL code
19300         rather than a method call.
19301
19302 2004-04-29  Martin Baulig  <martin@ximian.com>
19303
19304         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
19305         the list of PropertyInfo's in class hierarchy and find the
19306         accessor.  Fixes #56013.
19307
19308 2004-04-29  Martin Baulig  <martin@ximian.com>
19309
19310         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
19311
19312 2004-04-29  Martin Baulig  <martin@ximian.com>
19313
19314         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19315
19316         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
19317
19318 2004-04-29  Martin Baulig  <martin@ximian.com>
19319
19320         * class.cs (ConstructorInitializer.Resolve): Check whether the
19321         parent .ctor is accessible.  Fixes #52146.
19322
19323 2004-04-29  Martin Baulig  <martin@ximian.com>
19324
19325         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19326
19327         * statement.cs (Using.EmitLocalVariableDecls): Use
19328         TypeManager.idisposable_type, not typeof (IDisposable).
19329         (Foreach.EmitCollectionForeach): Added support for valuetypes.
19330
19331 2004-04-29  Martin Baulig  <martin@ximian.com>
19332
19333         * class.cs (Event.Define): Don't emit the field and don't set
19334         RTSpecialName and SpecialName for events on interfaces.  Fixes
19335         #57703. 
19336
19337 2004-04-29  Raja R Harinath  <rharinath@novell.com>
19338
19339         Refactor Attribute.ApplyAttributes.
19340         * attribute.cs (Attributable): New base class for objects that can
19341         have Attributes applied on them.
19342         (Attribute): Make AttributeUsage fields public.
19343         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
19344         (Attribute.IsInternalCall): New property.
19345         (Attribute.UsageAttr): Convert to a public read-only property.
19346         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
19347         (Attribute.ResolveType, Attribute.Resolve)
19348         (Attribute.ScanForIndexerName): Update to reflect changes.
19349         (Attribute.CheckAttributeTarget): Re-format.
19350         (Attribute.ApplyAttributes): Refactor, to various
19351         Attributable.ApplyAttributeBuilder methods.
19352         * decl.cs (MemberCore): Make Attributable.
19353         * class.cs (Accessor): Make Attributable.
19354         (MethodData.ApplyAttributes): Use proper attribute types, not
19355         attribute names.
19356         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
19357         (TypeContainer.ApplyAttributeBuilder)
19358         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
19359         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
19360         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
19361         (Operator.ApplyAttributeBuilder): New factored-out methods.
19362         * const.cs (Const.ApplyAttributeBuilder): Likewise.
19363         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
19364         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
19365         * parameter.cs (ParameterBase): New Attributable base class
19366         that can also represent Return types.
19367         (Parameter): Update to the changes.
19368
19369 2004-04-29  Jackson Harper  <jackson@ximian.com>
19370
19371         * driver.cs: Prefer the corlib system version when looking for
19372         assemblies in the GAC. This is still a hack, but its a better hack
19373         now.
19374         
19375 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
19376
19377         * decl.cs, enum.cs: Improved error 3005 reporting.
19378   
19379         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
19380         (related_symbols): New private member for list of symbols
19381         related to reported error/warning.
19382         
19383         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
19384
19385 2004-04-29  Martin Baulig  <martin@ximian.com>
19386
19387         * ecore.cs (Expression.Constantify): If we're an enum and
19388         TypeManager.TypeToCoreType() doesn't give us another type, use
19389         t.UnderlyingSystemType.  Fixes #56178.  
19390
19391 2004-04-29  Martin Baulig  <martin@ximian.com>
19392
19393         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
19394         interfaces and for each interface, only add members directly
19395         declared in that interface.  Fixes #53255.
19396
19397 2004-04-28  Martin Baulig  <martin@ximian.com>
19398
19399         * expression.cs (ConditionalLogicalOperator): Use a temporary
19400         variable for `left' to avoid that we evaluate it more than once;
19401         bug #52588.
19402
19403 2004-04-28  Martin Baulig  <martin@ximian.com>
19404
19405         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
19406         `void[]' (CS1547).
19407
19408 2004-04-28  Martin Baulig  <martin@ximian.com>
19409
19410         * statement.cs (LocalInfo.Resolve): Check whether the type is not
19411         void (CS1547).
19412
19413         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
19414         whether the type is not void (CS1547).
19415
19416 2004-04-28  Martin Baulig  <martin@ximian.com>
19417
19418         * expression.cs (Unary.DoResolveLValue): Override this and report
19419         CS0131 for anything but Operator.Indirection.
19420
19421 2004-04-28  Martin Baulig  <martin@ximian.com>
19422
19423         Committing a patch from Ben Maurer; see bug #50820.
19424
19425         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19426         check for classes.
19427
19428         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19429         classes.        
19430
19431 2004-04-28  Martin Baulig  <martin@ximian.com>
19432
19433         Committing a patch from Ben Maurer; see bug #50820.
19434
19435         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19436         check for classes.
19437
19438         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19439         classes.        
19440
19441 2004-04-28  Martin Baulig  <martin@ximian.com>
19442
19443         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
19444         (Block.AddLabel): Call DoLookupLabel() to only search in the
19445         current block.
19446
19447 2004-04-28  Martin Baulig  <martin@ximian.com>
19448
19449         * cfold.cs (ConstantFold.BinaryFold): Added special support for
19450         comparing StringConstants and NullLiterals in Equality and Inequality.
19451
19452 2004-04-28  Jackson Harper  <jackson@ximian.com>
19453
19454         * driver.cs: Attempt to load referenced assemblies from the
19455         GAC. This is the quick and dirty version of this method that
19456         doesnt take into account versions and just takes the first
19457         canidate found. Will be good enough for now as we will not have more
19458         then one version installed into the GAC until I update this method.
19459
19460 2004-04-28  Martin Baulig  <martin@ximian.com>
19461
19462         * typemanager.cs (TypeManager.CheckStructCycles): New public
19463         static method to check for cycles in the struct layout.
19464
19465         * rootcontext.cs (RootContext.PopulateTypes): Call
19466         TypeManager.CheckStructCycles() for each TypeContainer.
19467         [Note: We only need to visit each type once.]
19468
19469 2004-04-28  Martin Baulig  <martin@ximian.com>
19470
19471         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
19472
19473         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
19474         success and added `out object value'.  Use a `bool resolved' field
19475         to check whether we've already been called rather than
19476         `ConstantValue != null' since this breaks for NullLiterals.
19477
19478 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19479
19480         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
19481         setting of this flag, since the 'set' method may be non-public.
19482
19483 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19484
19485         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
19486         check on current_vector.Block.
19487
19488 2004-04-27  Martin Baulig  <martin@ximian.com>
19489
19490         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
19491         a field initializer.  Fixes #56459.
19492
19493 2004-04-27  Martin Baulig  <martin@ximian.com>
19494
19495         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
19496         we're not attempting to use an indexer.  Fixes #52154.
19497
19498 2004-04-27  Martin Baulig  <martin@ximian.com>
19499
19500         * statement.cs (Return): Don't create a return label if we don't
19501         need it; reverts my change from January 20th.  Thanks to Ben
19502         Maurer for this.
19503
19504 2004-04-27  Martin Baulig  <martin@ximian.com>
19505
19506         According to the spec, `goto' can only leave a nested scope, but
19507         never enter it.
19508
19509         * statement.cs (Block.LookupLabel): Only lookup in the current
19510         block, don't recurse into parent or child blocks.
19511         (Block.AddLabel): Check in parent and child blocks, report
19512         CS0140/CS0158 if we find a duplicate.
19513         (Block): Removed this indexer for label lookups.
19514         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
19515         this already does the error reporting for us.
19516
19517         * flowanalysis.cs
19518         (FlowBranching.UsageVector.Block): New public variable; may be null.
19519         (FlowBranching.CreateSibling): Added `Block' argument.
19520         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
19521         label for the target of a `goto' and check whether we're not
19522         leaving a `finally'.
19523
19524 2004-04-27  Martin Baulig  <martin@ximian.com>
19525
19526         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
19527         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
19528         just for returns).
19529
19530 2004-04-27  Martin Baulig  <martin@ximian.com>
19531
19532         * statement.cs (Block.AddLabel): Also check for implicit blocks
19533         and added a CS0158 check.
19534
19535 2004-04-27  Martin Baulig  <martin@ximian.com>
19536
19537         * flowanalysis.cs (FlowBranchingLoop): New class.
19538         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
19539         UsageVector's instead of an ArrayList.
19540         (FlowBranching.Label): Likewise.
19541         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
19542         (FlowBranching.AddBreakVector): New method.
19543
19544 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
19545
19546         * attribute.cs: Small regression fix: only convert the type if we
19547         the type is different, fixes System.Drawing build.
19548
19549 2004-04-27  Martin Baulig  <martin@ximian.com>
19550
19551         * attribute.cs (Attribute.Resolve): If we have a constant value
19552         for a named field or property, implicity convert it to the correct
19553         type.
19554
19555 2004-04-27  Raja R Harinath  <rharinath@novell.com>
19556
19557         * statement.cs (Block.Block): Implicit blocks share
19558         'child_variable_names' fields with parent blocks.
19559         (Block.AddChildVariableNames): Remove.
19560         (Block.AddVariable): Mark variable as "used by a child block" in
19561         every surrounding block.
19562         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
19563         been used in a child block, complain about violation of "Invariant
19564         meaning in blocks" rule.
19565         * cs-parser.jay (declare_local_variables): Don't use
19566         AddChildVariableNames.
19567         (foreach_statement): Don't create an implicit block: 'foreach'
19568         introduces a scope.
19569
19570 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
19571
19572         * convert.cs (ImplicitNumericConversion): 0 is also positive when
19573         converting from 0L to ulong.  Fixes 57522.
19574
19575 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19576
19577         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
19578         derived class hides via 'new' keyword field from base class (test-242.cs).
19579         TODO: Handle this in the more general way.
19580         
19581         * class.cs (CheckBase): Ditto.
19582
19583 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19584
19585         * decl.cs (caching_flags): New member for storing cached values
19586         as bit flags.
19587         (MemberCore.Flags): New enum where bit flags for caching_flags
19588         are defined.
19589         (MemberCore.cls_compliance): Moved to caching_flags.
19590         (DeclSpace.Created): Moved to caching_flags.
19591
19592         * class.cs: Use caching_flags instead of DeclSpace.Created
19593         
19594 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
19595
19596         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
19597         if we are only a derived class, not a nested class.
19598
19599         * typemanager.cs: Same as above, but do this at the MemberLookup
19600         level (used by field and methods, properties are handled in
19601         PropertyExpr).   Allow for the qualified access if we are a nested
19602         method. 
19603
19604 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
19605
19606         * class.cs: Refactoring.
19607         (IMethodData): New inteface; Holds links to parent members
19608         to avoid member duplication (reduced memory allocation).
19609         (Method): Implemented IMethodData interface.
19610         (PropertyBase): New inner classes for get/set methods.
19611         (PropertyBase.PropertyMethod): Implemented IMethodData interface
19612         (Event): New inner classes for add/remove methods.
19613         (Event.DelegateMethod): Implemented IMethodData interface.
19614
19615         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19616         EmitContext (related to class.cs refactoring).
19617
19618 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19619
19620         * delegate.cs (Delegate.VerifyApplicability): If the number of
19621         arguments are the same as the number of parameters, first try to
19622         verify applicability ignoring  any 'params' modifier on the last
19623         parameter.
19624         Fixes #56442.
19625
19626 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19627
19628         * class.cs (TypeContainer.AddIndexer): Use
19629         'ExplicitInterfaceName' to determine if interface name was
19630         explicitly specified.  'InterfaceType' is not initialized at this time.
19631         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19632         Indexers array is already in the required order.  Initialize
19633         'IndexerName' only if there are normal indexers.
19634         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19635         (TypeContainer.Emit): Emit DefaultMember attribute only if
19636         IndexerName is initialized.
19637         Fixes #56300.
19638
19639 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19640
19641         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19642         Fixes #57007
19643
19644 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19645
19646         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19647         attributes.
19648         Fix for #56456.
19649
19650         * attribute.cs (Attribute.Resolve): Check for duplicate named
19651         attributes.
19652         Fix for #56463.
19653
19654 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19655
19656         * iterators.cs (MarkYield): track whether we are in an exception,
19657         and generate code accordingly.  Use a temporary value to store the
19658         result for our state.
19659
19660         I had ignored a bit the interaction of try/catch with iterators
19661         since their behavior was not entirely obvious, but now it is
19662         possible to verify that our behavior is the same as MS .NET 2.0
19663
19664         Fixes 54814
19665
19666 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19667
19668         * iterators.cs: Avoid creating temporaries if there is no work to
19669         do. 
19670
19671         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19672         Enumerations, use TypeManager.EnumToUnderlying and call
19673         recursively. 
19674
19675         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19676         bug #57013
19677
19678         (This.Emit): Use EmitContext.EmitThis to emit our
19679         instance variable.
19680
19681         (This.EmitAssign): Ditto.
19682
19683         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19684         codepaths, we will move all the functionality into
19685         Mono.CSharp.This 
19686
19687         (FieldExpr.EmitAssign): Ditto.
19688
19689         This fixes several hidden bugs that I uncovered while doing a code
19690         review of this today.
19691
19692         * codegen.cs (EmitThis): reworked so the semantics are more clear
19693         and also support value types "this" instances.
19694
19695         * iterators.cs: Changed so that for iterators in value types, we
19696         do not pass the value type as a parameter.  
19697
19698         Initialization of the enumerator helpers is now done in the caller
19699         instead of passing the parameters to the constructors and having
19700         the constructor set the fields.
19701
19702         The fields have now `assembly' visibility instead of private.
19703
19704 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19705
19706         * expression.cs (Argument.Resolve): Check if fields passed as ref
19707         or out are contained in a MarshalByRefObject.
19708
19709         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19710         another compiler type.
19711
19712 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19713
19714         * class.cs (Indexer.Define): use the new name checking method.
19715         Also, return false on an error.
19716         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19717         (is_identifier_[start/part]_character): make static.
19718
19719 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19720
19721         * expression.cs (Binary.ResolveOperator): Do no append strings
19722         twice: since we can be invoked more than once (array evaluation)
19723         on the same concatenation, take care of this here.  Based on a fix
19724         from Ben (bug #56454)
19725
19726 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19727
19728         * codegen.cs: Fix another case where CS1548 must be reported (when 
19729         delay-sign isn't specified and no private is available #56564). Fix
19730         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19731         error when MCS is used on the MS runtime and we need to delay-sign 
19732         (which seems unsupported by AssemblyBuilder - see #56621).
19733
19734 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19735
19736         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19737         (TypeManager.ComputeNamespaces): Faster implementation for
19738         Microsoft runtime.
19739
19740         * compiler.csproj: Updated AssemblyName to mcs.
19741
19742 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19743
19744         * rootcontext.cs: Add new types to the boot resolution.
19745
19746         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19747         MulticastDelegate is not allowed.
19748
19749         * typemanager.cs: Add new types to lookup: System.TypedReference
19750         and ArgIterator.
19751
19752         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19753         check for TypedReference or ArgIterator, they are not allowed. 
19754
19755         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19756         makes us properly catch 1510 in some conditions (see bug 56016 for
19757         details). 
19758
19759 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19760
19761         * CryptoConvert.cs: update from corlib version
19762         with endian fixes.
19763
19764 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19765
19766         * class.cs (Indexer.Define): Check indexername declaration
19767
19768 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19769
19770         * attribute.cs (IsClsCompliant): Fixed problem with handling
19771         all three states (compliant, not-compliant, undetected).
19772
19773 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19774
19775         * attribute.cs (Attribute): Location is now public.
19776         (Resolve): Store resolved arguments (pos_values) in attribute class.
19777         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19778         (GetClsCompliantAttributeValue): New method that gets
19779         CLSCompliantAttribute value.
19780         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19781         if exists else null.
19782         (AttributeTester): New class for CLS-Compliant verification routines.
19783
19784         * class.cs (Emit): Add CLS-Compliant verification.
19785         (Method.GetSignatureForError): Implemented.
19786         (Constructor.GetSignatureForError): Implemented
19787         (Constructor.HasCompliantArgs): Returns if constructor has
19788         CLS-Compliant arguments.
19789         (Constructor.Emit): Override.
19790         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19791         is needed to test only parameters.
19792         (FieldBase.GetSignatureForError): Implemented.
19793         (TypeContainer): New member for storing base interfaces.
19794         (TypeContainer.FindMembers): Search in base interfaces too.
19795
19796         * codegen.cs (GetClsComplianceAttribute): New method that gets
19797         assembly or module CLSCompliantAttribute value.
19798         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19799         for assembly.
19800         (ModuleClass.Emit): Add error 3012 test.
19801
19802         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19803
19804         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19805         state for all decl types.
19806         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19807         if CLS-Compliant tests are required.
19808         (IsClsCompliaceRequired): New method. Analyze whether code
19809         must be CLS-Compliant.
19810         (IsExposedFromAssembly): New method. Returns true when MemberCore
19811         is exposed from assembly.
19812         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19813         value or gets cached value.
19814         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19815         is explicitly marked with CLSCompliantAttribute.
19816         (IsIdentifierClsCompliant): New abstract method. This method is
19817         used to testing error 3005.
19818         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19819         for identifier and parameters CLS-Compliant testing.
19820         (VerifyClsCompliance): New method. The main virtual method for
19821         CLS-Compliant verifications.
19822         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19823         null. I don't know why is null (too many public members !).
19824         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19825         and get value of first CLSCompliantAttribute that found.
19826
19827         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19828         (VerifyClsCompliance): Override and add extra tests.
19829
19830         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19831         clscheck- disable CLS-Compliant verification event if assembly is has
19832         CLSCompliantAttribute(true).
19833
19834         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19835         ApllyAttribute is now called in emit section as in the other cases.
19836         Possible future Emit integration.
19837         (IsIdentifierClsCompliant): New override.
19838         (VerifyClsCompliance): New override.
19839         (GetEnumeratorName): Returns full enum name.
19840
19841         * parameter.cs (GetSignatureForError): Implemented.
19842
19843         * report.cs (WarningData): New struct for Warning message information.
19844         (LocationOfPreviousError): New method.
19845         (Warning): New method. Reports warning based on the warning table.
19846         (Error_T): New method. Reports error based on the error table.
19847
19848         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19849         verifications are done here.
19850
19851         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19852
19853         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19854         CLSCompliantAttribute.
19855         (all_imported_types): New member holds all imported types from other
19856         assemblies.
19857         (LoadAllImportedTypes): New method fills static table with exported types
19858         from all referenced assemblies.
19859         (Modules): New property returns all assembly modules.
19860
19861 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19862
19863         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19864         throwing a parser error.
19865
19866         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19867         which removes the hardcoded get_/set_ prefixes for properties, as
19868         IL allows for the properties to be named something else.  
19869
19870         Bug #56013
19871
19872         * expression.cs: Do not override operand before we know if it is
19873         non-null.  Fix 56207
19874
19875 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19876
19877         * typemanager.cs: support for pinned variables.
19878
19879 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19880
19881         * decl.cs, typemanager.cs: Avoid using an arraylist
19882         as a buffer if there is only one result set.
19883
19884 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19885
19886         * expression.cs: Make sure you cant call a static method
19887         with an instance expression, bug #56174.
19888
19889 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19890
19891         * class.cs (IsDuplicateImplementation): Improve error reporting to
19892         flag 663 (method only differs in parameter modifier).
19893
19894         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19895         in preprocessor directives.
19896
19897         * location.cs (LookupFile): Allow for the empty path.
19898
19899         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19900         better approach for some of that patch, but its failing with the
19901         CharSet enumeration.  For now try/catch will do.
19902
19903         * typemanager.cs: Do not crash if a struct does not have fields.
19904         Fixes 56150.
19905
19906 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19907
19908         * expression.cs: cs0213, cant fix a fixed expression.
19909         fixes 50231.
19910
19911 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19912
19913         * cs-parser.jay: detect invalid embeded statements gracefully.
19914         bug #51113.
19915
19916 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19917
19918         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19919         As a regex:
19920         s/
19921         the invocation type may not be a subclass of the tye of the item/
19922         The type of the item must be a subclass of the invocation item.
19923         /g
19924
19925         Fixes bug #50820.
19926
19927 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19928
19929         * attribute.cs: Added methods to get a string and a bool from an
19930         attribute. Required to information from AssemblyKeyFileAttribute,
19931         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19932         * codegen.cs: Modified AssemblyName creation to include support for
19933         strongnames. Catch additional exceptions to report them as CS1548.
19934         * compiler.csproj: Updated include CryptoConvert.cs.
19935         * compiler.csproj.user: Removed file - user specific configuration.
19936         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19937         Mono.Security assembly. The original class is maintained and tested in
19938         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19939         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19940         like CSC 8.0 (C# v2) supports.
19941         * Makefile: Added CryptoConvert.cs to mcs sources.
19942         * rootcontext.cs: Added new options for strongnames.
19943
19944 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19945
19946         * driver.cs: For --expect-error, report error code `2'
19947         if the program compiled with no errors, error code `1' if
19948         it compiled with an error other than the one expected.
19949
19950 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19951
19952         * compiler.csproj: Updated for Visual Studio .NET 2003.
19953         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19954         * compiler.sln: Updated for Visual Studio .NET 2003.
19955
19956 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19957
19958         * expression.cs: Fix bug #47234. We basically need to apply the
19959         rule that we prefer the conversion of null to a reference type
19960         when faced with a conversion to 'object' (csc behaviour).
19961
19962 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19963
19964         * statement.cs: Shorter form for foreach, eliminates
19965         a local variable. r=Martin.
19966
19967 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19968
19969         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19970         checks if we can use brtrue/brfalse to test for 0.
19971         * expression.cs: use the above in the test for using brtrue/brfalse.
19972         cleanup code a bit.
19973
19974 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19975
19976         * expression.cs: Rewrite string concat stuff. Benefits:
19977
19978         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19979         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19980         rather than a concat chain.
19981
19982         * typemanager.cs: Add lookups for more concat overloads.
19983
19984 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19985
19986         * expression.cs: Emit shorter il code for array init.
19987
19988         newarr
19989         dup
19990         // set 1
19991
19992         // set 2
19993
19994         newarr
19995         stloc.x
19996
19997         ldloc.x
19998         // set 1
19999
20000         ldloc.x
20001         // set 2
20002
20003 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
20004
20005         * statement.cs: Before, two switch blocks would be merged if the
20006         total size of the blocks (end_item - begin_item + 1) was less than
20007         two times the combined sizes of the blocks.
20008
20009         Now, it will only merge if after the merge at least half of the
20010         slots are filled.
20011
20012         fixes 55885.
20013
20014 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
20015
20016         * class.cs : csc build fix for GetMethods(). See bug #52503.
20017
20018 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
20019
20020         * expression.cs: Make sure fp comparisons work with NaN.
20021         This fixes bug #54303. Mig approved this patch a long
20022         time ago, but we were not able to test b/c the runtime
20023         had a related bug.
20024
20025 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
20026
20027         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
20028
20029 2004-03-19  Martin Baulig  <martin@ximian.com>
20030
20031         * class.cs (MemberCore.IsDuplicateImplementation): Report the
20032         error here and not in our caller.
20033
20034 2004-03-19  Martin Baulig  <martin@ximian.com>
20035
20036         * interface.cs: Completely killed this file.
20037         (Interface): We're now a TypeContainer and live in class.cs.
20038
20039         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
20040         argument; we're now also called for interfaces.
20041         (TypeContainer.DefineMembers): Allow this method being called
20042         multiple times.
20043         (TypeContainer.GetMethods): New public method; formerly known as
20044         Interface.GetMethod().  This is used by PendingImplementation.
20045         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
20046         it's now private and non-static.
20047         (Interface): Moved this here; it's now implemented similar to
20048         Class and Struct.
20049         (Method, Property, Event, Indexer): Added `bool is_interface'
20050         argument to their .ctor's.
20051         (MemberBase.IsInterface): New public field.
20052
20053         * cs-parser.jay: Create normal Method, Property, Event, Indexer
20054         instances instead of InterfaceMethod, InterfaceProperty, etc.
20055         (opt_interface_base): Removed; we now use `opt_class_base' instead.
20056         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
20057
20058 2004-03-19  Martin Baulig  <martin@ximian.com>
20059
20060         * class.cs (MethodCore.IsDuplicateImplementation): New private
20061         method which does the CS0111 checking.
20062         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
20063         Use IsDuplicateImplementation().
20064
20065 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
20066
20067         * decl.cs (FindMemberToOverride): New method to find the correct
20068         method or property to override in the base class.
20069         * class.cs
20070             - Make Method/Property use the above method to find the
20071               version in the base class.
20072             - Remove the InheritableMemberSignatureCompare as it is now
20073               dead code.
20074
20075         This patch makes large code bases much faster to compile, as it is
20076         O(n) rather than O(n^2) to do this validation.
20077
20078         Also, it fixes bug 52458 which is that nested classes are not
20079         taken into account when finding the base class member.
20080
20081         Reviewed/Approved by Martin.
20082
20083 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
20084
20085         * interface.cs: In all interface classes removed redundant
20086         member initialization.
20087
20088 2004-03-16  Martin Baulig  <martin@ximian.com>
20089
20090         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
20091
20092 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
20093
20094         * decl.cs (DefineTypeAndParents): New helper method to define a
20095         type's containers before the type itself is defined;  This is a
20096         bug exposed by the recent changes to Windows.Forms when an
20097         implemented interface was defined inside a class that had not been
20098         built yet.   
20099
20100         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
20101
20102         (Check): Loop correctly to report errors modifiers
20103         (UNSAFE was not in the loop, since it was the same as TOP).
20104
20105         * interface.cs: Every interface member now takes a ModFlags,
20106         instead of a "is_new" bool, which we set on the base MemberCore. 
20107
20108         Every place where we called "UnsafeOk" in the interface, now we
20109         call the proper member (InterfaceMethod.UnsafeOK) instead to get
20110         the unsafe settings from the member declaration instead of the
20111         container interface. 
20112
20113         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
20114
20115         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
20116         `set_indexer_name' to the pending bits (one per type).
20117
20118         We fixed a bug today that was picking the wrong method to
20119         override, since for properties the existing InterfaceMethod code
20120         basically ignored the method name.  Now we make sure that the
20121         method name is one of the valid indexer names.
20122
20123 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
20124  
20125         * support.cs (SeekableStreamReader): Keep track of stream byte
20126         positions and don't mix them with character offsets to the buffer.
20127
20128         Patch from Gustavo Giráldez
20129
20130 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
20131
20132         * interface.cs (InterfaceSetGetBase): Removed double member
20133         initialization, base class does it as well.
20134
20135 2004-03-13  Martin Baulig  <martin@ximian.com>
20136
20137         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
20138         when compiling corlib.
20139
20140 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
20141
20142         * convert.cs (ExplicitConversion): We were reporting an error on
20143         certain conversions (object_type source to a value type, when the
20144         expression was `null') before we had a chance to pass it through
20145         the user defined conversions.
20146
20147         * driver.cs: Replace / and \ in resource specifications to dots.
20148         Fixes 50752
20149
20150         * class.cs: Add check for duplicate operators.  Fixes 52477
20151
20152 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
20153
20154         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
20155         that are in the middle of the statements, not only at the end.
20156         Fixes #54987
20157
20158         * class.cs (TypeContainer.AddField): No longer set the
20159         `HaveStaticConstructor' flag, now we call it
20160         `UserDefineStaticConstructor' to diferentiate the slightly
20161         semantic difference.
20162
20163         The situation is that we were not adding BeforeFieldInit (from
20164         Modifiers.TypeAttr) to classes that could have it.
20165         BeforeFieldInit should be set to classes that have no static
20166         constructor. 
20167
20168         See:
20169
20170         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
20171
20172         And most importantly Zoltan's comment:
20173
20174         http://bugzilla.ximian.com/show_bug.cgi?id=44229
20175
20176         "I think beforefieldinit means 'it's ok to initialize the type sometime 
20177          before its static fields are used', i.e. initialization does not need
20178          to be triggered by the first access to the type. Setting this flag
20179          helps the JIT to compile better code, since it can run the static
20180          constructor at JIT time, and does not need to generate code to call it
20181          (possibly lots of times) at runtime. Unfortunately, mcs does not set
20182          this flag for lots of classes like String. 
20183          
20184          csc sets this flag if the type does not have an explicit static 
20185          constructor. The reasoning seems to be that if there are only static
20186          initalizers for a type, and no static constructor, then the programmer
20187          does not care when this initialization happens, so beforefieldinit
20188          can be used.
20189          
20190          This bug prevents the AOT compiler from being usable, since it 
20191          generates so many calls to mono_runtime_class_init that the AOT code
20192          is much slower than the JITted code. The JITted code is faster, 
20193          because it does not generate these calls if the vtable is type is
20194          already initialized, which is true in the majority of cases. But the
20195          AOT compiler can't do this."
20196
20197 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
20198
20199         * class.cs (MethodData.Emit): Refactor the code so symbolic
20200         information is generated for destructors;  For some reasons we
20201         were taking a code path that did not generate symbolic information
20202         before. 
20203
20204 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20205
20206         * class.cs: Create a Constructor.CheckBase method that
20207         takes care of all validation type code. The method
20208         contains some code that was moved from Define.
20209
20210         It also includes new code that checks for duplicate ctors.
20211         This fixes bug #55148.
20212
20213 2004-03-09  Joshua Tauberer <tauberer@for.net>
20214
20215         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
20216         a { ... }-style array creation invokes EmitStaticInitializers
20217         which is not good for reference-type arrays.  String, decimal
20218         and now null constants (NullCast) are not counted toward
20219         static initializers.
20220
20221 2004-03-05  Martin Baulig  <martin@ximian.com>
20222
20223         * location.cs (SourceFile.HasLineDirective): New public field;
20224         specifies whether the file contains or is referenced by a "#line"
20225         directive.
20226         (Location.DefineSymbolDocuments): Ignore source files which
20227         either contain or are referenced by a "#line" directive.        
20228
20229 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
20230
20231         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
20232         direct access to our parent, so check the method inline there.
20233
20234 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20235
20236         * expression.cs (Invocation.EmitCall): Miguel's last commit
20237         caused a regression. If you had:
20238
20239             T t = null;
20240             t.Foo ();
20241
20242         In Foo the implict this would be null.
20243
20244 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
20245
20246         * expression.cs (Invocation.EmitCall): If the method is not
20247         virtual, do not emit a CallVirt to it, use Call.
20248
20249         * typemanager.cs (GetFullNameSignature): Improve the method to
20250         cope with ".ctor" and replace it with the type name.
20251
20252         * class.cs (ConstructorInitializer.Resolve): Now the method takes
20253         as an argument the ConstructorBuilder where it is being defined,
20254         to catch the recursive constructor invocations.
20255
20256 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
20257
20258         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
20259         routines to check if a type is an enumerable/enumerator allow
20260         classes that implement the IEnumerable or IEnumerator interfaces.
20261
20262         * class.cs (Property, Operator): Implement IIteratorContainer, and
20263         implement SetYields.
20264
20265         (Property.Define): Do the block swapping for get_methods in the
20266         context of iterators.   We need to check if Properties also
20267         include indexers or not.
20268
20269         (Operator): Assign the Block before invoking the
20270         OperatorMethod.Define, so we can trigger the Iterator code
20271         replacement. 
20272
20273         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
20274         Property and Operator classes are not created when we parse the
20275         declarator but until we have the block completed, so we use a
20276         singleton SimpleIteratorContainer.Simple to flag whether the
20277         SetYields has been invoked.
20278
20279         We propagate this setting then to the Property or the Operator to
20280         allow the `yield' to function.
20281
20282 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
20283
20284         * codegen.cs: Implemented attribute support for modules.
20285         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
20286         Assembly/Module functionality.
20287
20288         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
20289         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
20290         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
20291
20292 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
20293
20294         * interface.cs (FindMembers): The operation is performed on all base
20295         interfaces and not only on the first. It is required for future CLS Compliance patch.
20296
20297 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20298
20299         * statement.cs, codegen.cs:
20300         This patch deals with patterns such as:
20301
20302         public class List : IEnumerable {
20303
20304                 public MyEnumerator GetEnumerator () {
20305                         return new MyEnumerator(this);
20306                 }
20307
20308                 IEnumerator IEnumerable.GetEnumerator () {
20309                         ...
20310                 }
20311                 
20312                 public struct MyEnumerator : IEnumerator {
20313                         ...
20314                 }
20315         }
20316
20317         Before, there were a few things we did wrong:
20318         1) we would emit callvirt on a struct, which is illegal
20319         2) we emited ldarg when we needed to emit ldarga
20320         3) we would mistakenly call the interface methods on an enumerator
20321         type that derived from IEnumerator and was in another assembly. For example:
20322
20323         public class MyEnumerator : IEnumerator
20324
20325         Would have the interface methods called, even if there were public impls of the
20326         method. In a struct, this lead to invalid IL code.
20327
20328 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
20329
20330         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
20331           renamed to Emit.
20332
20333         * delegate.cs (Define): Fixed crash when delegate type is undefined.
20334
20335 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
20336
20337         * cs-parser.jay: Fix small regression: we were not testing V2
20338         compiler features correctly.
20339
20340         * interface.cs: If the emit context is null, then create one
20341
20342 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
20343
20344         * decl.cs (GetSignatureForError): New virtual method to get full name
20345           for error messages.
20346
20347         * attribute.cs (IAttributeSupport): New interface for attribute setting.
20348           Now it is possible to rewrite ApplyAttributes method to be less if/else.
20349
20350         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
20351           Duplicated members and code in these classes has been removed.
20352           Better encapsulation in these classes.
20353
20354 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
20355
20356         * assign.cs (Assign.DoResolve): When dealing with compound
20357         assignments, there is a new rule in ECMA C# 2.4 (might have been
20358         there before, but it is documented here) that states that in:
20359
20360         a op= b;
20361
20362         If b is of type int, and the `op' is a shift-operator, then the
20363         above is evaluated as:
20364
20365         a = (int) a op b 
20366
20367         * expression.cs (Binary.ResolveOperator): Instead of testing for
20368         int/uint/long/ulong, try to implicitly convert to any of those
20369         types and use that in pointer arithmetic.
20370
20371         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
20372         method to print information for from the type, not from the
20373         null-method we were given.
20374
20375 2004-02-01  Duncan Mak  <duncan@ximian.com>
20376
20377         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
20378         parsing for cmd, fixes bug #53694.
20379
20380 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
20381
20382         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
20383         in the member name duplication tests. Property and operator name duplication
20384         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
20385
20386 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
20387
20388         * interface.cs (PopulateMethod): Fixed crash when interface method
20389         returns not existing type (error test cs0246-3.cs).
20390
20391 2004-02-02  Ravi Pratap M <ravi@ximian.com>
20392
20393         * cs-parser.jay (interface_accessors): Re-write actions to also
20394         store attributes attached to get and set methods. Fix spelling
20395         while at it.
20396
20397         (inteface_property_declaration): Modify accordingly.
20398
20399         (InterfaceAccessorInfo): New helper class to store information to pass
20400         around between rules that use interface_accessors.
20401
20402         * interface.cs (Emit): Apply attributes on the get and set
20403         accessors of properties and indexers too.
20404
20405         * attribute.cs (ApplyAttributes): Modify accordingly to use the
20406         right MethodBuilder when applying attributes to the get and set accessors.
20407
20408 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
20409
20410         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
20411
20412 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
20413
20414         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
20415
20416 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
20417
20418         * cs-parser.jay: Remove YIELD token, instead use the new grammar
20419         changes that treat `yield' specially when present before `break'
20420         or `return' tokens.
20421
20422         * cs-tokenizer.cs: yield is no longer a keyword.
20423
20424 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
20425
20426         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
20427         setting for default constructors.
20428         For default constructors are almost every time set wrong Modifier. The
20429         generated IL code has been alright. But inside mcs this values was
20430         wrong and this was reason why several of my CLS Compliance tests
20431         failed.
20432
20433 2004-01-22  Martin Baulig  <martin@ximian.com>
20434
20435         * cs-parser.jay (namespace_or_type_name): Return an Expression,
20436         not a QualifiedIdentifier.  This is what `type_name_expression'
20437         was previously doing.
20438         (type_name_expression): Removed; the code is now in
20439         `namespace_or_type_name'.
20440         (qualified_identifier): Removed, use `namespace_or_type_name'
20441         instead.
20442         (QualifiedIdentifier): Removed this class.      
20443
20444 2004-01-22  Martin Baulig  <martin@ximian.com>
20445
20446         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
20447         not a string as alias name.
20448
20449 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
20450
20451         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
20452         #52730 bug, and instead compute correctly the need to use a
20453         temporary variable when requesting an address based on the
20454         static/instace modified of the field and the constructor.
20455  
20456 2004-01-21  Martin Baulig  <martin@ximian.com>
20457
20458         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
20459         class and namespace before looking up aliases.  Fixes #52517.
20460
20461 2004-01-21  Martin Baulig  <martin@ximian.com>
20462
20463         * flowanalysis.cs (UsageVector.Merge): Allow variables being
20464         assinged in a 'try'; fixes exception4.cs.
20465
20466 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20467         * class.cs : Implemented parameter-less constructor for TypeContainer
20468
20469         * decl.cs: Attributes are now stored here. New property OptAttributes
20470
20471         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
20472
20473         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
20474
20475 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20476
20477         * typemanager.cs (CSharpSignature): Now reports also inner class name.
20478           (CSharpSignature): New method for indexer and property signature.
20479
20480 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20481
20482         * pending.cs (IsVirtualFilter): Faster implementation.
20483
20484 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20485
20486         * typemanager.cs: Avoid inclusion of same assembly more than once.
20487
20488 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20489
20490         * cs-parser.jay: Fixed problem where the last assembly attribute
20491           has been applied also to following declaration (class, struct, etc.)
20492           
20493 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20494
20495         * class.cs: Added error CS0538, CS0539 reporting.
20496         Fixed crash on Microsoft runtime when field type is void.
20497
20498         * cs-parser.jay: Added error CS0537 reporting.
20499
20500         * pending.cs: Added error CS0535 reporting.
20501         Improved error report for errors CS0536, CS0534.
20502
20503 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
20504
20505         Merge a few bits from the Anonymous Method MCS tree.
20506
20507         * statement.cs (ToplevelBlock): New class for toplevel methods,
20508         will hold anonymous methods, lifted variables.
20509
20510         * cs-parser.jay: Create toplevel blocks for delegates and for
20511         regular blocks of code. 
20512
20513 2004-01-20  Martin Baulig  <martin@ximian.com>
20514
20515         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
20516         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
20517         and `NeedExplicitReturn'; added `IsLastStatement'.
20518         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
20519         have a `ReturnLabel' or we're not unreachable.
20520
20521         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
20522         child's reachability; don't just override ours with it.  Fixes
20523         #58058 (lluis's example).
20524         (FlowBranching): Added public InTryOrCatch(), InCatch(),
20525         InFinally(), InLoop(), InSwitch() and
20526         BreakCrossesTryCatchBoundary() methods.
20527
20528         * statement.cs (Return): Do all error checking in Resolve().
20529         Unless we are the last statement in a top-level block, always
20530         create a return label and jump to it.
20531         (Break, Continue): Do all error checking in Resolve(); also make
20532         sure we aren't leaving a `finally'.
20533         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
20534         statement in a top-level block.
20535         (Block.Flags): Added `IsDestructor'.
20536         (Block.IsDestructor): New public property.
20537
20538 2004-01-20  Martin Baulig  <martin@ximian.com>
20539
20540         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
20541
20542 2004-01-20  Martin Baulig  <martin@ximian.com>
20543
20544         * statement.cs (Statement.ResolveUnreachable): New public method.
20545         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
20546         (Block.Resolve): Resolve unreachable statements.
20547
20548 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20549
20550         * expression.cs: We need to fix the case where we do
20551         not have a temp variable here.
20552
20553         * assign.cs: Only expression compound assignments need
20554         temporary variables.
20555
20556 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20557
20558         * flowanalysis.cs: Reduce memory allocation in a few ways:
20559           - A block with no variables should not allocate a bit
20560             vector for itself.
20561           - A method with no out parameters does not need any tracking
20562             for assignment of the parameters, so we need not allocate
20563             any data for it.
20564           - The arrays:
20565                 public readonly Type[] VariableTypes;
20566                 public readonly string[] VariableNames;
20567             Are redundant. The data is already stored in the variable
20568             map, so we need not allocate another array for it.
20569           - We need to add alot of checks for if (params | locals) == null
20570             due to the first two changes.
20571
20572 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
20573
20574         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
20575         implement IMemoryLocation, we store a copy on a local variable and
20576         take the address of it.  Patch from Benjamin Jemlich
20577
20578         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
20579         to use a special "type_name_expression" rule which reduces the
20580         number of "QualifiedIdentifier" classes created, and instead
20581         directly creates MemberAccess expressions.
20582
20583 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
20584
20585         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
20586         that fixes #52853.  Null literal assignment to ValueType
20587
20588         * class.cs (MethodData.Emit): Instead of checking the name of the
20589         method to determine if its a destructor, create a new derived
20590         class from Method called Destructor, and test for that.  
20591
20592         * cs-parser.jay: Create a Destructor object instead of a Method.  
20593
20594         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
20595
20596         Fixes: 52933
20597
20598 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
20599
20600         * expression.cs (Binary.ResolveOperator): Perform an implicit
20601         conversion from MethodGroups to their delegate types on the
20602         Addition operation.
20603
20604         * delegate.cs: Introduce a new class DelegateCreation that is the
20605         base class for `NewDelegate' and `ImplicitDelegateCreation',
20606         factor some code in here.
20607
20608         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
20609         conversion from MethodGroups to compatible delegate types. 
20610
20611         * ecore.cs (Expression.Resolve): Do not flag error 654
20612         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
20613         we allow conversions from MethodGroups to delegate types now.
20614
20615         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20616         assignments in v2 either.
20617
20618 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20619
20620         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20621         static read-only fields in ctors.
20622
20623         Applied patch from Benjamin Jemlich 
20624
20625         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20626
20627 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20628
20629         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20630         here to return true, as they can be used like this:
20631
20632                 (XXX) int.MEMBER ()
20633
20634         Fixed 49836 and all the other dups
20635
20636 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20637
20638         * driver.cs: Implement /win32res and /win32icon.
20639
20640 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20641
20642         * cs-parser.jay: Add a rule to improve error handling for the
20643         common mistake of placing modifiers after the type.
20644
20645 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20646
20647         * cs-parser.jay (interface_event_declaration): Catch
20648         initialization of events on interfaces, and report cs0068
20649
20650         * cs-parser.jay (interface_event_declaration): Catch
20651         initialization of events. 
20652
20653         * ecore.cs: Better report missing constructors.
20654
20655         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20656         the error reporting done in the wrong place.  Fix.
20657
20658         * expression.cs (Binary.ResolveOperator): Catch the 
20659         operator + (E x, E y) error earlier, and later allow for implicit
20660         conversions in operator +/- (E e, U x) from U to the underlying
20661         type of E.
20662
20663         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20664         52596, if the container class is abstract, the default constructor
20665         is protected otherwise its public (before, we were always public).
20666
20667         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20668         fixed statement.
20669
20670         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20671         Jemlich that fixes bug #52597, MCS was generating invalid code for
20672         idisposable structs.   Thanks to Ben for following up with this
20673         bug as well.
20674
20675 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20676
20677         * driver.cs: Allow assemblies without code to be generated, fixes
20678         52230.
20679
20680 2004-01-07  Nick Drochak <ndrochak@gol.com>
20681
20682         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20683
20684 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20685
20686         * cs-parser.jay: Add rules to improve error reporting if fields or
20687         methods are declared at the namespace level (error 116)
20688
20689         * Add rules to catch event add/remove
20690
20691 2004-01-04  David Sheldon <dave-mono@earth.li>
20692
20693   * expression.cs: Added matching ")" to error message for 
20694   CS0077
20695
20696 2004-01-03 Todd Berman <tberman@gentoo.org>
20697
20698         * ecore.cs, attribute.cs:
20699         Applying fix from #52429.
20700
20701 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20702
20703         * ecore.cs, expression.cs, statement.cs:
20704         Total rewrite of how we handle branching. We
20705         now handle complex boolean expressions with fewer
20706         jumps. As well if (x == 0) no longer emits a ceq.
20707
20708         if (x is Foo) is much faster now, because we generate
20709         better code.
20710
20711         Overall, we get a pretty big improvement on our benchmark
20712         tests. The code we generate is smaller and more readable.
20713
20714         I did a full two-stage bootstrap. The patch was reviewed
20715         by Martin and Miguel.
20716
20717 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20718
20719         * cs-parser.jay: Make primary_expression not take a QI.
20720         we dont need this because the member_access rule covers
20721         us here. So we replace the rule with just IDENTIFIER.
20722
20723         This has two good effects. First, we remove a s/r conflict.
20724         Second, we allocate many fewer QualifiedIdentifier objects.
20725
20726 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20727
20728         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20729         set the correct information via SRE. This prevents
20730         hanging on the MS runtime. Fixes #29374.
20731
20732 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20733
20734         * convert.cs: correctly handle conversions to value types
20735         from Enum and ValueType as unboxing conversions.
20736
20737         Fixes bug #52569. Patch by Benjamin Jemlich.
20738
20739 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20740
20741         * expression.cs (BetterConversion): Prefer int -> uint
20742         over int -> ulong (csc's behaviour). This fixed bug #52046.
20743
20744 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20745
20746         * decl.cs (MemberCache.FindMembers): now returns a
20747         MemberInfo [].
20748
20749         * typemanager.cs: In general, go with with ^^.
20750         (CopyNewMethods): take an IList.
20751         (RealMemberLookup): Only allocate an arraylist
20752         if we copy from two sets of methods.
20753
20754         This change basically does two things:
20755         1) Fewer array lists allocated due to CopyNewMethods.
20756         2) the explicit cast in MemberList costed ALOT.
20757
20758 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20759
20760         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20761         a hashtable to avoid needless string allocations when an identifier is
20762         used more than once (the common case).
20763
20764 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20765
20766         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20767         is broken, it will not return anything. So, we
20768         have to use the information we have in mcs to
20769         do the task.
20770
20771         * typemanager.cs: Add a cache for GetInterfaces,
20772         since this will now be used more often (due to ^^)
20773
20774         (GetExplicitInterfaces) New method that gets the
20775         declared, not effective, interfaces on a type
20776         builder (eg, if you have interface IFoo, interface
20777         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20778         { IBar }.
20779
20780         This patch makes MCS able to bootstrap itself on
20781         Windows again.
20782
20783 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20784
20785         * expression.cs: Remove the Nop's that Miguel put
20786         in by mistake.
20787
20788 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20789
20790         * report.cs, codegen.cs: Give the real stack trace to
20791         the error when an exception is thrown.
20792
20793 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20794
20795         * decl.cs: only allocate hashtables for ifaces if 
20796         it is an iface!
20797
20798 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20799
20800         * expression.cs: fix the error from cs0121-2.cs
20801         (a parent interface has two child interfaces that
20802         have a function with the same name and 0 params
20803         and the function is called through the parent).
20804
20805 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20806
20807         * class.cs, rootcontext.cs, typmanager.cs: do not
20808         leak pointers.
20809
20810 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20811
20812         * codegen.cs: remove stack for the ec flow branching.
20813         It is already a linked list, so no need.
20814
20815 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20816
20817         * Makefile: Allow custom profiler here.
20818
20819 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20820
20821         * typemanager.cs (LookupType):
20822           - Use a static char [], because split takes
20823             a param array for args, so it was allocating
20824             every time.
20825           - Do not store true in a hashtable, it boxes.
20826
20827 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20828
20829         * flowanalysis.cs: bytify common enums.
20830
20831 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20832
20833         * modifiers.cs: Add a new set of flags for the
20834         flags allowed on explicit interface impls.
20835         * cs-parser.jay: catch the use of modifiers in
20836         interfaces correctly.
20837         * class.cs: catch private void IFoo.Blah ().
20838
20839         All related to bug #50572.
20840
20841 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20842
20843         * decl.cs: Rewrite the consistant accessability checking.
20844         Accessability is not linear, it must be implemented in
20845         a tableish way. Fixes #49704.
20846
20847 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20848
20849         * expression.cs: Handle negation in a checked context.
20850         We must use subtraction from zero. Fixes #38674.
20851
20852 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20853
20854         * class.cs: Ignore static void main in DLLs.
20855         * rootcontext.cs: Handle the target type here,
20856         since we are have to access it from class.cs
20857         * driver.cs: account for the above.
20858
20859 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20860
20861         * report.cs: Give line numbers and files if available.
20862
20863 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20864
20865         * driver.cs: Implement /addmodule.
20866
20867         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20868         ModuleBuilders.
20869
20870 2003-12-20  Martin Baulig  <martin@ximian.com>
20871
20872         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20873         (FieldBase.IsAssigned): Removed this field.
20874         (FieldBase.SetAssigned): New public method.
20875         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20876
20877 2003-12-20  Martin Baulig  <martin@ximian.com>
20878
20879         * expression.cs (LocalVariableReference.DoResolve): Don't set
20880         `vi.Used' if we're called from DoResolveLValue().
20881
20882         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20883         returns the usage vector it just merged into the current one -
20884         pass this one to UsageWarning().
20885         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20886         of the `EmitContext', don't call this recursively on our children.
20887
20888 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20889
20890         * driver.cs: Implement /target:module.
20891
20892 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20893
20894         * support.cs (CharArrayHashtable): New helper class.
20895
20896         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20897         char arrays, not strings, so we can avoid creating a string in
20898         consume_identifier if the identifier is a keyword.
20899
20900 2003-12-16  Martin Baulig  <martin@ximian.com>
20901
20902         * statement.cs (LocalInfo.Assigned): Removed this property.
20903         (LocalInfo.Flags): Removed `Assigned'.
20904         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20905         and uses flow analysis.
20906         (Block.UsageWarning): Made this method private.
20907         (Block.Resolve): Call UsageWarning() if appropriate.
20908
20909         * expression.cs (LocalVariableReference.DoResolve): Always set
20910         LocalInfo.Used here.
20911
20912 2003-12-13  Martin Baulig  <martin@ximian.com>
20913
20914         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20915         any value here; we're now using flow analysis to figure out
20916         whether a statement/block returns a value.
20917
20918 2003-12-13  Martin Baulig  <martin@ximian.com>
20919
20920         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20921         working again.
20922         (FlowBranching.MergeFinally): Don't call
20923         `branching.CheckOutParameters()' here, this is called in
20924         MergeTopBlock().
20925         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20926         when adding the `finally' vector.       
20927
20928 2003-12-13  Martin Baulig  <martin@ximian.com>
20929
20930         * flowanalysis.cs
20931         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20932         actually work and also fix #48962.
20933
20934 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20935
20936         * decl.cs: Do not check System.Object for nested types,
20937         since we know it does not have any. Big bang for buck:
20938
20939         BEFORE:
20940            Run 1:   8.35 seconds
20941            Run 2:   8.32 seconds
20942            corlib:  17.99 seconds
20943         AFTER:
20944            Run 1:   8.17 seconds
20945            Run 2:   8.17 seconds
20946            corlib:  17.39 seconds
20947
20948 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20949
20950         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20951         time we are returning 0 members, so we save alot here.
20952
20953 2003-12-11  Martin Baulig  <martin@ximian.com>
20954
20955         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20956         `MergeChild()', also just take the `FlowBranching' as argument;
20957         call Merge() on it and return the result.
20958         (FlowBranching.Merge): We don't need to do anything if we just
20959         have one sibling.
20960
20961 2003-12-11  Martin Baulig  <martin@ximian.com>
20962
20963         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20964         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20965         Maurer for this idea.
20966
20967 2003-12-11  Martin Baulig  <martin@ximian.com>
20968
20969         * flowanalysis.cs (MergeResult): This class is now gone; we now
20970         use the `UsageVector' for this.  The reason for this is that if a
20971         branching just has one sibling, we don't need to "merge" them at
20972         all - that's the next step to do.
20973         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20974         `MergeResult'.
20975
20976 2003-12-11  Martin Baulig  <martin@ximian.com>
20977
20978         Reworked flow analyis and made it more precise and bug-free.  The
20979         most important change is that we're now using a special `Reachability'
20980         class instead of having "magic" meanings of `FlowReturns'.  I'll
20981         do some more cleanups and optimizations and also add some more
20982         documentation this week.
20983
20984         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20985         largely reworked this class.
20986         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20987         the new `Reachability' class instead of having "magic" values here.
20988         (FlowBranching): We're now using an instance of `Reachability'
20989         instead of having separate `Returns', `Breaks' etc. fields.
20990
20991         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20992         based on flow analysis; ignore the return value of block.Emit ().
20993
20994 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20995
20996         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20997         if they are private.
20998
20999 2003-12-09  Martin Baulig  <martin@ximian.com>
21000
21001         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
21002         call them directly on the UsageVector.
21003
21004 2003-12-09  Martin Baulig  <martin@ximian.com>
21005
21006         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
21007         Changed return type from `FlowReturns' to `Reachability'.
21008
21009 2003-12-09  Martin Baulig  <martin@ximian.com>
21010
21011         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
21012         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
21013         `Reachable' fields with a single `Reachability' one.
21014
21015 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
21016
21017         * class.cs (FindMembers): Remove foreach's.
21018
21019         Bootstrap times:
21020
21021         BEFORE
21022                 Run 1:   8.74 seconds
21023                 Run 2:   8.71 seconds
21024
21025         AFTER
21026                 Run 1:   8.64 seconds
21027                 Run 2:   8.58 seconds
21028
21029
21030 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
21031
21032         * cs-parser.jay:
21033         * gen-treedump.cs:
21034         * statement.cs:
21035         This patch does a few things:
21036                 1. EmptyStatement is now a singleton, so it is never reallocated.
21037                 2. All blah is EmptyStatement constructs have been changed to
21038                    blah == EmptyStatement.Value, which is much faster and valid
21039                    now that EmptyStatement is a singleton.
21040                 3. When resolving a block, rather than allocating a new array for
21041                    the non-empty statements, empty statements are replaced with
21042                    EmptyStatement.Value
21043                 4. Some recursive functions have been made non-recursive.
21044         Mainly the performance impact is from (3), however (1) and (2) are needed for
21045         this to work. (4) does not make a big difference in normal situations, however
21046         it makes the profile look saner.
21047
21048         Bootstrap times:
21049
21050         BEFORE
21051         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
21052         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
21053         Total memory allocated: 56397 KB
21054
21055         AFTER
21056         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
21057         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
21058         Total memory allocated: 55666 KB
21059
21060 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
21061
21062         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
21063         than the hashtable in a hashtable version
21064
21065         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
21066         we always end up concating a string. This results in a huge perf
21067         loss, because many strings have to be tracked by the GC. In this
21068         patch, we first use a hashtable that works with two keys, so that
21069         the strings do not need to be concat'ed.
21070
21071         Bootstrap times:
21072         BEFORE
21073                 Run 1:   8.74 seconds
21074                 Run 2:   8.71 seconds
21075
21076         AFTER
21077                 Run 1:   8.65 seconds
21078                 Run 2:   8.56 seconds
21079
21080 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
21081
21082         * Makefile: Add a new target `do-time' that does a quick and simple
21083         profile, leaving easy to parse output.
21084
21085 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
21086
21087         * codegen.cs (Init): Create the dynamic assembly with 
21088         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
21089
21090 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
21091
21092         * support.cs: Make the PtrHashtable use only one
21093         instance of its comparer.
21094
21095 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
21096
21097         * typemanager.cs: Fix lookup of GetNamespaces.
21098
21099 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
21100
21101         * expression.cs: Removed redundant line.
21102
21103         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
21104         ArrayLists, use for loops with bounds.  
21105
21106         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
21107         arraylist.
21108
21109         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
21110         arraylists, use for loop with bounds.
21111
21112         The above three changes give us a 0.071 second performance
21113         improvement out of 3.294 seconds down to 3.223.  On my machine
21114         the above changes reduced the memory usage by 1,387 KB during
21115         compiler bootstrap.
21116
21117         * cs-parser.jay (QualifiedIdentifier): New class used to represent
21118         QualifiedIdentifiers.  Before we created a new string through
21119         concatenation, and mostly later on, the result would be
21120         manipulated by DecomposeQI through string manipulation.
21121
21122         This reduced the compiler memory usage for bootstrapping from
21123         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
21124         compile times in 0.05 seconds.
21125
21126 2003-11-28  Dick Porter  <dick@ximian.com>
21127
21128         * support.cs: Do string compares with the Invariant culture.
21129
21130         * rootcontext.cs: 
21131         * gen-treedump.cs: 
21132         * expression.cs: 
21133         * driver.cs: 
21134         * decl.cs: 
21135         * codegen.cs: 
21136         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
21137         the comparison is done with the Invariant culture.
21138
21139 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
21140
21141         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
21142         GetEnumerator method.
21143
21144         (ProbeCollectionType): Iterate starting at the most specific type
21145         upwards looking for a GetEnumerator
21146
21147         * expression.cs: Shift count can be up to 31 for int/uint and 63
21148         for long/ulong.
21149
21150 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
21151
21152         * statement.cs (Block.LookupLabel): Also look for the label on the
21153         children blocks.  Use a hash table to keep track of visited
21154         nodes. 
21155
21156         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
21157         we actually did transform the other operand, otherwise fall back
21158         to the common codepath that casts to long.
21159
21160         * cs-tokenizer.cs: Use the same code pattern as the int case.
21161         Maybe I should do the parsing myself, and avoid depending on the
21162         Parse routines to get this done.
21163
21164 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
21165
21166         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
21167         which fixes bug 51347.  This time test it.
21168
21169         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
21170         attributes for example can not tell the difference between these.
21171         The difference was only a syntax feature of the language. 
21172
21173         * attribute.cs: Apply attributes to delegates.
21174
21175         * delegate.cs: Call the apply attributes method.
21176
21177 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
21178
21179         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
21180         comparing 0 vs Byte.MinValue, not the value
21181
21182         (ImplicitConversionRequired): When reporting a conversion error,
21183         use error 31 to print out the constant error instead of the
21184         simpler 29.
21185
21186         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
21187         which fixes bug 51347.
21188
21189 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
21190
21191         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
21192         which fixes the -warnaserror command line option.
21193
21194 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
21195
21196         * cfold.cs (DoNumericPromotions): During constant folding of
21197         additions on UIntConstant, special case intconstants with
21198         IntConstants like we do on the expression binary operator. 
21199
21200 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
21201
21202         * convert.cs (ImplicitReferenceConversion): We were missing a case
21203         (System.Enum are not value types or class types, so we need to
21204         classify them separatedly).
21205
21206         * driver.cs: We do not support error 2007.
21207
21208 2003-11-12 Jackson Harper <jackson@ximian.com>
21209
21210         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
21211         system directory. Also use the full file name so users can
21212         libraries names mscorlib-o-tron.dll in a non system dir.
21213
21214 2003-11-10  Martin Baulig  <martin@ximian.com>
21215
21216         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
21217         (TypeManager.InitCoreTypes): Initialize them here, but instead of
21218         calling `ResolveType()' on them, directly assign their `Type'.
21219
21220 2003-11-08  Martin Baulig  <martin@ximian.com>
21221
21222         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
21223         return value and the `out parent' parameter.
21224         (TypeContainer.DefineType): Moved the CS0644 check into
21225         GetClassBases().  Don't pass the interface types to the
21226         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
21227         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
21228
21229         * ecore.cs (TypeExpr.IsAttribute): New property.
21230         (TypeExpr.GetInterfaces): New method.
21231
21232         * interface.cs (Interface.GetInterfaceTypeByName): Return a
21233         TypeExpr instead of a Type.
21234         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
21235         (Interface.DefineType): Don't pass the interface types to the
21236         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
21237         them later and then call `TypeBulider.AddInterfaceImplementation()'.
21238
21239         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
21240         instead of a `Type[]'.
21241         (TypeManager.RegisterBuilder): Likewise.
21242         (TypeManager.AddUserInterface): Likewise.
21243         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
21244         `Type[]' and also return a `TypeExpr[]'.
21245         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
21246
21247 2003-11-08  Martin Baulig  <martin@ximian.com>
21248
21249         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
21250         Expression.     
21251
21252 2003-11-08  Martin Baulig  <martin@ximian.com>
21253
21254         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
21255         TypeManager.ResolveExpressionTypes().
21256
21257         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
21258         instead of an Expression.
21259         (TypeExpr): This is now an abstract base class for `TypeExpression'.
21260         (TypeExpression): New public class; formerly known as `TypeExpr'.
21261
21262         * expression.cs (ComposedCast): Derive from TypeExpr.
21263
21264         * typemanager.cs (TypeManager.system_*_expr): These are now
21265         TypExpr's instead of Expression's.
21266         (TypeManager.ResolveExpressionTypes): New public static function;
21267         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
21268         of them.        
21269
21270 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
21271
21272         * expression.cs (New.DoResolve): Do not dereference value that
21273         might be a null return.
21274
21275         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
21276         sure that the constant value has the right type.  Fixes an
21277         unreported bug, similar to 50425.
21278
21279         * const.cs (Const.LookupConstantValue): Call
21280         ImplicitStandardConversionExists before doing a conversion to
21281         avoid havng the TypeManager.ChangeType do conversions.
21282
21283         Reduced the number of casts used
21284
21285         (Const.ChangeType): New routine to enable reuse of the constant
21286         type changing code from statement.
21287
21288         * typemanager.cs (ChangeType): Move common initialization to
21289         static global variables.
21290
21291         Fixes #50425.
21292
21293         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
21294         every value type to go through, even if it was void.  Fix that. 
21295
21296         * cs-tokenizer.cs: Use is_identifier_start_character on the start
21297         character of the define, and the is_identifier_part_character for
21298         the rest of the string.
21299
21300 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
21301
21302         * expression.cs (UnaryMutator.EmitCode): When I updated
21303         LocalVariableReference.DoResolve, I overdid it, and dropped an
21304         optimization done on local variable references.
21305
21306 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
21307
21308         * ecore.cs: Convert the return from Ldlen into an int.
21309
21310 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
21311
21312         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
21313         the accessibility, this is a special case for toplevel non-public
21314         classes (internal for instance).
21315
21316 2003-10-20  Nick Drochak <ndrochak@gol.com>
21317
21318         * ecore.cs: Fix typo and build.  Needed another right paren.
21319
21320 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
21321
21322         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
21323         `internal' case regular and protected, but not allowing protected
21324         to be evaluated later.  Bug 49840
21325
21326 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
21327
21328         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
21329         to kb.Nlast, and not the kb.nFirst to isolate the switch
21330         statement.
21331
21332         Extract the underlying type, so enumerations of long/ulong are
21333         treated like long/ulong.
21334
21335 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
21336
21337         * expression.cs (New): Overload the meaning of RequestedType to
21338         track the possible creation of the NewDelegate type, since
21339         DoResolve is invoked more than once for new constructors on field
21340         initialization.
21341
21342         See bugs: #48800 and #37014
21343
21344         * cs-parser.jay (declare_local_constants): Take an arraylist
21345         instead of a single constant.
21346
21347         (local_constant_declaration): It should take a
21348         constant_declarators, not a constant_declarator.  Fixes 49487
21349
21350         * convert.cs: Fix error report.
21351
21352 2003-10-13 Jackson Harper <jackson@ximian.com>
21353
21354         * typemanager.cs (TypeToCoreType): Add float and double this fixes
21355         bug #49611
21356
21357 2003-10-09  Martin Baulig  <martin@ximian.com>
21358
21359         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
21360         to the .ctor.
21361         (MethodCore.DoDefineParameters): Removed the TypeContainer
21362         argument; use the DeclSpace which was passed to the .ctor instead.
21363         (MethodCore.CheckParameter): Take a DeclSpace instead of a
21364         TypeContainer; we only need a DeclSpace here.
21365
21366 2003-10-09  Martin Baulig  <martin@ximian.com>
21367
21368         * class.cs (MethodData): Added additional `DeclSpace ds' argument
21369         to the .ctor.
21370         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
21371         EmitContext's .ctor.    
21372
21373 2003-10-09  Martin Baulig  <martin@ximian.com>
21374
21375         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
21376         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
21377         AsAccessible(), moved them as well.
21378
21379         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
21380
21381 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
21382
21383         * cs-parser.jay : Renamed yyName to yyNames related to jay.
21384
21385 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
21386
21387         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
21388         generation for >=, as spotted by Paolo, bug 48679.  
21389         Patch from David Waite.
21390
21391         * cs-tokenizer.cs: Add handling for #pragma.
21392
21393         * cs-parser.jay: Allow for both yield and yield return in the
21394         syntax.  The anti-cobolization of C# fight will go on!
21395
21396         * class.cs (TypeBuilder.DefineType): Catch error condition here
21397         (Parent.DefineType erroring out and returning null).
21398
21399         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21400         coping with enumerations variables, we were mistakenly processing
21401         them as a regular value type instead of built-in types.  Fixes the
21402         bug #48063
21403
21404         * typemanager.cs (IsBuiltinOrEnum): New method.
21405
21406 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
21407
21408         * cs-parser.jay: Upgrade: yield now needs the return clause.
21409
21410 2003-09-19  Martin Baulig  <martin@ximian.com>
21411
21412         * decl.cs (MemberCache.SetupCacheForInterface): Take a
21413         `MemberCache parent' argument.  Normally, an interface doesn't
21414         have a parent type except System.Object, but we use this in gmcs
21415         for generic type parameters.
21416
21417 2003-09-18  Martin Baulig  <martin@ximian.com>
21418
21419         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
21420         on `type.IsInterface'; don't check whether the type has a parent
21421         to determine whether it's an interface.
21422
21423 2003-09-15  Martin Baulig  <martin@ximian.com>
21424
21425         * class.cs (TypeContainer.DefineType): Added an error flag to
21426         avoid reporting duplicate CS0146's ("class definition is
21427         circular.").
21428
21429         * driver.cs (Driver.MainDriver): Abort if
21430         RootContext.ResolveTree() reported any errors.
21431
21432 2003-09-07  Martin Baulig  <martin@ximian.com>
21433
21434         * report.cs (Error, Warning): Added overloaded versions which take
21435         a `params object[] args' and call String.Format().
21436
21437 2003-09-07  Martin Baulig  <martin@ximian.com>
21438
21439         * decl.cs (DeclSpace..ctor): Don't call
21440         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
21441         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
21442         (DeclSpace.RecordDecl): New method.
21443
21444         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
21445
21446 2003-09-02  Ravi Pratap  <ravi@ximian.com>
21447
21448         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
21449         value attributes to be applied to ParameterBuilders.
21450
21451         * class.cs (MethodCore.LabelParameters): Make static and more
21452         generic so that it can be used from other places - like interface
21453         methods, for instance.
21454
21455         * interface.cs (Interface.Emit): Call LabelParameters before
21456         emitting attributes on the InterfaceMethod.
21457
21458 2003-08-26  Martin Baulig  <martin@ximian.com>
21459
21460         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
21461         resolving aliases; fixes #47927.
21462
21463 2003-08-26  Martin Baulig  <martin@ximian.com>
21464
21465         * statement.cs (Using.DoResolve): This is internally emitting a
21466         try/finally clause, so we need to set ec.NeedExplicitReturn if we
21467         do not always return.  Fixes #47681.
21468
21469 2003-08-26  Martin Baulig  <martin@ximian.com>
21470
21471         * decl.cs (MemberCore): Moved WarningNotHiding(),
21472         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
21473         into MemberBase.
21474         (AdditionResult): Make this nested in DeclSpace.
21475         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
21476         argument; call NamespaceEntry.Define() unless we're nested in a
21477         class or struct.
21478
21479         * namespace.cs (Namespace.DefineName): New public function.  This
21480         is called from DeclSpace's .ctor to add 
21481         (Namespace.Lookup): Include DeclSpaces in the lookup.
21482
21483         * class.cs (Operator): Derive from MemberBase, not MemberCore.
21484
21485         * const.cs (Const): Derive from MemberBase, not MemberCore.     
21486
21487 2003-08-25  Martin Baulig  <martin@ximian.com>
21488
21489         * convert.cs (Convert.ExplicitReferenceConversion): When
21490         converting from an interface type to a class, unbox if the target
21491         type is a struct type.  Fixes #47822.
21492
21493 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21494
21495         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
21496         #47854.
21497
21498 2003-08-22  Martin Baulig  <martin@ximian.com>
21499
21500         * class.cs (TypeManager.DefineType): When defining a nested type,
21501         call DefineType() on our parent; fixes #47801.
21502
21503 2003-08-22  Martin Baulig  <martin@ximian.com>
21504
21505         * class.cs (MethodData.Define): While checking if a method is an
21506         interface implementation, improve the test a bit more to fix #47654.
21507
21508 2003-08-22  Martin Baulig  <martin@ximian.com>
21509
21510         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
21511         correctly; fixes #47722.
21512
21513 2003-08-22  Martin Baulig  <martin@ximian.com>
21514
21515         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
21516         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
21517
21518         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
21519
21520 2003-08-22  Martin Baulig  <martin@ximian.com>
21521
21522         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
21523         can only be assigned in static constructors.  Fixes #47161.
21524
21525 2003-08-22  Martin Baulig  <martin@ximian.com>
21526
21527         Rewrote and improved the flow analysis code.
21528
21529         * flowbranching.cs (FlowBranching): Make this class abstract.
21530         (FlowBranching.CreateBranching): New static function to create a
21531         new flow branching.
21532         (FlowBranchingBlock, FlowBranchingException): New classes.
21533         (FlowBranching.UsageVector.Type): New public readonly field.
21534         (FlowBranching.UsageVector.Breaks): Removed the setter.
21535         (FlowBranching.UsageVector.Returns): Removed the setter.
21536         (FlowBranching.UsageVector): Added Break(), Return(),
21537         NeverReachable() and Throw() methods to modify the reachability.
21538         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
21539         done by FlowBranching.Merge().
21540         (FlowBranching.UsageVector.MergeChild): New method; merges the
21541         merge result into the current vector.
21542         (FlowBranching.Merge): New abstract method to merge a branching.
21543
21544 2003-08-12  Martin Baulig  <martin@ximian.com>
21545
21546         * expression.cs (Indirection.CacheTemporaries): Create the
21547         LocalTemporary with the pointer type, not its element type.
21548
21549 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
21550
21551         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
21552         token was a keyword or not.
21553
21554         Add `error' options where an IDENTIFIER was expected;  Provide
21555         CheckToken and CheckIdentifierToken convenience error reporting
21556         functions. 
21557
21558         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
21559
21560         * decl.cs: Rename `NamespaceEntry Namespace' public field into
21561         NameSpaceEntry NameSpaceEntry.
21562
21563         (LookupInterfaceOrClass): Avoid creating a full qualified name
21564         from namespace and name: avoid doing lookups when we know the
21565         namespace is non-existant.   Use new Tree.LookupByNamespace which
21566         looks up DeclSpaces based on their namespace, name pair.
21567
21568         * driver.cs: Provide a new `parser verbose' to display the
21569         exception thrown during parsing.  This is turned off by default
21570         now, so the output of a failure from mcs is more graceful.
21571
21572         * namespace.cs: Track all the namespaces defined in a hashtable
21573         for quick lookup.
21574
21575         (IsNamespace): New method
21576
21577 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
21578
21579         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
21580         we know that we need to concatenate (full typename can never be
21581         null). 
21582
21583         * class.cs: ditto.
21584
21585         * statement.cs: Use a bitfield;  Do not initialize to null things
21586         which are done by the constructor by default.
21587
21588         * cs-parser.jay: bug fix, parameter was 4, not 3.
21589
21590         * expression.cs: Just use the property;
21591
21592         * statement.cs: No need for GetVariableInfo method.
21593
21594 2003-08-08  Martin Baulig  <martin@ximian.com>
21595
21596         * flowanalysis.cs (FlowReturns): This is now nested in the
21597         `FlowBranching' class.
21598         (MyBitVector): Moved this here from statement.cs.
21599         (FlowBranching.SiblingType): New enum type.
21600         (FlowBranching.CreateSibling): Added `SiblingType' argument.
21601
21602 2003-08-07  Martin Baulig  <martin@ximian.com>
21603
21604         * flowanalysis.cs (FlowBranchingType): This is now nested in the
21605         `FlowBranching' class and called `BranchingType'.
21606
21607 2003-08-07  Martin Baulig  <martin@ximian.com>
21608
21609         * flowanalysis.cs: Moved all the control flow analysis code into
21610         its own file.
21611
21612 2003-08-07  Martin Baulig  <martin@ximian.com>
21613
21614         * assign.cs (Assign.DoResolve): `target' must either be an
21615         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21616         #37319.
21617
21618 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21619
21620         * expression.cs (BinaryMethod): This kind of expression is created by the
21621         Binary class if it determines that the operator has to be handled
21622         by a method.
21623
21624         (BinaryDelegate): This kind of expression is created if we are
21625         dealing with a + or - operator on delegates.
21626
21627         (Binary): remove method, argumetns, and DelegateOperator: when
21628         dealing with methods, 
21629
21630         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21631
21632         * statement.cs (Block): use bitfields for the three extra booleans
21633         we had in use.   Remove unused topblock parameter.
21634
21635         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21636
21637         * assign.cs: Drop extra unneeded tests.
21638
21639 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21640
21641         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21642
21643         * statement.cs (Foreach): Use VariableStorage instead of
21644         LocalBuilders.   
21645
21646         * codegen.cs (VariableStorage): New class used by clients that
21647         require a variable stored: locals or fields for variables that
21648         need to live across yield.
21649
21650         Maybe provide a convenience api for EmitThis+EmitLoad?
21651
21652         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21653         these bad boys.
21654
21655 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21656
21657         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21658         RemapParameterLValue): New methods that are used to turn a
21659         precomputed FieldInfo into an expression like this:
21660
21661                 instance.FieldInfo
21662
21663         The idea is to use this instead of making LocalVariableReference
21664         have more than one meaning.
21665
21666         * cs-parser.jay: Add error production to BASE.
21667
21668         * ecore.cs: Deal with TypeManager.GetField returning null, which
21669         is now a valid return value.
21670
21671         (FieldExprNoAddress): New expression for Fields whose address can
21672         not be taken.
21673
21674         * expression.cs (LocalVariableReference): During the resolve
21675         phases, create new expressions if we are in a remapping context.
21676         Remove code that dealt with remapping here.
21677
21678         (ParameterReference): same.
21679
21680         (ProxyInstance): New expression, like the `This' expression, but
21681         it is born fully resolved.  We know what we are doing, so remove
21682         the errors that are targeted to user-provided uses of `this'.
21683
21684         * statement.cs (Foreach): our variable is now stored as an
21685         Expression;  During resolution, follow the protocol, dont just
21686         assume it will return this.
21687
21688 2003-08-06  Martin Baulig  <martin@ximian.com>
21689
21690         * support.cs (SeekableStreamReader.cs): New public class.
21691
21692         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21693         SeekableStreamReader instead of the normal StreamReader.
21694
21695 2003-08-04  Martin Baulig  <martin@ximian.com>
21696
21697         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21698         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21699         deambiguate casts and delegate invocations.
21700         (parenthesized_expression): Use the new tokens to ensure this is
21701         not a cast of method invocation.
21702
21703         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21704         when reading a `)' and Deambiguate_CloseParens () was previously
21705         called.
21706
21707         * expression.cs (ParenthesizedExpression): New class.  This is
21708         just used for the CS0075 test.
21709         (Binary.DoResolve): Check for CS0075.   
21710
21711 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21712
21713         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21714         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21715         reference comparison.
21716
21717         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21718         examine the ReturnType for equality - this is necessary in the
21719         cases of implicit and explicit operators whose signature also
21720         includes the return type.
21721
21722 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21723
21724         * namespace.cs: Cache the result of the namespace computation,
21725         instead of computing it every time.
21726
21727 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21728
21729         * decl.cs: Use a global arraylist that we reuse over invocations
21730         to avoid excesive memory consumption.  Reduces memory usage on an
21731         mcs compile by one meg (45 average).
21732
21733         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21734         private, work around that.
21735
21736 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21737
21738         * literal.cs (IntLiteral): Define Zero and One static literals. 
21739
21740         * cs-parser.jay (integer_literal): use static literals to reduce
21741         memory usage for the most used literals (0, 1 and -1).  211kb
21742         reduced in memory usage.
21743
21744         Replace all calls to `new ArrayList' with `new
21745         ArrayList(4)' which is a good average number for most allocations,
21746         and also requires only 16 bytes of memory for its buffer by
21747         default. 
21748
21749         This reduced MCS memory usage in seven megabytes for the RSS after
21750         bootstrapping.
21751
21752 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21753
21754         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21755         handle params methods the correct way by forming only one
21756         applicable set with params and normal methods in them. Earlier we
21757         were looking at params methods only if we found no normal methods
21758         which was not the correct thing to do.
21759
21760         (Invocation.BetterFunction): Take separate arguments indicating
21761         when candidate and the best method are params methods in their
21762         expanded form.
21763
21764         This fixes bugs #43367 and #46199.
21765
21766         * attribute.cs: Documentation updates.
21767
21768         (CheckAttribute): Rename to CheckAttributeTarget.
21769         (GetValidPlaces): Rename to GetValidTargets.
21770
21771         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21772         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21773
21774         Fixes bug #44468.
21775
21776 2003-07-28  Martin Baulig  <martin@ximian.com>
21777
21778         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21779         name when looking up the base class of a nested class.  Fixes #46977.
21780
21781 2003-07-26  Martin Baulig  <martin@ximian.com>
21782
21783         * expression.cs (Indexers.Indexer): New nested struct; contains
21784         getter, setter and the indexer's type.
21785         (Indexers.Properties): This is now an ArrayList of
21786         Indexers.Indexer's.
21787         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21788         indexer doesn't have any getters.
21789
21790         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21791         for embedded property and indexer assignments.
21792
21793 2003-07-26  Martin Baulig  <martin@ximian.com>
21794
21795         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21796         preprocessor directive is not the first non-whitespace character
21797         on a line.
21798
21799 2003-07-26  Martin Baulig  <martin@ximian.com>
21800
21801         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21802         namespace parsing, follow the spec more closely.
21803
21804         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21805         NamespaceEntry.Lookup().
21806
21807 2003-07-25  Martin Baulig  <martin@ximian.com>
21808
21809         * MethodCore.cs (OverridesSomething): New public field; it's set
21810         from TypeContainer.DefineMembers if this method overrides
21811         something (which doesn't need to be a method).  Fix #39462.
21812
21813 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21814
21815         * typemanager.cs (GetMembers): Ensure that the list of members is
21816         reversed. This keeps things in sync.
21817
21818         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21819         find an AttributeUsage attribute.
21820
21821         * expression.cs (Invocation.OverloadResolve): Perform the check
21822         which disallows Invoke to be directly called on a Delegate.
21823
21824         (Error_InvokeOnDelegate): Report error cs1533.
21825
21826 2003-07-25  Martin Baulig  <martin@ximian.com>
21827
21828         * expression.cs (Indexers.GetIndexersForType): Only look in the
21829         interface hierarchy if the requested type is already an
21830         interface.  Fixes #46788 while keeping #46502 fixed.
21831
21832 2003-07-25  Martin Baulig  <martin@ximian.com>
21833
21834         * class.cs (TypeContainer.DefineMembers): Check whether all
21835         readonly fields have been assigned and report warning CS0649 if
21836         not.
21837
21838         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21839         a valuetype.
21840
21841 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21842
21843         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21844         returned from GetMethods to make things consistent with the
21845         assumptions MCS makes about ordering of methods.
21846
21847         This should comprehensively fix bug #45127 and it does :-)
21848
21849         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21850         ordering is actually reverse.
21851
21852         * Clean up some debug messages I left lying around.
21853
21854         * interface.cs (Populate*): Get rid of code which emits attributes
21855         since the stage in which we emit attributes is the 'Emit' stage,
21856         not the define stage.
21857
21858         (Emit): Move attribute emission for interface members here.
21859
21860 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21861
21862         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21863         closely: we eliminate methods in base types when we have an
21864         applicable method in a top-level type.
21865
21866         Please see section 14.5.5.1 for an exact description of what goes
21867         on. 
21868
21869         This fixes bug #45127 and a host of other related to corlib compilation.
21870
21871         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21872         array is the method corresponding to the top-level type (this is
21873         because of the changes made to icall.c) so we change this
21874         accordingly.
21875
21876         (MethodGroupExpr.Name): This too.
21877
21878         * typemanager.cs (GetElementType): New method which does the right
21879         thing when compiling corlib. 
21880
21881         * everywhere: Make use of the above in the relevant places.
21882
21883 2003-07-22  Martin Baulig  <martin@ximian.com>
21884
21885         * cs-parser.jay (invocation_expression): Moved
21886         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21887         `cast_expression', but create a InvocationOrCast which later
21888         resolves to either an Invocation or a Cast.
21889
21890         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21891         method; call this before EmitStatement() to make sure that this
21892         expression can be used as a statement.
21893
21894         * expression.cs (InvocationOrCast): New class; resolves to either
21895         an Invocation or a Cast.
21896
21897         * statement.cs (StatementExpression): Call ResolveStatement() on
21898         the ExpressionStatement before emitting it.
21899
21900 2003-07-21  Martin Baulig  <martin@ximian.com>
21901
21902         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21903         `ref' and `out' attributes match; fixes #46220.
21904         (MemberAccess.ResolveMemberAccess): You can't reference a type
21905         through an expression; fixes #33180.
21906         (Indexers.GetIndexersForType): Don't return the indexers from
21907         interfaces the class implements; fixes #46502.
21908
21909 2003-07-21  Martin Baulig  <martin@ximian.com>
21910
21911         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21912         CS0661 checks; fixes bug #30442.
21913
21914 2003-07-21  Martin Baulig  <martin@ximian.com>
21915
21916         * decl.cs (AdditionResult): Added `Error'.
21917
21918         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21919
21920         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21921         makes cs0031.cs actually work.
21922
21923 2003-07-20  Martin Baulig  <martin@ximian.com>
21924
21925         * namespace.cs: Fixed that bug which caused a crash when compiling
21926         the debugger's GUI.
21927
21928 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21929
21930         * typemanager.cs (LookupTypeReflection): Never expose types which
21931         are NotPublic, NestedPrivate, NestedAssembly, or
21932         NestedFamANDAssem.  We used to return these, and later do a check
21933         that would report a meaningful error, but the problem is that we
21934         would not get the real match, if there was a name override.
21935
21936 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21937
21938         * namespace.cs (Namespace, Name): Do not compute the namespace
21939         name dynamically, compute it in the constructor.  This reduced
21940         memory usage by 1697 KB.
21941
21942         * driver.cs: Use --pause to pause at the end.
21943
21944 2003-07-17  Peter Williams  <peter@newton.cx>
21945
21946         * Makefile: Change the name of the test target so that it doesn't
21947         conflict with the recursive test target.
21948
21949 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21950
21951         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21952         AddressOf): Do not use EmitThis, that was wrong, use the actual
21953         this pointer.
21954
21955 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21956
21957         * class.cs (MethodData.Define): While checking if a method is an
21958         interface implementation, improve the test: If we are not public
21959         (use new test here: use the computed MethodAttributes directly,
21960         instead of the parsed modifier flags) check if the `implementing'
21961         method comes from an interface or not.
21962
21963         * pending.cs (VerifyPendingMethods): Slightly better error
21964         message.
21965
21966         * makefile: add test target that does the mcs bootstrap.
21967
21968 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21969
21970         * interface.cs (Define): Do nothing here since there are no
21971         members to populate etc. Move the attribute emission out of here
21972         since this was just totally the wrong place to put it. Attribute
21973         application happens during the 'Emit' phase, not in the 'Define'
21974         phase.
21975
21976         (Emit): Add this method and move the attribute emission here
21977
21978         * rootcontext.cs (EmitCode): Call the Emit method on interface
21979         types too.
21980
21981 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21982
21983         * expression.cs (OverloadResolve): Report error only if Location
21984         is not 'Null' which means that there was a probe going on.
21985
21986 2003-07-14  Martin Baulig  <martin@ximian.com>
21987
21988         * expression.cs (ConditionalLogicalOperator): New public class to
21989         implement user defined conditional logical operators.
21990         This is section 14.11.2 in the spec and bug #40505.
21991
21992 2003-07-14  Martin Baulig  <martin@ximian.com>
21993
21994         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21995
21996 2003-07-14  Martin Baulig  <martin@ximian.com>
21997
21998         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21999
22000         * ecore.cs (IVariable.VerifyFixed): New interface method.
22001
22002         * expression.cs (Unary.ResolveOperator): When resolving the `&'
22003         operator, check whether the variable is actually fixed.  Fixes bug
22004         #36055.  Set a variable definitely assigned when taking its
22005         address as required by the spec.
22006
22007         * statement.cs (LocalInfo.IsFixed): New field.
22008         (LocalInfo.MakePinned): Set `IsFixed' to true.
22009
22010 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
22011
22012         * attribute.cs (Attribute.Resolve): While doing a Member lookup
22013         for .ctors, ensure that we only ask for members declared in the
22014         attribute type (BindingFlags.DeclaredOnly).
22015
22016         Fixes bug #43632.
22017
22018         * expression.cs (Error_WrongNumArguments): Report error 1501
22019         correctly the way CSC does.
22020
22021 2003-07-13  Martin Baulig  <martin@ximian.com>
22022
22023         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
22024         lookup on the fully qualified name, to make things like "X.X" work
22025         where "X.X" is a fully qualified type name, but we also have a
22026         namespace "X" in the using list.  Fixes #41975.
22027
22028 2003-07-13  Martin Baulig  <martin@ximian.com>
22029
22030         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
22031         function. If we're a CompoundAssign, we need to create an embedded
22032         CompoundAssign, not an embedded Assign.
22033         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
22034         Fixes #45854.
22035
22036 2003-07-13  Martin Baulig  <martin@ximian.com>
22037
22038         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
22039         work to fix bug #46088.
22040
22041 2003-07-13  Ravi Pratap <ravi@ximian.com>
22042
22043         * class.cs (Operator.Emit): Do not emit attributes here - it is
22044         taken care of by the Method class that we delegate too. This takes
22045         care of bug #45876.
22046
22047 2003-07-10  Martin Baulig  <martin@ximian.com>
22048
22049         * expression.cs (TypeOfVoid): New class.
22050         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
22051
22052 2003-07-10  Martin Baulig  <martin@ximian.com>
22053
22054         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
22055         bug #35957.
22056
22057 2003-07-10  Martin Baulig  <martin@ximian.com>
22058
22059         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
22060         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
22061
22062         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
22063
22064         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
22065
22066 2003-07-10  Martin Baulig  <martin@ximian.com>
22067
22068         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
22069         of decimal.  Fixes #42850.
22070
22071         NOTE: I also fixed the created byte blob, but this doesn't work on
22072         the MS runtime and csc never produces any byte blobs for decimal
22073         arrays.
22074
22075 2003-07-10  Martin Baulig  <martin@ximian.com>
22076
22077         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
22078         structs; fixes #32068.
22079         (Block.AddChildVariableNames): Fixed #44302.
22080
22081 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22082
22083         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
22084
22085 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
22086
22087         * attribute.cs: And this test is onger needed.
22088
22089 2003-07-08  Martin Baulig  <martin@ximian.com>
22090
22091         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
22092         inaccessible types.  Fixes #36313.
22093
22094         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
22095
22096         * namespace.cs (NamespaceEntry): Create implicit entries for all
22097         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
22098         implicit entries for N1.N2 and N1.
22099
22100 2003-07-08  Martin Baulig  <martin@ximian.com>
22101
22102         Rewrote the handling of namespaces to fix a lot of the issues
22103         wrt. `using' aliases etc.
22104
22105         * namespace.cs (Namespace): Splitted this class into a
22106         per-assembly `Namespace' and a per-file `NamespaceEntry'.
22107
22108         * typemanager.cs (TypeManager.IsNamespace): Removed.
22109         (TypeManager.ComputeNamespaces): Only compute namespaces from
22110         loaded assemblies here, not the namespaces from the assembly we're
22111         currently compiling.
22112
22113 2003-07-08  Martin Baulig  <martin@ximian.com>
22114
22115         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
22116
22117 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
22118
22119         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
22120         already fixed it.  
22121
22122         I thought about the memory savings here, but LookupTypeReflection
22123         is used under already very constrained scenarios.  Compiling
22124         corlib or mcs only exposes one hit, so it would not really reduce
22125         any memory consumption.
22126
22127 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22128
22129         * typemanager.cs: fixes bug #45889 by only adding public types from
22130         other assemblies to the list of known types.
22131
22132 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
22133
22134         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
22135         on the type we resolved.
22136
22137 2003-07-05  Martin Baulig  <martin@ximian.com>
22138
22139         * pending.cs (PendingImplementation.ParentImplements): Don't
22140         create the proxy if the parent is abstract.
22141
22142         * class.cs (TypeContainer.DefineIndexers): Process explicit
22143         interface implementations first.  Fixes #37714.
22144
22145 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
22146
22147         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
22148         defined recursively;  but since we modify the input parameters
22149         (left is set to `this' temporarily), we reset this value if the
22150         left_is_explicit is false, which gives the original semantics to
22151         the code.  
22152
22153         * literal.cs (NullPointer): new class used to represent a null
22154         literal in a pointer context.
22155
22156         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
22157         type is a pointer, use a NullPointer object instead of a
22158         NullLiteral.   Closes 43687
22159
22160         (ExplicitConversion): Convert pointer values using
22161         the conv opcode to the proper type.
22162
22163         * ecore.cs (New): change ValueTypeVariable property into a method,
22164         that returns whether the valuetype is suitable for being used.
22165
22166         * expression.cs (Binary.DoNumericPromotions): Only return if we
22167         the int constant was a valid uint, and we can return both left and
22168         right as uints.  If not, we continue processing, to trigger the
22169         type conversion.  This fixes 39018.
22170
22171         * statement.cs (Block.EmitMeta): During constant resolution, set
22172         the CurrentBlock property on the emitcontext, so that we resolve
22173         constants propertly.
22174
22175 2003-07-02  Martin Baulig  <martin@ximian.com>
22176
22177         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
22178         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
22179
22180         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
22181         than emitting it here.
22182
22183         * statement.cs: Fixed some more flow analysis bugs.
22184
22185 2003-07-02  Martin Baulig  <martin@ximian.com>
22186
22187         * class.cs (MethodData.Define): When implementing interface
22188         methods, set Final unless we're Virtual.
22189
22190         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
22191         check work for interface methods.
22192
22193 2003-07-01  Martin Baulig  <martin@ximian.com>
22194
22195         * ecore.cs (EmitContext.This): Replaced this property with a
22196         GetThis() method which takes a Location argument.  This ensures
22197         that we get the correct error location for a CS0188.
22198
22199 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
22200
22201         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
22202         ImplicitStandardConversion.
22203
22204         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
22205
22206 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
22207
22208         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
22209         optimization.
22210
22211 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
22212
22213         * class.cs (Constructor.Define): Turn off initlocals for unsafe
22214         constructors.
22215
22216         (MethodData.Define): Turn off initlocals for unsafe methods.
22217
22218 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
22219
22220         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
22221         complete;  Fixes #37521.
22222
22223         * delegate.cs: Use Modifiers.TypeAttr to compute the
22224         TypeAttributes, instead of rolling our own.  This makes the flags
22225         correct for the delegates.
22226
22227 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
22228
22229         * class.cs (Constructor.Define): Set the private flag for static
22230         constructors as well.
22231
22232         * cs-parser.jay (statement_expression): Set the return value to
22233         null, to avoid a crash when we catch an error.
22234
22235 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
22236
22237         * cs-parser.jay: Applied patch from Jackson that adds support for
22238         extern and unsafe modifiers to destructor declarations.
22239
22240         * expression.cs: Report error 21 if the user is trying to index a
22241         System.Array.
22242
22243         * driver.cs: Add an error message, suggested by the bug report.
22244
22245         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
22246         if we do not have a ": this ()" constructor initializer.  Fixes 45149
22247
22248 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
22249
22250         * namespace.cs: Add some information to reduce FAQs.
22251
22252 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
22253
22254         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
22255         underlying enumeration types.  Fixes #43915.
22256
22257         * expression.cs: Treat ushort/short as legal values to be used in
22258         bitwise operations.
22259
22260 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
22261
22262         * delegate.cs: transfer custom attributes for paramenters from
22263         the delegate declaration to Invoke and BeginInvoke.
22264
22265 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
22266
22267         * attribute.cs: handle custom marshalers and emit marshal info
22268         for fields, too.
22269
22270 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
22271
22272         * makefile.gnu: Added anonymous.cs to the compiler sources.
22273
22274 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
22275
22276         * iterators.cs: Change the name of the proxy class to include two
22277         underscores.
22278
22279         * cs-parser.jay: Update grammar to include anonymous methods.
22280
22281         * anonymous.cs: new file.
22282
22283 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
22284
22285         * class.cs (Field.Define): Add missing test for pointers and
22286         safety. 
22287
22288 2003-05-27  Ravi Pratap  <ravi@ximian.com>
22289
22290         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
22291         we use the stobj opcode.
22292
22293         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
22294         since it wasn't the correct fix. 
22295
22296         It still is puzzling that we are required to use stobj for IntPtr
22297         which seems to be a ValueType.
22298
22299 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
22300
22301         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
22302         during regular simple name resolution.   Now, the trick is that
22303         instead of returning for processing the simplename, we do a
22304         TypeManager.LookupType (ie, a rooted lookup as opposed to a
22305         contextual lookup type).   If a match is found, return that, if
22306         not, return for further composition.
22307
22308         This fixes long-standing 30485.
22309
22310         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
22311         using the address to initialize an object, do an Stobj instead of
22312         using the regular Stelem.
22313
22314         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
22315         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
22316         Because if we are a BaseIndexerAccess that value will be true.
22317         Fixes 43643.
22318
22319         * statement.cs (GotoCase.Resolve): Return after reporting an
22320         error, do not attempt to continue. 
22321
22322         * expression.cs (PointerArithmetic.Emit): If our operand is a
22323         long, convert our constants to match the operand before
22324         multiplying.  Convert to I type before adding.   Fixes 43670.
22325
22326 2003-05-14  Ravi Pratap  <ravi@ximian.com>
22327
22328         * enum.cs (ImplicitConversionExists) : Rename to
22329         ImplicitEnumConversionExists to remove ambiguity. 
22330
22331         * ecore.cs (NullCast): New type of cast expression class which
22332         basically is very similar to EmptyCast with the difference being
22333         it still is a constant since it is used only to cast a null to
22334         something else
22335         (eg. (string) null)
22336
22337         * convert.cs (ImplicitReferenceConversion): When casting a null
22338         literal, we return a NullCast.
22339
22340         * literal.cs (NullLiteralTyped): Remove - I don't see why this
22341         should be around anymore.
22342
22343         The renaming (reported was slightly wrong). Corrections:
22344
22345         ConvertImplicitStandard -> ImplicitConversionStandard
22346         ConvertExplicitStandard -> ExplicitConversionStandard
22347
22348         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
22349         before passing them in !
22350
22351         * convert.cs (ImplicitConversionStandard): When comparing for
22352         equal expr and target types, ensure that expr is not a
22353         NullLiteral.
22354
22355         In general, we must not be checking (expr_type ==
22356         target_type) in the top level conversion methods
22357         (ImplicitConversion, ExplicitConversion etc). This checking is
22358         done in the methods that they delegate to.
22359
22360 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
22361
22362         * convert.cs: Move Error_CannotConvertType,
22363         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
22364         ImplicitNumericConversion, ImplicitConversionExists,
22365         ImplicitUserConversionExists, StandardConversionExists,
22366         FindMostEncompassedType, FindMostSpecificSource,
22367         FindMostSpecificTarget, ImplicitUserConversion,
22368         ExplicitUserConversion, GetConversionOperators,
22369         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
22370         TryImplicitIntConversion, Error_CannotConvertImplicit,
22371         ConvertImplicitRequired, ConvertNumericExplicit,
22372         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
22373         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
22374         its own file.
22375
22376         Perform the following renames:
22377
22378         StandardConversionExists -> ImplicitStandardConversionExists
22379         ConvertImplicit -> ImplicitConversion
22380         ConvertImplicitStandard -> ImplicitStandardConversion
22381         TryImplicitIntConversion -> ImplicitIntConversion
22382         ConvertImplicitRequired -> ImplicitConversionRequired
22383         ConvertNumericExplicit -> ExplicitNumericConversion
22384         ConvertReferenceExplicit -> ExplicitReferenceConversion
22385         ConvertExplicit -> ExplicitConversion
22386         ConvertExplicitStandard -> ExplicitStandardConversion
22387
22388 2003-05-19  Martin Baulig  <martin@ximian.com>
22389
22390         * statement.cs (TypeInfo.StructInfo): Made this type protected.
22391         (TypeInfo): Added support for structs having structs as fields.
22392
22393         * ecore.cs (FieldExpr): Implement IVariable.
22394         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
22395         VariableInfo for the field.
22396
22397 2003-05-18  Martin Baulig  <martin@ximian.com>
22398
22399         * expression.cs (This.DoResolve): Report a CS0027 if we're
22400         emitting a field initializer.
22401
22402 2003-05-18  Martin Baulig  <martin@ximian.com>
22403
22404         * expression.cs (This.ResolveBase): New public function.
22405         (This.DoResolve): Check for CS0188.
22406
22407         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
22408         This.Resolve().
22409
22410         * ecore.cs (MethodGroupExpr.DoResolve): Set the
22411         `instance_expression' to null if we don't have any non-static
22412         methods.
22413
22414 2003-05-18  Martin Baulig  <martin@ximian.com>
22415
22416         Reworked the way how local variables and parameters are handled by
22417         the flow analysis code.
22418
22419         * statement.cs (TypeInfo, VariableMap): New public classes.
22420         (VariableInfo): New public class.  This is now responsible for
22421         checking whether a variable has been assigned.  It is used for
22422         parameters and local variables.
22423         (Block.EmitMeta): Take the InternalParameters as argument; compute
22424         the layout of the flow vectors here.
22425         (Block.LocalMap, Block.ParameterMap): New public properties.
22426         (FlowBranching): The .ctor doesn't get the InternalParameters
22427         anymore since Block.EmitMeta() now computes the layout of the flow
22428         vector.
22429         (MyStructInfo): This class is now known as `StructInfo' and nested
22430         in `TypeInfo'; we don't access this directly anymore.
22431
22432         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
22433         property and removed IsAssigned(), IsFieldAssigned(),
22434         SetAssigned() and SetFieldAssigned(); we now call them on the
22435         VariableInfo so we don't need to duplicate this code everywhere.
22436
22437         * expression.cs (ParameterReference): Added `Block block' argument
22438         to the .ctor.
22439         (LocalVariableReference, ParameterReference, This): The new
22440         VariableInfo class is now responsible for all the definite
22441         assignment stuff.
22442
22443         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
22444         IsParameterAssigned, SetParameterAssigned): Removed.
22445
22446 2003-05-18  Martin Baulig  <martin@ximian.com>
22447
22448         * typemanager.cs (InitCoreTypes): Try calling
22449         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
22450         the 3-args-version.  Corlib now also needs our `void_type'.
22451         (GetMethod): Added overloaded version which takes an optional
22452         `bool report_errors' to allow lookups of optional methods.
22453
22454 2003-05-12  Martin Baulig  <martin@ximian.com>
22455
22456         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
22457         only used for locals and not for parameters.
22458
22459 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
22460
22461         * support.cs (InternalParameters.ParameterType): Return the
22462         ExternalType of the parameter.
22463
22464         * parameter.cs (Parameter.ExternalType): drop the two arguments,
22465         they were unused.
22466
22467 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
22468
22469         * class.cs (MethodData.Define): Do not set the `newslot' on
22470         interface members, if they are also flagged as "override".
22471
22472         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
22473         better code for ++i and i++.  This only works for static fields
22474         and local variables.
22475
22476         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
22477         want to pull the DeclSpace out of the builder_to_declspace instead
22478         of the TypeBuilder (like in TypeContainer.FindMembers).
22479
22480         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
22481         instead of LookupTypeContainer.  Fixes the crash on .NET for
22482         looking up interface members.
22483
22484         * const.cs: Create our own emit context during the Definition
22485         stage, so that constants are evaluated in the proper context, when
22486         a recursive definition happens.
22487
22488 2003-05-11  Martin Baulig  <martin@ximian.com>
22489
22490         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
22491         new block for a switch section.
22492         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
22493         the adding/lookup in the switch block.  Fixes #39828.
22494
22495 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
22496
22497         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
22498         functionality: I needed to convert the data after I had performed
22499         the add/sub operation into the operands type size.
22500
22501         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
22502         pass the type for the box operation, otherwise the resulting
22503         object would have been of type object.
22504
22505         (BoxedCast): Add constructor to specify the type to box as.
22506
22507 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
22508
22509         * iterators.cs: I was reusing the `count' variable inadvertently,
22510         take steps to not allow this to happen.
22511
22512 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
22513
22514         * attribute.cs (Attribute.Resolve): Params attributes are encoded
22515         by creating an array at the point where the params starts and
22516         putting all those arguments there, then adjusting the size of the
22517         array.
22518
22519 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
22520
22521         * expression.cs (New.AddressOf): Implement interface
22522         IMemoryLocation.  This is used when the `new' operator is used in
22523         the context of an invocation to a method on a value type.
22524
22525         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
22526         example. 
22527
22528         * namespace.cs: Also check the using aliases here.
22529
22530         * driver.cs: Move the test for using validity after the types have
22531         been entered, so we do a single pass that also includes the using
22532         aliases. 
22533
22534         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
22535         in the regular case.   CreateSiblingForFinally is doing extra
22536         error checking.
22537
22538         * attribute.cs (GetAttributeArgumentExpression): Store the result
22539         on an out value, and use the return value to indicate failure
22540         instead of using null (which is a valid return for Constant.GetValue).
22541
22542         * statement.cs: Perform the analysis flow for the increment
22543         portion after the statement, because this will be the real flow of
22544         execution.  Fixes #42385
22545
22546         * codegen.cs (EmitContext.EmitArgument,
22547         EmitContext.EmitStoreArgument): New helper functions when the
22548         RemapToProxy flag is set.
22549
22550         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
22551         function.
22552
22553         Add support for remapping parameters. 
22554
22555         * iterators.cs: Propagate parameter values;  Store parameter
22556         values in the proxy classes.
22557
22558 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
22559
22560         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
22561         need a proxy reference;  I do not know what I was thinking
22562
22563         * cs-parser.jay (constructor_initializer): catch another error,
22564         and display nice message.
22565
22566         (field_declaration): catch void field declaration
22567         to flag a better error. 
22568
22569         * class.cs (MemberBase.CheckBase): Report an error instead of a
22570         warning if a new protected member is declared in a struct. 
22571         (Field.Define): catch the error of readonly/volatile.
22572
22573         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
22574
22575         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
22576         volatile variable is taken
22577
22578 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
22579
22580         * statement.cs (Fixed.Resolve): Report an error if we are not in
22581         an unsafe context.
22582
22583 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
22584
22585         * typemanager.cs: reuse the code that handles type clashes for
22586         delegates and enumerations.
22587
22588         * class.cs (Report28): Always report.
22589
22590         * expression.cs (EncodeAsAttribute): Allow nulls here.
22591
22592 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
22593
22594         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
22595         the functionality for testing whether an expression is valid for
22596         an attribute here.  Also handle the case of arrays of elements
22597         being stored. 
22598
22599         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
22600         encoding a linear array into an array of objects that are suitable
22601         to be passed to an CustomAttributeBuilder.
22602
22603         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
22604
22605         * ecore.cs: (FieldExpr): Handle field remapping here.
22606
22607         * iteratators.cs: Pass the instance variable (if the method is an
22608         instance method) to the constructors, so we can access the field
22609         variables on the class.
22610
22611         TODO: Test this with structs.  I think the THIS variable on
22612         structs might have to be a pointer, and not a refenrece
22613
22614 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22615
22616         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22617         local variables to fields in a proxy class.
22618
22619         * iterators.cs (PopulateProxy): Rename our internal fields to
22620         <XXX>.  
22621         Create a <THIS> field if we are an instance method, so we can
22622         reference our parent container variables.
22623         (MapVariable): Called back from the EmitContext code to enter a
22624         new variable to field mapping into the proxy class (we just create
22625         a FieldBuilder).
22626
22627         * expression.cs
22628         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22629         for using the remapped locals to fields.
22630
22631         I placed the code here, because that gives the same semantics to
22632         local variables, and only changes the Emit code.
22633
22634         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22635         statements inside iterators.
22636         (VariableInfo): Add a FieldBuilder for the cases when we are
22637         remapping local variables to fields in a proxy class
22638
22639         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22640         current_block != null.
22641
22642         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22643         not cope with strings, as it has been moved to the
22644         TableSwitchEmit.  Fixed bug in switch generation.
22645
22646         * expression.cs (New.DoResolve): Provide more context for the user
22647         when reporting an error.
22648
22649         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22650         pointers. 
22651
22652         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22653         check the permissions for it.  Note than in a type-resolution
22654         context the check was already present in DeclSpace.ResolveType,
22655         but was missing from the MemberAccess.
22656
22657         (ArrayCreation.CheckIndices): warn if the user has
22658         more nested levels of expressions, but there are no more
22659         dimensions specified.  Avoids crash on bug 41906.
22660
22661 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22662
22663         * statement.cs (Block): replace Implicit bool, for a generic
22664         flags.   
22665         New flag: `Unchecked'.  This is used during the EmitMeta phase
22666         (which is out-of-line with the regular Resolve/Emit process for a
22667         statement, as this is done ahead of time, but still gets a chance
22668         to call constant resolve).
22669
22670         (Block.Flags): new enum for adding a new flag.
22671
22672         (Block.EmitMeta): track the state of unchecked.
22673
22674         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22675         to enable constant resolution to work there as well.
22676
22677 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22678
22679         * typemanager.cs (ienumerable_type): Also look up
22680         System.Collections.IEnumerable. 
22681
22682 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22683
22684         TODO: Test more than one conditional per method.
22685
22686         * class.cs (Indexer.Define): Report the location where the user is
22687         referencing the unsupported feature.
22688
22689         (MethodData): Overload the use of `conditionals' to
22690         minimize the creation of needless ArrayLists.   This saves roughly
22691         212kb on my machine.
22692
22693         (Method): Implement the new IIteratorContainer interface.
22694         (Method.SetYields): Implement the method by setting the ModFlags
22695         to contain METHOD_YIELDS.
22696
22697         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22698         which just got set to null.
22699
22700         * iterators.cs: New file.
22701
22702         (Yield, YieldBreak): New statements.
22703
22704         * statement.cs (Return.Resolve): Flag an error if we are used in
22705         an iterator method.
22706
22707         * codegen.cs (InIterator): New flag set if the code is being
22708         compiled in an iterator method.
22709
22710         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22711         internal modifier, and we just use it to avoid adding extra
22712         fields, as this is seldom used.  
22713
22714         * cs-parser.jay: Add yield_statement (yield and yield break).
22715
22716         * driver.cs: New flag -v2 to turn on version 2 features. 
22717
22718         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22719         hashtable when v2 is enabled.
22720
22721 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22722
22723         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22724         there is already a namespace defined with this name.
22725
22726         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22727         people upgraded their corlibs.
22728
22729         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22730         always use fully qualified types, no need to use the compiler
22731         front end.
22732
22733         (TypeManager.IsNamespace): Use binarysearch.
22734
22735         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22736         AddDelegate): I did not quite use the new IsValid API properly: I
22737         have to pass the short-name and the fullname.  I was passing only
22738         the basename instead of the fullname sometimes. 
22739
22740         (TypeContainer.DefineType): call NamespaceClash.
22741
22742         * interface.cs (Interface.DefineType): use NamespaceClash before
22743         defining the type.
22744
22745         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22746         defining the type.
22747
22748         * enum.cs: (Enum.DefineType): use NamespaceClash before
22749         defining the type.
22750
22751         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22752         speed increase.  First, use the negative_hits cache when we get a
22753         negative.  Second, add the type with its full original name
22754         instead of the new . and + encoded name (reflection uses + to
22755         separate type from a nested type).  Use LookupTypeReflection
22756         directly which bypasses the type->name hashtable (that we already
22757         know does not contain the type.
22758
22759         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22760         location/container type. 
22761
22762         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22763
22764 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22765
22766         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22767
22768         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22769         method is being referenced in the method group from a static
22770         context, and report error 120 if so.
22771
22772         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22773         Error118. 
22774
22775         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22776         is created, we create the A namespace).
22777
22778         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22779         Fixes #41591
22780
22781 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22782
22783         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22784         invocation to ModuleBuilder.GetType with the same values will
22785         return a new type instance, so we need to cache its return
22786         values. 
22787
22788         * expression.cs (Binary.ResolveOperator): Only allow the compare
22789         operators on enums if they are of the same type.
22790
22791         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22792         types of ValueType on their own case.  Before we were giving them
22793         the same treatment as objects.
22794
22795         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22796         fullname.  Short name is used to compare against container name.
22797         Fullname is used to check against defined namespace names.
22798
22799         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22800         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22801
22802         (Method.CheckBase): Call parent.
22803         (MemberBase.CheckBase): Check for protected members on sealed
22804         classes.
22805         (PropertyBase.CheckBase): Call parent.
22806         (Field.Define): Call parent.
22807
22808         * report.cs: Negative error codes are now mapped to 8000 - code,
22809         so that the display is render more nicely.
22810
22811         * typemanager.cs: Do not use try/catch, instead report a regular
22812         error. 
22813
22814         (GetPointerType, GetReferenceType): These methods provide
22815         mechanisms to obtain the T* and T& from a T.  We had the code
22816         previously scattered around the code base, and it also used
22817         TypeManager.LookupType that would go through plenty of caches.
22818         This one goes directly to the type source.
22819
22820         In some places we did the Type.GetType followed by
22821         ModuleBuilder.GetType, but not in others, so this unifies the
22822         processing as well.
22823
22824         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22825         statements now that we have namespace information.
22826
22827         * typemanager.cs (IsNamespace): New method, returns whether the
22828         string presented is a namespace or not.
22829
22830         (ComputeNamespaces): New public entry point, computes the list of
22831         available namespaces, using the GetNamespaces API call in Mono, or
22832         the slower version in MS.NET.   
22833
22834         Now before we start the semantic analysis phase, we have a
22835         complete list of namespaces including everything that the user has
22836         provided.
22837
22838         Deleted old code to cache namespaces in .nsc files.
22839
22840 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22841
22842         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22843         class/struct location definition Location for the implicit
22844         constructor location.
22845
22846         (Operator.Define): Use the location of the operator for the
22847         implicit Method definition.
22848
22849         (Constructor.Emit): use the constructor location for the implicit
22850         base initializer constructor.
22851
22852         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22853         and the Expression class now contains two new methods:
22854
22855         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22856         isolate type lookup from the rest of the resolution process.
22857
22858         Since we use Expressions to hold type definitions due to the way
22859         we parse the input we have historically overloaded Resolve to
22860         perform the Type lookups if a special flag is passed.  Now this is
22861         eliminated and two methods take their place. 
22862
22863         The differences in the two methods between xStep and xTerminal is
22864         that xStep is involved in our current lookup system that uses
22865         SimpleNames to compose a name, while xTerminal is used just to
22866         catch the case where the simplename lookup failed.
22867
22868 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22869
22870         * expression.cs (ResolveMemberAccess): Remove redundant code.
22871         TypeExpr expressions are always born fully resolved.
22872
22873         * interface.cs (PopulateMethod): Do not lookup the types twice.
22874         We were doing it once during SemanticAnalysis and once during
22875         PopulateMethod.
22876
22877         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22878         in local variable type definitions, were being returned as a
22879         SimpleName (we decomposed everything into a string), that is
22880         because primary_expression was being used instead of a type in the
22881         grammar (reduce/reduce conflicts).
22882
22883         The part that was wrong is that we converted the expression into a
22884         string (an oversimplification in one hand, compounded with primary
22885         expressions doing string concatenation).
22886
22887         So things like:
22888
22889         A.B.C [] x;
22890
22891         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22892         using clauses from working on this particular context.  And a type
22893         was being matched directly against "A.B.C[]".
22894
22895         We now use the correct approach, and allow for ComposedCast to be
22896         part of the unary expression.  So the "A.B.C []" become a composed
22897         cast of "A.B.C" (as a nested group of MemberAccess with a
22898         SimpleName at the end) plus the rank composition "[]". 
22899
22900         Also fixes 35567
22901
22902 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22903
22904         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22905         for the access level checking.
22906
22907         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22908         `TypeContainer container', because I kept getting confused when I
22909         was debugging this code.
22910
22911         * expression.cs (Indexers): Instead of tracking getters/setters,
22912         we now track them in parallel.  We create one arraylist less, but
22913         most importantly it is possible now for the LValue code to find a
22914         matching get for a set.
22915
22916         (IndexerAccess.DoResolveLValue): Update the code.
22917         GetIndexersForType has been modified already to extract all the
22918         indexers from a type.  The code assumed it did not.
22919
22920         Also make the code set the correct return type for the indexer.
22921         This was fixed a long time ago for properties, but was missing for
22922         indexers.  It used to be void_type.
22923
22924         (Binary.Emit): Test first for doubles instead of
22925         floats, as they are more common.
22926
22927         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22928         when dealing with floats and the <=, >= operators.  This fixes bug
22929         #39314 
22930
22931         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22932         to load the array value by emitting a load on the foreach variable
22933         type.  This was incorrect.  
22934
22935         We now emit the code to load an element using the the array
22936         variable type, and then we emit the conversion operator.
22937
22938         Fixed #40176
22939
22940 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22941
22942         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22943
22944 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22945
22946         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22947         test for protection before we test for signatures. 
22948
22949         (MethodSignature.ToString): implement.
22950
22951         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22952         to the case where we reduced into a LongConstant.
22953
22954         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22955         depend on whether the information is acurrate, because the
22956         Microsoft runtime will always claim that the array type is public,
22957         regardless of the real state.
22958
22959         If the type is a pointer, another problem happens: the type is
22960         reported as non-public in Microsoft.  
22961
22962         In both cases we have to call CheckAccessLevel recursively with
22963         the underlying type as the argument to be tested.
22964
22965 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22966
22967         * assign.cs (Assign.Emit): If we are dealing with a compound
22968         assignment expression, we should use the code path that stores the
22969         intermediate result in a temporary value.  This fixes #40903.
22970
22971         *expression.cs (Indirection.ToString): Provide ToString method for
22972         debugging. 
22973
22974 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22975
22976         * class.cs: Null out fields holding references to Block objects so
22977         they can be garbage collected.
22978
22979         * expression.cs (OverloadResolve): Remove unused local.
22980
22981 2003-04-07  Martin Baulig  <martin@ximian.com>
22982
22983         * codegen.cs (EmitContext.CurrentFile): New public field.
22984         (EmitContext.Mark): Use the CurrentFile to check whether the
22985         location is in the correct file.
22986         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22987
22988 2003-04-07  Martin Baulig  <martin@ximian.com>
22989
22990         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22991
22992         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22993         location.  [FIXME: The location argument which gets passed to this
22994         method is sometimes wrong!]
22995
22996 2003-04-07  Nick Drochak <ndrochak@gol.com>
22997
22998         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22999
23000 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
23001
23002         * expression.cs (Indirection.EmitAssign): We were using the
23003         temporary, but returning immediately instead of continuing the
23004         EmitAssing flow.
23005
23006 2003-04-06  Martin Baulig  <martin@ximian.com>
23007
23008         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
23009         if it's a nested child, but also deriving from the outer class.
23010         See test 190.cs.
23011
23012         * typemanager.cs (IsNestedChildOf): Make this work if it's a
23013         nested child, but also deriving from the outer class.  See
23014         test-190.cs.
23015         (FilterWithClosure): We may access private members of the outer
23016         class if we're a nested child and deriving from the outer class.
23017         (RealMemberLookup): Only set `closure_private_ok' if the
23018         `original_bf' contained BindingFlags.NonPublic.
23019
23020 2003-04-05  Martin Baulig  <martin@ximian.com>
23021
23022         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
23023
23024 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
23025
23026         * class.cs (Event.Define): Do not allow abstract events to have
23027         initializers. 
23028
23029 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
23030
23031         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
23032         block in event declarations.
23033
23034         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
23035         value type, get its address.
23036
23037         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
23038         leaving a class on the stack instead of a boolean value (int
23039         0/1).  Change the code so we compare against null, and then the
23040         result against zero.
23041
23042         * class.cs (TypeContainer.GetClassBases): We were checking for the
23043         parent class being sealed too late.
23044
23045         * expression.cs (Binary.Emit): For <= and >= when dealing with
23046         floating point values, use cgt.un and clt.un instead of cgt and
23047         clt alone.
23048
23049 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
23050
23051         * statement.cs: Apply the same optimization as MS: skip the 
23052         GetEnumerator returning an IEnumerator, and use the one returning a 
23053         CharEnumerator instead. This allows us to avoid the try-finally block 
23054         and the boxing.
23055
23056 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
23057
23058         * cs-parser.jay: Attributes cannot be applied to
23059                          namespaces. Fixes #40473
23060
23061 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23062
23063         * class.cs:
23064         (Add*): check if the name is valid using the full name for constants,
23065         fields, properties and events.
23066
23067 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
23068
23069         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
23070         char constants to be part of the enumeration.
23071
23072         * expression.cs (Conditional.DoResolve): Add support for operator
23073         true. Implements the missing functionality from 14.12
23074
23075         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
23076         operator true/false as required by the spec.
23077
23078         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
23079         implicit conversion to boolean.
23080
23081         * statement.cs (Statement.ResolveBoolean): A boolean expression is
23082         also one where the type implements `operator true'. 
23083
23084         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
23085         get an expression that will invoke operator true based on an
23086         expression.  
23087
23088         (GetConversionOperators): Removed the hack that called op_True
23089         here.  
23090
23091         (Expression.ResolveBoolean): Move this from Statement.
23092
23093 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
23094
23095         * ecore.cs (FieldExpr): do not allow initialization of initonly
23096         fields on derived classes
23097
23098 2003-03-13  Martin Baulig  <martin@ximian.com>
23099
23100         * statement.cs (Block.Emit): Call ig.BeginScope() and
23101         ig.EndScope() when compiling with debugging info; call
23102         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
23103
23104 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
23105
23106         * expression.cs (Indexers): Do not construct immediately, allow
23107         for new members to be appended as we go.  Fixes 38143
23108
23109 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23110
23111         * expression.cs: save/restore context when resolving an unchecked
23112         expression.
23113
23114 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
23115
23116         * cfold.cs: Catch division by zero in modulus operator during
23117         constant folding.
23118
23119 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
23120
23121         * interface.cs (Interface.DefineMembers): Avoid defining members
23122         twice. 
23123
23124 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
23125
23126         * driver.cs: handle the +/- options for -noconfig
23127
23128         * statement.cs (Unckeched.Resolve): Also track the state of
23129         unchecked in the Resolve phase.
23130
23131 2003-02-27  Martin Baulig  <martin@ximian.com>
23132
23133         * ecore.cs (Expression.MemberLookup): Don't create a
23134         MethodGroupExpr for something which is not a method.  Fixes #38291.
23135
23136 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
23137
23138         * class.cs (MemberBase.CheckParameters): Also check that the type
23139         is unmanaged if it is a pointer.
23140
23141         * expression.cs (SizeOf.Resolve): Add location information.
23142
23143         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
23144         a managed type is declared.
23145
23146         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
23147         parameter modifiers as well.  Fixes bug 38606
23148
23149         * class.cs: Very sad.  Am backing out the speed up changes
23150         introduced by the ArrayList -> Array in the TypeContainer, as they
23151         were not actually that much faster, and introduced a bug (no error
23152         reports on duplicated methods).
23153
23154         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
23155         source first, this will guarantee that we have a valid expression
23156         before calling in lower levels functions that will require a
23157         resolved object.  Then use this original_source in the
23158         target.ResolveLValue instead of the original source that was
23159         passed to us.
23160
23161         Another change.  Use target.Resolve instead of LValueResolve.
23162         Although we are resolving for LValues, we will let the Assign code
23163         take care of that (it will be called again from Resolve).  This
23164         basically allows code like this:
23165
23166         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
23167         class Y { void A (X x) { x [0] += o; }
23168
23169         The problem was that the indexer was trying to resolve for
23170         set_Item (idx, object o) and never finding one.  The real set_Item
23171         was set_Item (idx, X).  By delaying the process we get the right
23172         semantics. 
23173
23174         Fixes bug 36505
23175
23176 2003-02-23  Martin Baulig  <martin@ximian.com>
23177
23178         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
23179         while calling DoEmit ().
23180
23181         * codegen.cs (EmitContext.Mark): Don't mark locations in other
23182         source files; if you use the #line directive inside a method, the
23183         compiler stops emitting line numbers for the debugger until it
23184         reaches the end of the method or another #line directive which
23185         restores the original file.
23186
23187 2003-02-23  Martin Baulig  <martin@ximian.com>
23188
23189         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
23190
23191 2003-02-23  Martin Baulig  <martin@ximian.com>
23192
23193         * statement.cs (Block.AddChildVariableNames): We need to call this
23194         recursively, not just for our immediate children.
23195
23196 2003-02-23  Martin Baulig  <martin@ximian.com>
23197
23198         * class.cs (Event.Define): Always make the field private, like csc does.
23199
23200         * typemanager.cs (TypeManager.RealMemberLookup): Make events
23201         actually work, fixes bug #37521.
23202
23203 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
23204
23205         * delegate.cs: When creating the various temporary "Parameters"
23206         classes, make sure that we call the ComputeAndDefineParameterTypes
23207         on those new parameters (just like we do with the formal ones), to
23208         allow them to be resolved in the context of the DeclSpace.
23209
23210         This fixes the bug that Dick observed in Bugzilla #38530.
23211
23212 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
23213
23214         * expression.cs (ResolveMemberAccess): When resolving a constant,
23215         do not attempt to pull a constant if the value was not able to
23216         generate a valid constant.
23217
23218         * const.cs (LookupConstantValue): Do not report more errors than required.
23219
23220 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23221
23222         * expression.cs: fixes bug #38328.
23223
23224 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
23225
23226         * class.cs: Changed all the various members that can be part of a
23227         class from being an ArrayList to be an Array of the right type.
23228         During the DefineType type_list, interface_list, delegate_list and
23229         enum_list are turned into types, interfaces, delegates and enums
23230         arrays.  
23231
23232         And during the member population, indexer_list, event_list,
23233         constant_list, field_list, instance_constructor_list, method_list,
23234         operator_list and property_list are turned into their real arrays.
23235
23236         Although we could probably perform this operation earlier, for
23237         good error reporting we need to keep the lists and remove the
23238         lists for longer than required.
23239
23240         This optimization was triggered by Paolo profiling the compiler
23241         speed on the output of `gen-sample-program.pl' perl script. 
23242
23243         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
23244         not crash in methods like MemberLookupFailed that use this field.  
23245
23246         This problem arises when the compiler fails to resolve a type
23247         during interface type definition for example.
23248
23249 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
23250
23251         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
23252         inherit from System.Object, so we have to stop at null, not only
23253         when reaching System.Object.
23254
23255 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
23256
23257         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
23258         DeclaredOnly because the parent indexer might have had a different
23259         name, but did not loop until the top of the hierarchy was reached.
23260
23261         The problem this one fixes is 35492: when a class implemented an
23262         indexer from an interface, we were getting the interface method
23263         (which was abstract) and we were flagging an error (can not invoke
23264         abstract method).
23265
23266         This also keeps bug 33089 functioning, and test-148 functioning.
23267
23268         * typemanager.cs (IsSpecialMethod): The correct way of figuring
23269         out if a method is special is to see if it is declared in a
23270         property or event, or whether it is one of the predefined operator
23271         names.   This should fix correctly #36804.
23272
23273 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
23274
23275         The goal here is to remove the dependency on EmptyCast.Peel ().
23276         Killing it completely.
23277
23278         The problem is that currently in a number of places where
23279         constants are expected, we have to "probe" for an EmptyCast, and
23280         Peel, which is not the correct thing to do, as this will be
23281         repetitive and will likely lead to errors. 
23282
23283         The idea is to remove any EmptyCasts that are used in casts that
23284         can be reduced to constants, so we only have to cope with
23285         constants. 
23286
23287         This bug hunt was triggered by Bug 37363 and the desire to remove
23288         the duplicate pattern where we were "peeling" emptycasts to check
23289         whether they were constants.  Now constants will always be
23290         constants.
23291
23292         * ecore.cs: Use an enumconstant here instead of wrapping with
23293         EmptyCast.  
23294
23295         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
23296         throwing me off.  By handling this we can get rid of a few hacks.
23297
23298         * statement.cs (Switch): Removed Peel() code.
23299
23300 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
23301
23302         * class.cs: Location information for error 508
23303
23304         * expression.cs (New.DoResolve): Add a guard against double
23305         resolution of an expression.  
23306
23307         The New DoResolve might be called twice when initializing field
23308         expressions (see EmitFieldInitializers, the call to
23309         GetInitializerExpression will perform a resolve on the expression,
23310         and later the assign will trigger another resolution
23311
23312         This leads to bugs (#37014)
23313
23314         * delegate.cs: The signature for EndInvoke should contain any ref
23315         or out parameters as well.  We were not doing this in the past. 
23316
23317         * class.cs (Field.Define): Do not overwrite the type definition
23318         inside the `volatile' group.  Turns out that volatile enumerations
23319         were changing the type here to perform a validity test, which
23320         broke conversions. 
23321
23322 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
23323
23324         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
23325         and structs, we do not want to load the instance variable
23326
23327         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
23328         enum_type has to be handled like an object reference (implicit
23329         conversions exists from this to object), but the regular IsClass
23330         and IsValueType tests will never return true for this one.
23331
23332         Also we use TypeManager.IsValueType instead of type.IsValueType,
23333         just for consistency with the rest of the code (this is only
23334         needed if we ever use the construct exposed by test-180.cs inside
23335         corlib, which we dont today).
23336
23337 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
23338
23339         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
23340         just InternalCall.
23341
23342 2003-02-09  Martin Baulig  <martin@ximian.com>
23343
23344         * namespace.cs (Namespace..ctor): Added SourceFile argument.
23345         (Namespace.DefineNamespaces): New static public method; this is
23346         called when we're compiling with debugging to add all namespaces
23347         to the symbol file.
23348
23349         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
23350         pass it to the Namespace's .ctor.
23351
23352         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
23353         and MethodBase arguments; pass the namespace ID to the symwriter;
23354         pass the MethodBase instead of the token to the symwriter.
23355         (SymbolWriter.DefineNamespace): New method to add a namespace to
23356         the symbol file.
23357
23358 2003-02-09  Martin Baulig  <martin@ximian.com>
23359
23360         * symbolwriter.cs: New file.  This is a wrapper around
23361         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
23362         methods here in near future.
23363
23364 2003-02-09  Martin Baulig  <martin@ximian.com>
23365
23366         * codegen.cs (EmitContext.Mark): Just pass the arguments to
23367         ILGenerator.MarkSequencePoint() which are actually used by the
23368         symbol writer.
23369
23370 2003-02-09  Martin Baulig  <martin@ximian.com>
23371
23372         * location.cs (SourceFile): New public sealed class.  This
23373         contains the name and an index which is used in the location's token.
23374         (Location): Reserve an appropriate number of bits in the token for
23375         the source file instead of walking over that list, this gives us a
23376         really huge performance improvement when compiling with debugging.
23377
23378         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
23379         `SourceFile' argument instead of a string.
23380         (Driver.ProcessFile): Add all the files via Location.AddFile(),
23381         but don't parse/tokenize here, we need to generate the list of all
23382         source files before we do that.
23383         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
23384         the files.
23385
23386         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
23387         instead of a string.
23388
23389         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
23390         of a string.
23391
23392 2003-02-09  Martin Baulig  <martin@ximian.com>
23393
23394         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
23395         filename on `#line default'.
23396
23397 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
23398
23399         * statement.cs: don't clear the pinned var when the fixed statement
23400         returns from the method (fixes bug#37752).
23401
23402 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
23403
23404         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
23405         to IsValueType.
23406
23407 2003-02-07  Martin Baulig  <martin@ximian.com>
23408
23409         * driver.cs: Removed the `--debug-args' command line argument.
23410
23411         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
23412         automatically by the AsssemblyBuilder.
23413         (CodeGen.InitializeSymbolWriter): We don't need to call any
23414         initialization function on the symbol writer anymore.  This method
23415         doesn't take any arguments.
23416
23417 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
23418
23419         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
23420         from referenced assemblies as well.
23421
23422 2003-02-02  Martin Baulig  <martin@ximian.com>
23423
23424         * class.cs (MethodData.Emit): Generate debugging info for external methods.
23425
23426 2003-02-02  Martin Baulig  <martin@ximian.com>
23427
23428         * class.cs (Constructor.Emit): Open the symbol writer before
23429         emitting the constructor initializer.
23430         (ConstructorInitializer.Emit): Call ec.Mark() to allow
23431         single-stepping through constructor initializers.
23432
23433 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
23434
23435         * class.cs: Handle error 549: do not allow virtual methods in
23436         sealed classes. 
23437
23438 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
23439
23440         * decl.cs: Check access levels when resolving types
23441
23442 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
23443
23444         * statement.cs: Add parameters and locals set in catch blocks that might 
23445         return to set vector
23446
23447 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
23448
23449         * class.cs (Operator): Set the SpecialName flags for operators.
23450
23451         * expression.cs (Invocation.DoResolve): Only block calls to
23452         accessors and operators on SpecialName methods.
23453
23454         (Cast.TryReduce): Handle conversions from char constants.
23455
23456
23457 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
23458
23459         * statement.cs: small memory and time optimization in FlowBranching.
23460
23461 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
23462
23463         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
23464         problem that the last fix but in the other sid (Set).
23465
23466         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
23467         access when there is no indexer in the hierarchy.
23468
23469 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
23470
23471         * class.cs: Combine some if statements.
23472
23473 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23474
23475         * driver.cs: fixed bug #37187.
23476
23477 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
23478
23479         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
23480         any indexer, it's needed to build a list with all the indexers in the
23481         hierarchy (AllGetters), else we have problems. Fixes #35653.
23482
23483 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
23484
23485         * class.cs (MethodData.Define): It is wrong for an interface
23486         implementation to be static in both cases: explicit and implicit.
23487         We were only handling this in one case.
23488
23489         Improve the if situation there to not have negations.
23490
23491         * class.cs (Field.Define): Turns out that we do not need to check
23492         the unsafe bit on field definition, only on usage.  Remove the test.
23493
23494 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23495
23496         * driver.cs: use assembly.Location instead of Codebase (the latest
23497         patch made mcs fail when using MS assemblies).
23498
23499 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
23500
23501         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
23502         get the path to *corlib.dll.
23503
23504 2003-01-21  Nick Drochak <ndrochak@gol.com>
23505
23506         * cs-tokenizer.cs:
23507         * pending.cs:
23508         * typemanager.cs: Remove compiler warnings
23509
23510 2003-01-20  Duncan Mak  <duncan@ximian.com>
23511
23512         * AssemblyInfo.cs: Bump the version number to 0.19.
23513
23514 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23515
23516         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
23517
23518 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
23519
23520         * class.cs (Constructor::Emit): Emit debugging info for constructors.
23521
23522 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
23523
23524         * cs-parser.jay: Small fix: we were not comparing the constructor
23525         name correctly.   Thanks to Zoltan for the initial pointer.
23526
23527 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
23528
23529         * cs-tokenizer.cs: Set file name when specified with #line
23530
23531 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
23532
23533         * cs-parser.jay: Only perform the constructor checks here if we
23534         are named like the class;  This will help provider a better
23535         error.  The constructor path is taken when a type definition is
23536         not found, but most likely the user forgot to add the type, so
23537         report that rather than the constructor error.
23538
23539 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
23540
23541         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
23542         allocations.
23543
23544 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23545
23546         * cs-parser.jay: Add cleanup call.
23547
23548 2003-01-13  Duncan Mak  <duncan@ximian.com>
23549
23550         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
23551         consistent with other methods.
23552
23553 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23554
23555         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
23556
23557 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
23558
23559         * attribute.cs: only set GuidAttr to true when we have a
23560         GuidAttribute.
23561
23562 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23563
23564         * ecore.cs:
23565         * expression.cs:
23566         * typemanager.cs: fixes to allow mcs compile corlib with the new
23567         Type.IsSubclassOf fix.
23568
23569 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
23570
23571         * expression.cs (LocalVariableReference.DoResolve): Classify a
23572         constant as a value, not as a variable.   Also, set the type for
23573         the variable.
23574
23575         * cs-parser.jay (fixed_statement): take a type instead of a
23576         pointer_type, so we can produce a better error message later.
23577
23578         * statement.cs (Fixed.Resolve): Flag types that are not pointers
23579         as an error.  
23580
23581         (For.DoEmit): Make inifinite loops have a
23582         non-conditional branch back.
23583
23584         (Fixed.DoEmit): First populate the pinned variables, then emit the
23585         statement, then clear the variables.  Before I was emitting the
23586         code once for each fixed piece.
23587
23588
23589 2003-01-08  Martin Baulig  <martin@ximian.com>
23590
23591         * statement.cs (FlowBranching.MergeChild): A break in a
23592         SWITCH_SECTION does not leave a loop.  Fixes #36155.
23593
23594 2003-01-08  Martin Baulig  <martin@ximian.com>
23595
23596         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
23597         lives in the same number space than `param_map'.  Fixes #36154.
23598
23599 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
23600
23601         * cs-parser.jay (constructor_declaration): Set the
23602         Constructor.ModFlags before probing for it.  This makes the
23603         compiler report 514, 515 and 132 (the code was there, but got
23604         broken). 
23605
23606         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
23607         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
23608         (GotoCase.Resolve): Set `Returns' to ALWAYS.
23609
23610 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
23611
23612         * enum.cs: create the enum static fields using the enum type.
23613
23614 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23615
23616         * class.cs: don't try to create the ParamBuilder for the return
23617         type if it's not needed (and handle it breaking for the ms runtime
23618         anyway).
23619
23620 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23621
23622         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23623
23624 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23625
23626         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23627         the command.   This showed up while compiling the JANET source
23628         code, which used \r as its only newline separator.
23629
23630 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23631
23632         * class.cs (Method.Define): If we are an operator (because it
23633         reuses our code), then set the SpecialName and HideBySig.  #36128
23634
23635 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23636
23637         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23638         exception, report error 120 `object reference required'.
23639
23640         * driver.cs: Add --pause option, used during to measure the size
23641         of the process as it goes with --timestamp.
23642
23643         * expression.cs (Invocation.DoResolve): Do not allow methods with
23644         SpecialName to be invoked.
23645
23646 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23647
23648         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23649         number before adding it.
23650
23651 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23652
23653         * ecore.cs (StandardImplicitConversion): When in an unsafe
23654         context, we allow conversion between void * to any other pointer
23655         type. This fixes bug #35973.
23656
23657 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23658
23659         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23660         is not thrown when extensionless outputs are used 
23661
23662 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23663
23664         * rootcontext.cs: fixed compilation of corlib.
23665
23666 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23667
23668         * attribute.cs (Attributes.Contains): Add new method.
23669
23670         * class.cs (MethodCore.LabelParameters): if the parameter is an
23671         `out' parameter, check that no attribute `[In]' has been passed.
23672
23673         * enum.cs: Handle the `value__' name in an enumeration.
23674
23675 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23676
23677         * decl.cs: Added special case to allow overrides on "protected
23678         internal" methods
23679
23680 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23681
23682         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23683         since it makes much more sense.
23684
23685         (Attributes.ctor): Don't require a Location parameter.
23686
23687         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23688
23689         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23690         since we already have that information per attribute.
23691
23692         * everywhere : make appropriate changes.
23693
23694         * class.cs (LabelParameters): Write the code which actually
23695         applies attributes to the return type. We can't do this on the MS
23696         .NET runtime so we flag a warning in the case an exception is
23697         thrown.
23698
23699 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23700
23701         * const.cs: Handle implicit null conversions here too.
23702
23703 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23704
23705         * class.cs (MethodCore.LabelParameters): Remove the extra
23706         Type [] parameter since it is completely unnecessary. Instead
23707         pass in the method's attributes so that we can extract
23708         the "return" attribute.
23709
23710 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23711
23712         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23713         of ignoring it and letting the compile continue.
23714
23715         * typemanager.cs (ChangeType): use an extra argument to return an
23716         error condition instead of throwing an exception.
23717
23718 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23719
23720         * expression.cs (Unary.TryReduce): mimic the code for the regular
23721         code path.  Perform an implicit cast in the cases where we can
23722         implicitly convert to one of the integral types, and then reduce
23723         based on that constant.   This fixes bug #35483.
23724
23725 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23726
23727         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23728
23729 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23730
23731         * namespace.cs: fixed bug #35489.
23732
23733 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23734
23735         * class.cs: Remove some dead code.
23736
23737         * cs-parser.jay: Estimate the number of methods needed
23738         (RootContext.MethodCount);
23739
23740         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23741         numbers instead of StringBuilders.
23742
23743         * support.cs (PtrHashtable): Add constructor with initial size;
23744         We can now reduce reallocations of the method table.
23745
23746 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23747
23748         * attribute.cs (ApplyAttributes): Keep track of the emitted
23749         attributes on a per-target basis. This fixes bug #35413.
23750
23751 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23752
23753         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23754         default to the Windows 1252 encoding.
23755
23756         (UnixParseOption): Support version, thanks to Alp for the missing
23757         pointer. 
23758
23759         * AssemblyInfo.cs: Add nice assembly information.
23760
23761         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23762         (bug 35169).
23763
23764         * cs-parser.jay: Allow a trailing comma before the close bracked
23765         in the attribute_section production.
23766
23767         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23768         address of the instance was being taken, I will take this out,
23769         because we take the address of the object immediately here.
23770
23771 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23772
23773         * typemanager.cs (AreMultipleAllowed): Take care of the most
23774         obvious case where attribute type is not in the current assembly -
23775         stupid me ;-)
23776
23777 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23778
23779         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23780         definitions, instead of doing that afterwards.  
23781
23782         Also we use a nice little hack, depending on the constructor, we
23783         know if we are a "composed" name or a simple name.  Hence, we
23784         avoid the IndexOf test, and we avoid 
23785
23786         * codegen.cs: Add code to assist in a bug reporter to track down
23787         the source of a compiler crash. 
23788
23789 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23790
23791         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23792         types have been emitted for a given element and flag an error
23793         if something which does not have AllowMultiple set is used more
23794         than once.
23795
23796         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23797         attribute types and their corresponding AllowMultiple properties
23798
23799         (AreMultipleAllowed): Check the property for a given type.
23800
23801         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23802         property in the case we have a TypeContainer.
23803
23804         (Attributes.AddAttribute): Detect duplicates and just skip on
23805         adding them. This trivial fix catches a pretty gross error in our
23806         attribute emission - global attributes were being emitted twice!
23807
23808         Bugzilla bug #33187 is now fixed.
23809
23810 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23811
23812         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23813         instead of pp_and).
23814
23815         * expression.cs (Binary.ResolveOperator): I can only use the
23816         Concat (string, string, string) and Concat (string, string,
23817         string, string) if the child is actually a concatenation of
23818         strings. 
23819
23820 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23821
23822         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23823         context where we need a 2-character lookahead.
23824
23825         * pending.cs (PendingImplementation): Rework so we can keep track
23826         of interface types all the time, and flag those which were
23827         implemented by parents as optional.
23828
23829 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23830
23831         * expression.cs (Binary.ResolveOperator): Use
23832         String.Concat(string,string,string) or
23833         String.Concat(string,string,string,string) when possible. 
23834
23835         * typemanager: More helper methods.
23836
23837
23838 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23839
23840         * pending.cs: remove the bogus return from GetMissingInterfaces()
23841         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23842
23843 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23844
23845         * namespace.cs: avoid duplicated 'using xxx' being added to
23846         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23847         when we get more than one 'using' statement for the same namespace.
23848         Report a CS0105 warning for it.
23849
23850 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23851
23852         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23853         of calling getChar/putback, uses internal knowledge of it.    
23854
23855         (xtoken): Reorder tokenizer so most common patterns are checked
23856         first.  This reduces the compilation time in another 5% (from 8.11s
23857         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23858
23859         The parsing time is 22% of the compilation in mcs, and from that
23860         64% is spent on the tokenization process.  
23861
23862         I tried using a binary search for keywords, but this is slower
23863         than the hashtable.  Another option would be to do a couple of
23864         things:
23865
23866                 * Not use a StringBuilder, instead use an array of chars,
23867                   with a set value.  Notice that this way we could catch
23868                   the 645 error without having to do it *afterwards*.
23869
23870                 * We could write a hand-parser to avoid the hashtable
23871                   compares altogether.
23872
23873         The identifier consumption process takes 37% of the tokenization
23874         time.  Another 15% is spent on is_number.  56% of the time spent
23875         on is_number is spent on Int64.Parse:
23876
23877                 * We could probably choose based on the string length to
23878                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23879                   computations. 
23880
23881         Another 3% is spend on wrapping `xtoken' in the `token' function.
23882
23883         Handle 0xa0 as whitespace (#34752)
23884
23885 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23886
23887         * typemanager.cs (IsCLRType): New routine to tell whether a type
23888         is one of the builtin types.  
23889
23890         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23891         typecode in more places instead of doing pointer comparissions.
23892         We could leverage some knowledge about the way the typecodes are
23893         laid out.
23894
23895         New code to cache namespaces in assemblies, it is currently not
23896         invoked, to be used soon.
23897
23898         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23899
23900         * expression.cs (Binary.ResolveOperator): specially handle
23901         strings, and do not perform user-defined operator overloading for
23902         built-in types.
23903
23904 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23905
23906         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23907         internalcall as it is a pretty simple operation;  Avoid whenever
23908         possible to call Char.IsLetter.
23909
23910         (consume_identifier): Cut by half the number of
23911         hashtable calls by merging the is_keyword and GetKeyword behavior.
23912
23913         Do not short-circuit, because if we do, we
23914         report errors (ie, #if false && true would produce an invalid
23915         directive error);
23916
23917
23918 2002-11-24  Martin Baulig  <martin@ximian.com>
23919
23920         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23921         check constant ranges and report a CS0221.  Fixes #33186.
23922
23923 2002-11-24  Martin Baulig  <martin@ximian.com>
23924
23925         * cs-parser.jay: Make this work for uninitialized variable
23926         declarations in the `for' initializer.  Fixes #32416.
23927
23928 2002-11-24  Martin Baulig  <martin@ximian.com>
23929
23930         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23931         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23932
23933 2002-11-24  Martin Baulig  <martin@ximian.com>
23934
23935         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23936         argument; if true, we also check for user-defined conversions.
23937         This is only needed if both arguments are of a user-defined type.
23938         Fixes #30443, added test-175.cs.
23939         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23940
23941         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23942
23943 2002-11-24  Martin Baulig  <martin@ximian.com>
23944
23945         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23946         function to get the store opcode.
23947         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23948         only emit the Ldelema if the store opcode is Stobj.  You must run
23949         both test-34 and test-167 to test this.  Fixes #34529.
23950
23951 2002-11-23  Martin Baulig  <martin@ximian.com>
23952
23953         * ecore.cs (Expression.MemberLookup): Added additional
23954         `qualifier_type' argument which is used when we're being called
23955         from MemberAccess.DoResolve() and null if we're called from a
23956         SimpleName lookup.
23957         (Expression.MemberLookupFailed): New method to report errors; this
23958         does the CS1540 check and reports the correct error message.
23959
23960         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23961         argument for the CS1540 check and redone the way how we're dealing
23962         with private members.  See the comment in the source code for details.
23963         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23964         `closure_start_type' to `closure_qualifier_type' and check whether
23965         it's not null.  It was not this filter being broken, it was just
23966         being called with the wrong arguments.
23967
23968         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23969         and pass it the correct `qualifier_type'; this also does the error
23970         handling for us.
23971
23972 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23973
23974         * expression.cs (Invocation.EmitParams): If the we are dealing
23975         with a non-built-in value type, load its address as well.
23976
23977         (ArrayCreation): Use a a pretty constant instead
23978         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23979         static initializers.  
23980
23981         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23982         because they are not really value types, just glorified integers. 
23983
23984         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23985
23986         * ecore.cs: Remove redundant code for enumerations, make them use
23987         the same code path as everything else, fixes the casting issue
23988         with enumerations in Windows.Forms.
23989
23990         * attribute.cs: Do only cast to string if it is a string, the
23991         validation happens later.
23992
23993         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23994         people upgrade their corlibs.
23995
23996         * ecore.cs: Oops, enumerations were not following the entire code path
23997
23998 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23999
24000         * typemanager.cs (FilterWithClosure): Commented out the test for
24001         1540 in typemanager.cs, as it has problems when accessing
24002         protected methods from a parent class (see test-174.cs). 
24003
24004         * attribute.cs (Attribute.ValidateGuid): new method.
24005         (Attribute.Resolve): Use above.
24006
24007 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
24008
24009         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
24010
24011         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
24012         handling for enumerations, as we only needed the TypeContainer
24013         functionality to begin with (this is required for the fix below to
24014         work for enums that reference constants in a container class for
24015         example). 
24016
24017         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
24018
24019         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
24020         a valid TypeBuilder to perform lookups on.o
24021
24022         * class.cs (InheritableMemberSignatureCompare): Use true in the
24023         call to GetGetMethod and GetSetMethod, because we are comparing
24024         the signature, and we need to get the methods *even* if they are
24025         private. 
24026
24027         (PropertyBase.CheckBase): ditto.
24028
24029         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
24030         GotoCase.Resolve): Use Peel on EmpytCasts.
24031
24032         * ecore.cs (EmptyCast): drop child, add Peel method.
24033
24034 2002-11-17  Martin Baulig  <martin@ximian.com>
24035
24036         * ecore.cs (EmptyCast.Child): New public property.
24037
24038         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
24039         label resolved to an EmptyCast.  Fixes #34162.
24040         (GotoCase.Resolve): Likewise.
24041         (Block.EmitMeta): Likewise.
24042
24043 2002-11-17  Martin Baulig  <martin@ximian.com>
24044
24045         * expression.cs (Invocation.BetterConversion): Prefer int over
24046         uint; short over ushort; long over ulong for integer literals.
24047         Use ImplicitConversionExists instead of StandardConversionExists
24048         since we also need to check for user-defined implicit conversions.
24049         Fixes #34165.  Added test-173.cs.
24050
24051 2002-11-16  Martin Baulig  <martin@ximian.com>
24052
24053         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
24054         with the `true' and `false' literals.  Fixes #33151.
24055
24056 2002-11-16  Martin Baulig  <martin@ximian.com>
24057
24058         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
24059         October 22nd; don't do the cs1540 check for static members.
24060
24061         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
24062         now using our own filter here and doing the cs1540 check again.
24063
24064 2002-11-16  Martin Baulig  <martin@ximian.com>
24065
24066         * support.cs (InternalParameters): Don't crash if we don't have
24067         any fixed parameters.  Fixes #33532.
24068
24069 2002-11-16  Martin Baulig  <martin@ximian.com>
24070
24071         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
24072         when looking up static methods to make this work on Windows.
24073         Fixes #33773.
24074
24075 2002-11-16  Martin Baulig  <martin@ximian.com>
24076
24077         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
24078         a setter rather than using PropertyInfo.CanWrite.
24079
24080 2002-11-15  Nick Drochak  <ndrochak@gol.com>
24081
24082         * class.cs: Allow acces to block member by subclasses. Fixes build
24083         breaker.
24084
24085 2002-11-14  Martin Baulig  <martin@ximian.com>
24086
24087         * class.cs (Constructor.Emit): Added the extern/block check.
24088         Fixes bug #33678.
24089
24090 2002-11-14  Martin Baulig  <martin@ximian.com>
24091
24092         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
24093         iteration while looking for indexers, this is needed because the
24094         indexer may have a different name in our base classes.  Fixed the
24095         error reporting (no indexers at all, not get accessor, no
24096         overloaded match).  Fixes bug #33089.
24097         (IndexerAccess.DoResolveLValue): Likewise.
24098
24099 2002-11-14  Martin Baulig  <martin@ximian.com>
24100
24101         * class.cs (PropertyBase.CheckBase): Make this work for multiple
24102         indexers.  Fixes the first part of bug #33089.
24103         (MethodSignature.InheritableMemberSignatureCompare): Added support
24104         for properties.
24105
24106 2002-11-13  Ravi Pratap  <ravi@ximian.com>
24107
24108         * attribute.cs (Attribute.Resolve): Catch the
24109         NullReferenceException and report it since it isn't supposed to
24110         happen. 
24111
24112 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
24113
24114         * expression.cs (Binary.EmitBranchable): Also handle the cases for
24115         LogicalOr and LogicalAnd that can benefit from recursively
24116         handling EmitBranchable.  The code now should be nice for Paolo.
24117
24118 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
24119
24120         * typemanager.cs (LookupType): Added a negative-hit hashtable for
24121         the Type lookups, as we perform quite a number of lookups on
24122         non-Types.  This can be removed once we can deterministically tell
24123         whether we have a type or a namespace in advance.
24124
24125         But this might require special hacks from our corlib.
24126
24127         * TODO: updated.
24128
24129         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
24130         and double which avoids a conversion from an integer to a double.
24131
24132         * expression.cs: tiny optimization, avoid calling IsConstant,
24133         because it effectively performs the lookup twice.
24134
24135 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
24136
24137         But a bogus return here to keep the semantics of the old code
24138         until the Mono runtime is fixed.
24139
24140         * pending.cs (GetMissingInterfaces): New method used to remove all
24141         the interfaces that are already implemented by our parent
24142         classes from the list of pending methods. 
24143
24144         * interface.cs: Add checks for calls after ResolveTypeExpr.
24145
24146 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
24147
24148         * class.cs (Class.Emit): Report warning 67: event not used if the
24149         warning level is beyond 3.
24150
24151         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
24152         being a NullLiteral.
24153
24154         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
24155         specifiers. 
24156
24157         * class.cs (TypeContainer.GetClassBases): Cover a missing code
24158         path that might fail if a type can not be resolved.
24159
24160         * expression.cs (Binary.Emit): Emit unsigned versions of the
24161         operators. 
24162
24163         * driver.cs: use error 5.
24164
24165 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
24166
24167         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
24168
24169 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
24170
24171         * cs-parser.jay (switch_section): A beautiful patch from Martin
24172         Baulig that fixed 33094.
24173
24174 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
24175
24176         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
24177         Check whether the base is abstract and report an error if so.
24178
24179         * expression.cs (IndexerAccess.DoResolveLValue,
24180         IndexerAccess.DoResolve): ditto. 
24181
24182         (Invocation.DoResolve): ditto.
24183
24184         (Invocation.FullMethodDesc): Improve the report string.
24185
24186         * statement.cs (Block): Eliminate IsVariableDefined as it is
24187         basically just a wrapper for GetVariableInfo.
24188
24189         * ecore.cs (SimpleName): Use new 
24190
24191         * support.cs (ReflectionParamter.ParameterType): We unwrap the
24192         type, as we return the actual parameter ref/unref state on a
24193         different call.
24194
24195 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
24196
24197         * support.cs: Return proper flags REF/OUT fixing the previous
24198         commit.  
24199
24200         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
24201         not used to mean `ref' but `ref or out' in ParameterReference
24202
24203         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
24204         full type signature instead of calling TypeManger.CSharpName
24205         ourselves. 
24206
24207         * support.cs (InternalParameters.ParameterDesc): Do not compare
24208         directly to the modflags, because REF/OUT will actually be bitsets
24209         if set. 
24210
24211         * delegate.cs (VerifyMethod): Check also the modifiers.
24212
24213         * cs-tokenizer.cs: Fix bug where floating point values with an
24214         exponent where a sign was missing was ignored.
24215
24216         * driver.cs: Allow multiple assemblies to be specified in a single
24217         /r: argument
24218
24219 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
24220
24221         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
24222         because identifiers after a parenthesis would end up in this kind
24223         of production, and we needed to desamiguate it for having casts
24224         like:
24225
24226                 (UserDefinedType *) xxx
24227
24228 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
24229
24230         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
24231         we should set on the Bindingflags.NonPublic, but not turn on
24232         private_ok.  private_ok controls whether a Private member is
24233         returned (this is chekced on the filter routine), while the
24234         BindingFlags.NonPublic just controls whether private/protected
24235         will be allowed.   This fixes the problem part of the problem of
24236         private properties being allowed to be used in derived classes.
24237
24238         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
24239         so we can call the children DoResolveLValue method (this will
24240         properly signal errors on lvalue assignments to base properties)
24241
24242         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
24243         getter are null, and we have a property info, we know that this
24244         happened because the lookup failed, so we report an error 122 for
24245         protection level violation.
24246
24247         We also silently return if setter and getter are null in the
24248         resolve functions, this condition only happens if we have flagged
24249         the error before.  This is the other half of the problem. 
24250
24251         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
24252         not have accessibility information, that is why we were returning
24253         true in the filter function in typemanager.cs.
24254
24255         To properly report 122 (property is inaccessible because of its
24256         protection level) correctly, we report this error in ResolveAccess
24257         by failing if both the setter and the getter are lacking (ie, the
24258         lookup failed). 
24259
24260         DoResolve and DoLResolve have been modified to check for both
24261         setter/getter being null and returning silently, the reason being
24262         that I did not want to put the knowledge about this error in upper
24263         layers, like:
24264
24265         int old = Report.Errors;
24266         x = new PropertyExpr (...);
24267         if (old != Report.Errors)
24268                 return null;
24269         else
24270                 return x;
24271
24272         So the property expr is returned, but it is invalid, so the error
24273         will be flagged during the resolve process. 
24274
24275         * class.cs: Remove InheritablePropertySignatureCompare from the
24276         class, as we no longer depend on the property signature to compute
24277         whether it is possible to implement a method or not.
24278
24279         The reason is that calling PropertyInfo.GetGetMethod will return
24280         null (in .NET, in Mono it works, and we should change this), in
24281         cases where the Get Method does not exist in that particular
24282         class.
24283
24284         So this code:
24285
24286         class X { public virtual int A { get { return 1; } } }
24287         class Y : X { }
24288         class Z : Y { public override int A { get { return 2; } } }
24289
24290         Would fail in Z because the parent (Y) would not have the property
24291         defined.  So we avoid this completely now (because the alternative
24292         fix was ugly and slow), and we now depend exclusively on the
24293         method names.
24294
24295         (PropertyBase.CheckBase): Use a method-base mechanism to find our
24296         reference method, instead of using the property.
24297
24298         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
24299         routines are gone now.
24300
24301         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
24302         names, they were incorrectly named.
24303
24304         * cs-tokenizer.cs: Return are more gentle token on failure. 
24305
24306         * pending.cs (PendingImplementation.InterfaceMethod): This routine
24307         had an out-of-sync index variable, which caused it to remove from
24308         the list of pending methods the wrong method sometimes.
24309
24310 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
24311
24312         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
24313         CanWrite, because those refer to this particular instance of the
24314         property, and do not take into account the fact that we can
24315         override single members of a property.
24316
24317         Constructor requires an EmitContext.  The resolution process does
24318         not happen here, but we need to compute the accessors before,
24319         because the resolution does not always happen for properties.
24320
24321         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
24322         subclass, before we did not update this flag, but we did update
24323         bindingflags. 
24324
24325         (GetAccessors): Drop this routine, as it did not work in the
24326         presence of partially overwritten set/get methods. 
24327
24328         Notice that this broke the cs1540 detection, but that will require
24329         more thinking. 
24330
24331 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24332
24333         * class.cs:
24334         * codegen.cs:
24335         * driver.cs: issue a warning instead of an error if we don't support
24336         debugging for the platform. Also ignore a couple of errors that may
24337         arise when trying to write the symbols. Undo my previous patch.
24338
24339 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24340
24341         * driver.cs: ignore /debug switch except for Unix platforms.
24342
24343 2002-10-23  Nick Drochak  <ndrochak@gol.com>
24344
24345         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
24346
24347 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
24348
24349         * driver.cs: Do not make mcs-debug conditional, so we do not break
24350         builds that use it.
24351
24352         * statement.cs (UsageVector.MergeChildren): I would like Martin to
24353         review this patch.  But basically after all the children variables
24354         have been merged, the value of "Breaks" was not being set to
24355         new_breaks for Switch blocks.  I think that it should be set after
24356         it has executed.  Currently I set this to the value of new_breaks,
24357         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
24358         conservative, but I do not understand this code very well.
24359
24360         I did not break anything in the build, so that is good ;-)
24361
24362         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
24363
24364 2002-10-20  Mark Crichton  <crichton@gimp.org>
24365
24366         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
24367
24368 2002-10-20  Nick Drochak  <ndrochak@gol.com>
24369
24370         * cfold.cs: Fixed compile blocker.
24371
24372 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
24373
24374         * driver.cs: I was chekcing the key, not the file.
24375
24376 2002-10-19  Ravi Pratap  <ravi@ximian.com>
24377
24378         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
24379         message that we were generating - we just need to silently return
24380         a null.
24381
24382 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
24383
24384         * class.cs (Event.Define): Change my previous commit, as this
24385         breaks the debugger.  This is a temporary hack, as it seems like
24386         the compiler is generating events incorrectly to begin with.
24387
24388         * expression.cs (Binary.ResolveOperator): Added support for 
24389         "U operator - (E x, E y)"
24390
24391         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
24392         y)".
24393
24394         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
24395         init-only variables, but this path did not take into account that
24396         there might be also instance readonly variables.  Correct this
24397         problem. 
24398
24399         This fixes bug 32253
24400
24401         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
24402         delegates as well.
24403
24404         * driver.cs: Change the extension for modules to `netmodule'
24405
24406         * cs-parser.jay: Improved slightly the location tracking for
24407         the debugger symbols.
24408
24409         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
24410         modifiers that were specified instead of the hardcoded value
24411         (FamAndAssem).  This was basically ignoring the static modifier,
24412         and others.  Fixes 32429.
24413
24414         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
24415         fixed a bug in the process (32476)
24416
24417         * expression.cs (ArrayAccess.EmitAssign): Patch from
24418         hwang_rob@yahoo.ca that fixes bug 31834.3
24419
24420 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
24421
24422         * driver.cs: Make the module extension .netmodule.
24423
24424 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
24425
24426         * driver.cs: Report an error if the resource file is not found
24427         instead of crashing.
24428
24429         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
24430         false, like Emit does.
24431
24432 2002-10-16  Nick Drochak  <ndrochak@gol.com>
24433
24434         * typemanager.cs: Remove unused private member.  Also reported mcs
24435         bug to report this as a warning like csc.
24436
24437 2002-10-15  Martin Baulig  <martin@gnome.org>
24438
24439         * statement.cs (Statement.Emit): Made this a virtual method; emits
24440         the line number info and calls DoEmit().
24441         (Statement.DoEmit): New protected abstract method, formerly knows
24442         as Statement.Emit().
24443
24444         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
24445
24446 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
24447
24448         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
24449         have fixed a remaining problem: not every AddXXXX was adding a
24450         fully qualified name.  
24451
24452         Now everyone registers a fully qualified name in the DeclSpace as
24453         being defined instead of the partial name.  
24454
24455         Downsides: we are slower than we need to be due to the excess
24456         copies and the names being registered this way.  
24457
24458         The reason for this is that we currently depend (on the corlib
24459         bootstrap for instance) that types are fully qualified, because
24460         we dump all the types in the namespace, and we should really have
24461         types inserted into the proper namespace, so we can only store the
24462         basenames in the defined_names array.
24463
24464 2002-10-10  Martin Baulig  <martin@gnome.org>
24465
24466         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
24467         from bug #31834, see the bug report for a testcase which is
24468         miscompiled.
24469
24470 2002-10-10  Martin Baulig  <martin@gnome.org>
24471
24472         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
24473         flow analysis code for this.
24474
24475         * statement.cs (Do, While, For): Tell the flow analysis code about
24476         infinite loops.
24477         (FlowBranching.UsageVector): Added support for infinite loops.
24478         (Block.Resolve): Moved the dead code elimination here and use flow
24479         analysis to do it.
24480
24481 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
24482
24483         * class.cs (Field.Define): Catch cycles on struct type
24484         definitions. 
24485
24486         * typemanager.cs (IsUnmanagedtype): Do not recursively check
24487         fields if the fields are static.  We only need to check instance
24488         fields. 
24489
24490         * expression.cs (As.DoResolve): Test for reference type.
24491
24492         * statement.cs (Using.ResolveExpression): Use
24493         ConvertImplicitRequired, not ConvertImplicit which reports an
24494         error on failture
24495         (Using.ResolveLocalVariableDecls): ditto.
24496
24497         * expression.cs (Binary.ResolveOperator): Report errors in a few
24498         places where we had to.
24499
24500         * typemanager.cs (IsUnmanagedtype): Finish implementation.
24501
24502 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
24503
24504         * expression.cs: Use StoreFromPtr instead of extracting the type
24505         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
24506
24507         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
24508         an enumeration value to a System.Enum, but System.Enum is not a
24509         value type, but an class type, so we need to box.
24510
24511         (Expression.ConvertExplicit): One codepath could return
24512         errors but not flag them.  Fix this.  Fixes #31853
24513
24514         * parameter.cs (Resolve): Do not allow void as a parameter type.
24515
24516 2002-10-06  Martin Baulig  <martin@gnome.org>
24517
24518         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
24519         if it's a class type and not a struct.  Fixes #31815.
24520
24521 2002-10-06  Martin Baulig  <martin@gnome.org>
24522
24523         * statement.cs: Reworked the flow analysis code a bit to make it
24524         usable for dead code elimination.
24525
24526 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24527
24528         * cs-parser.jay: allow empty source files. Fixes bug #31781.
24529
24530 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24531
24532         * expression.cs (ComposedCast.DoResolveType): A quick workaround
24533         to fix the test 165, will investigate deeper.
24534
24535 2002-10-04  Martin Baulig  <martin@gnome.org>
24536
24537         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
24538         finally blocks actually work.
24539         (Try.Resolve): We don't need to create a sibling for `finally' if
24540         there is no finally block.
24541
24542 2002-10-04  Martin Baulig  <martin@gnome.org>
24543
24544         * class.cs (Constructor.Define): The default accessibility for a
24545         non-default constructor is private, not public.
24546
24547 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24548
24549         * class.cs (Constructor): Make AllowedModifiers public, add
24550         EXTERN.
24551
24552         * cs-parser.jay: Perform the modifiers test here, as the
24553         constructor for the Constructor class usually receives a zero
24554         because of the way we create it (first we create, later we
24555         customize, and we were never checking the modifiers).
24556
24557         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
24558         is a version of LookupTypeReflection that includes the type-name
24559         cache.  This can be used as a fast path for functions that know
24560         the fully qualified name and are only calling into *.GetType() to
24561         obtain a composed type.
24562
24563         This is also used by TypeManager.LookupType during its type
24564         composition.
24565
24566         (LookupType): We now also track the real type name, as sometimes
24567         we can get a quey for the real type name from things like
24568         ComposedCast.  This fixes bug 31422.
24569
24570         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
24571         complete type fullname, it does not have to go through the type
24572         resolution system to obtain the composed version of the type (for
24573         obtaining arrays or pointers).
24574
24575         (Conditional.Emit): Use the EmitBoolExpression to
24576         generate nicer code, as requested by Paolo.
24577
24578         (ArrayCreation.CheckIndices): Use the patch from
24579         hwang_rob@yahoo.ca to validate the array initializers. 
24580
24581 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
24582
24583         * class.cs (ConstructorInitializer.Emit): simplify code by using
24584         Invocation.EmitCall, and at the same time, fix the bugs in calling
24585         parent constructors that took variable arguments. 
24586
24587         * ecore.cs (Expression.ConvertNumericExplicit,
24588         Expression.ImplicitNumericConversion): Remove the code that
24589         manually wrapped decimal (InternalTypeConstructor call is now gone
24590         as well).
24591
24592         * expression.cs (Cast.TryReduce): Also handle decimal types when
24593         trying to perform a constant fold on the type.
24594
24595         * typemanager.cs (IsUnmanagedtype): Partially implemented.
24596
24597         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
24598         that only turned off an error report, and did nothing else. 
24599
24600 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
24601
24602         * driver.cs: Handle and ignore /fullpaths
24603
24604 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
24605
24606         * expression.cs (Binary.ResolveOperator): Catch the case where
24607         DoNumericPromotions returns true, 
24608
24609         (Binary.DoNumericPromotions): Simplify the code, and the tests.
24610
24611 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
24612
24613         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
24614         report error 70.
24615
24616 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24617
24618         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24619         conversion exists, but it is also required that the conversion be
24620         performed.  This manifested in "(Type64Enum) 2".  
24621
24622         * class.cs (TypeManager.AddMethod): The fix is not to change
24623         AddEnum, because that one was using a fully qualified name (every
24624         DeclSpace derivative does), but to change the AddMethod routine
24625         that was using an un-namespaced name.  This now correctly reports
24626         the duplicated name.
24627
24628         Revert patch until I can properly fix it.  The issue
24629         is that we have a shared Type space across all namespaces
24630         currently, which is wrong.
24631
24632         Options include making the Namespace a DeclSpace, and merge
24633         current_namespace/current_container in the parser.
24634
24635 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24636
24637         * cs-parser.jay: Improve error reporting when we get a different
24638         kind of expression in local_variable_type and
24639         local_variable_pointer_type. 
24640
24641         Propagate this to avoid missleading errors being reported.
24642
24643         * ecore.cs (ImplicitReferenceConversion): treat
24644         TypeManager.value_type as a target just like object_type.   As
24645         code like this:
24646
24647         ValueType v = 1;
24648
24649         Is valid, and needs to result in the int 1 being boxed before it
24650         is assigned to the value type v.
24651
24652         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24653         to validate the enumeration name.
24654
24655         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24656         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24657         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24658
24659         * ecore.cs (TryImplicitIntConversion): When doing an
24660         implicit-enumeration-conversion, check if the type is 64-bits and
24661         perform a conversion before passing to EnumConstant.
24662
24663 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24664
24665         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24666         report ambiguous type references.  Unlike the MS version, we
24667         report what the ambiguity is.   Innovation at work ;-)
24668
24669         (DeclSpace.FindType): Require a location argument to
24670         display when we display an ambiguous error.
24671
24672         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24673
24674         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24675
24676         * expression.cs (EmitDynamicInitializers): Apply patch from
24677         hwang_rob@yahoo.ca that fixes the order in which we emit our
24678         initializers. 
24679
24680 2002-09-21  Martin Baulig  <martin@gnome.org>
24681
24682         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24683         delegate takes no arguments.
24684
24685 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24686
24687         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24688         from integers.
24689
24690         * expression.cs: Extract the underlying type.
24691
24692         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24693
24694         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24695
24696 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24697
24698         * class.cs (TypeContainer.DefineType): We can not use the nice
24699         PackingSize with the size set to 1 DefineType method, because it
24700         will not allow us to define the interfaces that the struct
24701         implements.
24702
24703         This completes the fixing of bug 27287
24704
24705         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24706         means also structs.  This fixes part of the problem. 
24707         (Expresion.ImplicitReferenceConversionExists): ditto.
24708
24709         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24710         error if there were no errors reported during the type lookup
24711         process, to avoid duplicates or redundant errors.  Without this
24712         you would get an ambiguous errors plus a type not found.  We have
24713         beaten the user enough with the first error.  
24714
24715         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24716         reference. 
24717
24718         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24719         during the resolution process, stop the lookup, this avoids
24720         repeated error reports (same error twice).
24721
24722         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24723
24724         * typemanager.cs (LookupType): Redo the type lookup code to match
24725         the needs of System.Reflection.  
24726
24727         The issue is that System.Reflection requires references to nested
24728         types to begin with a "+" sign instead of a dot.  So toplevel
24729         types look like: "NameSpace.TopLevelClass", and nested ones look
24730         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24731         levels. 
24732
24733 2002-09-19  Martin Baulig  <martin@gnome.org>
24734
24735         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24736         says that a method always returns or always throws an exception,
24737         don't report the CS0161.
24738
24739         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24740         set `Returns = new_returns'.
24741
24742 2002-09-19  Martin Baulig  <martin@gnome.org>
24743
24744         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24745         to an enum constant, check for a CS0176.
24746
24747 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24748
24749         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24750         for operators that must be in pairs and report errors.
24751
24752         * ecore.cs (SimpleName.DoResolveType): During the initial type
24753         resolution process, when we define types recursively, we must
24754         check first for types in our current scope before we perform
24755         lookups in the enclosing scopes.
24756
24757         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24758
24759         (Invocation.VerifyArgumentsCompat): Call
24760         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24761         I thought we were supposed to always call this, but there are a
24762         few places in the code where we dont do it.
24763
24764 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24765
24766         * driver.cs: Add support in -linkres and -resource to specify the
24767         name of the identifier.
24768
24769 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24770
24771         * ecore.cs (StandardConversionExists): Sync with the conversion
24772         code: allow anything-* to void* conversions.
24773
24774         (FindMostSpecificSource): Use an Expression argument
24775         instead of a Type, because we might be handed over a Literal which
24776         gets a few more implicit conversions that plain types do not.  So
24777         this information was being lost.
24778
24779         Also, we drop the temporary type-holder expression when not
24780         required.
24781
24782 2002-09-17  Martin Baulig  <martin@gnome.org>
24783
24784         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24785         this is an explicit interface implementation.
24786
24787 2002-09-17  Martin Baulig  <martin@gnome.org>
24788
24789         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24790         different `IndexerName' attributes.
24791
24792         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24793         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24794         virtual CommonResolve().
24795
24796 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24797
24798         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24799         and convert that to the UnderlyingType.
24800
24801         * statement.cs (Foreach.Resolve): Indexers are just like variables
24802         or PropertyAccesses.
24803
24804         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24805         inside quoted strings, we were not doing this before.
24806
24807 2002-09-16  Martin Baulig  <martin@gnome.org>
24808
24809         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24810         resolve it.  This is needed for the definite assignment check of the
24811         instance expression, fixes bug #29846.
24812         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24813
24814 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24815
24816         * parameter.cs: Fix compile error.  Cannot reference static member
24817         from an instance object.  Is this an mcs bug?
24818
24819 2002-09-14  Martin Baulig  <martin@gnome.org>
24820
24821         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24822         multiple times.  Fixes bug #30295, added test-166.cs.
24823
24824 2002-09-14  Martin Baulig  <martin@gnome.org>
24825
24826         * statement.cs (Block.Emit): Don't emit unreachable code.
24827         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24828         `break' statements.
24829         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24830
24831 2002-09-14  Martin Baulig  <martin@gnome.org>
24832
24833         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24834         is set.
24835
24836 2002-09-14  Martin Baulig  <martin@gnome.org>
24837
24838         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24839         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24840         be false on the ms runtime.
24841
24842 2002-09-13  Martin Baulig  <martin@gnome.org>
24843
24844         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24845         the CS0038 error message.
24846
24847 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24848
24849         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24850         constant inside, return it.
24851
24852 2002-09-12  Martin Baulig  <martin@gnome.org>
24853
24854         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24855         implicit conversion can be done between enum types.
24856
24857         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24858         check whether an implicit conversion to the current enum's UnderlyingType
24859         exists and report an error if not.
24860
24861         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24862         without debugging support.
24863
24864         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24865         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24866
24867 2002-09-12  Martin Baulig  <martin@gnome.org>
24868
24869         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24870
24871         * ecore.cs (IMemberExpr.DeclaringType): New property.
24872         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24873         nonstatic member of an outer type (CS0038).
24874
24875 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24876
24877         * driver.cs: Activate the using-error detector at warning level
24878         4 (at least for MS-compatible APIs).
24879
24880         * namespace.cs (VerifyUsing): Small buglett fix.
24881
24882         * pending.cs (PendingImplementation): pass the container pointer. 
24883
24884         * interface.cs (GetMethods): Allow for recursive definition.  Long
24885         term, I would like to move every type to support recursive
24886         definitions, not the current ordering mechanism that we have right
24887         now.
24888
24889         The situation is this: Attributes are handled before interfaces,
24890         so we can apply attributes to interfaces.  But some attributes
24891         implement interfaces, we will now handle the simple cases
24892         (recursive definitions will just get an error).  
24893
24894         * parameter.cs: Only invalidate types at the end if we fail to
24895         lookup all types.  
24896
24897 2002-09-09  Martin Baulig  <martin@gnome.org>
24898
24899         * ecore.cs (PropertyExpr.Emit): Also check for
24900         TypeManager.system_int_array_get_length so this'll also work when
24901         compiling corlib.  Fixes #30003.
24902
24903 2002-09-09  Martin Baulig  <martin@gnome.org>
24904
24905         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24906         and throw an exception if we can't get the type's size.  Fixed #30040,
24907         added test-165.cs.
24908
24909 2002-09-09  Martin Baulig  <martin@gnome.org>
24910
24911         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24912
24913         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24914         context.  Fixes bug #30027.
24915
24916         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24917         virtual functions.  Fixes bug #30043, added test-164.cs.
24918
24919 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24920
24921         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24922
24923 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24924
24925         * driver.cs: Use an object to get the windows codepage since it's not a
24926         static property.
24927
24928 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24929
24930         * statement.cs (For.Emit): for infinite loops (test == null)
24931         return whether there is a break inside, not always "true".
24932
24933         * namespace.cs (UsingEntry): New struct to hold the name of the
24934         using definition, the location where it is defined, and whether it
24935         has been used in a successful type lookup.
24936
24937         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24938         strings.
24939
24940         * decl.cs: ditto.
24941
24942 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24943
24944         * attribute.cs : Fix incorrect code which relied on catching
24945         a NullReferenceException to detect a null being passed in
24946         where an object was expected.
24947
24948 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24949
24950         * statement.cs (Try): flag the catch variable as assigned
24951
24952         * expression.cs (Cast): Simplified by using ResolveType instead of
24953         manually resolving.
24954
24955         * statement.cs (Catch): Fix bug by using ResolveType.
24956
24957 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24958
24959         * expression.cs (BetterConversion): Special case for when we have
24960         a NullLiteral as the argument and we have to choose between string
24961         and object types - we choose string the way csc does.
24962
24963         * attribute.cs (Attribute.Resolve): Catch the
24964         NullReferenceException and report error #182 since the Mono
24965         runtime no more has the bug and having this exception raised means
24966         we tried to select a constructor which takes an object and is
24967         passed a null.
24968
24969 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24970
24971         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24972         message (1502, 1503) when we can't locate a method after overload
24973         resolution. This is much more informative and closes the bug
24974         Miguel reported.
24975
24976         * interface.cs (PopulateMethod): Return if there are no argument
24977         types. Fixes a NullReferenceException bug.
24978
24979         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24980         expressions too. Previously we were checking only in one place for
24981         positional arguments leaving out named arguments.
24982
24983         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24984         type to the enum type is not allowed. Remove code corresponding to
24985         that.
24986
24987         (ConvertNumericExplicit): Allow explicit conversions from
24988         the underlying type to enum type. This precisely follows the spec
24989         and closes a bug filed by Gonzalo.
24990
24991 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24992
24993         * compiler.csproj:
24994         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24995
24996 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24997
24998         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24999         it was important that we stored the right value after the
25000         reduction in `converted'.
25001
25002 2002-09-04  Martin Baulig  <martin@gnome.org>
25003
25004         * location.cs (Location.SymbolDocument): Use full pathnames for the
25005         source files.
25006
25007 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
25008
25009         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
25010         of the expression resolve mechanism, because that will catch the
25011         SimpleName error failures.
25012
25013         (Conditional): If we can not resolve the
25014         expression, return, do not crash.
25015
25016 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25017
25018         * cs-tokenizer.cs:
25019         (location): display token name instead of its number.
25020
25021 2002-08-28  Martin Baulig  <martin@gnome.org>
25022
25023         * expression.cs (Binary.ResolveOperator): Don't silently return
25024         but return an error if an operator cannot be applied between two
25025         enum types.
25026
25027 2002-08-28  Martin Baulig  <martin@gnome.org>
25028
25029         * class.cs (Constructor.Define): Set the permission attributes
25030         correctly instead of making all constructors public.
25031
25032 2002-08-28  Martin Baulig  <martin@gnome.org>
25033
25034         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
25035         for private members before reporting a CS0103; if we find anything,
25036         it's a CS0122.
25037
25038 2002-08-28  Martin Baulig  <martin@gnome.org>
25039
25040         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
25041         to check whether `closure_start_type == closure_invocation_type',
25042         we also need to check whether `m.DeclaringType == closure_invocation_type'
25043         before bypassing the permission checks.  We might be accessing
25044         protected/private members from the base class.
25045         (TypeManager.RealMemberLookup): Only set private_ok if private
25046         members were requested via BindingFlags.NonPublic.
25047
25048         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
25049
25050         * expression.cs (MemberAccess.ResolveMemberAccess): Set
25051         MethodGroupExpr.IsExplicitImpl if appropriate.
25052         (Invocation.DoResolve): Don't report the CS0120 for explicit
25053         interface implementations.
25054
25055 2002-08-27  Martin Baulig  <martin@gnome.org>
25056
25057         * expression.cs (Invocation.DoResolve): If this is a static
25058         method and we don't have an InstanceExpression, we must report
25059         a CS0120.
25060
25061 2002-08-25  Martin Baulig  <martin@gnome.org>
25062
25063         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
25064         `==' between a valuetype and an object.
25065
25066 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
25067
25068         * ecore.cs (TypeExpr): Provide a ToString method.
25069
25070 2002-08-24  Martin Baulig  <martin@gnome.org>
25071
25072         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
25073         now called proggie.dbg and it's a binary file.
25074
25075 2002-08-23  Martin Baulig  <martin@gnome.org>
25076
25077         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
25078
25079 2002-08-23  Martin Baulig  <martin@gnome.org>
25080
25081         * struct.cs (MyStructInfo.ctor): Make this work with empty
25082         structs; it's not allowed to use foreach() on null.
25083
25084 2002-08-23  Martin Baulig  <martin@gnome.org>
25085
25086         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
25087         writer the full pathname of the generated assembly.
25088
25089 2002-08-23  Martin Baulig  <martin@gnome.org>
25090
25091         * statements.cs (FlowBranching.UsageVector.MergeChildren):
25092         A `finally' block never returns or breaks; improved handling of
25093         unreachable code.
25094
25095 2002-08-23  Martin Baulig  <martin@gnome.org>
25096
25097         * statement.cs (Throw.Resolve): Allow `throw null'.
25098
25099 2002-08-23  Martin Baulig  <martin@gnome.org>
25100
25101         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
25102         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
25103         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
25104         MemberLookup would return a wrong event if this is an explicit
25105         interface implementation and the class has an event with the same
25106         name.
25107
25108 2002-08-23  Martin Baulig  <martin@gnome.org>
25109
25110         * statement.cs (Block.AddChildVariableNames): New public method.
25111         (Block.AddChildVariableName): Likewise.
25112         (Block.IsVariableNameUsedInChildBlock): Likewise.
25113         (Block.AddVariable): Check whether a variable name has already
25114         been used in a child block.
25115
25116         * cs-parser.jay (declare_local_variables): Mark all variable names
25117         from the current block as being used in a child block in the
25118         implicit block.
25119
25120 2002-08-23  Martin Baulig  <martin@gnome.org>
25121
25122         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
25123         find the symbol writer.
25124
25125         * driver.cs: csc also allows the arguments to /define being
25126         separated by commas, not only by semicolons.
25127
25128 2002-08-23  Martin Baulig  <martin@gnome.org>
25129
25130         * interface.cs (Interface.GetMembers): Added static check for events.
25131
25132 2002-08-15  Martin Baulig  <martin@gnome.org>
25133
25134         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
25135         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
25136
25137         * ecore.cs (Expression.MemberLookup): Added documentation and explained
25138         why the MethodData.EmitDestructor() change was necessary.
25139
25140 2002-08-20  Martin Baulig  <martin@gnome.org>
25141
25142         * class.cs (TypeContainer.FindMembers): Added static check for events.
25143
25144         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
25145
25146         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
25147         use Type.GetEvents(), not Type.FindMembers().
25148
25149 2002-08-20  Martin Baulig  <martin@gnome.org>
25150
25151         * decl.cs (MemberCache): Added a special method cache which will
25152         be used for method-only searched.  This ensures that a method
25153         search will return a MethodInfo with the correct ReflectedType for
25154         inherited methods.      
25155
25156 2002-08-20  Martin Baulig  <martin@gnome.org>
25157
25158         * decl.cs (DeclSpace.FindMembers): Made this public.
25159
25160 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25161
25162         * delegate.cs: fixed build on windows.
25163         [FIXME:  Filed as bug #29150: MCS must report these errors.]
25164
25165 2002-08-19  Ravi Pratap  <ravi@ximian.com>
25166
25167         * ecore.cs (StandardConversionExists): Return a false
25168         if we are trying to convert the void type to anything else
25169         since that is not allowed.
25170
25171         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
25172         we flag error 70 in the event an event is trying to be accessed
25173         directly from outside the declaring type.
25174
25175 2002-08-20  Martin Baulig  <martin@gnome.org>
25176
25177         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
25178         MemberCache from typemanager.cs to decl.cs.
25179
25180 2002-08-19  Martin Baulig  <martin@gnome.org>
25181
25182         * class.cs (TypeContainer): Implement IMemberContainer.
25183         (TypeContainer.DefineMembers): Create the MemberCache.
25184         (TypeContainer.FindMembers): Do better BindingFlags checking; only
25185         return public members if BindingFlags.Public was given, check
25186         whether members are static.
25187
25188 2002-08-16  Martin Baulig  <martin@gnome.org>
25189
25190         * decl.cs (DeclSpace.Define): Splitted this in Define and
25191         DefineMembers.  DefineMembers is called first and initializes the
25192         MemberCache.
25193
25194         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
25195         DefineMembers() on all our DeclSpaces.
25196
25197         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
25198         but call DefineMembers() on all nested interfaces.  We call their
25199         Define() in our new Define() function.
25200
25201         * interface.cs (Interface): Implement IMemberContainer.
25202         (Interface.Define): Moved all code except the attribute stuf to
25203         DefineMembers().
25204         (Interface.DefineMembers): Initialize the member cache.
25205
25206         * typemanager.cs (IMemberFinder): Removed this interface, we don't
25207         need this anymore since we can use MemberCache.FindMembers directly.
25208
25209 2002-08-19  Martin Baulig  <martin@gnome.org>
25210
25211         * typemanager.cs (MemberCache): When creating the cache for an
25212         interface type, add all inherited members.
25213         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
25214         to `out bool used_cache' and documented it.
25215         (TypeManager.MemberLookup): If we already used the cache in the first
25216         iteration, we don't need to do the interfaces check.
25217
25218 2002-08-19  Martin Baulig  <martin@gnome.org>
25219
25220         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
25221         here from IMemberFinder and don't implement this interface anymore.
25222         (DeclSpace.MemberCache): Moved here from IMemberFinder.
25223
25224         * typemanager.cs (IMemberFinder): This interface is now only used by
25225         classes which actually support the member cache.
25226         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
25227         since we only put DeclSpaces into this Hashtable.
25228         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
25229         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
25230
25231 2002-08-16  Martin Baulig  <martin@gnome.org>
25232
25233         * typemanager.cs (ICachingMemberFinder): Removed.
25234         (IMemberFinder.MemberCache): New property.
25235         (TypeManager.FindMembers): Merged this with RealFindMembers().
25236         This function will never be called from TypeManager.MemberLookup()
25237         so we can't use the cache here, just the IMemberFinder.
25238         (TypeManager.MemberLookup_FindMembers): Check whether the
25239         IMemberFinder has a MemberCache and call the cache's FindMembers
25240         function.
25241         (MemberCache): Rewrote larger parts of this yet another time and
25242         cleaned it up a bit.
25243
25244 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
25245
25246         * driver.cs (LoadArgs): Support quoting.
25247
25248         (Usage): Show the CSC-like command line arguments.
25249
25250         Improved a few error messages.
25251
25252 2002-08-15  Martin Baulig  <martin@gnome.org>
25253
25254         * typemanager.cs (IMemberContainer.Type): New property.
25255         (IMemberContainer.IsInterface): New property.
25256
25257         The following changes are conditional to BROKEN_RUNTIME, which is
25258         defined at the top of the file.
25259
25260         * typemanager.cs (MemberCache.MemberCache): Don't add the base
25261         class'es members, but add all members from TypeHandle.ObjectType
25262         if we're an interface.
25263         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
25264         is the current type.
25265         (MemberCache.CacheEntry.Container): Removed this field.
25266         (TypeHandle.GetMembers): Include inherited members.
25267
25268 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25269
25270         * typemanager.cs: fixed compilation and added a comment on a field that
25271         is never used.
25272
25273 2002-08-15  Martin Baulig  <martin@gnome.org>
25274
25275         * class.cs (ConstructorInitializer.Resolve): In the
25276         Expression.MemberLookup call, use the queried_type as
25277         invocation_type.
25278
25279         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
25280         declared' attribute, it's always true.
25281         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
25282         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
25283         temporary wrapper for FindMembers which tells MemberLookup whether
25284         members from the base classes are included in the return value.
25285         This will go away soon.
25286         (TypeManager.MemberLookup): Use this temporary hack here; once the
25287         new MemberCache is completed, we don't need to do the DeclaredOnly
25288         looping here anymore since the MemberCache will take care of this.
25289         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
25290         (MemberCache): When creating the MemberCache for a class, get
25291         members from the current class and all its base classes.
25292         (MemberCache.CacheEntry.Container): New field.  This is a
25293         temporary hack until the Mono runtime is fixed to distinguish
25294         between ReflectedType and DeclaringType.  It allows us to use MCS
25295         with both the MS runtime and the unfixed Mono runtime without
25296         problems and without accecting performance.
25297         (MemberCache.SearchMembers): The DeclaredOnly looping from
25298         TypeManager.MemberLookup is now done here.      
25299
25300 2002-08-14  Martin Baulig  <martin@gnome.org>
25301
25302         * statement.cs (MyStructInfo.MyStructInfo): Don't call
25303         Type.GetFields on dynamic types but get the fields from the
25304         corresponding TypeContainer.
25305         (MyStructInfo.GetStructInfo): Added check for enum types.
25306
25307         * typemanager.cs (MemberList.IsSynchronized): Implemented.
25308         (MemberList.SyncRoot): Implemented.
25309         (TypeManager.FilterWithClosure): No need to check permissions if
25310         closure_start_type == closure_invocation_type, don't crash if
25311         closure_invocation_type is null.
25312
25313 2002-08-13  Martin Baulig  <martin@gnome.org>
25314
25315         Rewrote TypeContainer.FindMembers to use a member cache.  This
25316         gives us a speed increase of about 35% for the self-hosting MCS
25317         build and of about 15-20% for the class libs (both on GNU/Linux).
25318
25319         * report.cs (Timer): New class to get enhanced profiling.  This
25320         whole class is "TIMER" conditional since it remarkably slows down
25321         compilation speed.
25322
25323         * class.cs (MemberList): New class.  This is an IList wrapper
25324         which we're now using instead of passing MemberInfo[]'s around to
25325         avoid copying this array unnecessarily.
25326         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
25327         (ICachingMemberFinder, IMemberContainer): New interface.
25328         (TypeManager.FilterWithClosure): If `criteria' is null, the name
25329         has already been checked, otherwise use it for the name comparision.
25330         (TypeManager.FindMembers): Renamed to RealMemberFinder and
25331         provided wrapper which tries to use ICachingMemberFinder.FindMembers
25332         if possible.  Returns a MemberList, not a MemberInfo [].
25333         (TypeHandle): New class, implements IMemberContainer.  We create
25334         one instance of this class per type, it contains a MemberCache
25335         which is used to do the member lookups.
25336         (MemberCache): New class.  Each instance of this class contains
25337         all members of a type and a name-based hash table.
25338         (MemberCache.FindMembers): This is our new member lookup
25339         function.  First, it looks up all members of the requested name in
25340         the hash table.  Then, it walks this list and sorts out all
25341         applicable members and returns them.
25342
25343 2002-08-13  Martin Baulig  <martin@gnome.org>
25344
25345         In addition to a nice code cleanup, this gives us a performance
25346         increase of about 1.4% on GNU/Linux - not much, but it's already
25347         half a second for the self-hosting MCS compilation.
25348
25349         * typemanager.cs (IMemberFinder): New interface.  It is used by
25350         TypeManager.FindMembers to call FindMembers on a TypeContainer,
25351         Enum, Delegate or Interface.
25352         (TypeManager.finder_to_member_finder): New PtrHashtable.
25353         (TypeManager.finder_to_container): Removed.
25354         (TypeManager.finder_to_delegate): Removed.
25355         (TypeManager.finder_to_interface): Removed.
25356         (TypeManager.finder_to_enum): Removed.
25357
25358         * interface.cs (Interface): Implement IMemberFinder.
25359
25360         * delegate.cs (Delegate): Implement IMemberFinder.
25361
25362         * enum.cs (Enum): Implement IMemberFinder.
25363
25364         * class.cs (TypeContainer): Implement IMemberFinder.
25365
25366 2002-08-12  Martin Baulig  <martin@gnome.org>
25367
25368         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
25369
25370 2002-08-12  Martin Baulig  <martin@gnome.org>
25371
25372         * ecore.cs (ITypeExpression): New interface for expressions which
25373         resolve to a type.
25374         (TypeExpression): Renamed to TypeLookupExpression.
25375         (Expression.DoResolve): If we're doing a types-only lookup, the
25376         expression must implement the ITypeExpression interface and we
25377         call DoResolveType() on it.
25378         (SimpleName): Implement the new ITypeExpression interface.
25379         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
25380         hack, the situation that we're only looking up types can't happen
25381         anymore when this method is called.  Moved the type lookup code to
25382         DoResolveType() and call it.
25383         (SimpleName.DoResolveType): This ITypeExpression interface method
25384         is now doing the types-only lookup.
25385         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
25386         (ResolveFlags): Added MaskExprClass.
25387
25388         * expression.cs (MemberAccess): Implement the ITypeExpression
25389         interface.
25390         (MemberAccess.DoResolve): Added support for a types-only lookup
25391         when we're called via ITypeExpression.DoResolveType().
25392         (ComposedCast): Implement the ITypeExpression interface.
25393
25394         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
25395         Expression.Resolve() with ResolveFlags.Type instead.
25396
25397 2002-08-12  Martin Baulig  <martin@gnome.org>
25398
25399         * interface.cs (Interface.Define): Apply attributes.
25400
25401         * attribute.cs (Attribute.ApplyAttributes): Added support for
25402         interface attributes.
25403
25404 2002-08-11  Martin Baulig  <martin@gnome.org>
25405
25406         * statement.cs (Block.Emit): Only check the "this" variable if we
25407         do not always throw an exception.
25408
25409         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
25410         whether the property has a set accessor.
25411
25412 2002-08-11  Martin Baulig  <martin@gnome.org>
25413
25414         Added control flow analysis support for structs.
25415
25416         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
25417         with control flow analysis turned off.
25418         (IVariable): New interface.
25419         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
25420         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
25421         (FieldExpr.DoResolve): Resolve the instance expression with flow
25422         analysis turned off and do the definite assignment check after the
25423         resolving when we know what the expression will resolve to.
25424
25425         * expression.cs (LocalVariableReference, ParameterReference):
25426         Implement the new IVariable interface, only call the flow analysis
25427         code if ec.DoFlowAnalysis is true.
25428         (This): Added constructor which takes a Block argument.  Implement
25429         the new IVariable interface.
25430         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
25431         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
25432         This does the definite assignment checks for struct members.
25433
25434         * class.cs (Constructor.Emit): If this is a non-static `struct'
25435         constructor which doesn't have any initializer, call
25436         Block.AddThisVariable() to tell the flow analysis code that all
25437         struct elements must be initialized before control returns from
25438         the constructor.
25439
25440         * statement.cs (MyStructInfo): New public class.
25441         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
25442         argument to this indexer.  If non-zero, check an individual struct
25443         member, not the whole struct.
25444         (FlowBranching.CheckOutParameters): Check struct members.
25445         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
25446         overloaded versions of these methods which take an additional
25447         `int field_idx' argument to check struct members.
25448         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
25449         overloaded versions of these methods which take an additional
25450         `string field_name' argument to check struct member.s
25451         (VariableInfo): Implement the IVariable interface.
25452         (VariableInfo.StructInfo): New public property.  Returns the
25453         MyStructInfo instance of the variable if it's a struct or null.
25454         (Block.AddThisVariable): New public method.  This is called from
25455         Constructor.Emit() for non-static `struct' constructor which do
25456         not have any initializer.  It creates a special variable for the
25457         "this" instance variable which will be checked by the flow
25458         analysis code to ensure that all of the struct's fields are
25459         initialized before control returns from the constructor.
25460         (UsageVector): Added support for struct members.  If a
25461         variable/parameter is a struct with N members, we reserve a slot
25462         in the usage vector for each member.  A struct is considered fully
25463         initialized if either the struct itself (slot 0) or all its
25464         members are initialized.
25465
25466 2002-08-08  Martin Baulig  <martin@gnome.org>
25467
25468         * driver.cs (Driver.MainDriver): Only report an error CS5001
25469         if there were no compilation errors.
25470
25471         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
25472         `UnsafeContext' property to determine whether the parent is in
25473         unsafe context rather than checking the parent's ModFlags:
25474         classes nested in an unsafe class are unsafe as well.
25475
25476 2002-08-08  Martin Baulig  <martin@gnome.org>
25477
25478         * statement.cs (UsageVector.MergeChildren): Distinguish between
25479         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
25480         we return.  Added test17() and test18() to test-154.cs.
25481
25482 2002-08-08  Martin Baulig  <martin@gnome.org>
25483
25484         * typemanager.cs (TypeManager.FilterWithClosure): If we have
25485         Family access, make sure the invoking type isn't a subclass of the
25486         queried type (that'd be a CS1540).
25487
25488         * ecore.cs (Expression.MemberLookup): Added overloaded version of
25489         this method which takes an additional `Type invocation_type'.
25490
25491         * expression.cs (BaseAccess.DoResolve): Use the base type as
25492         invocation and query type.
25493         (MemberAccess.DoResolve): If the lookup failed and we're about to
25494         report a CS0122, try a lookup with the ec.ContainerType - if this
25495         succeeds, we must report a CS1540.
25496
25497 2002-08-08  Martin Baulig  <martin@gnome.org>
25498
25499         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
25500         (MethodGroupExpr): Implement the IMemberExpr interface.
25501
25502         * expression (MemberAccess.ResolveMemberAccess): No need to have
25503         any special code for MethodGroupExprs anymore, they're now
25504         IMemberExprs.   
25505
25506 2002-08-08  Martin Baulig  <martin@gnome.org>
25507
25508         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
25509         Family, FamANDAssem and FamORAssem permissions.
25510         (TypeManager.IsSubclassOrNestedChildOf): New public method.
25511
25512 2002-08-08  Martin Baulig  <martin@gnome.org>
25513
25514         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
25515         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
25516         or loop block.
25517
25518 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
25519
25520         * driver.cs: implemented /resource option to embed managed resources.
25521
25522 2002-08-07  Martin Baulig  <martin@gnome.org>
25523
25524         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
25525         (FieldBase.HasFieldInitializer): New public property.
25526         (FieldBase.GetInitializerExpression): New public method.  Resolves and
25527         returns the field initializer and makes sure it is only resolved once.
25528         (TypeContainer.EmitFieldInitializers): Call
25529         FieldBase.GetInitializerExpression to get the initializer, this ensures
25530         that it isn't resolved multiple times.
25531
25532         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
25533         the resolving process (SimpleName/MemberLookup) that we're currently
25534         emitting a field initializer (which must not access any instance members,
25535         this is an error CS0236).
25536
25537         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
25538         argument, if the `IsFieldInitializer' flag is set, we must report and
25539         error CS0236 and not an error CS0120.   
25540
25541 2002-08-07  Martin Baulig  <martin@gnome.org>
25542
25543         * ecore.cs (IMemberExpr): New public interface.
25544         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
25545         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
25546         if the expression is an IMemberExpr.
25547
25548         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
25549         to be null, implicitly default to `this' if we're non-static in
25550         this case.  Simplified the code a lot by using the new IMemberExpr
25551         interface.  Also fixed bug #28176 here.
25552
25553 2002-08-06  Martin Baulig  <martin@gnome.org>
25554
25555         * cs-parser.jay (SimpleLookup): Removed.  We need to create
25556         ParameterReferences during semantic analysis so that we can do a
25557         type-only search when resolving Cast, TypeOf and SizeOf.
25558         (block): Pass the `current_local_parameters' to the Block's
25559         constructor.
25560
25561         * class.cs (ConstructorInitializer): Added `Parameters parameters'
25562         argument to the constructor.
25563         (ConstructorInitializer.Resolve): Create a temporary implicit
25564         block with the parameters.
25565
25566         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
25567         references here if we aren't doing a type-only search.
25568
25569         * statement.cs (Block): Added constructor which takes a
25570         `Parameters parameters' argument.
25571         (Block.Parameters): New public property.
25572
25573         * support.cs (InternalParameters.Parameters): Renamed `parameters'
25574         to `Parameters' and made it public readonly.
25575
25576 2002-08-06  Martin Baulig  <martin@gnome.org>
25577
25578         * ecore.cs (Expression.Warning): Made this public as well.
25579
25580         * report.cs (Report.Debug): Print the contents of collections.
25581
25582 2002-08-06  Martin Baulig  <martin@gnome.org>
25583
25584         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
25585         used to tell Resolve() which kinds of expressions it may return.
25586         (Expression.Resolve): Added overloaded version of this method which
25587         takes a `ResolveFlags flags' argument.  This can be used to tell
25588         Resolve() which kinds of expressions it may return.  Reports a
25589         CS0118 on error.
25590         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
25591         ResolveFlags.SimpleName.
25592         (Expression.Error118): Added overloaded version of this method which
25593         takes a `ResolveFlags flags' argument.  It uses the flags to determine
25594         which kinds of expressions are allowed.
25595
25596         * expression.cs (Argument.ResolveMethodGroup): New public method.
25597         Resolves an argument, but allows a MethodGroup to be returned.
25598         This is used when invoking a delegate.
25599
25600         * TODO: Updated a bit.
25601
25602 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25603
25604         Fixed compilation with csc.
25605
25606         * ecore.cs: Expression.Error made public. Is this correct? Should
25607         Warning be made public too?
25608
25609         * expression.cs: use ea.Location instead of ea.loc.
25610         [FIXME:  Filed as bug #28607: MCS must report these errors.]
25611
25612 2002-08-06  Martin Baulig  <martin@gnome.org>
25613
25614         * ecore.cs (Expression.loc): Moved the location here instead of
25615         duplicating it in all derived classes.
25616         (Expression.Location): New public property.
25617         (Expression.Error, Expression.Warning): Made them non-static and
25618         removed the location argument.
25619         (Expression.Warning): Added overloaded version which takes an
25620         `int level' argument.
25621         (Expression.Error118): Make this non-static and removed the
25622         expression and location arguments.
25623         (TypeExpr): Added location argument to the constructor.
25624
25625         * expression.cs (StaticCallExpr): Added location argument to
25626         the constructor.
25627         (Indirection, PointerArithmetic): Likewise.
25628         (CheckedExpr, UnCheckedExpr): Likewise.
25629         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25630         (StringPtr): Likewise.
25631
25632
25633 2002-08-05  Martin Baulig  <martin@gnome.org>
25634
25635         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25636
25637         * assign.cs (Assign.DoResolve): Check whether the source
25638         expression is a value or variable.
25639
25640         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25641         while resolving the corresponding blocks.
25642
25643         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25644         an error, don't silently return null.
25645
25646         * statement.cs (Block.AddVariable): Do the error reporting here
25647         and distinguish between CS0128 and CS0136.
25648         (Block.DoResolve): Report all unused labels (warning CS0164).
25649         (LabeledStatement): Pass the location to the constructor.
25650         (LabeledStatement.HasBeenReferenced): New property.
25651         (LabeledStatement.Resolve): Set it to true here.
25652
25653         * statement.cs (Return.Emit): Return success even after reporting
25654         a type mismatch error (CS0126 or CS0127), this is what csc does and
25655         it avoids confusing the users with any consecutive errors.
25656
25657 2002-08-05  Martin Baulig  <martin@gnome.org>
25658
25659         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25660
25661         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25662
25663         * expression.cs (MemberAccess.DoResolve): Silently return if an
25664         error has already been reported.
25665
25666         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25667         error has already been reported.
25668
25669 2002-08-05  Martin Baulig  <martin@gnome.org>
25670
25671         * statement.cs (UsageVector): Only initialize the `parameters'
25672         vector if we actually have any "out" parameters.
25673
25674 2002-08-05  Martin Baulig  <martin@gnome.org>
25675
25676         * expression.cs (Binary.ResolveOperator): When combining delegates,
25677         they must have the same type.
25678
25679 2002-08-05  Martin Baulig  <martin@gnome.org>
25680
25681         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25682         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25683         work with the ms runtime and we also don't need it: if we're a
25684         PropertyBuilder and not in the `indexer_arguments' hash, then we
25685         are a property and not an indexer.
25686
25687         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25688         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25689         since the latter one doesn't work with the ms runtime.
25690
25691 2002-08-03  Martin Baulig  <martin@gnome.org>
25692
25693         Fixed bugs #27998 and #22735.
25694
25695         * class.cs (Method.IsOperator): New public field.
25696         (Method.CheckBase): Report CS0111 if there's already a method
25697         with the same parameters in the current class.  Report CS0508 when
25698         attempting to change the return type of an inherited method.
25699         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25700         and it's not marked abstract or extern.
25701         (PropertyBase): New abstract base class for Property and Indexer.
25702         (PropertyBase.CheckBase): Moved here from Property and made it work
25703         for indexers.
25704         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25705         the same so we can reuse it there.
25706         (Property, Indexer): Derive from PropertyBase.
25707         (MethodSignature.inheritable_property_signature_filter): New delegate
25708         to find properties and indexers.
25709
25710         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25711         argument and improved error reporting.
25712
25713         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25714         EmptyReadOnlyParameters and made it a property.
25715
25716         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25717         version of this method which takes a `PropertyInfo indexer'.
25718         (TypeManager.RegisterIndexer): New method.
25719
25720         * class.cs: Added myself as author of this file :-)
25721
25722 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25723
25724         * class.cs: fixed compilation on windoze.
25725
25726 2002-08-03  Martin Baulig  <martin@gnome.org>
25727
25728         * interface.cs (Interface.GetInterfaceBases): Check whether all
25729         base interfaces are at least as accessible than the current one.
25730
25731         * class.cs (TypeContainer.GetClassBases): Check whether base types
25732         are at least as accessible than the current type.
25733         (TypeContainer.AsAccessible): Implemented and made non-static.
25734         (MemberBase.CheckParameters): Report errors if the accessibility
25735         checks fail.
25736
25737         * delegate.cs (Delegate.Delegate): The default visibility is
25738         internal for top-level types and private for nested types.
25739         (Delegate.Define): Report errors if the accessibility checks fail.
25740
25741         * enum.cs (Enum.Enum): The default visibility is internal for
25742         top-level types and private for nested types.
25743         (Enum.DefineType): Compute the correct visibility.
25744
25745         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25746         function which takes a `bool is_toplevel' instead of a TypeContainer.
25747
25748         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25749         builtin type.
25750
25751 2002-08-02  Martin Baulig  <martin@gnome.org>
25752
25753         * expression.cs (LocalVariableReferenc): Added constructor which
25754         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25755         (LocalVariableReference.IsReadOnly): New property.
25756         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25757         variable is readonly, use our own readonly flag to do this; you can
25758         use the new constructor to get a writable reference to a read-only
25759         variable.
25760
25761         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25762         reference to the local variable.
25763
25764 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25765
25766         * rootcontext.cs (ResolveCore): Also include System.Exception
25767
25768         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25769         we reach an EmptyStatement.
25770
25771         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25772         is also fine.
25773
25774         * expression.cs (Binary.ResolveOperator): Check error result in
25775         two places.
25776
25777         use brtrue/brfalse directly and avoid compares to null.
25778
25779 2002-08-02  Martin Baulig  <martin@gnome.org>
25780
25781         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25782         Fixes bug #28407, added test-155.cs.
25783
25784 2002-08-01  Martin Baulig  <martin@gnome.org>
25785
25786         * class.cs (Event.EmitDefaultMethod): Make this work with static
25787         events.  Fixes #28311, added verify-3.cs.
25788
25789 2002-08-01  Martin Baulig  <martin@gnome.org>
25790
25791         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25792         `is_disposable' fields.
25793         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25794         `hm.is_disposable' if we're using the collection pattern.
25795         (Foreach.EmitCollectionForeach): Use the correct type for the
25796         enumerator's local variable, only emit the try/finally block if
25797         necessary (fixes #27713).
25798
25799 2002-08-01  Martin Baulig  <martin@gnome.org>
25800
25801         * ecore.cs (Expression.report118): Renamed to Error118 and made
25802         it public static.
25803
25804         * statement.cs (Throw.Resolve): Check whether the expression is of
25805         the correct type (CS0118) and whether the type derives from
25806         System.Exception (CS0155).
25807         (Catch.Resolve): New method.  Do the type lookup here and check
25808         whether it derives from System.Exception (CS0155).
25809         (Catch.CatchType, Catch.IsGeneral): New public properties.
25810
25811         * typemanager.cs (TypeManager.exception_type): Added.
25812
25813 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25814
25815         * driver.cs: Updated About function.
25816
25817 2002-07-31  Martin Baulig  <martin@gnome.org>
25818
25819         Implemented Control Flow Analysis.
25820
25821         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25822         (EmitContext.CurrentBranching): Added.
25823         (EmitContext.StartFlowBranching): Added.
25824         (EmitContext.EndFlowBranching): Added.
25825         (EmitContext.KillFlowBranching): Added.
25826         (EmitContext.IsVariableAssigned): Added.
25827         (EmitContext.SetVariableAssigned): Added.
25828         (EmitContext.IsParameterAssigned): Added.
25829         (EmitContext.SetParameterAssigned): Added.
25830         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25831         Added control flow analysis stuff here.
25832
25833         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25834         resolve the expression as lvalue.
25835         (LocalVariableReference.DoResolve): Check whether the variable has
25836         already been assigned.
25837         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25838         the parameter as assigned here.
25839         (ParameterReference.DoResolve): Check whether the parameter has already
25840         been assigned.
25841         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25842         expression as lvalue.
25843
25844         * statement.cs (FlowBranching): New class for the flow analysis code.
25845         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25846         (LabeledStatement.IsDefined): New public property.
25847         (LabeledStatement.AddUsageVector): New public method to tell flow
25848         analyis that the label may be reached via a forward jump.
25849         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25850         flow analysis.
25851         (VariableInfo.Number): New public field.  This is used by flow analysis
25852         to number all locals of a block.
25853         (Block.CountVariables): New public property.  This is the number of
25854         local variables in this block (including the locals from all parent
25855         blocks).
25856         (Block.EmitMeta): Number all the variables.
25857
25858         * statement.cs: Added flow analysis support to all classes.
25859
25860 2002-07-31  Martin Baulig  <martin@gnome.org>
25861
25862         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25863         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25864         then use this argument.
25865
25866         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25867
25868         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25869         use this to specify /define options.
25870
25871 2002-07-29  Martin Baulig  <martin@gnome.org>
25872
25873         * statement.cs (Fixed): Moved all code that does variable lookups
25874         and resolvings from Emit to Resolve.
25875
25876         * statement.cs (For): Moved all code that does variable lookups
25877         and resolvings from Emit to Resolve.
25878
25879         * statement.cs (Using): Moved all code that does variable lookups
25880         and resolvings from Emit to Resolve.
25881
25882 2002-07-29  Martin Baulig  <martin@gnome.org>
25883
25884         * attribute.cs (Attribute.Resolve): Explicitly catch a
25885         System.NullReferenceException when creating the
25886         CustromAttributeBuilder and report a different warning message.
25887
25888 2002-07-29  Martin Baulig  <martin@gnome.org>
25889
25890         * support.cs (ParameterData.ParameterName): Added method to
25891         get the name of a parameter.
25892
25893         * typemanager.cs (TypeManager.IsValueType): New public method.
25894
25895 2002-07-29  Martin Baulig  <martin@gnome.org>
25896
25897         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25898         is a flag which specifies that it's either ref or out.
25899         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25900         the out parameter to `out Parameter.Modifier mod', also set the
25901         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25902
25903         * support.cs (InternalParameters.ParameterModifier): Distinguish
25904         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25905         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25906
25907         * expression.cs (Argument.GetParameterModifier): Distinguish
25908         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25909         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25910
25911 2002-07-29  Martin Baulig  <martin@gnome.org>
25912
25913         * expression.cs (ParameterReference.ParameterReference): Added
25914         `Location loc' argument to the constructor.
25915
25916         * cs-parser.jay: Pass location to ParameterReference.
25917
25918 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25919
25920         * statement.cs (Try): Initialize the location.
25921
25922         * cs-parser.jay: pass location to Try.
25923
25924         * expression.cs (Unary.Reduce): Change the prototype to return
25925         whether a constant fold could be performed or not.  The result is
25926         returned in an out parameters.  In the case of Indirection and
25927         AddressOf, we want to perform the full tests.
25928
25929 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25930
25931         * statement.cs (Statement.Emit): Flag dead code.
25932
25933 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25934
25935         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25936
25937 2002-07-27  Martin Baulig  <martin@gnome.org>
25938
25939         * class.cs (MethodData.Define): Put back call to
25940         TypeManager.AddMethod(), accidentally commented this out.
25941
25942         * report.cs (Debug): New public method to print debugging information,
25943         this is `[Conditional ("DEBUG")]'.
25944
25945 2002-07-26  Martin Baulig  <martin@gnome.org>
25946
25947         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25948         (switch_statement): Push the current_block to the switch_stack and
25949         pop it again when we're done with the switch.
25950         (switch_section): The new block is a child of the current_block.
25951         Fixes bug #24007, added test-152.cs.
25952
25953 2002-07-27  Martin Baulig  <martin@gnome.org>
25954
25955         * expression.cs (Invocation.EmitArguments): When calling a varargs
25956         function with only its fixed arguments, we need to pass an empty
25957         array.
25958
25959 2002-07-27  Martin Baulig  <martin@gnome.org>
25960
25961         Mono 0.13 has been released.
25962
25963 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25964
25965         * driver.cs: Rename --resource to --linkres, because that is what
25966         we do currently, we dont support --resource yet.
25967
25968         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25969
25970 2002-07-25  Martin Baulig  <martin@gnome.org>
25971
25972         * class.cs (MethodData): New public class.  This is a `method builder'
25973         class for a method or one accessor of a Property/Indexer/Event.
25974         (MethodData.GetMethodFlags): Moved here from MemberBase.
25975         (MethodData.ApplyAttributes): Likewise.
25976         (MethodData.ApplyObsoleteAttribute): Likewise.
25977         (MethodData.ApplyConditionalAttribute): Likewise.
25978         (MethodData.ApplyDllImportAttribute): Likewise.
25979         (MethodData.CheckAbstractAndExternal): Likewise.
25980         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25981         (MethodData.Emit): Formerly known as Method.Emit().
25982         (MemberBase): Moved everything which was specific to a single
25983         accessor/method to MethodData.
25984         (Method): Create a new MethodData and call Define() and Emit() on it.
25985         (Property, Indexer, Event): Create a new MethodData objects for each
25986         accessor and call Define() and Emit() on them.
25987
25988 2002-07-25  Martin Baulig  <martin@gnome.org>
25989
25990         Made MethodCore derive from MemberBase to reuse the code from there.
25991         MemberBase now also checks for attributes.
25992
25993         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25994         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25995         as virtual.
25996         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25997         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25998         (MemberBase.ApplyAttributes): New virtual method; applies the
25999         attributes to a method or accessor.
26000         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
26001         (MemberBase.ApplyConditionalAttribute): Likewise.
26002         (MemberBase.ApplyDllImportAttribute): Likewise.
26003         (MemberBase.CheckAbstractAndExternal): Likewise.
26004         (MethodCore.ParameterTypes): This is now a property instead of a
26005         method, it's initialized from DoDefineParameters().
26006         (MethodCore.ParameterInfo): Removed the set accessor.
26007         (MethodCore.DoDefineParameters): New protected virtual method to
26008         initialize ParameterTypes and ParameterInfo.
26009         (Method.GetReturnType): We can now simply return the MemberType.
26010         (Method.GetMethodFlags): Override the MemberBase version and add
26011         the conditional flags.
26012         (Method.CheckBase): Moved some code from Define() here, call
26013         DoDefineParameters() here.
26014         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
26015         here to avoid some larger code duplication.
26016         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
26017         ensure that abstract and external accessors don't declare a body.
26018
26019         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
26020         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
26021         lookup in the attribute's parent classes, so we need to abort as soon
26022         as we found the first match.
26023         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
26024         the attribute has no arguments.
26025
26026         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
26027         of a Method.
26028
26029 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26030
26031         * cs-parser.jay: reverted previous patch.
26032
26033 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26034
26035         * cs-parser.jay: fixed bug #22119.
26036
26037 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26038
26039         * attribute.cs: fixed compilation. The error was:
26040         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
26041         be assigned to before control leaves the current method."
26042         [FIXME:  Filed as bug #28186: MCS must report this error.]
26043
26044 2002-07-25  Martin Baulig  <martin@gnome.org>
26045
26046         * attribute.cs (Attribute.Conditional_GetConditionName): New static
26047         method to pull the condition name ouf of a Conditional attribute.
26048         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
26049         the obsolete message and error flag out of an Obsolete attribute.
26050
26051         * class.cs (Method.GetMethodFlags): New public method to get the
26052         TypeManager.MethodFlags for this method.
26053         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
26054         private methods.
26055         (Method.Define): Get and apply the Obsolete and Conditional attributes;
26056         if we're overriding a virtual function, set the new private variable
26057         `parent_method'; call the new TypeManager.AddMethod().
26058
26059         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
26060         the MethodBuilder and the Method in a PtrHashtable.
26061         (TypeManager.builder_to_method): Added for this purpose.
26062         (TypeManager.MethodFlags): Added IsObsoleteError.
26063         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
26064         Obsolete and Conditional arguments in MethodBuilders.  If we discover
26065         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
26066         the message from the attribute.
26067
26068 2002-07-24  Martin Baulig  <martin@gnome.org>
26069
26070         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
26071         preprocessor directives, ensure that the argument to #define/#undef is
26072         exactly one identifier and that it's actually an identifier.
26073
26074         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
26075         did not work ....
26076
26077 2002-07-24  Martin Baulig  <martin@gnome.org>
26078
26079         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
26080         initialize it to TypeManager.object_type in the constructor.
26081         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
26082         of the `hm.get_current' method if we're using the collection pattern.
26083         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
26084         for the explicit conversion to make it work when we're using the collection
26085         pattern and the `Current' property has a different return type than `object'.
26086         Fixes #27713.
26087
26088 2002-07-24  Martin Baulig  <martin@gnome.org>
26089
26090         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
26091         does not match, but don't report any errors.  This method is called in
26092         order for all methods in a MethodGroupExpr until a matching method is
26093         found, so we don't want to bail out if the first method doesn't match.
26094         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
26095         matches, report the 123.  Fixes #28070.
26096
26097 2002-07-24  Martin Baulig  <martin@gnome.org>
26098
26099         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
26100         TypeManager.TypeToCoreType() to the top of the method so the
26101         following equality checks will work.  Fixes #28107.
26102
26103 2002-07-24  Martin Baulig  <martin@gnome.org>
26104
26105         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
26106         operand is of type uint, and the other operand is of type sbyte,
26107         short or int, the operands are converted to type long." -
26108         Actually do what this comment already told us.  Fixes bug #28106,
26109         added test-150.cs.
26110
26111 2002-07-24  Martin Baulig  <martin@gnome.org>
26112
26113         * class.cs (MethodBase): New abstract class.  This is now a base
26114         class for Property, Indexer and Event to avoid some code duplication
26115         in their Define() and DefineMethods() methods.
26116         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
26117         generic methods for Define() and DefineMethods().
26118         (FieldBase): Derive from MemberBase, not MemberCore.
26119         (Property): Derive from MemberBase, not MemberCore.
26120         (Property.DefineMethod): Moved all the code from this method to the
26121         new MethodBase.DefineAccessor(), just call it with appropriate
26122         argumetnts.
26123         (Property.Define): Call the new Property.DoDefine(), this does some
26124         sanity checks and we don't need to duplicate the code everywhere.
26125         (Event): Derive from MemberBase, not MemberCore.
26126         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
26127         accessors, this will also make them work with interface events.
26128         (Indexer): Derive from MemberBase, not MemberCore.
26129         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
26130         (Indexer.Define): Use the new MethodBase functions.
26131
26132         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
26133         argument to the constructor.
26134         (Interface.FindMembers): Added support for interface events.
26135         (Interface.PopluateEvent): Implemented.
26136
26137         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
26138
26139 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
26140
26141         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
26142         but this is required to check for a method name being the same as
26143         the containing class.  
26144
26145         Handle this now.
26146
26147 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26148
26149         * interface.cs: initialize variable.
26150
26151 2002-07-23  Martin Baulig  <martin@gnome.org>
26152
26153         Implemented the IndexerName attribute in interfaces.
26154
26155         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
26156         name if this is an explicit interface implementation.
26157         (Indexer.InterfaceIndexerName): New public variable.  If we're
26158         implementing an interface indexer, this is the IndexerName in that
26159         interface.  Otherwise, it's the IndexerName.
26160         (Indexer.DefineMethod): If we're implementing interface indexer,
26161         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
26162         and Pending.ImplementIndexer methods.
26163         (Indexer.Define): Also define the PropertyBuilder if we're
26164         implementing an interface indexer and this is neither an explicit
26165         interface implementation nor do the IndexerName match the one in
26166         the interface.
26167
26168         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
26169         If a method is defined here, then we always need to create a proxy
26170         for it.  This is used when implementing interface indexers.
26171         (Pending.IsInterfaceIndexer): New public method.
26172         (Pending.ImplementIndexer): New public method.
26173         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
26174         This is used when implementing interface indexers to define a proxy
26175         if necessary.
26176         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
26177         define a proxy if necessary.
26178
26179         * interface.cs (Interface.IndexerName): New public variable.
26180         (Interface.PopulateIndexer): Set the IndexerName.
26181         (Interface.DefineIndexers): New private method.  Populate all the
26182         indexers and make sure their IndexerNames match.
26183
26184         * typemanager.cs (IndexerPropertyName): Added support for interface
26185         indexers.
26186
26187 2002-07-22  Martin Baulig  <martin@gnome.org>
26188
26189         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
26190         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
26191         ret if HasReturnLabel.
26192         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
26193         variables.
26194
26195         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
26196         and set the ec.LoopBeginTryCatchLevel.
26197         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
26198         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
26199         the current ec.TryCatchLevel, the branch goes out of an exception
26200         block.  In this case, we need to use Leave and not Br.
26201
26202 2002-07-22  Martin Baulig  <martin@gnome.org>
26203
26204         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
26205         block unless the block does not always return or it is contained in
26206         another try { ... } catch { ... } block.  Fixes bug #26506.
26207         Added verify-1.cs to the test suite.
26208
26209 2002-07-22  Martin Baulig  <martin@gnome.org>
26210
26211         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
26212         then we do not always return.  Fixes bug #24985.
26213
26214 2002-07-22  Martin Baulig  <martin@gnome.org>
26215
26216         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
26217         lookup on a per-class level; ie. walk up the class hierarchy until we
26218         found at least one applicable method, then choose the best among them.
26219         Fixes bug #24463 and test-29.cs.
26220
26221 2002-07-22  Martin Baulig  <martin@gnome.org>
26222
26223         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
26224         return types of the methods.  The return type is not part of the
26225         signature and we must not check it to make the `new' modifier work.
26226         Fixes bug #27999, also added test-147.cs.
26227         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
26228
26229         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
26230         on the method's return type.
26231
26232 2002-07-21  Martin Baulig  <martin@gnome.org>
26233
26234         * assign.cs: Make this work if the rightmost source is a constant and
26235         we need to do an implicit type conversion.  Also adding a few more tests
26236         to test-38.cs which should have caught this.
26237
26238         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
26239         target in the makefile for this.  The makefile.gnu is primarily intended
26240         for end-users who don't want to debug the compiler.
26241
26242 2002-07-21  Martin Baulig  <martin@gnome.org>
26243
26244         * assign.cs: Improved the Assign class so it can now handle embedded
26245         assignments (X = Y = Z = something).  As a side-effect this'll now also
26246         consume less local variables.  test-38.cs now passes with MCS, added
26247         a few new test cases to that test.
26248
26249 2002-07-20  Martin Baulig  <martin@gnome.org>
26250
26251         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
26252         instructions.  Fixes bug #27977, also added test-146.cs.
26253
26254 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26255
26256         * cs-tokenizer.cs: fixed getHex ().
26257
26258 2002-07-19  Martin Baulig  <martin@gnome.org>
26259
26260         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
26261         not Type.GetType() to lookup the array type.  This is needed when
26262         we're constructing an array of a user-defined type.
26263         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
26264         single-dimensional arrays, but also for single-dimensial arrays of
26265         type decimal.
26266
26267 2002-07-19  Martin Baulig  <martin@gnome.org>
26268
26269         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
26270         this function is called, it's not allowed to share LocalBuilders
26271         among ILGenerators.
26272
26273 2002-07-19  Martin Baulig  <martin@gnome.org>
26274
26275         * expression.cs (Argument.Resolve): Report an error 118 when trying
26276         to pass a type as argument.
26277
26278 2002-07-18  Martin Baulig  <martin@gnome.org>
26279
26280         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
26281         Conv_R_Un for the signed `long' type.
26282
26283 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
26284
26285         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
26286         `expr' for the temporary result, as that will fail if we do
26287         multiple resolves on the same expression.
26288
26289 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
26290
26291         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
26292         ec.TypeContainer for looking up aliases. 
26293
26294         * class.cs (TypeContainer): Remove LookupAlias from here.
26295
26296         * decl.cs (DeclSpace); Move here.
26297
26298 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
26299
26300         * class.cs (FindMembers): Only call filter if the constructor
26301         bulider is not null.
26302
26303         Also handle delegates in `NestedTypes' now.  Now we will perform
26304         type lookups using the standard resolution process.  This also
26305         fixes a bug.
26306
26307         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
26308         This uses Expressions (the limited kind that can be parsed by the
26309         tree) instead of strings.
26310
26311         * expression.cs (ComposedCast.ToString): Implement, used to flag
26312         errors since now we have to render expressions.
26313
26314         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
26315         FormArrayType. 
26316
26317         * ecore.cs (SimpleName.ToString): ditto.
26318
26319         * cs-parser.jay: Instead of using strings to assemble types, use
26320         Expressions to assemble the type (using SimpleName, ComposedCast,
26321         MemberAccess).  This should fix the type lookups in declarations,
26322         because we were using a different code path for this.
26323
26324         * statement.cs (Block.Resolve): Continue processing statements
26325         even when there is an error.
26326
26327 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
26328
26329         * class.cs (Event.Define): Also remove the `remove' method from
26330         the list of pending items.
26331
26332         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
26333         generate more compact code. 
26334
26335 2002-07-17  Martin Baulig  <martin@gnome.org>
26336
26337         * const.cs (Const.LookupConstantValue): Add support for constant
26338         `unchecked' and `checked' expressions.
26339         Also adding test case test-140.cs for this.
26340
26341 2002-07-17  Martin Baulig  <martin@gnome.org>
26342
26343         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
26344         check whether mi.ReturnType implements the IEnumerator interface; the
26345         `==' and the IsAssignableFrom() will fail in this situation.
26346
26347 2002-07-16  Ravi Pratap  <ravi@ximian.com>
26348
26349         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
26350         here too.
26351
26352 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26353
26354         * expression.cs: fixed bug #27811.
26355
26356 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
26357
26358         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
26359         Molaro: when we are a ref, the value already contains a pointer
26360         value, do not take the address of it.
26361
26362 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
26363         * removed mb-parser.jay and mb-tokenizer.cs
26364
26365 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26366
26367         * expression.cs: check against the building corlib void type.
26368
26369 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
26370
26371         * ecore.cs: fix for valuetype static readonly fields: when 
26372         initializing them, we need their address, not the address of a copy.
26373
26374 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
26375
26376         * typemanager.cs: register also enum_type in corlib.
26377
26378 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26379
26380         * class.cs: allow calling this (but not base) initializers in structs.
26381
26382 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
26383
26384         * ecore.cs: make sure we compare against the building base types
26385         in GetTypeSize ().
26386
26387 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
26388
26389         * typemanager.cs: fix TypeToCoreType() to handle void and object
26390         (corlib gets no more typerefs after this change).
26391
26392 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
26393
26394         * expression.cs (ArrayCreation.EmitArrayArguments): use
26395         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
26396
26397         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
26398         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
26399         array indexes, the runtime actually forbids them.
26400
26401         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
26402         for array arguments here.
26403
26404         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
26405         instead of the default for ValueTypes.
26406
26407         (New.DoEmit): Use IsValueType instead of
26408         IsSubclassOf (value_type)
26409         (New.DoResolve): ditto.
26410         (Invocation.EmitCall): ditto.
26411
26412         * assign.cs (Assign): ditto.
26413
26414         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
26415         Statements *are* currently doing part of their resolution during
26416         Emit.  
26417
26418         Expressions do always resolve during resolve, but statements are
26419         only required to propagate resolution to their children.
26420
26421 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
26422
26423         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
26424
26425         (LoadAssembly): Do not add the dll if it is already specified
26426
26427         (MainDriver): Add the System directory to the link path at the end,
26428         after all the other -L arguments. 
26429
26430         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
26431         wrong opcode for loading bytes and bools (ldelem.i1 instead of
26432         ldelem.u1) and using the opposite for sbytes.
26433
26434         This fixes Digger, and we can finally run it.
26435
26436         * driver.cs (UnixParseOption): Move the option parsing here.  
26437         (CSCParseOption): Implement CSC-like parsing of options.
26438
26439         We now support both modes of operation, the old Unix way, and the
26440         new CSC-like way.  This should help those who wanted to make cross
26441         platform makefiles.
26442
26443         The only thing broken is that /r:, /reference: and /lib: are not
26444         implemented, because I want to make those have the same semantics
26445         as the CSC compiler has, and kill once and for all the confussion
26446         around this.   Will be doing this tomorrow.
26447
26448         * statement.cs (Unsafe.Resolve): The state is checked during
26449         resolve, not emit, so we have to set the flags for IsUnsfe here.
26450
26451 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26452
26453         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
26454         not catch the Error_ObjectRefRequired in SimpleName (as it is
26455         possible to have a class/instance variable name that later gets
26456         deambiguated), we have to check this here.      
26457
26458 2002-07-10  Ravi Pratap  <ravi@ximian.com>
26459
26460         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
26461         make static and put into Expression.
26462
26463         (Event.Define): Register the private field of the event with the 
26464         TypeManager so that GetFieldFromEvent can get at it.
26465
26466         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
26467         keep track of the private field associated with an event which
26468         has no accessors.
26469
26470         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
26471         private field.
26472
26473         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
26474
26475 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26476
26477         * expression.cs (Binary.EmitBranchable): this routine emits the
26478         Binary expression in a branchable context.  This basically means:
26479         we need to branch somewhere, not just get the value on the stack.
26480
26481         This works together with Statement.EmitBoolExpression.
26482
26483         * statement.cs (Statement.EmitBoolExpression): Use
26484         EmitBranchable. 
26485
26486 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
26487
26488         * statement.cs (For): Reduce the number of jumps in loops.
26489
26490         (For): Implement loop inversion for the For statement.
26491
26492         (Break): We can be breaking out of a Try/Catch controlled section
26493         (foreach might have an implicit try/catch clause), so we need to
26494         use Leave instead of Br.
26495
26496         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
26497         now).  If the instace expression supports IMemoryLocation, we use
26498         the AddressOf method from the IMemoryLocation to extract the
26499         address instead of emitting the instance.
26500
26501         This showed up with `This', as we were emitting the instance
26502         always (Emit) instead of the Address of This.  Particularly
26503         interesting when This is a value type, as we dont want the Emit
26504         effect (which was to load the object).
26505
26506 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
26507
26508         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
26509
26510         * statement.cs (Checked): Set the CheckedState during the resolve
26511         process too, as the ConvCast operations track the checked state on
26512         the resolve process, and not emit.
26513
26514         * cs-parser.jay (namespace_member_declaration): Flag that we have
26515         found a declaration when we do.  This is used to flag error 1529
26516
26517         * driver.cs: Report ok when we display the help only.
26518
26519 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
26520
26521         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
26522
26523 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
26524
26525         * cs-tokenizer.cs (define): We also have to track locally the
26526         defines.  AllDefines is just used for the Conditional Attribute,
26527         but we also need the local defines for the current source code. 
26528
26529 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
26530
26531         * statement.cs (While, For, Do): These loops can exit through a
26532         Break statement, use this information to tell whether the
26533         statement is the last piece of code.
26534
26535         (Break): Flag that we break.
26536
26537         * codegen.cs (EmitContexts): New `Breaks' state variable.
26538
26539 2002-07-03  Martin Baulig  <martin@gnome.org>
26540
26541         * class.cs (TypeContainer.MethodModifiersValid): Allow override
26542         modifiers in method declarations in structs.  Otherwise, you won't
26543         be able to override things like Object.Equals().
26544
26545 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26546
26547         * class.cs (Method, Property, Indexer): Do not allow the public
26548         modifier to be used in explicit interface implementations.
26549
26550         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
26551         override modifiers in method declarations in structs
26552
26553 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
26554
26555         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
26556         integer or real overflow, report an error
26557
26558 2002-07-02  Martin Baulig  <martin@gnome.org>
26559
26560         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
26561         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
26562         to tell the runtime about our newly created System.Object and
26563         System.ValueType types.
26564
26565 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26566
26567         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
26568         struct instead of Ldarg/Starg.
26569
26570 2002-07-02  Martin Baulig  <martin@gnome.org>
26571
26572         * expression.cs (Indirection.Indirection): Call
26573         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
26574
26575 2002-07-02  Martin Baulig  <martin@gnome.org>
26576
26577         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
26578         ValueType, call TypeManager.TypeToCoreType() on it.
26579         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
26580         the OpCodes.Newarr argument.
26581
26582 2002-07-02  Martin Baulig  <martin@gnome.org>
26583
26584         * expression.cs (Invocation.EmitCall): When compiling corlib,
26585         replace all calls to the system's System.Array type to calls to
26586         the newly created one.
26587
26588         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
26589         System.Array methods.
26590         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
26591         from the system's System.Array type which must be replaced.
26592
26593 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
26594
26595         * typemanager.cs: load unverifiable_code_ctor so we can build
26596         corlib using the correct type. Avoid using GetTypeCode() with
26597         TypeBuilders.
26598         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
26599         TypeManager.object_type to allow building corlib.
26600
26601 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
26602
26603         * ecore.cs: handle System.Enum separately in LoadFromPtr().
26604
26605 2002-07-01  Martin Baulig  <martin@gnome.org>
26606
26607         * class.cs: Make the last change actually work, we need to check
26608         whether `ifaces != null' to avoid a crash.
26609
26610 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26611
26612         * class.cs: when we build structs without fields that implement
26613         interfaces, we need to add the interfaces separately, since there is
26614         no API to both set the size and add the interfaces at type creation
26615         time.
26616
26617 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26618
26619         * expression.cs: the dimension arguments to the array constructors
26620         need to be converted if they are a long.
26621
26622 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26623
26624         * class.cs: don't emit ldarg.0 if there is no parent constructor
26625         (fixes showstopper for corlib).
26626
26627 2002-06-29  Martin Baulig  <martin@gnome.org>
26628
26629         MCS now compiles corlib on GNU/Linux :-)
26630
26631         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26632         ie. check for MethodImplOptions.InternalCall.
26633
26634         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26635         and TypeManager.attribute_type are null, so we must explicitly check
26636         whether parent is not null to find out whether it's an attribute type.
26637         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26638         and SetBuilder, not only if the property is neither abstract nor external.
26639         This is necessary to set the MethodImplOptions on the accessor methods.
26640         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26641         SetBuilder, see Property.Emit().
26642
26643         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26644         populate "System.Object", "System.ValueType" and "System.Attribute" since
26645         they've already been populated from BootCorlib_PopulateCoreTypes().
26646
26647 2002-06-29  Martin Baulig  <martin@gnome.org>
26648
26649         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26650         is the NullLiteral, we also need to make sure that target_type is not
26651         an enum type.   
26652
26653 2002-06-29  Martin Baulig  <martin@gnome.org>
26654
26655         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26656         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26657         before calling BootstrapCorlib_ResolveDelegate ().
26658
26659 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26660
26661         * statement.cs: fixed build-breaker. All tests passed ok.
26662
26663 2002-06-27  Martin Baulig  <martin@gnome.org>
26664
26665         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26666         for System.Decimal when compiling corlib.
26667
26668 2002-06-27  Martin Baulig  <martin@gnome.org>
26669
26670         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26671         switch blocks which contain nothing but a default clause.
26672
26673 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26674
26675        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26676
26677 2002-06-27  Martin Baulig  <martin@gnome.org>
26678
26679         * ecore.cs (PropertyExpr.PropertyExpr): Call
26680         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26681
26682         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26683         is already a TypeBuilder.
26684
26685 2002-06-27  Martin Baulig  <martin@gnome.org>
26686
26687         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26688         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26689         the "from an array-type to System.Array" case.  This makes it work
26690         when compiling corlib.
26691
26692 2002-06-27  Martin Baulig  <martin@gnome.org>
26693
26694         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26695         non-static PropertyExpr, set its InstanceExpression.  This makes
26696         the `ICollection.Count' property work in System/Array.cs.
26697
26698 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26699
26700         * driver.cs: Made error handling more consistent.  Errors now
26701         tracked by Report class, so many methods which used to return int
26702         now return void.  Main() now prints success/failure and 
26703         errors/warnings message.
26704
26705         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26706         the magic number return values (123 and 124).  Now, if the
26707         expected error occurs, the compiler exits with success (exit value
26708         0).  If the compilation completes without seeing that particular
26709         error, the compiler exits with failure (exit value 1).  The
26710         makefile in mcs/errors has been changed to handle the new behaviour.
26711
26712         * report.cs: Made 'expected error' number a property and renamed
26713         it from 'Probe' to 'ExpectedError'.
26714
26715         * genericparser.cs: Removed error handling support, since it is
26716         now all done by Report class.
26717
26718         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26719         class, so parse() no longer returns an int.
26720
26721         * namespace.cs: Use Report.Error instead of GenericParser.error
26722
26723 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26724
26725         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26726         TypeContainer.AddOperator): At the front of the list put the
26727         explicit implementations, so they get resolved/defined first. 
26728
26729 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26730
26731         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26732         interface type is implemented by this TypeContainer.  Used during
26733         explicit interface implementation.
26734
26735         (Property.Define, Indexer.Define, Method.Define): Validate that
26736         the given interface in the explicit implementation is one of the
26737         base classes for the containing type.
26738
26739         Also if we are explicitly implementing an interface, but there is
26740         no match in the pending implementation table, report an error.
26741
26742         (Property.Define): Only define the property if we are
26743         not explicitly implementing a property from an interface.  Use the
26744         correct name also for those properties (the same CSC uses,
26745         although that is really not needed).
26746
26747         (Property.Emit): Do not emit attributes for explicitly implemented
26748         properties, as there is no TypeBuilder.
26749
26750         (Indexer.Emit): ditto.
26751
26752         Hiding then means that we do not really *implement* a pending
26753         implementation, which makes code fail.
26754
26755 2002-06-22  Martin Baulig  <martin@gnome.org>
26756
26757         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26758         the return value of Object.GetType().  [FIXME: we need to do this whenever
26759         we get a type back from the reflection library].
26760
26761 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26762
26763         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26764
26765 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26766
26767         * attribute.cs: Return null if we can not look up the type.
26768
26769         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26770         the interface types found.
26771
26772         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26773         interface types found.
26774
26775         * typemanager.cs (GetInterfaces): Make this routine returns alll
26776         the interfaces and work around the lame differences between
26777         System.Type and System.Reflection.Emit.TypeBuilder in the results
26778         result for GetInterfaces.
26779
26780         (ExpandInterfaces): Given an array of interface types, expand and
26781         eliminate repeated ocurrences of an interface.  This expands in
26782         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26783         be IA, IB, IC.
26784
26785 2002-06-21  Martin Baulig  <martin@gnome.org>
26786
26787         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26788         on System.Enum.
26789
26790 2002-06-21  Martin Baulig  <martin@gnome.org>
26791
26792         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26793         and called with one of the core types, return the corresponding typebuilder for
26794         that type.
26795
26796         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26797         element type.
26798
26799 2002-06-21  Martin Baulig  <martin@gnome.org>
26800
26801         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26802         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26803         (Expression.ConvertReferenceExplicit): Likewise.
26804
26805         * expression.cs (ElementAccess.DoResolve): Likewise.
26806         (ElementAccess.DoResolveLValue): Likewise.
26807
26808 2002-06-10  Martin Baulig  <martin@gnome.org>
26809
26810         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26811         add the "value" parameter to the parameter list.
26812
26813         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26814         to our caller.
26815
26816 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26817
26818         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26819         the argument to an int, uint, long or ulong, per the spec.  Also
26820         catch negative constants in array creation.
26821
26822 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26823
26824         * class.cs: do not allow the same interface to appear twice in
26825         the definition list.
26826
26827 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26828
26829         * ecore.cs: don't use ldlen with System.Array.
26830
26831 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26832
26833         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26834
26835 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26836
26837         * modifiers.cs: produce correct field attributes for protected
26838         internal. Easy fix so miguel can work on ther harder stuff:-)
26839
26840 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26841
26842         * pending.cs: New file.  Move the code from class.cs here.
26843         Support clearning the pending flag for all methods (when not doing
26844         explicit interface implementation).
26845
26846 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26847
26848         * rootcontext.cs: added a couple more types needed to bootstrap.
26849
26850 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26851
26852         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26853         constructor in the type, instead of any constructor in the type
26854         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26855         a bug in the Mono runtime when applying the params attribute). 
26856
26857 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26858         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26859
26860 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26861
26862         * expression.cs (Unary.ResolveOperator): Use TypeManager
26863         to resolve the type.
26864
26865 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26866
26867         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26868         attached.
26869
26870         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26871         with each member too.
26872
26873         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26874         field builders too - this takes care of the enum member case.
26875
26876 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26877
26878         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26879         address-of operator on both value types and pointers.
26880
26881 2002-06-10  Martin Baulig  <martin@gnome.org>
26882
26883         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26884         PropertyBuilder to the `property_builders' list.
26885
26886         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26887         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26888         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26889         find any indexers which are inherited from an interface.
26890
26891 2002-06-09  Martin Baulig  <martin@gnome.org>
26892
26893         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26894         the same type as the constant if necessary.  There's also a test-130.cs
26895         for this.
26896
26897         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26898
26899         * typemanager.cs (TypeManager.ChangeType): Previously known as
26900         Enum.ChangeEnumType().
26901
26902 2002-06-09  Martin Baulig  <martin@gnome.org>
26903
26904         * expression.cs (Cast.TryReduce): Added support for consts.
26905
26906 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26907
26908         * class.cs (Accessor): Hold attributes information so we can pass
26909         it along.
26910
26911         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26912         Modify to pass in attributes attached to the methods.
26913
26914         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26915
26916         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26917         to handle the Accessor kind :-)
26918
26919         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26920
26921 2002-06-08  Martin Baulig  <martin@gnome.org>
26922
26923         * expression.cs (Unary.TryReduceNegative): Added support for
26924         ULongConstants.
26925
26926 2002-06-08  Martin Baulig  <martin@gnome.org>
26927
26928         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26929         name can't be found in the `defined_names' - the caller will do a
26930         MemberLookup in this case and thus find methods in System.Enum
26931         such as Enum.IsDefined().
26932
26933 2002-06-08  Martin Baulig  <martin@gnome.org>
26934
26935         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26936         Convert.ChangeType() which works with TypeBuilder created types.
26937         (Enum.LookupEnumValue, Enum.Define): Use it here.
26938
26939         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26940         `TypeBuilder.BaseType != null' check.
26941         (TypeContainer.FindMembers): Only lookup parent members if we
26942         actually have a parent.
26943         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26944         (ConstructorInitializer.Resolve): Likewise.
26945
26946         * interface.cs (Interface.FindMembers): Added
26947         `TypeBuilder.BaseType != null' check.
26948
26949         * rootcontext.cs (RootContext.ResolveCore): Added
26950         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26951         classes_second_stage.
26952
26953         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26954         debug_type and trace_type when compiling with --nostdlib.       
26955
26956 2002-06-07  Martin Baulig  <martin@gnome.org>
26957
26958         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26959         (AddField): Set it to true when adding a non-static field.
26960         (DefineType): Use `have_nonstatic_fields' to find out whether we
26961         have non-static fields, not `Fields != null'.
26962
26963 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26964
26965         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26966         dereferencing a null on the static-field code path)
26967
26968 2002-05-30  Martin Baulig  <martin@gnome.org>
26969
26970         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26971         to take command line arguments.  Use reflection to call the new
26972         custom `Initialize' function on the symbol writer and pass it the
26973         command line arguments.
26974
26975         * driver.cs (--debug-args): New command line argument to pass command
26976         line arguments to the symbol writer.
26977
26978 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26979
26980         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26981         the target type for indexers and properties.  Thanks to Joe for
26982         catching this.
26983
26984 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26985
26986         * typemanager.cs (MethodFlags): returns the method flags
26987         (Obsolete/ShouldIgnore) that control warning emission and whether
26988         the invocation should be made, or ignored. 
26989
26990         * expression.cs (Invocation.Emit): Remove previous hack, we should
26991         not do this on matching a base type, we should do this based on an attribute
26992
26993         Only emit calls to System.Diagnostics.Debug and
26994         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26995         on the command line.
26996
26997         * rootcontext.cs: Global settings for tracing and debugging.
26998
26999         * cs-tokenizer.cs (define): New utility function to track
27000         defines.   Set the global settings for TRACE and DEBUG if found.
27001
27002 2002-05-25  Ravi Pratap  <ravi@ximian.com>
27003
27004         * interface.cs (Populate*): Pass in the TypeContainer as well as
27005         the DeclSpace as parameters so that we can create EmitContexts and
27006         then use that to apply attributes etc.
27007
27008         (PopulateMethod, PopulateEvent, PopulateProperty)
27009         (PopulateIndexer): Apply attributes everywhere.
27010
27011         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
27012         etc.
27013
27014         (ApplyAttributes): Update accordingly.
27015
27016         We now apply interface attributes for all members too.
27017
27018 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
27019
27020         * class.cs (Indexer.Define); Correctly check if we are explicit
27021         implementation (instead of checking the Name for a ".", we
27022         directly look up if the InterfaceType was specified).
27023
27024         Delay the creation of the PropertyBuilder.
27025
27026         Only create the PropertyBuilder if we are not an explicit
27027         interface implementation.   This means that explicit interface
27028         implementation members do not participate in regular function
27029         lookups, and hence fixes another major ambiguity problem in
27030         overload resolution (that was the visible effect).
27031
27032         (DefineMethod): Return whether we are doing an interface
27033         implementation. 
27034
27035         * typemanager.cs: Temporary hack until we get attributes in
27036         interfaces (Ravi is working on that) and we get IndexerName
27037         support in interfaces.
27038
27039         * interface.cs: Register the indexers as properties.
27040
27041         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
27042         warning, I have verified that this is a bug in the .NET runtime
27043         (JavaScript suffers of the same problem).
27044
27045         * typemanager.cs (MemberLookup): When looking up members for
27046         interfaces, the parent of an interface is the implicit
27047         System.Object (so we succeed in searches of Object methods in an
27048         interface method invocation.  Example:  IEnumerable x;  x.ToString
27049         ()) 
27050
27051 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
27052
27053         * class.cs (Event): Events should also register if they do
27054         implement the methods that an interface requires.
27055
27056         * typemanager.cs (MemberLookup); use the new GetInterfaces
27057         method. 
27058
27059         (GetInterfaces): The code used to lookup interfaces for a type is
27060         used in more than one place, factor it here. 
27061
27062         * driver.cs: Track the errors at the bottom of the file, we kept
27063         on going.
27064
27065         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
27066         instance if the method we are calling is static!
27067
27068 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
27069
27070         * attribute.cs (ApplyAttributes): Make this function filter out
27071         the IndexerName attribute (as that attribute in reality is never
27072         applied) and return the string constant for the IndexerName
27073         attribute. 
27074
27075         * class.cs (TypeContainer.Emit): Validate that all the indexers
27076         have the same IndexerName attribute, and if so, set the
27077         DefaultName attribute on the class. 
27078
27079         * typemanager.cs: The return value might contain other stuff (not
27080         only methods).  For instance, consider a method with an "Item"
27081         property and an Item method.
27082
27083         * class.cs: If there is a problem with the parameter types,
27084         return. 
27085
27086 2002-05-24  Ravi Pratap  <ravi@ximian.com>
27087
27088         * ecore.cs (ImplicitConversionExists): Wrapper function which also
27089         looks at user defined conversion after making a call to 
27090         StandardConversionExists - we need this for overload resolution.
27091
27092         * expression.cs : Update accordingly the various method calls.
27093
27094         This fixes 2 bugs filed against implicit user defined conversions 
27095
27096 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
27097
27098         * statement.cs: Track the result of the assignment.
27099
27100 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
27101
27102         * expression.cs (MemberAccess): Improved error reporting for
27103         inaccessible members.
27104
27105 2002-05-22  Martin Baulig  <martin@gnome.org>
27106
27107         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
27108         itself with debugging support.
27109
27110 2002-05-22  Martin Baulig  <martin@gnome.org>
27111
27112         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
27113         Removed, this isn't needed anymore.
27114
27115 2002-05-20  Martin Baulig  <martin@gnome.org>
27116
27117         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
27118         be underlying type for an enum.
27119
27120 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
27121
27122         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
27123         that splits out the loading of just the core types.
27124
27125         * rootcontext.cs (ResolveCore): Split the struct resolution in
27126         two, so we can load the enumeration underlying types before any
27127         enums are used.
27128
27129         * expression.cs (Is): Bandaid until we fix properly Switch (see
27130         bug #24985 for details).
27131
27132         * typemanager.cs (ImplementsInterface): The hashtable will contain
27133         a null if there are no interfaces implemented.
27134
27135 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
27136
27137         * cs-parser.jay (indexer_declarator): It is fine to have array
27138         parameters
27139
27140 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
27141
27142         * typemanager.cs: (RegisterBuilder): New function used to register
27143         TypeBuilders that implement interfaces.  Since
27144         TypeBuilder.GetInterfaces (as usual) does not work with lame
27145         Reflection.Emit. 
27146         (AddUserType): register interfaces.
27147
27148         (ImplementsInterface): Use the builder_to_ifaces hash if we are
27149         dealing with TypeBuilder.  Also, arrays are showing up as
27150         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
27151         methods can not be invoked on them!
27152
27153         * ecore.cs (ExplicitReferenceConversionExists): Made public.
27154         (ImplicitReferenceConversionExists): Split out from
27155         StandardConversionExists. 
27156
27157         * expression.cs (As): We were only implementing one of the three
27158         cases for the as operator.  We now implement them all.
27159         (Is): Implement the various other cases for Is as well.
27160
27161         * typemanager.cs (CACHE): New define used to control if we want or
27162         not the FindMembers cache.  Seems to have a negative impact on
27163         performance currently
27164
27165         (MemberLookup): Nested types have full acess to
27166         enclosing type members
27167
27168         Remove code that coped with instance/static returns for events, we
27169         now catch this in RealFindMembers.
27170
27171         (RealFindMembers): only perform static lookup if the instance
27172         lookup did not return a type or an event.  
27173
27174 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
27175
27176         * assign.cs (CompoundAssign): We pass more semantic information
27177         now to Compound Assignments than we did before: now we have all
27178         the information at hand, and now we resolve the target *before* we
27179         do the expression expansion, which allows the "CacheValue" method
27180         to have the effect we intended (before, a [x] += 1 would generate
27181         two differen ArrayAccess expressions from the ElementAccess,
27182         during the resolution process).
27183
27184         (CompoundAssign.DoResolve): Resolve target and original_source here.
27185
27186 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
27187
27188         * expression.cs (ArrayAccess): dropped debugging information. 
27189
27190         * typemanager.cs: Small bug fix: I was always returning i_members,
27191         instead of one of i_members or s_members (depending on which had
27192         the content).
27193
27194         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
27195         method is invoked before any code generation takes place, and it
27196         is a mechanism to inform that the expression will be invoked more
27197         than once, and that the method should use temporary values to
27198         avoid having side effects
27199
27200         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
27201
27202         * ecore.cs (Expression.CacheTemporaries): Provide empty default
27203         implementation.
27204
27205         * expression.cs (Indirection, ArrayAccess): Add support for
27206         CacheTemporaries in these two bad boys. 
27207
27208         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
27209         ldobj or ldind_ref.  
27210         (StoreFromPtr): Handle stobj as well.
27211
27212         * expression.cs (UnaryMutator): Share more code.
27213
27214         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
27215         down: I was not tracking the Filter function as well, which
27216         was affecting the results of the cache.
27217
27218 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
27219
27220         * attribute.cs: Remove the hack to handle the CharSet property on
27221         StructLayouts. 
27222
27223 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
27224
27225         * attribute.cs (DoResolve): More uglyness, we now only try to
27226         resolve the attribute partially, to extract the CharSet
27227         information (only if we are a StructLayout attribute).  Otherwise 
27228
27229         (GetExtraTypeInfo): Add some code to conditionally kill in the
27230         future this.   I am more and more convinced that the .NET
27231         framework has special code to handle the attribute setting on
27232         certain elements.
27233
27234         * expression.cs (IsParamsMethodApplicable): Revert my previous
27235         foreach change here, it was wrong.
27236
27237 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
27238
27239         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
27240         (pp_expr): do not abort on unknown input, just return.
27241         (eval): abort if there are pending chars.
27242
27243         * attribute.cs (Attribute.Resolve): Positional parameters are
27244         optional.  Deal with that case.
27245
27246         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
27247         the Ansi/Unicode/Auto information for the type.
27248
27249         (TypeContainer.DefineType): instantiate the EmitContext here, as
27250         we will be using it during the type definition (to resolve
27251         attributes) and during the emit phase.
27252
27253         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
27254         to pull type information out of the attributes
27255
27256         (Attribute.Resolve): track the constructor builder, and allow for
27257         multiple invocations (structs and classes will use this).
27258
27259         * ecore.cs (MemberLookupFinal): new version with all the
27260         parameters customizable.
27261
27262         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
27263         constructors.  Return if the result value is null (as the error
27264         would have been flagged already by MemberLookupFinal)
27265
27266         Do not allow instances of abstract classes or interfaces to be
27267         created.
27268
27269         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
27270         We have to compare the assembly property here when dealing with
27271         FamANDAssem and Assembly access modifiers, because we might be
27272         creating an assembly from *modules* (that means that we are not
27273         getting TypeBuilders for types defined in other modules that are
27274         part of this assembly).
27275
27276         (Method.Emit): If the method is marked abstract and has a body,
27277         emit an error. 
27278
27279         (TypeContainer.DefineMembers): If both the defined member and the
27280         parent name match are methods, then do not emit any warnings: let
27281         the Method.Define routine take care of flagging warnings.  But if
27282         there is a mismatch (method overrides something else, or method is
27283         overriwritten by something, then emit warning).
27284
27285         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
27286         set to null, this means `do not check for the return type on the
27287         signature'. 
27288
27289         (Method.Define): set the return type for the method signature to
27290         null, so that we get methods with the same name and parameters and
27291         different return types.  This is used to flag warning 114 (you are
27292         hiding a method, and you probably want to use the new/override
27293         keywords instead).
27294
27295         * typemanager.cs (MemberLookup): Implemented proper access
27296         control, closing a long standing set of bug reports.  The problem
27297         was that the Framework only has two bits: Public and NonPublic,
27298         and NonPublic includes private and protected methods, but we need
27299         to enforce the FamANDAssem, FamOrAssem and Family. 
27300
27301 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
27302
27303         * statement.cs (GotoCase): Return true: Ammounts to giving up
27304         knowledge on whether we return or not, and letting the other case
27305         be responsible for it.
27306
27307 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
27308
27309         * driver.cs: Do not load directories for each file processed, only
27310         do it if there is a pattern.
27311
27312         * ecore.cs: Report readonly assigns here as well, as we might have
27313         been resolved only by MemberAccess.
27314
27315         (SimpleName.SimpleNameResolve): Also be useful for LValue
27316         resolution.   We need this to propagate assign to local readonly variables
27317
27318         * typemanager.cs: Use a ptrhashtable for the criteria, because we
27319         do not want to reuse potential criteria memory.
27320
27321         * class.cs (MyEventBuilder): Set reflected_type;
27322
27323         * ecore.cs (Constantify): Added support for constifying bools.
27324
27325         (RootContext.LookupType): Added a cache for values looked up in
27326         the declaration space.
27327
27328         * typemanager.cs (FindMembers): Now is a front-end to
27329         RealFindMembers, and provides a two-level hashtable-based cache to
27330         the request.  
27331
27332         15% performance improvement: from 22.5 to 19.2 seconds.
27333
27334         * expression.cs (IsParamsMethodApplicable): use foreach.
27335         (Invocation.DoResolve): ditto.
27336         (New.DoResolve): ditto.
27337         (ArrayCreation.DoResolve): ditto.
27338
27339         * ecore.cs (FindMostEncompassingType): use foreach.
27340
27341         * delegate.cs (NewDelegate.DoResolve): Use foreach
27342
27343         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
27344         (RemoveMethods): use foreach.
27345
27346         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
27347         nested foreach statements instead of for, and also break out of
27348         the inner loop once a match is found.
27349
27350         (Invocation.OverloadResolve): Use foreach, simplify the code. 
27351
27352 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
27353
27354         * cfold.cs (BinaryFold): During an enumeration evaluation context,
27355         we actually unwrap the expression to allow for extra information
27356         to be extracted. 
27357
27358         * expression.cs: Use Shr_Un on unsigned operations. 
27359
27360 2002-05-08  Ravi Pratap  <ravi@ximian.com>
27361
27362         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
27363         applicable operators was not being considered correctly. This closes
27364         the bug Miguel reported.
27365
27366 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
27367
27368         * attribute.cs: check that the type derives from System.Attribute
27369         and report the correct error in that case (moved the duplicate code to
27370         its own method, too).
27371
27372 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
27373
27374         * attribute.cs: lookup attribute type name as the spec says: first the
27375         bare attribute name and then name + "Attribute" (nant compiles with
27376         mcs after this fix).
27377
27378 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
27379
27380         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
27381         Because of the way we parse things, we should try to see if a
27382         UIntConstant can fit in an integer.
27383
27384 2002-05-07  Ravi Pratap  <ravi@ximian.com>
27385
27386         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
27387         when we are in an explicit context.
27388
27389         (ConvertReferenceExplicit): When converting from Iface type S to Class
27390         T make sure the rules are implemented as an OR.
27391
27392         * parameter.cs (ParameterType): Make it a property for now although the
27393         purpose really isn't anything immediate.
27394
27395         * expression.cs (Is*Applicable): Do better checking on the parameter type
27396         of a ref/out parameter. The ones from the system assemblies are already 
27397         marked with the correct type so we don't need to do any correction.
27398
27399         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
27400         the object type is standard too so include that.
27401
27402 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27403
27404         * ecore.cs (StandardConversionExists): Augment with missing code:
27405         deal with IntConstant, LongConstants and Enumerations.
27406
27407         * assign.cs: Report the error, instead of failing silently
27408
27409         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
27410         typecontainer that they are declared, because the
27411         typecontainer/namespace will have the list of using clauses that
27412         need to be applied.
27413
27414         Assembly Attributes were escaping the normal registration
27415         mechanism. 
27416
27417         (EmitCode): Apply attributes within an EmitContext that represents
27418         the container they were declared on.
27419
27420         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
27421
27422 2002-05-06  Ravi Pratap  <ravi@ximian.com>
27423
27424         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
27425         Revamp completely - make much cleaner as we now operate only
27426         on a set of Types.
27427
27428         (FindMostSpecificSource, FindMostSpecificTarget): New methods
27429         to implement the logic detailed in the spec more correctly.
27430
27431         (UserDefinedConversion): Update accordingly.
27432
27433 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27434
27435         * statement.cs: Return flow analysis information up.
27436
27437         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
27438         and the default.
27439
27440         (token): Do not consume an extra character before calling
27441         decimal_digits.
27442
27443 2002-05-06  Piers Haken <piersh@friskit.com>
27444
27445         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
27446
27447 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27448
27449         * class.cs (Constructor.Emit): Set the IsStatic flag in the
27450         EmitContext during the instance constructor initializer
27451         resolution, to stop access to instance variables.
27452
27453         This is mandated by the spec, last paragraph of the `constructor
27454         initializers' section. 
27455
27456 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
27457
27458         * cs-parser.jay, class.cs (Accessor): new class used to represent
27459         an accessor (get or set).  In the past we used `null' to represent
27460         a missing accessor.  But this is ambiguous because there was no
27461         way to tell in abstract indexers/properties if one of them was
27462         specified.
27463
27464         Now there is a way of addressing that.
27465
27466         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
27467         instead of FindMembers.
27468
27469         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
27470         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
27471
27472         * attribute.cs: Treat indexers and properties as the same in terms
27473         of applying attributes
27474
27475         * ecore.cs (FindMostEncompassedType): Use statically initialized
27476         EmptyExpressions()s like we do elsewhere to avoid creating useless
27477         objects (and we take this out of the tight loop).
27478
27479         (GetConversionOperators): Move the code to extract the actual
27480         operators to a separate routine to clean things up.
27481
27482 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
27483
27484         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
27485         events are always registered FieldBuilders.
27486
27487         * class.cs (FieldBase): New class shared by Fields 
27488
27489         * delegate.cs: If we are a toplevel delegate, use our full name.
27490         If we are a nested delegate, then only use our tail name.
27491
27492 2002-05-02  Ravi Pratap  <ravi@ximian.com>
27493
27494         * expression.cs (IsApplicable): Ensure that we add the "&" to
27495         ref/out types before comparing it with the type of the argument.
27496
27497         (IsParamsMethodApplicable): Ditto.
27498
27499         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
27500         silly me ;-)
27501
27502         * delegate.cs : Handle the case when we have more than one applicable
27503         method. Flag an error only when we finish checking all.
27504
27505 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
27506
27507         * expression.cs: Add support for boolean static initializers.
27508
27509 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
27510
27511         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
27512
27513         * parameter.cs (ComputeParameterTypes,
27514         ComputeAndDefineParameterTypes): Better error handling: now we
27515         clear the `types' cache if we fail during any of the type lookups.
27516         We also return the status code correctly to our caller
27517
27518         * delegate.cs: If we fail to define a delegate, abort the extra
27519         steps. 
27520
27521         * expression.cs (Binary.ResolveOperator): for
27522         operator==(object,object) and operator !=(object, object) we also
27523         have to verify that there is an implicit conversion from one to
27524         the other.
27525
27526         (ArrayAccess.DoResolve): Array Access can operate on
27527         non-variables. 
27528
27529 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
27530
27531         * assign.cs (CompoundAssign): A new class used as a "flag" that
27532         the assignment actually is happening as part of a compound
27533         assignment operator.
27534
27535         During compound assignment, a few new rules exist to enable things
27536         like:
27537
27538         byte b |= 1 + 2
27539
27540         From the spec:
27541
27542         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
27543         to the type of x) if y is implicitly convertible to the type of x,
27544         and the operator is a builtin operator and the return type of the
27545         operator is explicitly convertible to the type of x. 
27546
27547         * rootcontext.cs: Reset warning level to 2.  4 catches various
27548         "interesting" features in mcs, we must clean this up at some
27549         point, but currently am trying to kill other bugs ;-)
27550
27551         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
27552         in container classes as well.  
27553
27554         * expression.cs (Binary.ResolveOperator): Handle string case
27555         before anything else (as operator overloading does emit an error
27556         before doing anything else).
27557
27558         This code could go away when we move to a table driven model, but
27559         i could not come up with a good plan last night.
27560
27561 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
27562
27563         * typemanager.cs (CSharpName): reimplementation using regex.
27564         * class.cs: added null check for fields in Emit
27565         * rootcontext.cs: set warninglevel to 4
27566
27567 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
27568
27569         * typemanager.cs (CSharpName): reimplemented with Lupus
27570         suggestion.
27571
27572 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
27573
27574         * statement.cs (If): correclty implement Resolve, because we were
27575         not catching sem errors in there.  The same process is needed
27576         everywhere else. 
27577         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
27578
27579
27580         (Statement.Warning_DeadCodeFound): Factorize code.
27581         (While): Report dead code here too.
27582
27583         (Statement): Added Resolve virtual method to allow
27584         for resolution split from the emit code.
27585
27586 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27587
27588         * statement.cs (EmitBoolExpression): No longer try to resolve the
27589         expression here.    
27590         (MakeBoolean): New utility function that resolve, implicitly
27591         converts to boolean and tags the expression. 
27592
27593
27594         (If, Do): Implement dead code elimination.
27595         (While): Implement loop inversion
27596
27597         (Do, While, For, If): Resolve the expression prior to calling our
27598         code generation.
27599
27600 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
27601
27602         * class.cs:
27603           - added method Report28 (warning: program has more than one entry point)
27604           - added method IsEntryPoint, implements paragraph 10.1 of the spec
27605           - modified method Method.Define, the part at the end of the method
27606
27607         * rootcontext.cs: added static public Location EntryPointLocation;
27608           
27609         * ../errors/cs0028.cs : Add test case for the above warning.              
27610
27611         * typemanager.cs:
27612           - modified method CSharpName to allow arrays of primitive type to
27613             be printed nicely (e.g. instead of System.Int32[][] it now prints
27614             int[][])
27615           - added method CSharpSignature: returns the signature of a method
27616             in string format to be used in reporting errors, warnings, etc.
27617
27618         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27619         with String.Empty.
27620
27621 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27622
27623         * delegate.cs (Define): Fix extremely silly bug where I was
27624         setting the type of the 'object' parameter of the BeginInvoke
27625         method to System.IAsyncResult instead of System.Object ;-)
27626
27627 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27628
27629         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27630         here. 
27631
27632         (Constructor.Emit): return if we fail to initialize the
27633         constructor.  Another door closed!  
27634
27635         * expression.cs (New.DoResolve): Improve error message (from -6 to
27636         1501).  Use DeclaredOnly lookup to find the exact constructor.
27637
27638         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27639         loop.  This is useful.
27640
27641         * cs-parser.jay: Adjust the default parameters so that destructors
27642         have the proper signature.
27643
27644 2002-04-26  Martin Baulig  <martin@gnome.org>
27645
27646         * driver.cs (LoadAssembly): If `assembly' contains any characters
27647         which are only valid in path names and not in assembly names
27648         (currently slash, backslash and point), use Assembly.LoadFrom ()
27649         instead of Assembly.Load () on the `assembly' (before iteration
27650         over the link_paths).
27651
27652 2002-04-26  Martin Baulig  <martin@gnome.org>
27653
27654         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27655
27656 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27657
27658         * class.cs (Property): use the new typemanager.MemberLookup
27659
27660         (TypeContainer.MemberLookup): Implement using the
27661         TypeManager.MemberLookup now. 
27662
27663         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27664         and return MemberInfos, so that these can be used without an
27665         EmitContext (what we had before).
27666
27667 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27668
27669         * expression.cs: Fix the case where the argument to params if the
27670         type of the params.  I omitted handling this before.   Fixed
27671
27672 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27673
27674         * driver.cs: Call BootCorlib_PopulateCoreType
27675
27676         * class.cs (Property.CheckBase): Check for properties only, not
27677         for all members. 
27678
27679         * interface.cs: Temporary hack: try/catch around the
27680         CustomAttributeBuilder, because I am getting an exception that I
27681         do not understand.
27682
27683         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27684         types whose definitions are required to be there (attributes are
27685         defined before standard types).
27686
27687         Compute definitions as we boot the various types, as they are used
27688         immediately (value_type class will need object_type, but if we do
27689         not initialize object_type, we will pass a null, which will let
27690         the runtime pick the System.Object from the existing corlib, which
27691         is not what we want).
27692
27693 2002-04-22  Patrik Torstensson <totte@labs2.com>
27694
27695         * cs-tokenizer.cs: fixed a number of trim() issues.
27696
27697 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27698
27699         * expression.cs (Argument.Type): Ensure that we return the correct
27700         type when we have out or ref parameters [in which case we 
27701         append a "&"].
27702
27703 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27704
27705         * class.cs (Property, Indexer): Allow extern modifier in there. 
27706
27707         * typemanager.cs (InitBaseTypes): Initializes object_type and
27708         value_type, since those will be used early on during the bootstrap
27709         process to compile corlib.
27710
27711         (InitCoreTypes): Move code from here to InitBaseTypes.
27712
27713 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27714
27715         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27716         single-dimension arrays as using the ldlen opcode.  
27717
27718         Daniel Lewis discovered this optimization.  
27719
27720         * typemanager.cs: Add signature for System.Array::get_Length
27721
27722 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27723
27724         * statement.cs: report the error when the foreach does not apply to an
27725         array nor a collection.
27726
27727 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27728
27729         * expression.cs: Add implicit conversions to the operator ~.
27730
27731         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27732
27733         * typemanager.cs: Locate the decimal constructor.
27734
27735 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27736
27737         * attribute.cs: use the new property of TypeOf.
27738         * expression.cs: added 'get' property around typearg.
27739
27740         These changes fix a build breaker reported by NickD. Is this the
27741         correct way to fix?  If not, please, revert my changes and make it
27742         work :-).
27743
27744 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27745
27746         * attribute.cs: Add support for typeof in attribute invocations.
27747         I am not sure that this is right though.
27748
27749 2002-04-14  Duncan Mak  <duncan@ximian.com>
27750
27751         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27752         Binary.Operator.Division case.
27753
27754 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27755
27756         * class.cs (DefineType): Ensure that we do a proper check on
27757         attribute types and also register it with the TypeManager.
27758
27759         (TypeContainer.Targets): The default for attribute types is
27760         AttributeTargets.All.
27761
27762         * attribute.cs (ApplyAttributes): Registering the attribute type
27763         is done elsewhere, not when we discover we have a Usage attribute.
27764
27765 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27766
27767         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27768         and get rid of is_delegate parameter.
27769
27770         * everywhere : update.
27771
27772 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27773
27774         * cs-parser.jay (compilation_unit): Revamp completely to use
27775         some new ideas that I got from Rhys' grammar to solve the problems
27776         with assembly level attributes.
27777
27778         (outer_declaration): New grammar production.
27779
27780         (attribute_sections): Add.
27781
27782         (opt_attributes): Base on attribute_sections
27783
27784         (namespace_declaration): Allow opt_attributes to tackle the case
27785         when we have assembly level attributes - we are clever in this
27786         regard now ;-)
27787
27788         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27789         attributes in the non-global context.
27790
27791         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27792         instead of SetGlobalAttributes.
27793
27794         * class.cs, rootcontext.cs : Ensure we define and generate 
27795         attribute types before anything else.
27796
27797         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27798         and flag the new error -20 for the case when the attribute type
27799         does not have valid targets specified. csc does not catch this.
27800
27801         * ../errors/errors.txt : update for error # -20
27802
27803 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27804
27805         * support.cs (InternalParameters.ParameterModifier): Do some null
27806         checking and return sane values.
27807
27808         * class.cs (Method.Define): If we are a PInvoke method, ensure
27809         that we are static and extern. Report error # 601
27810
27811         * ../errors/cs0601.cs : Add test case for the above error.
27812
27813 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27814
27815         * rootcontext.cs (attribute_types): We need to keep type of
27816         all attribute types separately and emit code for them first.
27817
27818         (RegisterAttribute) : Implement.
27819
27820         * class.cs (DefineType): Check if the current Type is a custom
27821         attribute type and register it accordingly.
27822
27823         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27824         adding the first attribute twice and rename to
27825
27826         (SetGlobalAttributes): this.
27827
27828         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27829         lookups.
27830
27831         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27832         if we are processing global arguments. Hmm, I am unsure of this.
27833
27834 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27835
27836         * expression.cs: added static array of strings to avoid calling
27837         Enum.ToString () for Operator in Binary. Significant recover of
27838         performance.
27839
27840 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27841
27842         * class.cs (FindMembers): Allow the Builders of the various
27843         members to be null.  If they are skip them.  This only happens
27844         during the PInvoke declaration.
27845
27846 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27847
27848         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27849         failure, so we do not keep going afterwards.
27850
27851         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27852         wanted to pass `false' as the `is_delegate' argument.  If this is
27853         the case, why not use delegate_type == null to mean `is_delegate =
27854         false' and anything else as is_delegate = true.
27855
27856 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27857
27858         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27859         code for the section, not the beginning of the tests.
27860
27861 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27862
27863         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27864
27865         * expression.cs (Binary): same.  Warn about errors where we have
27866         Enum/Enum in operator + as well.
27867
27868 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27869
27870         * statement.cs:
27871                 - added support for switch(bool)
27872                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27873                 - add TableSwitchEmit() to handle table-based switch statements
27874
27875 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27876
27877         * expression.cs (Invocation.OverloadResolve): Factor out code which
27878         does parameter compatibility checking with arguments so that we can 
27879         re-use the code even from Delegate.VerifyApplicability
27880
27881         (VerifyArgumentsCompat): Move above code here.
27882
27883         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27884         and instead make a call to the above method.
27885
27886 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27887
27888         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27889         We use it to keep track of classes which are attribute types.
27890
27891 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27892
27893         * delegate.cs (Delegate.Define): Correctly define the types in the
27894         presence of fixed and array parameters.
27895
27896         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27897         doing FindMembers.
27898
27899         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27900         include NonPublic after the first iteration.
27901
27902         * class.cs (Indexer.CheckBase): Only check if both parents are
27903         non-null. 
27904
27905         * cs-parser.jay (accessor_body): If empty, set to null.
27906
27907         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27908         same code path here to resolve constants names that we did have in
27909         MemberAccess.DoResolve.  There is too much code duplicated here.
27910
27911 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27912
27913         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27914
27915         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27916         to MakeUnionSet.
27917
27918         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27919         tokens, numbers and strings.
27920
27921         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27922         parenthesis.
27923
27924         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27925         asyncronous parameters and the regular parameters.  
27926
27927         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27928         specify the target directory.
27929
27930         * expression.cs: (This.DoResolve): Simplify
27931         (As.Emit): Optimize, do not generate IsInst if the expression is
27932         always of the given type.
27933
27934         (Is.DoResolve): Bug fix, we were reporting both always/never for
27935         the is expression.
27936
27937         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27938         creating too many unnecessary arrays.
27939
27940 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27941
27942         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27943         fields instead of rolling our own initializer.   Takes care of all
27944         implicit conversions, and drops unnecessary static checks/argument.
27945
27946 2002-03-31  Dick Porter  <dick@ximian.com>
27947
27948         * driver.cs: use the GetDirectories() return values properly, and
27949         use "/" as path separator.
27950
27951 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27952
27953         * expression.cs (Unary): Optimize - - expr into expr.
27954         (Binary): Optimize a + (-b) into a -b.
27955
27956         * codegen.cs (CodeGen): Made all methods static.
27957
27958 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27959
27960         * rootcontext.cs: 
27961
27962         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27963         TypeBuilder property.
27964
27965         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27966         instead. 
27967
27968         * tree.cs: Removed the various RecordXXXX, and replaced with a
27969         single RecordDecl.  Removed all the accessor methods, and just
27970         left a single access point Type 
27971
27972         * enum.cs: Rename DefineEnum to DefineType.
27973
27974         * decl.cs: New abstract method `DefineType' used to unify the
27975         Defines for Enumerations, Interfaces, TypeContainers and
27976         Delegates.
27977
27978         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27979         LookupBaseClasses method that used to live in class.cs and
27980         interface.cs here, and renamed to FindType.
27981
27982         * delegate.cs: Implement DefineType.  Take advantage of the
27983         refactored pattern for locating the parent builder without taking
27984         the parent_builder argument (which we know does not work if we are
27985         nested, and triggering a toplevel definition).
27986
27987 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27988
27989         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27990         accessibility of a member has changed during override and report
27991         an error if so.
27992
27993         * class.cs (Method.Define, Property.Define): Only complain on
27994         overrides if the method is private, any other accessibility is
27995         fine (and since we just checked the permission is the same, we are
27996         good to go).
27997
27998         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27999         and elif are processed always.  The other pre-processing
28000         directives are only processed if we are "taking" the path
28001
28002 2002-03-29  Martin Baulig  <martin@gnome.org>
28003
28004         * class.cs (Method.Emit): Only emit symbolic debugging info if the
28005         current location is not Null.
28006
28007         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
28008         a separate method so we can profile it.
28009
28010         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
28011         `span.Seconds' are just seconds, but no minutes or hours.
28012         (MainDriver): Profile the CodeGen.SaveSymbols calls.
28013
28014 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
28015
28016         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
28017         Remove the gratuitous set of Final:
28018
28019                                 // If an interface implementation, then we can set Final.
28020                                 if (((flags & MethodAttributes.Abstract) == 0) &&
28021                                     implementing.DeclaringType.IsInterface)
28022                                         flags |= MethodAttributes.Final;
28023
28024         I do not know what I was smoking when I used that.
28025
28026
28027         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
28028         step into fixing the name resolution issues for delegates and
28029         unifying the toplevel name resolution.
28030
28031 2002-03-28  Martin Baulig  <martin@gnome.org>
28032
28033         * class.cs (Method.Emit): If we have a symbol writer, call its
28034         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
28035         tell it about the current method.
28036
28037         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
28038         writer that we're going to emit the first byte of IL code for a new
28039         statement (a new source line).
28040         (EmitContext.EmitTopBlock): If we have a symbol writer, call
28041         EmitContext.Mark() before emitting any code.
28042
28043         * location.cs (SymbolDocument): Return null when we're Null.
28044
28045         * statement.cs (Statement): Moved the `Location loc' variable here.
28046         (Statement.EmitBoolExpression): If we have a symbol writer, call
28047         ec.Mark() before emitting any code to tell it that we're at the
28048         beginning of a new statement.
28049         (StatementExpression): Added `Location' argument to the constructor.
28050         (Block): Added public readonly variable `StartLocation' and public
28051         variable `EndLocation'.  The latter is to be set using SetEndLocation().
28052         (Block): Added constructor which takes a start and end location.
28053         (Block.SetEndLocation): New method. This sets the end location.
28054         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
28055         local variables we create.
28056         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
28057         each statement and do also mark the begin and end of the block.
28058
28059         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
28060         tell it the current lexer.Location, use Location.Null for the end of the
28061         block.
28062         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
28063         current block, set its end location using SetEndLocation().
28064         (statement_expression): StatementExpression constructor now takes the
28065         lexer.Location as additional argument.
28066         (for_statement, declare_local_variables): Likewise.
28067         (declare_local_variables): When creating a new implicit block, use the
28068         new Block constructor and pass it the lexer.Location.
28069
28070 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
28071
28072         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
28073         members also on the parent interfaces recursively.
28074
28075 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
28076
28077         * report.cs: Use new formats, since Gonzalo finished the missing
28078         bits. 
28079
28080         * expression.cs (Binary.ResolveOperator): added missing operator|
28081         operator& and operator^ for bool/bool.
28082
28083         * cs-parser.jay: CheckDef now takes a Location argument that is
28084         used to report errors more precisly (instead of reporting the end
28085         of a definition, we try to track something which is a lot closer
28086         to the source of the problem).
28087
28088         * cs-tokenizer.cs: Track global token use, so we can properly flag
28089         the use of #define/#undef after the first token has been seen.
28090
28091         Also, rename the reportXXXX to Error_DescriptiveName
28092
28093         * decl.cs (DeclSpace.IsTopLevel): Move property here from
28094         TypeContainer, so that Enum and Interface can use this too.
28095
28096         * class.cs (TypeContainer.LookupInterfaceOrClass,
28097         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
28098         `builder' argument.  Typically this was used to pass the parent
28099         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
28100         the definition).  
28101
28102         The problem is that a nested class could trigger the definition of
28103         a toplevel class, and the builder would be obviously wrong in that
28104         case. 
28105
28106         So we drop this argument, and we compute dynamically the
28107         TypeBuilder/ModuleBuilder (the correct information was available
28108         to us anyways from DeclSpace.Parent)
28109
28110         * interface.cs (Interface.DefineInterface): Drop builder
28111         parameter cleanup like class.cs
28112
28113         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
28114         like class.cs
28115
28116         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
28117         values. 
28118
28119         (Try.Emit): Propagate the returns value from the statement.
28120
28121         (Return.Emit): Even if we are leavning 
28122
28123         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
28124
28125         * modifiers.cs: Fix the computation of MethodAttributes flags.
28126
28127 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
28128
28129         * driver.cs: allow compilation of files that start with '/'.
28130         Add a default case when checking the argument of --target.
28131
28132 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
28133
28134         * interface.cs: Implement the same search algorithm for types in
28135         the interface code.
28136
28137         * delegate.cs: Do not allow multiple definition.
28138
28139         * Recovered ChangeLog that got accidentally amputated
28140
28141         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
28142
28143         * rootcontext.cs: Load manually enum to allow core classes to
28144         contain enumerations.
28145
28146         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
28147         Update to new static methods in TypeManager.
28148
28149         * typemanager.cs (GetMethod, GetConstructor): Use our
28150         implementation of FindMembers to find the members, since during
28151         corlib compilation, the types are TypeBuilders and GetMethod and
28152         GetConstructor do not work.
28153
28154         Make all methods in TypeManager static.
28155
28156         (InitCodeHelpers): Split the functionality from
28157         the InitCodeTypes function.
28158
28159         * driver.cs: Call InitCodeHelpers after we have populated the
28160         types. 
28161
28162         * cs-parser.jay (delegate_declaration): we did not used to compute
28163         the delegate name correctly for void delegates.
28164
28165 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
28166
28167         * rootcontext.cs (RootContext): Init the interface_resolve_order
28168         and type_container_resolve_order always.
28169
28170         (ResolveCore, BootstrapCorlib_ResolveClass,
28171         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
28172         compiler when compiling with --nostdlib
28173
28174         * class.cs (TypeContainer.DefineType): Check that our parent is
28175         not null.  This test is most important when we are bootstraping
28176         the core types.
28177
28178         * codegen.cs: Split out the symbol writing code.
28179
28180 2002-03-25  Martin Baulig  <martin@gnome.org>
28181
28182         * driver.cs (-g): Made -g an alias for --debug.
28183
28184 2002-03-24  Martin Baulig  <martin@gnome.org>
28185
28186         * codegen.cs (SymbolWriter): New public variable. Returns the
28187         current symbol writer.
28188         (CodeGen): Added `bool want_debugging_support' argument to the
28189          constructor. If true, tell the ModuleBuild that we want debugging
28190         support and ask it for the ISymbolWriter.
28191         (Save): If we have a symbol writer, call it's Close() method after
28192         saving the assembly.
28193
28194         * driver.c (--debug): New command line argument to create a
28195         debugger information file.
28196
28197         * location.cs (SymbolDocument): New public property. Returns an
28198         ISymbolDocumentWriter object for the current source file or null
28199         if we don't have a symbol writer.
28200
28201 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
28202
28203         * driver.cs (LoadAssembly): Correctly return when all the paths
28204         have been tried and not before.
28205
28206         * statement.cs (Switch.Emit): return the actual coverage for this
28207         statement (returns/not-returns)
28208
28209         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
28210         switch of the statement if we are the last switch section.  That
28211         kills two problems: try/catch problems (we used to emit an empty
28212         nop at the end) and switch statements where all branches would
28213         return. 
28214
28215 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
28216
28217         * driver.cs: Add default assemblies (the equivalent to the
28218         Microsoft CSC.RSP file)
28219
28220         * cs-tokenizer.cs: When updating `cols and setting it to zero,
28221         also update tokens_seen and set it to false.
28222
28223         * driver.cs: Implement --recurse for Mike.
28224
28225         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
28226         correctly splitting out the paths.
28227
28228 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
28229
28230         * interface.cs (Interface.PopulateProperty): Instead of using
28231         `parent' as the declaration space for the set parameters, use
28232         `this' 
28233
28234         * support.cs (InternalParameters): InternalParameters constructor
28235         takes a DeclSpace instead of a TypeContainer.
28236
28237         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
28238         types are being initialized, load the address of it before calling
28239         the function.  
28240
28241         (New): Provide a mechanism to disable the generation of local
28242         value type temporaries when the caller will be providing us with
28243         an address to store it.
28244
28245         (ArrayCreation.EmitDynamicInitializers): Use it.
28246
28247 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
28248
28249         * expression.cs (Invocation.EmitArguments): Only probe for array
28250         property if there is more than one argument.  Sorry about that.
28251
28252         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
28253         empty param arrays.
28254
28255         * class.cs (Method.LabelParameters): Fix incorrect code path that
28256         prevented the `ParamArrayAttribute' from being applied to the
28257         params attribute.
28258
28259 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
28260
28261         * support.cs (ReflectionParameters): Correctly compute whether the
28262         last argument is a params array.  Fixes the problem with
28263         string.Split ('a')
28264
28265         * typemanager.cs: Make the assemblies array always be non-null
28266         (empty, but non-null)
28267
28268         * tree.cs (RecordDecl): New function that abstracts the recording
28269         of names.  This reports error 101, and provides a pointer to the
28270         previous declaration.  Fixes a crash in the compiler.
28271
28272         * cs-parser.jay (constructor_declaration): Update to new grammar,
28273         and provide a constructor_body that can be empty.
28274
28275 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
28276
28277         * driver.cs: Add support for --resources.
28278
28279         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
28280         Make all types for the various array helper methods be integer.
28281
28282         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
28283         CheckState to ConvCast.
28284
28285         (ConvCast): Now it takes a `checked' state argument, to avoid
28286         depending on the emit context for the conversion, and just using
28287         the resolve time setting.
28288
28289         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
28290         instead of Invocation.EmitArguments.  We do not emit the original
28291         arguments, instead we emit those which have been converted to
28292         unsigned int expressions.
28293
28294         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
28295
28296         * codegen.cs: ditto.
28297
28298         * expression.cs (LocalVariableReference): Drop the use of the
28299         Store function that depended on the variable index.
28300
28301         * statement.cs (VariableInfo): Drop the `Idx' property from this
28302         class, as this is not taking into account the indexes for
28303         temporaries tat we generate during the execution, getting the
28304         indexes wrong.
28305
28306         * class.cs: First emit class initializers, then call the parent
28307         constructor. 
28308
28309         * expression.cs (Binary): Fix opcode emision.
28310         (UnaryMutator.EmitCode): Support checked code generation
28311
28312         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
28313         matches for events for both the Static and Instance scans,
28314         pointing to the same element.   Fix that.
28315
28316 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
28317
28318         * rootcontext.cs (ResolveTree): Always set the
28319         interface_resolve_order, because nested interfaces will be calling
28320         into us.
28321
28322         * class.cs (GetInterfaceOrClass): Track the same resolution
28323         process used by TypeManager.LookupType.  This fixes the nested
28324         type lookups in class declarations (separate path from
28325         LookupType). 
28326
28327         (TypeContainer.DefineType): Also define nested interfaces.
28328         (TypeContainer.RegisterOrder): New public function used to
28329         register the order in which child interfaces need to be closed.
28330
28331         Nested interfaces need to be closed after their parents have been
28332         created. 
28333
28334         * interface.cs (InterfaceAttr): Put all the logic for computing
28335         the interface attribute here. 
28336
28337         (DefineInterface): Register our interface order with the
28338         RootContext or with the TypeContainer depending on the case.
28339
28340 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28341
28342         * cs-parser.jay: rework foreach statement to work with the new
28343         changes to the policy on SimpleNames.
28344
28345         * report.cs: support Stacktrace on warnings as well.
28346
28347         * makefile: drop --unsafe and /unsafe from the compile.
28348
28349 2002-03-13  Ravi Pratap  <ravi@ximian.com>
28350
28351         * ecore.cs (StandardConversionExists): Modify to take an Expression
28352         as the first parameter. Ensure we do null -> reference type conversion
28353         checking.
28354
28355         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
28356         temporary Expression objects.
28357
28358 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
28359
28360         * interface.cs: workaround bug in method overloading resolution
28361         (there is already a bugzilla bug for it).
28362
28363 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28364
28365         We could also solve this problem by having a separate path for
28366         performing type lookups, instead of DoResolve, we could have a
28367         ResolveType entry point, and only participating pieces of the
28368         production (simplename, deref, array) would implement this. 
28369
28370         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
28371         signal SimpleName to only resolve type names and not attempt to
28372         resolve anything else.
28373
28374         * expression.cs (Cast): Set the flag.
28375
28376         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
28377
28378         * class.cs: Only report 108 if there is no `new' modifier.
28379
28380         * cs-parser.jay: rework foreach statement to work with the new
28381         changes to the policy on SimpleNames.
28382
28383         * report.cs: support Stacktrace on warnings as well.
28384
28385         * makefile: drop --unsafe and /unsafe from the compile.
28386
28387 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
28388
28389         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28390         lookups here, instead of doing that at parse time.  This means
28391         that our grammar will not introduce `LocalVariableReferences' as
28392         expressions at this point.  That solves the problem of code like
28393         this:
28394
28395         class X {
28396            static void Main ()
28397            { int X = 1;
28398             { X x = null }}}
28399
28400         This is only half the fix.  The full fix requires parameters to
28401         also be handled in this way.
28402
28403         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
28404         makes the use more obvious of the DeclSpace.  The
28405         ec.TypeContainer.TypeBuilder is now only used to pull the
28406         TypeBuilder for it.
28407
28408         My theory is that I can get rid of the TypeBuilder completely from
28409         the EmitContext, and have typecasts where it is used (from
28410         DeclSpace to where it matters).  
28411
28412         The only pending problem is that the code that implements Aliases
28413         is on TypeContainer, and probably should go in DeclSpace.
28414
28415         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28416         lookups here, instead of doing that at parse time.  This means
28417         that our grammar will not introduce `LocalVariableReferences' as
28418         expressions at this point.  That solves the problem of code like
28419         this:
28420
28421         class X {
28422            static void Main ()
28423            { int X = 1;
28424             { X x = null }}}
28425
28426         This is only half the fix.  The full fix requires parameters to
28427         also be handled in this way.
28428
28429         * class.cs (Property.DefineMethod): When implementing an interface
28430         method, set newslot, when implementing an abstract method, do not
28431         set the flag (before we tried never setting it, or always setting
28432         it, which is the difference).
28433         (Indexer.DefineMethod): same.
28434         (Method.DefineMethod): same.
28435
28436         * ecore.cs: Only set the status used flag if we get back a Field.
28437
28438         * attribute.cs: Temporary hack, so Paolo can keep working.
28439
28440 2002-03-08  Ravi Pratap  <ravi@ximian.com>
28441
28442         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
28443         the unmanaged type in the case we have a MarshalAs attribute.
28444
28445         (Resolve): Handle the case when we are parsing the special MarshalAs
28446         attribute [we need to store the unmanaged type to use later]
28447
28448         * typemanager.cs (marshal_as_attr_type): Built in type for the 
28449         MarshalAs Attribute.
28450
28451         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
28452         on parameters and accordingly set the marshalling info.
28453
28454 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
28455
28456         * class.cs: Optimizing slightly by removing redundant code after
28457         we switched to the `NoTypes' return value.
28458         (Property.DefineMethod): use NoTypes here too.
28459
28460         This fixes the bug I introduced in my last batch of changes.
28461
28462 2002-03-05  Ravi Pratap  <ravi@ximian.com>
28463
28464         * tree.cs (RecordEnum): Add. We now keep track of enums too.
28465
28466         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
28467         Enums since those are types too. 
28468
28469         * cs-parser.jay (enum_declaration): Record enums as we parse them.
28470
28471         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
28472         thanks to a call during the lookup process.
28473
28474 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
28475
28476         * statement.cs (Foreach): Lots of work to accomodate a particular
28477         kind of foreach statement that I had not kept in mind.  It is
28478         possible to have foreachs on classes that provide a GetEnumerator
28479         method that return objects that implement the "pattern" for using
28480         a foreach, there is no need to support GetEnumerator
28481         specifically. 
28482
28483         This is needed to compile nant.
28484
28485         * decl.cs: Only report 114 if the member is not `Finalize' and if
28486         the warning level is at least 2.
28487
28488         * class.cs: Moved the compare function from Method to
28489         MethodSignature. 
28490
28491         (MethodSignature.InheritableMemberSignatureCompare): Add new
28492         filter function that is used to extract inheritable methods from a
28493         class. 
28494
28495         (Method.Define): Use the new `inheritable_method_signature_filter'
28496         delegate
28497
28498         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
28499         command. 
28500
28501 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
28502
28503         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
28504
28505         * cs-parser.jay: Add opt_semicolon to the interface declaration.
28506
28507         * expression.cs: Pass location information to
28508         ConvertImplicitStandard. 
28509
28510         * class.cs: Added debugging code to track return values from
28511         interfaces. 
28512
28513 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
28514
28515         * expression.cs (Is.DoResolve): If either side of the `is' is an
28516         interface, do not flag the warning.
28517
28518         * ecore.cs (ImplicitReferenceConversion): We need a separate test
28519         for interfaces
28520
28521         * report.cs: Allow for --fatal to be used with --probe.
28522
28523         * typemanager.cs (NoTypes): Move the definition for the empty Type
28524         array here. 
28525
28526         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
28527         properties. 
28528         (TypeContainer.DefineProxy): New function used to proxy to parent
28529         implementations when implementing interfaces.
28530         (TypeContainer.ParentImplements): used to lookup if our parent
28531         implements a public function that is required by an interface.
28532         (TypeContainer.VerifyPendingMethods): Hook this up.
28533
28534         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
28535         `modules' and `assemblies' arraylists into arrays.  We only grow
28536         these are the very early start up of the program, so this improves
28537         the speedof LookupType (nicely measured).
28538
28539         * expression.cs (MakeByteBlob): Replaced unsafe code with
28540         BitConverter, as suggested by Paolo.
28541
28542         * cfold.cs (ConstantFold.Binary): Special case: perform constant
28543         folding of string concatenation, but if either side is a string,
28544         and the other is not, then return null, and let the runtime use
28545         the concatenation on the string plus the object (using
28546         `Object.ToString'). 
28547
28548 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
28549
28550         Constant Folding has been implemented now.
28551
28552         * expression.cs (Unary.Reduce): Do not throw an exception, catch
28553         the error instead on types that are not supported in one's
28554         complement. 
28555
28556         * constant.cs (Constant and all children): New set of functions to
28557         perform implict and explicit conversions.
28558
28559         * ecore.cs (EnumConstant): Implement the new functions to perform
28560         conversion by proxying to the child expression.
28561
28562         * codegen.cs: (ConstantCheckState): Constant evaluation has its
28563         own separate setting that can not be turned off from the command
28564         line using --unchecked or --checked and is only controlled using
28565         the checked/unchecked statements and expressions.  This setting is
28566         used by the constant folder to flag errors.
28567
28568         * expression.cs (CheckedExpr, UncheckedExpr): Set the
28569         ConstantCheckState as well.   
28570
28571         During Resolve, they also have to flag the state, because the
28572         constant folder runs completely in the Resolve phase.
28573
28574         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
28575         well.
28576
28577 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28578
28579         * cfold.cs: New file, this file contains the constant folder.
28580
28581         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
28582         argument to track whether we are using the resulting address to
28583         load or store a value and provide better error messages. 
28584
28585         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
28586         new AddressOf arguments.
28587
28588         * statement.cs (Foreach.EmitCollectionForeach): Update
28589
28590         * expression.cs (Argument.Emit): Call AddressOf with proper
28591         arguments to track usage.
28592
28593         (New.DoEmit): Call AddressOf with new arguments.
28594
28595         (Unary.Emit): Adjust AddressOf call.
28596
28597 2002-03-01  Ravi Pratap  <ravi@ximian.com>
28598
28599         * cs-parser.jay (member_access): Change the case for pre-defined types
28600         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
28601         this suggestion.
28602
28603         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
28604         a method body.
28605
28606         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
28607         essentially like methods and apply attributes like MethodImplOptions to them too.
28608
28609         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
28610         not being null.
28611
28612         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
28613         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
28614         is the DeclSpace.
28615
28616         * Update code everywhere accordingly.
28617
28618         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28619
28620         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28621
28622 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28623
28624         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28625         try performing lookups against those instead of jumping straight into using
28626         the 'using' clauses.
28627
28628         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28629
28630         (LookupType): Perform lookups in implicit parents too.
28631
28632         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28633         sequence as RootContext.LookupType. 
28634
28635         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28636         the various cases of namespace lookups into this method.
28637
28638 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28639
28640         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28641         in positional arguments)
28642
28643         * class.cs (Operator): Update the AllowedModifiers to contain
28644         extern. 
28645
28646         * cs-parser.jay: Update operator declaration to allow for the
28647         operator body to be empty.
28648
28649         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28650         values. 
28651
28652 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28653
28654         * class.cs (Method.Emit): Label parameters.
28655
28656         * driver.cs: Return 1 or 0 as the program exit code.
28657
28658 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28659
28660         * expression.cs: Special case the `null' object when trying to
28661         auto-compute the type, as anything can be explicitly converted to
28662         that. 
28663
28664         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28665         spotting this Paolo.
28666
28667         (Expression.ImplicitNumericConversion): Perform comparissions of
28668         the type using the underlying type in the case of an enumeration
28669         rather than using the enumeration type for the compare.
28670
28671         Cope with the underlying == type case, which is not possible to
28672         catch before. 
28673
28674         (Expression.ConvertNumericExplicit): Perform comparissions of
28675         the type using the underlying type in the case of an enumeration
28676         rather than using the enumeration type for the compare.
28677
28678         * driver.cs: If the user does not supply an extension, assume .exe
28679
28680         * cs-parser.jay (if_statement): Rewrote so that we can track the
28681         location for the if statement.
28682
28683         * expression.cs (Binary.ConstantFold): Only concat strings when
28684         the operation is "+", not everything ;-)
28685
28686         * statement.cs (Statement.EmitBoolExpression): Take a location
28687         argument. 
28688         (If, While, Do): Track location.
28689
28690         * expression.cs (Binary.ResolveOperator): In the object + string
28691         case, I was missing a call to ConvertImplicit
28692
28693 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28694
28695         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28696         Location arguments. Ensure we use RootContext.LookupType to do our work
28697         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28698
28699         * interface.cs (PopulateMethod): Handle the type of the parameter being
28700         null gracefully.
28701
28702         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28703         have a params method with no fixed arguments and a call is made with no
28704         arguments.
28705
28706 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28707
28708         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28709         the verbatim-string-literal
28710
28711         * support.cs (InternalParameters.ParameterModifier): handle null
28712         fixed parameters.
28713         (InternalParameters.ParameterType): ditto.
28714
28715         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28716         duplicating the name of the variable parameter.
28717         (GetParameterByName): Fix bug where we were not looking up array
28718         paramters if they were the only present (thanks Paolo!).
28719         (GetParameterInfo): We only have an empty set of types if both
28720         fixed and array are set to null.
28721         (GetParameterInfo-idx): Handle FixedParameter == null
28722
28723         * cs-parser.jay: Handle the case where there is no catch
28724         statements (missing null test).
28725
28726 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28727
28728         * driver.cs (MainDriver): Be conservative on our command line
28729         handling.
28730
28731         Catch DirectoryNotFoundException when calling GetFiles.
28732
28733         (SplitPathAndPattern): Used to split the input specification into
28734         a path and a pattern that we can feed to Directory.GetFiles.
28735
28736 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28737
28738         * statement.cs (Fixed): Implement the last case of the Fixed
28739         statement (string handling).
28740
28741         * expression.cs (StringPtr): New class used to return a char * to
28742         a string;  Used by the Fixed statement.
28743
28744         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28745
28746         * expression.cs (Binary.ResolveOperator): Remove redundant
28747         MemberLookup pn parent type.
28748         Optimize union call, we do not need a union if the types are the same.
28749         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28750         type.
28751
28752         Specialize the use of MemberLookup everywhere, instead of using
28753         the default settings. 
28754
28755         (StackAlloc): Implement stackalloc keyword.
28756
28757         * cs-parser.jay: Add rule to parse stackalloc.
28758
28759         * driver.cs: Handle /h, /help, /?
28760
28761         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28762         before we supported unsafe code.
28763
28764         * makefile: add --unsafe to the self compilation of mcs.
28765
28766 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28767
28768         * expression.cs (PointerArithmetic): New class that is used to
28769         perform pointer arithmetic.
28770         (Binary.Resolve): Handle pointer arithmetic
28771         Handle pointer comparission.
28772         (ArrayPtr): Utility expression class that is used to take the
28773         address of an array.
28774
28775         (ElementAccess): Implement array access for pointers
28776
28777         * statement.cs (Fixed): Implement fixed statement for arrays, we
28778         are missing one more case before we are done.
28779
28780         * expression.cs (Indirection): Implement EmitAssign and set the
28781         ExprClass to Variable.  This allows pointer dereferences to be
28782         treated as variables, and to have values assigned to them.
28783
28784         * ecore.cs (Expression.StoreFromPtr): New utility function to
28785         store values dereferencing.
28786
28787 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28788
28789         * expression.cs (Binary.ResolveOperator): Ensure that we are
28790         not trying to operate on a void type - this fixes the reported
28791         bug.
28792
28793         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28794         the parent implementation is sealed.
28795
28796         * ../errors/cs0239.cs : Add.
28797
28798         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28799
28800         * typemanager.cs (unverifiable_code_type): Corresponds to 
28801         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28802         which have unsafe code in them.
28803
28804         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28805         unsafe context.
28806
28807 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28808
28809         * cs-tokenizer.cs: Add support for @"litreal strings"
28810
28811         Make tokenizer accept pre-processor directives
28812         on any column (remove the old C-like limitation). 
28813
28814         * rootcontext.cs (EmitCode): Emit any global attributes.
28815         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28816
28817         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28818
28819         * cs-parser.jay: Add support for global attributes.  
28820
28821 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28822
28823         * expression.cs (Indirection): New helper class.  Unary will
28824         create Indirection classes to be able to implement the
28825         IMemoryLocation interface on it.
28826
28827 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28828
28829         * cs-parser.jay (fixed_statement): reference the right statement.
28830
28831         * statement.cs (Fixed.Emit): Finish implementing the fixed
28832         statement for the &x case.
28833
28834 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28835
28836         * class.cs (Property.Define, Method.Define): Remove newslot when
28837         `implementing'.  
28838
28839         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28840         wrong.  NewSlot should only be used if the `new' keyword is present.
28841
28842         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28843         locating our system dir.  Sorry about this.
28844
28845 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28846
28847         * driver.cs (GetSystemDir): Compute correctly the location of our
28848         system assemblies.  I was using the compiler directory instead of
28849         the library directory.
28850
28851 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28852
28853         * expression.cs (BetterFunction): Put back in what Miguel commented out
28854         since it is the correct fix. The problem is elsewhere ;-)
28855
28856         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28857         parameters of the parms method are themselves compatible or not !
28858
28859         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28860         to check that a class implements an interface before saying that an implicit
28861         conversion was allowed. Use ImplementsInterface to do the checking.
28862
28863 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28864
28865         * class.cs (Method.Define): Track whether we are an explicit
28866         implementation or not.  And only call DefineMethodOverride if we
28867         are an explicit implementation.
28868
28869         (Property.DefineMethod): Ditto.
28870
28871 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28872
28873         * expression.cs (BetterFunction): Catch hideous bug which was
28874          preventing us from detecting ambiguous calls due to implicit casts i.e
28875         cs0121.
28876
28877 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28878
28879         * support.cs (Pair): Remove un-needed method.  I figured why I was
28880         getting the error in cs-parser.jay, the variable in a foreach loop
28881         is readonly, and the compiler does not really treat this as a variable.
28882
28883         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28884         instead of EQUALS in grammar.  
28885
28886         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28887
28888         * expression.cs (Unary.DoResolve): Check whether the argument is
28889         managed or not.
28890
28891 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28892
28893         * support.cs: Api for Pair to set a value.  Despite the fact that
28894         the variables are public the MS C# compiler refuses to compile
28895         code that accesses the field if the variable is part of a foreach
28896         statement. 
28897
28898         * statement.cs (Fixed): Begin implementation of the fixed
28899         statement.
28900
28901         (Block.AddVariable): Return the VariableInfo on success and null
28902         on failure instead of true/false. 
28903
28904         * cs-parser.jay (foreach): Catch errors on variables already
28905         defined (we were ignoring this value before) and properly unwind
28906         the block hierarchy
28907
28908         (fixed_statement): grammar for the fixed statement.
28909
28910 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28911
28912         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28913         pointer types to be incretemented.
28914
28915         (SizeOf): Implement.
28916
28917         * cs-parser.jay (pointer_member_access): Implement
28918         expr->IDENTIFIER production.
28919
28920         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28921         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28922         on safe contexts.
28923
28924         (Unary): Implement indirection.
28925
28926         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28927         use in non-unsafe context).
28928
28929         (SimpleName.DoResolve): Check for pointers in field access on safe
28930         contexts. 
28931
28932         (Expression.LoadFromPtr): Factor the load-indirect code in this
28933         function.  This was duplicated in UnboxCast and ParameterReference
28934
28935 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28936
28937         * expression.cs (ComposedCast): report an error if a pointer cast
28938         is used in a safe region.
28939
28940         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28941         pointer type casts in unsafe context.
28942
28943         * codegen.cs (EmitContext): Set up IsUnsafe.
28944
28945         * cs-parser.jay (non_expression_type): Add productions for pointer
28946         casts. 
28947
28948         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28949         code.  We should not use force into static mode if the method is
28950         not virtual.  Fixes bug in MIS
28951
28952         * statement.cs (Do.Emit, While.Emit, For.Emit,
28953         Statement.EmitBoolExpression): Add support to Do and While to
28954         propagate infinite loop as `I do return' semantics.
28955
28956         Improve the For case to also test for boolean constants.
28957
28958         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28959         to the list of attributes we can add.
28960
28961         Remove `EmitContext' argument.
28962
28963         * class.cs (Method.Define): Apply parameter attributes.
28964         (Constructor.Define): Apply parameter attributes.
28965         (MethodCore.LabelParameters): Move here the core of labeling
28966         parameters. 
28967
28968         * support.cs (ReflectionParameters.ParameterModifier,
28969         InternalParameters.ParameterModifier): Use IsByRef on the type and
28970         only return the OUT bit for these parameters instead of in/out/ref
28971         flags.
28972
28973         This is because I miss-understood things.  The ParameterInfo.IsIn
28974         and IsOut represent whether the parameter has the [In] and [Out]
28975         attributes set.  
28976
28977 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28978
28979         * ecore.cs (FieldExpr.Emit): Release temporaries.
28980
28981         * assign.cs (LocalTemporary.Release): new function.
28982
28983         * codegen.cs (EmitContext.GetTemporaryStorage,
28984         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28985         temporary storage.  Now we can "put back" localbuilders when we
28986         are done with them
28987
28988 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28989
28990         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28991         need to make a copy of the variable to generate verifiable code.
28992
28993 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28994
28995         * driver.cs: Compute dynamically the system directory.
28996
28997         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28998         Slower, but more generally useful.  Used by the abstract
28999         registering implementation. 
29000
29001         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
29002         the rules for the special rule on Type/instances.  First check if
29003         we have the same name, and if so, try that special static path
29004         rather than the instance path.
29005
29006 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
29007
29008         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
29009         for, while and if.
29010
29011         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
29012         Enum, ValueType, Delegate or Array for non-corlib compiles.
29013
29014         * cs-tokenizer.cs: Catch long identifiers (645)
29015
29016         * typemanager.cs (IndexerPropetyName): Ravi never tested this
29017         piece of code.
29018
29019         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
29020         fix, we were returning too early, so we were not registering
29021         pending methods from abstract classes.
29022
29023         Do not register pending methods if the class is abstract.
29024
29025         * expression.cs (Conditional.DoResolve): Report circular implicit
29026         conversions when we neecd to compute it for conditional
29027         expressions. 
29028
29029         (Is.DoResolve): If the expression is always of the provided type,
29030         flag warning 183.  If the expression can not ever be of the
29031         provided type flag warning 184.
29032
29033         * class.cs: Catch 169 as well.
29034
29035         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
29036         read. 
29037
29038 2002-01-18  Nick Drochak  <ndrochak@gol.com>
29039
29040         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
29041
29042 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
29043
29044         * interface.cs: (PopulateMethod): Check for pointers being defined
29045         only if the unsafe context is active.
29046         (PopulateProperty): ditto.
29047         (PopulateIndexer): ditto.
29048
29049         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
29050         specified.  If pointers are present, make sure that they are
29051         present in an unsafe context.
29052         (Constructor, Constructor.Define): ditto.
29053         (Field, Field.Define): ditto.
29054         (Property, Property.Define): ditto.
29055         (Event, Event.Define): ditto.
29056
29057         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
29058         hashtable if there are classes or structs defined.
29059
29060         * expression.cs (LocalVariableReference.DoResolve): Simplify this
29061         code, as the constant resolution moved.
29062
29063         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
29064         the metadata, so we can flag error 133. 
29065
29066         * decl.cs (MemberCore.UnsafeOK): New function to test that a
29067         pointer is being declared in an unsafe context.
29068
29069 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
29070
29071         * modifiers.cs (Modifiers.Check): Require a Location argument.
29072         Report error 227 for Unsafe use.
29073
29074         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
29075
29076         * statement.cs (For.Emit): If the test is null, then report that
29077         we do `return', as we wont reach anything afterwards.
29078
29079         (Switch.SwitchGoverningType): Track the expression that matched
29080         the conversion.
29081
29082         * driver.cs: Allow negative numbers as an error code to flag.
29083
29084         * cs-parser.jay: Handle 1551.
29085
29086         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
29087
29088 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
29089
29090         * cs-parser.jay: Report 1518 (type declaration can only contain
29091         class, struct, interface, enum or delegate)
29092
29093         (switch_label): Report 1523 (keywords `case' or `default' must
29094         preced code)
29095
29096         (opt_switch_sections): Report 1522 (empty switch)
29097
29098         * driver.cs: Report 1515 (response file specified multiple times)
29099         Report 1516 (Source file specified multiple times).
29100
29101         * expression.cs (Argument.Resolve): Signal 1510
29102
29103         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
29104         access not allowed in static code)
29105
29106 2002-01-11  Ravi Pratap  <ravi@ximian.com>
29107
29108         * typemanager.cs (IsPointerType): Utility method which we are going
29109         to need a lot.
29110
29111         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
29112         the object type, so we take care of that.
29113
29114         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
29115
29116         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
29117         added to non-params parameters :-)
29118
29119         * typemanager.cs (CSharpName): Include 'void' type too. 
29120
29121         (void_ptr_type): Include in the set of core types.
29122
29123         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
29124         duplicating code.
29125
29126         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
29127         an unsafe context.
29128
29129         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
29130         completely forgotten about it.
29131
29132 2002-01-10  Ravi Pratap  <ravi@ximian.com>
29133
29134         * cs-parser.jay (pointer_type): Add. This begins our implementation
29135         of parsing rules for unsafe code.
29136
29137         (unsafe_statement): Implement.
29138
29139         (embedded_statement): Modify to include the above.
29140
29141         * statement.cs (Unsafe): Implement new class for unsafe blocks.
29142
29143         * codegen.cs (EmitContext.InUnsafe): Add. This determines
29144         if the current context is an unsafe one.
29145
29146         * cs-parser.jay (local_variable_pointer_type): Since local variable types
29147         are handled differently, we need separate rules for them.
29148
29149         (local_variable_declaration): Update to use local_variable_pointer_type
29150         to allow variable declarations of unmanaged pointer types.
29151
29152         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
29153         in unsafe contexts.
29154
29155         * ../errors/cs0214.cs : Add.
29156
29157 2002-01-16  Nick Drochak  <ndrochak@gol.com>
29158
29159         * makefile: remove 'response' file when cleaning.
29160
29161 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
29162
29163         * cs-parser.jay: Report 1524.
29164
29165 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
29166
29167         * typemanager.cs (RegisterMethod): drop checking if we have
29168         registered this from here
29169
29170 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
29171
29172         * class.cs (Method.EmitDestructor): Implement calling our base
29173         destructor. 
29174
29175         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
29176         value of InFinally.
29177
29178         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
29179         this routine and will wrap the call in a try/catch block.  Deal
29180         with the case.
29181
29182 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
29183
29184         * ecore.cs (Expression.MemberLookup): instead of taking a
29185         parameter `same_type' that was used to tell whether we could
29186         access private members we compute our containing type from the
29187         EmitContext.
29188
29189         (FieldExpr): Added partial support for volatile fields.  This does
29190         not work for volatile fields exposed from assemblies, as I can not
29191         figure out how to extract the modreq from it.
29192
29193         Updated all the source files to use this.
29194
29195         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
29196         because it is referenced by MemberLookup very often. 
29197
29198 2002-01-09  Ravi Pratap  <ravi@ximian.com>
29199
29200         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
29201         TypeBuilder.GetCustomAttributes to retrieve what we need.
29202
29203         Get rid of redundant default_member_attr_type as this is the same as
29204         default_member_type which already exists.
29205
29206         * interface.cs, attribute.cs : Update accordingly.
29207
29208 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
29209
29210         * typemanager.cs: Enable IndexerPropertyName again.  It does not
29211         work for TYpeBuilders though.  Ravi, can you please fix this?
29212
29213         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
29214
29215         * expression.cs (Argument.Emit): Handle the case of ref objects
29216         being passed to ref functions;  
29217
29218         (ParameterReference.EmitLoad): Loads the content of the pointer
29219         without dereferencing.
29220
29221 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
29222
29223         * cs-tokenizer.cs: Implemented the pre-processing expressions.
29224
29225 2002-01-08  Ravi Pratap  <ravi@ximian.com>
29226
29227         * class.cs (Indexer.DefineMethod): Incorporate the interface
29228         type in the name of the method if we are doing explicit interface
29229         implementation.
29230
29231         * expression.cs (ConversionExists): Remove as it is completely obsolete.
29232
29233         (BetterConversion): Fix extremely trivial bug where we were referring to
29234         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
29235         again !
29236
29237         * ../errors/bug16.cs : Add although we have fixed it.
29238
29239 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
29240
29241         * expression.cs (BaseIndexer): Begin implementation.
29242
29243         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
29244
29245         * cs-parser.jay (indexer_declarator): Use qualified_identifier
29246         production directly to remove a shift/reduce, and implement
29247         explicit interface implementation.
29248
29249         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
29250         after a floating point suffix.
29251
29252         * expression.cs (DoNumericPromotions): Improved the conversion for
29253         uint/uint.  If we have a constant, we avoid doing a typecast to a
29254         larger type.
29255
29256         * class.cs (Indexer): Implement explicit interface implementation
29257         for indexers.
29258
29259 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
29260
29261         * class.cs: make the default instance constructor public and hidebysig.
29262
29263 2001-01-03  Ravi Pratap  <ravi@ximian.com>
29264
29265         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
29266         so we can call it from elsewhere.
29267
29268         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
29269         we emit it internally if the class has a defined indexer; otherwise the user
29270         emits it by decorating the class definition with the DefaultMemberAttribute.
29271
29272         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
29273         attribute is not used on a type which defines an indexer.
29274
29275         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
29276         character when we skip whitespace.
29277
29278         * ../errors/cs0646.cs : Add.
29279
29280 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
29281
29282         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
29283         again. 
29284
29285         * makefile: Add practical target `mcs3.exe' which builds the third
29286         generation compiler. 
29287
29288         * expression.cs (New): Fix structures constructor calling.
29289
29290         * class.cs (Property, Method, Indexer): Emit Final flag on the
29291         method if we are an interface implementation and we are not
29292         abstract. 
29293
29294         * ecore.cs (PropertyExpr): New public field `IsBase', tells
29295         whether this property is referencing a `base' method.
29296
29297         * expression.cs (Invocation.EmitCall): take an extra argument:
29298         is_base, this is used to determine whether the `call' or
29299         `callvirt' opcode should be used.
29300
29301
29302         * delegate.cs: update EmitCall.
29303
29304         * class.cs (Method.Define): Set NewSlot for the cases where we are
29305         not implementing an interface method.
29306
29307         (Property.Define): ditto.
29308
29309 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
29310
29311         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
29312         'r'.  Allows mcs to parse itself fully.
29313
29314 2002-01-02  Ravi Pratap  <ravi@ximian.com>
29315
29316         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
29317         of the number of initializers that require the InitializeArray method.
29318
29319         (CheckIndices): Store the Expression in all cases - not the plain value. Also
29320         update the above field where necessary.
29321
29322         (MakeByteBlob): Update accordingly.
29323
29324         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
29325         greater than 2.
29326
29327         (EmitDynamicInitializers): Update in accordance with the new optimization.
29328
29329         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
29330         same OpCode applies.
29331
29332         * cs-parser.jay : Fix some glaring errors I introduced.
29333
29334 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
29335
29336         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
29337         so that we can check for name clashes there too.
29338
29339         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
29340         for interface indexers.
29341
29342         * interfaces.cs (Define): Emit the default member attribute.
29343
29344         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
29345         variable was being referred to while setting the value ;-)
29346
29347 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
29348
29349         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
29350         byte-by-byte information when we know the data is zero.
29351
29352         Make the block always a multiple of 4, because
29353         DefineInitializedData has a bug.
29354
29355         * assign.cs: Fix, we should assign from the temporary, not from
29356         the source. 
29357
29358         * expression.cs (MakeByteBlob): Fix my incorrect code.
29359
29360 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
29361
29362         * typemanager.cs (EnumToUnderlying): This function is used to get
29363         the underlying type from an enumeration, because it does not
29364         always work. 
29365
29366         * constant.cs: Use the I4_S form for values between -128 and 127.
29367
29368         * statement.cs (Block.LookupLabel): Looks up a label.
29369         (Block): Drop support for labeled blocks.
29370
29371         (LabeledStatement): New kind of statement that represents a label
29372         only.
29373
29374         (Goto): Finally implement this bad boy.
29375
29376         * cs-parser.jay: Update to reflect new mechanism to implement
29377         labels.
29378
29379 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
29380
29381         * codegen.cs (EmitContext.This): a codegen property that keeps the
29382         a single instance of this instead of creating many different this
29383         instances. 
29384
29385         * delegate.cs (Delegate.DoResolve): Update to use the property;
29386
29387         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
29388
29389         * expression.cs (BaseAccess.DoResolve): Ditto.
29390
29391 2001-12-29  Ravi Pratap  <ravi@ximian.com>
29392
29393         * typemanager.cs (methodimpl_attr_type): Add to hold the type
29394         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
29395
29396         (InitCoreTypes): Update accordingly.
29397
29398         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
29399         so we can quickly store the state.
29400
29401         (ApplyAttributes): Set the correct implementation flags
29402         for InternalCall methods.
29403
29404 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
29405
29406         * expression.cs (EmitCall): if a method is not virtual, then do
29407         not use callvirt on it.
29408
29409         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
29410         user defined stuff) requires the use of stobj, which takes an
29411         address on the stack instead of an array and an index.  So emit
29412         the Ldelema operation for it.
29413
29414         (EmitStoreOpcode): Use stobj for valuetypes.
29415
29416         (UnaryMutator.EmitCode): Use the right 1 value depending on
29417         whether we are dealing with int64/uint64, float or doubles.
29418
29419         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
29420         constructors that I implemented last night.
29421
29422         (Constructor.IsDefault): Fix to work properly for static
29423         constructors.
29424
29425         * cs-parser.jay (CheckDef): report method signature errors.
29426         Update error number 103 to be 132.
29427
29428         * decl.cs: New AdditionResult enumeration value: MethodExists.
29429         Although we do this check for methods later on in the semantic
29430         analysis, catching repeated default constructors is so easy that
29431         we catch these here. 
29432
29433         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
29434         promotions code.
29435
29436         (ParameterReference.EmitAssign, Emit): handle
29437         bools as bytes.
29438
29439         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
29440         (ArrayAccess.EmitStoreOpcode): ditto.
29441
29442         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
29443
29444         * expression.cs (MakeByteBlob): Complete all the missing types
29445         (uint, short, ushort, byte, sbyte)
29446
29447         * class.cs: Only init instance field initializers on instance
29448         constructors. 
29449
29450         Rename `constructors' to instance_constructors. 
29451
29452         (TypeContainer.AddConstructor): Only add constructors to the list
29453         if it is not static.
29454
29455         Make sure that we handle default_static_constructor independently
29456         everywhere where we handle instance_constructors
29457
29458 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
29459
29460         * class.cs: Do not lookup or create a base initializer for a
29461         static constructor.
29462
29463         (ConstructorInitializer.Resolve): use the proper type to lookup
29464         for constructors.
29465
29466         * cs-parser.jay: Report error 1585 (modifiers between type and name).
29467
29468         * enum.cs, interface.cs: Remove CloseType, this is taken care by
29469         in DeclSpace. 
29470
29471         * decl.cs: CloseType is now an virtual method, the default
29472         implementation just closes this type.
29473
29474 2001-12-28  Ravi Pratap  <ravi@ximian.com>
29475
29476         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
29477         to PreserveSig by default. Also emit HideBySig on such methods.
29478
29479         Basically, set the defaults to standard values.
29480
29481         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
29482         argument, if candidate is better, it can't be worse than the best !
29483
29484         (Invocation): Re-write bits to differentiate between methods being
29485         applicable in their expanded form and their normal form - for params
29486         methods of course.
29487
29488         Get rid of use_standard everywhere as only standard conversions are allowed
29489         in overload resolution. 
29490
29491         More spec conformance.
29492
29493 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29494
29495         * driver.cs: Add --timestamp, to see where the compiler spends
29496         most of its time.
29497
29498         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
29499         `this' in static code.
29500
29501         (SimpleName.DoResolve): Implement in terms of a helper function
29502         that allows static-references to be passed upstream to
29503         MemberAccess.
29504
29505         (Expression.ResolveWithSimpleName): Resolve specially simple
29506         names when called by MemberAccess to implement the special
29507         semantics. 
29508
29509         (Expression.ImplicitReferenceConversion): Handle conversions from
29510         Null to reference types before others, as Null's type is
29511         System.Object. 
29512
29513         * expression.cs (Invocation.EmitCall): Handle the special case of
29514         calling methods declared on a reference type from a ValueType
29515         (Base classes System.Object and System.Enum)
29516
29517         (MemberAccess.Resolve): Only perform lookups on Enumerations if
29518         the left hand side is a TypeExpr, not on every enumeration. 
29519
29520         (Binary.Resolve): If types are reference types, then do a cast to
29521         object on operators != and == of both arguments.
29522
29523         * typemanager.cs (FindMembers): Extract instance and static
29524         members if requested.
29525
29526         * interface.cs (PopulateProperty): Use void_type instead of null
29527         as the return type for the setter method.
29528
29529         (PopulateIndexer): ditto.
29530
29531 2001-12-27  Ravi Pratap  <ravi@ximian.com>
29532
29533         * support.cs (ReflectionParameters): Fix minor bug where we
29534         were examining the wrong parameter for the ParamArray attribute.
29535
29536         Cope with requests for the type of the parameter at position
29537         greater than the params parameter's. We now return the element
29538         type of the params array as that makes more sense.
29539
29540         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
29541         accordingly as we no longer have to extract the element type
29542         ourselves.
29543
29544         (Invocation.OverloadResolve): Update.
29545
29546 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29547
29548         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
29549         against IEnumerator, test whether the return value is a descendant
29550         of the IEnumerator interface.
29551
29552         * class.cs (Indexer.Define): Use an auxiliary method to implement
29553         the other bits of the method definition.  Begin support for
29554         explicit interface implementation.
29555
29556         (Property.DefineMethod): Use TypeManager.void_type instead of null
29557         for an empty return value.
29558
29559 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
29560
29561         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
29562         dealing with a FieldExpr which is composed of a FieldBuilder, in
29563         the code path we did extract the constant, but we should have
29564         obtained the underlying value to be able to cast it (otherwise we
29565         end up in an infinite loop, this is what Ravi was running into).
29566
29567         (ArrayCreation.UpdateIndices): Arrays might be empty.
29568
29569         (MemberAccess.ResolveMemberAccess): Add support for section
29570         14.5.4.1 that deals with the special case of E.I when E is a type
29571         and something else, that I can be a reference to a static member.
29572
29573         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
29574         handle a particular array type to create byte blobs, it is just
29575         something we dont generate byteblobs for.
29576
29577         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
29578         arguments. 
29579
29580         * location.cs (Push): remove the key from the hashtable that we
29581         are about to add.   This happens for empty files.
29582
29583         * driver.cs: Dispose files after we have parsed them.
29584
29585         (tokenize): new function that only runs the tokenizer on its
29586         input, for speed testing.
29587
29588 2001-12-26  Ravi Pratap  <ravi@ximian.com>
29589
29590         * class.cs (Event.Define): Define the private field only if there
29591         are no accessors defined.
29592
29593         * expression.cs (ResolveMemberAccess): If there is no associated
29594         field with the event, that means we have an event defined with its
29595         own accessors and we should flag error cs0070 since transforming
29596         ourselves into a field is not valid in that case.
29597
29598         * ecore.cs (SimpleName.DoResolve): Same as above.
29599
29600         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
29601         and charset to sane values.
29602
29603 2001-12-25  Ravi Pratap  <ravi@ximian.com>
29604
29605         * assign.cs (DoResolve): Perform check on events only if they 
29606         are being accessed outside the declaring type.
29607
29608         * cs-parser.jay (event_declarations): Update rules to correctly
29609         set the type of the implicit parameter etc.
29610
29611         (add_accessor, remove_accessor): Set current local parameters.
29612
29613         * expression.cs (Binary): For delegate addition and subtraction,
29614         cast the return value from the method into the appropriate delegate
29615         type.
29616
29617 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29618
29619         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29620         of these as the workaround is unnecessary.
29621
29622         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29623         delegate data - none of that is needed at all.
29624
29625         Re-write bits to extract the instance expression and the delegate method
29626         correctly.
29627
29628         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29629         on delegates too.
29630
29631         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29632         of attaching attributes instead of duplicating code everywhere.
29633
29634         * everywhere : Update code to do attribute emission using the above method.
29635
29636 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29637
29638         * expression.cs (IsParamsMethodApplicable): if there are not
29639         parameters, return immediately.
29640
29641         * ecore.cs: The 0 literal can be implicity converted to an enum
29642         type. 
29643
29644         (SimpleName.DoResolve): First lookup the type, then lookup the
29645         members. 
29646
29647         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29648         want to get its address.  If the InstanceExpression is not
29649         addressable, store the result in a temporary variable, then get
29650         the address of it.
29651
29652         * codegen.cs: Only display 219 errors on warning level or above. 
29653
29654         * expression.cs (ArrayAccess): Make it implement the
29655         IMemoryLocation interface.
29656
29657         (Binary.DoResolve): handle the operator == (object a, object b)
29658         and operator != (object a, object b) without incurring into a
29659         BoxedCast (because 5 != o should never be performed).
29660
29661         Handle binary enumerator operators.
29662
29663         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29664         value type, otherwise use Ldelem_ref.
29665
29666         Use precomputed names;
29667
29668         (AddressOf): Implement address of
29669
29670         * cs-parser.jay (labeled_statement): Fix recursive block
29671         addition by reworking the production.
29672
29673         * expression.cs (New.DoEmit): New has a special case:
29674                 
29675                  If we are dealing with a ValueType, we have a few
29676                  situations to deal with:
29677                 
29678                     * The target of New is a ValueType variable, that is
29679                       easy, we just pass this as the variable reference
29680                 
29681                     * The target of New is being passed as an argument,
29682                       to a boxing operation or a function that takes a
29683                       ValueType.
29684                 
29685                       In this case, we need to create a temporary variable
29686                       that is the argument of New.
29687
29688
29689 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29690
29691         * rootcontext.cs (LookupType): Check that current_type is not null before
29692         going about looking at nested types.
29693
29694         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29695         not implement the IAssignMethod interface any more.
29696
29697         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29698         where we tranform them into FieldExprs if they are being resolved from within
29699         the declaring type.
29700
29701         * ecore.cs (SimpleName.DoResolve): Do the same here.
29702
29703         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29704
29705         * ../errors/bug10.cs : Add.
29706
29707         * ../errors/cs0070.cs : Add.
29708
29709         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29710
29711         * assign.cs : Get rid of EventIsLocal everywhere.
29712
29713 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29714
29715         * ecore.cs (ConvertIntLiteral): finished the implementation.
29716
29717         * statement.cs (SwitchLabel): Convert the value we are using as a
29718         key before looking up the table.
29719
29720 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29721
29722         * codegen.cs (EmitTopBlock): Require a Location argument now.
29723
29724         * cs-parser.jay (constructor_declarator): We need to setup
29725         current_local_parameters before we parse the
29726         opt_constructor_initializer, to allow the variables to be bound
29727         to the constructor arguments.
29728
29729         * rootcontext.cs (LookupType): First lookup nested classes in our
29730         class and our parents before we go looking outside our class.
29731
29732         * expression.cs (ConstantFold): Extract/debox the values at the
29733         beginnning. 
29734
29735         * rootcontext.cs (EmitCode): Resolve the constants first before we
29736         resolve the types.  This is not really needed, but it helps debugging.
29737
29738         * statement.cs: report location.
29739
29740         * cs-parser.jay: pass location to throw statement.
29741
29742         * driver.cs: Small bug fix.
29743
29744         * report.cs: Updated format to be 4-zero filled digits.
29745
29746 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29747
29748         * expression.cs (CheckIndices): Fix minor bug where the wrong
29749         variable was being referred to ;-)
29750
29751         (DoEmit): Do not call EmitStaticInitializers when the 
29752         underlying type is System.Object.
29753
29754 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29755
29756         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29757         and do the usual workaround for SRE.
29758
29759         * class.cs (MyEventBuilder.EventType): New member to get at the type
29760         of the event, quickly.
29761
29762         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29763
29764         * assign.cs (Assign.DoResolve): Handle the case when the target
29765         is an EventExpr and perform the necessary checks.
29766
29767         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29768         interface.
29769
29770         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29771
29772         (EventExpr): Set the type in the constructor itself since we 
29773         are meant to be born fully resolved.
29774
29775         (EventExpr.Define): Revert code I wrote earlier.
29776                 
29777         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29778         instance expression is null. The instance expression is a This in that case
29779         or a null, depending on whether it is a static method or not.
29780
29781         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29782         refers to more than one method.
29783
29784         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29785         and accordingly flag errors.
29786
29787 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29788
29789         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29790
29791 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29792
29793         * location.cs (ToString): Provide useful rutine.
29794
29795 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29796
29797         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29798         objects, return the actual integral boxed.
29799
29800         * statement.cs (SwitchLabel): define an ILLabel for each
29801         SwitchLabel. 
29802
29803         (Switch.CheckSwitch): If the value is a Literal, extract
29804         the underlying literal.
29805
29806         Also in the unused hashtable we had, add the SwitchLabel so we can
29807         quickly look this value up.
29808
29809         * constant.cs: Implement a bunch of new constants.  Rewrite
29810         Literal based on this.  Made changes everywhere to adapt to this.
29811
29812         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29813         dereferencing array only once, and also copes with enumrations.
29814
29815         bytes are two bytes wide, not one.
29816
29817         (Cast): Perform constant conversions.
29818
29819         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29820         wrappers to the literals here.
29821
29822         * expression.cs (DoNumericPromotions): long literals can converted
29823         to ulong implicity (this is taken care of elsewhere, but I was
29824         missing this spot).
29825
29826         * ecore.cs (Expression.Literalize): Make the return type Literal,
29827         to improve type checking.
29828
29829         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29830
29831 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29832
29833         * literal.cs: Revert code from ravi that checked the bounds.  The
29834         bounds are sane by the definition of the type itself. 
29835
29836         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29837         need to actually look up in our parent hierarchy for interfaces
29838         implemented. 
29839
29840         * const.cs: Use the underlying type for enumerations
29841
29842         * delegate.cs: Compute the basename for the delegate creation,
29843         that should fix the delegate test case, and restore the correct
29844         Type Lookup semantics in rootcontext
29845
29846         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29847         referencing a nested type with the Reflection API is using the "+"
29848         sign. 
29849
29850         * cs-parser.jay: Do not require EOF token at the end.
29851
29852 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29853
29854         * rootcontext.cs (LookupType): Concatenate type names with
29855         a '.' instead of a '+' The test suite passes again.
29856
29857         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29858         field of the enumeration.
29859
29860         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29861         the case when the member is an EventExpr.
29862
29863         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29864         static has an associated instance expression.
29865
29866         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29867
29868         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29869
29870         * class.cs (Event.Define): Register event and perform appropriate checks
29871         for error #111.
29872
29873         We define the Add and Remove methods even if the use provides none because
29874         in that case, we provide default implementations ourselves.
29875
29876         Define a private field of the type of the event. This is done by the CSC compiler
29877         and we should be doing it too ;-)
29878
29879         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29880         More methods we use in code we generate.
29881
29882         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29883         is important.
29884
29885         (InitCoreTypes): Update accordingly for the above.
29886
29887         * class.cs (Event.Emit): Generate code for default accessors that we provide
29888
29889         (EmitDefaultMethod): Do the job in the above.
29890
29891         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29892         appropriate place.
29893
29894 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29895
29896         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29897         builders even if we were missing one.
29898
29899         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29900         pass the Basename as our class name instead of the Name.  The
29901         basename will be correctly composed for us.
29902
29903         * parameter.cs (Paramters): Now takes a Location argument.
29904
29905         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29906         make all the code call directly LookupType in RootContext and take
29907         this chance to pass the Location information everywhere.
29908
29909         * Everywhere: pass Location information.
29910
29911 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29912
29913         * class.cs (Constructor.Define): Updated way of detecting the
29914         length of the parameters.
29915
29916         (TypeContainer.DefineType): Use basename as the type name for
29917         nested types.
29918
29919         (TypeContainer.Define): Do not recursively define types here, as
29920         definition is taken care in order by the RootContext.
29921
29922         * tree.cs: Keep track of namespaces in a per-file basis.
29923
29924         * parameter.cs (Parameter.ComputeSignature): Update to use
29925         DeclSpace. 
29926
29927         (Parameters.GetSignature): ditto.
29928
29929         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29930         instead of a TypeContainer.
29931
29932         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29933         resolve names.  Because we need to be resolve in our context, not
29934         our parents.
29935
29936         * driver.cs: Implement response files.
29937
29938         * class.cs (TypeContainer.DefineType): If we are defined, do not
29939         redefine ourselves.
29940
29941         (Event.Emit): Emit the code for add/remove handlers.
29942         (Event.Define): Save the MethodBuilders for add/remove.
29943
29944         * typemanager.cs: Use pair here too.
29945
29946         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29947         DictionaryEntry requires the first argument to be non-null.  
29948
29949         (enum_declaration): Compute full name for registering the
29950         enumeration.
29951
29952         (delegate_declaration): Instead of using
29953         formal_parameter_list, use opt_formal_parameter_list as the list
29954         can be empty.
29955
29956         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29957         (EventParsing): New property that controls whether `add' and
29958         `remove' are returned as tokens or identifiers (for events);
29959
29960 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29961
29962         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29963         use MyEventBuilder only and let it wrap the real builder for us.
29964
29965         (MyEventBuilder): Revamp constructor etc.
29966
29967         Implement all operations that we perform on EventBuilder in precisely the same
29968         way here too.
29969
29970         (FindMembers): Update to use the EventBuilder member.
29971
29972         (Event.Emit): Update accordingly.
29973
29974 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29975
29976         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29977         by calling the appropriate methods.
29978
29979         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29980         useful.
29981
29982         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29983
29984 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29985
29986         * delegate.cs (Delegate.Populate): Check that the return type
29987         and various parameters types are indeed accessible.
29988
29989         * class.cs (Constructor.Define): Same here.
29990
29991         (Field.Define): Ditto.
29992
29993         (Event.Define): Ditto.
29994
29995         (Operator.Define): Check that the underlying Method defined itself
29996         correctly - so it's MethodBuilder should not be null.
29997
29998         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29999         expression happens to be null.
30000
30001         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
30002         members but as of now we don't seem to be able to do anything really useful with it.
30003
30004         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
30005         not the EventBuilder.
30006
30007 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
30008
30009         * cs-tokenizer.cs: Add support for defines.
30010         Add support for #if, #elif, #else, #endif
30011
30012         (eval_var): evaluates a variable.
30013         (eval): stubbed for evaluating functions.
30014
30015         * cs-parser.jay: Pass the defines information
30016
30017         * driver.cs: Add --define command line option.
30018
30019         * decl.cs: Move MemberCore here.
30020
30021         Make it the base class for DeclSpace.  This allows us to catch and
30022         report 108 and 109 for everything now.
30023
30024         * class.cs (TypeContainer.Define): Extract all the members
30025         before populating and emit the warning 108 (new keyword required
30026         to override) instead of having each member implement this.
30027
30028         (MemberCore.Define): New abstract method, we will be using this in
30029         the warning reporting engine in Populate.
30030
30031         (Operator.Define): Adjust to new MemberCore protocol. 
30032
30033         * const.cs (Const): This does not derive from Expression, it is a
30034         temporary object we use to create fields, it is a MemberCore. 
30035
30036         * class.cs (Method.Define): Allow the entry point to be in a
30037         specific class.
30038
30039         * driver.cs: Rewrite the argument handler to clean it up a bit.
30040
30041         * rootcontext.cs: Made it just an auxiliary namespace feature by
30042         making everything static.
30043
30044         * driver.cs: Adapt code to use RootContext type name instead of
30045         instance variable.
30046
30047         * delegate.cs: Remove RootContext argument.
30048
30049         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
30050         argument. 
30051
30052         * class.cs (Event.Define): The lookup can fail.
30053
30054         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
30055
30056         * expression.cs: Resolve the this instance before invoking the code.
30057
30058 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
30059
30060         * cs-parser.jay: Add a production in element_access that allows
30061         the thing to become a "type" reference.  This way we can parse
30062         things like "(string [])" as a type.
30063
30064         Note that this still does not handle the more complex rules of
30065         casts. 
30066
30067
30068         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
30069
30070         * ecore.cs: (CopyNewMethods): new utility function used to
30071         assemble the list of methods from running FindMembers.
30072
30073         (MemberLookup): Rework FindMembers so that 
30074
30075 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
30076
30077         * class.cs (TypeContainer): Remove Delegates who fail to be
30078         defined.
30079
30080         * delegate.cs (Populate): Verify that we dont get null return
30081         values.   TODO: Check for AsAccessible.
30082
30083         * cs-parser.jay: Use basename to emit error 574 (destructor should
30084         have the same name as container class), not the full name.
30085
30086         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
30087         possible representation.  
30088
30089         Also implements integer type suffixes U and L.
30090
30091 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
30092
30093         * expression.cs (ArrayCreation.DoResolve): We need to do the
30094         argument resolution *always*.
30095
30096         * decl.cs: Make this hold the namespace.  Hold the root context as
30097         well.
30098         (LookupType): Move here.
30099
30100         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
30101
30102         * location.cs (Row, Name): Fixed the code, it was always returning
30103         references to the first file.
30104
30105         * interface.cs: Register properties defined through interfaces.
30106
30107         * driver.cs: Add support for globbing on the command line
30108
30109         * class.cs (Field): Make it derive from MemberCore as well.
30110         (Event): ditto.
30111
30112 2001-12-15  Ravi Pratap  <ravi@ximian.com>
30113
30114         * class.cs (Event::Define): Check that the type of the event is a delegate
30115         type else flag error #66.
30116
30117         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
30118         same.
30119
30120         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
30121         values of EntryPoint, CharSet etc etc.
30122
30123         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
30124
30125         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
30126         be null and we should ignore this. I am not sure if this is really clean. Apparently,
30127         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
30128         which needs this to do its work.
30129
30130         * ../errors/cs0066.cs : Add.
30131
30132 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
30133
30134         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
30135         helper functions.
30136
30137         * class.cs: (MethodSignature.MethodSignature): Removed hack that
30138         clears out the parameters field.
30139         (MemberSignatureCompare): Cleanup
30140
30141         (MemberCore): New base class used to share code between MethodCore
30142         and Property.
30143
30144         (RegisterRequiredImplementations) BindingFlags.Public requires
30145         either BindingFlags.Instace or Static.  Use instance here.
30146
30147         (Property): Refactored code to cope better with the full spec.
30148
30149         * parameter.cs (GetParameterInfo): Return an empty array instead
30150         of null on error.
30151
30152         * class.cs (Property): Abstract or extern properties have no bodies.
30153
30154         * parameter.cs (GetParameterInfo): return a zero-sized array.
30155
30156         * class.cs (TypeContainer.MethodModifiersValid): Move all the
30157         method modifier validation to the typecontainer so we can reuse
30158         this on properties.
30159
30160         (MethodCore.ParameterTypes): return an empty sized array of types.
30161
30162         (Property.Define): Test property modifier validity.
30163
30164         Add tests for sealed/override too.
30165
30166         (Method.Emit): abstract or extern methods have no bodies.
30167
30168 2001-12-14  Ravi Pratap  <ravi@ximian.com>
30169
30170         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
30171         thing.
30172
30173         (Method::Define, ::Emit): Modify accordingly.
30174
30175         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
30176
30177         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
30178
30179         * makefile: Pass in /unsafe.
30180
30181 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
30182
30183         * class.cs (MakeKey): Kill routine.
30184
30185         * class.cs (TypeContainer.Define): Correctly define explicit
30186         method implementations (they require the full interface name plus
30187         the method name).
30188
30189         * typemanager.cs: Deply the PtrHashtable here and stop using the
30190         lame keys.  Things work so much better.
30191
30192         This of course broke everyone who depended on `RegisterMethod' to
30193         do the `test for existance' test.  This has to be done elsewhere.
30194
30195         * support.cs (PtrHashtable): A hashtable that avoid comparing with
30196         the object stupid Equals method (because, that like fails all over
30197         the place).  We still do not use it.
30198
30199         * class.cs (TypeContainer.SetRequiredInterface,
30200         TypeContainer.RequireMethods): Killed these two routines and moved
30201         all the functionality to RegisterRequiredImplementations.
30202
30203         (TypeContainer.RegisterRequiredImplementations): This routine now
30204         registers all the implementations required in an array for the
30205         interfaces and abstract methods.  We use an array of structures
30206         which can be computed ahead of time to reduce memory usage and we
30207         also assume that lookups are cheap as most classes will not
30208         implement too many interfaces.
30209
30210         We also avoid creating too many MethodSignatures.
30211
30212         (TypeContainer.IsInterfaceMethod): Update and optionally does not
30213         clear the "pending" bit if we find that there are problems with
30214         the declaration.
30215
30216         (TypeContainer.VerifyPendingMethods): Update to report errors of
30217         methods that look like implementations but are not.
30218
30219         (TypeContainer.Define): Add support for explicit interface method
30220         implementation. 
30221
30222 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
30223
30224         * typemanager.cs: Keep track of the parameters here instead of
30225         being a feature of the TypeContainer.
30226
30227         * class.cs: Drop the registration of parameters here, as
30228         InterfaceMethods are also interface declarations.
30229
30230         * delegate.cs: Register methods with the TypeManager not only with
30231         the TypeContainer.  This code was buggy.
30232
30233         * interface.cs: Full registation here.
30234
30235 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
30236
30237         * expression.cs: Remove reducer for binary expressions, it can not
30238         be done this way.
30239
30240         * const.cs: Put here the code that used to go into constant.cs
30241
30242         * constant.cs: Put here the code for constants, this is a new base
30243         class for Literals.
30244
30245         * literal.cs: Make Literal derive from Constant.
30246
30247 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
30248
30249         * statement.cs (Return.Emit): Report error 157 if the user
30250         attempts to return from a finally block.
30251
30252         (Return.Emit): Instead of emitting a return, jump to the end of
30253         the function.
30254
30255         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
30256         LocalBuilder to store the result of the function.  ReturnLabel is
30257         the target where we jump.
30258
30259
30260 2001-12-09  Radek Doulik  <rodo@ximian.com>
30261
30262         * cs-parser.jay: remember alias in current namespace
30263
30264         * ecore.cs (SimpleName::DoResolve): use aliases for types or
30265         namespaces
30266
30267         * class.cs (LookupAlias): lookup alias in my_namespace
30268
30269         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
30270         aliases hashtable
30271         (LookupAlias): lookup alias in this and if needed in parent
30272         namespaces
30273
30274 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
30275
30276         * support.cs: 
30277
30278         * rootcontext.cs: (ModuleBuilder) Made static, first step into
30279         making things static.  I need this to avoid passing the
30280         TypeContainer when calling ParameterType.
30281
30282         * support.cs (InternalParameters.ParameterType): Remove ugly hack
30283         that did string manipulation to compute the type and then call
30284         GetType.  Use Parameter.ParameterType instead.
30285
30286         * cs-tokenizer.cs: Consume the suffix for floating values.
30287
30288         * expression.cs (ParameterReference): figure out whether this is a
30289         reference parameter or not.  Kill an extra variable by computing
30290         the arg_idx during emission.
30291
30292         * parameter.cs (Parameters.GetParameterInfo): New overloaded
30293         function that returns whether a parameter is an out/ref value or not.
30294
30295         (Parameter.ParameterType): The type of the parameter (base,
30296         without ref/out applied).
30297
30298         (Parameter.Resolve): Perform resolution here.
30299         (Parameter.ExternalType): The full type (with ref/out applied).
30300
30301         * statement.cs (Using.Emit, Using.EmitExpression): Implement
30302         support for expressions on the using statement.
30303
30304 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
30305
30306         * statement.cs (Using.EmitLocalVariableDecls): Split the
30307         localvariable handling of the using statement.
30308
30309         (Block.EmitMeta): Keep track of variable count across blocks.  We
30310         were reusing slots on separate branches of blocks.
30311
30312         (Try.Emit): Emit the general code block, we were not emitting it. 
30313
30314         Check the type of the declaration to be an IDisposable or
30315         something that can be implicity converted to it. 
30316
30317         Emit conversions if required.
30318
30319         * ecore.cs (EmptyExpression): New utility class.
30320         (Expression.ImplicitConversionExists): New utility function.
30321
30322 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
30323
30324         * statement.cs (Using): Implement.
30325
30326         * expression.cs (LocalVariableReference): Support read only variables.
30327
30328         * statement.cs: Remove the explicit emit for the Leave opcode.
30329         (VariableInfo): Add a readonly field.
30330
30331 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
30332
30333         * ecore.cs (ConvCast): new class used to encapsulate the various
30334         explicit integer conversions that works in both checked and
30335         unchecked contexts.
30336
30337         (Expression.ConvertNumericExplicit): Use new ConvCast class to
30338         properly generate the overflow opcodes.
30339
30340 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30341
30342         * statement.cs: The correct type for the EmptyExpression is the
30343         element_type, not the variable type.  Ravi pointed this out.
30344
30345 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30346
30347         * class.cs (Method::Define): Handle PInvoke methods specially
30348         by using DefinePInvokeMethod instead of the usual one.
30349
30350         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
30351         above to do the task of extracting information and defining the method.
30352
30353 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30354
30355         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
30356         of the condition for string type.
30357
30358         (Emit): Move that here. 
30359
30360         (ArrayCreation::CheckIndices): Keep string literals in their expression
30361         form.
30362
30363         (EmitDynamicInitializers): Handle strings appropriately.
30364
30365 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30366
30367         * codegen.cs (EmitContext): Replace multiple variables with a
30368         single pointer to the current Switch statement.
30369
30370         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
30371         EmitContext.
30372
30373 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30374
30375         * statement.cs 
30376
30377         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
30378         default'.
30379
30380         (Foreach.Emit): Foreach on arrays was not setting
30381         up the loop variables (for break/continue).
30382
30383         (GotoCase): Semi-implented.
30384
30385 2001-12-03  Ravi Pratap  <ravi@ximian.com>
30386
30387         * attribute.cs (CheckAttribute): Handle system attributes by using
30388         Attribute.GetAttributes to examine information we need.
30389
30390         (GetValidPlaces): Same here.
30391
30392         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
30393
30394         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
30395
30396         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
30397
30398         (Method::Define): Set appropriate flags if we have a DllImport attribute.
30399
30400         (Method::Emit): Handle the case when we are a PInvoke method.
30401
30402 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30403
30404         * expression.cs: Use ResolveWithSimpleName on compound names.
30405
30406 2001-12-02  Ravi Pratap  <ravi@ximian.com>
30407
30408         * constant.cs (EmitConstant): Make sure we resolve the associated expression
30409         before trying to reduce it.
30410
30411         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
30412
30413         * constant.cs (LookupConstantValue): Implement.
30414
30415         (EmitConstant): Use the above in emitting the constant.
30416
30417         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
30418         that are user-defined by doing a LookupConstantValue on them.
30419
30420         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
30421         too, like above.
30422
30423 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
30424
30425         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
30426
30427         (BaseAccess.DoResolve): Implement.
30428
30429         (MemberAccess.DoResolve): Split this routine into a
30430         ResolveMemberAccess routine that can be used independently
30431
30432 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
30433
30434         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
30435         As that share bits of the implementation.  Is returns a boolean,
30436         while As returns the Type that is being probed.
30437
30438 2001-12-01  Ravi Pratap  <ravi@ximian.com>
30439
30440         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
30441         instead of a Literal - much easier.
30442
30443         (EnumInTransit): Remove - utterly useless :-)
30444
30445         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
30446
30447         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
30448
30449         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
30450         chain when we have no associated expression.
30451
30452 2001-11-30  Ravi Pratap  <ravi@ximian.com>
30453
30454         * constant.cs (Define): Use Location while reporting the errror.
30455
30456         Also emit a warning when 'new' is used and there is no inherited
30457         member to hide.
30458
30459         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
30460         populated.
30461
30462         (LookupEnumValue): Implement to lookup an enum member's value and define it
30463         if necessary.
30464
30465         (Populate): Re-write accordingly to use the above routine.
30466
30467 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
30468
30469         * expression.cs (This): Fix prototype for DoResolveLValue to
30470         override the base class DoResolveLValue.
30471
30472         * cs-parser.cs: Report errors cs574 and cs575 (destructor
30473         declarations) 
30474
30475         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
30476         (we need to load the address of the field here).  This fixes
30477         test-22. 
30478
30479         (FieldExpr.DoResolveLValue): Call the DoResolve
30480         function to initialize the Instance expression.
30481
30482         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
30483         correctly the GetEnumerator operation on a value type.
30484
30485         * cs-parser.jay: Add more simple parsing error catches.
30486
30487         * statement.cs (Switch): Add support for string switches.
30488         Handle null specially.
30489
30490         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
30491
30492 2001-11-28  Ravi Pratap  <ravi@ximian.com>
30493
30494         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
30495
30496         (declare_local_constant): New helper function.
30497
30498         * statement.cs (AddConstant): Keep a separate record of constants
30499
30500         (IsConstant): Implement to determine if a variable is a constant.
30501
30502         (GetConstantExpression): Implement.
30503
30504         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
30505
30506         * statement.cs (IsVariableDefined): Re-write.
30507
30508 2001-11-27  Ravi Pratap  <ravi@ximian.com>
30509
30510         * class.cs (TypeContainer::FindMembers): Look for constants
30511         in the case when we are looking for MemberTypes.Field
30512
30513         * expression.cs (MemberAccess::DoResolve): Check that in the
30514         case we are a FieldExpr and a Literal, we are not being accessed
30515         by an instance reference.
30516
30517         * cs-parser.jay (local_constant_declaration): Implement.
30518
30519         (declaration_statement): Implement for constant declarations.
30520
30521 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
30522
30523         * statement.cs (Switch): Catch double defaults.
30524
30525         (Switch): More work on the switch() statement
30526         implementation.  It works for integral values now, need to finish
30527         string support.
30528
30529
30530 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30531
30532         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
30533         integer literals into other integer literals.  To be used by
30534         switch. 
30535
30536 2001-11-24  Ravi Pratap  <ravi@ximian.com>
30537
30538         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
30539         some memory.
30540
30541         (EmitDynamicInitializers): Cope with the above since we extract data
30542         directly from ArrayData now.
30543
30544         (ExpectInitializers): Keep track of whether initializers are mandatory
30545         or not.
30546
30547         (Bounds): Make it a hashtable to prevent the same dimension being 
30548         recorded for every element in that dimension.
30549
30550         (EmitDynamicInitializers): Fix bug which prevented the Set array method
30551         from being found.
30552
30553         Also fix bug which was causing the indices to be emitted in the reverse
30554         order.
30555
30556 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30557
30558         * expression.cs (ArrayCreation): Implement the bits that Ravi left
30559         unfinished.  They do not work, because the underlying code is
30560         sloppy.
30561
30562 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30563
30564         * cs-parser.jay: Remove bogus fixme.
30565
30566         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
30567         on Switch statement.
30568
30569 2001-11-23  Ravi Pratap  <ravi@ximian.com>
30570
30571         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
30572         the same. 
30573
30574         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
30575         parameter. Apparently, any expression is allowed. 
30576
30577         (ValidateInitializers): Update accordingly.
30578
30579         (CheckIndices): Fix some tricky bugs thanks to recursion.
30580
30581         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
30582         I was being completely brain-dead.
30583
30584         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
30585         and re-write acordingly.
30586
30587         (DelegateInvocation): Re-write accordingly.
30588
30589         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
30590
30591         (MakeByteBlob): Handle types more correctly.
30592
30593         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
30594         initialization from expressions but it is incomplete because I am a complete
30595         Dodo :-|
30596
30597 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30598
30599         * statement.cs (If.Emit): Fix a bug that generated incorrect code
30600         on If.  Basically, we have to return `true' (ie, we do return to
30601         our caller) only if both branches of the if return.
30602
30603         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
30604         short-circuit operators, handle them as short circuit operators. 
30605
30606         (Cast.DoResolve): Resolve type.
30607         (Cast.Cast): Take an expression as the target type.
30608
30609         * cs-parser.jay (cast_expression): Remove old hack that only
30610         allowed a limited set of types to be handled.  Now we take a
30611         unary_expression and we resolve to a type during semantic
30612         analysis.
30613
30614         Use the grammar productions from Rhys to handle casts (this is
30615         not complete like Rhys syntax yet, we fail to handle that corner
30616         case that C# has regarding (-x), but we will get there.
30617
30618 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30619
30620         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30621         field which is an array type.
30622
30623         * cs-parser.jay (declare_local_variables): Support array initialization too.
30624
30625         * typemanager.cs (MakeKey): Implement.
30626
30627         (everywhere): Use the above appropriately.
30628
30629         * cs-parser.jay (for_statement): Update for array initialization while
30630         declaring variables.
30631
30632         * ecore.cs : The error message was correct, it's the variable's names that
30633         were misleading ;-) Make the code more readable.
30634
30635         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30636         the correct type etc.
30637
30638         (ConvertExplicit): Handle Enum types by examining the underlying type.
30639
30640 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30641
30642         * parameter.cs (GetCallingConvention): Always return
30643         CallingConventions.Standard for now.
30644
30645 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30646
30647         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30648         and `r' after calling DoNumericPromotions.
30649
30650         * ecore.cs: Fix error message (the types were in the wrong order).
30651
30652         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30653         BindingFlags.Instance as well 
30654
30655         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30656         implicit int literal conversion in an empty cast so that we
30657         propagate the right type upstream.
30658
30659         (UnboxCast): new class used to unbox value types.
30660         (Expression.ConvertExplicit): Add explicit type conversions done
30661         by unboxing.
30662
30663         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30664         the target type before applying the implicit LongLiterals to ULong
30665         literal cast.
30666
30667 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30668
30669         * cs-parser.jay (for_statement): Reworked the way For works: now
30670         we declare manually any variables that are introduced in
30671         for_initializer to solve the problem of having out-of-band code
30672         emition (that is what got for broken).
30673
30674         (declaration_statement): Perform the actual variable declaration
30675         that used to be done in local_variable_declaration here.
30676
30677         (local_variable_declaration): Do not declare anything, just pass
30678         the information on a DictionaryEntry
30679
30680 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30681
30682         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30683         re-write of the logic to now make it recursive.
30684
30685         (UpdateIndices): Re-write accordingly.
30686
30687         Store element data in a separate ArrayData list in the above methods.
30688
30689         (MakeByteBlob): Implement to dump the array data into a byte array.
30690
30691 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30692
30693         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30694         into CheckIndices.
30695
30696         * constant.cs (Define): Implement.
30697
30698         (EmitConstant): Re-write fully.
30699
30700         Pass in location info.
30701
30702         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30703         respectively.
30704
30705         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30706         DictionaryEntry since we need location info too.
30707
30708         (constant_declaration): Update accordingly.
30709
30710         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30711         code into another method : UpdateIndices.
30712
30713 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30714
30715         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30716         some type checking etc.
30717
30718 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30719
30720         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30721         bits to provide dimension info if the user skips doing that.
30722
30723         Update second constructor to store the rank correctly.
30724
30725 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30726
30727         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30728         and try to implement.
30729
30730         * ../errors/cs0150.cs : Add.
30731
30732         * ../errors/cs0178.cs : Add.
30733
30734 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30735
30736         * statement.cs: Implement foreach on multi-dimensional arrays. 
30737
30738         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30739         name of the params argument.
30740
30741         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30742         initializing the array.
30743
30744         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30745         we can use this elsewhere.
30746
30747         * statement.cs: Finish implementation of foreach for single
30748         dimension arrays.
30749
30750         * cs-parser.jay: Use an out-of-band stack to pass information
30751         around, I wonder why I need this.
30752
30753         foreach_block: Make the new foreach_block the current_block.
30754
30755         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30756         function used to return a static Parameters structure.  Used for
30757         empty parameters, as those are created very frequently.
30758
30759         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30760
30761 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30762
30763         * interface.cs : Default modifier is private, not public. The
30764         make verify test passes again.
30765
30766 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30767
30768         * support.cs (ReflectionParameters): Fix logic to determine
30769         whether the last parameter is a params one. Test 9 passes again.
30770
30771         * delegate.cs (Populate): Register the builders we define with
30772         RegisterParameterForBuilder. Test 19 passes again.
30773
30774         * cs-parser.jay (property_declaration): Reference $6 instead
30775         of $$ to get at the location.
30776
30777         (indexer_declaration): Similar stuff.
30778
30779         (attribute): Ditto.
30780
30781         * class.cs (Property): Register parameters for the Get and Set methods
30782         if they exist. Test 23 passes again.
30783
30784         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30785         call to EmitArguments as we are sure there aren't any params arguments. 
30786         Test 32 passes again.
30787
30788         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30789         IndexOutOfRangeException. 
30790
30791         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30792         Test 33 now passes again.
30793
30794 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30795
30796         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30797         broke a bunch of things.  Will have to come up with a better way
30798         of tracking locations.
30799
30800         * statement.cs: Implemented foreach for single dimension arrays.
30801
30802 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30803
30804         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30805         an error.  This removes the lookup from the critical path.
30806
30807         * cs-parser.jay: Removed use of temporary_loc, which is completely
30808         broken. 
30809
30810 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30811
30812         * support.cs (ReflectionParameters.ParameterModifier): Report
30813         whether the argument is a PARAMS argument or not.
30814
30815         * class.cs: Set the attribute `ParamArrayAttribute' on the
30816         parameter argument.
30817
30818         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30819         and cons_param_array_attribute (ConstructorInfo for
30820         ParamArrayAttribute)., 
30821
30822         * codegen.cs: Emit the return using the `Return' statement, that
30823         way we can report the error correctly for missing return values. 
30824
30825         * class.cs (Method.Emit): Clean up.
30826
30827         * expression.cs (Argument.Resolve): Take another argument: the
30828         location where this argument is used.  Notice that this is not
30829         part of the "Argument" class as to reduce the size of the
30830         structure (we know the approximate location anyways).
30831
30832         Test if the argument is a variable-reference, if not, then
30833         complain with a 206.
30834
30835         (Argument.Emit): Emit addresses of variables.
30836
30837         (Argument.FullDesc): Simplify.
30838
30839         (Invocation.DoResolve): Update for Argument.Resolve.
30840
30841         (ElementAccess.DoResolve): ditto.
30842
30843         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30844         method should be virtual, as this method is always virtual.
30845
30846         (NewDelegate.DoResolve): Update for Argument.Resolve.
30847
30848         * class.cs (ConstructorInitializer.DoResolve): ditto.
30849
30850         * attribute.cs (Attribute.Resolve): ditto.
30851
30852 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30853
30854         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30855
30856         * expression.cs (ParameterReference): Drop IStackStorage and implement
30857         IAssignMethod instead. 
30858
30859         (LocalVariableReference): ditto.
30860
30861         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30862         IAssignMethod instead. 
30863
30864 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30865
30866         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30867         enumerations that are used in heavily used structures derive from
30868         byte in a laughable and pathetic attempt to reduce memory usage.
30869         This is the kind of pre-optimzations that you should not do at
30870         home without adult supervision.
30871
30872         * expression.cs (UnaryMutator): New class, used to handle ++ and
30873         -- separatedly from the other unary operators.  Cleans up the
30874         code, and kills the ExpressionStatement dependency in Unary.
30875
30876         (Unary): Removed `method' and `Arguments' from this class, making
30877         it smaller, and moving it all to SimpleCall, so I can reuse this
30878         code in other locations and avoid creating a lot of transient data
30879         strucutres when not required.
30880
30881         * cs-parser.jay: Adjust for new changes.
30882
30883 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30884
30885         * enum.cs (Enum.Populate): If there is a failure during
30886         definition, return
30887
30888         * cs-parser.jay (opt_enum_base): we used to catch type errors
30889         here, but this is really incorrect.  The type error should be
30890         catched during semantic analysis.
30891
30892 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30893
30894         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30895         current_local_parameters as expected since I, in my stupidity, had forgotten
30896         to do this :-)
30897
30898         * attribute.cs (GetValidPlaces): Fix stupid bug.
30899
30900         * class.cs (Method::Emit): Perform check on applicability of attributes.
30901
30902         (Constructor::Emit): Ditto.
30903
30904         (Field::Emit): Ditto.
30905
30906         (Field.Location): Store location information.
30907
30908         (Property, Event, Indexer, Operator): Ditto.
30909
30910         * cs-parser.jay (field_declaration): Pass in location for each field.
30911
30912         * ../errors/cs0592.cs : Add.
30913
30914 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30915
30916         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30917
30918         (InitCoreTypes): Update accordingly.
30919
30920         (RegisterAttrType, LookupAttr): Implement.
30921
30922         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30923         info about the same.
30924
30925         (Resolve): Update to populate the above as necessary.
30926
30927         (Error592): Helper.
30928
30929         (GetValidPlaces): Helper to the above.
30930
30931         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30932
30933         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30934
30935 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30936
30937         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30938
30939         * ../errors/cs0617.cs : Add.
30940
30941 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30942
30943         * enum.cs (Emit): Rename to Populate to be more consistent with what
30944         we expect it to do and when exactly it is called.
30945
30946         * class.cs, rootcontext.cs : Update accordingly.
30947
30948         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30949         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30950
30951         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30952
30953         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30954         of a fieldinfo using the above, when dealing with a FieldBuilder.
30955
30956 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30957
30958         * ../errors/cs0031.cs : Add.
30959
30960         * ../errors/cs1008.cs : Add.
30961
30962         * ../errrors/cs0543.cs : Add.
30963
30964         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30965         enum type.
30966
30967         (FindMembers): Implement.
30968
30969         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30970         enums and delegates too.
30971
30972         (enum_types): Rename to builder_to_enum.
30973
30974         (delegate_types): Rename to builder_to_delegate.
30975
30976         * delegate.cs (FindMembers): Implement.
30977
30978 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30979
30980         * typemanager.cs (IsEnumType): Implement.
30981
30982         * enum.cs (Emit): Re-write parts to account for the underlying type
30983         better and perform checking etc.
30984
30985         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30986         of the underlying type.
30987
30988         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30989         value
30990
30991         * enum.cs (error31): Helper to report error #31.
30992
30993         * cs-parser.jay (enum_declaration): Store location of each member too.
30994
30995         * enum.cs (member_to_location): New hashtable. 
30996
30997         (AddEnumMember): Update location hashtable.
30998
30999         (Emit): Use the location of each member while reporting errors.
31000
31001 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
31002
31003         * cs-parser.jay: A for_initializer if is a
31004         local_variable_declaration really ammount to have an implicit
31005         block with the variable declaration and no initializer for for.
31006
31007         * statement.cs (For.Emit): Cope with null initializers.
31008
31009         This fixes the infinite loop on for initializers.
31010
31011 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
31012
31013         * enum.cs: More cleanup.
31014
31015         * ecore.cs: Remove dead code.
31016
31017         * class.cs (Property.Emit): More simplification.
31018         (Event.Emit): ditto.
31019
31020         Reworked to have less levels of indentation.
31021
31022 2001-11-08  Ravi Pratap  <ravi@ximian.com>
31023
31024         * class.cs (Property): Emit attributes.
31025
31026         (Field): Ditto.
31027
31028         (Event): Ditto.
31029
31030         (Indexer): Ditto.
31031
31032         (Operator): Ditto.
31033
31034         * enum.cs (Emit): Ditto.
31035
31036         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
31037         Enums too.
31038
31039         * class.cs (Field, Event, etc.): Move attribute generation into the
31040         Emit method everywhere.
31041
31042         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
31043         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
31044         as we had no way of defining nested enums !
31045
31046         * rootcontext.cs : Adjust code accordingly.
31047
31048         * typemanager.cs (AddEnumType): To keep track of enum types separately.
31049
31050 2001-11-07  Ravi Pratap  <ravi@ximian.com>
31051
31052         * expression.cs (EvalConstantExpression): Move into ecore.cs
31053
31054         * enum.cs (Enum): Rename some members and make them public and readonly
31055         according to our convention.
31056
31057         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
31058         nothing else.
31059
31060         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
31061
31062         (Enum::Emit): Write a simple version for now which doesn't try to compute
31063         expressions. I shall modify this to be more robust in just a while.
31064
31065         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
31066
31067         (TypeContainer::CloseType): Create the Enum types too.
31068
31069         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
31070
31071         * expression.cs (EvalConstantExpression): Get rid of completely.
31072
31073         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
31074         user-defined values and other cases.
31075
31076         (IsValidEnumLiteral): Helper function.
31077
31078         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
31079         out there in the case we had a literal FieldExpr.
31080
31081         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
31082
31083         (Literalize): Revamp a bit to take two arguments.
31084
31085         (EnumLiteral): New class which derives from Literal to wrap enum literals.
31086
31087 2001-11-06  Ravi Pratap  <ravi@ximian.com>
31088
31089         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
31090
31091         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
31092
31093         (Resolve): Use the above to ensure we have proper initializers.
31094
31095 2001-11-05  Ravi Pratap  <ravi@ximian.com>
31096
31097         * expression.cs (Expression::EvalConstantExpression): New method to 
31098         evaluate constant expressions.
31099
31100         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
31101
31102 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
31103
31104         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
31105         in an array.
31106
31107         (Binary.ResolveOperator): Handle operator != (object a, object b)
31108         and operator == (object a, object b);
31109
31110         (Binary.DoNumericPromotions): Indicate whether the numeric
31111         promotion was possible.
31112
31113         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
31114         Implement.  
31115
31116         Made the ArrayAccess implement interface IAssignMethod instead of
31117         IStackStore as the order in which arguments are passed reflects
31118         this.
31119
31120         * assign.cs: Instead of using expr.ExprClass to select the way of
31121         assinging, probe for the IStackStore/IAssignMethod interfaces.
31122
31123         * typemanager.cs: Load InitializeArray definition.
31124
31125         * rootcontext.cs (RootContext.MakeStaticData): Used to define
31126         static data that can be used to initialize arrays. 
31127
31128 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
31129
31130         * expression.cs: Handle operator== and operator!= for booleans.
31131
31132         (Conditioal.Reduce): Implement reducer for the ?: operator.
31133
31134         (Conditional.Resolve): Implement dead code elimination.
31135
31136         (Binary.Resolve): Catch string literals and return a new
31137         concatenated string.
31138
31139         (Unary.Reduce): Implement reduction of unary expressions.
31140
31141         * ecore.cs: Split out the expression core handling here.
31142
31143         (Expression.Reduce): New method used to perform constant folding
31144         and CSE.  This is needed to support constant-expressions. 
31145
31146         * statement.cs (Statement.EmitBoolExpression): Pass true and false
31147         targets, and optimize for !x.
31148
31149 2001-11-04  Ravi Pratap  <ravi@ximian.com>
31150
31151         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
31152         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
31153         set custom atttributes.
31154
31155         * literal.cs (Literal::GetValue): New abstract method to return the actual
31156         value of the literal, cast as an object.
31157
31158         (*Literal): Implement GetValue method.
31159
31160         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
31161         expressions to the arraylist but objects of type Argument.
31162
31163         * class.cs (TypeContainer::Emit): Emit our attributes too.
31164
31165         (Method::Emit, Constructor::Emit): Ditto.
31166
31167         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
31168         to be ignoring earlier.
31169
31170 2001-11-03  Ravi Pratap  <ravi@ximian.com>
31171
31172         * attribute.cs (AttributeSection::Define): Implement to do the business
31173         of constructing a CustomAttributeBuilder.
31174
31175         (Attribute): New trivial class. Increases readability of code.  
31176
31177         * cs-parser.jay : Update accordingly.
31178
31179         (positional_argument_list, named_argument_list, named_argument): New rules
31180
31181         (attribute_arguments): Use the above so that we are more correct.
31182
31183 2001-11-02  Ravi Pratap  <ravi@ximian.com>
31184
31185         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
31186         to perform all checks for a method with a params parameter.
31187
31188         (Invocation::OverloadResolve): Update to use the above method and therefore
31189         cope correctly with params method invocations.
31190
31191         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
31192         params too.
31193
31194         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
31195         constructors in our parent too because we can't afford to miss out on 
31196         protected ones ;-)
31197
31198         * attribute.cs (AttributeSection): New name for the class Attribute
31199
31200         Other trivial changes to improve readability.
31201
31202         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
31203         use the new class names.
31204
31205 2001-11-01  Ravi Pratap  <ravi@ximian.com>
31206
31207         * class.cs (Method::Define): Complete definition for params types too
31208
31209         (Indexer::Define): Ditto.
31210
31211         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
31212         Cope everywhere with a request for info about the array parameter.
31213
31214 2001-11-01  Ravi Pratap  <ravi@ximian.com>
31215
31216         * tree.cs (RecordNamespace): Fix up to check for the correct key.
31217
31218         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
31219         local_variable_type to extract the string corresponding to the type.
31220
31221         (local_variable_type): Fixup the action to use the new helper method.
31222
31223         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
31224         go.
31225
31226         * expression.cs : Clean out code which uses the above.
31227
31228 2001-10-31  Ravi Pratap  <ravi@ximian.com>
31229
31230         * typemanager.cs (RegisterMethod): Check if we already have an existing key
31231         and bale out if necessary by returning a false.
31232
31233         (RegisterProperty): Ditto.
31234
31235         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
31236         and print out appropriate error messages.
31237
31238         * interface.cs (everywhere): Ditto.
31239
31240         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
31241         location to constructor.
31242
31243         * class.cs (Property, Event, Indexer): Update accordingly.
31244
31245         * ../errors/cs111.cs : Added.
31246
31247         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
31248         of a method, as laid down by the spec.
31249
31250         (Invocation::OverloadResolve): Use the above method.
31251
31252 2001-10-31  Ravi Pratap  <ravi@ximian.com>
31253
31254         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
31255         now take a TypeContainer and a Parameters object.
31256
31257         (ParameterData): Modify return type of ParameterModifier method to be 
31258         Parameter.Modifier and not a string.
31259
31260         (ReflectionParameters, InternalParameters): Update accordingly.
31261
31262         * expression.cs (Argument::GetParameterModifier): Same here.
31263
31264         * support.cs (InternalParameters::ParameterType): Find a better way of determining
31265         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
31266         symbol in it at all so maybe this is only for now.
31267
31268 2001-10-30  Ravi Pratap  <ravi@ximian.com>
31269
31270         * support.cs (InternalParameters): Constructor now takes an extra argument 
31271         which is the actual Parameters class.
31272
31273         (ParameterDesc): Update to provide info on ref/out modifiers.
31274
31275         * class.cs (everywhere): Update call to InternalParameters to pass in
31276         the second argument too.
31277
31278         * support.cs (ParameterData): Add ParameterModifier, which is a method 
31279         to return the modifier info [ref/out etc]
31280
31281         (InternalParameters, ReflectionParameters): Implement the above.
31282
31283         * expression.cs (Argument::ParameterModifier): Similar function to return
31284         info about the argument's modifiers.
31285
31286         (Invocation::OverloadResolve): Update to take into account matching modifiers 
31287         too.
31288
31289         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
31290         a new SetFormalParameters object which we pass to InternalParameters.
31291
31292 2001-10-30  Ravi Pratap  <ravi@ximian.com>
31293
31294         * expression.cs (NewArray): Merge into the ArrayCreation class.
31295
31296 2001-10-29  Ravi Pratap  <ravi@ximian.com>
31297
31298         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
31299         NewUserdefinedArray into one as there wasn't much of a use in having
31300         two separate ones.
31301
31302         * expression.cs (Argument): Change field's name to ArgType from Type.
31303
31304         (Type): New readonly property which returns the proper type, taking into 
31305         account ref/out modifiers.
31306
31307         (everywhere): Adjust code accordingly for the above.
31308
31309         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
31310         whether we are emitting for a ref or out parameter.
31311
31312         * expression.cs (Argument::Emit): Use the above field to set the state.
31313
31314         (LocalVariableReference::Emit): Update to honour the flag and emit the
31315         right stuff.
31316
31317         * parameter.cs (Attributes): Set the correct flags for ref parameters.
31318
31319         * expression.cs (Argument::FullDesc): New function to provide a full desc.
31320
31321         * support.cs (ParameterData): Add method ParameterDesc to the interface.
31322
31323         (ReflectionParameters, InternalParameters): Implement the above method.
31324
31325         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
31326         reporting errors.
31327
31328         (Invocation::FullMethodDesc): Ditto. 
31329
31330 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
31331
31332         * cs-parser.jay: Add extra production for the second form of array
31333         creation. 
31334
31335         * expression.cs (ArrayCreation): Update to reflect the above
31336         change. 
31337
31338         * Small changes to prepare for Array initialization.
31339
31340 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
31341
31342         * typemanager.cs (ImplementsInterface): interface might be null;
31343         Deal with this problem;
31344
31345         Also, we do store negative hits on the cache (null values), so use
31346         this instead of calling t.GetInterfaces on the type everytime.
31347
31348 2001-10-28  Ravi Pratap  <ravi@ximian.com>
31349
31350         * typemanager.cs (IsBuiltinType): New method to help determine the same.
31351
31352         * expression.cs (New::DoResolve): Get rid of array creation code and instead
31353         split functionality out into different classes.
31354
31355         (New::FormArrayType): Move into NewBuiltinArray.
31356
31357         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
31358         quite useless.
31359
31360         (NewBuiltinArray): New class to handle creation of built-in arrays.
31361
31362         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
31363         account creation of one-dimensional arrays.
31364
31365         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
31366
31367         (NewUserdefinedArray::DoResolve): Implement.
31368
31369         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
31370
31371         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
31372         we maintain inside the TypeManager. This is necessary to perform lookups on the
31373         module builder.
31374
31375         (LookupType): Update to perform GetType on the module builders too.     
31376
31377         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
31378
31379         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
31380
31381 2001-10-23  Ravi Pratap  <ravi@ximian.com>
31382
31383         * expression.cs (New::DoResolve): Implement guts of array creation.
31384
31385         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
31386
31387 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
31388
31389         * expression.cs: Fix bug I introduced lsat night that broke
31390         Delegates. 
31391
31392         (Expression.Resolve): Report a 246 error (can not resolve name)
31393         if we find a SimpleName in the stream.
31394
31395         (Expression.ResolveLValue): Ditto.
31396
31397         (Expression.ResolveWithSimpleName): This function is a variant of
31398         ResolveName, this one allows SimpleNames to be returned without a
31399         warning.  The only consumer of SimpleNames is MemberAccess
31400
31401 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
31402
31403         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
31404         might arrive here.  I have my doubts that this is correct.
31405
31406         * statement.cs (Lock): Implement lock statement.
31407
31408         * cs-parser.jay: Small fixes to support `lock' and `using'
31409
31410         * cs-tokenizer.cs: Remove extra space
31411
31412         * driver.cs: New flag --checked, allows to turn on integer math
31413         checking. 
31414
31415         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
31416         Threading.Monitor.Exit 
31417
31418 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
31419
31420         * expression.cs (IndexerAccess::DoResolveLValue): Set the
31421         Expression Class to be IndexerAccess.
31422
31423         Notice that Indexer::DoResolve sets the eclass to Value.
31424
31425 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
31426
31427         * class.cs (TypeContainer::Emit): Emit code for indexers.
31428
31429         * assign.cs (IAssignMethod): New interface implemented by Indexers
31430         and Properties for handling assignment.
31431
31432         (Assign::Emit): Simplify and reuse code. 
31433
31434         * expression.cs (IndexerAccess, PropertyExpr): Implement
31435         IAssignMethod, clean up old code. 
31436
31437 2001-10-22  Ravi Pratap  <ravi@ximian.com>
31438
31439         * typemanager.cs (ImplementsInterface): New method to determine if a type
31440         implements a given interface. Provides a nice cache too.
31441
31442         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
31443         method.
31444
31445         (ConvertReferenceExplicit): Ditto.
31446
31447         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
31448         various methods, with correct names etc.
31449
31450         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
31451         Operator.UnaryNegation.
31452
31453         * cs-parser.jay (operator_declarator): Be a little clever in the case where
31454         we have a unary plus or minus operator.
31455
31456         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
31457         UnaryMinus.
31458
31459         * everywhere : update accordingly.
31460
31461         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
31462         respectively.
31463
31464         * class.cs (Method::Define): For the case where we are implementing a method
31465         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
31466         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
31467
31468 2001-10-21  Ravi Pratap  <ravi@ximian.com>
31469
31470         * interface.cs (FindMembers): Implement to work around S.R.E
31471         lameness.
31472
31473         * typemanager.cs (IsInterfaceType): Implement.
31474
31475         (FindMembers): Update to handle interface types too.
31476
31477         * expression.cs (ImplicitReferenceConversion): Re-write bits which
31478         use IsAssignableFrom as that is not correct - it doesn't work.
31479
31480         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
31481         and accordingly override EmitStatement.
31482
31483         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
31484         using the correct logic :-)
31485
31486 2001-10-19  Ravi Pratap  <ravi@ximian.com>
31487
31488         * ../errors/cs-11.cs : Add to demonstrate error -11 
31489
31490 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
31491
31492         * assign.cs (Assign::Resolve): Resolve right hand side first, and
31493         then pass this as a hint to ResolveLValue.
31494
31495         * expression.cs (FieldExpr): Add Location information
31496
31497         (FieldExpr::LValueResolve): Report assignment to readonly
31498         variable. 
31499
31500         (Expression::ExprClassFromMemberInfo): Pass location information.
31501
31502         (Expression::ResolveLValue): Add new method that resolves an
31503         LValue. 
31504
31505         (Expression::DoResolveLValue): Default invocation calls
31506         DoResolve. 
31507
31508         (Indexers): New class used to keep track of indexers in a given
31509         Type. 
31510
31511         (IStackStore): Renamed from LValue, as it did not really describe
31512         what this did.  Also ResolveLValue is gone from this interface and
31513         now is part of Expression.
31514
31515         (ElementAccess): Depending on the element access type
31516
31517         * typemanager.cs: Add `indexer_name_type' as a Core type
31518         (System.Runtime.CompilerServices.IndexerNameAttribute)
31519
31520         * statement.cs (Goto): Take a location.
31521
31522 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31523
31524         * delegate.cs (Delegate::VerifyDelegate): New method to verify
31525         if two delegates are compatible.
31526
31527         (NewDelegate::DoResolve): Update to take care of the case when
31528         we instantiate a delegate from another delegate.
31529
31530         * typemanager.cs (FindMembers): Don't even try to look up members
31531         of Delegate types for now.
31532
31533 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31534
31535         * delegate.cs (NewDelegate): New class to take care of delegate
31536         instantiation.
31537
31538         * expression.cs (New): Split the delegate related code out into 
31539         the NewDelegate class.
31540
31541         * delegate.cs (DelegateInvocation): New class to handle delegate 
31542         invocation.
31543
31544         * expression.cs (Invocation): Split out delegate related code into
31545         the DelegateInvocation class.
31546
31547 2001-10-17  Ravi Pratap  <ravi@ximian.com>
31548
31549         * expression.cs (New::DoResolve): Implement delegate creation fully
31550         and according to the spec.
31551
31552         (New::DoEmit): Update to handle delegates differently.
31553
31554         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
31555         because of which we were printing out arguments in reverse order !
31556
31557         * delegate.cs (VerifyMethod): Implement to check if the given method
31558         matches the delegate.
31559
31560         (FullDelegateDesc): Implement.
31561
31562         (VerifyApplicability): Implement.
31563
31564         * expression.cs (Invocation::DoResolve): Update to accordingly handle
31565         delegate invocations too.
31566
31567         (Invocation::Emit): Ditto.
31568
31569         * ../errors/cs1593.cs : Added.
31570
31571         * ../errors/cs1594.cs : Added.
31572
31573         * delegate.cs (InstanceExpression, TargetMethod): New properties.
31574
31575 2001-10-16  Ravi Pratap  <ravi@ximian.com>
31576
31577         * typemanager.cs (intptr_type): Core type for System.IntPtr
31578
31579         (InitCoreTypes): Update for the same.
31580
31581         (iasyncresult_type, asynccallback_type): Ditto.
31582
31583         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
31584         correct.
31585
31586         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
31587         too.
31588
31589         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
31590         the builders for the 4 members of a delegate type :-)
31591
31592         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
31593         type.
31594
31595         * expression.cs (New::DoResolve): Implement guts for delegate creation.
31596
31597         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
31598
31599 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
31600
31601         * statement.cs (Break::Emit): Implement.   
31602         (Continue::Emit): Implement.
31603
31604         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31605         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31606         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31607         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
31608         end loop
31609
31610         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
31611         properties that track the label for the current loop (begin of the
31612         loop and end of the loop).
31613
31614 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31615
31616         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31617         use of emitting anything at all.
31618
31619         * class.cs, rootcontext.cs : Get rid of calls to the same.
31620
31621         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31622
31623         (Populate): Define the constructor correctly and set the implementation
31624         attributes.
31625
31626         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31627         have been defined.
31628
31629         (AddDelegateType): Implement.
31630
31631         (IsDelegateType): Implement helper method.
31632
31633         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31634
31635         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31636         and accordingly handle it.
31637
31638         * delegate.cs (Populate): Take TypeContainer argument.
31639         Implement bits to define the Invoke method. However, I still haven't figured out
31640         how to take care of the native int bit :-(
31641
31642         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31643         Qualify the name of the delegate, not its return type !
31644
31645         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31646         conversion.
31647
31648         (StandardConversionExists): Checking for array types turns out to be recursive.
31649
31650         (ConvertReferenceExplicit): Implement array conversion.
31651
31652         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31653
31654 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31655
31656         * cs-parser.jay (delegate_declaration): Store the fully qualified
31657         name as it is a type declaration.
31658
31659         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31660         readonly.
31661
31662         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31663         as TypeContainer::DefineType.
31664
31665         (Populate): Method in which all the definition of the various methods (Invoke)
31666         etc is done.
31667
31668         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31669         see.
31670
31671         (CloseDelegate): Finally creates the delegate.
31672
31673         * class.cs (TypeContainer::DefineType): Update to define delegates.
31674         (Populate, Emit and CloseType): Do the same thing here too.
31675
31676         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31677         delegates in all these operations.
31678
31679 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31680
31681         * expression.cs: LocalTemporary: a new expression used to
31682         reference a temporary that has been created.
31683
31684         * assign.cs: Handle PropertyAccess back here, so that we can
31685         provide the proper semantic access to properties.
31686
31687         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31688         a few more explicit conversions. 
31689
31690         * modifiers.cs: `NEW' modifier maps to HideBySig.
31691
31692         * expression.cs (PropertyExpr): Make this into an
31693         ExpressionStatement, and support the EmitStatement code path. 
31694
31695         Perform get/set error checking, clean up the interface.
31696
31697         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31698         them into toplevel access objects.
31699
31700 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31701
31702         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31703         SRE.
31704
31705         * typemanager.cs: Keep track here of our PropertyBuilders again to
31706         work around lameness in SRE.
31707
31708 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31709
31710         * expression.cs (LValue::LValueResolve): New method in the
31711         interface, used to perform a second resolution pass for LValues. 
31712
31713         (This::DoResolve): Catch the use of this in static methods.
31714
31715         (This::LValueResolve): Implement.
31716
31717         (This::Store): Remove warning, assigning to `this' in structures
31718         is 
31719
31720         (Invocation::Emit): Deal with invocation of
31721         methods on value types.  We need to pass the address to structure
31722         methods rather than the object itself.  (The equivalent code to
31723         emit "this" for structures leaves the entire structure on the
31724         stack instead of a pointer to it). 
31725
31726         (ParameterReference::DoResolve): Compute the real index for the
31727         argument based on whether the method takes or not a `this' pointer
31728         (ie, the method is static).
31729
31730         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31731         value types returned from functions when we need to invoke a
31732         method on the sturcture.
31733
31734
31735 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31736
31737         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31738         defining the type in the Modulebuilder or Typebuilder. This is to take
31739         care of nested types which need to be defined on the TypeBuilder using
31740         DefineNestedMethod.
31741
31742         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31743         methods in RootContext, only ported to be part of TypeContainer.
31744
31745         (TypeContainer::GetInterfaceOrClass): Ditto.
31746
31747         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31748
31749         * interface.cs (Interface::DefineInterface): New method. Does exactly
31750         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31751         too.
31752
31753         (Interface::GetInterfaces): Move from RootContext here and port.
31754
31755         (Interface::GetInterfaceByName): Same here.
31756
31757         * rootcontext.cs (ResolveTree): Re-write.
31758
31759         (PopulateTypes): Re-write.
31760
31761         * class.cs (TypeContainer::Populate): Populate nested types too.
31762         (TypeContainer::Emit): Emit nested members too.
31763
31764         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31765         instead just use the name argument passed in as it is already fully
31766         qualified.
31767
31768         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31769         to TypeContainer mapping to see if a type is user-defined.
31770
31771         * class.cs (TypeContainer::CloseType): Implement. 
31772
31773         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31774         the default constructor.
31775
31776         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31777         twice.
31778
31779         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31780
31781         * interface.cs (CloseType): Create the type here.
31782
31783         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31784         the hierarchy.
31785
31786         Remove all the methods which are now in TypeContainer.
31787
31788 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31789
31790         * delegate.cs (Define): Re-write bits to define the delegate
31791         correctly.
31792
31793 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31794
31795         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31796
31797         * expression.cs (ImplicitReferenceConversion): handle null as well
31798         as a source to convert to any reference type.
31799
31800         * statement.cs (Return): Perform any implicit conversions to
31801         expected return type.  
31802
31803         Validate use of return statement.  
31804
31805         * codegen.cs (EmitContext): Pass the expected return type here.
31806
31807         * class.cs (Method, Constructor, Property): Pass expected return
31808         type to EmitContext.
31809
31810 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31811
31812         * expression.cs: Make DoResolve take an EmitContext instead of a
31813         TypeContainer.
31814
31815         Replaced `l' and `location' for `loc', for consistency.
31816
31817         (Error, Warning): Remove unneeded Tc argument.
31818
31819         * assign.cs, literal.cs, constant.cs: Update to new calling
31820         convention. 
31821
31822         * codegen.cs: EmitContext now contains a flag indicating whether
31823         code is being generated in a static method or not.
31824
31825         * cs-parser.jay: DecomposeQI, new function that replaces the old
31826         QualifiedIdentifier.  Now we always decompose the assembled
31827         strings from qualified_identifier productions into a group of
31828         memberaccesses.
31829
31830 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31831
31832         * rootcontext.cs: Deal with field-less struct types correctly now
31833         by passing the size option to Define Type.
31834
31835         * class.cs: Removed hack that created one static field. 
31836
31837 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31838
31839         * statement.cs: Moved most of the code generation here. 
31840
31841 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31842
31843         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31844         seem very right.
31845
31846         (ElementAccess): Remove useless bits for now - keep checks as the spec
31847         says.
31848
31849 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31850
31851         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31852         and start performing checks according to the spec.
31853
31854 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31855
31856         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31857         rank_specifiers instead.
31858
31859         (rank_specifiers): Change the order in which the rank specifiers are stored
31860
31861         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31862
31863         * expression.cs (ElementAccess): Implement the LValue interface too.
31864
31865 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31866
31867         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31868         except that user defined conversions are not included.
31869
31870         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31871         perform the conversion of the return type, if necessary.
31872
31873         (New::DoResolve): Check whether we are creating an array or an object
31874         and accordingly do the needful.
31875
31876         (New::Emit): Same here.
31877
31878         (New::DoResolve): Implement guts of array creation.
31879
31880         (New::FormLookupType): Helper function.
31881
31882 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31883
31884         * codegen.cs: Removed most of the code generation here, and move the
31885         corresponding code generation bits to the statement classes. 
31886
31887         Added support for try/catch/finalize and throw.
31888
31889         * cs-parser.jay: Added support for try/catch/finalize.
31890
31891         * class.cs: Catch static methods having the flags override,
31892         virtual or abstract.
31893
31894         * expression.cs (UserCast): This user cast was not really doing
31895         what it was supposed to do.  Which is to be born in fully resolved
31896         state.  Parts of the resolution were being performed at Emit time! 
31897
31898         Fixed this code.
31899
31900 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31901
31902         * expression.cs: Implicity convert the result from UserCast.
31903
31904 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31905
31906         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31907         prevented it from working correctly. 
31908
31909         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31910         merely ConvertImplicit.
31911
31912 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31913
31914         * typemanager.cs: Make the LookupTypeContainer function static,
31915         and not per-instance.  
31916
31917         * class.cs: Make static FindMembers (the one that takes a Type
31918         argument). 
31919
31920         * codegen.cs: Add EmitForeach here.
31921
31922         * cs-parser.jay: Make foreach a toplevel object instead of the
31923         inline expansion, as we need to perform semantic analysis on it. 
31924
31925 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31926
31927         * expression.cs (Expression::ImplicitUserConversion): Rename to
31928         UserDefinedConversion.
31929
31930         (Expression::UserDefinedConversion): Take an extra argument specifying 
31931         whether we look for explicit user conversions too.
31932
31933         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31934
31935         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31936
31937         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31938         with the appropriate arguments.
31939
31940         * cs-parser.jay (cast_expression): Record location too.
31941
31942         * expression.cs (Cast): Record location info.
31943
31944         (Expression::ConvertExplicit): Take location argument.
31945
31946         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31947         to determine if we are doing explicit conversions.
31948
31949         (UserCast::Emit): Update accordingly.
31950
31951         (Expression::ConvertExplicit): Report an error if everything fails.
31952
31953         * ../errors/cs0030.cs : Add.
31954
31955 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31956
31957         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31958         virtual and newslot bits. 
31959
31960         * class.cs (TypeContainer::RegisterRequiredImplementations):
31961         Record methods we need.
31962
31963         (TypeContainer::MakeKey): Helper function to make keys for
31964         MethodBases, since the Methodbase key is useless.
31965
31966         (TypeContainer::Populate): Call RegisterRequiredImplementations
31967         before defining the methods.   
31968
31969         Create a mapping for method_builders_to_methods ahead of time
31970         instead of inside a tight loop.
31971
31972         (::RequireMethods):  Accept an object as the data to set into the
31973         hashtable so we can report interface vs abstract method mismatch.
31974
31975 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31976
31977         * report.cs: Make all of it static.
31978
31979         * rootcontext.cs: Drop object_type and value_type computations, as
31980         we have those in the TypeManager anyways.
31981
31982         Drop report instance variable too, now it is a global.
31983
31984         * driver.cs: Use try/catch on command line handling.
31985
31986         Add --probe option to debug the error reporting system with a test
31987         suite. 
31988
31989         * report.cs: Add support for exiting program when a probe
31990         condition is reached.
31991
31992 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31993
31994         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31995         we do a forcible conversion regardless of type, to check if 
31996         ForceConversion returns a null.
31997
31998         (Binary::error19): Use location to report error.
31999
32000         (Unary::error23): Use location here too.
32001
32002         * ../errors/cs0019.cs : Check in.
32003
32004         * ../errors/cs0023.cs : Check in.
32005
32006         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
32007         case of a non-null MethodInfo object with a length of 0 !
32008
32009         (Binary::ResolveOperator): Flag error if overload resolution fails to find
32010         an applicable member - according to the spec :-)
32011         Also fix logic to find members in base types.
32012
32013         (Unary::ResolveOperator): Same here.
32014
32015         (Unary::report23): Change name to error23 and make first argument a TypeContainer
32016         as I was getting thoroughly confused between this and error19 :-)
32017
32018         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
32019         (::FindMostEncompassedType): Implement.
32020         (::FindMostEncompassingType): Implement.
32021         (::StandardConversionExists): Implement.
32022
32023         (UserImplicitCast): Re-vamp. We now need info about most specific
32024         source and target types so that we can do the necessary conversions.
32025
32026         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
32027         mathematical union with no duplicates.
32028
32029 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
32030
32031         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
32032         in order from base classes to child classes, so that we can in
32033         child classes look up in our parent for method names and
32034         attributes (required for handling abstract, virtual, new, override
32035         constructs: we need to instrospect our base class, and if we dont
32036         populate the classes in order, the introspection might be
32037         incorrect.  For example, a method could query its parent before
32038         the parent has any methods and would determine that the parent has
32039         no abstract methods (while it could have had them)).
32040
32041         (RootContext::CreateType): Record the order in which we define the
32042         classes.
32043
32044 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
32045
32046         * class.cs (TypeContainer::Populate): Also method definitions can
32047         fail now, keep track of this.
32048
32049         (TypeContainer::FindMembers): Implement support for
32050         DeclaredOnly/noDeclaredOnly flag.
32051
32052         (Constructor::Emit) Return the ConstructorBuilder.
32053
32054         (Method::Emit) Return the MethodBuilder. 
32055         Check for abstract or virtual methods to be public.
32056
32057         * rootcontext.cs (RootContext::CreateType): Register all the
32058         abstract methods required for the class to be complete and the
32059         interface methods that must be implemented. 
32060
32061         * cs-parser.jay: Report error 501 (method requires body if it is
32062         not marked abstract or extern).
32063
32064         * expression.cs (TypeOf::Emit): Implement.
32065
32066         * typemanager.cs: runtime_handle_type, new global type.
32067
32068         * class.cs (Property::Emit): Generate code for properties.
32069
32070 2001-10-02  Ravi Pratap  <ravi@ximian.com>
32071
32072         * expression.cs (Unary::ResolveOperator): Find operators on base type
32073         too - we now conform exactly to the spec.
32074
32075         (Binary::ResolveOperator): Same here.
32076
32077         * class.cs (Operator::Define): Fix minor quirk in the tests.
32078
32079         * ../errors/cs0215.cs : Added.
32080
32081         * ../errors/cs0556.cs : Added.
32082
32083         * ../errors/cs0555.cs : Added.
32084
32085 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
32086
32087         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
32088         single integer which is really efficient
32089
32090 2001-10-01  Ravi Pratap  <ravi@ximian.com>
32091
32092         *  expression.cs (Expression::ImplicitUserConversion): Use location
32093         even in the case when we are examining True operators.
32094  
32095         * class.cs (Operator::Define): Perform extensive checks to conform
32096         with the rules for operator overloading in the spec.
32097
32098         * expression.cs (Expression::ImplicitReferenceConversion): Implement
32099         some of the other conversions mentioned in the spec.
32100
32101         * typemanager.cs (array_type): New static member for the System.Array built-in
32102         type.
32103
32104         (cloneable_interface): For System.ICloneable interface.
32105
32106         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
32107         we start resolving the tree and populating types.
32108
32109         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
32110  
32111 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
32112
32113         * expression.cs (Expression::ExprClassFromMemberInfo,
32114         Expression::Literalize): Create literal expressions from
32115         FieldInfos which are literals.
32116
32117         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
32118         type casts, because they were wrong.  The test suite in tests
32119         caught these ones.
32120
32121         (ImplicitNumericConversion): ushort to ulong requires a widening
32122         cast. 
32123
32124         Int32 constant to long requires widening cast as well.
32125
32126         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
32127         for integers because the type on the stack is not i4.
32128
32129 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
32130
32131         * expression.cs (report118): require location argument. 
32132
32133         * parameter.cs: Do not dereference potential null value.
32134
32135         * class.cs: Catch methods that lack the `new' keyword when
32136         overriding a name.  Report warnings when `new' is used without
32137         anything being there to override.
32138
32139         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
32140
32141         * class.cs: Only add constructor to hashtable if it is non-null
32142         (as now constructors can fail on define).
32143
32144         (TypeManager, Class, Struct): Take location arguments.
32145
32146         Catch field instance initialization in structs as errors.
32147
32148         accepting_filter: a new filter for FindMembers that is static so
32149         that we dont create an instance per invocation.
32150
32151         (Constructor::Define): Catch errors where a struct constructor is
32152         parameterless 
32153
32154         * cs-parser.jay: Pass location information for various new
32155         constructs. 
32156
32157         * delegate.cs (Delegate): take a location argument.
32158
32159         * driver.cs: Do not call EmitCode if there were problesm in the
32160         Definition of the types, as many Builders wont be there. 
32161
32162         * decl.cs (Decl::Decl): Require a location argument.
32163
32164         * cs-tokenizer.cs: Handle properly hex constants that can not fit
32165         into integers, and find the most appropiate integer for it.
32166
32167         * literal.cs: Implement ULongLiteral.
32168
32169         * rootcontext.cs: Provide better information about the location of
32170         failure when CreateType fails.
32171
32172 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
32173
32174         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
32175         as well.
32176
32177         * expression.cs (Binary::CheckShiftArguments): Add missing type
32178         computation.
32179         (Binary::ResolveOperator): Add type to the logical and and logical
32180         or, Bitwise And/Or and Exclusive Or code paths, it was missing
32181         before.
32182
32183         (Binary::DoNumericPromotions): In the case where either argument
32184         is ulong (and most signed types combined with ulong cause an
32185         error) perform implicit integer constant conversions as well.
32186
32187 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
32188
32189         * expression.cs (UserImplicitCast): Method should always be
32190         non-null. 
32191         (Invocation::BetterConversion): Simplified test for IntLiteral.
32192
32193         (Expression::ImplicitNumericConversion): Split this routine out.
32194         Put the code that performs implicit constant integer conversions
32195         here. 
32196
32197         (Expression::Resolve): Become a wrapper around DoResolve so we can
32198         check eclass and type being set after resolve.
32199
32200         (Invocation::Badness): Remove this dead function
32201
32202         (Binary::ResolveOperator): Do not compute the expensive argumnets
32203         unless we have a union for it.
32204
32205         (Probe::Emit): Is needs to do an isinst and then
32206         compare against null.
32207
32208         (::CanConvert): Added Location argument.  If the Location argument
32209         is null (Location.Null), then we do not report errors.  This is
32210         used by the `probe' mechanism of the Explicit conversion.  We do
32211         not want to generate an error for something that the user
32212         explicitly requested to be casted.  But the pipeline for an
32213         explicit cast first tests for potential implicit casts.
32214
32215         So for now, if the Location is null, it means `Probe only' to
32216         avoid adding another argument.   Might have to revise this
32217         strategy later.
32218
32219         (ClassCast): New class used to type cast objects into arbitrary
32220         classes (used in Explicit Reference Conversions).
32221
32222         Implement `as' as well.
32223
32224         Reverted all the patches from Ravi below: they were broken:
32225
32226                 * The use of `level' as a mechanism to stop recursive
32227                   invocations is wrong.  That was there just to catch the
32228                   bug with a strack trace but not as a way of addressing
32229                   the problem.
32230
32231                   To fix the problem we have to *understand* what is going
32232                   on and the interactions and come up with a plan, not
32233                   just get things going.
32234
32235                 * The use of the type conversion cache that I proposed
32236                   last night had an open topic: How does this work across
32237                   protection domains.  A user defined conversion might not
32238                   be public in the location where we are applying the
32239                   conversion, a different conversion might be selected
32240                   (ie, private A->B (better) but public B->A (worse),
32241                   inside A, A->B applies, but outside it, B->A will
32242                   apply).
32243
32244                 * On top of that (ie, even if the above is solved),
32245                   conversions in a cache need to be abstract.  Ie, `To
32246                   convert from an Int to a Short use an OpcodeCast', not
32247                   `To convert from an Int to a Short use the OpcodeCast on
32248                   the variable 5' (which is what this patch was doing).
32249
32250 2001-09-28  Ravi Pratap  <ravi@ximian.com>
32251
32252         * expression.cs (Invocation::ConversionExists): Re-write to use
32253         the conversion cache
32254
32255         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
32256         cache all conversions done, not just user-defined ones.
32257
32258         (Invocation::BetterConversion): The real culprit. Use ConversionExists
32259         to determine if a conversion exists instead of acutually trying to 
32260         perform the conversion. It's faster too.
32261
32262         (Expression::ConvertExplicit): Modify to use ConversionExists to check
32263         and only then attempt the implicit conversion.
32264
32265 2001-09-28  Ravi Pratap  <ravi@ximian.com>
32266
32267         * expression.cs (ConvertImplicit): Use a cache for conversions
32268         already found. Check level of recursion and bail out if necessary.
32269
32270 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
32271
32272         * typemanager.cs (string_concat_string_string, string_concat_object_object):
32273         Export standard methods that we expect for string operations.
32274
32275         * statement.cs (Block::UsageWarning): Track usage of variables and
32276         report the errors for not used variables.
32277
32278         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
32279         operator. 
32280
32281 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32282
32283         * codegen.cs: remove unnneded code 
32284
32285         * expression.cs: Removed BuiltinTypeAccess class
32286
32287         Fix the order in which implicit conversions are
32288         done.  
32289
32290         The previous fixed dropped support for boxed conversions (adding a
32291         test to the test suite now)
32292
32293         (UserImplicitCast::CanConvert): Remove test for source being null,
32294         that code is broken.  We should not feed a null to begin with, if
32295         we do, then we should track the bug where the problem originates
32296         and not try to cover it up here.
32297
32298         Return a resolved expression of type UserImplicitCast on success
32299         rather than true/false.  Ravi: this is what I was talking about,
32300         the pattern is to use a static method as a "constructor" for
32301         objects. 
32302
32303         Also, do not create arguments until the very last minute,
32304         otherwise we always create the arguments even for lookups that
32305         will never be performed. 
32306
32307         (UserImplicitCast::Resolve): Eliminate, objects of type
32308         UserImplicitCast are born in a fully resolved state. 
32309
32310         * typemanager.cs (InitCoreTypes): Init also value_type
32311         (System.ValueType). 
32312
32313         * expression.cs (Cast::Resolve): First resolve the child expression.
32314
32315         (LValue): Add new method AddressOf to be used by
32316         the `&' operator.  
32317
32318         Change the argument of Store to take an EmitContext instead of an
32319         ILGenerator, because things like FieldExpr need to be able to call
32320         their children expression to generate the instance code. 
32321
32322         (Expression::Error, Expression::Warning): Sugar functions for
32323         reporting errors.
32324
32325         (Expression::MemberLookup): Accept a TypeContainer instead of a
32326         Report as the first argument.
32327
32328         (Expression::ResolvePrimary): Killed.  I still want to improve
32329         this as currently the code is just not right.
32330
32331         (Expression::ResolveMemberAccess): Simplify, but it is still
32332         wrong. 
32333
32334         (Unary::Resolve): Catch errors in AddressOf operators.
32335
32336         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
32337         index to a byte for the short-version, or the compiler will choose
32338         the wrong Emit call, which generates the wrong data.
32339
32340         (ParameterReference::Emit, ::Store): same.
32341
32342         (FieldExpr::AddressOf): Implement.
32343
32344         * typemanager.cs: TypeManager: made public variable instead of
32345         property.
32346
32347         * driver.cs: document --fatal.
32348
32349         * report.cs (ErrorMessage, WarningMessage): new names for the old
32350         Error and Warning classes.
32351
32352         * cs-parser.jay (member_access): Turn built-in access to types
32353         into a normal simplename
32354
32355 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32356
32357         * expression.cs (Invocation::BetterConversion): Fix to cope
32358         with q being null, since this was introducing a bug.
32359
32360         * expression.cs (ConvertImplicit): Do built-in conversions first.
32361
32362 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32363
32364         * expression.cs (UserImplicitCast::Resolve): Fix bug.
32365
32366 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32367
32368         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
32369         I had introduced long ago (what's new ?).
32370
32371         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
32372         the work of all the checking. 
32373         (ConvertImplicit): Call CanConvert and only then create object if necessary.
32374         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
32375
32376         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
32377         that is the right way. 
32378
32379         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
32380         overloading resolution. Use everywhere instead of cutting and pasting code.
32381
32382         (Binary::ResolveOperator): Use MakeUnionSet.
32383
32384         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
32385         we have to convert to bool types. Not complete yet.
32386
32387 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32388
32389         * typemanager.cs (TypeManager::CSharpName): support ushort.
32390
32391         * expression.cs (Expression::TryImplicitIntConversion): Attempts
32392         to provide an expression that performsn an implicit constant int
32393         conversion (section 6.1.6).
32394         (Expression::ConvertImplicitRequired): Reworked to include
32395         implicit constant expression conversions.
32396
32397         (Expression::ConvertNumericExplicit): Finished.
32398
32399         (Invocation::Emit): If InstanceExpression is null, then it means
32400         that we perform a call on this.
32401
32402 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32403
32404         * expression.cs (Unary::Emit): Remove some dead code.
32405         (Probe): Implement Resolve and Emit for `is'.
32406         (Expression::ConvertImplicitRequired): Attempt to do constant
32407         expression conversions here.  Maybe should be moved to
32408         ConvertImplicit, but I am not sure.
32409         (Expression::ImplicitLongConstantConversionPossible,
32410         Expression::ImplicitIntConstantConversionPossible): New functions
32411         that tell whether is it possible to apply an implicit constant
32412         expression conversion.
32413
32414         (ConvertNumericExplicit): Started work on explicit numeric
32415         conversions.
32416
32417         * cs-parser.jay: Update operator constants.
32418
32419         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
32420         (Parameters::GetSignature): Hook up VerifyArgs here.
32421         (Parameters::VerifyArgs): Verifies that no two arguments have the
32422         same name. 
32423
32424         * class.cs (Operator): Update the operator names to reflect the
32425         ones that the spec expects (as we are just stringizing the
32426         operator names).
32427
32428         * expression.cs (Unary::ResolveOperator): Fix bug: Use
32429         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
32430         previous usage did only work for our methods.
32431         (Expression::ConvertImplicit): Handle decimal implicit numeric
32432         conversions as well.
32433         (Expression::InternalTypeConstructor): Used to invoke constructors
32434         on internal types for default promotions.
32435
32436         (Unary::Emit): Implement special handling for the pre/post
32437         increment/decrement for overloaded operators, as they need to have
32438         the same semantics as the other operators.
32439
32440         (Binary::ResolveOperator): ditto.
32441         (Invocation::ConversionExists): ditto.
32442         (UserImplicitCast::Resolve): ditto.
32443
32444 2001-09-26  Ravi Pratap  <ravi@ximian.com>
32445
32446         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
32447         operator, return after emitting body. Regression tests pass again !
32448
32449         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
32450         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
32451         (Invocation::OverloadResolve): Ditto.
32452         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
32453
32454         * everywhere : update calls to the above methods accordingly.
32455
32456 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32457
32458         * assign.cs (Assign): Make it inherit from ExpressionStatement.
32459
32460         * expression.cs (ExpressionStatement): New base class used for
32461         expressions that can appear in statements, so that we can provide
32462         an alternate path to generate expression that do not leave a value
32463         on the stack.
32464
32465         (Expression::Emit, and all the derivatives): We no longer return
32466         whether a value is left on the stack or not.  Every expression
32467         after being emitted leaves a single value on the stack.
32468
32469         * codegen.cs (EmitContext::EmitStatementExpression): Use the
32470         facilties of ExpressionStatement if possible.
32471
32472         * cs-parser.jay: Update statement_expression.
32473
32474 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
32475
32476         * driver.cs: Change the wording of message
32477
32478 2001-09-25  Ravi Pratap  <ravi@ximian.com>
32479
32480         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
32481         the type of the expression to the return type of the method if
32482         we have an overloaded operator match ! The regression tests pass again !
32483         (Unary::ResolveOperator): Ditto.
32484
32485         * expression.cs (Invocation::ConversionExists): Correct the member lookup
32486         to find "op_Implicit", not "implicit" ;-)
32487         (UserImplicitCast): New class to take care of user-defined implicit conversions.
32488         (ConvertImplicit, ForceConversion): Take TypeContainer argument
32489
32490         * everywhere : Correct calls to the above accordingly.
32491
32492         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
32493         (ConvertImplicit): Do user-defined conversion if it exists.
32494
32495 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
32496
32497         * assign.cs: track location.
32498         (Resolve): Use implicit conversions on assignment.
32499
32500         * literal.cs: Oops.  Not good, Emit of short access values should
32501         pass (Bytes) or the wrong argument will be selected.
32502
32503         * expression.cs (Unary::Emit): Emit code for -expr.
32504
32505         (Unary::ResolveOperator): Handle `Substract' for non-constants
32506         (substract from zero from the non-constants).
32507         Deal with Doubles as well. 
32508
32509         (Expression::ConvertImplicitRequired): New routine that reports an
32510         error if no implicit conversion exists. 
32511
32512         (Invocation::OverloadResolve): Store the converted implicit
32513         expressions if we make them
32514
32515 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32516
32517         * class.cs (ConstructorInitializer): Take a Location argument.
32518         (ConstructorBaseInitializer): Same here.
32519         (ConstructorThisInitializer): Same here.
32520
32521         * cs-parser.jay : Update all calls accordingly.
32522
32523         * expression.cs (Unary, Binary, New): Take location argument.
32524         Update accordingly everywhere.
32525
32526         * cs-parser.jay : Update all calls to the above to take a location
32527         argument.
32528
32529         * class.cs : Ditto.
32530
32531 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32532
32533         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
32534         (Invocation::BetterConversion): Same here
32535         (Invocation::ConversionExists): Ditto.
32536
32537         (Invocation::ConversionExists): Implement.
32538
32539 2001-09-22  Ravi Pratap  <ravi@ximian.com>
32540
32541         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
32542         Also take an additional TypeContainer argument.
32543
32544         * All over : Pass in TypeContainer as argument to OverloadResolve.
32545
32546         * typemanager.cs (CSharpName): Update to check for the string type and return
32547         that too.
32548
32549         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
32550         a given method.
32551
32552 2001-09-21  Ravi Pratap  <ravi@ximian.com>
32553
32554         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
32555         (Invocation::BetterFunction): Implement.
32556         (Invocation::BetterConversion): Implement.
32557         (Invocation::ConversionExists): Skeleton, no implementation yet.
32558
32559         Okay, things work fine !
32560
32561 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
32562
32563         * typemanager.cs: declare and load enum_type, delegate_type and
32564         void_type. 
32565
32566         * expression.cs (Expression::Emit): Now emit returns a value that
32567         tells whether a value is left on the stack or not.  This strategy
32568         might be reveted tomorrow with a mechanism that would address
32569         multiple assignments.
32570         (Expression::report118): Utility routine to report mismatches on
32571         the ExprClass.
32572
32573         (Unary::Report23): Report impossible type/operator combination
32574         utility function.
32575
32576         (Unary::IsIncrementableNumber): Whether the type can be
32577         incremented or decremented with add.
32578         (Unary::ResolveOperator): Also allow enumerations to be bitwise
32579         complemented. 
32580         (Unary::ResolveOperator): Implement ++, !, ~,
32581
32582         (Invocation::Emit): Deal with new Emit convetion.
32583
32584         * All Expression derivatives: Updated their Emit method to return
32585         whether they leave values on the stack or not.
32586
32587         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
32588         stack for expressions that are statements. 
32589
32590 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32591
32592         * expression.cs (LValue): New interface.  Must be implemented by
32593         LValue objects.
32594         (LocalVariableReference, ParameterReference, FieldExpr): Implement
32595         LValue interface.
32596
32597         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
32598         interface for generating code, simplifies the code.
32599
32600 2001-09-20  Ravi Pratap  <ravi@ximian.com>
32601
32602         * expression.cs (everywhere): Comment out return statements in ::Resolve
32603         methods to avoid the warnings.
32604
32605 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32606
32607         * driver.cs (parse): Report error 2001 if we can not open the
32608         source file.
32609
32610         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
32611         not resolve it.
32612
32613         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
32614         object. 
32615
32616         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32617         otherwise nested blocks end up with the same index.
32618
32619         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32620
32621         * expression.cs:  Instead of having FIXMEs in the Resolve
32622         functions, throw exceptions so it is obvious that we are facing a
32623         bug. 
32624
32625         * cs-parser.jay (invocation_expression): Pass Location information.
32626
32627         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32628         Use a basename for those routines because .NET does not like paths
32629         on them. 
32630
32631         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32632         already defined.
32633
32634 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32635
32636         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32637         are loading the correct data types (throws an exception if not).
32638         (TypeManager::InitCoreTypes): Use CoreLookupType
32639
32640         * expression.cs (Unary::ResolveOperator): return the child
32641         expression for expressions which are just +expr.
32642         (Unary::ResolveOperator): Return negative literals for -LITERAL
32643         expressions (otherwise they are Unary {Literal}).
32644         (Invocation::Badness): Take into account `Implicit constant
32645         expression conversions'.
32646
32647         * literal.cs (LongLiteral): Implement long literal class.
32648         (IntLiteral): export the `Value' of the intliteral. 
32649
32650 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32651
32652         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32653
32654         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32655         instead of 'Operator'
32656
32657         * expression.cs (Binary::ResolveOperator): Update accordingly.
32658         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32659         and 'Minus'
32660
32661         * cs-parser.jay (unary_expression): Update to use the new names.
32662
32663         * gen-treedump.cs (GetUnary): Same here.
32664
32665         * expression.cs (Unary::Resolve): Implement.
32666         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32667         operators are found instead of making noise ;-)
32668         (Unary::ResolveOperator): New method to do precisely the same thing which
32669         Binary::ResolveOperator does for Binary expressions.
32670         (Unary.method, .Arguments): Add.
32671         (Unary::OperName): Implement.   
32672         (Unary::ForceConversion): Copy and Paste !
32673
32674         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32675         a unary operator.
32676
32677         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32678         for the inbuilt operators. Only overloading works for now ;-)
32679
32680 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32681
32682         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32683         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32684
32685         * expression.cs (This::Emit): Implement. 
32686         (This::Resolve): Implement.
32687         (TypeOf:Resolve): Implement.
32688         (Expression::ResolveSimpleName): Add an implicit this to instance
32689         field references. 
32690         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32691         Bind instance variable to Field expressions.
32692         (FieldExpr::Instance): New field used to track the expression that
32693         represents the object instance.
32694         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32695         binding 
32696         (FieldExpr::Emit): Implement.
32697
32698         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32699         the last instruction contains a return opcode to avoid generating
32700         the last `ret' instruction (this generates correct code, and it is
32701         nice to pass the peverify output).
32702
32703         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32704         initializer for static and instance variables.
32705         (Constructor::Emit): Allow initializer to be null in the case of
32706         static constructors.  Only emit initializer for instance
32707         constructors. 
32708
32709         (TypeContainer::FindMembers): Return a null array if there are no
32710         matches.
32711
32712         Also fix the code for the MemberTypes.Method branch, as it was not
32713         scanning that for operators (or tried to access null variables before).
32714
32715         * assign.cs (Assign::Emit): Handle instance and static fields. 
32716
32717         * TODO: Updated.
32718
32719         * driver.cs: Stop compilation if there are parse errors.
32720
32721         * cs-parser.jay (constructor_declaration): Provide default base
32722         initializer for non-static constructors.
32723         (constructor_declarator): Do not provide a default base
32724         initializers if none was specified.
32725         Catch the fact that constructors should not have parameters.
32726
32727         * class.cs: Do not emit parent class initializers for static
32728         constructors, that should be flagged as an error.
32729
32730 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32731
32732         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32733         Move back code into TypeContainer::Populate.
32734
32735 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32736
32737         * class.cs (TypeContainer::AddConstructor): Fix the check to
32738         compare against Name, not Basename. 
32739         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32740
32741         * cs-parser.jay : Update accordingly.
32742
32743         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32744         for methods, don't forget to look into the operators too.
32745         (RegisterMethodBuilder): Helper method to take care of this for
32746         methods, constructors and operators.
32747         (Operator::Define): Completely revamp.
32748         (Operator.OperatorMethod, MethodName): New fields.
32749         (TypeContainer::Populate): Move the registering of builders into
32750         RegisterMethodBuilder.
32751         (Operator::Emit): Re-write.
32752
32753         * expression.cs (Binary::Emit): Comment out code path to emit method
32754         invocation stuff for the case when we have a user defined operator. I am
32755         just not able to get it right !
32756
32757 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32758
32759         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32760         argument. 
32761
32762         (Expression::MemberLookup): Provide a version that allows to
32763         specify the MemberTypes and BindingFlags. 
32764
32765         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32766         so it was not fetching variable information from outer blocks.
32767
32768         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32769         Beforefieldinit as it was buggy.
32770
32771         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32772         that Ravi put here.  
32773
32774         * class.cs (Constructor::Emit): Only emit if block is not null.
32775         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32776         deal with this by semantically definining it as if the user had
32777         done it.
32778
32779         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32780         constructors as we now "emit" them at a higher level.
32781
32782         (TypeContainer::DefineDefaultConstructor): Used to define the
32783         default constructors if none was provided.
32784
32785         (ConstructorInitializer): Add methods Resolve and Emit. 
32786
32787         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32788
32789 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32790
32791         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32792         the default constructor builder with our hashtable for methodbuilders
32793         to methodcores.
32794
32795         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32796         and argument_count is 0 in which case we have a match.
32797         (Binary::ResolveOperator): More null checking and miscellaneous coding
32798         style cleanup.
32799
32800 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32801
32802         * rootcontext.cs (IsNameSpace): Compare against null.
32803
32804         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32805
32806         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32807         and Unary::Operator.
32808
32809         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32810         accordingly.
32811
32812         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32813         we have overloaded operators.
32814         (Binary::ResolveOperator): Implement the part which does the operator overload
32815         resolution.
32816
32817         * class.cs (Operator::Emit): Implement.
32818         (TypeContainer::Emit): Emit the operators we have too.
32819
32820         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32821         the case when we have a user-defined operator.
32822
32823 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32824
32825         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32826
32827 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32828
32829         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32830         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32831         (Constructor::Emit): Implement.
32832         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32833         if we have no work to do. 
32834         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32835         Emit method.
32836
32837         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32838         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32839
32840         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32841         of parent.parent.
32842
32843 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32844
32845         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32846         in the source.
32847         (Tree::RecordNamespace): Method to do what the name says ;-)
32848         (Tree::Namespaces): Property to get at the namespaces hashtable.
32849
32850         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32851         keep track.
32852
32853         * rootcontext.cs (IsNamespace): Fixed it :-)
32854
32855 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32856
32857         * class.cs (TypeContainer::FindMembers): Add support for
32858         constructors. 
32859         (MethodCore): New class that encapsulates both the shared aspects
32860         of a Constructor and a Method.  
32861         (Method, Constructor): Factored pieces into MethodCore.
32862
32863         * driver.cs: Added --fatal which makes errors throw exceptions.
32864         Load System assembly as well as part of the standard library.
32865
32866         * report.cs: Allow throwing exceptions on errors for debugging.
32867
32868         * modifiers.cs: Do not use `parent', instead use the real type
32869         container to evaluate permission settings.
32870
32871         * class.cs: Put Ravi's patch back in.  He is right, and we will
32872         have to cope with the
32873
32874 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32875
32876         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32877         FamORAssem, not FamANDAssem.
32878
32879 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32880
32881         * driver.cs: Added --parse option that only parses its input files
32882         and terminates.
32883
32884         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32885         incorrect.  IsTopLevel is not used to tell whether an object is
32886         root_types or not (that can be achieved by testing this ==
32887         root_types).  But to see if this is a top-level *class* (not
32888         necessarly our "toplevel" container). 
32889
32890 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32891
32892         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32893         parent instead of a direct call to GetType.
32894
32895 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32896
32897         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32898         Modifiers.TypeAttr. This should just be a call to that method.
32899
32900         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32901         object so that we can determine if we are top-level or not.
32902
32903         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32904         TypeContainer too.
32905
32906         * enum.cs (Enum::Define): Ditto.
32907
32908         * modifiers.cs (FieldAttr): Re-write.
32909
32910         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32911         (TypeContainer::HaveStaticConstructor): New property to provide access
32912         to precisely that info.
32913
32914         * modifiers.cs (MethodAttr): Re-write.
32915         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32916
32917         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32918         of top-level types as claimed.
32919
32920 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32921
32922         * expression.cs (MemberLookup): Fruitless attempt to lookup
32923         constructors.  Maybe I need to emit default constructors?  That
32924         might be it (currently .NET emits this for me automatically).
32925         (Invocation::OverloadResolve): Cope with Arguments == null.
32926         (Invocation::EmitArguments): new function, shared by the new
32927         constructor and us.
32928         (Invocation::Emit): Handle static and instance methods.  Emit
32929         proper call instruction for virtual or non-virtual invocations.
32930         (New::Emit): Implement.
32931         (New::Resolve): Implement.
32932         (MemberAccess:Resolve): Implement.
32933         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32934         to track instances.
32935         (FieldExpr::Resolve): Set type.
32936
32937         * support.cs: Handle empty arguments.
32938                 
32939         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32940         SimpleLookup): Auxiliary routines to help parse a qualifier
32941         identifier.  
32942
32943         Update qualifier_identifier rule.
32944
32945         * codegen.cs: Removed debugging messages.
32946
32947         * class.cs: Make this a global thing, this acts just as a "key" to
32948         objects that we might have around.
32949
32950         (Populate): Only initialize method_builders_to_methods once.
32951
32952         * expression.cs (PropertyExpr): Initialize type from the
32953         PropertyType. 
32954
32955         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32956         Resolve pattern.  Attempt to implicitly convert value to boolean.
32957         Emit code.
32958
32959         * expression.cs: Set the type for the int32/int32 argument case.
32960         (Binary::ResolveOperator): Set the return type to boolean for
32961         comparission operators
32962
32963         * typemanager.cs: Remove debugging print code.
32964
32965         (Invocation::Resolve): resolve type.
32966
32967         * class.cs: Allocate a MemberInfo of the correct size, as the code
32968         elsewhere depends on the test to reflect the correct contents.
32969
32970         (Method::) Keep track of parameters, due to System.Reflection holes
32971
32972         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32973         mapping here.
32974
32975         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32976         of the exact size and return that.
32977
32978         (Class::LookupMethodByBuilder): New function that maps
32979         MethodBuilders to its methods.  Required to locate the information
32980         on methods because System.Reflection bit us again.
32981
32982         * support.cs: New file, contains an interface ParameterData and
32983         two implementations: ReflectionParameters and InternalParameters
32984         used to access Parameter information.  We will need to grow this
32985         as required.
32986
32987         * expression.cs (Invocation::GetParameterData): implement a cache
32988         and a wrapper around the ParameterData creation for methods. 
32989         (Invocation::OverloadResolve): Use new code.
32990
32991 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32992
32993         * class.cs (TypeContainer::EmitField): Remove and move into 
32994         (Field::Define): here and modify accordingly.
32995         (Field.FieldBuilder): New member.
32996         (TypeContainer::Populate): Update accordingly.
32997         (TypeContainer::FindMembers): Implement.
32998
32999 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
33000
33001         * statement.cs: (VariableInfo::VariableType): New field to be
33002         initialized with the full type once it is resolved. 
33003
33004 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
33005
33006         * parameter.cs (GetParameterInfo): Use a type cache to compute
33007         things only once, and to reuse this information
33008
33009         * expression.cs (LocalVariableReference::Emit): Implement.
33010         (OpcodeCast::Emit): fix.
33011
33012         (ParameterReference::Resolve): Implement.
33013         (ParameterReference::Emit): Implement.
33014
33015         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
33016         that are expressions need to stay as Expressions.
33017
33018         * typemanager.cs (CSharpName): Returns the C# name of a type if
33019         possible. 
33020
33021         * expression.cs (Expression::ConvertImplicit): New function that
33022         implements implicit type conversions.
33023
33024         (Expression::ImplicitReferenceConversion): Implements implicit
33025         reference conversions.
33026
33027         (EmptyCast): New type for transparent casts.
33028
33029         (OpcodeCast): New type for casts of types that are performed with
33030         a sequence of bytecodes.
33031
33032         (BoxedCast): New type used for casting value types into reference
33033         types.  Emits a box opcode.
33034
33035         (Binary::DoNumericPromotions): Implements numeric promotions of
33036         and computation of the Binary::Type.
33037
33038         (Binary::EmitBranchable): Optimization.
33039
33040         (Binary::Emit): Implement code emission for expressions.
33041
33042         * typemanager.cs (TypeManager): Added two new core types: sbyte
33043         and byte.
33044
33045 2001-09-12  Ravi Pratap  <ravi@ximian.com>
33046
33047         * class.cs (TypeContainer::FindMembers): Method which does exactly
33048         what Type.FindMembers does, only we don't have to use reflection. No
33049         implementation yet.
33050
33051         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
33052         typecontainer objects as we need to get at them.
33053         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
33054
33055         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
33056         typecontainer object.
33057
33058         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
33059         of just a Report object.
33060
33061 2001-09-11  Ravi Pratap  <ravi@ximian.com>
33062
33063         * class.cs (Event::Define): Go back to using the prefixes "add_" and
33064         "remove_"
33065         (TypeContainer::Populate): Now define the delegates of the type too.
33066         (TypeContainer.Delegates): Property to access the list of delegates defined
33067         in the type.
33068
33069         * delegates.cs (Delegate::Define): Implement partially.
33070
33071         * modifiers.cs (TypeAttr): Handle more flags.
33072
33073 2001-09-11  Ravi Pratap  <ravi@ximian.com>
33074
33075         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
33076         and not <=
33077         (Operator::Define): Re-write logic to get types by using the LookupType method
33078         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
33079         (Indexer::Define): Ditto.
33080         (Event::Define): Ditto.
33081         (Property::Define): Ditto.
33082
33083 2001-09-10  Ravi Pratap  <ravi@ximian.com>
33084
33085         * class.cs (TypeContainer::Populate): Now define operators too. 
33086         (TypeContainer.Operators): New property to access the list of operators
33087         in a type.
33088         (Operator.OperatorMethodBuilder): New member to hold the method builder
33089         for the operator we are defining.
33090         (Operator::Define): Implement.
33091
33092 2001-09-10  Ravi Pratap  <ravi@ximian.com>
33093
33094         * class.cs (Event::Define): Make the prefixes of the accessor methods
33095         addOn_ and removeOn_ 
33096
33097         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
33098         of the location being passed in too. Ideally, this should go later since all
33099         error reporting should be done through the Report object.
33100
33101         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
33102         (Populate): Iterate thru the indexers we have and define them too.
33103         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
33104         for the get and set accessors.
33105         (Indexer::Define): Implement.
33106
33107 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
33108
33109         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
33110         my previous implementation, did not work.
33111
33112         * typemanager.cs: Add a couple of missing types (the longs).
33113
33114         * literal.cs: Use TypeManager.bool_type instead of getting it.
33115
33116         * expression.cs (EventExpr): New kind of expressions.
33117         (Expressio::ExprClassFromMemberInfo): finish
33118
33119 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
33120
33121         * assign.cs: Emit stores to static fields differently.
33122
33123 2001-09-08  Ravi Pratap  <ravi@ximian.com>
33124
33125         * Merge in changes and adjust code to tackle conflicts. Backed out my
33126         code in Assign::Resolve ;-) 
33127
33128 2001-09-08  Ravi Pratap  <ravi@ximian.com>
33129
33130         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
33131         instead Report.Error and also pass in the location.
33132         (CSharpParser::Lexer): New readonly property to return the reference
33133         to the Tokenizer object.
33134         (declare_local_variables): Use Report.Error with location instead of plain 
33135         old error.
33136         (CheckDef): Ditto.
33137
33138         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
33139         (Operator.CheckBinaryOperator): Ditto.
33140
33141         * cs-parser.jay (operator_declarator): Update accordingly.
33142
33143         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
33144         (CheckBinaryOperator): Same here.
33145
33146         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
33147         on the name without any prefixes of namespace names etc. This is because we
33148         already might have something already fully qualified like 
33149         'System.Console.WriteLine'
33150
33151         * assign.cs (Resolve): Begin implementation. Stuck ;-)
33152
33153 2001-09-07  Ravi Pratap  <ravi@ximian.com>
33154
33155         * cs-tokenizer.cs (location): Return a string which also contains
33156         the file name.
33157
33158         * expression.cs (ElementAccess): New class for expressions of the
33159         type 'element access.'
33160         (BaseAccess): New class for expressions of the type 'base access.'
33161         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
33162         respectively.
33163
33164         * cs-parser.jay (element_access): Implement action.
33165         (base_access): Implement actions.
33166         (checked_expression, unchecked_expression): Implement.
33167
33168         * cs-parser.jay (local_variable_type): Correct and implement.
33169         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
33170
33171         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
33172
33173         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
33174         name and the specifiers.
33175
33176         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
33177
33178         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
33179         making them all public ;-)
33180
33181         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
33182         class anyways.
33183
33184 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
33185
33186         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
33187         PropertyExprs.
33188         (FieldExpr, PropertyExprs): New resolved expressions.
33189         (SimpleName::MemberStaticCheck): Perform static checks for access
33190         to non-static fields on static methods. Maybe this should be
33191         generalized for MemberAccesses. 
33192         (SimpleName::ResolveSimpleName): More work on simple name
33193         resolution. 
33194
33195         * cs-parser.jay (primary_expression/qualified_identifier): track
33196         the parameter index.
33197
33198         * codegen.cs (CodeGen::Save): Catch save exception, report error.
33199         (EmitContext::EmitBoolExpression): Chain to expression generation
33200         instead of temporary hack.
33201         (::EmitStatementExpression): Put generic expression code generation.
33202
33203         * assign.cs (Assign::Emit): Implement variable assignments to
33204         local variables, parameters and fields.
33205
33206 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
33207
33208         * statement.cs (Block::GetVariableInfo): New method, returns the
33209         VariableInfo for a variable name in a block.
33210         (Block::GetVariableType): Implement in terms of GetVariableInfo
33211
33212         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
33213         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
33214
33215 2001-09-06  Ravi Pratap  <ravi@ximian.com>
33216
33217         * cs-parser.jay (operator_declaration): Continue on my quest : update
33218         to take attributes argument.
33219         (event_declaration): Ditto.
33220         (enum_declaration): Ditto.
33221         (indexer_declaration): Ditto.
33222
33223         * class.cs (Operator::Operator): Update constructor accordingly.
33224         (Event::Event): Ditto.
33225
33226         * delegate.cs (Delegate::Delegate): Same here.
33227
33228         * enum.cs (Enum::Enum): Same here.
33229
33230 2001-09-05  Ravi Pratap  <ravi@ximian.com>
33231
33232         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
33233
33234         * ../tests/cs0658.cs : New file to demonstrate error 0658.
33235
33236         * attribute.cs (Attributes): New class to encapsulate all attributes which were
33237         being passed around as an arraylist.
33238         (Attributes::AddAttribute): Method to add attribute sections.
33239
33240         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
33241         (struct_declaration): Update accordingly.
33242         (constant_declaration): Update.
33243         (field_declaration): Update.
33244         (method_header): Update.
33245         (fixed_parameter): Update.
33246         (parameter_array): Ditto.
33247         (property_declaration): Ditto.
33248         (destructor_declaration): Ditto.
33249
33250         * class.cs (Struct::Struct): Update constructors accordingly.
33251         (Class::Class): Ditto.
33252         (Field::Field): Ditto.
33253         (Method::Method): Ditto.
33254         (Property::Property): Ditto.
33255         (TypeContainer::OptAttribute): update property's return type.
33256
33257         * interface.cs (Interface.opt_attributes): New member.
33258         (Interface::Interface): Update to take the extra Attributes argument.
33259
33260         * parameter.cs (Parameter::Parameter): Ditto.
33261
33262         * constant.cs (Constant::Constant): Ditto.
33263
33264         * interface.cs (InterfaceMemberBase): New OptAttributes field.
33265         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
33266         the attributes as a parameter.
33267         (InterfaceProperty): Update constructor call.
33268         (InterfaceEvent): Ditto.
33269         (InterfaceMethod): Ditto.
33270         (InterfaceIndexer): Ditto.
33271
33272         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
33273         pass the attributes too.
33274         (interface_event_declaration): Ditto.
33275         (interface_property_declaration): Ditto.
33276         (interface_method_declaration): Ditto.
33277         (interface_declaration): Ditto.
33278
33279 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
33280
33281         * class.cs (Method::Define): Track the "static Main" definition to
33282         create an entry point. 
33283
33284         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
33285         EntryPoint if we find it. 
33286
33287         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
33288         (EmitContext::ig): Make this variable public.
33289
33290         * driver.cs: Make the default output file be the first file name
33291         with the .exe extension.  
33292
33293         Detect empty compilations
33294
33295         Handle various kinds of output targets.  Handle --target and
33296         rename -t to --dumper.
33297
33298         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
33299         methods inherited from Expression return now an Expression.  This
33300         will is used during the tree rewriting as we resolve them during
33301         semantic analysis.
33302
33303         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
33304         the spec.  Missing entirely is the information about
33305         accessability of elements of it.
33306
33307         (Expression::ExprClassFromMemberInfo): New constructor for
33308         Expressions that creates a fully initialized Expression based on
33309         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
33310         a Type.
33311
33312         (Invocation::Resolve): Begin implementing resolution of invocations.
33313
33314         * literal.cs (StringLiteral):  Implement Emit.
33315
33316 2001-09-05  Ravi Pratap  <ravi@ximian.com>
33317
33318         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
33319         member.
33320
33321 2001-09-04  Ravi Pratap  <ravi@ximian.com>
33322
33323         * cs-parser.jay (attribute_arguments): Implement actions.
33324         (attribute): Fix bug in production. Implement action.
33325         (attribute_list): Implement.
33326         (attribute_target): Implement.
33327         (attribute_target_specifier, opt_target_specifier): Implement
33328         (CheckAttributeTarget): New method to check if the attribute target
33329         is valid.
33330         (attribute_section): Implement.
33331         (opt_attributes): Implement.
33332
33333         * attribute.cs : New file to handle attributes.
33334         (Attribute): Class to hold attribute info.
33335
33336         * cs-parser.jay (opt_attribute_target_specifier): Remove production
33337         (attribute_section): Modify production to use 2 different rules to 
33338         achieve the same thing. 1 s/r conflict down !
33339         Clean out commented, useless, non-reducing dimension_separator rules.
33340
33341         * class.cs (TypeContainer.attributes): New member to hold list
33342         of attributes for a type.
33343         (Struct::Struct): Modify to take one more argument, the attribute list.
33344         (Class::Class): Ditto.
33345         (Field::Field): Ditto.
33346         (Method::Method): Ditto.
33347         (Property::Property): Ditto.
33348
33349         * cs-parser.jay (struct_declaration): Update constructor call to
33350         pass in the attributes too.
33351         (class_declaration): Ditto.
33352         (constant_declaration): Ditto.
33353         (field_declaration): Ditto.
33354         (method_header): Ditto.
33355         (fixed_parameter): Ditto.
33356         (parameter_array): Ditto.
33357         (property_declaration): Ditto.
33358
33359         * constant.cs (Constant::Constant): Update constructor similarly.
33360         Use System.Collections.
33361
33362         * parameter.cs (Parameter::Parameter): Update as above.
33363
33364 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33365
33366         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
33367         (TypeContainer.delegates): New member to hold list of delegates.
33368
33369         * cs-parser.jay (delegate_declaration): Implement the action correctly 
33370         this time as I seem to be on crack ;-)
33371
33372 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
33373
33374         * rootcontext.cs (RootContext::IsNamespace): new function, used to
33375         tell whether an identifier represents a namespace.
33376
33377         * expression.cs (NamespaceExpr): A namespace expression, used only
33378         temporarly during expression resolution.
33379         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
33380         utility functions to resolve names on expressions.
33381
33382 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
33383
33384         * codegen.cs: Add hook for StatementExpressions. 
33385
33386         * class.cs: Fix inverted test for static flag in methods.
33387
33388 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33389
33390         * class.cs (Operator::CheckUnaryOperator): Correct error number used
33391         to make it coincide with MS' number.
33392         (Operator::CheckBinaryOperator): Ditto.
33393
33394         * ../errors/errors.txt : Remove error numbers added earlier.
33395
33396         * ../errors/cs1019.cs : Test case for error # 1019
33397
33398         * ../errros/cs1020.cs : Test case for error # 1020
33399
33400         * cs-parser.jay : Clean out commented cruft.
33401         (dimension_separators, dimension_separator): Comment out. Ostensibly not
33402         used anywhere - non-reducing rule.
33403         (namespace_declarations): Non-reducing rule - comment out.
33404
33405         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
33406         with TypeContainer::AddEnum.
33407
33408         * delegate.cs : New file for delegate handling classes.
33409         (Delegate): Class for declaring delegates.
33410
33411         * makefile : Update.
33412
33413         * cs-parser.jay (delegate_declaration): Implement.
33414
33415 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
33416
33417         * class.cs (Event::Define): Implement.
33418         (Event.EventBuilder): New member.
33419
33420         * class.cs (TypeContainer::Populate): Update to define all enums and events
33421         we have.
33422         (Events): New property for the events arraylist we hold. Shouldn't we move to using
33423         readonly fields for all these cases ?
33424
33425 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33426
33427         * class.cs (Property): Revamp to use the convention of making fields readonly.
33428         Accordingly modify code elsewhere.
33429
33430         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
33431         the Define method of the Property class.
33432
33433         * class.cs : Clean up applied patch and update references to variables etc. Fix 
33434         trivial bug.
33435         (TypeContainer::Populate): Update to define all the properties we have. Also
33436         define all enumerations.
33437
33438         * enum.cs (Define): Implement.
33439
33440 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33441
33442         * cs-parser.jay (overloadable_operator): The semantic value is an
33443         enum of the Operator class.
33444         (operator_declarator): Implement actions.
33445         (operator_declaration): Implement.
33446
33447         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
33448         validity of definitions.
33449         (Operator::CheckBinaryOperator): Static method to check for binary operators
33450         (TypeContainer::AddOperator): New method to add an operator to a type.
33451
33452         * cs-parser.jay (indexer_declaration): Added line to actually call the
33453         AddIndexer method so it gets added ;-)
33454
33455         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
33456         already taken care of by the MS compiler ?  
33457
33458 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33459
33460         * class.cs (Operator): New class for operator declarations.
33461         (Operator::OpType): Enum for the various operators.
33462
33463 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33464
33465         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
33466         ostensibly handle this in semantic analysis.
33467
33468         * cs-parser.jay (general_catch_clause): Comment out
33469         (specific_catch_clauses, specific_catch_clause): Ditto.
33470         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
33471         (catch_args, opt_catch_args): New productions.
33472         (catch_clause): Rewrite to use the new productions above
33473         (catch_clauses): Modify accordingly.
33474         (opt_catch_clauses): New production to use in try_statement
33475         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
33476         and re-write the code in the actions to extract the specific and
33477         general catch clauses by being a little smart ;-)
33478
33479         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
33480         Hooray, try and catch statements parse fine !
33481
33482 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33483
33484         * statement.cs (Block::GetVariableType): Fix logic to extract the type
33485         string from the hashtable of variables.
33486
33487         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
33488         I end up making that mistake ;-)
33489         (catch_clauses): Fixed gross error which made Key and Value of the 
33490         DictionaryEntry the same : $1 !!
33491
33492 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33493
33494         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
33495
33496         * cs-parser.jay (event_declaration): Correct to remove the semicolon
33497         when the add and remove accessors are specified. 
33498
33499 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33500
33501         * cs-parser.jay (IndexerDeclaration): New helper class to hold
33502         information about indexer_declarator.
33503         (indexer_declarator): Implement actions.
33504         (parsing_indexer): New local boolean used to keep track of whether
33505         we are parsing indexers or properties. This is necessary because 
33506         implicit_parameters come into picture even for the get accessor in the 
33507         case of an indexer.
33508         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
33509
33510         * class.cs (Indexer): New class for indexer declarations.
33511         (TypeContainer::AddIndexer): New method to add an indexer to a type.
33512         (TypeContainer::indexers): New member to hold list of indexers for the
33513         type.
33514
33515 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33516
33517         * cs-parser.jay (add_accessor_declaration): Implement action.
33518         (remove_accessor_declaration): Implement action.
33519         (event_accessors_declaration): Implement
33520         (variable_declarators): swap statements for first rule - trivial.
33521
33522         * class.cs (Event): New class to hold information about event
33523         declarations.
33524         (TypeContainer::AddEvent): New method to add an event to a type
33525         (TypeContainer::events): New member to hold list of events.
33526
33527         * cs-parser.jay (event_declaration): Implement actions.
33528
33529 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33530
33531         * cs-parser.jay (dim_separators): Implement. Make it a string
33532         concatenating all the commas together, just as they appear.
33533         (opt_dim_separators): Modify accordingly
33534         (rank_specifiers): Update accordingly. Basically do the same
33535         thing - instead, collect the brackets here.
33536         (opt_rank_sepcifiers): Modify accordingly.
33537         (array_type): Modify to actually return the complete type string
33538         instead of ignoring the rank_specifiers.
33539         (expression_list): Implement to collect the expressions
33540         (variable_initializer): Implement. We make it a list of expressions
33541         essentially so that we can handle the array_initializer case neatly too.
33542         (variable_initializer_list): Implement.
33543         (array_initializer): Make it a list of variable_initializers
33544         (opt_array_initializer): Modify accordingly.
33545
33546         * expression.cs (New::NType): Add enumeration to help us
33547         keep track of whether we have an object/delegate creation
33548         or an array creation.
33549         (New:NewType, New::Rank, New::Indices, New::Initializers): New
33550         members to hold data about array creation.
33551         (New:New): Modify to update NewType
33552         (New:New): New Overloaded contructor for the array creation
33553         case.
33554
33555         * cs-parser.jay (array_creation_expression): Implement to call
33556         the overloaded New constructor.
33557
33558 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
33559
33560         * class.cs (TypeContainer::Constructors): Return member
33561         constructors instead of returning null.
33562
33563 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
33564
33565         * typemanager.cs (InitCoreTypes): Initialize the various core
33566         types after we have populated the type manager with the user
33567         defined types (this distinction will be important later while
33568         compiling corlib.dll)
33569
33570         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
33571         on Expression Classification.  Now all expressions have a method
33572         `Resolve' and a method `Emit'.
33573
33574         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
33575         generation from working.     Also add some temporary debugging
33576         code. 
33577
33578 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
33579
33580         * codegen.cs: Lots of code generation pieces.  This is only the
33581         beginning, will continue tomorrow with more touches of polish.  We
33582         handle the fundamentals of if, while, do, for, return.  Others are
33583         trickier and I need to start working on invocations soon.
33584
33585         * gen-treedump.cs: Bug fix, use s.Increment here instead of
33586         s.InitStatement. 
33587
33588         * codegen.cs (EmitContext): New struct, used during code
33589         emission to keep a context.   Most of the code generation will be
33590         here. 
33591
33592         * cs-parser.jay: Add embedded blocks to the list of statements of
33593         this block.  So code generation proceeds in a top down fashion.
33594
33595 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
33596
33597         * statement.cs: Add support for multiple child blocks.
33598
33599 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
33600
33601         * codegen.cs (EmitCode): New function, will emit the code for a
33602         Block of code given a TypeContainer and its ILGenerator. 
33603
33604         * statement.cs (Block): Standard public readonly optimization.
33605         (Block::Block constructors): Link children. 
33606         (Block::Child): Child Linker.
33607         (Block::EmitVariables): Emits IL variable declarations.
33608
33609         * class.cs: Drop support for MethodGroups here, delay until
33610         Semantic Analysis.
33611         (Method::): Applied the same simplification that I did before, and
33612         move from Properties to public readonly fields.
33613         (Method::ParameterTypes): Returns the parameter types for the
33614         function, and implements a cache that will be useful later when I
33615         do error checking and the semantic analysis on the methods is
33616         performed.
33617         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33618         and made a method, optional argument tells whether this is a class
33619         or a structure to apply the `has-this' bit.
33620         (Method::GetCallingConvention): Implement, returns the calling
33621         convention. 
33622         (Method::Define): Defines the type, a second pass is performed
33623         later to populate the methods.
33624
33625         (Constructor::ParameterTypes): implement a cache similar to the
33626         one on Method::ParameterTypes, useful later when we do semantic
33627         analysis. 
33628
33629         (TypeContainer::EmitMethod):  New method.  Emits methods.
33630
33631         * expression.cs: Removed MethodGroup class from here.
33632
33633         * parameter.cs (Parameters::GetCallingConvention): new method.
33634
33635 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33636
33637         * class.cs (TypeContainer::Populate): Drop RootContext from the
33638         argument. 
33639
33640         (Constructor::CallingConvention): Returns the calling convention.
33641         (Constructor::ParameterTypes): Returns the constructor parameter
33642         types. 
33643
33644         (TypeContainer::AddConstructor): Keep track of default constructor
33645         and the default static constructor.
33646
33647         (Constructor::) Another class that starts using `public readonly'
33648         instead of properties. 
33649
33650         (Constructor::IsDefault): Whether this is a default constructor. 
33651
33652         (Field::) use readonly public fields instead of properties also.
33653
33654         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33655         track of static constructors;  If none is used, turn on
33656         BeforeFieldInit in the TypeAttributes. 
33657
33658         * cs-parser.jay (opt_argument_list): now the return can be null
33659         for the cases where there are no arguments. 
33660
33661         (constructor_declarator): If there is no implicit `base' or
33662         `this', then invoke the default parent constructor. 
33663
33664         * modifiers.cs (MethodAttr): New static function maps a set of
33665         modifiers flags into a MethodAttributes enum
33666         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33667         MethodAttr, TypeAttr to represent the various mappings where the
33668         modifiers are used.
33669         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33670
33671 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33672
33673         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33674         method arguments.
33675
33676         * interface.cs (PopulateIndexer): Implemented the code generator
33677         for interface indexers.
33678
33679 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33680
33681         * interface.cs (InterfaceMemberBase): Now we track the new status
33682         here.  
33683
33684         (PopulateProperty): Implement property population.  Woohoo!  Got
33685         Methods and Properties going today. 
33686
33687         Removed all the properties for interfaces, and replaced them with
33688         `public readonly' fields. 
33689
33690 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33691
33692         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33693         initialize their hashtables/arraylists only when they are needed
33694         instead of doing this always.
33695
33696         * parameter.cs: Handle refs and out parameters.
33697
33698         * cs-parser.jay: Use an ArrayList to construct the arguments
33699         instead of the ParameterCollection, and then cast that to a
33700         Parameter[] array.
33701
33702         * parameter.cs: Drop the use of ParameterCollection and use
33703         instead arrays of Parameters.
33704
33705         (GetParameterInfo): Use the Type, not the Name when resolving
33706         types. 
33707
33708 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33709
33710         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33711         and instead use public readonly fields.
33712
33713         * class.cs: Put back walking code for type containers.
33714
33715 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33716
33717         * class.cs (MakeConstant): Code to define constants.
33718
33719         * rootcontext.cs (LookupType): New function.  Used to locate types 
33720
33721
33722 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33723
33724         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33725         this System.Reflection code is.  Kudos to Microsoft
33726
33727         * typemanager.cs: Implement a type cache and avoid loading all
33728         types at boot time.  Wrap in LookupType the internals.  This made
33729         the compiler so much faster.  Wow.  I rule!
33730
33731         * driver.cs: Make sure we always load mscorlib first (for
33732         debugging purposes, nothing really important).
33733
33734         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33735         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33736
33737         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33738         on namespaces that have been imported using the `using' keyword.
33739
33740         * class.cs (TypeContainer::TypeAttr): Virtualize.
33741         (Class::TypeAttr): Return attributes suitable for this bad boy.
33742         (Struct::TypeAttr): ditto.
33743         Handle nested classes.
33744         (TypeContainer::) Remove all the type visiting code, it is now
33745         replaced with the rootcontext.cs code
33746
33747         * rootcontext.cs (GetClassBases): Added support for structs. 
33748
33749 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33750
33751         * interface.cs, statement.cs, class.cs, parameter.cs,
33752         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33753         Drop use of TypeRefs, and use strings instead.
33754
33755 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33756
33757         * rootcontext.cs: 
33758
33759         * class.cs (Struct::Struct): set the SEALED flags after
33760         checking the modifiers.
33761         (TypeContainer::TypeAttr): new property, returns the
33762         TypeAttributes for a class.  
33763
33764         * cs-parser.jay (type_list): Oops, list production was creating a
33765         new list of base types.
33766
33767         * rootcontext.cs (StdLib): New property.
33768         (GetInterfaceTypeByName): returns an interface by type name, and
33769         encapsulates error handling here.
33770         (GetInterfaces): simplified.
33771         (ResolveTree): Encapsulated all the tree resolution here.
33772         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33773         types. 
33774
33775         * driver.cs: Add support for --nostdlib, to avoid loading the
33776         default assemblies.
33777         (Main): Do not put tree resolution here. 
33778
33779         * rootcontext.cs: Beginning of the class resolution.
33780
33781 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33782
33783         * rootcontext.cs: Provide better error reporting. 
33784
33785         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33786
33787         * rootcontext.cs (CreateInterface): Handle the case where there
33788         are no parent interfaces.
33789
33790         (CloseTypes): Routine to flush types at the end.
33791         (CreateInterface): Track types.
33792         (GetInterfaces): Returns an array of Types from the list of
33793         defined interfaces.
33794
33795         * typemanager.c (AddUserType): Mechanism to track user types (puts
33796         the type on the global type hash, and allows us to close it at the
33797         end). 
33798
33799 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33800
33801         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33802         RecordInterface instead.
33803
33804         * cs-parser.jay: Updated to reflect changes above.
33805
33806         * decl.cs (Definition): Keep track of the TypeBuilder type that
33807         represents this type here.  Not sure we will use it in the long
33808         run, but wont hurt for now.
33809
33810         * driver.cs: Smaller changes to accomodate the new code.
33811
33812         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33813         when done. 
33814
33815         * rootcontext.cs (CreateInterface):  New method, used to create
33816         the System.TypeBuilder type for interfaces.
33817         (ResolveInterfaces): new entry point to resolve the interface
33818         hierarchy. 
33819         (CodeGen): Property, used to keep track of the code generator.
33820
33821 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33822
33823         * cs-parser.jay: Add a second production for delegate_declaration
33824         with `VOID'.
33825
33826         (enum_body): Put an opt_comma here instead of putting it on
33827         enum_body or enum_member_declarations so we can handle trailing
33828         commas on enumeration members.  Gets rid of a shift/reduce.
33829
33830         (type_list): Need a COMMA in the middle.
33831
33832         (indexer_declaration): Tell tokenizer to recognize get/set
33833
33834         * Remove old targets.
33835
33836         * Re-add the parser target.
33837
33838 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33839
33840         * cs-parser.jay: Add precendence rules for a number of operators
33841         ot reduce the number of shift/reduce conflicts in the grammar.
33842
33843 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33844
33845         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33846         and put it here.
33847
33848         Get rid of old crufty code.
33849
33850         * rootcontext.cs: Use this to keep track of the parsed
33851         representation and the defined types available to the program. 
33852
33853         * gen-treedump.cs: adjust for new convention.
33854
33855         * type.cs: Split out the type manager, and the assembly builder
33856         from here. 
33857
33858         * typemanager.cs: the type manager will live here now.
33859
33860         * cil-codegen.cs: And the code generator here. 
33861
33862 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33863
33864         * makefile: Fixed up for easy making.
33865
33866 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33867
33868         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33869         the 
33870
33871         (unary_expression): Expand pre_increment_expression and
33872         post_decrement_expression to reduce a shift/reduce.
33873
33874 2001-07-11  Simon Cozens
33875
33876         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33877
33878         Improve allow_keyword_as_indent name.
33879
33880 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33881
33882         * Adjustments for Beta2. 
33883
33884 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33885
33886         * decl.cs: Added `Define' abstract method.
33887         (InTransit): new property, used to catch recursive definitions. 
33888
33889         * interface.cs: Implement `Define'. 
33890
33891         * modifiers.cs: Map Modifiers.constants to
33892         System.Reflection.TypeAttribute flags.
33893
33894         * class.cs: Keep track of types and user-defined types.
33895         (BuilderInit): New method for creating an assembly
33896         (ResolveType): New function to launch the resolution process, only
33897         used by interfaces for now.
33898
33899         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33900         that are inserted into the name space. 
33901
33902 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33903
33904         * ARGH.  I have screwed up my tree so many times due to the use of
33905         rsync rather than using CVS.  Going to fix this at once. 
33906
33907         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33908         load types.
33909
33910 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33911
33912         * Experiment successful: Use System.Type rather that our own
33913         version of Type.  
33914
33915 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33916
33917         * cs-parser.jay: Removed nsAliases from here.
33918
33919         Use new namespaces, handle `using XXX;' 
33920
33921         * namespace.cs: Reimplemented namespace handling, use a recursive
33922         definition of the class.  Now we can keep track of using clauses
33923         and catch invalid using clauses.
33924
33925 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33926
33927         * gen-treedump.cs: Adapted for all the renaming.
33928
33929         * expression.cs (Expression): this class now has a Type property
33930         which returns an expression Type.
33931
33932         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33933         `Type', as this has a different meaning now in the base
33934
33935 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33936
33937         * interface.cs, class.cs: Removed from all the sources the
33938         references to signature computation, as we can not do method
33939         signature computation during the parsing time, as we are not
33940         trying to solve at that point distinguishing:
33941
33942         class X {
33943                 void a (Blah x) {}
33944                 void a (NS.Blah x) {}
33945         }
33946
33947         Which depending on the context might be valid or not, as we do not
33948         know if Blah is the same thing as NS.Blah at that point.
33949
33950         * Redid everything so the code uses TypeRefs now instead of
33951         Types.  TypeRefs are just temporary type placeholders, that need
33952         to be resolved.  They initially have a pointer to a string and the
33953         current scope in which they are used.  This is used later by the
33954         compiler to resolve the reference to an actual Type. 
33955
33956         * DeclSpace is no longer a CIR.Type, and neither are
33957         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33958         are all DeclSpaces, but no Types. 
33959
33960         * type.cs (TypeRefManager): This implements the TypeRef manager,
33961         which keeps track of all the types that need to be resolved after
33962         the parsing has finished. 
33963
33964 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33965
33966         * ARGH.  We are going to have to store `foreach' as a class rather
33967         than resolving it, as we need to verify error 1579 after name
33968         resolution.   *OR* we could keep a flag that says `This request to
33969         IEnumerator comes from a foreach statement' which we can then use
33970         to generate the error.
33971
33972 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33973
33974         * class.cs (TypeContainer.AddMethod): we now add methods to the
33975         MethodGroup instead of the method hashtable.  
33976
33977         * expression.cs: Add MethodGroup abstraction, which gets us one
33978         step closer to the specification in the way we handle method
33979         declarations.  
33980
33981         * cs-parser.jay (primary_expression): qualified_identifier now
33982         tried to match up an identifier to a local variable reference or
33983         to a parameter reference.
33984
33985         current_local_parameters is now a parser global variable that
33986         points to the current parameters for the block, used during name
33987         lookup.
33988
33989         (property_declaration): Now creates an implicit `value' argument to
33990         the set accessor.
33991
33992 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33993
33994         * parameter.cs: Do not use `param' arguments as part of the
33995         signature, per the spec.
33996
33997 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33998
33999         * decl.cs: Base class for classes, structs and interfaces.  This
34000         is the "Declaration Space" 
34001
34002         * cs-parser.jay: Use CheckDef for checking declaration errors
34003         instead of having one on each function.
34004
34005         * class.cs: Factor out some code for handling error handling in
34006         accordance to the "Declarations" section in the "Basic Concepts"
34007         chapter in the ECMA C# spec.
34008
34009         * interface.cs: Make all interface member classes derive from
34010         InterfaceMemberBase.
34011
34012 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
34013
34014         * Many things: all interfaces are parsed and generated in
34015         gen-treedump.  Support for member variables, constructors,
34016         destructors, properties, constants is there.
34017
34018         Beginning of the IL backend, but very little done, just there for
34019         testing purposes. 
34020
34021 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
34022
34023         * cs-parser.jay: Fix labeled statement.
34024
34025         * cs-tokenizer.cs (escape): Escape " and ' always.
34026         ref_line, ref_name: keep track of the line/filename as instructed
34027         by #line by the compiler.
34028         Parse #line.
34029
34030 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
34031
34032         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
34033         to match the values in System.CodeDOM.
34034
34035         Divid renamed to Divide.
34036
34037         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
34038         statements. 
34039         (Statements.set): remove.
34040
34041         * System.CodeDOM/CodeCatchClause.cs: always have a valid
34042         statements. 
34043
34044         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
34045         falseStatements always have valid values. 
34046
34047         * cs-parser.jay: Use System.CodeDOM now.
34048