2010-06-16 Marek Safar <marek.safar@gmail.com>
[mono.git] / mcs / mcs / ChangeLog
1 2010-06-16  Marek Safar  <marek.safar@gmail.com>
2
3         * membercache.cs, convert.cs: Correctly resize an array used by
4         GetUserOperator.
5
6 2010-06-15  Marek Safar  <marek.safar@gmail.com>
7
8         A fix for bug #599601
9         * dynamic.cs, ecore.cs: A new flag for dynamic resolver to ignore
10         generated member access left expression.
11         
12 2010-06-16  Marek Safar  <marek.safar@gmail.com>
13
14         * expression.cs: Dispatch dynamic invocation solely on left
15         expression type.
16
17 2010-06-16  Marek Safar  <marek.safar@gmail.com>
18
19         * expression.cs, statement.cs: Always persist explicit cast
20         semantic at expression level.
21         
22 2010-06-15  Marek Safar  <marek.safar@gmail.com>
23
24         * expression.cs, attribute.cs: Enable generic type parameters
25         attribute check.
26         
27 2010-06-15  Marek Safar  <marek.safar@gmail.com>
28
29         A fix for bug #612146
30         * generic.cs: Don't use fixed array for inflated type parameter
31         interface constraints.
32         
33 2010-06-15  Marek Safar  <marek.safar@gmail.com>
34
35         * typespec.cs: ElementTypeSpec has to use its own ITypeDefinition.
36         
37         * report.cs: Unwrap elements for related symbols reporting.
38
39 2010-06-15  Marek Safar  <marek.safar@gmail.com>
40
41         A fix for bug #612796
42         * cs-tokenizer.cs: Offset correctly keywords the first character
43         comparison.
44         
45 2010-06-15  Marek Safar  <marek.safar@gmail.com>
46
47         A fix for bug #613397
48         * expression.cs: Removed too aggressive object initializers
49         optimization.
50         
51 2010-06-15  Marek Safar  <marek.safar@gmail.com>
52         
53         * parameter.cs, property.cs, membercache.cs, decl.cs, iterators.cs,
54         anonymous.cs, expression.cs, support.cs, method.cs, pending.cs,
55         class.cs, cs-parser.jay: Simplify parsing of accessors by removing
56         any intermediate steps and fake nodes, also saves few MBs of memory.
57
58 2010-06-11  Marek Safar  <marek.safar@gmail.com>
59         
60         * modifiers.cs, rootcontext.cs, location.cs, cs-parser.jay: More
61         precise modifiers parsing.
62
63 2010-06-09  Marek Safar  <marek.safar@gmail.com>
64
65         * cs-tokenizer.cs, anonymous.cs, expression.cs, cs-parser.jay:
66         Fixed few shift/reduce conflicts.
67
68 2010-06-09  Marek Safar  <marek.safar@gmail.com>
69
70         * typemanager.cs, parameter.cs, dynamic.cs, typespec.cs,
71         expression.cs, ecore.cs, cs-parser.jay: Fully parse composed type
72         specifiers and stop using string in AST.
73
74 2010-06-07  Marek Safar  <marek.safar@gmail.com>
75
76         * typemanager.cs, eval.cs, iterators.cs, anonymous.cs, expression.cs
77         method.cs, class.cs, delegate.cs, cs-parser.jay, driver.cs, visit.cs
78         enum.cs: Hold location of predefined types.
79
80 2010-06-07  Marek Safar  <marek.safar@gmail.com>
81
82         A fix for bug #610878
83         * pending.cs: Clone cached list before modifying.
84
85 2010-06-04  Marek Safar  <marek.safar@gmail.com>
86
87         * convert.cs, typespec.cs, expression.cs: Start using array member
88         kind for better conversion checks.
89         
90         * import.cs, report.cs: Report better error message for runtime
91         reflection bugs.
92
93 2010-06-04  Marek Safar  <marek.safar@gmail.com>
94
95         * membercache.cs, convert.cs, nullable.cs, expression.cs: Optimize
96         user defined conversion probing and simplify user conversion for
97         nullabe types. Fixes #610940.
98
99 2010-06-03  Marek Safar  <marek.safar@gmail.com>
100
101         A fix for bug #610919
102         * parameter.cs, property.cs, cs-parser.jay: Use independent implicit
103         parameters for explicit event accessors. Anonymous method capturing
104         won't otherwise work for event implicit parameter.
105
106 2010-06-02  Marek Safar  <marek.safar@gmail.com>
107
108         A fix for bug #610088
109         * nullable.cs, expression.cs, statement.cs, method.cs, ecore.cs:
110         Ignore overrides for base overload resolution as for non-base
111         expressions and convert the best candidate to closest override
112         afterwards.
113
114 2010-06-01  Marek Safar  <marek.safar@gmail.com>
115
116         A fix for bug #610139
117         * generic.cs, convert.cs: Recursively check effective base interface
118
119 2010-06-01  Marek Safar  <marek.safar@gmail.com>
120
121         * statement.cs: Handle nullable types and type parameters in using
122         statement, avoid boxing value types. Also fixes #571010
123
124 2010-06-01  Marek Safar  <marek.safar@gmail.com>
125
126         * convert.cs, expression.cs: Emit unbox for underlying nullable
127         type boxing cast.
128
129 2010-05-29  Marek Safar  <marek.safar@gmail.com>
130
131         A fix for bug #610126
132         * expression.cs: Don't use branch optimization for types bigger than
133         int.
134
135 2010-05-28  Marek Safar  <marek.safar@gmail.com>
136
137         A fix for bug #609088
138         * import.cs: Check private modifier correctly.
139
140 2010-05-28  Marek Safar  <marek.safar@gmail.com>
141
142         A fix for bug #609049
143         * ecore.cs: Don't ignore override methods when looking for base
144         member.
145
146 2010-05-27  Marek Safar  <marek.safar@gmail.com>
147
148         A fix for bugs #608007, #572540, #566130, #476358
149
150         * generic.cs, linq.cs, expression.cs, statement.cs, cs-parser.jay:
151         More tricky refactoring of implicit linq blocks.
152         
153 2010-05-25  Marek Safar  <marek.safar@gmail.com>
154
155         * linq.cs, cs-parser.jay: Keep location for all linq clauses.
156
157 2010-05-25  Marek Safar  <marek.safar@gmail.com>
158
159         * context.cs, expression.cs, cs-parser.jay: Don't store current
160         block in This expression (it's too early for linq blocks).
161
162 2010-05-21  Marek Safar  <marek.safar@gmail.com>
163
164         * expression.cs: Use constrained prefix more broadly to avoid boxing.
165
166 2010-05-20  Marek Safar  <marek.safar@gmail.com>
167
168         A fix for bug #591149
169         * nullable.cs: Don't double wrap same expression.
170         
171 2010-05-20  Marek Safar  <marek.safar@gmail.com>
172
173         A fix for bug #569827
174         * anonymous.cs: Any issued error in probing mode means no match.
175
176 2010-05-20  Marek Safar  <marek.safar@gmail.com>
177
178         * expression.cs: Search for base indexer using the closest match
179         rule.
180
181 2010-05-20  Marek Safar  <marek.safar@gmail.com>
182
183         A fix for bug #572071
184         * method.cs: Set override constraints using unexpanded interface
185         list.
186
187 2010-05-20  Marek Safar  <marek.safar@gmail.com>
188
189         A fix for bug #572071
190         * ecore.cs: Include secondary extension method lookup in probing
191         mode.
192
193 2010-05-19  Marek Safar  <marek.safar@gmail.com>
194
195         A fix for bug #515801
196         * typespec.cs (MayBecomeEqualGenericTypes): Recursively check
197         type arguments.
198
199 2010-05-19  Marek Safar  <marek.safar@gmail.com>
200
201         A fix for bug #515801
202         * pending.cs: Advance counter correctly.
203
204 2010-05-19  Marek Safar  <marek.safar@gmail.com>
205
206         A fix for bug #480139
207         * method.cs, pending.cs: Indexer override uses base name.
208         
209 2010-05-19  Marek Safar  <marek.safar@gmail.com>
210
211         A fix for bug #424064
212         * generic.cs: Replace original with inflated type parameter on
213         failure.
214
215 2010-05-19  Marek Safar  <marek.safar@gmail.com>
216
217         A fix for bug #359733
218         * parameter.cs: Extension attribute can be defined in each assembly.
219
220 2010-05-18  Marek Safar  <marek.safar@gmail.com>
221
222         A fix for bug #446507
223         * method.cs: Only one method can implement an interface.
224
225 2010-05-18  Marek Safar  <marek.safar@gmail.com>
226
227         A fix for bug #594905
228         * convert.cs, constant.cs, expression.cs, literal.cs, ecore.cs:
229         Typed null can be used as a source for expression methods.
230
231 2010-05-18  Marek Safar  <marek.safar@gmail.com>
232
233         A fix for bug #606551
234         * namespace.cs: Using directive imports only types and not nested
235         namespaces.
236
237 2010-05-17  Marek Safar  <marek.safar@gmail.com>
238
239         * typespec.cs, expression.cs, statement.cs, ecore.cs, complete.cs,
240         delegate.cs: Member instance is resolved after member overload
241         definitely resolves static/instance property of member expression.
242         Fixes #545047, #358848, #456605, #460016, #603299
243
244 2010-05-12  Marek Safar  <marek.safar@gmail.com>
245
246         A fix for bug #604981
247         * generic.cs, decl.cs, anonymous.cs: Reset more type arguments
248         details for nested anonymous methods stories.
249
250 2010-05-11  Marek Safar  <marek.safar@gmail.com>
251
252         A fix for bug #604735
253         * namespace.cs: Don't report namespace collision.
254
255 2010-05-11  Marek Safar  <marek.safar@gmail.com>
256
257         A fix for bug #604748
258         * class.cs, typespec.cs: Search full imported attribute hierarchy
259         for AttributeUsage.
260
261 2010-05-11  Marek Safar  <marek.safar@gmail.com>
262
263         * namespace.cs: Ignore missing dependencies failure at
264         initialization.
265
266 2010-05-11  Marek Safar  <marek.safar@gmail.com>
267
268         A fix for bug #604640
269         * namespace.cs: Don't resolve using constraints too early.
270
271 2010-05-11  Marek Safar  <marek.safar@gmail.com>
272
273         A fix for bug #604239
274         * generic.cs: Copy partial type constraints to partial container.
275
276 2010-05-10  Marek Safar  <marek.safar@gmail.com>
277
278         A fix for bug #557210
279         * import.cs: Relax underlying enum field rules.
280
281 2010-05-10  Marek Safar  <marek.safar@gmail.com>
282
283         A fix for bug #603476
284         * property.cs: Implement IParametersMember for indexer accessors.
285
286 2010-05-07  Marek Safar  <marek.safar@gmail.com>
287
288         A fix for bug #601141
289         * class.cs: Update all partial modifiers.
290
291 2010-05-06  Marek Safar  <marek.safar@gmail.com>
292
293         A fix for bug #601708
294         * method.cs, membercache.cs: Destructors cannot be hidden.
295
296 2010-05-06  Marek Safar  <marek.safar@gmail.com>
297
298         A fix for bug #602551
299         * class.cs: Resursive reference of type definition is allowed.
300
301 2010-05-06  Marek Safar  <marek.safar@gmail.com>
302
303         * anonymous.cs: Mutate cached storey instance types too.
304
305 2010-05-06  Marek Safar  <marek.safar@gmail.com>
306
307         A fix for bug #602443
308         * convert.cs: Explicit enum conversion cannot involve user operators
309
310 2010-05-05  Miguel de Icaza  <miguel@novell.com>
311
312         * class.cs (TypeContainer.DefineBaseTypes)
313         (TypeContainer.CheckRecursiveDefinition): check for the iface not
314         being null, as we could have failed resolution and crashed;
315         Fixes #442144
316
317         * cs-parser.jay: Productions to catch common mistakes when other
318         punctuation operators are used instead of comma.   Fixes 571702 
319
320 2010-05-05  Marek Safar  <marek.safar@gmail.com>
321
322         * anonymous.cs: Mutate correct set of constraints.
323
324 2010-05-05  Marek Safar  <marek.safar@gmail.com>
325
326         A fix for bug #602842
327         * expression.cs: Resolve all array bound arguments.
328
329 2010-05-05  Marek Safar  <marek.safar@gmail.com>
330
331         * import.cs: Don't import private fields.
332
333 2010-04-30  Marek Safar  <marek.safar@gmail.com>
334
335         Partially based on patch by <sami.lamti@gmail.com>
336
337         * eval.cs, ecore.cs: Fixed eval show methods.
338
339 2010-04-30  Marek Safar  <marek.safar@gmail.com>
340
341         * generic.cs, delegate.cs: Implement output type inference of
342         methodgroup now when the specification was cleared at least little
343         bit.
344
345 2010-04-29  Marek Safar  <marek.safar@gmail.com>
346
347         A fix for bug #575611
348         * class.cs: Fix recursive unmanaged recursice sruct check.
349         
350 2010-04-29  Marek Safar  <marek.safar@gmail.com>
351
352         A fix for bug #479776
353         * expression.cs: Implement typeof unbounded nested generic types.
354
355 2010-04-29  Marek Safar  <marek.safar@gmail.com>
356
357         A fix for bug #474953
358         * class.cs: Fix valid recursive base type definition.
359
360 2010-04-29  Marek Safar  <marek.safar@gmail.com>
361
362         A fix for bug #421737
363         * convert.cs, expression.cs: A boxing conversion exists from a
364         nullable-type to a reference type, if a boxing conversion exists
365         from the underlying non-nullable-value-type to the reference type.
366
367 2010-04-29  Marek Safar  <marek.safar@gmail.com>
368
369         A fix for bug #376875
370         * import.cs: Import volatile modifier.
371
372 2010-04-29  Marek Safar  <marek.safar@gmail.com>
373
374         A fix for bug #372412
375         * typespec.cs, expression.cs, codegen.cs: Emit readonly prefix for
376         generic arrays.
377
378 2010-04-29  Marek Safar  <marek.safar@gmail.com>
379
380         A fix for bug #568955
381         * statements.cs: Handle recursive scope initializers.
382
383 2010-04-28  Marek Safar  <marek.safar@gmail.com>
384
385         A fix for bug #566511
386         * anonymous.cs: Always get inflated version of hoisted variable
387         on generic type definition.
388
389 2010-04-28  Marek Safar  <marek.safar@gmail.com>
390
391         * import.cs, membercache.cs: Relax rules for valid properties.
392
393 2010-04-28  Marek Safar  <marek.safar@gmail.com>
394
395         * import.cs: Intern arrays used in generic arguments.
396
397 2010-04-28  Marek Safar  <marek.safar@gmail.com>
398
399         A fix for bug #600398
400         * convert.cs: Actually use effective base type for the comparison.
401
402 2010-04-28  Marek Safar  <marek.safar@gmail.com>
403
404         A fix for bug #600326
405         * ecore.cs: Pass arity to base member lookup.
406
407 2010-04-28  Marek Safar  <marek.safar@gmail.com>
408
409         A fix for bug #573385
410         * expression.cs: MemberAccess is of generic type based on right
411         arity length only.
412
413 2010-05-28  Marek Safar  <marek.safar@gmail.com>
414
415         * cs-tokenizer.cs: Made tab size configurable.
416
417 2010-05-27  Marek Safar  <marek.safar@gmail.com>
418
419         * attribute.cs: Ensure Obsolete members are defined before doing
420         ctor look-up.
421
422 2010-05-27  Marek Safar  <marek.safar@gmail.com>
423
424         * visit.cs: Add DOM visitor skeleton.
425         
426         * *.cs: Updated.
427
428 2010-05-27  Marek Safar  <marek.safar@gmail.com>
429
430         * attribute.cs, codegen.cs: Drop COMPILER_ACCESS hack.
431         
432 2010-05-27  Marek Safar  <marek.safar@gmail.com>
433
434         * *.cs: Major rewrite of compiler internals to better work with
435         unmodified System.Reflection.Emit. Some of the key changes are
436         - TypeSpec replaces reflection specific System.Type.
437         - All Type(TypeSpec) operations are now done in compiler therefore
438         no dependency on SRE to inflate generic members and types or to
439         query unclosed types.
440         - MemberCache is now the only and full hierarchical topology.
441         - Generic constraints are implemented properly.
442         - And as a bonus compilation is on average 30% faster.
443
444 2010-04-15  Jb Evain  <jbevain@novell.com>
445
446         * dmcs.exe.config: update the runtime version to .net 4.0 RTM.
447
448 2010-04-12  Marek Safar  <marek.safar@gmail.com>
449
450         * expression.cs, attribute.cs, parameter.cs: More attribute type
451         checks.
452
453 2010-04-12  Marek Safar  <marek.safar@gmail.com>
454
455         A fix for bug #593342
456
457         * generic.cs, parameter.cs, argument.cs, field.cs, property.cs,
458         decl.cs, roottypes.cs, constant.cs, nullable.cs, expression.cs,
459         method.cs, ecore.cs, class.cs, delegate.cs, attribute.cs,
460         codegen.cs: Add custom attribute encoder to deal with unfinished
461         types and easier corlib bootstrap from its own types.
462
463 2010-03-26  Marek Safar  <marek.safar@gmail.com>
464
465         * cs-parser.jay: Report invalid constraint types.
466
467 2010-03-16  Jb Evain  <jbevain@novell.com>
468
469         * Makefile: rename the net_2_1 profile to moonlight.
470
471 2010-03-11  Marek Safar  <marek.safar@gmail.com>
472
473         * statement.cs, cs-parser.jay: Use correct location for empty
474         statements.
475
476 2010-03-11  Marek Safar  <marek.safar@gmail.com>
477
478         * cs-parser.jay: Disable Location from expression.
479         
480         * generic.cs: Check constraints for overrides in the parser.
481
482 2010-03-09  Marek Safar  <marek.safar@gmail.com>
483
484         * cs-parser.jay (GetLocation): Use an expression when available.
485
486 2010-03-04  Marek Safar  <marek.safar@gmail.com>
487
488         A fix for bug #582579
489         * ecore.cs (FieldExpr): Don't optimize cross reference loads.
490
491 2010-03-04  Marek Safar  <marek.safar@gmail.com>
492
493         A patch by kornelpal@gmail.com
494         
495         * dynamic.cs, anonymous.cs, rootcontext.cs, class.cs: Don't make
496         compiler generated classes sealed by default. Emit and close top
497         level compiler generated classes as well. 
498         
499         * support.cs: Use RuntimeHelpers.GetHashCode.
500
501 2010-03-03  Rolf Bjarne Kvinge  <RKvinge@novell.com>
502
503         * Makefile: We need to use the internal bootstrapping gmcs for
504         net_2_1_bootstrap too now.
505
506 2010-03-02  Raja R Harinath  <harinath@hurrynot.org>
507
508         * expression.cs (IndexerAccess.ResolveAccessor): Add CS1540 check.
509
510 2010-03-02  Marek Safar  <marek.safar@gmail.com>
511
512         * cs-tokenizer.cs: Missed few locations in previous fix.
513
514 2010-03-02  Marek Safar  <marek.safar@gmail.com>
515
516         * cs-tokenizer.cs, argument.cs, dynamic.cs, assign.cs, anonymous.cs,
517         nullable.cs, expression.cs, statement.cs, cs-parser.jay, cfold.cs:
518         Report correct location for operator errors.
519
520 2010-03-02  Marek Safar  <marek.safar@gmail.com>
521
522         * typemanager.cs (IsDynamicType): Don't check external types when
523         the attribute is not external.
524
525 2010-02-24  Marek Safar  <marek.safar@gmail.com>
526
527         A fix for bug #582579
528         * decl.cs (IsExposedFromAssembly): Use PartialContainer for parent
529         modifiers.
530
531 2010-02-24  Marek Safar  <marek.safar@gmail.com>
532
533         A fix for bug #581804
534         * ecore.cs: Fixed type comparison.
535
536 2010-02-08  Miguel de Icaza  <miguel@novell.com>
537
538         * namespace.cs (CompletionGetTypesStartingWith): Do not include
539         private types in the completion results.
540
541         * cs-parser.jay: Bubble completions after "from x in ?" and "from x
542         ... let ?"
543
544 2010-02-17  Marek Safar  <marek.safar@gmail.com>
545
546         * generic.cs, field.cs, decl.cs, cs-parser.jay: Simplify special
547         constraint parsing.
548
549 2010-02-14  Miguel de Icaza  <miguel@novell.com>
550
551         * eval.cs: Do not do the report printer dance unless the user has
552         set the DescribeTypes feature.
553
554 2010-02-10  Marek Safar  <marek.safar@gmail.com>
555
556         * argument.cs, dynamic.cs, expression.cs: Track RC API changes.
557
558 2010-02-08  Marek Safar  <marek.safar@gmail.com>
559
560         A fix for bug #577029
561         * anonymous.cs: Fixed TypeBuilder* check.
562
563 2010-02-06  Miguel de Icaza  <miguel@novell.com>
564
565         * eval.cs (CompileBlock): Also undo if there are problems during
566         semantic analysis, fixes various cases where invalid C# code would
567         be reported, but the internal changes would not be undone.
568
569 2010-02-03  Miguel de Icaza  <miguel@novell.com>
570
571         * driver.cs: Change the --fatal flag to allow a number to be
572         passed, this ignores the first N fatal errors.   Useful to debug
573         errors that do not happen on the first hit.
574
575         * cs-parser.jay (invocation_expression): accept both the
576         CLOSE_PARENS and COMPLETE_COMPLETION, this allows completions
577         inside an invocation.
578
579         * driver.cs: Expose FatalErrors.
580
581         * eval.cs: Initialize the printer's Fatal property from the
582         Driver's FatalError flag, this allows csharp --fatal to work
583         again. 
584
585         Add support for calling Describe (typeof (TYPE)) if the expression
586         entered is a TYPE.
587         
588 2010-02-02  Marek Safar  <marek.safar@gmail.com>
589
590         A fix for bug #574991
591         * rootcontext.cs, class.cs, driver.cs: Hide enhanced warnings behind
592         --lint.
593
594 2010-02-02  Marek Safar  <marek.safar@gmail.com>
595
596         A fix for bug #575986
597         * expression.cs: Don't mutate typeof type definitions.
598
599 2010-01-28  Marek Safar  <marek.safar@gmail.com>
600
601         * decl.cs: Use only one set of modifiers.
602
603 2010-01-26  Marek Safar  <marek.safar@gmail.com>
604
605         A fix for bug #573329
606         * eval.cs: Don't disable error reporting completely on silent mode.
607         
608 2010-01-25  Marek Safar  <marek.safar@gmail.com>
609
610         A fix for bug #573312
611         * constant.cs, expression.cs, ecore.cs: Emit correct offset for
612         pointer index of unknown size types greater than 2.
613
614 2010-01-15  Marek Safar  <marek.safar@gmail.com>
615
616         * *.cs: Use only 1 member kind enum.
617
618 2010-01-15  Marek Safar  <marek.safar@gmail.com>
619
620         * *.cs: Add event specification.
621
622 2010-01-14  Marek Safar  <marek.safar@gmail.com>
623
624         * membercache.cs: Extracted from decl.cs.
625         
626         * *.cs: Put more infrastructure in place.
627
628 2010-01-13  Marek Safar  <marek.safar@gmail.com>
629
630         * *.cs: Add property specification, unused yet.
631
632 2010-01-13  Marek Safar  <marek.safar@gmail.com>
633
634         * property.cs: Move all property based declarations into a new file.
635
636 2010-01-13  Marek Safar  <marek.safar at gmail.com>
637
638         * expression.cs (Conditional): Resolve reduced expression.
639
640 2010-01-13  Marek Safar  <marek.safar at gmail.com>
641
642         * *.cs: Introduced non-generic method specification.
643
644 2010-01-07  Marek Safar  <marek.safar@gmail.com>
645
646         * method.cs: Move all method based declarations into a new file.
647
648 2010-01-07  Marek Safar  <marek.safar@gmail.com>
649
650         * *.cs: Extract field specification.
651
652 2009-12-17  Marek Safar  <marek.safar@gmail.com>
653
654         * field.cs: Extracted from class.cs
655
656 2009-12-15  Marek Safar  <marek.safar@gmail.com>
657
658         * attribute.cs (GetFixedBuffer): Work on field definition only.
659
660 2009-12-15  Marek Safar  <marek.safar@gmail.com>
661
662         * *.cs: Clean up NET_4_0 conditional where possible.
663
664 2009-12-14 Rodrigo Kumpera  <rkumpera@novell.com>
665
666         support.cs (DynamicType): Assembly property returns the assembly builder.
667         This is required due to how compiler context works in corlib.
668
669 2009-12-14  Marek Safar  <marek.safar@gmail.com>
670
671         A fix for bug #564376
672         * assign.cs (LocalTemporary): Removed no longer needed special
673         by-ref handling.
674
675 2009-12-11  Marek Safar  <marek.safar@gmail.com>
676
677         * modifiers.cs, decl.cs, iterators.cs, const.cs, anonymous.cs,
678         class.cs, delegate.cs, cs-parser.jay, enum.cs: Turn modifiers into
679         enum for easier debugging.
680
681 2009-12-10  Marek Safar  <marek.safar@gmail.com>
682
683         * decl.cs, anonymous.cs, class.cs: Sealed Define it's now main entry
684         point.
685         
686         * parameter.cs, delegate.cs, dynamic.cs: Don't use builder methods
687         directly.
688
689 2009-12-10  Marek Safar  <marek.safar@gmail.com>
690
691         * cs-parser.jay, statement.cs: Handle parser error in code
692         completition.
693
694 2009-12-10  Marek Safar  <marek.safar@gmail.com>
695
696         * ecore.cs: Ignore base imported methods when they are already
697         in method bag.
698         
699         * eval.cs: Handle non-existent keys.
700         
701         * report.cs, driver.cs: Make fatal work with console printer only.
702
703 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
704
705         * typemanager.cs (MakeGenericMethod): Fix stupid mistake.
706
707 2009-12-08 Rodrigo Kumpera  <rkumpera@novell.com>
708
709         * typemanager.cs: Add MakeGenericMethod that checks if the method
710         is really the generic method definition.
711
712         ecore.cs (MethodGroupExpr:IsApplicable): Use new TypeManager function
713         to inflate generic methods.
714
715 2009-12-08  Marek Safar  <marek.safar@gmail.com>
716
717         A fix for bug #561149
718         * anonymous.cs: Use actual type parameters when checking for generic
719         method host.
720
721 2009-12-08  Marek Safar  <marek.safar@gmail.com>
722
723         A fix for bug #561369
724         * expression.cs (DoNumericPromotion): Fixed typo.
725
726 2009-12-08  Marek Safar  <marek.safar@gmail.com>
727
728         *.cs: Moving to generics world.
729
730         cs-parser.jay: Removed current_array_type.
731
732 2009-12-07  Marek Safar  <marek.safar@gmail.com>
733
734         *.cs: Moving to generics world.
735
736 2009-12-04  Marek Safar  <marek.safar@gmail.com>
737
738         *.cs: Moving to generics world (day 2).
739
740 2009-12-03  Marek Safar  <marek.safar@gmail.com>
741
742         *.cs: Moving to generics world.
743
744 2009-12-02  Marek Safar  <marek.safar@gmail.com>
745
746         * typemanager.cs, parameter.cs, class.cs, delegate.cs, attribute.cs:
747         Encode dynamic type attribute for elements where attributes cannot
748         be used.
749
750 2009-12-01  Marek Safar  <marek.safar@gmail.com>
751
752          argument.cs, assign.cs, expression.cs, cs-parser.jay: Named
753          arguments by ref.
754
755 2009-12-01  Marek Safar  <marek.safar@gmail.com>
756
757         A fix for bug #360455
758         * class.cs: Never report a unused warning for generic events to
759         workaround wrong expression type.
760
761 2009-11-30  Marek Safar  <marek.safar@gmail.com>
762
763         A fix for bug #558305
764         * decl.cs, class.cs: Check partial method definitions using correct
765         flag.
766
767 2009-11-30  Marek Safar  <marek.safar@gmail.com>
768
769         * argument.cs: Don't cache rarely used dynamic flag.
770
771 2009-11-27  Marek Safar  <marek.safar@gmail.com>
772
773         * cs-parser.jay: Use jay global stacks (saves over 3MB for corlib).
774
775 2009-11-27  Marek Safar  <marek.safar@gmail.com>
776
777         * ecore.cs (SimpleName): Removed no longer needed in_transit as
778         Resolve is now non-reentrant (saves ~0.6MB for corlib).
779
780 2009-11-26  Marek Safar  <marek.safar@gmail.com>
781
782         A fix for bug #545081
783         * decl.cs: Check private nested types of nested types recursively.
784
785 2009-11-26  Marek Safar  <marek.safar@gmail.com>
786
787         A fix for bug #558305
788         * location.cs: Ignore self referencing #line directive
789
790 2009-11-26  Marek Safar  <marek.safar@gmail.com>
791
792         A fix for bug #558292
793         * class.cs: Allow single unsafe fixed buffer fields.
794
795 2009-11-26  Marek Safar  <marek.safar@gmail.com>
796
797         * expression: Optimize few more zero-based operations.
798
799 2009-11-26  Marek Safar  <marek.safar@gmail.com>
800
801         * cs-tokenizer.cs, cs-parser.jay: Simplify literal parsing, also
802         avoids boxing of literal values.
803
804 2009-11-26  Marek Safar  <marek.safar@gmail.com>
805
806         * cs-tokenizer.cs, argument.cs, eval.cs, linq.cs, decl.cs,
807         expression.cs, ecore.cs, location.cs, cs-parser.jay, attribute.cs,
808         codegen.cs: LocatedToken redesing to avoid excessive allocation and
809         boxing (saves ~7MB for corlib). Also fixes presise token location.
810
811 2009-11-25  Marek Safar  <marek.safar@gmail.com>
812
813         * ecore.cs, cs-parser.jay: Keep parser structures local. Share
814         common data buckers.
815
816 2009-11-24  Marek Safar  <marek.safar@gmail.com>
817
818         * expression.cs: Lower static array initializer barrier.
819         
820         * support.cs, driver.cs: Share reader buffer.
821
822 2009-11-23  Marek Safar  <marek.safar@gmail.com>
823
824         * cs-tokenizer.cs, support.cs: Some tokenizer optimizations.
825
826 2009-11-23  Marek Safar  <marek.safar@gmail.com>
827
828         * cs-tokenizer.cs, support.cs: Use Dictionary instead of Hashtable,
829         cleanup some obsolete code.
830
831 2009-11-20  Marek Safar  <marek.safar@gmail.com>
832
833         * context.cs, expression.cs, ecore.cs, complete.cs: Cleaned up
834         Expression.Resolve.
835
836 2009-11-20  Marek Safar  <marek.safar@gmail.com>
837
838         * *.cs: Resolved expressions are never resolved again, this helps to
839         uncover some not easy to find bugs and improve the performance.
840
841 2009-11-19  Marek Safar  <marek.safar@gmail.com>
842
843         * *.cs: Made constant expressions fully compatible with any other
844         expression.
845
846 2009-11-19  Marek Safar  <marek.safar@gmail.com>
847
848         * *.cs: DoResolve is a worker method and has to be protected.
849
850 2009-11-18  Marek Safar  <marek.safar@gmail.com>
851
852         * *.cs: More context specific handling.
853
854 2009-11-17  Marek Safar  <marek.safar@gmail.com>
855
856         * *.cs: More context specific handling.
857
858 2009-11-16  Marek Safar  <marek.safar@gmail.com>
859
860         * dynamic.cs, class.cs: Removed few fixed user types conversions.
861         
862         * symbolwriter.cs: Uses public ILOffset.
863
864 2009-11-13  Marek Safar  <marek.safar@gmail.com>
865
866         A fix for bug #553650
867         * generic.cs: Another missing TypeToCoreType, still too many to fix.
868
869 2009-11-13  Marek Safar  <marek.safar@gmail.com>
870
871         A fix for bug #555170
872
873         * class.cs, delegate.cs, enum.cs: Constants have to be available
874         for parameters resolve.
875
876 2009-11-12  Marek Safar  <marek.safar@gmail.com>
877
878         * typemanager.cs, argument.cs, support.cs, delegate.cs: Dynamic
879         arrays.
880
881 2009-11-12  Marek Safar  <marek.safar@gmail.com>
882
883         * argument.cs, context.cs, expression.cs, ecore.cs: Dynamic binding
884         with a statically known candidate set.
885
886 2009-11-11  Scott Peterson  <lunchtimemama@gmail.com>
887
888         * generic.cs: Made type inflation for generic constraint checks
889         recursive. This fixes BGO #553655.
890
891 2009-11-11  Marek Safar  <marek.safar@gmail.com>
892
893         * dynamic.cs, decl.cs, expression.cs, ecore.cs: More dynamic type
894         checks.
895
896 2009-11-10  Marek Safar  <marek.safar@gmail.com>
897
898         * typemanager.cs, generic.cs, parameter.cs, argument.cs, dynamic.cs,
899         linq.cs, rootcontext.cs, ecore.cs, class.cs, delegate.cs,
900         attribute.cs: Add some dynamic error checking.
901
902 2009-11-07  Marek Safar  <marek.safar@gmail.com>
903
904         A fix for bug #553465
905
906         * expression.cs: Fixed mixed version of expression tree anonymous
907         type.
908
909 2009-11-06  Marek Safar  <marek.safar@gmail.com>
910
911         A fix for bug #553031
912
913         * linq.cs, expression.cs, class.cs, cs-parser.jay: Initialize
914         expression tree version of anonymous type with members declaration.
915
916 2009-11-05  Marek Safar  <marek.safar@gmail.com>
917
918         * parameter.cs: Handle nullable parameter default expression.
919         
920         * argument.cs, dynamic.cs, expression.cs, support.cs, ecore.cs,
921         class.cs, attribute.cs: Check for wrong dynamic arguments.
922
923 2009-11-05  Marek Safar  <marek.safar@gmail.com>
924
925         * statement.cs: Dynamic statements.
926
927 2009-11-04  Marek Safar  <marek.safar@gmail.com>
928
929         * dynamic.cs, assign.cs, context.cs, expression.cs, ecore.cs:
930         Compound assignments over dynamic type.
931
932 2009-11-03  Marek Safar  <marek.safar@gmail.com>
933
934         * argument.cs, dynamic.cs, expression.cs, delegate.cs: Dynamic
935         constructor arguments.
936
937 2009-10-30  Marek Safar  <marek.safar@gmail.com>
938
939         * dynamic.cs, convert.cs, assign.cs, constant.cs, expression.cs,
940         codegen.cs: Unary mutator on dynamic member access expression.
941
942 2009-10-29  Marek Safar  <marek.safar@gmail.com>
943
944         A fix for bug #550580   
945         * convert.cs: Don't eliminate explicit precission casts.
946
947 2009-10-28  Marek Safar  <marek.safar@gmail.com>
948
949         A fix for bug #550404
950         
951         * parameter.cs, iterators.cs, context.cs, anonymous.cs,
952         expression.cs, statement.cs, ecore.cs: Quote any nested expression
953         tree.
954
955 2009-10-27  Marek Safar  <marek.safar@gmail.com>
956
957         * constant.cs, nullable.cs: Create nullable-null as LiftedNull
958         constant.
959         
960         * class.cs: Allow nullable binary user operators.
961
962 2009-10-26  Marek Safar  <marek.safar@gmail.com>
963
964         * expression.cs: Move binary expression optimization at the end of
965         resolve.
966
967 2009-10-23  Marek Safar  <marek.safar@gmail.com>
968
969         * constant.cs, nullable.cs, expression.cs, literal.cs, cfold.cs:
970         Separate NullConstant from NullLiteral.
971
972 2009-10-23  Marek Safar  <marek.safar@gmail.com>
973
974         * typemanager.cs, eval.cs, decl.cs, roottypes.cs, context.cs,
975         anonymous.cs, expression.cs, rootcontext.cs, ecore.cs, class.cs,
976         flowanalysis.cs, cs-parser.jay, driver.cs, codegen.cs: Split
977         ModuleContainer. Add common unclosed member check routine.
978
979 2009-10-22  Marek Safar  <marek.safar@gmail.com>
980
981         * argument.cs: Use literal flag for real literals only.
982
983         * dynamic.cs: Use correct return type for custom delegates.
984
985 2009-10-22  Marek Safar  <marek.safar@gmail.com>
986
987         * dynamic.cs, expression.cs: Pass logical binary flag to dynamic
988         resolver.
989
990 2009-10-22  Marek Safar  <marek.safar@gmail.com>
991
992         * dynamic.cs, ecore.cs: Dynamic invocation with void return type.
993
994 2009-10-21  Marek Safar  <marek.safar@gmail.com>
995
996         * dynamic.cs, convert.cs, expression.cs, ecore.cs: Wrap array index
997         conversion.
998
999 2009-10-21  Marek Safar  <marek.safar@gmail.com>
1000
1001         * typemanager.cs, dynamic.cs, expression.cs: Don't resolve runtime
1002         binder flags.
1003
1004 2009-10-20  Marek Safar  <marek.safar@gmail.com>
1005
1006         * argument.cs, dynamic.cs, expression.cs: Latest API update.
1007
1008 2009-10-19  Marek Safar  <marek.safar@gmail.com>
1009
1010         * typemanager.cs, expression.cs: Dynamic array initializer.
1011
1012 2009-10-16  Marek Safar  <marek.safar@gmail.com>
1013
1014         * typemanager.cs, rootcontext.cs: Clear -nostdlib flag when object
1015         is imported.
1016
1017 2009-10-16  Marek Safar  <marek.safar@gmail.com>
1018
1019         A fix for bug #493523, #507067
1020         * convert.cs, nullable.cs, expression.cs: Do implicit and explicit
1021         standard nullable conversion using underlying standard conversion
1022         and not full conversion.
1023
1024 2009-10-15  Marek Safar  <marek.safar@gmail.com>
1025
1026         * dynamic.cs, expression.cs, ecore.cs, delegate.cs: Check return
1027         type in VerifyArgumentsCompat.
1028
1029 2009-10-15  Marek Safar  <marek.safar@gmail.com>
1030
1031         * nullable.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1032         Reject variable used with type arguments.
1033
1034 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1035
1036         * argument.cs, dynamic.cs, assign.cs, expression.cs, ecore.cs:
1037         Implement dynamic expressions assignment.
1038
1039 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1040
1041         * expression.cs: Build underlying expression when resolving unary
1042         mutators.
1043
1044 2009-10-14  Marek Safar  <marek.safar@gmail.com>
1045
1046         * expression.cs: Emit enum array initializer using binary blob.
1047
1048 2009-10-08  Marek Safar  <marek.safar@gmail.com>
1049
1050         * typemanager.cs, constant.cs: Optimize decimal constants which fit
1051         to long range.
1052
1053 2009-10-07  Marek Safar  <marek.safar@gmail.com>
1054
1055         * typemanager.cs: Reset object_type.
1056         
1057         * assign: Made SimpleAssign public.
1058
1059 2009-10-06  Marek Safar  <marek.safar@gmail.com>
1060
1061         * typemanager.cs, decl.cs, namespace.cs, ecore.cs, class.cs: Pass
1062         invocation assembly to IsThisOrFriendAssembly.
1063
1064 2009-10-05  Marek Safar  <marek.safar@gmail.com>
1065
1066         * expression.cs: Equality comparison of generic parameter with
1067         class constraint.
1068
1069 2009-10-05  Marek Safar  <marek.safar@gmail.com>
1070
1071         A fix for bug #543570
1072         * generic.cs: Import predefined constraints correctly.
1073
1074 2009-10-02  Marek Safar  <marek.safar@gmail.com>
1075
1076         * ecore.cs: Don't crash on overloads with optional paremeters where
1077         arguments count overflows.
1078         
1079         * parameter.cs: Import optional parameter constants using optional
1080         value type.
1081
1082 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1083
1084         * Makefile: Default is gmcs compiler.
1085
1086 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1087
1088         * cs-parser.jay: Fixed few NRE.
1089
1090 2009-10-01  Marek Safar  <marek.safar@gmail.com>
1091
1092         * cs-parser.jay, driver.cs: Expose parser exception in verbose mode.
1093
1094 2009-09-30  Marek Safar  <marek.safar@gmail.com>
1095
1096         * linq.cs, convert.cs, assign.cs, expression.cs, ecore.cs: Add
1097         ShimExpression, ImplicitCast.
1098
1099 2009-09-30  Marek Safar  <marek.safar@gmail.com>
1100
1101         A fix for bug #542959
1102         * delegate.cs: Emit correct delegate instance variable when there
1103         are static and non-static overloads.
1104
1105 2009-09-29  Marek Safar  <marek.safar@gmail.com>
1106
1107         * dynamic.cs, linq.cs, anonymous.cs, expression.cs, statement.cs,
1108         ecore.cs, cs-parser.jay: Unary expression dynamic compiler.
1109
1110 2009-09-28  Marek Safar  <marek.safar@gmail.com>
1111
1112         A fix for bug #542487
1113         * ecore.cs: Resolve extension methods hidden by properties.
1114
1115 2009-09-25  Marek Safar  <marek.safar@gmail.com>
1116
1117         * expression.cs, ecore.cs: More dynamic binary expressions.
1118
1119 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1120
1121         * nullable.cs, expression.cs: Fixed null lifted conversion for
1122         bitwise enum operations.
1123
1124 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1125
1126         * convert.cs, ecore.cs: Fixed explicit unsafe coversion of long
1127         values in checked context.
1128
1129 2009-09-22  Marek Safar  <marek.safar@gmail.com>
1130
1131         * expression.cs, ecore.cs: Fixed array index constant conversion.
1132
1133 2009-09-20  Miguel de Icaza  <miguel@novell.com>
1134
1135         * expression.cs: Do not crash when MemberLookup returns something
1136         that is not a MemberExpr here.   Report error 582 instead. 
1137
1138         Fixes #499988.
1139
1140 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1141
1142         * decl.cs, class.cs: Check protected property accessors.
1143
1144 2009-09-18  Marek Safar  <marek.safar@gmail.com>
1145
1146         * dynamic.cs, assign.cs: Dynamic compound assignment.
1147
1148 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1149
1150         * expression.cs: Fixed compound assignment explicit conversion.
1151
1152 2009-09-17  Marek Safar  <marek.safar@gmail.com>
1153
1154         * expression.cs, ecore.cs: Cannot infer variables from method group.
1155
1156 2009-09-16  Marek Safar  <marek.safar@gmail.com>
1157
1158         * argument.cs, dynamic.cs, convert.cs, context.cs, anonymous.cs,
1159         constant.cs, nullable.cs, expression.cs, literal.cs, ecore.cs,
1160         codegen.cs: Dynamic binary operations scaffolding.
1161
1162 2009-09-15  Marek Safar  <marek.safar@gmail.com>
1163
1164         * expression.cs: Fixes nullable promotion for enum type variables.
1165
1166 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1167
1168         * driver.cs, dynamic.cs: Reset more static variables.
1169
1170 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1171
1172         * dynamic.cs, expression.cs, rootcontext.cs, namespace.cs, ecore.cs,
1173         driver.cs: Introduced Expression::MakeExpression.
1174
1175 2009-09-11  Marek Safar  <marek.safar@gmail.com>
1176
1177         * eval.cs: Exposed MessageOutput instead of cleaning up eval API.
1178
1179 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1180
1181         * eval.cs, report.cs: Use Console.Out for all eval error or warning
1182         output.
1183
1184 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1185
1186         A fix for bug #518707
1187         * expression.cs (Is): Optimize only generic parameter type
1188         expression probing value type generic parameter.
1189
1190 2009-09-09  Marek Safar  <marek.safar@gmail.com>
1191
1192         A fix for bug #532571
1193         * ecore.cs: Check for simple name type arguments used with
1194         non-generic type.
1195
1196 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1197
1198         A fix for bug #497421
1199         * generic.cs (CheckConstraint): Don't use buildin types to check for
1200         parameterless constructor.
1201
1202 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1203
1204         A fix for bug #537402
1205         * generic.cs (CheckConstraint): Correctly inflate generic type
1206         arguments when checking generic method. 
1207
1208 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1209
1210         A fix for bug #536463
1211         * decl.cs (AddToContainer): Don't report collision between explicit
1212         and parameterless non-explicit members.
1213
1214 2009-09-08  Marek Safar  <marek.safar@gmail.com>
1215
1216         * eval.cs: Reset more static stuff.
1217
1218 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1219
1220         A fix for bug #324625
1221         * expression.cs, ecore.cs: Create nested generic type expression
1222         using declaring and not current type.
1223
1224 2009-09-07  Marek Safar  <marek.safar@gmail.com>
1225
1226         * *.cs: Changed Report class to accept various output printers and
1227         be an instance class. An expression resolver can now use different
1228         message reporter for each call and Report.Error can safely throw
1229         an exception. Part of ongoing work to turn mcs into proper library.
1230
1231 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1232
1233         * statement.cs, ecore.cs: Removed error reporting from emit code.
1234
1235 2009-09-04  Marek Safar  <marek.safar@gmail.com>
1236
1237         * cs-parser.jay, parameter.cs: Moved parser check out of constructor
1238
1239 2009-09-03  Marek Safar  <marek.safar@gmail.com>
1240
1241         * anonymous.cs, expression.cs, statement.cs, cs-parser.jay: Moved
1242         parser checks out of constructors.
1243
1244 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1245
1246         * expression.cs, statement.cs, ecore.cs: Use common Report.Error.
1247
1248 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1249
1250         A fix for bug #535448
1251         * anonymous.cs, class.cs: Copy return label between all contexts.
1252
1253 2009-09-02  Marek Safar  <marek.safar@gmail.com>
1254
1255         A fix for bug #535395
1256         * namespace.cs: Resolve context can be null.
1257
1258 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1259
1260         A fix for bug #533912
1261         * generic.cs: Use correct context for constraints resolving.
1262
1263 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1264
1265         A fix for bug #532630
1266         * driver.cs: Trim conditional symbols.
1267
1268 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1269
1270         * context.cs: New file.
1271         
1272         * *.exe.sources, *.csproj: Updated.
1273
1274 2009-08-25  Marek Safar  <marek.safar@gmail.com>
1275
1276         * generic.cs, parameter.cs, decl.cs, statement.cs, namespace.cs,
1277         class.cs, generic-mcs.cs, codegen.cs: Add GetSignatureForError to
1278         IMembercontext, some small cleanups.
1279
1280 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1281
1282         * *.cs: Split ResolveContext and EmitContext.
1283
1284 2009-08-24  Marek Safar  <marek.safar@gmail.com>
1285
1286         * *.cs: Only ResolveContext implements IMemberContext.
1287
1288 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1289
1290         * *.cs: Renamed IResolveContext to IMemberContext.
1291
1292 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1293
1294         * *.cs: Detached ResolveContext from EmitContext.
1295
1296 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1297
1298         * codegen.cs: Moved flow-analysis to BlockContext.
1299
1300 2009-08-21  Marek Safar  <marek.safar@gmail.com>
1301
1302         * *.cs: Detached BlockContext from EmitContext.
1303
1304 2009-08-20 Gonzalo Paniagua Javier <gonzalo@novell.com>
1305
1306         * statement.cs: avoid nullref when the return value of GetEnumerator()
1307         does not contain any MoveNext() method.
1308
1309 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1310
1311         * *.cs: Removed IResolveContext::GenericDeclContainer.
1312
1313 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1314
1315         * class.cs, delegate.cs: Changed Delegate to be TypeContainer based.
1316
1317 2009-08-19  Marek Safar  <marek.safar@gmail.com>
1318
1319         * generic.cs, iterators.cs, expression.cs, statement.cs, ecore.cs,
1320         cs-parser.jay, attribute.cs, codegen.cs: Better error reports.
1321
1322 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1323
1324         * *.cs: Removed boolean fields from EmitContext.
1325
1326 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1327
1328         * *.cs: Add IResolveContext::IsStatic.
1329
1330 2009-08-18  Marek Safar  <marek.safar@gmail.com>
1331
1332         * *.cs: Moved TopBlock's methods from EmitContext to TopBlock.
1333
1334 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1335
1336         * *.cs: Removed DeclContainer from EmitContext.
1337
1338 2009-08-17  Marek Safar  <marek.safar@gmail.com>
1339
1340         * *.cs: Add IResolveContext::CurrentTypeParameters.
1341
1342 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1343
1344         * *.cs: Removed TypeContainer and ContainerType from EmitContext.
1345
1346 2009-08-14  Marek Safar  <marek.safar@gmail.com>
1347
1348         * decl.cs, expression.cs, namespace.cs, ecore.cs, class.cs,
1349         codegen.cs: Add IResolveContext::LookupExtensionMethod.
1350
1351 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1352
1353         * decl.cs: Look in PartialContainer for parent type parameters.
1354
1355 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1356
1357         * decl.cs, namespace.cs, ecore.cs, class.cs, attribute.cs,
1358         codegen.cs: Add IResolveContext::LookupTypeParameter.
1359
1360 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1361
1362         * lambda.cs, expression.cs, statement.cs, namespace.cs, ecore.cs:
1363         Moved resolved logic from Emit to Resolve.
1364
1365 2009-08-13  Marek Safar  <marek.safar@gmail.com>
1366
1367         * parameter.cs, decl.cs, roottypes.cs, class.cs, attribute.cs,
1368         codegen.cs: Reworked atttributes handling of ResolveContext.
1369
1370 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1371
1372         * decl.cs, ecore.cs, class.cs, attribute.cs, codegen.cs: Pushed
1373         LookupNamespaceOrType to ResolveContext.
1374
1375 2009-08-12  Marek Safar  <marek.safar@gmail.com>
1376
1377         * typemanager.cs, decl.cs, expression.cs, namespace.cs, ecore.cs,
1378         class.cs: Removed unused parameters and methods.
1379
1380 2009-08-11  Marek Safar  <marek.safar@gmail.com>
1381
1382         * generic.cs, lambda.cs, anonymous.cs, statement.cs, generic-mcs.cs,
1383         codegen.cs: Finding the best common type of a set of expressions for
1384         lambda statements.
1385
1386 2009-08-07  Marek Safar  <marek.safar@gmail.com>
1387
1388         * dynamic.cs, expression.cs: More dynamic conversions.
1389
1390 2009-08-06  Miguel de Icaza  <miguel@novell.com>
1391
1392         * generic.cs: This loop was incorrect, it was increment ii, but
1393         checking for `i'.  This was a change introduced to fix #327497,
1394         now we fix #424012.
1395  
1396         * class.cs: Catch another case for cs0533 error, fixes #324782.
1397
1398 2009-08-06 Rodrigo Kumpera  <rkumpera@novell.com>
1399
1400         * typemanager.cs (GetGenericArguments): SRE returns null for
1401         generic methods on type builder instances if they are not generic
1402         themselves. For example, for Foo<int>::Bar() it returns null, but
1403         not for Foo<int>::Bar<>() or Foo<int>::Bar<double>().
1404
1405 2009-08-05  Marek Safar  <marek.safar@gmail.com>
1406
1407         * argument.cs, dynamic.cs, expression.cs, ecore.cs, class.cs,
1408         delegate.cs: Work on dynamic binding.
1409
1410 2009-08-04  Marek Safar  <marek.safar@gmail.com>
1411
1412         A second fix for bug #525342
1413         * class.cs: Attach partial method attributes to method
1414         implementation.
1415
1416 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1417
1418         * typemanager.cs, parameter.cs, support.cs, class.cs: Dynamic type
1419         restrictions.
1420         
1421         * rootcontext.cs: Default to langversion v4.
1422
1423 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1424
1425         * pending.cs: Check return type before member info is set.
1426
1427 2009-08-03  Marek Safar  <marek.safar@gmail.com>
1428
1429         * anonymous.cs: Fully initialize generic hoisted field expression.
1430
1431 2009-08-02  Miguel de Icaza  <miguel@novell.com>
1432
1433         * cs-parser.jay: Flag variables declared on the interactive shell
1434         as used to prevent the 168 warning about local variable not being
1435         used. 
1436
1437 2009-07-31  Marek Safar  <marek.safar@gmail.com>
1438
1439         * parameter.cs, dynamic.cs, support.cs, class.cs, delegate.cs,
1440         attribute.cs: Emit dynamic export attribute.
1441
1442 2009-07-30  Marek Safar  <marek.safar@gmail.com>
1443
1444         * expression.cs: More verifier work.
1445
1446 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1447
1448         * nullable.cs: Fixed SRE crash during corlib compilation.
1449
1450 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1451
1452         * generic.cs, typemanager.cs, decl.cs, iterators.cs, convert.cs,
1453         nullable.cs, expression.cs, ecore.cs, class.cs, attribute.cs:
1454         More TypeManager.TypeToCoreType needed.
1455
1456 2009-07-29  Marek Safar  <marek.safar@gmail.com>
1457
1458         * anonymous.cs: Update after recent SRE fixes.
1459
1460 2009-07-28  Marek Safar  <marek.safar@gmail.com>
1461
1462         * typemanager.cs, expression.cs, ecore.cs, delegate.cs: Use correct
1463         version of GetFieldHandle for fields of generic types.
1464
1465 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1466
1467         * typemanager.cs, argument.cs, convert.cs, assign.cs, expression.cs,
1468         ecore.cs: Add TypeManager.IsDynamicType,
1469         PredefinedAttributes.Dynamic.
1470
1471 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1472
1473         A fix for bug #415375
1474         * expression.cs: Fixed object and reference type parameter
1475         comparison.
1476
1477 2009-07-27  Marek Safar  <marek.safar@gmail.com>
1478
1479         A fix for bug #525342
1480         * class.cs: Attach partial method attributes to method
1481         implementation.
1482
1483 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1484
1485         * argument.cs, dynamic.cs, expression.cs, class.cs, attribute.cs:
1486         Dynamic arguments.
1487
1488 2009-07-24  Marek Safar  <marek.safar@gmail.com>
1489
1490         * anonymous.cs (MutateField): Add imported types handling.
1491
1492 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1493
1494         * expression.cs, delegate.cs: Moved arguments resolve into their
1495         counterparts expressions. Removed argument resolve from
1496         CollectionElementInitializer.
1497
1498 2009-07-23  Marek Safar  <marek.safar@gmail.com>
1499
1500         A fix for bug #523683
1501         * convert.cs, delegate.cs: Use common overload mechanism for method
1502         group conversion check.
1503
1504 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1505
1506         A fix for bug #523899
1507         * generics.cs: Exact type inference with other bound types.
1508
1509 2009-07-22  Raja R Harinath  <harinath@hurrynot.org>
1510
1511         Don't complain when the same type is implemented by the output
1512         assembly as well as multiple referenced assemblies
1513         * namespace.cs (RootNamespace.LookupTypeReflection): Add
1514         'must_be_unique' flag.
1515         (GlobalRootNamespace): Update to changes.
1516         (Namespace.LookupType): Pass 'must_be_unique' only when we don't
1517         already have a type in hand.
1518
1519 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1520
1521         * expression.cs: More verifier instrumentation.
1522         
1523         * statement.cs: Do proper throw expression conversion.
1524
1525 2009-07-22  Marek Safar  <marek.safar@gmail.com>
1526
1527         A fix for bug #522789
1528         * expression.cs: Mutate invocation return type.
1529
1530 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1531
1532         * anonymous.cs: Split assignable and readonly generated variable
1533         references.
1534
1535 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1536
1537         A fix for bug #521671
1538         * statement.cs: Fixed crash when checking missing type.
1539
1540 2009-07-16  Marek Safar  <marek.safar@gmail.com>
1541
1542         * typemanager.cs, generic.cs, argument.cs, linq.cs, convert.cs,
1543         assign.cs, expression.cs, statement.cs, support.cs, ecore.cs,
1544         class.cs, driver.cs: Work on dynamic binding.
1545
1546         * dynamic.cs: New file.
1547
1548         * *.sources, *.proj: Updated.
1549
1550 2009-07-15  Marek Safar  <marek.safar@gmail.com>
1551
1552         * expression.cs (Conditional): Avoid double Resolve.
1553
1554 2009-07-13  Marcus Griep  <marcus@griep.us>
1555
1556         * ecore.cs: Fix obscure bug with resolving members of interfaces
1557         that hide parent interface members. Fixes bug #444388 and corrects
1558         bug #323096
1559
1560 2009-07-13  Marek Safar  <marek.safar@gmail.com>
1561
1562         * expression.cs (LocalVariableReference): Bounce resolve.
1563
1564 2009-07-10  Marek Safar  <marek.safar@gmail.com>
1565
1566         * typemanager.cs, lambda.cs, parameter.cs, convert.cs, anonymous.cs,
1567         expression.cs, literal.cs, ecore.cs, complete.cs: Moved internal
1568         types to new class.
1569         
1570         * support.cs: New dynamic type wrapper.
1571
1572 2009-07-08  Marek Safar  <marek.safar@gmail.com>
1573
1574         * ecore.cs, cs-parser.jay: Better error reporting for implicitly
1575         typed local variable.
1576
1577 2009-07-06  Marek Safar  <marek.safar@gmail.com>
1578
1579         A fix for bug #519005
1580         * anonymous.cs: Use null_type as no return type placeholder.
1581
1582 2009-07-02  Marek Safar  <marek.safar@gmail.com>
1583
1584         * generic.cs: Handle type inference of identical type parameters
1585         with different bounds.
1586
1587 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1588
1589         * expression.cs, class.cs: Events variance.
1590         
1591         * cs-parser.jay: Interface events error messages.
1592
1593 2009-07-01  Marek Safar  <marek.safar@gmail.com>
1594
1595         * generic.cs, argument.cs: Updated type inference logic to C# 4.0.
1596
1597 2009-06-29  Marek Safar  <marek.safar@gmail.com>
1598
1599         * parameter.cs, convert.cs, expression.cs, class.cs: Default
1600         parameter expression can be value-type New.
1601
1602         * cs-parser.jay: Clean up too many parameter modifier boolean flags.
1603
1604 2009-06-26  Marek Safar  <marek.safar@gmail.com>
1605
1606         * generic.cs, argument.cs, expression.cs, ecore.cs, cs-parser.jay:
1607         Implemented C# 4.0 named arguments.
1608
1609 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1610
1611         * typemanager.cs, parameter.cs, iterators.cs, convert.cs,
1612         expression.cs, ecore.cs, delegate.cs: Removed unnecessary ArgList
1613         parameter modifier. Also fixes bug #515497.
1614
1615 2009-06-24  Marek Safar  <marek.safar@gmail.com>
1616
1617         * *.cs: Replaced ArrayList with Arguments in need of a nonsequential 
1618         arguments expression to be implemented.
1619         
1620         *.sources: Add argument.cs
1621
1622 2009-06-23  Marek Safar  <marek.safar@gmail.com>
1623
1624         * parameter.cs: Moved GetParameterIndexByName to base class.
1625         
1626         * expression.cs, statement.cs, ecore.cs, delegate.cs: Removed
1627         unused AType. Use argument's version of GetExpressionTree.
1628
1629 2009-06-22  Marek Safar  <marek.safar@gmail.com>
1630
1631         * expression.cs, cs-parser.jay, attribute.cs, codegen.cs: Named
1632         arguments grammar.
1633
1634 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1635
1636         A fix for bug #514096
1637         * class.cs: Allow IntPtr/UIntPtr fields to be volatile.
1638
1639 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1640
1641         * expression.cs: The first multi-dimensional array nested array
1642         initializers was not checked.
1643         
1644         * statement.cs (Switch): Fixed error message to reflect 2.0 changes.
1645
1646 2009-06-17  Marek Safar  <marek.safar@gmail.com>
1647
1648         A fix for bug #513400
1649         * nullable.cs (EmitEquality): Operands emit could be simplified for
1650         built-in types when we now emit user operators differently.
1651
1652 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1653
1654         * ecore.cs: Report inaccessible delegate methods correctly.
1655
1656 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1657
1658         * parameter.cs, expression.cs, ecore.cs, class.cs, delegate.cs,
1659         cs-parser.jay: Implemented C# 4.0 optional parameters.
1660
1661 2009-06-16  Marek Safar  <marek.safar@gmail.com>
1662
1663         * driver.cs: Removed broken DefineManifestResource.
1664
1665 2009-06-16  Raja R Harinath  <harinath@hurrynot.org>
1666
1667         * Makefile [net_2_0_bootstrap]: Don't explicitly mention net_1_1.
1668         Use $(BOOTSTRAP_PROFILE) instead.
1669
1670 2009-06-12  Jb Evain  <jbevain@novell.com>
1671
1672         * rootcontext.cs: add a Platform field.
1673         * driver.cs: handle /platform.
1674         * codegen.cs: pass the proper flags according to
1675         the platform when saving the assembly.
1676
1677 2009-06-11  Marek Safar  <marek.safar@gmail.com>
1678
1679         * parameter.cs, const.cs, report.cs, cs-parser.jay, attribute.cs:
1680         Add optional parameters grammar.
1681
1682 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1683
1684         * eval.cs, anonymous.cs, report.cs, rootcontext.cs, cs-parser.jay,
1685         driver.cs: Split lang version and metadata version.
1686
1687 2009-06-10  Marek Safar  <marek.safar@gmail.com>
1688
1689         * decl.cs: Better overload ctor collision error message.
1690
1691 2009-06-05  Jb Evain  <jbevain@novell.com>
1692
1693         * driver.cs (EmbededResource): avoid using an internal method
1694         in gmcs to embed manifest resources.
1695
1696 2009-06-04  Sebastien Pouliot  <sebastien@ximian.com>
1697
1698         * generic.cs, parameter.cs: Avoid using 'var' so we can bootstrap
1699         the compiler from older mono versions (like moon's bots)
1700
1701 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1702
1703         * namespace.cs (LookupTypeReflection): Ignore collisions between
1704         forwarded types.
1705
1706 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1707
1708         * codegen.cs: Enabled generic type forwarders.
1709
1710 2009-06-04  Marek Safar  <marek.safar@gmail.com>
1711
1712         * dmcs.*: Add another version of SRE compiler.
1713
1714 2009-06-03  Marek Safar  <marek.safar@gmail.com>
1715
1716         * generic.cs, typemanager.cs, parameter.cs, convert.cs,
1717         generic-mcs.cs: Fixed variant type conversions.
1718
1719 2009-06-02  Marek Safar  <marek.safar@gmail.com>
1720
1721         A fix for bug #507863
1722         * codegen.cs: Fixes a crash on invalid string value attribute.
1723
1724 2009-06-01  Marek Safar  <marek.safar@gmail.com>
1725
1726         A fix for bug #508334
1727         * typemanager.cs, parameter.cs, convert.cs, expression.cs, ecore.cs,
1728         cs-parser.jay: Fully import __arglist modifier.
1729
1730 2009-05-29  Marek Safar  <marek.safar@gmail.com>
1731
1732         * generic.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs,
1733         delegate.cs, generic-mcs.cs: Rewrote type variance checks to
1734         actually work with closed generic types.
1735
1736 2009-05-27  Alan McGovern  <amcgovern@novell.com>
1737
1738         * class.cs, decl.cs, delegate.cs, parameter.cs: 
1739         Fix the build by replacing the use of 'var' with the actual type.
1740
1741 2009-05-27  Marek Safar  <marek.safar@gmail.com>
1742
1743         * generic.cs, parameter.cs, decl.cs, ecore.cs, class.cs, delegate.cs
1744     cs-parser.jay, generic-mcs.cs: Report wrong variant types
1745         declarations.
1746           
1747         * driver.cs, rootcontext.cs, report.cs: Add 3.0 language version
1748         filter.
1749
1750 2009-05-26  Rodrigo Kumpera  <rkumpera@novell.com>
1751                         Marek Safar  <marek.safar@gmail.com>
1752
1753         A fix for bug #377509
1754         * parameter.cs: Use predefined and not empty name for implicit
1755         setters.
1756
1757 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1758
1759         * class.cs: Don't report wrong warnings for event fields.
1760
1761 2009-05-21  Marek Safar  <marek.safar@gmail.com>
1762
1763         A fix for bug #504667
1764         * class.cs: Check for static class using parent container instead of
1765         parent type.
1766
1767 2009-05-08  Marek Safar  <marek.safar@gmail.com>
1768
1769         A fix for bug #496922
1770         * expression.cs: Always use temporary variable when using object
1771         initializer.
1772
1773 2009-04-28  Marek Safar  <marek.safar@gmail.com>
1774
1775         A fix for bug #495112
1776         * class.cs (IsUnmanagedType): Handle recursive unmanaged types using
1777         local cache.
1778
1779 2009-04-27  Miguel de Icaza  <miguel@novell.com>
1780
1781         * driver.cs: Add a flag to work as a replacement for CSC in VS.
1782
1783 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1784
1785         * complete.cs: No idea how gonzalo got a null in the list, but
1786         avoid crashing.
1787
1788 2009-04-24  Miguel de Icaza  <miguel@novell.com>
1789
1790         * complete.cs (CompletionElementInitializer): New completion class
1791         to support completing inside a C# 3 element initializer, so this
1792         allows completion for Silverlight situations where it is very
1793         common to do:
1794
1795         new TextBlock () { Fo<TAB>
1796
1797         (CompletionSimpleName): Expose the prefix that was
1798         passed to the simple name.
1799
1800         * cs-parser.jay (object_or_collection_initializer): Add support
1801         for element_initializers.
1802
1803         * expression.cs (CollectionOrObjectInitializers.DoResolve):
1804         special case completion expressions as this method aggressively
1805         collects data before it operates, and errors were being thrown
1806         earlier than we were able to complete.
1807
1808 2009-04-23  Miguel de Icaza  <miguel@novell.com>
1809
1810         * eval.cs: Make getcompletions silent and enable debugging output
1811         if the -v option is passed.
1812
1813         * namespace.cs (NamespaceEntry.CompletionGetTypesStartingWith):
1814         Consider looking up the namespace that matches the prefix being
1815         used. 
1816
1817         This is part of the support for allowing completions like:
1818         `System.Co<TAB>' to complete to System.Console.
1819
1820         * complete.cs (CompletionSimpleName.AppendResults): Make this
1821         routine reusable.
1822
1823 2009-04-21  Raja R Harinath  <harinath@hurrynot.org>
1824
1825         * cs-parser.jay (GetTokenName): Mark GENERATE_COMPLETION and
1826         COMPLETE_COMPLETION as internal.
1827
1828 2009-04-17  Miguel de Icaza  <miguel@novell.com>
1829
1830         * complete.cs: Include namespace resolution in simple names as
1831         well as global types and types in the using scope in the
1832         resolution. 
1833
1834         * namespace.cs: Supporting infrastrcture to provide completions
1835         based on the current using scope. 
1836
1837         * eval.cs: Introduce an entry point that allows for initialization
1838         to return a list of the files passed on the command line.
1839
1840 2009-04-14  Marek Safar  <marek.safar@gmail.com>
1841
1842         A fix for bug #494243
1843         * report.cs (SymbolRelatedToPreviousError): Fixed NRE.
1844
1845 2009-04-13  Marek Safar  <marek.safar@gmail.com>
1846
1847         A fix for bug #493887
1848         * statement.cs: Don't skip string multi-section with default or
1849         null label when populating string hashtable.
1850
1851 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1852
1853         A fix for bug #492329
1854         * expression.cs (New): Load variable when assigning type parameter
1855         to ref variable.
1856
1857 2009-04-06  Marek Safar  <marek.safar@gmail.com>
1858
1859         A fix for bug #488960
1860         * decl.cs: Compare MVAR types using non-null values.
1861
1862 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1863
1864         * typemanager.cs, expression.cs: Removed unused nullable checks.
1865
1866 2009-03-27  Marek Safar  <marek.safar@gmail.com>
1867
1868         * *.cs: Removed some gmcs conditionals.
1869
1870 2009-03-26  Marek Safar  <marek.safar@gmail.com>
1871
1872         * generic.cs, support.cs: Moved generics stuff out of support.cs
1873
1874 2009-03-24  Marek Safar  <marek.safar@gmail.com>
1875
1876         * ecore.cs, expression.cs: Use queried type for MethodGroupExpr
1877         DeclaringType.
1878
1879 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1880
1881         * attribute.cs: Consider all members for error reporting when
1882         checking named arguments.
1883
1884 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1885
1886         A fix for bug #487625
1887         * namespace.cs: Use a warning for all predefined type conflicts.
1888
1889 2009-03-23  Marek Safar  <marek.safar@gmail.com>
1890
1891         A fix for bug #485706
1892         * statement.cs: Explicitly type catch type argument to pass verifier
1893         check.
1894
1895 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1896
1897         Initial support to provide code completion facilities to consumers
1898         of the evaluator API.
1899         
1900         * cs-tokenizer.cs (CompleteOnEOF): this new property is used to
1901         support the completion engine.   When we reach the end of the
1902         input stream instead of returning EOF, when this flag is true the
1903         tokenizer instead produces:
1904
1905                 One GENERATE_COMPLETION token: this token then must be
1906                 handled in the grammar at every point where the user
1907                 would likely request a completion.
1908
1909                 As many COMPLETE_COMPLETION tokens as necessary.   These
1910                 tokens are generated to assist the parser in unwinding and
1911                 producing a valid parse tree.    
1912
1913         The parser rules do not have to be perfect, the parser needs to be
1914         augmented with judicious use of GENERATE_COMPLETION tokens to
1915         improve the areas where we can provide completion and the parser
1916         needs to add support for COMPLETE_COMPLETION tokens in productions
1917         to make them work.
1918
1919         It is common to not have enough support for COMPLETE_COMPLETION
1920         under certain rules and that even if we generated the
1921         GENERATE_COMPLETION token that the resulting tree will be invalid
1922         due to the missing rules that support COMPLETE_COMPLETION.
1923
1924         The final EOF token is produced by having the parser notify the
1925         tokenizer when it reaches the root production that the next token
1926         should be EOF.
1927
1928         * support.cs (CompletionResult): New Exception.   This exception
1929         is thrown to return the completion results when one of the special
1930         completion expressions is reached.
1931
1932         This exception is thrown by the completing ExpressionStatements
1933         classes that live in complete.cs
1934
1935         * complete.cs (CompletingExpression): a new base class for
1936         completing expressions.   This derives from the
1937         ExpressionStatement class and not from Expression as it allows
1938         completion to happen not only where expressions are expected in
1939         the grammar, but also where statements are expected.
1940
1941         (CompletionSimpleName): A new class used to provide completions
1942         for SimpleNames.     This currently only resolves to local
1943         variables from the evaluator context (GetVars call).
1944
1945         (CompletionMemberAccess): Implements support for completing member
1946         access patterns. 
1947
1948         * cs-parser.jay: Add support for completion in a few places. 
1949
1950         * eval.cs (GetCompletions): New public API for the evaluator that
1951         returns a list of possible completions given the input.   The
1952         return value is an array of completions 
1953
1954         * anonymous.cs (Compatible): If the exception thrown from the
1955         resolved expression is a CompletionResult exception let that one
1956         through instead of printing a diagnostic error in the try/catch. 
1957 <       
1958 2009-03-22  Miguel de Icaza  <miguel@novell.com>
1959
1960         * 
1961
1962         * driver.cs (Main): Use Environment.Exit to quit quickly and
1963         prevent the compiler from doing the usual wait for helper thread
1964         to terminate.  
1965
1966         This is to prevent a slowdown that was reported by Gonzalo on
1967         ASP.NET 
1968
1969 2009-03-19  Marek Safar  <marek.safar@gmail.com>
1970
1971         * ecore.cs: Load build-in types directly instead of accessing
1972         an internal field.
1973
1974 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1975
1976         * ecore.cs: Always use unbox.any when available.
1977
1978 2009-03-18  Marek Safar  <marek.safar@gmail.com>
1979
1980         * class.cs: Always set TypeAttributes.BeforeFieldInit conditionally.
1981
1982 2009-03-17  Marek Safar  <marek.safar@gmail.com>
1983
1984         * generic.cs: Removed obsolete version of type inference.
1985
1986 2009-03-16  Marek Safar  <marek.safar@gmail.com>
1987
1988         * typemanager.cs, decl.cs, roottypes.cs, anonymous.cs, nullable.cs,
1989         expression.cs, rootcontext.cs, namespace.cs, ecore.cs, class.cs,
1990         delegate.cs, flowanalysis.cs, cs-parser.jay, driver.cs,
1991         attribute.cs, codegen.cs: Changed RootTypes to be ModuleContainer.
1992
1993 2009-03-11  Marek Safar  <marek.safar@gmail.com>
1994
1995         A fix for bug #482996
1996         * anonymous.cs: Make sure we are not infering return type when
1997         checking type compatibility.
1998
1999 2009-03-11  Marek Safar  <marek.safar@gmail.com>
2000
2001         * typemanager.cs, generic.cs, parameter.cs, decl.cs, const.cs,
2002         rootcontext.cs, namespace.cs, class.cs, delegate.cs, driver.cs,
2003         generic-mcs.cs, attribute.cs, codegen.cs: Maintain predefined
2004         attributes in their own structure. Needed when accessing their
2005         properties before they are resolved.
2006
2007 2009-03-09  Marek Safar  <marek.safar@gmail.com>
2008
2009         * cs-tokenizer.cs: Optimized GetKeyword using an array instead of
2010         hashtable (~10x faster).
2011         
2012         * driver.cs: Removed wrong Reset.
2013
2014 2009-03-08  Marek Safar  <marek.safar@gmail.com>
2015
2016         * class.cs: Use correct common base type for unmanaged delayed
2017         check.
2018
2019         * rootcontext.cs: Wrap unhandled exception.
2020
2021 2009-03-06  Raja R Harinath  <harinath@hurrynot.org>
2022
2023         Make SeekableStreamReader self-tuning and arbitrarily seekable
2024         * support.cs (SeekableStreamReader.ResetStream): New.  Allocates
2025         the buffer.
2026         (SeekableStreamReader.Position.set): Use it.  Simplify logic
2027         which, as a side-effect, makes it arbitrarily-seekable.  Tune the
2028         buffer size when the stream needs to be re-read from the beginning.
2029
2030 2009-03-05  Marek Safar  <marek.safar@gmail.com>
2031
2032         A fix for bug #480100
2033         * parameter.cs: A parameter is not hoisted when used directly as ET.
2034
2035 2009-03-04  Marek Safar  <marek.safar@gmail.com>
2036
2037         * statement.cs: Fixed an issue when using variable is of interface
2038         type.
2039
2040 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2041
2042         A fix for bug #480319
2043         * report.cs, driver.cs: Support -warnaserror-:<warning list> option.
2044
2045 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2046
2047         A fix for bug #480867
2048         * typemanager.cs, expression.cs, ecore.cs: Changed method group
2049         expression to have no valid type.
2050
2051 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2052
2053         A fix for bug #481258
2054         * class.cs: Set extension method flag in partial container.
2055
2056 2009-03-03  Marek Safar  <marek.safar@gmail.com>
2057
2058         * statement.cs, typemanager.cs: Use expression for StringEmitter.
2059         
2060         * attribute.cs: Add sanity check.
2061
2062 2009-02-27  Marek Safar  <marek.safar@gmail.com>
2063
2064         * class.cs: Add external constructor error.
2065
2066 2009-02-26  Marek Safar  <marek.safar@gmail.com>
2067
2068         A fix for bug #475354
2069         * convert.cs, nullable.cs, expression.cs, statement.cs: Emit
2070         correctly user defined nullable equality operators.
2071
2072 2009-02-25  Marek Safar  <marek.safar@gmail.com>
2073
2074         A fix for bug #479532
2075         * expression.cs: Implement NewInitialize::AddressOf.
2076
2077 2009-02-25  Marek Safar  <marek.safar@gmail.com>
2078
2079         A fix for bug #413633
2080         * expression.cs: Iterate all base class-constraint types.
2081
2082 2009-02-24  Marek Safar  <marek.safar@gmail.com>
2083
2084         A fix for bug #479209
2085         * literal.cs: Mutate null underlying type.
2086
2087 2009-02-24  Marek Safar  <marek.safar@gmail.com>
2088
2089         A fix for bug #476295
2090         * convert.cs: Avoid wrapping implicitly convertible reference type.
2091
2092 2009-02-23  Marek Safar  <marek.safar@gmail.com>
2093
2094         * iterators.cs: Create MemberName correctly.
2095
2096 2009-02-23  Marek Safar  <marek.safar@gmail.com>
2097
2098         A fix for bug #478655
2099         * literal.cs: Check also underlying null type conversion.
2100
2101 2009-02-21  Marek Safar  <marek.safar@gmail.com>
2102
2103         * generic.cs, ecore.cs, class.cs: Removed redundant AsAccessible.
2104
2105 2009-02-20  Marek Safar  <marek.safar@gmail.com>
2106
2107         A fix for bug #477447
2108         * statement.cs: Add reference to correct parent storey when this
2109         is accessible from deep children storey (more than 1 level).
2110
2111 2009-02-19  Marek Safar  <marek.safar@gmail.com>
2112
2113         A fix for bug #475860 by David Mitchell <dmitchell@logos.com>
2114         * class.cs: Define base type members before setting up member cache.
2115
2116 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2117
2118         A fix for bug #477378
2119         * nullable.cs, expression.cs, statement.cs: More precise null type
2120         sanity checks.
2121
2122 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2123
2124         A fix for bug #472805
2125         * typemanager.cs, namespace.cs: Import only visible extension method
2126         types.
2127
2128 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2129
2130         A fix for bug #476895
2131         * attribute.cs: Use correct resolve context for attribute type.
2132
2133 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2134
2135         A fix for bug #476266
2136         * anonymous.cs: Mutate multi-dimensional arrays.
2137
2138 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2139
2140         A fix for bug #476400
2141         * statement.cs, expression.cs: Removed wrong Dispose optimization.
2142
2143 2009-02-18  Marek Safar  <marek.safar@gmail.com>
2144
2145         A fix for bug #476811
2146         * generics.cs: Fixed null-literal check.
2147
2148 2009-02-17  Marek Safar  <marek.safar@gmail.com>
2149
2150         * typemanager.cs, convert.cs, flowanalysis.cs, driver.cs,
2151         expression.cs, ecore.cs, rootcontext.cs, eval.cs, class.cs: More
2152         messing with static variables.
2153
2154 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2155
2156         A fix for bug #475965
2157         * generics.cs: Check generic parameter type after extracting from
2158         Expression<T>.
2159
2160 2009-02-16  Marek Safar  <marek.safar@gmail.com>
2161
2162         A fix for bug #475823
2163         * convert.cs, expression.cs, literal.cs, ecore.cs, cfold.cs: Add
2164         typed-null support.
2165
2166 2009-02-14  Marek Safar  <marek.safar@gmail.com>
2167
2168         * modifiers.cs, decl.cs, ecore.cs, class.cs, flowanalysis.cs:
2169         Simplified event field definition using backing field and not
2170         field builder directly.
2171
2172         * expression.cs (EmitLdArg): Optimize fast paths.
2173
2174 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2175
2176         A fix for bug #475327
2177         * expression.cs (ArrayCreation): Don't mutate values optimized away.
2178
2179 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2180
2181         A fix for bug #475342
2182         * cs-parser.jay: Using 'super' instead of 'base' to call base
2183         constructor crashes compiler.
2184
2185 2009-02-13  Marek Safar  <marek.safar@gmail.com>
2186
2187         A fix for bug #475354
2188         * expression.cs (Constantify): Add nullable types.
2189         
2190         * const.cs (EmitDecimalConstant): Avoid explicit cast.
2191
2192 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2193
2194         A fix for bug #475246
2195         * expression.cs: More broken flowanalysis hacking needed.
2196
2197 2009-02-12  Marek Safar  <marek.safar@gmail.com>
2198
2199         * attribute.cs: Compare only ref/out array modifiers. 
2200
2201 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2202
2203         * statement.cs: Use member cache when looking for foreach members.
2204
2205 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2206
2207         * expression.cs: Don't expose internal initializer types.
2208         
2209         * statement.cs: Check also explicit conversions for goto case.
2210
2211 2009-02-11  Marek Safar  <marek.safar@gmail.com>
2212
2213         * convert.cs, statement.cs: Removed usage of IsAssignableFrom.
2214
2215 2009-02-10  Marek Safar  <marek.safar@gmail.com>
2216
2217         * *.cs: Replace null-type with NullLiteral where appropriate.
2218
2219 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2220
2221         * expression.cs: Initializer of reference argument use temporary
2222         variable to be verifiable.
2223         
2224         * parameter.cs: Share EmitLdArg.
2225
2226 2009-02-09  Marek Safar  <marek.safar@gmail.com>
2227
2228         A fix for bug #473559
2229         * class.cs: Fixed: Not reporting error about nested class with the
2230         same name.
2231
2232 2009-02-06  Scott Peterson  <lunchtimemama@gmail.com>
2233
2234         Contributed under the MIT/X11 license.
2235
2236         * generic.cs: Added VerifyVariantTypeParameters which performs new
2237         variance verification logic. The old logic, based on the spec, was
2238         wrong because the spec is full of LIES!
2239
2240         * generic-mcs.cs: Stubbed out the VerifyVariantTypeParameters method.
2241
2242         *typemanager.cs: Moved variance verification logic to GenericTypeExpr.
2243
2244         * class.cs:
2245         * ecore.cs: Added calls to the new variance verification logic.
2246
2247         * parameter.cs:
2248         * delegate.cs: Removed calls to the old variance verification logic.
2249
2250 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2251
2252         * delegate.cs: Use cached Invoke method directly.
2253
2254 2009-02-06  Marek Safar  <marek.safar@gmail.com>
2255
2256         * expression.cs: Emit expression tree for hoisted variable access.
2257
2258 2009-02-04  Marek Safar  <marek.safar@gmail.com>
2259
2260         * namespace.cs: Add better extension class check.
2261
2262 2009-02-05  Scott Peterson  <lunchtimemama@gmail.com>
2263
2264         * generic.cs: Fixed typeo (TypeParameter.Variacne).
2265
2266 2009-02-04  Scott Peterson  <lunchtimemama@gmail.com>
2267
2268         This patch adds initial generic variance support to the compiler.
2269         It is contributed under the MIT/X11 license.
2270
2271         * typemanager.cs: Modified ImplementsInterface to check variance.
2272         Added VerifyVariantTypeParameters which checks the specified type to see
2273         if it uses a variant type parameter as a type argument (which is not
2274         allowed). Added IsVariantOf which determins if the first type is a
2275         variant of the second. NOTE: This only supports reference types at
2276         the moment to conform with the current level of VM support. When the
2277         VM supports value types, this will follow step.
2278
2279         * generic.cs: Added the Variance enum. Added a Variance property to
2280         TypeParameter and added variance support to definition phase. Added a
2281         Variance property to TypeParameterName. Also check to make sure that
2282         no variant types appear in generic method parameters.
2283
2284         * cs-tokenizer.cs: Modified parse_less_than to tokenize the variance
2285         keywords if the langversion supports it.
2286
2287         * parameter.cs: Added Parameter.VerifyNoVariantTypeParameters to ensure
2288         that variant types are only used in legal positions. Also added
2289         ParametersCompiled.VerifyNoVariantTypeParameters to check all of its
2290         parameters.
2291
2292         * decl.cs: Construct TypeParameter with the variance information.
2293
2294         * convert.cs: Checks variance in ImplicitReferenceConversionExists
2295         and ImplicitConversionStandard.
2296
2297         * rootcontext.cs: Added new "Future" language version.
2298
2299         * class.cs: In TypeContainer.DoDefineMembers, ensure that contravariant
2300         type parameters are not used as type arguments in interface inheritance.
2301         In MemberBase.DoMemberDependentChecks, ensure that contravariant type
2302         parameters are not used as method return types. In MemberBase.
2303         ResolveMemberType, ensure that variant type parameters are not used
2304         as type arguments. Also call VerifyNoVariantTypeParameters on every
2305         set of parameters which are resolved.
2306
2307         * delegate.cs: Modified Delegate.Define to ensure that variant
2308         parameters are not used as type arguments and that a contravariant
2309         parameter is not used as the return type. Also call
2310         VerifyNoVariantTypeParameters on the delegate parameters.
2311
2312         * cs-parser.jay: Modified grammar to support "in" and "out" keywords
2313         to specify generic variance.
2314
2315         * driver.cs: Added support for LanguageVersion.Future in the form of
2316         "-langversion:future".
2317
2318         * generic-mcs.cs: Stubbed out new members in generic.cs.
2319
2320 2009-02-03  Marek Safar  <marek.safar@gmail.com>
2321
2322         * class.cs, generic.cs: Emit type parameter constraints for nested
2323         types.
2324
2325 2009-02-02  Marek Safar  <marek.safar@gmail.com>
2326
2327         A fix for bug #471213
2328         * class.cs: Avoid emitting backing field for abstract event fields.
2329
2330 2009-02-01  Marek Safar  <marek.safar@gmail.com>
2331
2332         A fix for bug #359731
2333         * cs-tokenizer.cs, cs-parser.jay: Correctly parse nested query
2334         expressions.
2335
2336 2009-01-30  Marek Safar  <marek.safar@gmail.com>
2337
2338         A fix for bug #470767
2339         * statement.cs: Introduced BlockScopeExpression, needed when 
2340         expression tree conversion has to emit scope variables.
2341
2342 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2343
2344         * class.cs: Remove duplicate CallingConvention.
2345
2346 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2347
2348         *.cs: Rename Parameters to ParametersCompiled and ParametersImported
2349         when I finally found the right naming convention.
2350
2351 2009-01-29  Marek Safar  <marek.safar@gmail.com>
2352
2353         * cs-tokenizer.cs: Put back different open parens optimization.
2354
2355 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2356
2357         A fix for bug #470227
2358         * cs-tokenizer.cs: Remove too agressive parser optimization.
2359
2360 2009-01-28  Marek Safar  <marek.safar@gmail.com>
2361
2362         A fix for bug #324319
2363         * class.cs: Remove too early base type resolve.
2364
2365 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2366
2367         A fix for bug #324319
2368         * ecore.cs: Explicitly type null when assigning to type argument to
2369         make pass verifier check.
2370
2371 2009-01-27  Marek Safar  <marek.safar@gmail.com>
2372
2373         * anonymous.cs: Fixed recent regression when initializing captured 
2374         this.
2375
2376 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2377
2378         A fix for bug #469019
2379         * anonymous.cs: Use all parent type parameters when instantiating
2380         nested generic storey.
2381
2382 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2383
2384         * expression.cs: Check for null instance methodgroup expression.
2385
2386 2009-01-26  Marek Safar  <marek.safar@gmail.com>
2387
2388         A fix for bug #469244
2389         * cs-tokenizer.cs, cs-parser.jay: Fixed parsing of nullable type
2390         instance inside a conditional expression.
2391
2392 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2393
2394         * typemanager.cs, generic.cs, parameter.cs, decl.cs, anonymous.cs,
2395         expression.cs, report.cs, ecore.cs, attribute.cs: Use common 
2396         GetElementType and HasElementType. IsValueType clean up.
2397
2398 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2399
2400         * nullable.cs: Use common EmitCall.
2401         
2402         * expression.cs: Emit constraint. for virtual calls only.
2403
2404 2009-01-23  Marek Safar  <marek.safar@gmail.com>
2405
2406         * typemanager.cs, generic.cs, eval.cs, convert.cs, const.cs, 
2407         expression.cs, statement.cs, rootcontext.cs, ecore.cs, class.cs,
2408         driver.cs, attribute.cs, enum.cs: Split IsValueType and IsStruct
2409         checks.
2410
2411 2009-01-22  Jb Evain  <jbevain@novell.com>
2412
2413         * anonymous.cs: make anonymous types' ToString implementation
2414         match what csc outputs.
2415
2416 2009-01-21  Marek Safar  <marek.safar@gmail.com>
2417
2418         * typemanager.cs, ecore.cs, iterator.cs: TypeLookupExpression clean
2419         up.
2420
2421 2009-01-17  Marek Safar  <marek.safar@gmail.com>
2422
2423         * convert.cs, ecore.cs: Explicitly casts type arguments to pass
2424         verifier checks.
2425
2426 2009-01-16  Marek Safar  <marek.safar@gmail.com>
2427
2428         * nullable.cs (LiftedBinaryOperator): Check for all possible null
2429         expressions.
2430
2431 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2432
2433         A fix for bug #466634
2434         * statement.cs: Add reference for nested storey when only this
2435         is captured.
2436
2437 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2438
2439         A fix for bug #466474
2440         * codegen.cs: Emit SecurityPermissionAttribute when -unsafe option
2441         was specified.
2442
2443 2009-01-15  Marek Safar  <marek.safar@gmail.com>
2444
2445         * iterators.cs, anonymous.cs, expression.cs, statement.cs, ecore.cs:
2446         Fixed nested stories parent referencing process. Also fixes #463985.
2447
2448 2009-01-06  Marek Safar  <marek.safar@gmail.com>
2449
2450         * decl.cs, iterators.cs, expression.cs, statement.cs, doc.cs, 
2451         class.cs, cs-parser.jay, codegen.cs: Clean up destructor
2452         implementation. Also fixes #463108.
2453
2454 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2455
2456         A fix for bug #416109
2457         * decl.cs: Issue correct CLSAttribute warning location.
2458
2459 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2460
2461         A fix for bug #456775
2462         * attribute.cs: Use attribute owner scope when resolving attribute
2463         arguments.
2464
2465 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2466
2467         A fix for bug #457257
2468         * decl.cs: Fixed incorrect member declaring type comparison.
2469
2470 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2471
2472         A fix for bug #460896
2473         * driver.cs: Handle /RES resources as embeddable.
2474
2475 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2476
2477         A fix for bug #462515
2478         * ecore.cs: Report inacessible members upwards.
2479
2480 2009-01-05  Marek Safar  <marek.safar@gmail.com>
2481
2482         A fix for bug #463190, #463192
2483         * decl.cs, namespace.cs: Also import internal extension classes.
2484
2485 2009-01-04  Marek Safar  <marek.safar@gmail.com>
2486
2487         A fix for bug #463415
2488         * generic.cs: Use right index for RemoveDependentTypes.
2489
2490 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2491
2492         A fix for bug #463196
2493         * expression.cs: Fixed enum to null comparison.
2494
2495 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2496
2497         A fix for bug #463121
2498         * nullable.cs: Fixed nullable user equality operator comparison.
2499
2500 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2501
2502         A fix for bug #462950
2503         * class.cs, decl.cs: Use full explicit name when defining automatic
2504         property backing field.
2505
2506 2009-01-02  Marek Safar  <marek.safar@gmail.com>
2507
2508         A fix for bug #462592
2509         * pending.cs: Emit type arguments for generic proxy method.
2510
2511 2008-12-30  Marek Safar  <marek.safar@gmail.com>
2512
2513         * expression.cs (As): Mutate all type arguments.
2514
2515 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2516
2517         A fix for bug #462622
2518         * anonymous.cs: Resolve anonymous type GetHashCode in unchecked
2519         context.
2520
2521 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2522
2523         A fix for bug #450782
2524         * ecore.cs: Consider more variables of form V.I to be fixed.
2525
2526 2008-12-29  Marek Safar  <marek.safar@gmail.com>
2527
2528         A fix for bug #460712
2529         * typemanager.cs: Core types could be imported.
2530
2531 2008-12-28  Marek Safar  <marek.safar@gmail.com>
2532
2533         A fix for bugs #460847, #460772, #458049, #457339, #447807
2534         * generic.cs, parameter.cs, lambda.cs, linq.cs, anonymous.cs
2535         statement.cs, ecore.cs, class.cs, delegate.cs, flowanalysis.cs
2536         cs-parser.jay, driver.cs: LINQ implementation upgrade to deal with
2537         user lambdas used inside query clauses.
2538
2539 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2540
2541         A fix for bug #460229
2542         * cs-tokenizer.cs: Ignore wrongly placed BOM markers.
2543
2544 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2545
2546         A fix for bug #459952
2547         * decl.cs, namespace.cs: Use common CheckAccessLevel.
2548
2549 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2550
2551         A fix for bug #459630
2552         * convert.cs: Enum to valuetype conversion is not allowed.
2553
2554 2008-12-18  Marek Safar  <marek.safar@gmail.com>
2555
2556         A fix for bug #457087
2557         * generic.cs: Don't crash when constraint comes from type
2558         declaration.
2559
2560 2008-12-16  Marek Safar  <marek.safar@gmail.com>
2561
2562         A fix for bug #459221
2563         * anonymous.cs, statement.cs: Delay only captured this
2564         initialization.
2565
2566 2008-12-12  Marek Safar  <marek.safar@gmail.com>
2567
2568         A fix for bug #457489
2569         * anonymous.cs, statement.cs: Split anonymous storey instantiation
2570         and initialization to capture scope initializers correctly.
2571
2572 2008-12-11  Marek Safar  <marek.safar@gmail.com>
2573
2574         * generic.cs, parameter.cs, expression.cs, statement.cs, doc.cs:
2575         ParameterReference refactoring.
2576
2577 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2578
2579         * typemanager.cs, namespace.cs, driver.cs: Allow ExtensionAttribute
2580         to be imported from any assembly.
2581
2582 2008-12-03  Marek Safar  <marek.safar@gmail.com>
2583
2584         * parameter.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs
2585         statement.cs, class.cs, cs-parser.jay: Removed duplicate parameters
2586         from anonymous method and lambda expression.
2587
2588 2008-12-01  Marek Safar  <marek.safar@gmail.com>
2589
2590         A fix for bug #448560
2591         * expression.cs (As): Box any generic type arguments to be
2592         verifiable.
2593
2594 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2595
2596         Add tripwire for implicit conversion bugs
2597         * ecore.cs (MethodGroupExpr.Error_ArgumentCountWrong): New helper
2598         for CS1501 error.
2599         (MethodGroupExpr.OverloadResolve): Add sanity check between
2600         IsApplicable and VerifyArgumentsCompat.
2601         (VerifyArgumentsCompat): Report CS1501 where appropriate.
2602
2603 2008-11-29  Raja R Harinath  <harinath@hurrynot.org>
2604
2605         Fix build break in System.Data_test
2606         * convert.cs (ImplicitConversionExists): Move NullLiteral
2607         conversions ...
2608         (ImplicitStandardConversionExists): ... here.
2609
2610 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2611
2612         * literal.cs: Emit correctly explicit null to nullable cast.
2613
2614 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2615
2616         * ecore.cs, generics.cs: Fixed crash when type arguments fail to
2617         resolve.
2618
2619 2008-11-28  Marek Safar  <marek.safar@gmail.com>
2620
2621         A fix for bug #449005
2622         * convert.cs, nullable.cs: Use only one implicit nullable
2623         conversion.
2624
2625 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2626
2627         * convert.cs, literal.cs: More Convert cleanup is needed.
2628
2629 2008-11-27  Marek Safar  <marek.safar@gmail.com>
2630
2631         * decl.cs, class.cs: Fixed misleading error message.
2632
2633 2008-11-26  Marek Safar  <marek.safar@gmail.com>
2634
2635         A fix for bug #449005
2636         * nullable.cs (EmitEquality): Disable optimization for user operator
2637         operands.
2638
2639 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2640
2641         A fix for bug #447027
2642         * anonymous.cs (HoistedVariable): Cache also outer access to deal
2643         with context variables stored as expression instances.
2644
2645 2008-11-25  Marek Safar  <marek.safar@gmail.com>
2646
2647         A fix for bug #447027
2648         * delegate.cs: Fixed delegate VerifyMethod logic.
2649
2650 2008-11-24  Marek Safar  <marek.safar@gmail.com>
2651
2652         * ecore.cs, delegate.cs: MethodGroup expressions can be applicable
2653         but not verifiable.
2654
2655 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2656
2657         * typemanager.cs, decl.cs, anonymous.cs, class.cs, enum.cs: Rewrote
2658         member type resolve to follow normal flow, instead of random
2659         property access.
2660
2661 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2662
2663         * iterators.cs (GetEnumeratorStatement): Re-use already resolved
2664         type.
2665
2666 2008-11-21  Marek Safar  <marek.safar@gmail.com>
2667
2668         * const.cs: Emit decimal array constant as literal.
2669
2670 2008-11-20  Marek Safar  <marek.safar@gmail.com>
2671
2672         * iterators.cs, ecore.cs: Removed CurrentBlock statement.
2673
2674 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2675
2676         * eval.cs, location.cs, driver.cs (Location.SourceFiles): Turned
2677         into real property (saves 8 MB for corlib compilation).
2678
2679 2008-11-19  Marek Safar  <marek.safar@gmail.com>
2680
2681         * generic.cs, lambda.cs, linq.cs, iterators.cs, anonymous.cs,
2682         nullable.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay
2683         generic-mcs.cs: Small cleanup of TypeArguments.
2684
2685 2008-11-18  Marek Safar  <marek.safar@gmail.com>
2686
2687         * generic.cs, iterators.cs, anonymous.cs, nullable.cs, ecore.cs,
2688         expression.cs, namespace.cs, generic-mcs.cs, class.cs: Small cleanup
2689         of ConstructedType expression, renamed to GenericTypeExpr.
2690
2691 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2692
2693         A fix for bug #445303
2694         * location.cs (IsConditionalDefined): Handle undefined global
2695         defines.
2696
2697 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2698
2699         A fix for bug #444678
2700         * expression.cs (TryReduceConstant): Always create new constant
2701         instance.
2702
2703 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2704
2705         A fix for bug #444673
2706         * ecore.cs: Ignore open generic types when used as generic type
2707         instance fields.
2708
2709 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2710
2711         A fix for bug #445458
2712         * expression.cs, cs-parser.jay: Don't crash when an expression
2713         statement is null.
2714
2715 2008-11-17  Marek Safar  <marek.safar@gmail.com>
2716
2717         A fix for bug #445464
2718         * expression.cs, cs-parser.jay: Fixed typeof of non-generic type
2719         inside unbound type.
2720
2721 2008-11-14  Jb Evain  <jbevain@novell.com>
2722
2723         * driver.cs: ignore empty -nowarn argument such as
2724         the one in -nowarn:12,13,,.
2725
2726 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2727
2728         A fix for bug #444271
2729         * anonymous.cs: Rescan parent storeys when best candidate was
2730         undone.
2731
2732 2008-11-13  Marek Safar  <marek.safar@gmail.com>
2733
2734         * generic.cs, expression.cs, ecore.cs, cs-parser.jay: Removed
2735         useless UnboundTypeExpression.
2736         
2737         * attribute.cs: Do check obsolete attribute on generic types.
2738
2739 2008-11-12  Marek Safar  <marek.safar@gmail.com>
2740
2741         A fix for bugs #425680, #400139
2742         * ecore.cs, expression.cs: Trying to do some almost_matched_members
2743         refactoring.
2744
2745 2008-11-11  Marek Safar  <marek.safar@gmail.com>
2746
2747         A fix for bug #435747
2748         * assign.cs, expression.cs: Cleanup New assignment to emit correcly
2749         compound value types assignment. Few micro optimizations added.
2750
2751 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2752
2753         A fix for bug #442610
2754         * anonymous.cs (MutateConstructor): More SRE hacking.
2755
2756 2008-11-10  Marek Safar  <marek.safar@gmail.com>
2757
2758         A fix for bug #442579
2759         * ecore.cs: Also initialize expanded form of a method with 1 params
2760         parameter.
2761
2762 2008-11-06  Marek Safar  <marek.safar@gmail.com>
2763
2764         * expression.cs (UnaryMutator): Do early l-side check.
2765
2766 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2767
2768         * codegen.cs (InitDynamic): also setup Assembly.Name like we do in
2769         Init, otherwise we would crash later on when checking for friend
2770         assemblies. 
2771
2772         * eval.cs: Do not hide errors from invalid calls to LoadAssembly.
2773         Otherwise we never get any meaningful information as to what
2774         failed. 
2775
2776 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2777
2778         A fix for bug #436318
2779         * driver.cs, report.cs: Add -warnaserror:Wn to command line options.
2780
2781 2008-11-05  Miguel de Icaza  <miguel@novell.com>
2782
2783         * namespace.cs: Turns out that it was a really bad idea to hide
2784         the errors for namespaces not found here in eval mode.    
2785
2786         * eval.cs: When we process using clauses, only enter those into
2787         the list of valid using clauses after they have been validated.   
2788
2789         The above change gives the proper semantics: it does not
2790         senselessly report the same errors with broken using statements by
2791         never storing them in the first place when they are invalid.
2792
2793 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2794
2795         A fix for bug #421839
2796         * cs-parser.jay: Remove expression from coalesce rule to force lower
2797         priority than the assignment operator.
2798
2799 2008-11-05  Marek Safar  <marek.safar@gmail.com>
2800
2801         A fix for bug #437875
2802         * nullable.cs: Compile correctly method group operand used with null
2803         coalescing operator.
2804
2805 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2806
2807         A fix for bug #434589
2808         * expression.cs (Binary): Ignore lifted conversions when at least
2809         one operand is of reference type.
2810
2811 2008-11-04  Marek Safar  <marek.safar@gmail.com>
2812
2813         * cs-parser.jay: Better syntax error report.
2814
2815 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2816
2817         A fix for bug #436792
2818         * cs-parser.jay: Use GetLocation to access location.
2819
2820 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2821
2822         A fix for bug #440774
2823         * cs-parser.jay: Also set current_array_type when parsing local
2824         variables types.
2825
2826 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2827
2828         A fix for bug #440785
2829         * expression.cs (As): Don't resolve self modifing expression
2830         multiple times.
2831
2832 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2833
2834         A fix for bug #439447
2835         * cs-tokenizer.cs: Tokenize surrogates only where allowed.
2836
2837 2008-11-03  Marek Safar  <marek.safar@gmail.com>
2838
2839         A fix for bug #437571
2840         * cs-parser.jay: Fixes internal error for invalid expression
2841         statements.
2842
2843 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2844
2845         * ecore.cs: Resolve correctly ambiguous params delegate methods.
2846
2847 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2848
2849         * generic.cs, anonymous.cs: Simplified GetDeclarations.
2850
2851 2008-10-17  Marek Safar  <marek.safar@gmail.com>
2852
2853         * cs-tokenizer.cs: More precise cast parsing.
2854
2855 2008-10-16  Martin Baulig  <martin@ximian.com>
2856
2857         * anonymous.cs (AnonymousMethodStorey): Put back the
2858         `hoisted_locals' hashtable and use it in EmitType().
2859
2860 2008-10-15  Marek Safar  <marek.safar@gmail.com>
2861
2862         * cs-tokenizer.cs, nullable.cs, expression.cs, statement.cs,
2863         cs-parser.jay: Tokenizer optimizations and memory reduction, saves
2864         ~5MB for corlib.
2865
2866 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2867
2868         * cs-tokenizer.cs: Add bool type to the list of valid cast tokens.
2869
2870 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2871
2872         * statement.cs: Mutate scope initializers.
2873
2874 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2875
2876         * expression.cs: Use typeless value for This constant.
2877         
2878         * ecore.cs: Access FieldInfo via GetConstructedFieldInfo.
2879
2880 2008-10-14  Marek Safar  <marek.safar@gmail.com>
2881
2882         * cs-tokenizer.cs, cs-parser.jay: Unify context sensite keyword
2883         tokenizer.
2884
2885 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2886
2887         * cs-tokenizer.cs: Add missing alias qualifier and dotted generic
2888         type to type cast.
2889
2890 2008-10-13  Marek Safar  <marek.safar@gmail.com>
2891
2892         * cs-tokenizer.cs, expression.cs, cs-parser.jay: Reworked parens
2893         parser and tokenizer. Fixes many ambiguities including #433258.
2894
2895 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2896
2897         * cs-parser.jay: Fixed missing accessor recovery.
2898
2899 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2900
2901         A fix for bug #433701
2902         * expression.cs: Better error message.
2903
2904 2008-10-10  Marek Safar  <marek.safar@gmail.com>
2905
2906         * cs-parser.jay, expression.cs: Start reporting real parser errors.
2907         
2908         * Makefile: Disabled unused debug symbols.
2909
2910         Also fixes: #320556, #321097, #321656, #321876, #351316
2911
2912 2008-10-09  Miguel de Icaza  <miguel@novell.com>
2913
2914         * eval.cs: rename "<interactive>" to "{interactive}", to work
2915         around a requirement in the compiler that this be a valid
2916         filename, and in Windows it is not (433886).
2917
2918 2008-10-09  Marek Safar  <marek.safar@gmail.com>
2919
2920         * cs-tokenizer.cs, cs-parser.jay: Fixed more subtle parser problems
2921
2922 2008-10-08  Marek Safar  <marek.safar@gmail.com>
2923
2924         * cs-tokenizer.cs, eval.cs, anonymous.cs, statement.cs, class.cs
2925         cs-parser.jay: Generic type declaration and type arguments cleanup.
2926
2927 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2928
2929         * cs-parser.jay: Allow parsing weird array creation construct.
2930
2931 2008-10-05  Marek Safar  <marek.safar@gmail.com>
2932
2933         * cs-parser.jay: Conflicts reduction.
2934
2935 2008-10-04  Marek Safar  <marek.safar@gmail.com>
2936
2937         * cs-parser.jay: Conflicts reduction.
2938
2939 2008-10-04  Raja R Harinath  <harinath@hurrynot.org>
2940
2941         Fix #398325
2942         * flowanalysis.cs (MyBitvector.MakeShared): Rename from 'Shared'
2943         property.  Add a 'count' hint about the use of the shared vector.
2944         Ensure that we don't leak out dirty bits.
2945         (UsageVector.MergeChild): Throw away information about variables
2946         in child vectors.
2947         Based on patch and analysis by Moritz Kroll <Moritz.Kroll@gmx.de>.
2948
2949 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2950
2951         A fix for bug #431746
2952         * iterators.cs, anonymous.cs: Re-initialize hoisted iterator
2953         parameters when iterator is created.
2954
2955 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2956
2957         A fix for bug #431827
2958         * expression.cs: Fixed right based pointer arithmetic operations
2959         emit.
2960
2961 2008-10-03  Marek Safar  <marek.safar@gmail.com>
2962
2963         A fix for bug #353779
2964         * assign.cs, expression.cs: Fixed compound assignment conversions.
2965
2966 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2967
2968         A fix for bug #375262
2969         * statement.cs: Refactor ArrayForeach to be usable with string
2970         indexer. Optimized single dimentional arrays foreach.
2971
2972 2008-10-02  Marek Safar  <marek.safar@gmail.com>
2973
2974         A fix for bug #431255
2975         * anonymous.cs, expression.cs: Removed broken optimization.
2976
2977 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2978
2979         * anonymous.cs: Use full type parameters of parent generic
2980         containers. Removed unnecessary AddParentStoreyReference call.
2981
2982 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2983
2984         A fix for bug #324702
2985         * class.cs: Use better shorter names for explicit interface member
2986         implementations.
2987
2988         * ecore.cs, typemanager.cs: Convert only mscorlib predefined names.
2989
2990 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2991         
2992         * expression.cs: Use new interface to check fixed expression.
2993
2994 2008-10-01  Marek Safar  <marek.safar@gmail.com>
2995
2996         A fix for bug #421101
2997         * expression.cs, statement.cs, ecore.cs: Use IFixedExpression
2998         interface to check for fixed fixed-buffers.
2999
3000 2008-10-01  Marek Safar  <marek.safar@gmail.com>
3001
3002         A fix for bug #429264
3003         * assign.cs, anonymous.cs, ecore.cs: More type mutators added.
3004         
3005         * delegate.cs: Removed unnecessary casts.
3006
3007 2008-09-30  Marek Safar  <marek.safar@gmail.com>
3008
3009         A fix for bug #352151
3010         * decl.cs, iterators.cs, anonymous.cs, report.cs, namespace.cs,
3011         class.cs: Fixed already defined explicit interface members check.
3012
3013 2008-09-29  Rodrigo Kumpera  <rkumpera@novell.com>
3014
3015         cs-tokenizer.cs: Fix typo.
3016
3017 2008-09-28  Miguel de Icaza  <miguel@novell.com>
3018
3019         * eval.cs (InteractiveBase): The quit command now just sets a
3020         flag, instead of calling Environment.Exit(), it is milder on
3021         embedded hosts. 
3022
3023         CompiledMethod is now in Mono.CSharp, not nested inside
3024         the Evaluator, it was inconvenient to use.
3025
3026 2008-09-27  Miguel de Icaza  <miguel@novell.com>
3027
3028         * eval.cs (Evaluator): Introduce Compile method, to allow compiled
3029         code to be invoked without having to reparse.
3030
3031 2008-09-27  Miguel de Icaza  <miguel@novell.com>
3032
3033         * ecore.cs: The recent changes to FieldExpr broke this as well.
3034         Fixes LINQ queries in the interactive shell.
3035
3036         * Multiple files: indentation fixing for the Mono coding
3037         guidelines for the switch statement.
3038
3039         * eval.cs: Make the Evaluator API thread safe.
3040
3041 2008-09-26  Marek Safar  <marek.safar@gmail.com>
3042
3043         * anonymous.cs, statement.cs, class.cs, cs-parser.jay: Simplified
3044         constructor parsing.
3045
3046 2008-09-26  Marek Safar  <marek.safar@gmail.com>
3047
3048         A fix for bug #325326
3049         * statement.cs: Check possible mistaken empty statement using
3050         explicit blocks only.
3051
3052 2008-09-25  Miguel de Icaza  <miguel@novell.com>
3053
3054         * eval.cs (LoadAssembly, ReferenceAssembly): Call
3055         RootNamespace.ComputeNamespaces to update the internal list of
3056         namespaces, this is no longer done for us.
3057
3058         (InteractiveBase): Use the Evaluator APIs instead of calling into
3059         Driver directly
3060
3061 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3062
3063         A fix for bug #429264
3064         * expression.cs: Missing mutator for access to multidimensional
3065         arrays.
3066
3067 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3068
3069         * class.cs, statement: Emit DebuggerHidden attribute for iterator
3070         entry wrapper.
3071         
3072         * driver.cs: Missing input argument check.
3073
3074 2008-09-25  Marek Safar  <marek.safar@gmail.com>
3075
3076         * typemanager.cs, generic.cs, eval.cs, decl.cs, anonymous.cs,
3077         expression.cs, statement.cs, rootcontext.cs, class.cs, 
3078         cs-parser.jay, driver.cs, generic-mcs.cs, enum.cs: Removed obsolete
3079         DefineMembers.
3080
3081 2008-09-24  Miguel de Icaza  <miguel@novell.com>
3082
3083         * ecore.cs (FieldExpr): Only initialize eclass when we return a
3084         fully constructed FieldExpr, fixes the regression introduced in
3085         the last commit.
3086         
3087         * ecore.cs, expression.cs: Plug back the eclass initialization as
3088         otherwise it regresses `csharp'. 
3089
3090 2008-09-24  Marek Safar  <marek.safar@gmail.com>
3091
3092         * typemanager.cs, decl.cs, convert.cs, assign.cs, expression.cs,
3093         ecore.cs, attribute.cs: Moved obsolete method checks from emit
3094         phase to resolve phase. It resolves problems with expression trees
3095         and fixes bugs #323796, #325156.
3096
3097 2008-09-23  Marek Safar  <marek.safar@gmail.com>
3098
3099         * codegen.cs: Report better error when symbol writer is missing.
3100
3101 2008-09-23  Marek Safar  <marek.safar@gmail.com>
3102
3103         * codegen.cs: Set .NET symbol writer.
3104         
3105         * decl.cs: Guard against null generic arguments.
3106         
3107         * report.cs: Don't report exactly same additional details.
3108
3109 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3110
3111         A fix for bug #324917
3112         * cs-parser.jay: Add missing multidimensional non-expression type
3113         ranks.
3114         
3115 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3116
3117         A fix for bug #428191
3118         * anonymous.cs: Create an outer generic fields also for non-storey
3119         anonymous methods.
3120
3121 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3122
3123         A fix for bug #378294
3124         * class.cs: Make fixed size buffers gmcs feature only.
3125
3126 2008-09-22  Marek Safar  <marek.safar@gmail.com>
3127
3128         A fix for bug #355622, #324993
3129         * assign.cs, const.cs, class.cs: Create new EmitContext for each
3130         field initializer.
3131
3132 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3133
3134         * nullable.cs, expression.cs, namespace.cs, delegate.cs: Duplicate
3135         error reporting.
3136
3137 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3138
3139         A fix for bug #416110
3140         * generic.cs: Struct constraint results in default ctor and
3141         ValueType base type constraint to be set.
3142
3143 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3144
3145         A fix for bug #423791
3146         * generic.cs: Fixed params output type type-inference.
3147
3148 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3149
3150         * cs-parser.jay, expression.cs: Fixed few expression crashes.
3151         
3152 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3153
3154         * cs-tokenizer.cs: Don't break on extra partial modifier.
3155
3156 2008-09-19  Marek Safar  <marek.safar@gmail.com>
3157
3158         A fix for bug #427592
3159         * generic.cs: Use common parameter resolve method.
3160
3161 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3162
3163         A fix for bug #414758
3164         * expression.cs, ecore.cs: Fixed crash when accessing non-static
3165         property.
3166
3167 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3168
3169         * driver.cs, namespace.cs: Read types and namespaces after all
3170         requested assemblies are loaded, fixes issues with System.Core
3171         auto-reference, and #419888.
3172
3173 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3174
3175         A fix for bug #417705
3176         * cs-parser.jay: Fixed as/is operator expression split.
3177
3178 2008-09-18  Marek Safar  <marek.safar@gmail.com>
3179
3180         * const.cs, expression.cs, statement.cs, ecore.cs, cs-parser.jay:
3181         Fixed expression tree representation of empty new expression and
3182         new initializer expression.
3183
3184 2008-09-18  Miguel de Icaza  <miguel@novell.com>
3185
3186         * eval.cs: Remove warning, keep reference to driver around.
3187
3188         * Hide fields that do not need to be public.
3189
3190 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3191
3192         A fix for bug #426385
3193         * expression.cs (ImplicitlyTypedArrayCreation): Use full implicit
3194         conversion for array elements.
3195
3196 2008-09-17  Marek Safar  <marek.safar@gmail.com>
3197
3198         * expression.cs, statement.cs, class.cs, cs-parser.jay: Fixed
3199         void parsing conflicts.
3200
3201 2008-09-15  Marek Safar  <marek.safar@gmail.com>
3202
3203         A fix for bug #425601
3204         * driver.cs, typemanager.cs, namespace.cs: Automatically reference
3205         System.Core only when there is no custom ExtensionAttribute
3206         implementation.
3207
3208 2008-09-15  Miguel de Icaza  <miguel@novell.com>
3209
3210         * namespace.cs: Do not report CS0246 (name
3211
3212 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3213
3214         A fix for bug #425669
3215         * generic.cs: Don't cache generic static anonymous method 
3216         containers.
3217
3218 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3219
3220         * generic.cs, class.cs, delegate.cs: Check recursive inherited
3221         conflicting constraints.
3222
3223 2008-09-12  Raja R Harinath  <harinath@hurrynot.org>
3224
3225         * cs-tokenizer.cs (consume_identifier): Allow partial methods in
3226         mcs too.
3227
3228 2008-09-12  Marek Safar  <marek.safar@gmail.com>
3229
3230         * literal.cs, convert.cs, expression.cs, statement.cs: More null
3231         to null pointer conversion fixes.
3232
3233 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3234
3235         * cs-parser.jay, expression.cs: An implicitly typed local variable
3236         declarator cannot use an array initializer.
3237
3238 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3239
3240         * cs-parser.jay: Reduced number of printed tokens, add sorting.
3241
3242 2008-09-11  Marek Safar  <marek.safar@gmail.com>
3243
3244         * generic.cs (InflatedConstraints): Don't crash when constraints
3245         are different.
3246         
3247         * cs-parser.jay: const_declarator is a block.
3248
3249         * constant.cs: Check for not allowed NaN conversions.
3250
3251 2008-09-10  Miguel de Icaza  <miguel@novell.com>
3252
3253         * driver.cs: Drop --shell argument, the compiler is no longer a
3254         REPL. 
3255
3256         * eval.cs: Move most of the code that deals with evaluation into
3257         this file and document the public API from repl.cs
3258
3259         * repl.cs: Remove from here.
3260         
3261 2008-09-10  Marek Safar  <marek.safar@gmail.com>
3262
3263         A fix for bug #424684
3264         * generic.cs: Generic class constraints must come first.
3265
3266 2008-09-09  Miguel de Icaza  <miguel@novell.com>
3267
3268         * cs-parser.jay: Improve error reporting for syntax errors in
3269         statements and expressions, we now report the expected tokens
3270         instead of reporting the useless "; expected".
3271
3272         Drop the strings from the token declaration, it turns out that
3273         they did not do what I thought they did.  Instead they were adding
3274         two sets of tokens to the tables.
3275
3276 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3277
3278         * typemanager.cs, generic.cs, parameter.cs, expression.cs, class.cs,
3279         delegate.cs: Share special type check.
3280
3281 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3282
3283         A fix for bug #423981
3284         * expression.cs (EmitBranchable): Correctly emit inverted float conditions.
3285
3286 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3287
3288         * ecore.cs (ReducedConstantExpression): Implemented ConvertExplicitly and
3289         ConvertImplicitly.
3290
3291 2008-09-09  Marek Safar  <marek.safar@gmail.com>
3292
3293         A fix for bugs: #324750, #335946
3294         * cs-tokenizer.cs, cs-parser.jay, expression.cs: Use a custom 
3295         lookup rule to determine ?-based tokens.
3296
3297 2008-09-08  Miguel de Icaza  <miguel@novell.com>
3298
3299         * repl.cs (OptionalAssign.EmitStatement): It is possible that some
3300         expressions (like event adding or removing) end up here, so we
3301         need to treat those as statements.
3302
3303         Add LoadAssembly method.
3304
3305 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3306
3307         * repl.cs: Add Time method.
3308
3309 2008-09-05  Marek Safar  <marek.safar@gmail.com>
3310
3311         * cs-tokenizer.cs: Fixed swaped UTF-16 surrogates parsing.
3312
3313 2008-09-05  Miguel de Icaza  <miguel@novell.com>
3314
3315         * repl.cs: Add workaround for old compilers.
3316
3317 2008-09-04  Jb Evain  <jbevain@novell.com>
3318
3319         * repl.cs (PrettyPrint): pretty print everything that
3320         implements IDictionary, as well as IEnumerables. Also,
3321         add a quit helper property.
3322
3323 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3324
3325         * constant.cs: Better error reporting for decimal literals.
3326         
3327         * class.cs, attribute.cs, typemanager.cs: Emit more fixed buffer
3328         field attributes.
3329         
3330 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3331                         Miguel de Icaza  <miguel@novell.com>
3332
3333         A fix for bug #422951
3334         * assign.cs (Assign.DoResolve): Perform the type conversions
3335         checks before we attempt to initialize `New' initializers. 
3336
3337 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3338
3339         A fix for bug #422853
3340         * delegate.cs (DelegateCreation): Add special handling for
3341         EmptyExpression.Null instance expression which is just another
3342         hack for undecided member instance exression.
3343
3344 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3345
3346         * expression.cs, ecore.cs: Emit full expression tree for reduced
3347         binary expressions.
3348
3349 2008-09-04  Marek Safar  <marek.safar@gmail.com>
3350
3351         * expression.cs (This): Guard against multi-resolving.
3352         
3353         * ecore.cs, statement.cs (Throw): Simplified.
3354         
3355         * flowanalysis.cs: Also verify event fields.
3356
3357 2008-09-04  Miguel de Icaza  <miguel@novell.com>
3358
3359         * assign.cs (Assign.DoResolve): Perform the type conversions
3360         checks before we attempt to initialize `New' initializers. 
3361
3362         * repl.cs (PrettyPrint): Add Hashtable prettyprint
3363
3364         * anonymous.cs (AnonymousTypeClass): On EvalMode make the class
3365         public. 
3366
3367         * repl.cs: Update help.
3368
3369 2008-09-03  Miguel de Icaza  <miguel@novell.com>
3370
3371         * driver.cs (ProcessDefaultConfig): Now it encapsulates all the
3372         handling of the default config handling, including the special
3373         treatment of System.Core assembly. 
3374
3375         Fixes the REPL processing for LINQ.
3376
3377 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3378
3379         A fix for bug #422507
3380         * expression.cs (UnboxCast): Add missing child expression mutator.
3381
3382 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3383
3384         * driver.cs: Don't self reference System.Core assembly.
3385
3386 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3387
3388         A fix for bug #422507
3389         * expression.cs (StringConcat): Add missing type mutator.
3390
3391 2008-09-03  Marek Safar  <marek.safar@gmail.com>
3392
3393         * generic.cs (TypeInferenceContext): Follow equality rule for
3394         constructed type lower bound type inference.
3395
3396 2008-09-02  Miguel de Icaza  <miguel@novell.com>
3397
3398         * getline.cs (CmdRefresh): Apply patch from Douglas S. Blank
3399         <dblank@cs.brynmawr.edu> which updates the cursor position on
3400         refresh.
3401         
3402 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3403
3404         A fix for bug #367145
3405         * driver.cs: Fixed import of extension methods when using -noconfig
3406         option.
3407
3408 2008-09-02  Marek Safar  <marek.safar@gmail.com>
3409
3410         * iterator.cs: Don't emit GetEnumerator method twice but call a generic
3411         version from non-generic implementation instead.
3412
3413 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3414
3415         A fix for bug #418908
3416         * class.cs: Use AddScopeStatement for field initializers.
3417
3418 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3419
3420         A fix for bug #415385
3421         * ecore.cs, convert.cs: Do method group conversion for equal group types.
3422
3423 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3424
3425         A fix for bug #421736
3426         * iterators.cs: Don't crash on unreachable iterators.
3427
3428 2008-09-01  Marek Safar  <marek.safar@gmail.com>
3429
3430         A fix for bug #421628
3431         * parameter.cs, attribute.cs: Clone also parameter attributes.
3432
3433 2008-08-30  Miguel de Icaza  <miguel@novell.com>
3434
3435         * namespace.cs (LookupType): In EvalMode, try to replace
3436         the TypeBuilder from our cache with a Type as Reflection.Emit does
3437         not  like to mix code from older assemblies emitted and new
3438         assemblies emitted. 
3439
3440         This sounds like a serious Mono bug that prevents multiple
3441         assemblies to be generated and consumed at the same time.
3442
3443         * cs-parser.jay (push_current_class): Do not make interactive
3444         classes internal or private, make them public as we currently
3445         generate each new class in a new assembly.   
3446
3447 2008-08-29  Miguel de Icaza  <miguel@novell.com>
3448
3449         * decl.cs, roottypes.cs, class.cs:: Add an infrastructure to
3450         remove types that are entered into the global namespace during
3451         parsing so that we can remove them on failure.
3452  
3453         * cs-parser.jay: Parsing: we now keep track of types that are
3454         entered into global variables and queue those in case the parsing
3455         or resolution fail.
3456  
3457         This happens in a few situations: during partial-input, we invoke
3458         the parser repeatedly for example with the string "class X", this
3459         would cause X to be registed, and we need to remove this
3460         registration so that another parse attempt later with say "class X {"
3461         would actually work.
3462  
3463         Additionally, if there is an error in the resolution phase, for
3464         example: "class X : NonExistant {}" th
3465         
3466         * cs-parser.jay: Be more precise with the errors being raised,
3467         instead of flagging all exceptions during parsing to be attributed
3468         to the parsing process, distinguish those from errors happening in
3469         the actions and hint that using -v would produce the actual
3470         exception. 
3471
3472         * repl.cs: Do not load all compiler references on each reset,
3473         doing the partial reset takes care of this.
3474         
3475 2008-08-28  Miguel de Icaza  <miguel@novell.com>
3476
3477         * repl.cs: Add support for loading all the files from
3478         ~/.config/csharp/*cs as startup scripts and ~/.config/csharp/*.dll
3479         as shell libraries.
3480
3481         Introduce a micro-parser that is able to deambiguate on its input
3482         whether we are dealing with a compilation unit (namespace, class,
3483         interface, struct, delegate) declaration or a statement.   This
3484         allows both declarations and statements to be entered. 
3485
3486         Set history size by default to 300 lines.
3487
3488         Instead of distinguishing based on the parser.InteractiveResult,
3489         have only two cases: statements were parsed, or a compilation unit
3490         was.   Always pull the Using statement additions from the
3491         compilation unit parse.
3492         
3493         * cs-tokenizer.cs: Rename tokens to better describe their intent
3494         (EvalStatementParserCharacter and EvalCompilationUnitParserCharacter).
3495         
3496         * rootcontext.cs: Split EvalMode into EvalMode and StatementMode.
3497         EvalMode is used to trigger the lookup of global variables while
3498         StatementMode is used turn variable declarations into static
3499         fields.
3500
3501         * getline.cs: Allow history size to be set.
3502         
3503 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3504
3505         A fix for bug #360755
3506         * ecore.cs (SimpleName): Exclude indexers from simple name resolve.
3507
3508 2008-08-29  Marek Safar  <marek.safar@gmail.com>
3509
3510         * generic.cs, iterators.cs, codegen.cs: Removed unused variable.
3511         
3512         * typemanager.cs, statement.cs, ecore.cs, enum.cs: Don't reconstruct enum
3513         member name, it is too confusing
3514         
3515         * decl.cs, class.cs: Don't report unused fields with attached attribute.
3516         
3517         * rootcontext.cs: Finally default to warning level 4.
3518
3519 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3520
3521         * class.cs (CheckBase): Ignore overloaded operators.
3522
3523 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3524
3525         A fix for bug #420830
3526         * expression.cs, cs-parser.jay: Put back InvocationOrCast expression.
3527
3528 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3529
3530         A fix for bug #420832
3531         * anonymous.cs, iterators.cs: Also clone hoisted this iterator variable.
3532
3533 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3534
3535         A fix for bug #420386
3536         * nullables.cs: Fixed logic of nullable user comparison operators involving
3537         null values.
3538
3539 2008-08-28  Marek Safar  <marek.safar@gmail.com>
3540         
3541         * attribute (IsClsCompliant): Use FALSE value for pointer types.
3542
3543 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3544
3545         * repl.cs: Add support for aborting the running code with C-c. 
3546
3547 2008-08-27  Raja R Harinath  <harinath@hurrynot.org>
3548
3549         * cs-parser.jay (CS1002): Dump 'yyToken' with Report.ExtraInformation.
3550
3551 2008-08-27  Miguel de Icaza  <miguel@novell.com>
3552
3553         * cs-parser.jay (interactive_statement_list): A new set of rules
3554         for hosting statements that uses the "interactive_" prefix.   
3555
3556         * repl.cs: Add support for parsing `using' as a statement or as a
3557         directive.  Deambiguating before passing this to the parser.
3558
3559         We need to distinguish statement_expressions that occur at the
3560         toplevel vs those that occur embedded into expressions.
3561
3562         * getline.cs: Applied patch from Stuart Carnie <stuart.carnie@gmail.com> 
3563         that fixes the cursor key handling, and a history bug.
3564         
3565 2008-08-26  Miguel de Icaza  <miguel@novell.com>
3566
3567         * Makefile: Drop BOOTSTRAP_COMPILER as that was masking the
3568         limitations in Console, instead the 2.0 bootstrap libraries now
3569         include the Console bits.
3570
3571         Also, remove the use of Nullables from getline.cs
3572
3573         ------------
3574         
3575         Interactive support for the C# compiler.   Use gmcs --shell to
3576         enter a read-eval-print loop shell.
3577
3578         Docs: http://www.mono-project.com/CsharpRepl
3579         
3580         * sources: include repl.cs here and getline.cs for gmcs.exe,
3581         everything else is getline.cs impaired.
3582
3583         * Makefile: when bootstrapping pass a special flag
3584         BOOTSTRAP_COMPILER which we use to prevent failures in compilation
3585         as we use NET_2_0 define to pull 2.0 APIs from System.Console.
3586         This distinguishes those two cases.
3587
3588         * repl.cs: Support for a read-eval-print loop.   Will be soon
3589         refactored into eval support and then REPL on top of it.
3590
3591         * ecore.cs: If a simplename lookup fails, before erroring out,
3592         if we are in EvalMode to resolve the name to a declaration in the
3593         Eval-land.    
3594
3595         This means that variable declarations that happened in previous
3596         classes (as repl puts every statement in a separate class) are
3597         made visible in this way.
3598
3599         * cs-parser.jay: UnexpectedEOF, a new flag that is set if we
3600         triggered an error due to the end of file being reached.   This is
3601         used to do multi-line input, and notify the caller that the user
3602         needs to provide more text before a successful parse.
3603
3604         Add new grammar rules after the INTERACTIVE_PARSER token is seen
3605         to drive the evaluation with a custom wrapper. 
3606
3607         * driver.cs: Add support for --shell, and refactor some code to be
3608         reused from repl.cs
3609         
3610         * namespace.cs: Add support for serializing the contents of the
3611         namespaces and reloading them.  
3612
3613         * getline.cs: A managed implementation of ReadLine under
3614         X11/Apache2 license terms.  Easy to embed in other applications as
3615         well.
3616
3617         * namespace.cs: Add some functions to save and restore the
3618         namespace state.
3619
3620         * rootcontext.cs: New public field.
3621
3622         * cs-tokenizer.cs: Add support for one of the possible characters
3623         we introduce into the token stream.  
3624
3625         This patch does not affect the regular tokenization process, the
3626         only performance hit would happen if there is an invalid character
3627         on the input string.
3628
3629         * support.cs: Move isatty helper routine here.
3630
3631         * codegen.cs: Small cleanup, and add a mechanism to initialize the
3632         code generator for in-memory assemblies.
3633
3634 2008-08-26  Marek Safar  <marek.safar@gmail.com>
3635
3636         * generic.cs, ecore.cs, delegate.cs, cs-parser.jay, expression.cs: A type
3637         parameter cannot be always used as a type.
3638
3639 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3640
3641         * convert.cs, expression.cs: Use single ExplicitReferenceConversion routine.
3642
3643 2008-08-21  Marek Safar  <marek.safar@gmail.com>
3644
3645         * convert.cs: Implement explicit array to IList<T> conversion.
3646
3647 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3648
3649         A fix for bug #362740
3650         * cs-tokenizer.cs: Handle UTF-16 surrogates.
3651
3652 2008-08-20  Marek Safar  <marek.safar@gmail.com>
3653         
3654         * generic.cs, support.cs, typemanager.cs, lambda.cs, parameter.cs,
3655         pending.cs, ecore.cs, linq.cs, class.cs, decl.cs, delegate.cs,
3656         flowanalysis.cs, iterators.cs, cs-parser.jay, convert.cs, anonymous.cs,
3657         expression.cs, attribute.cs, statement.cs, doc.cs: Refactored parameters
3658         handling to use just one type of infrastructure and deal with generics
3659         more effectivelly.
3660
3661 2008-07-23  Martin Baulig  <martin@ximian.com>
3662
3663         *** Merged this from trunk revision 108527 ***
3664
3665         * statement.cs
3666         (ExplicitBlock.EmitSymbolInfo): Moved to `ToplevelBlock'.
3667         (ToplevelBlock.EmitSymbolInfo): Tell the symbol writer about the
3668         scope variable.
3669
3670 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3671         
3672         * ecore.cs, linq.cs, const.cs, expression.cs, statement.cs: More robust
3673         error checks.
3674
3675 2008-08-15  Marek Safar  <marek.safar@gmail.com>
3676         
3677         * delegate.cs: Fixed compiler crash when creating delegate using partial
3678         method.
3679         
3680         * typemanager.cs: MulticastDelegate is not a delegate.
3681
3682 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3683         
3684         * expression.cs, ecore.cs, anonymous.cs, class.cs: Fixed missing error
3685         checks.
3686
3687 2008-08-14  Raja R Harinath  <harinath@hurrynot.org>
3688
3689         * cs-parser.jay (type): Allow 'var' in mcs too.
3690         (local_variable_type): Likewise.
3691
3692 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3693         
3694         * driver.cs: Removed broken -noconfig variants.
3695
3696 2008-08-14  Marek Safar  <marek.safar@gmail.com>
3697         
3698         A fix for bug #417078
3699         * expression.cs: Emit correctly left side pointer operators.
3700
3701 2008-08-13  Marek Safar  <marek.safar@gmail.com>
3702
3703         * generic.cs, lambda.cs: Inflate method generic arguments only.
3704
3705 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3706
3707         * class.cs: Fixed struct layout check regression.
3708
3709 2008-08-12  Marek Safar  <marek.safar@gmail.com>
3710
3711         * cs-parser.jay, enum.cs: Simplified enum parsing.
3712         
3713         * decl.cs: Check all type parameters conflicts.
3714         
3715         * expression.cs, statement.cs, attribute.cs: More expression checks.
3716
3717 2008-08-11  Marek Safar  <marek.safar@gmail.com>
3718
3719         * generic.cs: Add type inference types restriction.
3720         
3721         * parameter.cs, class.cs, delegate.cs, iterators.cs, cs-parser.jay,
3722         anonymous.cs, expression.cs: Allocate less accessor parameters.
3723
3724 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3725
3726         * typemanager.cs, ecore.cs: Ambiguous operators can come from different
3727         classes.
3728
3729 2008-08-08  Marek Safar  <marek.safar@gmail.com>
3730
3731         * convert.cs, delegate.cs: Fixed delegate compatibility conversion. 
3732
3733 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3734
3735         * class.cs, decl.cs, iterator.cs, ecore.cs: Refactor base type resolving.
3736         Also fixes #362146 and #381592.
3737
3738 2008-08-07  Marek Safar  <marek.safar@gmail.com>
3739
3740         * ecore.cs: Reduced constant cannot be used as an attribute value.
3741         
3742         * cs-parser.jay: Base expression has to be a type.
3743         
3744         * expression.cs (Conditional): Uses ReducedExpression.
3745
3746 2008-08-06  Marek Safar  <marek.safar@gmail.com>
3747
3748         A fix for bug #376826
3749         * parameter.cs, ecore.cs, anonymous.cs, expression.cs, statement.cs: An
3750         address of hoisted local variable or parameter cannot be taken.
3751
3752 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3753
3754         * ecore.cs, constant.cs, expression.cs, statement.cs: Resolve correctly 
3755         anonymous method inside checked/unchecked expression.
3756
3757 2008-08-05  Marek Safar  <marek.safar@gmail.com>
3758
3759         * typemanager.cs (IsEqual): Guard against null.
3760         
3761         * ecore.cs, class.cs, convert.cs, const.cs, constant.cs, expression.cs,
3762         attribute.cs, enum.cs, statement.cs: Pass EmitContext to constant conversion
3763         routine. Fixed few misleading conversion errors.
3764
3765 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3766
3767         * class.cs: Consider generics when checking cycles in struct layout.
3768
3769 2008-08-04  Raja R Harinath  <harinath@hurrynot.org>
3770
3771         * cs-tokenizer.cs (get_cmd_arg): Simplify.  Don't be too pedantic.
3772
3773 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3774
3775         A fix for bug #414165
3776         * anonymous.cs: Use same anonymous implementation method for all anonymous
3777         method emits.
3778
3779 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3780
3781         * generic.cs, anonymous.cs, statement.cs: Emit inherited anonymous method
3782         constraints.
3783
3784 2008-08-04  Marek Safar  <marek.safar@gmail.com>
3785
3786         * cs-parser.jay: Typeof argument has to be a type expression.
3787         
3788         * namespace.cs: Check alias and namespace definitions collisions.
3789         
3790         * class.cs, pending.cs: Moved explicit interface accessor implementation
3791         check.
3792         
3793         * delegate.cs, expression.cs: Verify special name invocations.
3794         
3795 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3796
3797         * cs-parser.jay: Don't choke on empty generic type arguments.
3798         
3799         * cs-tokenizer.cs: Handle escaped preprocessor directives.
3800         
3801         * expression.cs, ecore.cs: Minor expressions bugs.
3802
3803 2008-08-01  Marek Safar  <marek.safar@gmail.com>
3804
3805         * cs-parser.jay: Removed duplicate interface declaration (fixes 2 conflicts)
3806         and added more error handling.
3807         
3808         * class.cs, iterators.cs, anonymous.cs: Removed useless interface parameter.
3809         
3810         *  modifiers.cs, enum.cs: Fixed.
3811
3812 2008-07-31  Jb Evain  <jbevain@novell.com>
3813
3814         * driver.cs: remove -pkg ability of smcs.
3815
3816 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3817
3818         * statement.cs (Switch): Correctly set empty default target for single
3819         blocks.
3820
3821 2008-07-30  Marek Safar  <marek.safar@gmail.com>
3822
3823         * typemanager.cs, assign.cs, driver.cs, expression.cs, statement.cs: Rewrote
3824         string switch statement implementation to use string dictionary which
3825         significantly (2-8x) improves performance of generated code.
3826
3827 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3828
3829         A fix for bug #412880 by Atsushi Enomoto <atsushi@ximian.com>
3830         * modifiers.cs (GetDescription): Fixed FamANDAssem case.
3831         
3832 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3833
3834         A fix for bug #412595
3835         * typemanager.cs, convert.cs, expression.cs: Some types are never
3836         convertible to each other.
3837
3838 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3839
3840         * nullable.cs (CreateNullConstant): An error messages update.
3841
3842 2008-07-29  Marek Safar  <marek.safar@gmail.com>
3843
3844         A fix for bug #412595
3845         * cfold.cs: Don't cast undefined bool constant.
3846
3847 2008-07-29  Martin Baulig  <martin@ximian.com>
3848
3849         * symbolwriter.cs
3850         (SymbolWriter.Reset): New public static method.
3851
3852         * driver.cs
3853         (CompilerCallableEntryPoint.Reset): Call SymbolWriter.Reset().
3854
3855 2008-07-28  Marek Safar  <marek.safar@gmail.com>
3856
3857         * cs-tokenizer.cs (IsLambdaOpenParens): Optimized using more stop tokens.
3858         
3859         * expression.cs (ElementAccess): Exact size allocation.
3860
3861 2008-07-26  Marek Safar  <marek.safar@gmail.com>
3862
3863         * driver.cs: Replaced outdated UnixParseOption with CSCParseOption.
3864
3865 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3866
3867         * flowanalysis.cs (StructInfo): Fixed detection of dynamic types.
3868         
3869         * class.cs: Removed $PRIVATE$ field hack which caused problems during
3870         flow analysis.
3871
3872 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3873
3874         A fix for bug #412217
3875         * assign.cs: Mutate also assignment type.
3876
3877 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3878
3879         A fix for bug #323644
3880         * typemanager.cs (IsValidProperty): Verify DefaultMemberName when checking
3881         indexers.
3882
3883 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3884
3885         A fix for bug #412134
3886         * expression.cs (ResolveOperatorEnum): Do implicit conversion of
3887         non-enumerable operands when overloading equality or bitwise operators.
3888
3889 2008-07-25  Marek Safar  <marek.safar@gmail.com>
3890
3891         * anonymous.cs: Cache closed generic anonymous method delegates.
3892
3893 2008-07-24  Marek Safar  <marek.safar@gmail.com>
3894
3895         * lambda.cs, linq.cs, class.cs, iterators.cs, cs-parser.jay, assign.cs, 
3896         anonymous.cs, statement.cs: Always emit anonymous method as static method
3897         when is instance free. Use nesting for nested anynomous methods blocks.
3898         
3899 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3900
3901         * anonymous.cs (MutateGenericMethod): Added extra code path for imported
3902         types.
3903
3904 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3905
3906         * expression.cs: Removed MakeSimpleCall.
3907
3908 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3909
3910         A fix for bug #323012
3911         * class.cs, pending.cs: Emit proxy for indexers when they differ in name.
3912         Base method implementing interface has to be public.
3913
3914 2008-07-23  Marek Safar  <marek.safar@gmail.com>
3915
3916         * cs-parser.jay: Don't break on missing argument.
3917
3918 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3919
3920         A fix for bug #320993
3921         * report.cs, parameter.cs, class.cs, decl.cs, delegate.cs, attribute.cs,
3922           enum.cs, codegen.cs: Report CLS compliance errors as warnings.
3923
3924 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3925
3926         A fix for bug #320748
3927         * convert.cs: Implicit user operators cannot convert to interfaces
3928
3929 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3930
3931         A fix for bug #312686
3932         * driver.cs: Ignore empty assembly references.
3933
3934 2008-07-22  Marek Safar  <marek.safar@gmail.com>
3935
3936         A fix for bug #387040
3937         * ecore.cs: Skip constrains check for an explicit implementation.
3938
3939 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3940
3941         A fix for bug #409045
3942         * cs-tokenizer.cs, rootcontext.cs, class.cs, location.cs, delegate.cs,
3943           cs-parser.jay, driver.cs, expression.cs, attribute.cs: Conditional
3944           identifiers are file specific unless passed as input arguments.
3945
3946 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3947
3948          * typemanager.cs, parameter.cs, class.cs, attribute.cs: Use an attribute
3949          to emit UnmanagedMarshal data under 2.0 profile.
3950
3951 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3952
3953         A fix for bug #410369
3954         * parameter.cs: Clone correctly ParamsParameter.
3955
3956 2008-07-21  Marek Safar  <marek.safar@gmail.com>
3957
3958         * expression.cs (Argument): Always report type for type based expressions
3959         errors.
3960
3961 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3962
3963         A fix for bug #410666
3964         * anonymous.cs: Correctly initialize generic storey reference.
3965
3966 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3967
3968         * convert.cs: Don't box same type arguments.
3969
3970 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3971
3972         * ecore.cs, linq.cs, delegate.cs, constant.cs, nullable.cs, expression.cs:
3973         Finished missing generic type mutators.
3974
3975 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3976
3977         * iterators.cs, statement.cs: Finished statements CloneTo.
3978
3979 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3980
3981         * anonymous.cs: ExpressionTreeProxy is of Value type expression.
3982         
3983         * expression.cs: Emit optimized default value expressions in expression tree
3984         array initializer.
3985
3986 2008-07-18  Marek Safar  <marek.safar@gmail.com>
3987
3988         * ecore.cs, cs-parser.jay, statement.cs: Error reporting fixes.
3989
3990 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3991
3992         A fix for bug #367536
3993         * cs-parser.jay: Check static constructor of generic types for an access
3994         modifier.
3995
3996 2008-07-17  Marek Safar  <marek.safar@gmail.com>
3997
3998         A fix for bug #353800
3999         * lambda.cs: Emit ret for contextual statements.
4000         
4001         * codegen.cs: Keep both resolved and unreachable flags, otherwise we end
4002         up emitting redundant ret for all anonymous methods with return.
4003
4004 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4005
4006         A fix for bug #365188
4007         * ecore.cs, anonymous.cs, expression.cs, codegen.cs, statement.cs: Don't
4008         create anonymous method storey in unreachable block.
4009
4010 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4011
4012         * generic.cs, typemanager.cs, cs-tokenizer.cs, parameter.cs, namespace.cs,
4013         class.cs, delegate.cs, flowanalysis.cs, iterators.cs, anonymous.cs,
4014         driver.cs, nullable.cs, expression.cs, attribute.cs, codegen.cs,
4015         statement.cs: Fixed relevant defects found by Gendarme.
4016
4017 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4018
4019         A fix for bug #325291
4020         * modifiers.cs, class.cs, cs-parser.jay, anonymous.cs, codegen.cs, 
4021         statement.cs: Replaced IAnonymousHost with top level block flag.
4022
4023 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4024
4025         * cs-parser.jay: Clean up unused open_parens.
4026
4027 2008-07-17  Marek Safar  <marek.safar@gmail.com>
4028
4029         * ecore.cs: Custom error message for a range variable assignment.
4030
4031 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4032
4033         * constant.cs, typemanager.cs: Emit empty string ("") as string.Empty field
4034         load.
4035
4036 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4037
4038         * literal.cs: Null literal is of object type.
4039
4040 2008-07-16  Marek Safar  <marek.safar@gmail.com>
4041
4042         * nullable.cs (LiftedBinaryOperator): Always lift unwrapped nullable
4043         expression of nullable equality comparison.
4044
4045 2008-07-15  Marek Safar  <marek.safar@gmail.com>
4046
4047         * expression.cs(PointerArithmetic): Removed redundant assignment.
4048
4049 2008-07-15  Marek Safar  <marek.safar@gmail.com>
4050
4051         * decl.cs (GetSignatureForError): Report full namespace name for containers.
4052
4053 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4054
4055         A fix for bug #408361
4056         * anonymous.cs (MutateGenericMethod): Store generic type arguments before
4057         they are replaced by GetMethod.
4058
4059 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4060
4061         A fix for bug #408721 by jeremie.laval@gmail.com
4062         * expression.cs (Indirection): Implemented CloneTo.
4063
4064 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4065
4066         * statement.cs (AssignableSlots): Temporary disabled variable initialization
4067         assert check.
4068
4069 2008-07-14  Marek Safar  <marek.safar@gmail.com>
4070
4071         * report.cs (EnableReporting): Don't reinitialize 0-based values.
4072
4073 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4074
4075         * linq.cs: Reset tranparent parameter counter in probing mode.
4076
4077 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4078
4079         * anonymous.cs: Mutate anonymous method type.
4080
4081 2008-07-11  Marek Safar  <marek.safar@gmail.com>
4082
4083         * ecore.cs, anonymous.cs: Mutate field expressions.
4084
4085 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4086
4087         A fix for bug #369670
4088         * linq.cs, statement.cs: Use explicit block for query expressions variables.
4089
4090 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4091
4092         * report.cs, ecore.cs: Flush recorder only when silent mode is off.
4093
4094 2008-07-10  Raja R Harinath  <harinath@hurrynot.org>
4095
4096         Fix bug #314902
4097         * cs-tokenizer.cs (is_punct): If a generic lookahead is looking
4098         only one '>', and finds a '>>', abort the generic lookahead.
4099
4100 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4101
4102         A fix for bug #319902
4103         * cs-tokenizer.cs: Always look-ahed for `>='  when tokenizing `>'.
4104
4105 2008-07-10  Marek Safar  <marek.safar@gmail.com>
4106
4107         A fix for bug #406371
4108         * statement.cs: Moved EmitSymbolInfo to Block.
4109
4110 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4111
4112         * ecore.cs: Report better error for extension method overload failures.
4113
4114 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4115
4116         * expression.cs (Is): No need to box reference values.
4117
4118 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4119
4120         * class.cs: Use event resolve context when initializing CreateEmitContext.
4121
4122 2008-07-09  Marek Safar  <marek.safar@gmail.com>
4123
4124         A fix for bug #394436
4125         * anonymous.cs, class.cs, expression.cs, lambda.cs: Emit correctly extension
4126         method used inside expression trees. Added more LINQ to expression tree
4127         conversions.
4128
4129 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4130
4131         A fix for bug #378189, #370577
4132         * lambda.cs, ecore.cs: Implemented 3.0 enhancement to better conversion
4133         from expression.
4134
4135 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4136
4137         * anonymous.cs, class.cs, decl.cs: Emit CompilerGenerated attribute
4138         hierarchically.
4139
4140 2008-07-08  Marek Safar  <marek.safar@gmail.com>
4141
4142         A fix for bug #406702
4143         * anonymous.cs: Always park anonymous method in the nearest parent storey.
4144
4145 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4146
4147         A fix for bug #406648
4148         * cs-parser.jay: Report nullable use in mcs for some cases.
4149
4150 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4151
4152         * ecore.cs: Improved argument mismatch error messages.
4153
4154 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4155
4156         * anonymous.cs: Don't cache generic delegates when reference MVAR argument.
4157
4158 2008-07-07  Marek Safar  <marek.safar@gmail.com>
4159
4160         * expression.cs (TypeOf): Mutate type argument.
4161
4162 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4163
4164         * class.cs: Report missing partial modifier for correct type.
4165
4166 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4167
4168         * ecore.cs, expression.cs (VariableReference): Variable property is 
4169         protected.
4170
4171 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4172
4173         * ecore.cs, convert.cs: Made OpcodeCast more memory efficient.
4174         
4175 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4176
4177         * anonymous.cs, class.cs, lambda.cs, iterator.cs: Cache static anonymous
4178         method delegates.
4179
4180 2008-07-04  Marek Safar  <marek.safar@gmail.com>
4181
4182         * anonymous.cs, class.cs, expression.cs, iterator.cs, statement.cs: Reduce
4183         anonymous method storey to an instance method when only "this" is hoisted.
4184
4185 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4186
4187         A fix for bug #321615
4188         * expression.cs: Pointer comparisons use unsigned operator.
4189
4190 2008-07-03  Marek Safar  <marek.safar@gmail.com>
4191
4192         * expression.cs: Fixed native pointer conversions. Also fixes #321615.
4193
4194 2008-07-02  Marek Safar  <marek.safar@gmail.com>
4195
4196         A fix for bug #404905
4197         * class.cs: Always initialize local unsafe variables.
4198
4199 2008-06-30  Marek Safar  <marek.safar@gmail.com>
4200
4201         A fix for bug #396987
4202         * expression.cs (NewInitialize): Clear local temporary variable for next run
4203
4204 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4205
4206         A fix for bug #401020
4207         * ecore.cs: Both types and modifiers have to match for ref and out arguments
4208
4209 2008-06-27  Marek Safar  <marek.safar@gmail.com>
4210
4211         A fix for bug #398319
4212         * cs-parser.jay: Implemented undocumented base access expression inside
4213         anonymous types.
4214
4215 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4216
4217         A fix for bug #404227
4218         * cs-parser.jay: Parse namespace declaration using qualified identifier.
4219
4220 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4221
4222         A fix for bug #404227
4223         * convert.cs: Fixed explicit array to interface cast.
4224
4225 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4226
4227         A fix for bug #403894
4228         * delegate.cs: Mutate DelegateInvocation type.
4229
4230 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4231
4232         A fix for bug #379348
4233         * delegate.cs: Box a load of generic parameters.
4234
4235 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4236
4237         * expression.cs: Add an array creation arguments mutate.
4238
4239 2008-06-26  Marek Safar  <marek.safar@gmail.com>
4240
4241         A fix for bug #386068
4242         * anonymous.cs, expression.cs: Emit correctly hoisted expression tree
4243         parameter.
4244
4245 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4246
4247         * ecore.cs, expression.cs: Fixed broken TypeCast clone, implemented few more
4248         CloneTo.
4249
4250 2008-06-25  Marek Safar  <marek.safar@gmail.com>
4251
4252         A fix for bug #403518
4253         * delegate.cs: Type correctly anonymous method new invocation.
4254
4255 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4256
4257         A fix for bug #394826
4258         * anonymous.cs: Fully qualify members when resolving anonymous type internal
4259         calls.
4260
4261 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4262
4263         A fix for bug #394826
4264         * anonymous.cs, iterators.cs: Construct generic storey only when is really
4265         needed.
4266
4267 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4268
4269         * class.cs: Clone indexer parameters for localized capturing.
4270
4271 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4272
4273         A fix for bug #402379
4274         * expression.cs: Don't crash when an object initializer resolve fails.
4275
4276 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4277
4278         A fix for bug #402888
4279         * expression.cs: Mutate conditional expression.
4280
4281 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4282
4283         A fix for bug #401012
4284         * class.cs: Keep StructLayout in shared container.
4285
4286 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4287
4288         A fix for bug #400438
4289         * decl.cs, class.cs: Only properties can be automatically implemented.
4290
4291 2008-06-24  Marek Safar  <marek.safar@gmail.com>
4292
4293         * statement.cs (ChangeToIterator): Copy also labels.
4294
4295 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4296
4297         * ecore.cs: Pass type argument details to parent extension method.
4298
4299 2008-06-23  Marek Safar  <marek.safar@gmail.com>
4300
4301         A fix for bug #375966
4302         * delegate.cs: Fixed IsTypeCovariant generic type conversions.
4303
4304 2008-06-23  Raja R Harinath  <harinath@hurrynot.org>
4305
4306         * Makefile (bootstrap-libs): Pass NO_DIR_CHECK to sub-make.
4307
4308 2008-06-22  Marek Safar  <marek.safar@gmail.com>
4309
4310         A fix for bug #394347
4311         * anonymous.cs: Cache compatible delegates as compatibility check produces
4312         a new method every time.
4313
4314 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4315
4316         * anonymous.cs: Propagate storey reference for single references.
4317
4318 2008-06-20  Marek Safar  <marek.safar@gmail.com>
4319
4320         A fix for bug #387615
4321         * assign.cs, expression.cs: Correctly clone compound assignment.
4322
4323 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4324
4325         A fix for bug #359611, #359604
4326         * anonymous.cs: Mutate all types of hoisted parameters.
4327
4328 2008-06-19  Marek Safar  <marek.safar@gmail.com>
4329
4330         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, linq.cs, class.cs
4331         delegate.cs, iterators.cs, cs-parser.jay, assign.cs, anonymous.cs, driver.cs
4332         expression.cs, codegen.cs, statement.cs
4333         
4334         Fixes bugs: #318652, #323223, #234779, #325069, #325476, #332532, #334465,
4335         #345907, #349190, #353276, #355256, #359617, #378542, #384584, #396530
4336         
4337         ** Anonymous methods, lambda expressions rewrite **
4338         
4339         Anonymous expressions are now resolved when an explicit block is resolved 
4340         and they don't require any registration procedure anymore. Further,
4341         anonymous methods are defined when explicit block is emitted which allows
4342         better control of whole process and opens possibilities for more
4343         optimizations as well as alternative to reverse whole process.
4344         
4345         A concept of `MutateHoistedGenericType' was introduced to keep the resolve
4346         process consistent and to correctly emit hoisted generic methods when they
4347         have at least 1 hoisted variable.
4348         
4349 2008-06-17  Martin Baulig  <martin@ximian.com>
4350
4351         * class.cs: Also emit the `[DebuggerHidden]' attribute on the main
4352         iterator method.
4353         (AbstractPropertyEventMethod.IsDebuggerHidden): New protected
4354         virtual property; check it in Emit().
4355         (PropertyMethod.IsDebuggerHidden): Override, check whether we're
4356         an iterator.
4357         (MethodOrOperator.ResolveMethods): Set `DEBUGGER_HIDDEN' if we're
4358         an iterator.
4359         (Indexer.Define): Likewise.
4360
4361 2008-06-17  Marek Safar  <marek.safar@gmail.com>
4362
4363         * convert.cs: Don't use IsInterface on type arguments.
4364         
4365         * delegate.cs: DelegateInvocation uses MethodInfo.
4366         
4367         * parameter.cs: Removed IsTypeParameter.
4368         
4369         * generic-mcs.cs: More missing stuff.
4370
4371 2008-06-16  Martin Baulig  <martin@ximian.com>
4372
4373         * modifiers.cs
4374         (Modifiers.DEBUGGER_HIDDEN): New public const.
4375
4376         * typemanager.cs
4377         (TypeManager.GetDebuggerHiddenAttribute): New public static method.
4378
4379         * class.cs
4380         (MethodOrOperator.Emit): Check `Modifiers.DEBUGGER_HIDDEN'.
4381         (AbstractPropertyEventMethod): Likewise.
4382         (Constructor.Emit): Likewise.
4383         (SourceMethod.SetCompilerGenerated): Removed.
4384
4385         * iterator.cs: Set `Modifiers.DEBUGGER_HIDDEN' everywhere except
4386         on MoveNext().
4387
4388         * anonymous.cs
4389         (RootScopeInfo.DoDefineMembers): Set `Modifiers.DEBUGGER_HIDDEN'
4390         if we're an `IteratorHost'.
4391         (AnonymousMethodMethod..ctor): Don't set
4392         `Modifiers.COMPILER_GENERATED'; csc only sets this on the class,
4393         not on the method.
4394
4395 2008-06-16  Marek Safar  <marek.safar@gmail.com>
4396
4397         * statement.cs: Clean-up foreach statements.
4398
4399 2008-06-12  Marek Safar  <marek.safar@gmail.com>
4400
4401         * class.cs: Stop using public method which should not exist
4402         (MethodBuilder.SetGenericMethodSignature).
4403
4404 2008-06-11  Martin Baulig  <martin@ximian.com>
4405
4406         * location.cs
4407         (Location.LookupFile): Add `CompilationUnit' argument; when given
4408         a relative file name, make it relative to the directory the .cs
4409         file is located in instead of using the current directory.
4410
4411 2008-06-11  Martin Baulig  <martin@ximian.com>
4412
4413         * class.cs
4414         (IMethodData.EmitExtraSymbolInfo): Added `SourceMethod' argument.
4415         (MethodOrOperator.EmitExtraSymbolInfo): Likewise.
4416         (SourceMethod.SetRealMethodName): Moved here from the symbol writer.
4417         (SourceMethod.SetCompilerGenerated): Likewise.
4418
4419 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4420
4421         * codegen.cs, driver: Only write symbol file when it's asked for.
4422
4423 2008-06-11  Marek Safar  <marek.safar@gmail.com>
4424
4425         * codegen.cs: Don't use assembly writer error handling for symbol writer.
4426
4427 2008-06-10  Martin Baulig  <martin@ximian.com>
4428
4429         * symbolwriter.cs: Reflect latest MarkSequencePoint() API changes.
4430
4431 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4432
4433         A fix for bug #316290
4434         * expression.cs: Include decimal operators in predefined table.
4435         
4436         * parameters.cs: More readonlyness.
4437
4438 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4439
4440         A fix for bug #397213
4441         * cs-parser.jay: One more missing current_local_parameters reset.
4442
4443 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4444
4445         A fix for bug #396633
4446         * class.cs: Host backing field in partial container.
4447
4448 2008-06-09  Marek Safar  <marek.safar@gmail.com>
4449
4450         A fix for bug #397068
4451         * expression.cs: Check both operand types when predefined operator is used.
4452
4453 2008-06-05  Martin Baulig  <martin@ximian.com>
4454
4455         Merged the `debugger-kahalo' branch.
4456
4457         * class.cs
4458         (MethodData.Emit): Call SymbolWriter.SetCompilerGenerated() if
4459         we're an iterator method.
4460         (SourceMethod): Reflect latest symbol writer changes;
4461         SymbolWriter.OpenMethod() now takes a `ICompileUnit' argument and
4462         now `start_row' and `end_row'.
4463         (Constructor.Emit): Fix the logic whether to emit symbol information.
4464
4465         * iterator.cs: Call SymbolWriter.SetCompilerGenerated() on all the
4466         generated methods.
4467
4468         * location.cs
4469         (CompilationUnit): New public class; derives from `SourceFile'.
4470         (SourceFileEntry.DefineSymbolInfo): New public method.
4471         (SourceFileEntry.SetChecksum): New public method.
4472         (Location): Encode hidden line numbers by using `column == 255';
4473         the .ctor now accepts `column == -1' to mark a hidden line number.
4474         (Location.Hidden): New public property.
4475         (Location.CheckPoint): Add `CompilationUnit'.
4476         (Location.SourceFiles): Change return type to `CompilationUnit[]'.
4477         (Location.Push): Add `CompilationUnit compile_unit' argument.
4478         (Location.CompilationUnit): New public property.
4479
4480         * statement.cs
4481         (ToplevelBlock.Emit): Add `ec.Mark (EndLocation)'.
4482
4483         * cs-parser.jay: `SourceFile' -> `CompilationUnit'.
4484
4485         * driver.cs: `SourceFile' -> `CompilationUnit'.
4486
4487         * cs-tokenizer.cs: `SourceFile' -> `CompilationUnit'.
4488
4489         * namespace.cs: `SourceFile' -> `CompilationUnit'.
4490
4491         * cs-tokenizer.cs: Add support for `#pragma checksum' and
4492         `#line hidden'.
4493
4494         * symbolwriter.cs
4495         (SymbolWriter.MarkSequencePoint): Take a `Location' and use the
4496         new symbol writer API to also pass the file.
4497
4498 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4499
4500         * statement.cs: Emit catch variable assignment using variable expression.
4501         
4502 2008-06-05  Marek Safar  <marek.safar@gmail.com>
4503
4504         * ecore.cs, expression.cs, statement.cs: Make TemporaryVariable compatible
4505         with other variable types.
4506
4507 2008-06-04  Marek Safar  <marek.safar@gmail.com>
4508
4509         * ecore.cs, expression.cs, statement.cs, typemanager.cs: Removed custom
4510         GetLength method emit, it breaks resolve rules.
4511         
4512 2008-06-02  Atsushi Enomoto  <atsushi@ximian.com>
4513             Marek Safar  <marek.safar@gmail.com>
4514                         
4515         A fix for bug #395542
4516         * cs-parser.jay: The trailing comma is allowed in anonymous type member
4517         declaration.
4518         
4519 2008-06-02  Marek Safar  <marek.safar@gmail.com>
4520
4521         A fix for bug #395287
4522         * class.cs, modifiers.cs: Automatic properties method base modifiers checks.
4523
4524 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4525
4526         A fix for bug #395845
4527         * class.cs, nullable.cs: User unary operator is allowed to have nullable and
4528         non-nullable parameter type.
4529         
4530 2008-05-31  Marek Safar  <marek.safar@gmail.com>
4531
4532         * class.cs: Handle contructor initializer as a statement in top-level block.
4533
4534 2008-05-30  Marek Safar  <marek.safar@gmail.com>
4535
4536         * attribute.cs: Don't mix old and new corlib types when emitting corlib
4537         security attributes.
4538
4539 2008-05-24  Marek Safar  <marek.safar@gmail.com>
4540
4541         * ecore.cs, expression.cs: Small IVariable refactoring.
4542
4543 2008-05-22  Marek Safar  <marek.safar@gmail.com>
4544
4545         * assign.cs (LocalTemporary): Implemented CreateExpressionTree.
4546
4547 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4548
4549         * cs-parser.jay: Removed redundant catch type check.
4550
4551 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4552
4553         A fix for bug #390372
4554         * nullable.cs: Set correct return type.
4555
4556 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4557
4558         A fix for bug #391062
4559         * typemanager.cs: Fixed crash when comparing null types.
4560
4561 2008-05-21  Marek Safar  <marek.safar@gmail.com>
4562
4563         A fix for bug #391871
4564         * cs-parser.jay: Better error handling for invalid catch type.
4565
4566 2008-05-20  Marek Safar  <marek.safar@gmail.com>
4567
4568         A fix for bug #392155
4569         * cs-tokenizer.cs: Fixed casting of byte and decimal expression.
4570
4571 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4572
4573         A fix for bug #390666
4574         * ecore.cs (BetterExpressionConversion): Unwrap each Expression<T>
4575         expressions.
4576
4577 2008-05-15  Marek Safar  <marek.safar@gmail.com>
4578
4579         * class.cs, expression.cs, statement.cs: Removed a hack, setting block flag
4580         in getter.
4581
4582 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4583
4584         A fix for bug #389625
4585         * delegate.cs, generic.cs: Some progress on method group return type
4586         inference.
4587
4588 2008-05-13  Marek Safar  <marek.safar@gmail.com>
4589
4590         A fix for bug #378419
4591         * namespace.cs: Inspect also parent namespaces not only namespace entries.
4592
4593 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4594
4595         * class.cs (Constructor): Added IsCompilerGenerated.
4596
4597 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4598
4599         * expression.cs: Enum binary operators can accept non-enum operand only when
4600         is implicitly convertible to underlying type.
4601
4602 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4603
4604         A fix for bug #389272
4605         * support.cs: Workaround System.InvalidOperationException for enums.
4606
4607 2008-05-12  Marek Safar  <marek.safar@gmail.com>
4608
4609         A fix for bug #389073
4610         * convert.cs: More undocumented explicit IntPtr/UIntPtr conversions.
4611
4612 2008-05-10  Marek Safar  <marek.safar@gmail.com>
4613
4614         * driver.cs: Split Parse.
4615         
4616         * location.cs (LookupFile): Uses string.Empty.
4617
4618 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4619
4620         * expression.cs, parameter.cs: Small ParameterReference clean up.
4621
4622 2008-05-07  Marek Safar  <marek.safar@gmail.com>
4623
4624         * anonymous.cs, codegen.cs, convert.cs, ecore.cs: Removed uber ugly TempEc
4625         hack. Fixes #387502.
4626
4627 2008-05-06  Martin Baulig  <martin@ximian.com>
4628
4629         * class.cs (Constructor.Emit): Fix the logic whether to emit
4630         symbol information.
4631
4632 2008-05-06  Raja R Harinath  <harinath@hurrynot.org>
4633
4634         Fix #385503
4635         * iterators.cs (Iterator.CurrentBlock.DoEmit): Don't emit
4636         InvalidOperationException when the iterator is before the start or
4637         after the end.
4638
4639 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4640
4641         * nullable.cs (NullCoalescingOperator): Result is underlying type of left,
4642         when left is nullable type.
4643
4644 2008-05-06  Marek Safar  <marek.safar@gmail.com>
4645
4646         A fix for bug #386628
4647         * expression.cs (LocalVariableReference): Continue in resolving when
4648         variable is not assigned.
4649
4650 2008-05-05  Marek Safar  <marek.safar@gmail.com>
4651
4652         * nullable.cs, statement.cs (Unwrap): Store non-variable expression in all
4653         nullable operations.
4654
4655 2008-05-04  Marek Safar  <marek.safar@gmail.com>
4656
4657         * nullable.cs, statement.cs (Unwrap): Don't duplicate variable expressions,
4658         it saves many redundant temporary variables for nullable operations.
4659
4660 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4661
4662         * assign.cs: EventAddOrRemove is a statement and cannot have a type.
4663         
4664         * cfold.cs, constant.cs, expression.cs: Share Error_OperatorCannotBeApplied
4665         method.
4666         
4667         * nullable.cs: Constant coalescing operator optimizations.
4668
4669 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4670
4671         * constant.cs: Use unsigned conversion for values which are unsigned only.
4672
4673 2008-05-03  Marek Safar  <marek.safar@gmail.com>
4674
4675         * convert.cs, literal.cs, nullabel.cs, typemanager.cs: Implemeted null 
4676         coalescing operator as it should be.
4677
4678 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4679
4680         A fix for bug #371016
4681         * expression.cs: All predefined delegate operators require implicit method
4682         group conversion.
4683         
4684 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4685
4686         * constant.cs: Emit long constant as uint when fits the range.
4687         
4688         * convert.cs, expression.cs: Fixed few unsafe conversions.
4689
4690 2008-05-02  Marek Safar  <marek.safar@gmail.com>
4691
4692         * convert.cs, literal.cs: Don't wrap implicit reference conversion to object
4693
4694 2008-05-02  Raja R Harinath  <harinath@hurrynot.org>
4695
4696         Fix #385758
4697         * convert.cs (ImplicitNumericConversion): Don't modify the type of
4698         'expr'.
4699         * ecore.cs (EmptyCast.Create): Flatten nested EmptyCasts.
4700
4701 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4702
4703         * constant.cs, literal.cs: IsLiteral property for error reporting.
4704         
4705         * ecore.cs, expression.cs: Implemented Property expression.
4706
4707 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4708
4709         * class.cs, modifiers.cs, flowanalysis.cs: New BACKING_FIELD flag.
4710         
4711         * nullable.cs: Implemented nullable coalescing null operator.
4712
4713         * ecore.cs, expression.cs: Expression trees work.
4714
4715 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4716
4717         * ecore.cs: CreateExpressionTree is finally abstract.
4718
4719         * expression.cs, linq.cs: Updated.
4720
4721 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4722
4723         * expression.cs, ecore.cs: Block base access expression inside expression
4724         tree.
4725
4726 2008-05-01  Marek Safar  <marek.safar@gmail.com>
4727
4728         A fix for bug #385058
4729         * expression.cs: User-defined operator implementations always take
4730         precedence over predefined operator implementations.
4731
4732 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4733
4734         * assign.cs, anonymous.cs, lambda.cs, nullable.cs, ecore.cs, linq.cs,
4735         class.cs, iterators.cs, expression.cs, attribute.cs: Filled a few more
4736         expression tree conversions.
4737         
4738 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4739
4740         * typemanager.cs, ecore.cs, class.cs, expression.cs, doc.cs: Merged all
4741         operators method details to Operator class.
4742
4743 2008-04-30  Marek Safar  <marek.safar@gmail.com>
4744
4745         * anonymous.cs: Pass unsafe flags to anonymous container.
4746         
4747         * ecore.cs, expression.cs, statement.cs: Block unsafe pointer operations
4748         inside expression tree.
4749
4750 2008-04-29  Martin Baulig  <martin@ximian.com>
4751
4752         * cs-tokenizer.cs (Tokenizer.Position): Added `line'.
4753         (Tokenizer.PopPosition): Also restore the `line'.
4754
4755 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4756
4757         * delegate.cs: Implemented Invoke expression.
4758
4759 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4760
4761         * expression.cs: Fixed equality reference comparison regression.
4762
4763 2008-04-29  Marek Safar  <marek.safar@gmail.com>
4764
4765         * ecore.cs: Clean up EmptyCast hack.
4766         
4767         * expression.cs, nullable.cs: Implemented enum binary and unary operations
4768         using correct conversion rules. Also fixes #383993.
4769
4770 2008-04-28  Martin Baulig  <martin@ximian.com>
4771
4772         * class.cs (Constructor.Emit): Don't emit debugging information
4773         for generated default .ctor's.
4774
4775 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4776
4777         * convert.cs: Empty-cast ushort to int conversion.
4778
4779 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4780
4781         A fix for bug #384191
4782         * ecore.cs, expression.cs: Fixed expression cloning.
4783
4784 2008-04-28  Marek Safar  <marek.safar@gmail.com>
4785
4786         * ecore.cs, delegate.cs, assign.cs: Few tweaks for recent changes.
4787
4788 2008-04-28  Raja R Harinath  <harinath@hurrynot.org>
4789
4790         Fix #381559, test-638.cs, test-639.cs
4791         * assign.cs (CompoundAssign.Helper): New wrapper.
4792         (CompoundAssign.DoResolve): Use it to wrap the nested 'target'
4793         access.
4794         * ecore.cs (MethodGroupExpr.VerifyArgumentsCompat) <params arguments>:
4795         Pass unconverted expressions to the params array creation expression.
4796         (FieldExpr.EmitAssign): Don't special-case StringConcat.
4797         (PropertyExpr.EmitAssign): Likewise.
4798         * expression.cs (ArrayCreation.ResolveArrayElement): Keep track of the
4799         element if it is of kind CompoundAssign.Helper.
4800         (ArrayCreation.Emit): If we saw a CompoundAssign.Helper, emit it
4801         first before anything else.
4802         (ArrayAccess.EmitAssign): Don't special-case StringConcat.
4803         (ArrayAccess.LoadArrayAndArguments): Simplify.
4804
4805 2008-04-27  Marek Safar  <marek.safar@gmail.com>
4806
4807         * expression.cs: Fixed cloning of typeof(void).
4808
4809 2008-04-27  Raja R Harinath  <harinath@hurrynot.org>
4810
4811         * assign.cs (Assign.DoResolve): Remove support for EventExprs.
4812         (Assign.Emit): Likewise.  Move it to ...
4813         (CompoundAssign.DoResolve): ... here and ...
4814         (CompoundAssign.Emit): ... here.
4815         (EventAddOrRemove): New helper to handle += and -= on events, and
4816         avoid the use of BinaryDelegates.
4817         * ecore.cs (EventExpr.DoResolveLValue): Emit CS0070 unconditionally.
4818         (EventExpr.EmitAddOrRemove): Improve.
4819         * delegate.cs (DelegateInvocation.DoResolve): Simplify slightly.
4820
4821         * cs-parser.jay (type) <namespace_or_type_name variant>: Don't
4822         create VarExprs for 'foo.bar.var'.
4823         * ecore.cs (VarExpr.InferType): Rename from DoResolveLValue, which
4824         is a highly inappropriate name for its functionality.
4825
4826 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4827
4828         Simplify handling of multiple assignments
4829         * assign.cs (Assign): Clear out all 'embedded assign' gunk.  Make
4830         inheritable-only.
4831         (SimpleAssign): New.  Class to be used for normal assignments.
4832         * anonymous.cs, class.cs, cs-parser.jay: Update to changes.
4833         * expression.cs, parameter.cs, statement.cs: Likewise.
4834
4835 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4836
4837         * ecore.cs, expression.cs, nullable.cs: Implemeted enum binary add operation
4838         for incompatible underlying types, more to come, uff.
4839
4840 2008-04-26  Raja R Harinath  <harinath@hurrynot.org>
4841
4842         Fix gtest-388.cs
4843         * expression.cs (VariableReference.EmitAssign) <source is NewInstance>:
4844         Handle 'leave_copy'.
4845
4846 2008-04-25  Marek Safar  <marek.safar@gmail.com>
4847
4848         * expression.cs, nullable.cs: Implemented UnaryPlus expression.
4849
4850 2008-04-24  Raja R Harinath  <harinath@hurrynot.org>
4851
4852         Fix test-636.cs.  Sprinkle a few more 'EmitSideEffect's around
4853         * expression.cs (Unary.TryReduceConstant): Unwrap SideEffectConstant.
4854         * statement.cs (While, Do, For): Allow test to have side effects.
4855         (For.DoEmit): Always emit InitStatement.
4856
4857         Fix test-635.cs
4858         * expression.cs (Binary.DoResolve) <BitwiseAnd with zero constant>:
4859         Always create SideEffectConstant.
4860         (Binary.EnumLiftUp): Don't assume that the enumeration constant is
4861         of type EnumConstant.
4862
4863         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4864         Handle 'right' being SideEffectConstant of type 'bool'.
4865
4866         * expression.cs (Binary.EmitBranchable) <Equality with constant>:
4867         Use left.EmitBranchable instead of open coding it, so as to
4868         improve optimization opportunities.
4869
4870         * constant.cs (SideEffectConstant.EmitSideEffect): Simplify slightly.
4871
4872         * ecore.cs (Expression.EmitBranchable): Document some non-obvious
4873         assumptions.
4874         (Expression.EmitSideEffect): Document.
4875
4876 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4877
4878         * expression.cs: Implemented NewArrayBounds, TypeIs, and TypeAs expressions.
4879
4880 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4881
4882         * constant.cs, statement.cs: Use EmitSideEffect for constant if statement.
4883
4884 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4885
4886         * ecore.cs, expression.cs, delegate.cs: Implemeted delegate instantiation
4887         conversion to expression tree.
4888
4889 2008-04-23  Marek Safar  <marek.safar@gmail.com>
4890
4891         * ecore.cs: Removed unused expression.
4892
4893 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4894
4895         * expression.cs: Implemented NegateChecked and New expressions.
4896
4897 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4898
4899         * convert.cs, nullable.cs, expression.cs: Implemented Negate expression.
4900
4901 2008-04-22  Raja R Harinath  <harinath@hurrynot.org>
4902
4903         Fix #351102
4904         * anonymous.cs (AnonymousMethodExpression.DoResolve): Mark as
4905         needing final 'ret' instruction.
4906
4907 2008-04-22  Marek Safar  <marek.safar@gmail.com>
4908
4909         * expression.cs: Disabled lifted binary conversion on ISO-1 profiles.
4910
4911 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4912
4913         * expression.cs: Emit ldnull and not null expression as an instance argument
4914          of static method expression calls.
4915
4916 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4917
4918         A fix for bug #378200
4919         * expression.cs: Fixed crash when creating parameterless expression tree
4920         method call.
4921
4922 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4923
4924         A fix for bug #375297
4925         * anonymous.cs: Fixed crash when inferring from null argument anonymous
4926         method.
4927
4928 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4929
4930         A fix for bug #377596
4931         * decl.cs, class.cs: Emit delegate type argument attributes.
4932
4933 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4934
4935         A fix for bug #365314
4936         * generic.cs, ecore.cs: Type parameter declaration cannot be of generic type
4937         
4938 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4939
4940         * cs-parser.jay, expression.cs: ComposedCast can work with type expressions
4941         only.
4942
4943 2008-04-21  Marek Safar  <marek.safar@gmail.com>
4944
4945         * generic.cs (TypeParameter): Removed redundant location.
4946
4947 2008-04-19  Marek Safar  <marek.safar@gmail.com>
4948
4949         * generic.cs, parameter.cs, namespace.cs, ecore.cs, class.cs, decl.cs,
4950         delegate.cs, iterators.cs, cs-parser.jay, const.cs, enum.cs: Use
4951         FullNamedExpression in all declaration type expression, statements will come
4952         later.
4953
4954 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4955
4956         * generic.cs, namespace.cs, ecore.cs, class.cs, decl.cs, generic-mcs.cs,
4957         nullable.cs, expression.cs, enum.cs, doc.cs: Cleaning up type expressions.
4958
4959 2008-04-18  Marek Safar  <marek.safar@gmail.com>
4960
4961         * parameter.cs, delegate.cs, cs-parser.jay, expression.cs: Removed unused
4962         code.
4963
4964 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4965
4966         * decl.cs, class.cs, generic.cs: Verify partial parts type parameters and
4967         constraints.
4968
4969 2008-04-17  Marek Safar  <marek.safar@gmail.com>
4970
4971         * decl.cs, class.cs, cs-parser.jay, ecore.cs, expression.cs: Unify all type
4972         name expressions.
4973         Also fixes #340463.
4974
4975 2008-04-17  Raja R Harinath  <harinath@hurrynot.org>
4976
4977         Hook up 'EmitSideEffect'
4978         * constant.cs (Constant.EmitSideEffect): New.
4979         (SideEffectConstant.Emit): Simplify.  Use EmitSideEffect.
4980         (SideEffectConstant.EmitSideEffect): New.
4981         * ecore.cs (BoxedCast.EmitBranchable): Remove.  We can't use an
4982         unconditional branch in EmitBranchable.
4983         (FieldExpr.EmitBranchable): New.
4984         * expression.cs (Unary.EmitSideEffect): New.
4985         (Binary.EmitSideEffect): New.
4986         (VariableReference.EmitSideEffect): New.  Do nothing.
4987
4988 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
4989
4990         Introduce 'EmitSideEffect'
4991         * ecore.cs (Expression.EmitSideEffect): New.
4992         (TypeCast): Rename from EmptyCast.
4993         (EmptyCast): New.
4994         (EmptyCast.EmitBranchable, EmptyCast.EmitSideEffect): Implement.
4995         (BoxedCast.EmitBranchable, BoxedCast.EmitSideEffect): Implement.
4996         * convert.cs, nullable.cs: Update to changes.
4997
4998 2008-04-16  Marek Safar  <marek.safar@gmail.com>
4999
5000         * class.cs, cs-parser.jay: Early check for base types expression.
5001
5002 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5003
5004         * decl.cs (MemberName): Declare PrettyName as obsolete.
5005
5006 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5007
5008         * namespace.cs: Use MemberName comparison.
5009
5010 2008-04-16  Raja R Harinath  <harinath@hurrynot.org>
5011
5012         Fix build break
5013         * decl.cs (MemberName.PrettyName): New.  Replaces the misnamed
5014         FullName.
5015         (MemberName.MethodName, MemberName.GetSignatureForError): Improve.
5016         (MemberName.FullyQualifiedName): New.  Provides the functionality
5017         that users assume FullName would have.
5018         * ecore.cs, namespace.cs: Update to changes.
5019
5020         * statement.cs (Using.assign): Make into ExpressionStatement.
5021         (Using.EmitPreTryBody): Simplify.
5022
5023 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5024
5025         * report.cs: ColorFormat is protected.
5026         
5027         * rootcontext.cs: Unused fields clean-up.
5028         
5029         * namespace.cs: Made UsingEntry name private.
5030
5031 2008-04-16  Marek Safar  <marek.safar@gmail.com>
5032
5033         * cs-tokenizer.cs, location.cs: Removed unused field.
5034
5035 2008-04-16  Jan Oravec <jan.oravec@6com.sk>
5036             Raja R Harinath  <harinath@hurrynot.org>
5037
5038         Fix #379822
5039         * constant.cs (SideEffectConstant.value): Rename from 'left'.
5040         (SideEffectConstant.side_effect): Rename from 'right'.
5041         (SideEffectConstant..ctor): Normalize 'side_effect'.
5042         (SideEffectConstant.Emit): Emit 'value', not 'side_effect' as the
5043         value of this constant.
5044         * cfold.cs: Update to changes.
5045
5046 2008-04-15  Marek Safar  <marek.safar@gmail.com>
5047
5048         * cs-paser.jay: Removed unused variable.
5049         
5050         * driver.cs: Made Compile instance method.
5051
5052 2008-04-15  Raja R Harinath  <harinath@hurrynot.org>
5053
5054         * flowanalysis.cs (FlowBranching.MergeChild): Simplify.
5055
5056 2008-04-15  Marek Safar  <marek.safar@gmail.com>
5057
5058         * cs-paser.jay, namespace.cs: Simplified handling of namespace imports. 
5059
5060 2008-04-13  Jb Evain  <jbevain@novell.com>
5061
5062         * namespace.cs: update the System.Core fullname for 2.1
5063         * driver.cs: update the list of required assemblies for 2.1.
5064         Merged from the Moonlight 2 branch.
5065
5066 2008-04-11  Marek Safar  <marek.safar@gmail.com>
5067
5068         * assign.cs, ecore.cs, expression.cs, nullable.cs: More work on nullable
5069         types and user defined operators. User operators arguments has to be checked
5070         for null value before invocation, which also means no operator is called
5071         when any argument is not convertible to unwrapped nullable type.
5072         
5073 2008-04-09  Marek Safar  <marek.safar@gmail.com>
5074
5075         * convert.cs, ecore.cs, expression.cs, nullable.cs: Initial refactoring
5076         of Unary expressions to follow operator overloading rules precisely.
5077         Also fixes #321794, #323794
5078         
5079 2008-04-08  Marek Safar  <marek.safar@gmail.com>
5080
5081         * cs-parser.jay, expression.cs: Don't wrap Indirection expression in Unary
5082         expression.
5083         
5084 2008-04-08  Marek Safar  <marek.safar@gmail.com>
5085
5086         * expression.cs, ecore.cs: Implemented MemberInit expression.
5087         
5088 2008-04-08  Raja R Harinath  <harinath@hurrynot.org>
5089
5090         Fix mono/tests/exception4.cs
5091         * statement.cs (ExceptionStatement, TryCatch): Revert to using
5092         ec.NeedReturnLabel () rather emitting a 'nop'.
5093
5094         * statement.cs (ExceptionStatement.SomeCodeFollows): A hook for a
5095         simple heuristic.
5096         (TryCatch.SomeCodeFollows): Likewise.
5097         * flowanalysis.cs (FlowBranchingException): Call 'SomeCodeFollows'
5098         for 'break', 'continue' and 'return' statements inside a try.
5099         We're fairly sure that the generated IL stream will have more
5100         instructions textually following the try.
5101         (FlowBranchingTryCatch): Likewise.
5102
5103         * statement.cs (Throw.Resolve): Move CS0156 and CS0724 testing ...
5104         * flowanalysis.cs (FlowBranching.CheckRethrow): ... here and to its
5105         overrides.
5106
5107         * statement.cs (CollectionForeach.DisposableWrapper): Make a true
5108         wrapper -- forward everything to CollectionForeach.
5109         (CollectionForeach.NonDisposableWrapper): New.
5110         (CollectionForeach.EmitFinallyBody): Use 'endfinally' instruction
5111         instead of a pop + branch to end.
5112
5113 2008-04-07  Marek Safar  <marek.safar@gmail.com>
5114
5115         A fix for bug #377485
5116         * assign.cs, expression.cs, decl.cs, class.cs, ecore.cs, namespace.cs: 
5117         Propagate location for extension method groups. Report conversion failure at
5118         right place.
5119
5120 2008-04-07  Marek Safar  <marek.safar@gmail.com>
5121
5122         * anonymous.cs, expression.cs, ecore.cs, typemanager.cs: Implemented
5123         ListInit and Field expressions.
5124
5125 2008-04-06  Raja R Harinath  <harinath@hurrynot.org>
5126
5127         * iterators.cs (Iterator.EmitMoveNext): Remove try/fault wrapper.
5128         Since $PC is always -1 inside the body of MoveNext, the fault
5129         handler is a no-op.
5130         * flowanalysis.cs (FlowBranchingException.EmitFinally): Kill.
5131         * statement.cs (ExceptionStatement.emit_finally): Likewise.
5132         (ExceptionStatement.ResolveFinally): Drop 'branching' argument.
5133
5134         The denouement!  Fix #324708
5135         * iterators.cs (Iterator.EmitMoveNext): Reset $PC to -1 on entry.
5136         (Iterator.EmitYieldBreak): We no longer need to reset $PC.
5137         * statement.cs (ExceptionStatement.DoEmit): Actually emit the
5138         'finally' inside the finally clause.
5139
5140         * statement.cs (ExceptionStatement.DoEmit): Emit try/finally block
5141         inside an iterator.  Don't emit the body of the 'finally' inside
5142         the finally clause yet.
5143
5144         Use the ResumableStatement infrastructure for MoveNext ()
5145         * iterators.cs (Iterator.EmitMoveNext_NoResumePoints): New.
5146         (Iterator.EmitMoveNext): Use 'resume_points'.  Get rid of
5147         'old_resume_points'.  Move dispatcher upfront.
5148         (Iterator.MarkYield): Mark the 'resume_point' of a Yield.
5149         * statement.cs (ExceptionStatement.DoEmit): Emit a dispatcher if
5150         in an enumerator.  This encodes the main fix in this patch series
5151         -- we can only jump into the first instruction of a try from the
5152         outside, but we want to emit try/finally regions in iterators and
5153         resume in the middle of them.
5154
5155 2008-04-05  Raja R Harinath  <harinath@hurrynot.org>
5156
5157         * statement.cs (ExceptionStatement.ResolveFinally): Move setting
5158         of NeedReturnLabel here.
5159
5160         Introduce a common point for emitting try/finally to IL
5161         * statement.cs (ExceptionStatement.DoEmit): New.  Combines all the
5162         features of the various subclasses, which are now driven by ...
5163         (ExceptionStatement.EmitPreTryBody): ... this and ...
5164         (ExceptionStatement.EmitTryBody): ... this and the original
5165         EmitFinallyBody.
5166         (TryFinally, Lock, Using, UsingTemporary, DisposableWrapper):
5167         Remove DoEmit and update to follow above protocol.
5168
5169         * statement.cs (ExceptionStatement.EmitForDispose): If all labels
5170         of the dispatcher are the same, skip emitting the 'switch'.
5171         * iterator.cs (Iterator.EmitDispose): Update to changes.
5172
5173         Clean up handling of 'using' statement
5174         * statement.cs (UsingTemporary): New.  Carved out of ...
5175         (Using): ... this.  Simplify drastically.  Handle exactly
5176         one variable.
5177         * cs-parser.jay (using_statement): Split.  Create UsingTemporary
5178         or Using as appropriate.  If there are multiple variable declared,
5179         create nested Using statements.
5180         (resource_acquisition): Kill.
5181
5182         * statement.cs (ExceptionStatement.EmitForDispose): Use
5183         EmitFinallyBody, not EmitFinally.
5184
5185         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Remove.
5186         * iterator.cs: Update to changes.
5187
5188         Start using the ResumableStatement infrastructure
5189         * statement.cs (ResumeableStatement.PrepareForDispose): New.
5190         (ResumableStatement.EmitForDispose): New.
5191         (ExceptionStatement): Override them.
5192         * iterators.cs (Iterator.EmitDispose): Use PrepareForDispose and
5193         EmitForDispose to create the body of the Dispose method.  Don't
5194         use OldResumePoint.
5195
5196         * iterator.cs (Iterator.AddResumePoint): Move here from ...
5197         * statement.cs (Toplevel.AddResumePoint): ... here.
5198         (Toplevel.MoveNextStatement.Resolve): Create FlowBranchingIterator.
5199         * flowanalysis.cs (FlowBranchingIterator): New.
5200         * codegen.cs (EmitContext): Update to changes.
5201
5202         * iterators.cs (Iterator.OldResumePoint): Rename from ResumePoint.
5203         (Iterator.old_resume_points): Rename from 'resume_points'.
5204         (Iterator.MoveNextStatement): Remove unused class.
5205
5206         New infrastructure for try/finally in iterators (still unused)
5207         * flowanalysis.cs (FlowBranching.AddResumePoint): New.
5208         (FlowBranchingToplevel.AddResumePoint): Hook into
5209         ToplevelBlock.AddResumePoint.
5210         (FlowBranchingTryCatch): Move CS01626 and CS01631 checks here.
5211         (FlowBranchingException): Hook into ExceptionBlock.AddResumePoint.
5212         * statement.cs (ToplevelBlock.AddResumePoint): New.  Collect
5213         resume points and assign program-counter values.
5214         (ExceptionBlock.AddResumePoint): Collect resume points for
5215         de-muxer at the top of try block.
5216         * iterators.cs (Yield.CheckContext): Simplify.
5217         (Yield.Resolve): Use FlowBranching.AddResumePoint.
5218
5219 2008-04-04  Raja R Harinath  <harinath@hurrynot.org>
5220
5221         * flowanalysis.cs (FlowBranching.AddReturnOrigin): Change Location
5222         argument to an ExitStatement.
5223         (FlowBranchingException): Refactor saved origins code.
5224         * statement.cs (ExitStatement): Update to cahges.
5225         * iterator.cs (YieldBreak): Likewise.
5226
5227         * statement.cs (ResumableStatement): New.  Common base class for
5228         YieldReturn and ExceptionStatement.
5229         (ExitStatement): New.  Common base class for Return and YieldBreak.
5230         (Return): Update to changes.
5231         * iterator.cs (YieldBreak): Likewise.
5232         * lambda.cs (ContextualReturn): Likewise.
5233
5234         Fix #377028
5235         * ecore.cs (Expression.ResolveAsTypeStep): If '!silent' attempt to
5236         emit a meaningful error message.
5237
5238         Fix #324765, #319508
5239         * flowanalysis.cs (VariableInfo.IsEverAssigned): New.
5240         (VariableInfo.SetAssigned): Set it.
5241         * statement.cs (Block.UsageWarning): Use 'IsEverAssigned' to
5242         determine if CS0219 or CS0168 is appropriate.  Don't use
5243         flow-analysis information.
5244         (Block.Resolve): Use ec.EndFlowBranching, not ec.DoEndFlowBranching.
5245         * codegen.cs (EmitContext.DoEndFlowBranching): Kill.  Inline into ...
5246         (EmitContext.EndFlowBranching): ... this.
5247
5248 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5249
5250         * class.cs, typemanager.cs: Emit volatile field with IsVolatile modifier.
5251
5252 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5253
5254         A fix for bug #376508
5255         * convert.cs, expression.cs: Fixed difference between ImplicitConversion and
5256         ImplicitConversionExists.
5257
5258 2008-04-03  Marek Safar  <marek.safar@gmail.com>
5259
5260         * expression.cs (Binary): Added remaining binary operators to expression
5261         tree builder.
5262
5263         * nullable.cs: Optimize shift with null argument.
5264
5265 2008-04-03  Raja R Harinath  <harinath@hurrynot.org>
5266
5267         Fix minor IL regression
5268         * statement.cs (TryCatch..ctor): Add 'inside_try_finally' argument.
5269         (TryCatch.DoEmit): Use it to avoid creating another ExceptionBlock.
5270         * cs-parser.jay (try_statement): Update to changes.
5271
5272         * statement.cs (TryFinally.need_exc_block): Delete.
5273         (TryFinally): Update to changes.
5274
5275         Now all ExceptionStatements are unconditional
5276         * statement.cs (CollectionForeach.DisposableWrapper): New.
5277         Extract out the try/finally code into a new wrapper.
5278         (CollectionForeach.Resolve): Use it to simplify the code.
5279
5280 2008-04-02  Raja R Harinath  <harinath@hurrynot.org>
5281
5282         Start at simplifying ExceptionStatement semantics a bit
5283         * statement.cs (TryCatch, TryFinally): Split 'Try' into two pieces.
5284         * cs-parser.jay (try_statement): Update to changes.
5285         (opt_catch_clauses): Remove.
5286         * flowanalysis.cs: Update to changes.
5287         (FlowBranching.BranchingType.TryCatch): New.
5288         (FlowBranchingTryCatch): New.
5289
5290         * flowanalysis.cs (FlowBranching.BranchingType.SwitchSection): Kill.
5291         (FlowBranching.CreateBranching): Update to changes.
5292         (FlowBranchingBlock.AddSibling): Add sanity check.
5293         * codegen.cs (EmitContext.StartFlowBranching) <Block variant>:
5294         Update to changes.
5295
5296         * iterators.cs (Iterator.MarkFinally): Remove.
5297         * statement.cs (ExceptionStatement): Update to changes.
5298
5299         Add support for skipping over finally blocks at runtime.  First
5300         in a series to fix #324708
5301         * iterators.cs (Iterator.SkipFinally): New LocalBuilder.
5302         (Iterator.EmitMoveNext): Initialize it.
5303         * statement.cs (ExceptionStatement.EmitFinally): Use it to emit a
5304         branch over the body of the 'finally' clause.
5305
5306 2008-03-31  Raja R Harinath  <harinath@hurrynot.org>
5307
5308         Avoid lopsided use of Foo/DoFoo names
5309         * statement.cs (ExpressionStatement.EmitFinallyBody):
5310         Rename from EmitFinally.
5311         (ExpressionStatement.EmitFinally): Rename from DoEmitFinally.
5312         * iterator.cs: Update to changes.
5313
5314 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5315
5316         * ecore.cs, expression.cs, nullable.cs: ConditionalLogicalOperator is now
5317         based on UserOperatorCall. More binary nullable operators clean up.
5318
5319 2008-04-02  Martin Baulig  <martin@ximian.com>
5320
5321         * symbolwriter.cs: Remove the `#if !DISABLE_TERRANIA_CHANGES' conditionals.
5322
5323 2008-04-02  Marek Safar  <marek.safar@gmail.com>
5324
5325         * nullable.cs: Merge user and empty conversions when lifting expression
5326         trees.
5327         
5328         * expression.cs (StringConcat): Implemented expression tree representation.
5329
5330 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5331
5332         * nullable.cs: When lifting null literal and a user operator exists, no call 
5333         is made.
5334         
5335 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5336
5337         * nullable.cs, ecore.cs, expression.cs: Convert null arithmetic to lifted
5338         null.
5339
5340 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5341
5342         * nullable.cs, expression.cs: Use namespace instead heavily nested
5343         monster abstract class.
5344
5345 2008-04-01  Marek Safar  <marek.safar@gmail.com>
5346
5347         * ecore.cs, convert.cs, constant.cs, nullable.cs, expression.cs: Implemented
5348         lifting of null literal and user operators. Clean up of some temporary
5349         nullable hacks.
5350
5351 2008-03-30  Raja R Harinath  <harinath@hurrynot.org>
5352
5353         Fix #368224, test-629.cs
5354         * flowanalysis.cs (FlowBranching.StealFinallyClauses): Return true
5355         if it crossed an unwind-protect boundary.
5356         * iterators.cs (Yield.CheckContext): Relax check for 'yield break'.
5357         (Yield.Resolve, Yield.DoEmit): Track whether the yield occurs
5358         inside an unwind-protected region.
5359         (YieldBreak.Resolve, YieldBreak.DoEmit): Likewise.
5360         (Iterator.MarkYield): Add 'unwind_protect' parameter.  Emit a
5361         'leave' instead of a 'br' if unwind-protected.
5362         (Iterator.EmitYieldBreak): Likewise.
5363
5364 2008-03-29  Gert Driesen  <drieseng@users.sourceforge.net>
5365
5366         * driver.cs: Only define versioninfo resources if no win32 resource
5367         file was specified.
5368
5369 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5370
5371         A fix for bug #372375
5372         * convert.cs: Fixed boxing of nullable types.
5373
5374 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5375
5376         * typemanager.cs: Initialize InternalsVisibleTo as the very first optional
5377         type.
5378
5379 2008-03-28  Marek Safar  <marek.safar@gmail.com>
5380
5381         A fix for bug #374619
5382         * nullable.cs: Fixed guarding of EmitBitwiseBoolean.
5383         
5384 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5385
5386         * lambda.cs: Check return type only for invocation.
5387         
5388 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5389
5390         A fix for bug #374214
5391         * ecore.cs: Correctly report argument type mismatch.
5392
5393 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5394
5395         * convert.cs (ImplicitReferenceConversionCore): Correctly compare enum type
5396         and not rely on broken IsEnum.
5397
5398 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5399
5400         * nullable.cs: New file, extracted from generic.cs.
5401         
5402         * generic.cs, generic-mcs.cs, *.csproj, *.sources: Updated.
5403
5404 2008-03-27  Marek Safar  <marek.safar@gmail.com>
5405
5406         * generic.cs, convert.cs, generic-mcs.cs, expression.cs: Added lifting of
5407         predefined comparison operators and null literals.
5408         
5409         * report.cs: New warning ID.
5410         
5411 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5412
5413         A fix for bug #370577
5414         * lambda.cs: Check return type too.
5415
5416 2008-03-25  Marek Safar  <marek.safar@gmail.com>
5417
5418         A fix for bug #372846
5419         * class.cs: Automatic properties can be declared as unsafe.
5420
5421 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5422
5423         * location.cs: Use string based concatenation.
5424         
5425         * expression.cs: LiftedBinaryOperator is gmcs only.
5426         
5427 2008-03-20  Marek Safar  <marek.safar@gmail.com>
5428
5429         * generic.cs, literal.cs, ecore.cs, expression.cs: Ongoing work on nullable
5430         conversions rules and expression trees.
5431
5432 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5433
5434         * delegate.cs: Use extension method source as delegate target.
5435
5436 2008-03-19  Marek Safar  <marek.safar@gmail.com>
5437
5438         * generic.cs, generic-mcs.cs, expression.cs, ecore.cs: Rewrote nullable
5439         binary operations to be purely based on binary operations and optimized
5440         emitted code (30% less in some cases). Introduced ReducedExpression for ETs
5441         and other ET refactoring.
5442         
5443         * typemanager.cs: Fixed warning.
5444         
5445 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5446
5447         * class.cs, decl.cs, delegate.cs: Do protected modifier check on each member
5448         
5449         * symbolwriter.cs: Fixed.
5450
5451 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5452
5453         * anonymous.cs, driver.cs: Reset anonymous types counters.
5454
5455 2008-03-17  Marek Safar  <marek.safar@gmail.com>
5456
5457         * ecore.cs (MethodGroupExpr): Skip first candidate, it's already the best.
5458         
5459         * class.cs: Use fullname for all type member definitions.
5460         
5461 2008-02-19  Martin Baulig  <martin@ximian.com>
5462
5463         * class.cs
5464         (IMethodData.EmitExtraSymbolInfo): New interface method.
5465         (MethodData.Emit): Call method.EmitExtraSymbolInfo().
5466         (MethodOrOperator.EmitExtraSymbolInfo): Implement this new
5467         interface method here as an empty public virtual method.
5468
5469         * anonymous.cs
5470         (AnonymousMethodMethod.ctor): Added `string real_name' argument.
5471         (AnonymousMethodMethod.EmitExtraSymbolInfo): Override and call
5472         CodeGen.SymbolWriter.SetRealMethodName().       
5473
5474 2008-02-18  Martin Baulig  <martin@ximian.com>
5475
5476         * anonymous.cs
5477         (ScopeInfo.EmitType): Override this and emit debugging
5478         information for captured variables.
5479         (RootScopeInfo.EmitType): Override this and emit symbol
5480         information for a captured `this'.
5481
5482 2008-02-15  Martin Baulig  <martin@ximian.com>
5483
5484         * iterators.cs: Emit debugging info.
5485
5486         * codegen.cs
5487         (EmitContext.Flags): Add `OmitDebuggingInfo'.
5488         (EmitContext.OmitDebuggingInfo): New public property.
5489
5490         * statement.cs
5491         (While): Override Emit() and don't emit symbol info there; do it
5492         inside DoEmit() instead.
5493         (Block.Emit): Omit symbol information while emitting the scope
5494         initializers; don't ec.Mark() the `EndLocation'.  Fix the lexical
5495         block logic.
5496         (ExplicitBlock.IsIterator): Moved here from `ToplevelBlock'.
5497         (ToplevelBlock.MakeIterator): Pass the `flags' to `ExplicitBlock's
5498         .ctor to make `IsIterator' work.
5499
5500 2008-03-14  Martin Baulig  <martin@ximian.com>
5501
5502         * symbolwriter.cs: Added the new symbol writer function from the
5503         debugger's `terrania' branch; temporarily enclose them inside
5504         `#if !DISABLE_TERRANIA_CHANGES' conditionals until I'm back from
5505         my vacations.
5506
5507 2008-03-14  Martin Baulig  <martin@ximian.com>
5508
5509         * symbolwriter.cs
5510         (SymbolWriter): Make this a public static class.
5511
5512         * codegen.cs
5513         (CodeGen.SymbolWriter): Removed; use the new static `SymbolWriter'
5514         class instead of using `if (CodeGen.SymbolWriter != null)' everywhere.
5515
5516 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5517
5518         A fix for bug #370577
5519         * statement.cs, lambda.cs: Added extra limitations when dealing with void
5520         return type.
5521         
5522 2008-03-14  Marek Safar  <marek.safar@gmail.com>
5523
5524         * typemanager.cs (CSharpName): Made 250 times faster.
5525
5526 2008-03-13  Marek Safar  <marek.safar@gmail.com>
5527
5528         * ecore.cs, expression.cs: Emit conversion for ET shift argument.
5529         
5530 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5531
5532         * generic.cs, typemanager.cs, enum.cs, codegen.cs, statement.cs: Try not to
5533         crash when predefined field does not exist.
5534         
5535 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5536
5537         * ecore.cs (PropertyExpr): Fixed IsSingleDimensionalArrayLength regression.
5538         
5539 2008-03-12  Marek Safar  <marek.safar@gmail.com>
5540
5541         * class.cs (FixedField): Don't crash when contructors are missing.
5542
5543 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5544
5545         * typemanager.cs, namespace.cs, literal.cs, ecore.cs, class.cs, decl.cs,
5546         convert.cs, constant.cs, expression.cs, statement.cs: Use same method to
5547         check internal types accessibility for internal and external types.
5548         Replaced EnumToUnderlying by GetEnumUnderlyingType.
5549
5550 2008-03-11  Marek Safar  <marek.safar@gmail.com>
5551
5552         * support.cs, typemanager.cs, pending.cs, ecore.cs, class.cs, delegate.cs
5553         convert.cs, const.cs, anonymous.cs, constant.cs, expression.cs,
5554         attribute.cs, statement: Use corect instance of predefined types (work
5555         related to #364674).
5556
5557 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5558
5559         * expression.cs (TypeOfVoid): Fixed predefined method initialization.
5560         
5561 2008-03-07  Marek Safar  <marek.safar@gmail.com>
5562
5563         * generic.cs, typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, 
5564         class.cs, delegate.cs, iterators.cs, const.cs, constant.cs, driver.cs,
5565         expression.cs, attribute.cs, codegen.cs, statement.cs: TypeManager optional
5566         predefined types clean up, delayed predefined types members initialization
5567         (work related to #364674).
5568
5569 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5570
5571         * typemanager.cs (IsFriendAssembly): InternalsVisibleTo is not mandatory.
5572         
5573 2008-03-05  Marek Safar  <marek.safar@gmail.com>
5574
5575         * typemanager.cs, parameter.cs, rootcontext.cs, ecore.cs, class.cs, decl.cs,
5576         delegate.cs, convert.cs, driver.cs, attribute.cs, codegen.cs: TypeManager
5577         predefined types clean up (work related to #364674).
5578
5579 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5580
5581         * ecore.cs: Print an error message instead of throwing exception.
5582         
5583 2008-03-04  Marek Safar  <marek.safar@gmail.com>
5584
5585         * generic.cs, typemanager.cs, literal.cs, convert.cs, cfold.cs, constant.cs,
5586         expression.cs, statement.cs: Unififed null literal representation.
5587
5588 2008-03-03  Marek Safar  <marek.safar@gmail.com>
5589
5590         * anonymous.cs, cfold.cs, convert.cs, delegate.cs, doc.cs, ecore.cs,
5591         expression.cs: Refactored binary operators resolve phase and improved speed.
5592         The nullable code is still missing and won't work correctly, more fixes
5593         required.
5594
5595         It also fixes #323726, #324312, #324248, and many other unreported issues.
5596
5597 2008-02-29  Zoltan Varga  <vargaz@gmail.com>
5598
5599         * report.cs (FeatureIsNotAvailable): Use 'mcs1' instead of 'mcs', and 'mcs' 
5600         instead of 'gmcs'.
5601
5602 2008-02-27  Marek Safar  <marek.safar@gmail.com>
5603
5604         * ecore.cs: Clean-up and split BetterConversion.
5605         
5606 2008-02-25  Raja R Harinath  <harinath@hurrynot.org>
5607
5608         Fix #363791
5609         * enum.cs (EnumMember.Value): Only access 'value' if
5610         ResolveValue says it's ok.
5611         (EnumMember.DoResolveValue): Don't set prev_member.value.
5612         (Enum.GetDefinition): Reverse arguments of Equals --
5613         EnumMember.Value can return 'null'.
5614
5615         * statement.cs (Switch.Error_AlreadyOccurs): Fix typo in name.
5616
5617 2008-02-22  Marek Safar  <marek.safar@gmail.com>
5618
5619         * generic.cs, expression.cs: More ongoing work on expression trees.
5620         
5621 2008-02-21  Marek Safar  <marek.safar@gmail.com>
5622
5623         * class.cs, typemanager.cs: Rewrote operator matching logic to correctly
5624         handle missing matches when mutiple operators exist.
5625         
5626 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5627
5628         A fix for bug #363218
5629         * expression.cs (ArrayCreation.Clone): Deal with multi-dimensional
5630         initializers.
5631         
5632 2008-02-20  Marek Safar  <marek.safar@gmail.com>
5633
5634         * expression.cs, constant.cs, cfold.cs: Yet another side-effect constant
5635         update. This time to deal correctly with SideEffectConstant expression used
5636         as an argument for another constant folding.
5637
5638 2008-02-20  Raja R Harinath  <harinath@hurrynot.org>
5639
5640         * typemanager.cs (DropGenericMethodArguments): Ensure we get an underlying
5641         MethodBuilder.
5642
5643 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5644
5645         * constant.cs, cfold.cs: SideEffectConstant results can apply for folding.
5646
5647 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5648
5649         A fix for bug #328136
5650         * expression.cs: Do not fold immediately LogicalAnd operators when the left
5651         side is a false constant, because we still need to evaluate the right-hand
5652         side.
5653
5654         * statement.cs (If): Emit two types of boolean constants (simple constant,
5655         side-effect constant).
5656
5657 2008-02-19  Marek Safar  <marek.safar@gmail.com>
5658
5659         * constant.cs (SideEffectConstant): Don't emit boolean constant.
5660
5661         * expression.cs: Fold immediately LogicalAnd operators when both sides are
5662         constants.
5663
5664 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5665
5666         A fix for bug #361457
5667         * ecore.cs (IsApplicable): Params methods have lower priority.
5668
5669         * support.cs: Return correct parameter modifier for params types.
5670
5671 2008-02-18  Marek Safar  <marek.safar@gmail.com>
5672
5673         * generic.cs (TypeParameter): Cache attribute target name.
5674
5675         * support.cs: Removed unused variable.
5676
5677         * typemanager.cs: Removed debugging leftover.
5678
5679         * ecore.cs: Use local type instead of a property;
5680
5681         * class.cs (VerifyMembers): Consider also parent to test whether type member
5682         is local or public.
5683
5684         * expression.cs (FullMethodDesc): Removed.
5685
5686         * attribute.cs (IsValidArgumentType): Made static.
5687
5688 2008-02-17  Raja R Harinath  <harinath@hurrynot.org>
5689
5690         Cleanup to be more readable.
5691         * Makefile (GMCS_PROFILE): Remove.
5692         (COMPILER_NAME): New helper.
5693
5694 2008-02-15  Miguel de Icaza  <miguel@novell.com>
5695
5696         * cs-tokenizer.cs: if a conditional expression happens inside a
5697         (...) this also means that we do not need to de-ambiguate between
5698         an parenthesized expression and a cast.
5699
5700         Fixes 346484.
5701
5702         * constant.cs (SideEffectConstant): a constant value that happens
5703         to have a side effect.
5704
5705         Fixes the build regressions introduced by the fix for #359789
5706
5707 2008-02-14  Rodrigo Kumpera  <rkumpera@novell.com>
5708
5709         * expression.cs (Conditional.Emit): when emitting the ternary
5710         operator, use local variables to generate code verifiable code.
5711
5712         The verifier cannot infer that the type on stack before the
5713         stloc.0 is executed is of type ParentB. This happens because the
5714         stack merge algorithm uses only parent types when deciding which
5715         is the common type.  This is described in Part III 1.8.1.3 of ECMA
5716         335.
5717
5718         This code compiled with mcs is not verifiable under MS. The MS
5719         verifier picks the first common interface of Foo and Bar, which is
5720         wrong, but doesn't use a full join type of the 2 interfaces.
5721
5722         CSC uses a clever hack to compile such code in a verifiable
5723         way. It stores the intermediate values in a local variable with
5724         the expected type.
5725
5726         Fixes: #358102
5727
5728 2008-02-14  Miguel de Icaza  <miguel@novell.com>
5729
5730         * expression.cs: Do not fold BitwiseAnd operators when the left
5731         side is a false constant, because we still need to evaluate the
5732         right-hand side.
5733
5734         Fixes #359789
5735
5736         * support.cs: Instead of throwing an InternalErrorException when
5737         the position of the stream is outside the boundary of our buffer,
5738         reset the state of the reader, and restart the reading from the
5739         beginning of the file.
5740
5741 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5742
5743         * generic.cs (TypeParameter.GetMembers): Is not supported operation.
5744
5745 2008-02-14  Marek Safar  <marek.safar@gmail.com>
5746
5747         A fix for bug #361686
5748         * decl.cs: A protected types used inside a private class which parents
5749         derives from the protected class are accessible.
5750
5751 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5752
5753         * generic.cs (ConstraintChecker): Use cached member lookup when looking for
5754         the parameterless constructor.
5755
5756 2008-02-13  Marek Safar  <marek.safar@gmail.com>
5757
5758         * generic.cs, typemanager.cs, iterators.cs, codegen.cs: Refactored core
5759         lookup methods to use standard member cache when doing member lookup.
5760
5761 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5762
5763         * driver.cs: Don't report full path for referenced module as assembly error.
5764
5765 2008-02-12  Marek Safar  <marek.safar@gmail.com>
5766
5767         * Makefile: Fixed `qh' target to work on all machines.
5768
5769         * report.cs, typemanager.cs, parameter.cs, ecore.cs, class.cs, anonymous.cs,
5770         expression.cs, codegen.cs, statement.cs, doc.cs: Replaced type IsSubclassOf
5771         and HasElementType with TypeManager implementation.
5772
5773 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5774
5775         A fix for bugs #325134, #359749
5776         * expression.cs, ecore.cs: Try to resolve an extension method even if the
5777         first binds point to non-method member expression.
5778
5779 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5780
5781         * cs-parser.jay: Null coalescing operator is not part of ISO-1.
5782
5783 2008-02-08  Marek Safar  <marek.safar@gmail.com>
5784
5785         A fix for bugs #321394, #323028
5786         * generic.cs, parameter.cs, ecore.cs, class.cs, decl.cs, delegate.cs:
5787         Reworked naive IsAccessibleAs implementation to handle nested types.
5788
5789 2008-02-05  Jb Evain  <jbevain@novell.com>
5790
5791         * class.cs: use generic type comparison for parameters
5792         as well.
5793
5794 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5795
5796         A fix for bug #325372
5797         * class.cs: Use generic type comparison when testing method signatures.
5798
5799 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5800
5801         A fix for bug #357047
5802         * ecore.cs: Applied C# 3.0 changes to better conversion.
5803
5804 2008-02-05  Marek Safar  <marek.safar@gmail.com>
5805
5806         A fix for bug #358374
5807         * cs-parser.jay: Correctly set modifiers for all constructor types.
5808
5809 2008-02-04  Marek Safar  <marek.safar@gmail.com>
5810
5811         A fix for bug #355251
5812         * generic.cs: Added base class constraint based type inference.
5813
5814 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5815
5816         A fix for bug #357255
5817         * decl.cs: One more missing visibility check.
5818
5819 2008-02-01  Marek Safar  <marek.safar@gmail.com>
5820
5821         * support.cs: Fixed broken return.
5822
5823 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5824
5825         * report.cs: Correctly reset warnings count after probing.
5826
5827 2008-01-25  Martin Baulig  <martin@ximian.com>
5828
5829         * namespace.cs
5830         (NamespaceEntry.SymbolFileID): Make this work again after
5831         MemberName.ToString() is gone.
5832
5833 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5834
5835         * expression.cs: Implemented Divide, Equal, ExclusiveOr, GreaterThanOrEqual
5836         expressions.
5837
5838 2008-01-25  Marek Safar  <marek.safar@gmail.com>
5839
5840         * generic.cs: Use full implicit conversion for type inference fixing.
5841
5842 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5843
5844         * ecore.cs, expression.cs, generic.cs: Implemented Convert, ConvertChecked.
5845         Fixed user operator conversions.
5846
5847 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5848
5849         * generic.cs: Do nullable type to null comparison optimization during
5850         resolve phase.
5851
5852 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5853
5854         A fix for bug #355163
5855         * generic.cs: Enabled l-value resolve on nullable expressions.
5856
5857 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5858
5859         A fix for bug #353986
5860         * class.cs: Ingore static ctors with parameters for any further checks.
5861
5862 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5863
5864         A fix for bug #354310
5865         * namespace.cs: Removed redundant check.
5866
5867 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5868
5869         A fix for bug #354928
5870         * expression.cs: ElementInitializers can be resolved only once.
5871
5872 2008-01-24  Marek Safar  <marek.safar@gmail.com>
5873
5874         * convert.cs, ecore.cs, expression.cs, generic.cs: Implemented Coalesce and
5875         Condition expressions.
5876
5877 2008-01-23  Marek Safar  <marek.safar@gmail.com>
5878
5879         * codegen.cs: Fixed AssemblyBuilder initialization on other platforms.
5880
5881 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5882
5883         * ecore.cs, expression.cs, generic.cs: Implicit bool? to bool conversion is
5884         not allowed.
5885
5886         * generic.cs: Implemented coalesce expression.
5887
5888 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5889
5890         A fix for bug #355145
5891         * anonymous.cs, convert.cs, ecore.cs, generic.cs, lambda.cs: Implemented
5892         expression tree type inference.
5893
5894 2008-01-22  Raja R Harinath  <harinath@hurrynot.org>
5895
5896         Fix #354663
5897         * expression.cs (Binary.IsUnsignedType): Fix typo.
5898
5899 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5900
5901         * ecore.cs, expression.cs, generic.cs: Implemented NewArrayInit expression.
5902
5903 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5904
5905         A fix for bug #355161
5906         * ecore.cs, expression.cs: Wider range of extension method supported
5907         expressions.
5908
5909 2008-01-22  Gert Driesen  <drieseng@users.sourceforge.net>
5910
5911         * codegen.cs: Use magic value for AssemblyBuilderAccess to instruct
5912         AssemblyBuilder to operate in compiler context. Fixes mcs part of
5913         bug #354970.
5914
5915 2008-01-22  Marek Safar  <marek.safar@gmail.com>
5916
5917         A fix for bug #355148
5918         * ecore.cs, expression.cs: Correctly report misused ref and out modifiers.
5919
5920 2008-01-22  Miguel de Icaza  <miguel@novell.com>
5921
5922         * expression.cs (CreateExpressionTree): Add support for or and
5923         logical or, and indent following the coding conventions.
5924
5925         * typemanager.cs (LinqExpression): renamed from
5926         ExpressionTreeManager, for a shorter name.
5927
5928         Use TypeManager.CoreLookupType to lookup types from our core
5929         assemblies and turn those into "Type" variables.
5930
5931         Consumers that previously used "Namespace" and "Type" from this
5932         class should instead use the TypeExpression which is a type that
5933         is fully resolved (without involving the regular C# resolution
5934         rules). 
5935
5936         This typically looks like this:
5937
5938         TypeExpression texpr = new TypeExpression (LinqExpression.expression_type, loc);
5939         new MemberAccess (texpr, name, type_arguments, loc)
5940
5941         This avoids the problem in: #355178
5942
5943 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5944
5945         * cs-parser.jay, expression.cs: Check `namespace alias qualifier' language
5946         feature in parser only as we do in other cases.
5947         
5948 2008-01-21  Marek Safar  <marek.safar@gmail.com>
5949
5950         * attribute.cs, ecore.cs, class.cs, delegate.cs, expression.cs, linq.cs,
5951         typemanager.cs: A refactoring of params arguments to reuse existing
5952         expressions (params -> array initializer) to emit params argument instead
5953         of specialized handling.
5954         It was required by expression tree implementation and it has other benefits
5955         as well, we now apply same optimization for params arguments as we do for
5956         array initializers.
5957         
5958 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5959
5960         A fix for bug #353526
5961         * generic.cs: A type inference of params arguments may not required any
5962         temporary array creation.
5963         
5964 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5965
5966         A fix for bug #353534
5967         * generic.cs, ecore.cs, expression.cs: A method group type inference is
5968         supported for delegates only.
5969         
5970 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5971
5972         * generic.cs: Fixed 3.0 type inference fixing phase to determine a unique
5973         type for more than 1 candidates.
5974         
5975 2008-01-18  Marek Safar  <marek.safar@gmail.com>
5976
5977         * typemanager.cs, ecore.cs, expression.cs: Implemented ArrayLength and Call
5978         expressions.
5979         
5980 2008-01-16  Marek Safar  <marek.safar@gmail.com>
5981
5982         * generic.cs, typemanager.cs, lambda.cs, parameter.cs, ecore.cs, constant.cs,
5983         expression.cs: Implemented Add, And, AndAlso, and ArrayIndex (without unary
5984         operator) expressions. 
5985                 
5986 2008-01-16  Zoltan Varga  <vargaz@gmail.com>
5987
5988         * statement.cs: Avoid declaring an IL variable for this_variable since it is
5989         not accessed from the generated IL.
5990
5991 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5992
5993         * typemanager.cs, lambda.cs, parameter.cs, ecore.cs, class.cs, delegate.cs,
5994         iterators.cs, convert.cs, assign.cs, anonymous.cs, expression.cs,
5995         statement.cs: The first expression tree implementation drop, mostly
5996         infrastructure work.
5997
5998 2008-01-14  Marek Safar  <marek.safar@gmail.com>
5999
6000         * ecore.cs (IsNestedChild): Refactored.
6001
6002 2008-01-11  Marek Safar  <marek.safar@gmail.com>
6003
6004         * lambda.cs: Don't use a cast on unknown expression statement.
6005
6006 2008-01-10  Geoff Norton  <gnorton@novell.com>
6007
6008         * cs-tokenizer.cs: One more token to distinguish between method and lambda
6009         arguments
6010
6011 2008-01-09  Marek Safar  <marek.safar@gmail.com>
6012
6013         * doc.cs: Report better /doc crash details.
6014         
6015 2008-01-09  Marek Safar  <marek.safar@gmail.com>
6016
6017         A fix for bug #352536
6018         * ecore.cs, assign.cs, codegen.cs: Check event assignments.
6019
6020 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6021
6022         A fix for bug #352287
6023         * ecore.cs, expression.cs: Do `this' access checking in all member access
6024         expressions.
6025         
6026 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6027
6028         * rootcontext.cs, driver.cs: Switch to linq mode by default.
6029         
6030         * report.cs: Reset message stacks.
6031         
6032 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6033
6034         * generic.cs (InferInPhases): Correctly calculate params position.
6035         
6036 2008-01-08  Marek Safar  <marek.safar@gmail.com>
6037
6038         * cs-tokenizer.cs: No need to parse full string when parsing lambda
6039         arguments.
6040
6041 2008-01-07  Marek Safar  <marek.safar@gmail.com>
6042
6043         * cs-tokenizer.cs: Enabled lambda arguments micro-parser for all profiles.
6044         
6045         * decl.cs (LookupNamespaceOrType): Don't cache names which caused an error.
6046         
6047         * driver.cs: Updated --help option.
6048         
6049 2008-01-07  Marek Safar  <marek.safar@gmail.com>
6050
6051         * generic.cs (InferParamsTypeArguments): Removed.
6052         (InferInPhases): Add params type inference.
6053         (LowerBoundInference): Fixed scoring mechanism.
6054         
6055         * cs-tokenizer.cs (PreProcessPragma): Use Location instead of line.
6056         
6057 2008-01-06  Gert Driesen  <drieseng@users.sourceforge.net>
6058
6059         * typemanager.cs: On 2.0 profile, GetPublicKeyToken returns an empty
6060         byte array for unsigned "baked" assemblies.
6061
6062 2008-01-05  Gert Driesen  <drieseng@users.sourceforge.net>
6063
6064         * codegen.cs: AssemblyName.GetPublicKey returns a zero-length byte
6065         array for assemblies that are not strongnamed.
6066
6067 2008-01-04  Marek Safar  <marek.safar@gmail.com>
6068
6069         A fix for bug #351481
6070         * expression.cs (MemberAccess.ResolveNamespaceOrType): Use correct
6071         declaring type for nested generic types.
6072         
6073 2008-01-04  Marek Safar  <marek.safar@gmail.com>
6074
6075         * namespace.cs, class.cs, decl.cs, cs-parser.jay: Use GetSignatureForError
6076         instead of ToString.
6077         
6078 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6079
6080         A fix for bug #351047
6081         * expression.cs (Binary.ResolveOperator): Allow equality operators between
6082         null and structs only when equality and inequality operators are defined
6083         either as an user-operators or predefined operators.
6084         
6085 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6086
6087         A fix for bug #351047
6088         * generic.cs, typemanager.cs, class.cs: New IsReferenceType helper method.
6089         
6090 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6091
6092         A fix for bug #351257
6093         * cs-tokenizer.cs: Advance line number for '\r' correctly.
6094         
6095 2008-01-03  Marek Safar  <marek.safar@gmail.com>
6096
6097         A fix for bug #351157
6098         * class.cs (Using): Fixed yet another broken cloning.
6099         
6100         (Block): Put back more sensible default value for statements.
6101         
6102 2008-01-01  Gert Driesen  <drieseng@users.sourceforge.net>
6103
6104         * codegen.cs: Allow AssemblyVersion with only major version component.
6105         Fixes bug #351055.
6106
6107 2007-12-29  Marek Safar  <marek.safar@gmail.com>
6108
6109         A fix for bug #324654
6110         * class.cs: Use FullName property as member name.
6111
6112 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6113
6114         A fix for bug #342117
6115         * generic.cs (ConstraintChecker): Struct constraint also satisfies default
6116         constructor constraint.
6117
6118 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6119
6120         A fix for bug #338273
6121         * class.cs (ProbertyBase): Access modifier checks are required for overrides
6122         only.
6123
6124 2007-12-28  Marek Safar  <marek.safar@gmail.com>
6125
6126         A fix for bug #350839
6127         * ecore.cs (MethodroupExpr): Probing hacks are no longer required.
6128
6129 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6130
6131         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6132         GHOP:
6133         
6134         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6135
6136         * statement.cs: Changed some Hashtables to use HybridDictionaries
6137         instead. It was observed that some HashTables only contained a few
6138         items in the vast majority of cases. Since HybridDictionary is
6139         more efficient on small sets (<10 elements), "known_variables"
6140         from class ExplicitBlock as well as "labels" and "constants " from
6141         class Block were changed to HybridDictionaries. 
6142
6143         Atsai results: (56216kb->54987kb)
6144
6145         Miguel results (bootstrap of mcs): 59819kb -> 59290kb
6146
6147
6148 2007-12-27  AdTsai (http://code.google.com/u/AdTsai/)
6149
6150         Reviewed by Ben Maurer, Miguel de Icaza, patches from Google's
6151         GHOP:
6152         
6153         http://code.google.com/p/google-highly-open-participation-mono/issues/detail?id=4 
6154         
6155         * expression.cs: foreach loop to for loop, saved on allocation of
6156         enumerator (59333kb->59141kb)
6157
6158         * statement.cs. Changed foreach loops to for loops, saved on
6159         allocation of enumerator (59141kb->59006kb)
6160
6161         * decl.cs: ArrayLists in .NET 1.1 allocate 16 elements by default
6162         when constructed with no specified capacity. This was causing a
6163         few ArrayLists to allocate more memory than they would potentially
6164         need in the Block class and MemberCache class. Setting the
6165         ArrayLists to construct with a capacity of 1 saves some
6166         memory. (56216kb->55585kb)
6167
6168 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6169
6170         A fix for bug #347189 (2nd issue)
6171         * expression.cs (MemberAccess): Nested type can be found in base non-generic
6172         type.
6173
6174 2007-12-27  Miguel de Icaza  <miguel@novell.com>
6175         
6176         * report.cs: Do not use colors if stdout and stderr are not a
6177         terminal.
6178
6179 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6180
6181         A fix for bug #346998
6182         * ecore.cs (MethodGroupExpr): Implemented override filter for generic
6183         overloads.
6184
6185 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6186
6187         A fix for bug #343465
6188         * class.cs: Explicit method name for nested types uses dots only.
6189
6190 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6191
6192         A fix for bug #343707
6193         * cs-tokenizer.cs: Advance line number for mixed CR/LF files correctly.
6194
6195 2007-12-27  Marek Safar  <marek.safar@gmail.com>
6196
6197         * ecore.cs: Report type inference errors only when arguments count matches
6198         parameter count.
6199         
6200         * generic.cs (NullCoalescingOperator): Cannot be applied to null.
6201         
6202         * expression.cs, report.cs: New warning.
6203         
6204         * typemanager.cs: Catch anonymous method type too.
6205
6206 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6207
6208         A fix for bug #346379
6209         * expression.cs (UnaryMutator): Emit size of type for pointer mutator.
6210
6211 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6212
6213         A fix for bug #347359
6214         * expression.cs (Invocation): Don't resolve already resolved expression.
6215
6216 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6217
6218         A fix for bug #347189
6219         * class.cs (FixedField): Use non-dependent code only in the define phase.
6220
6221 2007-12-23  Marek Safar  <marek.safar@gmail.com>
6222
6223         A fix for bug #348076
6224         * ecore.cs (FieldExpr.DoResolve): Allow any variable based expression.
6225
6226 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6227
6228         * ecore.cs (MethodGroupExpr.OverloadResolve): Set type arguments for
6229         discovered extension methods.
6230
6231 2007-12-22  Marek Safar  <marek.safar@gmail.com>
6232
6233         * ecore.cs, namespace.cs, expression.cs: Removed broken ResolveGeneric
6234         method.
6235
6236 2007-12-21  Miguel de Icaza  <miguel@novell.com>
6237
6238         * report.cs (ErrorMessage): Add support for using colors on
6239         terminals that support it. 
6240
6241 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6242
6243         * ecore.cs: Use information about expanded params for error reporting.
6244
6245 2007-12-21  Marek Safar  <marek.safar@gmail.com>
6246
6247         * ecore.cs, generic.cs, delegate.cs: Refactoring of method overloading code
6248         and logic for params overloads.
6249         
6250 2007-12-15  Miguel de Icaza  <miguel@novell.com>
6251
6252         * generic.cs (NullCoalescingOperator.CloneTo): implement this one,
6253         as this is also created from the parser.  Fixes #349034
6254
6255 2007-12-12  Miguel de Icaza  <miguel@novell.com>
6256
6257         * statement.cs (Throw.CloneTo): it is valid to have empty
6258         expressions for throw. 
6259
6260 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6261
6262         * cs-parser.jay: Set delegate constraint parsing region correctly.
6263
6264 2007-12-03  Marek Safar  <marek.safar@gmail.com>
6265
6266         A fix for bug #345467
6267         * typemanager.cs (IsEqual): Compare generic parameters position only.
6268         
6269 2007-11-28  Marek Safar  <marek.safar@gmail.com>
6270
6271         * expression.cs (BaseAccess): Type arguments can be null.
6272
6273 2007-11-27  Raja R Harinath  <harinath@gmail.com>
6274
6275         * statement.cs (Block.Resolve): Ensure flow-branching tree is
6276         consistent even when an error has occured.
6277         (Switch.Resolve): Likewise.
6278
6279 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6280
6281         A fix for bug #334505
6282         * class.cs: Don't ignore InternalsVisibleTo attribute for internal
6283         overrides.
6284         
6285 2007-11-22  Marek Safar  <marek.safar@gmail.com>
6286
6287         * ecore.cs, typemanager.cs, delegate.cs, expression.cs: The first of 
6288         refactorings required to resolve extension methods correctly when mixing
6289         generics and non-generics members.
6290         
6291 2007-11-20  Marek Safar  <marek.safar@gmail.com>
6292
6293         A fix for bug #342584
6294         * convert.cs: Added not documented explicit IntPtr/UIntPtr to enum
6295         conversion.
6296         
6297 2007-11-19  Marek Safar  <marek.safar@gmail.com>
6298
6299         A fix for bug #342512
6300         * delegate.cs: Use delegate argument expression when is available. Don't
6301         emit virtual call when class is sealed.
6302         
6303 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6304
6305         A fix for bug #325423
6306         * assign.cs (FieldInitializer): Use resolved expression for emit.
6307         
6308         * class.cs: Print less confusing error message.
6309         
6310 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6311
6312         * cs-tokenizer.cs: Removed GMCS ifdefs.
6313         
6314         * rootcontext.cs, report.cs: Report unavailable gmcs features used by
6315         mcs.
6316         
6317         * cs-parser.jay: Disabled nullable check.
6318         
6319         * generic-mcs: Copied more generic stuff.
6320                 
6321 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6322
6323         * gcs-parser.jay: Merged to cs-parser.jay.
6324         
6325         * generic.cs, typemanager.cs, cs-tokenizer.cs, linq.cs, Makefile
6326         * *.csproj, *.sources: Updated to use only jay parser file.
6327
6328 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6329
6330         * gcs-parser.jay: Added nullable and default expression feature checks.
6331         
6332 2007-11-16  Marek Safar  <marek.safar@gmail.com>
6333
6334         * gcs-parser.jay, cs-parser.jay, class.cs: Unified parameters parsing, 
6335         it fixes many TODOs and hidden bugs.
6336         
6337         * expression: Removed duplicate error check.
6338
6339 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6340
6341         * gcs-parser.jay, statement.cs, decl.cs, ecore.cs: Try to resolve an
6342         implicitly type local variable only when it is used in a declaration.
6343
6344 2007-11-15  Marek Safar  <marek.safar@gmail.com>
6345
6346         * attribute.cs: Use CS0612 for empty strings.
6347
6348 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6349
6350         * lambda.cs, statement.cs: Contextual return may act as a statement.
6351
6352 2007-11-14  Marek Safar  <marek.safar@gmail.com>
6353
6354         A fix for a regression cause by #324222
6355         * class.cs: Don't report unused even when it implements an interface.
6356         
6357 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6358
6359         A fix for bug #341205
6360         * ecore.cs, expression.cs: Method group expression cannot do static
6361         method access with an instance reference check before overloading takes
6362         a place.
6363         
6364 2007-11-13  Marek Safar  <marek.safar@gmail.com>
6365
6366         A fix for bug #325359
6367         * class.cs: Use predictable name for automatically generated property.
6368         
6369 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6370
6371         A fix for bug #324996
6372         * expression.cs (Is): Handle case where D is nullable and T is not
6373         correctly.
6374         
6375         * generics.cs (Nullable.HasValue): Nullable HasValue expression.
6376         
6377 2007-11-12  Marek Safar  <marek.safar@gmail.com>
6378
6379         * generic.cs, literal.cs, ecore.cs, class.cs, delegate.cs, const.cs,
6380         anonymous.cs, expression.cs, attribute.cs, codegen.cs, statement.cs:
6381         Flush small error reporting changes.
6382         
6383 2007-11-09  Marek Safar  <marek.safar@gmail.com>
6384
6385         A fix for bug #324996
6386         * expression.cs: Rewrote Is expression implementation to work with
6387         generics, nullable types, anonymous method. A const result expression 
6388         uses existing infrastructure instead of custom not fully-featured one.
6389         
6390 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6391
6392         A fix for bug #340202
6393         * class.cs: Consider generics for volatile field.
6394
6395 2007-11-08  Marek Safar  <marek.safar@gmail.com>
6396
6397         A fix for bug #335594
6398         * expression.cs: Use conversion rules when handling string addition.
6399         
6400 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6401
6402         A fix for bug #336651
6403         * expression.cs: Fixed a crash when probing is on.
6404         
6405 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6406
6407         A fix for bug #324242
6408         * covert.cs: Added a conversion from any nullable-type with an 
6409         underlying enum-type to the type System.Enum.
6410         
6411 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6412
6413         A fix for bug #324222
6414         * class.cs: Report all non-used event fields.
6415         
6416 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6417
6418         A fix for bug #325161
6419         * cs-parser.jay, gcs-parser.jay, decl.cs: Implemented namespace alias
6420         qualifier for generic types.
6421         
6422 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6423
6424         A fix for bug #322971
6425         * expression.cs, ecore.cs: Added intermediate result value check for
6426         indexers. 
6427         
6428 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6429
6430         A fix for bug #324754
6431         * cs-parser.jay, gcs-parser.jay, class.cs: Try to create an interator
6432         when it was requested.
6433
6434 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6435
6436         A fix for bug #325101
6437         * expression.cs: Do type not value comparison for `is' expression.
6438
6439 2007-11-07  Marek Safar  <marek.safar@gmail.com>
6440
6441         A fix for bug #320236
6442         * convert.cs: Don't apply user conversion on underlying target type.
6443
6444 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6445
6446         * expression.cs: Don't use unresolved expression for error reporting.
6447  
6448 2007-11-06  Marek Safar  <marek.safar@gmail.com>
6449
6450         A fix for bugs #337712, #324490
6451         * ecore.cs (MethodGroupExpr): Refactored to handle delegate method
6452         overloading resolution too.
6453         
6454         * delegate.cs: Uses MethodGroupExpr for overloading resolution. It makes
6455         the process consistent and more robust.
6456         
6457         * expression.cs, linq.cs, report.cs: Update.
6458
6459 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6460
6461         A fix for bug #332909
6462         * attribute.cs: Resolve attributes in correct context using error
6463         handling procedure.
6464         
6465         * rootcontext.cs: Define Obsolete attribute members as core members.
6466         
6467 2007-11-02  Marek Safar  <marek.safar@gmail.com>
6468
6469         * statement.cs: Removed unused methods.
6470         
6471 2007-10-31  Wade Berrier  <wberrier@novell.com>
6472
6473         * Makefile:  reenable copy of gmcs.exe.config, but include it in EXTRA
6474         DIST (it doesn't get included because PROGRAM isn't defined to be gmcs
6475         during 'make dist')
6476
6477 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6478
6479         A fix for bug #338102
6480         * decl.cs (CheckExistingMembersOverloads): Workaround issue with generic
6481         methods registered as non-generics.
6482         
6483 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6484
6485         A fix for bugs #337712, #324490
6486         * delegate.cs: Delegate covariance and contravariance is not allowed for
6487         value types.
6488         
6489 2007-10-31  Marek Safar  <marek.safar@gmail.com>
6490
6491         A fix for bug #337719 
6492         * cs-tokenizer.cs: Restore identifier buffer when parsing contextual
6493         `from' keyword.
6494         
6495 2007-10-30  Marek Safar  <marek.safar@gmail.com>
6496  
6497         * Makefile (net_2_0_bootstrap/mcs.exe.config): Reverted copy gmcs.exe.config.
6498
6499 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6500  
6501         * cs-tokenizer.cs, gcs-parser.jay, driver.cs: Fixed parsing of nested
6502         query expressions.
6503
6504 2007-10-29  Raja R Harinath  <rharinath@novell.com>
6505
6506         * Makefile (net_2_0_bootstrap/mcs.exe.config): Copy gmcs.exe.config.
6507
6508 2007-10-29  Marek Safar  <marek.safar@gmail.com>
6509  
6510         A fix for bug #334652
6511         * ecore.cs (MethodGroupExpr.OverloadResolve): Do also lookup for
6512         extension methods when we have not found the best candidate in normal
6513         container.
6514
6515 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6516
6517         * AssemblyInfo.cs: Keep up-to-date.
6518
6519 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6520
6521         * Makefile: Fixed generics compiler name.
6522         
6523 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6524
6525         * lambda.test: removed, lambda parsing is done differently.
6526         
6527         * gen-il.cs, gen-treedump.cs, old-code.cs : Obsolete.
6528
6529 2007-10-27  Gert Driesen  <drieseng@users.sourceforge.net>
6530
6531         * Makefile: Removed dependency on gmcs.exe.config. Fixes build.
6532
6533 2007-10-27  Marek Safar  <marek.safar@gmail.com>
6534
6535         * Makefile, *.sources : All C# compilers are in mcs folder.
6536         
6537         * *.cs: Use existing 2_1 define for smcs.
6538
6539 2007-10-26  Marek Safar  <marek.safar@gmail.com>
6540
6541         A fix for bug #335847
6542         * assign.cs, expression.cs: Couple of changes to avoid creating a
6543         temporary variable for each object initializer assignment statement. It
6544         simplifies struct initialization too, otherwise two temporary variables
6545         would be required.
6546         Implemented optimization of redundant default element initializers.
6547         
6548 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6549
6550         A fix for bug #336766
6551         * expression.cs (Class.CheckBase): Use generic name when method is
6552         generic.
6553         
6554 2007-10-25  Marek Safar  <marek.safar@gmail.com>
6555
6556         A fix for bug #334737
6557         * expression.cs (IndexerAccess.EmitAssign): Emit local temporary
6558         variable and not variable argument for prepared copies.
6559
6560 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6561
6562         A fix for bug #325110
6563         * class.cs, expression.cs, attribute.cs: Use open generic method when
6564         checking conditional attribute.
6565         
6566 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6567
6568         * report.cs, cs-tokenizer.cs, class.cs, cs-parser.jay, anonymous.cs, 
6569         expression.cs, statement.cs: Renamed method FeatureIsNotISO to
6570         FeatureIsNotAvailable.
6571
6572 2007-10-24  Marek Safar  <marek.safar@gmail.com>
6573
6574         ** C# 3.0 Partial methods
6575         
6576         * cs-tokenizer.cs, support.cs, class.cs, decl.cs: Implemented partial
6577         methods support. Because of member cache issue with generics only
6578         non-generics partial methods are fully supported.
6579         
6580 2007-10-23  Marek Safar  <marek.safar@gmail.com>
6581         
6582         * class.cs, decl.cs: Rewrote member overloads check to cope with 
6583         generics and to use member cache for member checking. It also improves
6584         performance and fixes remaining overloads issues.
6585         
6586 2007-10-20  Marek Safar  <marek.safar@gmail.com>
6587         
6588         * class.cs, const.cs, decl.cs, delegate.cs, enum.cs, generic.cs,
6589         roottypes.cs, typemanager.cs:
6590                 
6591         A member cache creation logic changed to add members immediately and
6592         not rely on fallback. The member cache is now only prefered way
6593         how to access and find type declaration members. It saves 5 MB of memory
6594         during MWF compilation and makes code ready for more optimizations and
6595         clean-ups, it's also a pre-requirement for partial methods.
6596         
6597 2007-10-18  Raja R Harinath  <harinath@gmail.com>
6598
6599         * ecore.cs (Expression.Error_ValueCannotBeConverted): Add special
6600         handling for generic parameters.
6601
6602 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6603         
6604         * class.cs (FixedField): Removed redundant volatile check.
6605         
6606 2007-10-15  Marek Safar  <marek.safar@gmail.com>
6607         
6608         * class.cs, decl.cs: Fixed overload members verification to do only one
6609         check per possible collision.
6610         
6611 2007-10-13  Marek Safar  <marek.safar@gmail.com>
6612         
6613         A fix for bug #325478
6614         * anonymous.cs (AnonymousContainer.Compatible): Merge are flags together
6615         and create only one disposable flags container.
6616         
6617 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6618         
6619         A fix for bug #332442 by Alexandre Gomes <alexmipego@gmail.com>
6620         * statement.cs (Fixed): Fixed variables cloning.
6621         
6622 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6623         
6624         A fix for bug #333342
6625         * class.cs (EventField): Don't mark value type event as synchronized. 
6626         
6627 2007-10-12  Marek Safar  <marek.safar@gmail.com>
6628         
6629         * ecore.cs, anonymous.cs (MethodGroupExpr): Use score from type
6630         inference to identify best candidate method correctly.
6631         (ProperyExpr): A range variable is read only and cannot be modified.
6632         
6633 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6634         
6635         * ecore.cs, delegate.cs (MethodGroupExpr): Refactored best candidate
6636         logic to identify best candidate method correctly.
6637         
6638 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6639         
6640         * location.cs (Equals, GetHashCode): Removed.
6641         
6642 2007-10-11  Marek Safar  <marek.safar@gmail.com>
6643         
6644         * report.cs: Implemented message recorder. It is used mainly for lambda
6645         expressions to capture otherwise swallowed error messages.
6646         
6647         * anonymous.cs, lambda.cs.cs: Do full parameters check.
6648
6649         * ecore.cs (ExtensionMethodGroup): Report binding failure at the botton
6650         and not at the top.
6651         (MethodGroupExpr.DoResolve): Use message recorder for error handling.
6652                 
6653         * expression.cs (MemberAccess): Always report lookup failure.
6654         
6655         * location.cs: Implemented Equals, GetHashCode.
6656         
6657         * statement.cs (Return.DoResolve): Fixed hardcoded error argument.
6658         
6659 2007-10-10  Jb Evain  <jbevain@novell.com>
6660
6661         * codegen.cs: re-enable assembly version check.
6662
6663 2007-10-09  Marek Safar  <marek.safar@gmail.com>
6664         
6665         * report.cs, anonymous.cs, driver.cs, expression.cs: Added few ISO-2
6666         checks.
6667         
6668         * namespace.cs (UsingAlias): Do correct version check.
6669         
6670 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6671         
6672         * expresison.cs, ecore.cs: Issue extension method error message when
6673         appropriate.
6674         
6675         * rootcontext.cs: Added ISO_2 compiler mode option.
6676
6677 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6678         
6679         * expresison.cs (UnaryMutator.ResolveOperator): Print more useful error
6680          message.
6681         
6682 2007-10-08  Marek Safar  <marek.safar@gmail.com>
6683         
6684         * attribute.cs (GetString, GetBoolean): Work with both literal and
6685         constant.
6686         
6687         * ecore.cs, expresison.cs, delegate.cs (Invocation, MethodGroupExpr):
6688         Moved method overload specific methods to MethodGroupExpr.
6689         
6690         (IndexerAccess): Re-wrote resolving mechanism, fixed many issues and
6691         it should be less memory consuming.
6692         
6693 Mon Oct 8 09:29:15 CEST 2007 Paolo Molaro <lupus@ximian.com>
6694
6695         * codegen.cs: remove the assembly version check until the buildbot is
6696         fixed.
6697
6698 2007-10-07  Jb Evain  <jbevain@novell.com>
6699
6700         * attribute.cs (Attribute.GetString): if the value
6701         expression is a StringConstant, return its string value.
6702
6703 2007-10-07  Jb Evain  <jbevain@novell.com>
6704
6705         * typemanager.cs: add `assembly_version_attribute_type`.
6706         * codegen.cs: on attribute emission, check that the
6707         AssemblyVersionAttribute doesn't overflow.
6708
6709 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6710         
6711         A fix for bug #324677
6712         * anonymous.cs, decl.cs: Yes another anonymous container hack. Overwrite
6713         parent container of a scope container with currently resolved one. 
6714         
6715 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6716         
6717         A fix for bug #325534
6718         * class.cs (Invocation.DoResolve): Check invocation of object finalizer
6719         only.
6720         
6721 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6722         
6723         A fix for bug #327504
6724         * class.cs (Operator.Define): Refactored implicit and explicit user
6725         operator conversion rules.
6726         
6727 2007-10-05  Marek Safar  <marek.safar@gmail.com>
6728         
6729         A fix for bug #327520
6730         * ecore.cs (ExtensionMethodGroupExpr): Emit resolved extension argument.
6731         
6732 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6733         
6734         A fix for bug #328022
6735         * class.cs (MethodData.Define): Use correct method to check whether
6736         a method implementents an accessor.
6737         
6738 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6739         
6740         A fix for bug #330069
6741         * statement.cs (Fixed.Resolve): Read the first array element only when
6742         an array is instantiated. 
6743         
6744 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6745         
6746         * expression.cs, assign.cs, generics.cs: Print correct operator when
6747         compound assignment is used.
6748         
6749 2007-10-04  Marek Safar  <marek.safar@gmail.com>
6750         
6751         A fix for bug #325841
6752         * expression.cs (ArrayAccess): Use full argument cloning only for
6753         string compound concatenation.
6754         
6755 2007-10-03  Marek Safar  <marek.safar@gmail.com>
6756         
6757         A fix for bug #328774
6758         * ecore.cs (FieldExpr.EmitAssign): Fixed string concatenation compound
6759         assignment.
6760         (PropertyExpr.EmitAssign): Fixed string concatenation compound
6761         assignment.
6762
6763 2007-10-03  Raja R Harinath  <rharinath@novell.com>
6764
6765         Fix #328490
6766         * ecore.cs (SimpleName.DoSimpleNameResolve): Handle Property and
6767         Event accessibility checks here.  Remove some bogus code that
6768         accidently made GenericMethods work.
6769         (PropertyExpr.IsAccessibleFrom, EventExpr.IsAccessibleFrom): New.
6770
6771 2007-09-25  Marek Safar  <marek.safar@gmail.com>
6772         
6773         * expression.cs (ArrayCreation): Fixed cloning of an implicit types.
6774         
6775         * statement.cs (Block): Refactored AddVariable to allow error handling
6776         customization.
6777         
6778         * generic.cs: New stub.
6779         
6780 2007-09-23  Marek Safar  <marek.safar@gmail.com>
6781         
6782         * anonymous.cs, codegen.cs: Changed InferReturnType to be EmitContext
6783         flag.
6784         
6785 2007-09-17  Marek Safar  <marek.safar@gmail.com>
6786
6787         * class.cs: Use partial container to record whether any partial part
6788         contains static field initializer and therefore default contructor has
6789         to be defined.
6790         
6791 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6792
6793         * class.cs (TypeContainer.AddPartial): Fixed an issue reported on
6794         mono-list when only one of two partial parts has defined accessibility
6795         modifier.
6796         
6797 2007-09-14  Marek Safar  <marek.safar@gmail.com>
6798
6799         A fix for bug #82845
6800         
6801         * class.cs (TypeContainer): Set correct resolve context for all field
6802         initializers.
6803         
6804 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6805
6806         * assign.cs: Fixed a crash when field is resolved twice with an error.
6807         
6808         * codegen.cs: Changed InFieldInitializer to be flag.
6809         
6810         * anonymous.cs, ecore.cs, expression.cs: Update after
6811         IsInFieldInitializer rename.
6812         
6813         * const.cs: Removed unused parameter.
6814         
6815         * class.cs: Changed the way how we resolve and emit field initializers.
6816         The field initilizers have to have access to contructor block to emit
6817         compiler generated code.
6818
6819 2007-09-13  Marek Safar  <marek.safar@gmail.com>
6820
6821         * expression.cs (MemberAccess.DoResolve): DeclSpace is broken by
6822         generics use TypeContainer instead.
6823         
6824 2007-09-12  Marek Safar  <marek.safar@gmail.com>
6825         
6826         * generic.cs (TypeInferenceContext.InflateGenericArgument): Stub.
6827
6828         * lambda.cs (ResolveParameters): Use more powerful
6829         InflateGenericArgument.
6830         
6831         * parameters.cs: Better exception message.
6832                 
6833 2007-09-10  Marek Safar  <marek.safar@gmail.com>
6834
6835         * anonymous.cs (AnonymousMethodExpression.CompatibleChecks): Report
6836         correct expression block type. 
6837         
6838         * ecore.cs (Expression.Error_MemberLookupFailed): Made virtual.
6839         
6840         * expression.cs (Invocation): Extracted method group resolve to
6841         DoResolveOverload.
6842         
6843 2007-09-07  Marek Safar  <marek.safar@gmail.com>
6844
6845         * ecore.cs (Expression.MemberLookupFinal): Removed unused loc parameter.
6846         (MethodGroupExpr.ResolveGeneric): Use existing method group instance.
6847         
6848         * expression.cs (MemberAccess.DoResolve): Uses generic resolver for
6849         generic extension methods.
6850
6851 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6852
6853         A fix for bug #82676 (Do I get it right now?)
6854         * convert.cs (Binary.ResolveOperator): An interface is converted to the
6855         object before a standard conversion is applied.
6856         
6857 2007-09-06  Marek Safar  <marek.safar@gmail.com>
6858
6859         * convert.cs (ImplicitReferenceConversionCore): Reverted wrong fix of
6860         #82676.
6861         
6862 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6863
6864         A fix for bug #82676
6865         * convert.cs (ImplicitReferenceConversionCore): Check both sides for
6866         non-generic interface types.
6867         
6868 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6869
6870         A fix for bug #82690
6871         * ecore.cs (PropertyExpr.EmitAssign): Leave a copy does just that.
6872         
6873 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6874
6875         A fix for bug #82571
6876         * anonymous.cs (AnonymousMethod.DoCreateMethodHost): Use internal 
6877         modifier for container based methods.
6878         
6879 2007-09-05  Marek Safar  <marek.safar@gmail.com>
6880
6881         A fix for bug #82676
6882         * convert.cs (ImplicitReferenceConversionCore): From any class-type S to
6883         any interface-type T means to any of interface type T.
6884
6885 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6886
6887         * namespace.cs: We have 2 versions of System.Core assembly.
6888
6889 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6890
6891         A fix for bug #82652
6892         * class.cs (Class.GetClassBases): Compare types and not expressions.
6893
6894 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6895
6896         A fix for bug #82620
6897         * expression.cs (Invocation.EmitArguments): Duplicate params arguments
6898         actually never worked before.
6899         (IndexerAccess): Emit prepared arguments before they are modified.
6900         
6901 2007-09-04  Marek Safar  <marek.safar@gmail.com>
6902
6903         A fix for bug #82563
6904         * assign.cs: Revert wrong fix.
6905         
6906         * expression.cs (VariableReference.EmitAssign): Handle ref reference
6907         correctly.
6908         (ArrayAccess): Changed the way we emit compound (prepared) assignments.
6909         Instead of ldelema/stdind we have to use temporary variables to handle
6910         cases like String.Concat (params string[]).
6911         
6912 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6913
6914         * class.cs: EmitAttributes to Emit rename.
6915         
6916         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Parent can be
6917         null.
6918         (MemberCore.HasClsCompliantAttribute): Don't depend on 
6919         GetClsCompliantAttributeValue execution.
6920         
6921 2007-08-31  Marek Safar  <marek.safar@gmail.com>
6922
6923         * anonymous.cs: Use shorter type prefix.
6924         
6925         * ecore.cs (SimpleName.DoSimpleNameResolve): Use transparent identifiers
6926         when exist.
6927         
6928         * expression.cs (LocalVariableReference.DoResolveBase): Don't capture
6929         variables when probing is on.
6930         
6931         * statement.cs (LocaLInfo.Clone): Clone correctly resolved and 
6932         unresolved variables.
6933         (TopLevelBlock.GetTransparentIdentifier): Default implementation doesn't
6934         handle transparent identifiers.
6935         
6936 2007-08-26  Marek Safar  <marek.safar@gmail.com>
6937
6938         * attribute.cs (IsClsCompliant): Add nullable types test.
6939         
6940 2007-08-24  Atsushi Enomoto  <atsushi@ximian.com>
6941
6942         * doc.cs : catch other types of exception than XmlException to
6943           report CS1570. Fixed bug #82565.
6944
6945 2007-08-23  Marek Safar  <marek.safar@gmail.com>
6946
6947         * anonymous.cs (AnonymousMethodExpressin.ExplicitTypeInference): 
6948         The number of delegate parameters has to match.
6949         (AnonymousMethodExpressin.VerifyParameterCompatibility): Handles generic
6950         arrays.
6951
6952 2007-08-21  Marek Safar  <marek.safar@gmail.com>
6953
6954         * anonymous.cs (AnonymousMethod): Generate private anonymous method
6955         to fix problem with private arguments.
6956
6957 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6958
6959         * anonymous.cs (AnonymousTypeClass): An anonymous type can be empty.
6960         
6961         * decl.cs (MemberName): Ignore generic type with no generic arguments. 
6962         
6963         * expression.cs (AnonymousTypeDeclaration): An anonymous type can be
6964         empty. Add cloning suport.
6965         
6966         * roottypes.cs (GetAnonymousType): Fixed argument comparison logic.
6967
6968 2007-08-20  Marek Safar  <marek.safar@gmail.com>
6969
6970         * convert.cs, ecore.cs, expression.cs, literal.cs: Use factory method 
6971         to create EmptyCast. It handles EmptyConstantCast specialization for
6972         constants.
6973         
6974 2007-08-18  Marek Safar  <marek.safar@gmail.com>
6975
6976         * expression.cs (Binary.is_unsigned): Handle unsafe types too.
6977         (EmitArrayArgument): One routine for array arguments.
6978         (ArrayCreation.MakeByteBlob): Fixed an array alignment. 
6979         
6980 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6981
6982         * cs-tokenizer.cs (GetKeyword): Handle from keyword in a different way.
6983
6984 2007-08-17  Marek Safar  <marek.safar@gmail.com>
6985
6986         * anonymous.cs: MemberLookupFinal update.
6987
6988         * class.cs (ConstructorInitializer): Is expression based.
6989         
6990         * delegate.cs: MethodGroupExpr update.
6991         
6992         * ecore.cs  (Error_MemberLookupFailed): Improved to report better error
6993         messages.
6994         (Error_MemberLookupFailed): Customizable error override.
6995         (MethodGroupExpr): Keep queried type for later usage.
6996         (MethodGroupExpr.OverloadResolve): Catch errors related to overload
6997         resolve.
6998         
6999         * expression.cs: Error_MemberLookupFailed refactoring.
7000         (New.DoResolve): Resolve as much as possible.
7001         (ElementInitializer.Error_MemberLookupFailed): Object initializer
7002         customization for invalid member types.
7003
7004         * statement.cs: MethodGroupExpr update.
7005         
7006 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7007
7008         * modifier.cs (Check): Check all modifiers and not only accessibility
7009         ones.
7010
7011 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7012
7013         * ecore.cs (Expression.Error_ValueCannotBeConverted): Report always a
7014         type and not an expression.
7015
7016 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7017
7018         * statement.cs (Catch.Clone): Type and variable can be null.
7019
7020 2007-08-16  Marek Safar  <marek.safar@gmail.com>
7021
7022         A fix for bug #81979
7023         * assign.cs (Assign.Emit): Prepare arguments for string concatenation.
7024         I am really not sure whether this is the best fix.
7025         
7026         * expression.cs (VariableReference.EmitAssign): Do prepare_load test
7027         only once.
7028         
7029 2007-08-14  Marek Safar  <marek.safar@gmail.com>
7030
7031         ** C# 3.0 Object and collection initializers (major re-write)
7032         
7033         * assign.cs (DoResolve): Initializers are not assign related.
7034         
7035         * codegen.cs (EmitContext.CurrentInitializerVariable): Holds a varible
7036         used during collection or object initialization.
7037         
7038         * expression.cs (Error_InvalidArguments): Add initializers specific
7039         messages. More will come later because it requires some general
7040         refactoring.
7041         (New.DoResolve): Better error handling for unsafe types.
7042         (EmptyExpressionStatement): New class.
7043         (ElementInitializer): An object initializer expression.
7044         (CollectionElementInitializer): A collection initializer expression.
7045         (CollectionOrObjectInitializers): A block of object or collection
7046         initializers.
7047         (NewInitialize): New expression with element/object initializers.
7048         
7049         * statement.cs: Reverted object/collection initializer hacks.
7050         
7051         * typemanager.cs (CSharpName): Filter __arglist type.
7052         
7053 2007-08-09  Marek Safar  <marek.safar@gmail.com>
7054
7055         ** C# 3.0 Anonymous Types (update to the latest standard)
7056         
7057         * expression.cs (Binary.ResolveOperator): Threat all null based types
7058         same.
7059         (AnonymousTypeDeclaration): Renamed from AnonymousType and simplified.
7060         (AnonymousTypeParameter): Updated.
7061         
7062         * anonymous.cs (CompilerGeneratedClass): Add custom name overload.
7063         (AnonymousTypeClass): New anonymous type container.
7064         
7065         * class.cs (AddField): Return operation result.
7066         
7067         * generic.cs: Another empty TypeArguments overload.
7068         
7069         * roottypes.cs (AddAnonymousType, GetAnonymousType): Anonymous types
7070         are stored at top of normal hierarchy.
7071         
7072         * typemanager.cs (CSharpName): Filter anonymous types.
7073         
7074 2007-08-09  Marek Safar  <marek.safar@gmail.com>
7075
7076         * expression.cs (StringConcat.Append): Handle 3 and more concatenation
7077         as single Concat call. How could we miss that :-(
7078         
7079 2007-08-08  Marek Safar  <marek.safar@gmail.com>
7080
7081         * expression.cs (ArrayCreation.CloneTo): Allocate exact size.
7082         
7083 2007-08-07  Miguel de Icaza  <miguel@novell.com>
7084
7085         * expression.cs: Fix the previous commit, the creation of the
7086         arguments array list needs also to be conditional on the arguments
7087         not being null.
7088
7089         * class.cs: Add a little bit of help to help narrow down problems.
7090
7091         * expression.cs (ArrayCreation.CloneTo): Argument can be null, do
7092         not try to copy in that case. 
7093
7094         * driver.cs: When building SMCS, include a new different set of
7095         default assemblies here.   Do this here so we can control whether
7096         to include the default assemblies with /noconfig.
7097
7098 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7099
7100         A fix for bug #81979
7101         * expression.cs (TypeOf.GetAttributableValue): Check for type arguments
7102         only.
7103
7104 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7105
7106         A fix for bug #82300
7107
7108         * anonymous.cs (AnonymousContainer.Define): Don't define anything when
7109         we are in probing scope.
7110
7111 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7112
7113         A fix for bug #82301
7114
7115         * statement.cs (Catch.CloneTo): Clone blocks in the right order.
7116         (Statement.CloneTo): Clone and not map children blocks.
7117
7118 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7119
7120         A fix for bug #82299
7121
7122         * expression.cs (LocalVariableReference.CloneTo): Remap local info
7123         variable too.
7124         
7125         * statement.cs (Statement.CloneTo): Clone variables before statements
7126         to allow remaping of local variables.
7127
7128 2007-08-03  Marek Safar  <marek.safar@gmail.com>
7129
7130         A fix for bug #82296
7131
7132         * anonymous.cs,
7133         * report.cs: Log crash details for future clone problems.
7134         
7135         * statement.cs (Return.Clone): Don't clone non-existent expression.
7136
7137 2007-08-03  Raja R Harinath  <harinath@gmail.com>
7138
7139         * class.cs (TypeContainer.AddBasesForPart): Make virtual.
7140         (Class.AddBasesForPart): Move CS0537 check here from ...
7141         * cs-parser.jay (class_declaration): ... here.  Move calling of
7142         'AddBasesForPart' to ...
7143         (class_bases): ... here.
7144         (struct_declaration, interface_declaration): Update to changes.
7145
7146 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7147
7148         A fix for bug #81923
7149
7150         * statement.cs (Using.ResolveLocalVariableDecls): Only non-user implicit
7151         conversion is allowed.
7152
7153 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7154
7155         A fix for bug #81564
7156
7157         * ecore.cs (EventExpr): Add IsBase handling.
7158
7159         * expression.cs (BaseAccess.CommonResolve): Events can use base accessor
7160         too.    
7161         
7162 2007-08-02  Raja R Harinath  <harinath@gmail.com>
7163
7164         Reduce some differences between cs-parser.jay in mcs/ and gmcs/.
7165         * cs-parser.jay: Some whitespace cleanups.
7166         (current_delegate): New.
7167         (type_name): New.
7168         (struct_declaration): Make similar to gmcs/cs-parser.jay -- add
7169         a dummy code block, and use 'type_name' instead of 'member_name'.
7170         (interface_declaration, class_declaration): Likewise.
7171         (delegate_declaration): Likewise.  Rearrange slightly and use
7172         'current_delegate'.
7173         * cs-tokenizer.cs (handle_where): Rename from handle_constraints.
7174         (GetKeyword): Update to change.  Use '!foo' instead of 'foo == false'.
7175
7176 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7177
7178         A fix for bug #82039
7179
7180         * ecore.cs (TypeLookup.GetSignatureForError): Use name when type is not
7181         available.
7182
7183         * typemanager.cs (CSharpName): Split to string overload.
7184
7185 2007-08-02  Marek Safar  <marek.safar@gmail.com>
7186
7187         * expression.cs,
7188         * report.cs: Updated warning CS0472.
7189
7190 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7191
7192         A fix for bug #82181
7193         * cs-parser.jay,
7194         * cs-tokenizer.cs: Ignore partial keyword inside block expression.
7195
7196 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7197
7198         A fix for bug #82277
7199         * statememnt.cs (Block.Clone): Don't clone explicit blocks twice.
7200
7201 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7202
7203         ** C# 3.0 Type Inference (major bits are working)
7204         
7205         * anonymous.cs (AnonymousMethodExpression): Removed refactored fields.
7206         (.ImplicitStandardConversionExists): Uses compatible.
7207         (.ExplicitTypeInference): Infers type arguments based on explicit arguments
7208         (.InferReturnType): New method.
7209         (.Compatible): Refactored.
7210         (.ResolveParameters): Uses factory to create resolved parameters.
7211         (.CompatibleMethod): Add probing mode support.
7212         (AnonymousContainer): Removed unused fields. Split Define and Resolve to
7213         clearly distinguish between 2 different operations.
7214         (LambdaMethod): Moved to lambda.cs.
7215         (AnonymousMethod): Removed unused fields and methods.
7216         (AnonymousDelegate): Simplified.
7217         
7218         * codegen.cs (ResolveTopBlock): Updated renamed Resolve to Define.
7219         
7220         * convert. cs (ImplicitConversionStandard): Compatible works differently.
7221         
7222         * delegate.cs (Delegate): New mehods to reduce code duplication.
7223         (.GetConstructor): New method.
7224         (.GetInvokeMethod): New method.
7225         (DelegateCreation): Updated.
7226         
7227         * ecore.cs (ResolveOverloadExtensions): Don't crash when extension method
7228         does not exist.
7229         (OverloadResolve): Made probing little bit faster.
7230         
7231         * expression.cs (ParameterReference.DoResolveLValue): Reference can be null
7232         when probing is on.
7233         
7234         * generic.cs (TypeInferenceContext): Dummy implementation.
7235         
7236         * iterators.cs: Updated after Resolve/Define rename.
7237         
7238         * lambda.cs (LambdaExpression)
7239         (.ResolveParameters): Handles both type of arguments and type inference too.
7240         
7241         * parameter.cs (ImplicitLambdaParameter.Resolve): Sanity check.
7242         (InflateTypes): Updated.
7243         
7244         * support.cs (InflateTypes): Changed signature and updated.
7245         
7246         * typemanager.cs (LookupMemberCache): Better dynamic type check.
7247         (MemberLookup_FindMembers): More MS tricks.
7248         (GetParameterData): Ditto.
7249         (GetDelegateParameters): Uses quick path for dynamic types.
7250         
7251 2007-08-01  Marek Safar  <marek.safar@gmail.com>
7252
7253         * class.cs (MethodData.Define): EmitContext is required for generic stuff
7254         only.
7255
7256 2007-07-31  Marek Safar  <marek.safar@gmail.com>
7257
7258         * statement.cs (ProcessParameters): Don't crash when parameters have wrong
7259         syntax.
7260         
7261 2007-07-26  Jb Evain  <jbevain@novell.com>
7262
7263         * typemanager.cs (TypeManager.GetConstructor): Add a method overload
7264         which takes a boolean 'report_errors', similar to the GetMethod.
7265         (InitCodeHelpers): StructLayoutAttribute.ctor(int16) is not visible
7266         in .net 2.1, do not report errors here.
7267
7268         * typemanager.cs (TypeManager.InitCoreTypes): System.ArgIterator,
7269         System.Runtime.CompilerServices.RequiredAttributeAttribute and
7270         System.Runtime.CompilerServices.TypeForwardedToAttribute are internal
7271         in .net 2.1.
7272
7273         * typemanager.cs (TypeManager.InitCoreTypes): Move the resolution
7274         of the type InternalsVisibleToAttribute before the first call
7275         to CoreLookupType which is allowed to fail (third boolean parameter
7276         to true). Because, during the resolution for a type that is not
7277         immediately found, we try to check if the type is not defined in
7278         a friend assembly, and to do so, we need the
7279         InternalVisibleToAttribute.
7280
7281 2007-07-23  Miguel de Icaza  <miguel@novell.com>
7282
7283         * expression.cs (Binary): Add support for the brain-dead CSC 2.x
7284         feature that allows structs to be compared against null and inline
7285         the result as true or false.
7286
7287         Notice that the same code is not permitted inside a generic block
7288         of code that would do:
7289
7290         class Foo<T> where T : struct {
7291             bool Eval (T x)
7292             {
7293                  return x == null;
7294             }
7295         }
7296
7297         It is only allowed if the type of T is not bound (no where
7298         clause).   In my opinion, this CSC 2 behavior is broken but people
7299         seem to be using it (IronRuby does, a few bug reports on bugzilla
7300         have it and some people have complained about it).
7301
7302         All of the users that depend on this behavior have code that is
7303         very likely broken. 
7304         
7305         * report.cs (Warning, Error): make these take object arguments,
7306         not strings, as that allows us to take advantage of Format.
7307
7308 2007-07-20  William Holmes  <billholmes54@gmail.com>
7309
7310         * decl.cs: Changed MemberName.CountTypeArguments to also check the 
7311           Left member variable for the Count.
7312         * doc.cs: Changed DocUtil.GetMethodDocCommentName to call 
7313           MemberName.CountTypeArguments to avoid a NRE. 
7314
7315         This code is contributed under the MIT X11 license
7316
7317 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7318
7319         * cs-tokenizer.cs: Improved lambda parsing and removed old code.
7320
7321 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7322
7323         * doc.cs : generic method arguments are written as ``x while generic
7324           type arguments are `x. Combined with the previous change, fixed bug
7325           #79706.
7326
7327 2007-07-18  Raja R Harinath  <rharinath@novell.com>
7328
7329         Fix #82120
7330         * expression.cs (Binary.ResolveOperator): When converting
7331         'a + (- b)' to 'a - b', ensure that the unary '-' is discarded.
7332
7333 2007-07-18  Atsushi Enomoto  <atsushi@ximian.com>
7334
7335         * doc.cs : when T: or whatever x: is specified, it does not really
7336           check the doc comment's syntax correctness. Fixed bug #82006.
7337
7338 2007-07-18  Marek Safar  <marek.safar@gmail.com>
7339
7340         * anonymous.cs (AnonymouseMethodExpression): Refactored to work with
7341         LambdaExpression better.
7342         
7343         * cs-tokenizer.cs: Changed a way how we detect lambda parameters.
7344         
7345         * driver.cs (LambdaTypeParseTest): Removed, tested method is gone.
7346         
7347         * ecore.cs (Expression.MemberLookupFailed): Don't show currect context
7348         as it can be generated.
7349         
7350         * expression.cs (Invocation.Error_InvalidArguments): Show correct
7351         modifiers.
7352         
7353         * lambda.cs (LambdaExpression): Refactored to share same code with
7354         AnonymousMethodExpression.
7355         
7356 2007-07-17  Marek Safar  <marek.safar@gmail.com>
7357
7358         * anonymous.cs (MakeName): Include host name for easier debugging.
7359         (LambdaMethod): New class for lambda spcecific stuff.
7360         
7361         * attribute.cs: Set EmitContext return type.
7362
7363         * class.cs: Set EmitContext return type.
7364         
7365         * codegen.cs (EmitContext): Return type cannot be null to stop messing
7366         with null/void meaning.
7367         
7368         * iterators.cs (ContainerType): Implemented.
7369         
7370         * rootcontext.cs: Set value of TypeManager.bool_type at early stage.
7371         
7372         * statement.cs (Return): Updated to lambda expressions.
7373         (Block.CloneTo): Parent can be null.
7374                 
7375 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7376
7377         A fix for bug #81917
7378         * attribute.cs (AttributeTester.GetFixedBuffer): More robust testing.
7379         
7380         * class.cs (FixedField): Check whether field is in unsafe scope.
7381
7382         * ecore.cs (FieldExpr.DoResolve): Create fixed buffer expression here.
7383         (FieldExpr.Emit): Fixed buffers cannot be volatile.
7384
7385         * expression.cs (ElementAccess.Resolve): Move fixed buffers resolve to
7386         FieldExpr.
7387         
7388         * statement.cs (Fixed.Resolve): Simplified fixed buffers.
7389                 
7390 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7391
7392         * cs-tokenizer.cs, class.cs, decl.cs, driver.cs, namespace.cs,
7393         rootcontext.cs, expression.cs, statement.cs: Updated to use WarningLevel
7394         from Report class.
7395
7396 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7397
7398         * ecore.cs (FieldExpr.AddressOf): Less confusing warning message.
7399         
7400 2007-07-13  Marek Safar  <marek.safar@gmail.com>
7401
7402         * anonymous.cs (AnonymousMethodExpression): Parameters are r/o.
7403         (AnonymousContainer.ResolveNoDefine): Another ec to aec flag conversion.
7404         
7405         * codegen.cs(EmitContext): Add ProbingMode flag.
7406         
7407         * delegate.cs (DelegateInvocation): Set few instance variables as r/o.
7408         
7409         * driver.cs: For now set both warning values.
7410         
7411         * ecore.cs (SimpleName): Name is readonly.
7412         (MethodGroup.OverloadResolve): One quick path for probing.
7413         
7414         * expression.cs (Unary): Set Oper r/o.
7415         (Binary): Set Oper r/o.
7416         (ParameterReference): Set few instance variables as r/o.
7417         (ParameterReference.DoResolveBase): Don't capture aruments when 
7418         the probing is on.
7419         (Invocation.CloneTo): Fixed typo, looks easy, yeah.
7420         (Arglist): arguments are private.
7421         (SizeOf): type is private and r/o.
7422         (MemberAccess): arguments are private.
7423
7424         * report.cs: Enhanced reporting on/off capabilities.
7425         
7426         * lambda.cs: Uses ec.IsInProbingMode.
7427         (ContextualReturn): Derives from return.
7428         
7429         * rootcontext.cs: For now set both warning values.
7430         
7431         * statement.cs (CloneContext.RemapBlockCopy): Remaps block to cloned
7432         copy if one exists.
7433         (Return.Resolve): Don't die immediately.
7434         (Block.Resolve): Speed-up probing.
7435         (Block.CloneTo): Clone only child blocks.
7436
7437 Fri Jul 13 11:19:28 CEST 2007 Paolo Molaro <lupus@ximian.com>
7438
7439         * iterators.cs: reverted Miguel's latest change (r81925) as it
7440         breaks the build in System.
7441
7442 2007-07-13  Miguel de Icaza  <miguel@novell.com>
7443
7444         * iterators.cs (Yield.CheckContext): Check for the iterator type
7445         also here as we can call into Yield even in codepaths that are not
7446         directly checked by
7447         (MethodOrOperator is the only path that was checked).
7448
7449         In addition to the standard check, use a more specific check for
7450         constructors to report a more verbose error. 
7451
7452 2007-07-12  Miguel de Icaza  <miguel@novell.com>
7453
7454         * ecore.cs (FieldExpr.AddressOf): Do not stop processing here,
7455         report the warning and continue 
7456
7457         * statement.cs (Using.EmitLocalVariableDecls): We were leaving
7458         values on the stack on the call to Emit.   Use EmitStatement if
7459         possible, or using Emit + Pop if not possible.   Fixes #82064
7460
7461 2007-07-12  Raja R Harinath  <rharinath@novell.com>
7462
7463         * expression.cs (Invocation.IsApplicable): Reorganize slightly to
7464         avoid try...finally in some cases.
7465
7466 2007-07-10  Marek Safar  <marek.safar@gmail.com>
7467
7468         * attribute.cs (Attribute.ResolveConstructor): Uses method group.
7469         
7470         * class.cs (ConstructorInitializer.Resolve): Use and keep method group
7471         instead of method. Re-use standard error handling.
7472         (ConstructorInitializer.Emit): Simplified.
7473         
7474         * delegate.cs: Updated after Invocation.EmitCall change.
7475         
7476         * ecore.cs (GetOperatorTrueOrFalse): Uses MethodGroupExpr only.
7477         (SimpleName.SimpleNameResolve): Set and reset in_transit flag correctly.
7478         (ExtensionMethodGroupExpr): Refactored to use same OverloadResolve
7479         method and don't permanently changing input arguments.
7480         (MethodGroupExpr): Introduced resolved best_candidate, when method group
7481         is resolved it has one of the candidates is the best one which is later
7482         used to emit. Removed a few unused method.
7483         (MethodGroupExpr.MakeUnionSet): Moved from Invocation, it belongs here.
7484
7485         * expression.cs (StaticCallExpr.MakeSimpleCall): Uses method group.
7486         (Binary.ResolveOperator): Ditto.
7487         (ConditionalLogicalOperator.DoResolve): Ditto.
7488         (Invocation): Uses method group.
7489         (Invocation.DoResolve): Simplified.
7490         (Invocation.EmitCall): Removed useless is_static.
7491         (Invocation.Emit): Delegate to method group.
7492         (Invocation.EmitStatement): Simplified.
7493         (New): Uses method group.
7494         (MemberAccess.DoResolve): Don't destroy original expression.
7495         
7496         * statement.cs (ForEach.Resolve): Use null for no method arguments.
7497         
7498 2007-07-04  Marek Safar  <marek.safar@gmail.com>
7499
7500         * ecore.cs (VarExpr.DoResolveLValue): More restriction checks.
7501         
7502         * anonymous.cs,
7503         * lambda.cs: Add custom error message type.
7504
7505 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7506
7507         * lambda.cs: Simplified little bit.
7508         
7509         * parameter.cs: Introduced ImplicitLambdaParameter.
7510         (Parameters.CreateFullyResolved): New factory instead of ctor.
7511         
7512         * anonymous.cs,
7513         * class.cs,
7514         * delegate.cs: Updated parameter creation.
7515         
7516 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7517
7518         *  ecore.cs (SimpleName.GetSignatureForError): Display correctly generic
7519         arguments.
7520         
7521         * generic.cs: Synchronized with gmcs.
7522         
7523 2007-07-03  Marek Safar  <marek.safar@gmail.com>
7524
7525         * class.cs (Indexer): Check return type as soon as possible.
7526         
7527         * cs-parser.jay: Initialize implicit_value_parameter_type for interface
7528         members too.
7529         
7530         * ecore.cs (VarExpr.DoResolveLValue): Set eclass value.
7531         
7532         * expression.cs (Invocation.Error_InvalidArguments): Show type only.
7533         
7534         * parameter.cs (Parameter): Use expression type when it is available.
7535         
7536         * support.cs (ReflectionParameters.ParameterDesc): Show an extension
7537         method modifier for the first parameter only.
7538
7539 2007-06-24  Marek Safar  <marek.safar@gmail.com>
7540
7541         A fix for bug #81938
7542         * typemanager.cs (ChangeType): Fixed couple of char conversions.
7543         
7544         * constant.cs: Tide up an exception message.
7545
7546 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7547
7548         * ecore.cs (SimpleName.DoSimpleNameResolve): Better error reporting when
7549         an uninitialized variable is used.
7550         
7551         * expression.cs (LocalVariableReference.DoResolve): Ditto.
7552
7553 2007-06-22  Marek Safar  <marek.safar@gmail.com>
7554
7555         * ecore.cs (SimpleName.TypeOrNamespaceNotFound): Allow to override type
7556         not found error handling.
7557
7558         * expression.cs (ArrayCreation): Removed redundant fields and little bit
7559         simplified.
7560         (ArrayCreation.ResolveArrayElement): To be ready to customization.
7561         (ArrayCreation.DoResolve): Simplified.
7562         (ImplicitlyTypedArrayCreation.DoResolve): Implicitly typed arrays have
7563         its own resolve process.
7564         (ImplicitlyTypedArrayCreation.ResolveArrayElement): Conversion magic.
7565
7566 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7567
7568         * namespace.cs (NamespaceEntry.Error_AmbiguousTypeReference): Print
7569         more error details.
7570         
7571 2007-06-20  Marek Safar  <marek.safar@gmail.com>
7572
7573         * cs-tokenizer.cs: Removed var related stuff.
7574         
7575         * ecore.cs (Expression.ResolveAsContextualType): Introduced new method.
7576         (VarExpr): Changed to derive from SimpleName. VarExpr now behaves as
7577         a type and a keyword at same time.
7578         
7579         * decl.cs (MembeName.GetTypeExpression): Create VarExpr when type name
7580         matches to "var".
7581         
7582         * expression.cs (ImplicitlyTypedArrayCreation): New empty class for
7583         implicitly typed arrays, more changes will follow.
7584         
7585         * statement.cs (LocalInfo.Resolve): Resolve type as contextual type.
7586         
7587 2007-06-19  Marek Safar  <marek.safar@gmail.com>
7588
7589         * ecore.cs (VarExpr): Removed Handled field.
7590         
7591         * statement.cs (Using.ResolveLocalVariableDecls): Refactored to use
7592         build-in assign functionality.
7593         (ForEach.Resolve): Removed all implicitly typed local variable code and
7594         simplified.
7595         (ArrayForeach.Resolve): Infer implicitly typed local variable here.
7596         (CollectionForeach.Resolve): Infer implicitly typed local variable here.
7597
7598 2007-06-18  Marek Safar  <marek.safar@gmail.com>
7599
7600         * assign.cs: Removed implicitly typed local variable check.
7601         
7602         * expression.cs (LocalVariableReference.DoResolve): Add check for self
7603         referencing implicitly typed local variable.
7604         (LocalVariableReference.DoResolveLValue): Infer implicitly typed local
7605         variable here.
7606         
7607         * statement.cs (Fixed): Removed unsupported implicitly typed local
7608         variable code.
7609
7610 2007-06-15  Marek Safar  <marek.safar@gmail.com>
7611
7612         * decl.cs (MemberName): Moved all Unbound stuff to parser.
7613
7614 2007-06-14  Marek Safar  <marek.safar@gmail.com>
7615
7616         A fix for bugs #81855 and #76274
7617         * attribute.cs (AttachTo): Always set owner for global attributes to
7618         prefined owner.
7619         
7620         * ecore.cs (Error_TypeDoesNotContainDefinition): A type location can be
7621         usefull too.
7622         
7623         * cs-parser.jay: Assembly and module attributes must precede all other
7624         elements except using clauses and extern alias declarations.
7625
7626 2007-06-13  Marek Safar  <marek.safar@gmail.com>
7627
7628         A fix for bug #81748
7629         * cs-tokenizer.cs,
7630         * expression.cs: More checks for non ISO-1 features.
7631
7632 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7633
7634         A fix for bug #81807
7635         * statement.cs(Switch.TableSwitchEmit): Define null label when it's not
7636         present inside switch statement and it is required by nullable check.
7637
7638 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7639
7640         A fix for bug #81840
7641         * ecore.cs (SimpleName.ResolveAsTypeStep): Look for non-generic type
7642         when type matching fails.
7643         
7644         * namespace.cs: Tiny error message change.
7645
7646 2007-06-12  Marek Safar  <marek.safar@gmail.com>
7647
7648         * decl.cs (CheckAbstractAndExtern): Moved to MemberCore for easier error
7649         reporting. Added automatic property check.
7650         
7651         * class.cs: Updated after CheckAbstractAndExtern relocation.
7652         (AEventPropertyAccessor.GetSignatureForError): Customized.
7653         
7654 2007-06-11  Marek Safar  <marek.safar@gmail.com>
7655
7656         * class.cs (DefineBaseTypes): Base type can be undefined.
7657         
7658         * ecore.cs (TypeLookup): Minor refactoring.
7659         (DoResolveAsTypeStep): Removed redundant check.
7660
7661         * namespace.cs (Lookup): Removed redundant check.
7662                 
7663         * rootcontext.cs (BootstrapCorlib_ResolveType): Uses normal 
7664         ResolveAsTypeTerminal step.
7665         (BootstrapCorlib_*): Simplified.
7666         (PopulateCoreType): Core types can be now external.
7667
7668 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7669
7670         * anonymous.cs (VerifyExplicitParameterCompatibility): Add flag to do
7671          verification only.
7672          (InferTypeArguments): Infers anonymous expression type arguments.
7673          (Compatible): Split to Compatible and InferTypeArguments. 
7674         
7675         * lambda.cs: Updated.
7676
7677 2007-06-08  Marek Safar  <marek.safar@gmail.com>
7678
7679         * anonymous.cs (AnonymousContainer): Marked as compiler generated.
7680
7681 2007-06-07  Raja R Harinath  <harinath@gmail.com>
7682
7683         Fix #80477, cs0135-2.cs, cs0135-3.cs
7684         * statement.cs (ToplevelBlock.ProcessParameters): Add parameter
7685         names to the "known" variables list.
7686         (Block.CheckInvariantMeaningInBlock): Handle the fact the
7687         parameter names are also "known".
7688         (Block.CheckError136): Remove.
7689         (ExplicitBlock.CloneTo): New.  Set 'known_variables' in target to
7690         null.
7691
7692 2007-06-07  Marek Safar  <marek.safar@gmail.com>
7693
7694         * ecore.cs (MethodGroupExpr.OverloadResolve): Print full method definition.
7695
7696 2007-06-06  Marek Safar  <marek.safar@gmail.com>
7697
7698         * ecore.cs (SimpleName.Emit): Emitting unresolved simple name is
7699         internal error not an user error.
7700          
7701         * expression.cs (IsApplicable): Refactored to make debugging easier.
7702
7703         * support.cs: More tricks for non-mono runtimes.
7704         
7705         * typemanager.cs (CoreLookupType): Made public.
7706         (InitSystemCore): All linq specific stuff moved to linq.cs
7707
7708 2007-06-05  Marek Safar  <marek.safar@gmail.com>
7709
7710         * typemanager.cs (CSharpSignature): One more missing build-in types
7711         replacement.
7712         More tricks for non-mono runtime.
7713
7714 2007-06-05  Raja R Harinath  <harinath@gmail.com>
7715
7716         * statement.cs (Block.CheckError136_InParents): Remove.
7717         (Block.AddVariable): Use GetParameterInfo instead.
7718         (ToplevelBlock.ProcessArguments): Likewise.
7719
7720 2007-06-04  Raja R Harinath  <rharinath@novell.com>
7721
7722         * statement.cs (ToplevelBlock.CloneTo): New.  Copy over parameter
7723         information too.
7724         (ToplevelBlock.GetParameterInfo): Split out of ...
7725         (ToplevelBlock.GetParameterRefernce): ... this.
7726         (ToplevelBlock.ParameterMap): Remove.
7727         * expression.cs (ParameterReference): Update to use
7728         ToplevelParameterInfo.
7729
7730         * statement.cs (ToplevelBlock.ProcessParameters): Workaround some
7731         regression.
7732
7733         * flowanalysis.cs (FlowBranching.CheckOutParameters): Move ...
7734         * statement.cs (ToplevelBlock.CheckOutParameters): ... here.
7735
7736         * statement.cs (ToplevelBlock.ResolveMeta): Move CS0136 checks ...
7737         (ToplevelBlock.ProcessParameters) ... here.
7738         (ToplevelBlock..ctor): Invoke it.
7739
7740         * statement.cs (ToplevelBlock.ResolveMeta): Add sanity checks for
7741         new parameters.
7742
7743         * statement.cs (IKnownVariable): New interface.
7744         (LocalInfo): Implement it.
7745         (ToplevelParameterInfo): New class.
7746         (ExplicitBlock.AddKnownVariable): Use IKnownVariable.
7747         (ExplicitBlock.GetKnownVariable): Likewise.  Rename from
7748         GetKnownVariableInfo.
7749
7750 2007-06-03  Raja R Harinath  <harinath@gmail.com>
7751
7752         Partly speed up CS0136 error checks.
7753         * statement.cs (ExplicitBlock.GetKnownVariableInfo): Remove
7754         'recurse' parameter.
7755         (Block.DoCheckError136): Only check errors in parameters.  Move
7756         local variable checks ...
7757         (Block.AddVariable): ... here, and ...
7758         (ToplevelBlock.ResolveMeta): ... here.
7759
7760 2007-06-02  Raja R Harinath  <harinath@gmail.com>
7761
7762         * statement.cs (Block.IsChildOf): Remove.
7763
7764         * statement.cs (Statement.Clone): Move special case code ...
7765         (Block.CloneTo): ... here.
7766
7767 2007-05-29  Raja R Harinath  <rharinath@novell.com>
7768
7769         * statement.cs (ToplevelBlock.container): Remove field.  It's
7770         redundant with 'Parent'.
7771         (ToplevelBlock.ContainerBlock): Remove accessor.
7772         (ToplevelBlock..ctor): Update to changes.  Register anonymous
7773         child with parent here, ...
7774         * cs-parser.jay (end_anonymous): ... not here.  Don't modify
7775         current_block.
7776         (start_anonymous): Don't save current_block.
7777         (top_current_block): Remove.
7778
7779         * statement.cs (Block.Flags): Remove IsExplicit and IsToplevel flags.
7780         (Block.Resolve): Update to changes.
7781         (Block..ctor): Move setting of "correct" 'Toplevel'
7782         and 'Explicit' fields to ...
7783         (ExplicitBlock..ctor, ToplevelBlock..ctor): ... here.
7784
7785 2007-05-27  Raja R Harinath  <harinath@gmail.com>
7786
7787         Kill Block.Implicit
7788         * statement.cs (Block.Implicit): Remove.
7789         (Block): Update to changes.
7790         * flowanalysis.cs: Likewise.
7791
7792         Mildly speed up CheckInvariantMeaningInBlock
7793         * statement.cs (ExplicitBlock.AddKnownVariable): Move here from Block.
7794         Recursively call AddKnownVariable to all enclosing blocks.
7795         (ExplicitBlock.GetKnownVariableInfo): Move here from Block.
7796         Remove recursive calls.
7797         (Block): Update to changes.
7798
7799         New ExplicitBlock invariants
7800         * statement.cs (Block.Explicit): New field.  It points to the
7801         immediately enclosing non-implicit block.
7802         (Block..ctor): Maintain the invariant.
7803         * cs-parser.jay: Take advantage of invariant.
7804
7805         Introduce ExplicitBlock
7806         * statement.cs (ExplicitBlock): New.
7807         (ToplevelBlock): Derive from it.
7808         (Block.Flags.IsExplicit): Rename from '...Implicit' and invert
7809         sense of flag.
7810         (Block.Implicit): Update to changes.
7811         * cs-parser.jay: Update to changes.
7812
7813         Remove unused field
7814         * codegen.cs (EmitContext.IsLastStatement): Remove.
7815         * statement.cs (Block.DoEmit): Update to changes.
7816
7817 2007-05-25  Raja R Harinath  <rharinath@novell.com>
7818
7819         * cs-parser.jay: Use 'start_block' and 'end_block' rather than
7820         modifying current_block directly.
7821
7822 2007-05-23  Scott Peterson  <lunchtimemama@gmail.com>
7823         
7824         * class.cs: Implemented automatic properties (C# 3.0)
7825           Thanks to Marek for the help.
7826
7827 2007-05-23  Raja R Harinath  <rharinath@novell.com>
7828
7829         * flowanalysis.cs (VariableInfo.SetAssigned): When noting a
7830         variable as assigned, note also that all its components are
7831         assigned too.
7832         (MyBitVector.SetRange): New.  Function to set multiple bits to true.
7833
7834 2007-05-19  Marek Safar  <marek.safar@gmail.com>
7835
7836         * anonymous.cs, class.cs: Emit Compiler generated attribute when
7837         member is marked as compiler generated.
7838         
7839         * decl.cs (MemberCore): Refactored ModFlags into property.
7840
7841         * modifiers.cs: Add new modifier (COMPILER_GENERATED).
7842         (Check): Check only accessibility modifiers.
7843
7844 2007-05-18  Raja R Harinath  <rharinath@novell.com>
7845
7846         Track all assignable slots in one bit array
7847         * statement.cs (ToplevelBlock.ParameterMap): Convert into array.
7848         (ToplevelBlock.ResolveMeta): Don't create a VariableMap.  Move
7849         logic from VariableMap constructor here.  Use the same 'offset'
7850         variable that's later used for computing offsets of local
7851         variables.
7852         * flowanalysis.cs (UsageVector.parameters): Remove.
7853         (UsageVector): Update to changes.
7854         (VariableMap): Remove.
7855
7856         Avoid creating ParameterMap in every block
7857         * statement.cs (Block.ParameterMap): Move ...
7858         (ToplevelBlock.ParameterMap): ... here.
7859         (ToplevelBlock.ResolveMeta): Create VariableMap for parameters
7860         only once.
7861         * flowanalysis.cs (FlowBranching.param_map): Remove.
7862         (FlowBranching.UsageVector): Update to changes.
7863         (FlowBranchingToplevel.CheckOutParameters): Likewise.
7864
7865         * statement.cs (Block.CloneTo): Clone Toplevel field too.
7866
7867         * expression.cs (ParameterReference): Distinguish between block
7868         where parameter was referenced and declared.
7869
7870 2007-05-18  Marek Safar  <marek.safar@gmail.com>
7871
7872         * flowanalysis.cs, statement.cs: Put back improved error handling.
7873
7874 2007-05-15  Scott Peterson  <lunchtimemama@gmail.com>
7875         
7876         * assign.cs:
7877         * expression.cs:
7878           Imporved object and collection initialization (C# 3.0).
7879
7880 2007-05-15  Marek Safar  <marek.safar@gmail.com>
7881
7882         A fix for bug #81380
7883         * expression.cs (Is.DoResolve): Only value types have constant `is'
7884         behaviour.
7885
7886 2007-05-15  Raja R Harinath  <rharinath@novell.com>
7887
7888         * statement.cs (ToplevelBlock.child): Remove.
7889
7890 2007-05-15  Raja R Harinath  <harinath@gmail.com>
7891
7892         Rationalize ResolveMeta: refactoring
7893         (Block.ResolveMeta): Remove wrong or superfluous comments.  Carve
7894         out constant handling code into ...
7895         (Block.DoResolveConstants): ... this.
7896
7897         Rationalize ResolveMeta: kill local_map
7898         * statement.cs (Block.local_map, Block.LocalMap): Remove.
7899         (Block.AssignableSlots): New.
7900         (Block.ResolveMeta): Make protected.  Don't create a VariableMap
7901         for locals -- move code from VariableMap here.  Avoid unnecessary
7902         allocations.
7903         * flowanalysis.cs (FlowBranching.local_map): Remove.
7904         (FlowBranching..ctor): Use Block.AssignableSlots.
7905         (VariableMap): Remove unused constructors.
7906
7907 2007-05-11  Raja R Harinath  <rharinath@novell.com>
7908
7909         * Makefile [PROFILE=net_2_0_bootstrap]: Add special-case rules.
7910
7911 2007-05-11  Marek Safar  <marek.safar@gmail.com>
7912
7913         * typemanager.cs (IsFriendAssembly): Should not be called for building
7914         assembly.
7915
7916 2007-05-09  Marek Safar  <marek.safar@gmail.com>
7917
7918         * literal.cs (NullConstant): Print null in all cases.
7919         
7920         * expression.cs (Binary.ResolveOperator): Implemented delegate
7921          comparison based on C# 2.0 changes.
7922
7923 2007-04-28  Scott Peterson  <lunchtimemama@gmail.com>
7924
7925         This code is contributed under the MIT X11 license
7926         
7927         The following enables support for several C# 3.0 language features:
7928         
7929         * cs-tokenizer.cs: Added support for the "var" keyword.
7930         
7931         * ecore.cs: Refactored TypeLookupExpression.DoResolveAsTypeStep().
7932           Added VarExpr class to facilitate type inferencing.
7933         
7934         * class.cs: Added IDictionary field AnonymousTypes to TypeContainer
7935           to support anonymous types.
7936         
7937         * assign.cs: Added support for type inferencing and initialization.
7938         
7939         * anonymous.cs: Added AnonymousClass class to enable anonymous types.
7940         
7941         * expression.cs: Added implicit array support to ArrayCreation.
7942           Added 5 types and 1 interface:
7943           
7944           IInitializable                Implementing classes can inject initializing
7945                                         statements after object instantiation.
7946           
7947           Initializer                   Stores data for object initialization.
7948           
7949           AnonymousType                 An expression for anonymous types.
7950           
7951           AnonymousTypeParameter        Stores data about an anonymous type's field.
7952           
7953           NewInitialize                 An expression for object initialization.
7954           
7955           CollectionInitialize          An expression for collection initialization.
7956         
7957         * statement.cs: Added "var" keyword support to the foreach, using, and fixed
7958           statements.
7959
7960 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7961
7962         A fix for bug #81500
7963         * cs-tokenizer.cs: Add special handling for coalescing operator.
7964
7965 2007-05-06  Marek Safar  <marek.safar@gmail.com>
7966
7967         A fix for bug #81529
7968         * attribute.cs (GetAttributeUsage): AttributeUsage attribute inherits
7969         its value from base class until it is redefined.
7970
7971 2007-05-02  Raja R Harinath  <rharinath@novell.com>
7972
7973         Fix regression in cs0631-3.cs
7974         * cs-parser.jay (operator_declarator): Add opt_attributes to error
7975         fallback.  Make error fallback catch more cases.
7976
7977 2007-05-01  Miguel de Icaza  <miguel@novell.com>
7978
7979         * cs-parser.jay: Allow parameters in operator declarations to have
7980         attributes. 
7981
7982 2007-04-27  Miguel de Icaza  <miguel@novell.com>
7983
7984         * statement.cs (If.CloneTo): Only clone the FalseStatement if it
7985         exists. 
7986
7987         * lambda.cs (ContextualReturn.Resolve): An expression is valid
7988         inside the ContextualReturn, it does not have to be an
7989         ExpressionStatement. 
7990
7991 2007-04-24  Miguel de Icaza  <miguel@novell.com>
7992
7993         * lambda.cs (ContextualReturn.Resolve): if the return type is not
7994         set, set it.
7995
7996 2007-04-23  Miguel de Icaza  <miguel@novell.com>
7997
7998         * anonymous.cs (AnonymousContainer): split the virtual Resolve
7999         method in two methods: ResolveNoDefine and Resolve.
8000
8001         ResolveNoDefine will stop just after ResolveTopBlock has been
8002         called.   
8003
8004         Resolve will then continue by creating a method and issuing the
8005         call to method.Define ().
8006
8007         (AnonymousMethod): Split and implement the new Resolve and
8008         ResolveNoDefine as well.
8009
8010         * lambda.cs (LambdaExpression): Split the anonymous method
8011         resolution code into a separate routine (CoreCompatibilityTest)
8012         from DoCompatibleTest.
8013
8014         (LambdaExpression.TryBuild): New method, this method tries to
8015         build the LambdaExpression with the given set of types to be used
8016         as the types for the various parameters of the lambda expression. 
8017
8018         If the compilation succeed with the given types, the infered type
8019         of the Anonymous method is returned, otherwise null is returned.
8020
8021 2007-04-23  Marek Safar  <marek.safar@gmail.com>
8022
8023         A fix for bug #81414
8024         * delegate.cs: Better fix, moved ApplyAttributes from Define to Emit.
8025
8026 2007-04-22  Miguel de Icaza  <miguel@novell.com>
8027
8028         * cs-tokenizer.cs: Change various identifiers here from the
8029         camelCasing to the recommended Linux-like style for instance
8030         variables from the Coding Guidelines. 
8031
8032 2007-04-19  Martin Baulig  <martin@ximian.com>
8033
8034         * convert.cs
8035         (Convert.ImplicitReferenceConversionCore): Allow conversions from
8036         System.Enum to System.ValueType.
8037
8038 2007-04-13  Martin Baulig  <martin@ximian.com>
8039
8040         Rewrote implicit reference conversions.  We need to distinguish
8041         between implicit reference conversions (13.1.4) and implicit
8042         boxing conversions (13.1.5).
8043
8044         According to the spec, there's an an implicit conversion
8045         "From a one-dimensional array-type S[] to IList<T> and base
8046         interfaces of this interface, provided there is an implicit
8047         reference conversion from S to T."  Note that this does not
8048         include boxing conversions.
8049
8050         * convert.cs
8051         (Convert.ImplicitTypeParameterBoxingConversion): New method.
8052         (Convert.ImplicitReferenceConversion): Split into
8053         ImplicitReferenceConversionCore() and
8054         ImplicitBoxingConversionExist().
8055         (Convert.ImplicitReferenceConversionExists): Use the new
8056         ImplicitReferenceConversionCore() and ImplicitBoxingConversionExists().
8057
8058 2007-04-12  Martin Baulig  <martin@ximian.com>
8059
8060         * convert.cs (Convert.ImplicitReferenceConversion): Move the
8061         `TypeManager.null_type' checks up to the top of the method.
8062
8063 2007-04-11  Marek Safar  <marek.safar@gmail.com>
8064
8065         A fix for bug #81350
8066         * class.cs, decl.cs, ecore.cs, namespace.cs: The optimization for private
8067         extension methods.
8068
8069 2007-04-11  Martin Baulig  <martin@ximian.com>
8070
8071         * statement.cs (Foreach.CollectionForeach.ProbeCollectionType):
8072         Use `TypeManager.GetInterfaces(t)' rather than `t.GetInterfaces()'
8073         to make this work for generic classes; fixes #79561.
8074
8075 2007-04-11  Martin Baulig  <martin@ximian.com>
8076
8077         * expression.cs (As): Add support for nullable types; fixes #79371.
8078
8079 2007-04-11  Martin Baulig  <martin@ximian.com>
8080
8081         * doc.cs (DocUtil.GetSignatureForDoc): Don't crash if
8082         `type.FullName' is null; fixes #80243.
8083
8084 2007-04-11  Martin Baulig  <martin@ximian.com>
8085
8086         * expression.cs (Invocation.IsApplicable): Don't modify the method
8087         if type inference succeeded, but the method was not applicable.
8088         Fixes #81250.
8089
8090 2007-04-10  Marek Safar  <marek.safar@gmail.com>
8091
8092         A fix for bug #81324
8093         * namespace.cs (Namespace.LookupExtensionMethod): Always inspect both
8094         internal and external namespaces containers.
8095
8096 2007-04-10  Martin Baulig  <martin@ximian.com>
8097
8098         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Use
8099         TypeManager.DropGenericMethodArguments() so we also call
8100         IMethodData.SetMemberIsUsed() for generic methods.  Fixes #80357.
8101
8102 2007-04-10  Martin Baulig  <martin@ximian.com>
8103
8104         * iterators.cs (Iterator.CreateIterator): Don't crash if
8105         `method.ReturnType' is null.  This happens if something went wrong
8106         while resolving that typ (we already reported an error in this case).
8107
8108 2007-04-10  Martin Baulig  <martin@ximian.com>
8109
8110         * expression.cs (New.DoResolve): Don't call CheckComImport() on
8111         generic interfaces; report the CS0144 directly.
8112
8113 2007-04-10  Martin Baulig  <martin@ximian.com>
8114
8115         * ecore.cs (MemberExpr.ResolveMemberExpr): If `left' is a
8116         `TypeExpr', call ResolveAsTypeTerminal() on it; fixes #81180.
8117
8118 2007-04-10  Martin Baulig  <martin@ximian.com>
8119
8120         * expression.cs (New.DoEmitTypeParameter): Fix #81109.
8121
8122 2007-04-09  Raja R Harinath  <rharinath@novell.com>
8123
8124         A better fix
8125         * flowanalysis.cs (UsageVector.MergeChild): Handle child.Block == null.
8126         * statement.cs: Use KillFlowBranching only in ResolveUnreachable.
8127
8128         Fix #81338
8129         * statement.cs (For.Resolve): If resolution fails, use
8130         KillFlowBranching.
8131
8132 2007-04-08  Marek Safar  <marek.safar@gmail.com>
8133
8134         * anonymous.cs (MakeName): Make faster and zero-based.
8135         (VerifyExplicitParameterCompatibility): Back to mode where generic
8136         parameter is ignored.
8137         (AnonymousMethodMethod.Emit): Decorate method as compiler generated.
8138
8139         * class.cs (EmitType): Method can emit another new method.
8140
8141         * cs-tokenizer.cs (IsLinqEnabled): Fixes static cctor race.
8142
8143         * driver.cs: Updated.
8144
8145         * lambda.cs: Reuse predefined empty parameters.
8146
8147         * parameter.cs: Updated
8148
8149         * support.cs: Implemented InflateTypes.
8150
8151         * typemanager.cs (GetFullName): Don't use FullName as it can be null.
8152         (InitSystemCore): Introduced to isolate 3.0 dependencies.
8153
8154 2007-04-03  Martin Baulig  <martin@ximian.com>
8155
8156         Fix #80632.
8157
8158         * statement.cs (Foreach.CollectionForeach.TryType): Use a custom
8159         version of TypeManager.IsOverride() which also works with generic
8160         types.  
8161
8162 2007-04-03  Martin Baulig  <martin@ximian.com>
8163
8164         Fix #81044.
8165
8166         * convert.cs
8167         (Convert.ExplicitReferenceConversion): We need to cast when
8168         converting from IList<T> to S[].
8169
8170 2007-04-01  Marek Safar  <marek.safar@gmail.com>
8171
8172         * decl.cs (FindExtensionMethods): Consider all candidates with same name
8173         at this level.
8174         
8175         * expression.cs (MemberAccess.DoResolve): Cache resolved expression.
8176
8177 2007-03-31  Marek Safar  <marek.safar@gmail.com>
8178
8179         * anonymous.cs (AnonymousMethodExpression.Compatible): Handles both
8180         argument and return type inferring.
8181
8182         * codegen.cs (InferReturnType): Flag whether return can be inferred.
8183         (ReturnType): Turned to property.
8184
8185         * statement.cs (Return): Implemented return type inferring.
8186
8187         * support.cs (ReflectionParameters): Use local types if possible.
8188
8189 2007-03-30  Raja R Harinath  <rharinath@novell.com>
8190
8191         * flowanalysis.cs (FlowBranching.Reachability): Remove.
8192         (FlowBranching.UsageVector): Update to changes.
8193
8194         Prepare to kill 'Reachability'
8195         * flowanalysis.cs (UsageVector): Remove 'Reachability' from
8196         argument of constructor.
8197
8198 2007-03-29  Raja R Harinath  <rharinath@novell.com>
8199
8200         Prepare to kill 'Reachability'
8201         * flowanalysis.cs (UsageVector.is_unreachable): New.
8202         (UsageVector): Update to maintain 'is_unreachable' in parallel to
8203         'reachability', and verify they're consistent.
8204
8205         Fix #81121
8206         * expression.cs (New.EmitStatement): Handle type parameters here too.
8207
8208 2007-03-29  Martin Baulig  <martin@ximian.com>
8209
8210         Fix #79148.
8211
8212         * anonymous.cs
8213         (ScopeInfo.ctor): Use `Modifiers.PUBLIC' if we're a nested
8214         CompilerGeneratedClass.
8215         (ScopeInfo.EmitScopeInstance): Make this protected.
8216         (CapturedVariable.EmitInstance): Use `Ldarg_0' if
8217         `ec.CurrentAnonymousMethod.Scope == Scope'.
8218
8219         * statement.cs (Block.ScopeInfo): Make this a property.
8220
8221 2007-03-27  Raja R Harinath  <harinath@gmail.com>
8222
8223         Prepare to kill 'Reachability'
8224         * flowanalysis.cs (FlowBranching.Reachability): Make class private.
8225         (FlowBranching.UsageVector.Reachability): Remove property.
8226         (FlowBranching.UsageVector.IsUnreachable): New property.
8227         (FlowBranching.UsageVector.ResetBarrier): New.
8228         (FlowBranching.UsageVector, FlowBranchingLabeled): Update to changes.
8229         * codegen.cs, statement.cs: Update to changes.
8230
8231 2007-03-27  Martin Baulig  <martin@ximian.com>
8232
8233         Fix #81209.
8234
8235         * decl.cs
8236         (DeclSpace.LookupNestedTypeInHierarchy): Correctly handle nested
8237         generic types.
8238
8239 2007-03-26  Raja R Harinath  <rharinath@novell.com>
8240
8241         * flowanalysis.cs (FlowBranching.Reachability): Use a boolean
8242         instead of TriState.  Remove all mention of TriState.
8243
8244         * flowanalysis.cs (FlowBranching.Reachability): Prepare to be
8245         replaced by a boolean.  Add boolean 'is_unreachable' field, check
8246         and maintain invariants.
8247
8248 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8249
8250         * anonymous.cs: Restored checks disabled for uninflated anonymous methods.
8251
8252 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8253
8254         * expression.cs: Stop using obsolete 2.0 opcodes.
8255
8256 2007-03-25  Marek Safar  <marek.safar@gmail.com>
8257
8258         * enum.cs (EnumMember.Define): Fixed regression and slowdown caused by
8259         one of the latests Martin's fixes.
8260
8261 2007-03-23  Miguel de Icaza  <miguel@novell.com>
8262
8263         * expression.cs: On BigEndian systems, swap the bytes, temporary
8264         solution until we get a new bitconverter class.
8265
8266 2007-03-23  Martin Baulig  <martin@ximian.com>
8267
8268         Fix #81158.
8269
8270         * decl.cs (MemberCache.AddMembers): Add generic methods both as
8271         "Method" and "Method`1".  Normally, a cache lookup is done on the
8272         "Method" form (ie. without the generic arity), but this one makes
8273         lookups on the full form work as well.
8274
8275 2007-03-22  Raja R Harinath  <rharinath@novell.com>
8276
8277         * flowanalysis.cs (Reachability): Reorganize slightly, and remove
8278         unused properties.
8279
8280 2007-03-20  Bill Holmes  <billholmes54@gmail.com>
8281         * class.cs: 
8282         Added 2 MemberCoreArrayList objects, ordered_explicit_member_list and
8283         ordered_member_list, to TypeBuilder to store members to be defined
8284         in the order they were parsed in.
8285         - ordered_explicit_member_list contains all properties indexers
8286           and methods that are defined as explicit implementation of an
8287           interface or base class.
8288         - ordered_member_list contains all properties indexers and methods
8289           that are not defined as explicit implementation of an interface
8290           or base class.
8291
8292         Removed MethodArrayList and IndexerArrayList from TypeBuilder.  The 
8293         functionality in these removed classes has been replaced with 
8294         ComputeIndexerName, EmitIndexerName, HasEqualss, HasGetHashCode, and 
8295         CheckEqualsAndGetHashCode members defined and called in the TypeBuilderClass.
8296
8297         Adding CheckForDuplications to PropertyBase.PropertyMethod and calls
8298         to CheckForDuplications inside GetMethod and SetMethod Define Method
8299         to handle method property and indexer name conflicts.
8300
8301         Fixes #79434
8302
8303         All code is contributed under the MIT/X11 license.
8304
8305 2007-03-20  Martin Baulig  <martin@ximian.com>
8306
8307         * class.cs (TypeContainer.Interfaces): Removed; they're now
8308         included in `TypeContainer.Types'.
8309
8310 2007-03-20  Martin Baulig  <martin@ximian.com>
8311
8312         Fix #77963, #80314 and #81019.  Added gtest-317, ..., gtest-320.
8313
8314         * class.cs (TypeContainer.CreateType): New public method.  This is
8315         now called before DefineType() to create the TypeBuilders.
8316         (TypeContainer.DefineType): Don't create the TypeBuilder here; it
8317         has already been created by CreateType().
8318         (TypeContainer.DefineTypeBuilder): Renamed into CreateTypeBuilder();
8319         don't resolve our base classes here; this has been moved into
8320         DefineBaseTypes().  We're now called from CreateType().
8321         (TypeContainer.DefineBaseTypes): New private method; resolve our
8322         base classes here.  We're now called from DefineType().
8323
8324         * rootcontext.cs
8325         (RootContext.ResolveTree): Call TypeContainer.CreateType() on all
8326         our types first to create all the TypeBuilders.  After that, call
8327         TypeContainer.DefineType() on all the types which'll resolve their
8328         base classes and setup the resolve order.
8329
8330 2007-03-20  Martin Baulig  <martin@ximian.com>
8331
8332         * class.cs (TypeContainer.Enums): Removed; they're now included in
8333         `TypeContainer.Types'.  
8334
8335 2007-03-20  Martin Baulig  <martin@ximian.com>
8336
8337         * class.cs
8338         (TypeContainer.DefineType): Don't call ResolveMembers() here.
8339         (TypeContainer.DoResolveMembers): Call DefineType() on our
8340         `compiler_generated' classes; moved here from DefineNestedTypes().
8341
8342         * rootcontext.cs
8343         (RootContext.ResolveTree): Call ResolveMembers() on all
8344         TypeContainer's in the `type_container_resolve_order'.
8345
8346 2007-03-19  Marek Safar  <marek.safar@gmail.com>
8347
8348         * class.cs: Use corlib to handle InternalMethodImplAttribute.
8349
8350 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8351
8352         * class.cs (EventFieldAccessor.EmitMethod): Don't override existing
8353         implementation flags.
8354
8355 2007-03-17  Marek Safar  <marek.safar@gmail.com>
8356
8357         * class.cs: More optimizations for type parameters.
8358
8359 2007-03-15  Marek Safar  <marek.safar@gmail.com>
8360
8361         * anonymous.cs (AnomymousMethod): Can be now hosted in generic container.
8362
8363         * ecore.cs, parameter.cs: More common code for both corlibs.
8364
8365         * typemanager.cs (IsGenericMethod): Simplified.
8366
8367 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8368
8369         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8370         'returns'.
8371         * statement.cs, iterators.cs, lambda.cs: Update to changes.
8372
8373         * statement.cs (Lock.Resolve): Invoke 'ec.NeedReturnLabel'
8374         unconditionally.  Simplify explanation.
8375         (Try.Resolve, Using.Resolve): Likewise.
8376
8377 2007-03-15  Martin Baulig  <martin@ximian.com>
8378
8379         Fix #80731.
8380
8381         * decl.cs (DeclSpace): If we're a partial class, use our
8382         `PartialContainer's `TypeParameters' and `CurrentTypeParameters'.
8383
8384 2007-03-15  Raja R Harinath  <rharinath@novell.com>
8385
8386         * flowanalysis.cs (FlowBranching.Reachability): Remove handling of
8387         'throws'.
8388         (FlowBranching.UsageVector): Update to changes.
8389         (FlowBranching.MergeSiblings): Likewise.
8390         * statement.cs: Likewise.
8391
8392 2007-03-15  Martin Baulig  <martin@ximian.com>
8393
8394         Fix #79302.
8395
8396         * decl.cs
8397         (MemberCache): Added a special .ctor for type parameters.
8398
8399         * typemanager.cs
8400         (TypeManager.MemberLookup_FindMembers): `TypeParameter' now has a
8401         `MemberCache'.  
8402
8403 2007-03-09  Martin Baulig  <martin@ximian.com>
8404
8405         * enum.cs (Enum): Make this a TypeContainer.
8406         (EnumMember): Derive from `Const'.
8407
8408         * const.cs
8409         (Const.DoResolveValue): New protected virtual method; move most of
8410         the functionality of ResolveValue() here so we can override it in
8411         `EnumMember'.
8412         (Const.CreateConstantReference): Make this virtual.
8413
8414         * class.cs (Kind): Add `Kind.Enum'.
8415         (TypeContainer.Emit): Don't emit the enums here; they're already
8416         in the `RootContext.typecontainer_resolve_order'.
8417
8418         * rootcontext.cs (RootContext.EmitCode): Don't emit the enums
8419         here; they're already in the `typecontainer_resolve_order'.
8420
8421         * ecore.cs (EnumConstant.ConvertImplicitly): Add
8422         TypeManager.DropGenericTypeArguments().
8423
8424         * typemanager.cs
8425         (TypeManager.CSharpEnumValue): Add DropGenericTypeArguments().
8426         (TypeManager.IsEnumType): Likewise.
8427         (TypeManager.EnumToUnderlying): Likewise.
8428         (TypeManager.IsEqual): Add support for enums.
8429
8430 2007-03-12  Raja R Harinath  <rharinath@novell.com>
8431
8432         * typemanager.cs (InitCoreTypes) [NET_2_0]: Allow
8433         DefaultParameterValueAttribute to be undefined, say if System.dll
8434         is not referenced.
8435
8436 2007-03-11  Marek Safar  <marek.safar@gmail.com>
8437
8438         * ecore.cs, parameter.cs, typemanager.cs: Another gmcs fix to work with
8439         any mscorlib.
8440
8441 2007-03-10  Marek Safar  <marek.safar@gmail.com>
8442
8443         * class.cs, parameter.cs: Unified parameters verification.
8444
8445 2007-03-08  Martin Baulig  <martin@ximian.com>
8446
8447         * cs-parser.jay (constructor_header): Pass the location to the
8448         newly created TopLevelBlock.
8449
8450 2007-03-07  Martin Baulig  <martin@ximian.com>
8451
8452         * statement.cs (Block.Resolve): Don't crash on error; bug #80715.
8453
8454 2007-03-06  Miguel de Icaza  <miguel@novell.com>
8455
8456         * convert.cs (ExplicitReferenceConversionExists): Sync this method
8457         with the changes from David, fixes the build.
8458
8459 2007-03-05  David Mitchell  <dmitchell@logos.com>
8460
8461         * convert.cs: Implement From System.Collecitons.Generic.IList<T>
8462         and its base interfaces to a one-dimensional array type S[],
8463         provided there is an implicit or explicit reference conversion
8464         from S to T.
8465
8466 2007-03-03  Marek Safar  <marek.safar@gmail.com>
8467
8468         * cs-tokenizer.cs: Implemented basic linq grammar.
8469
8470         * driver.cs: Set linq lang version on demand.
8471
8472 2007-02-26  Marek Safar  <marek.safar@gmail.com>
8473
8474         * cs-parser.jay, expression.cs: Compile empty __arglist correctly.
8475
8476 2007-02-25  Marek Safar  <marek.safar@gmail.com>
8477
8478         * attribute.cs: Replaced DefinePInvoke in favor of S.R.E implementation
8479         (Fixes #80455)
8480
8481         * class.cs (InterfaceMemberBase): Share common `extern' modifier checks
8482         here.
8483         Check property and event extern attributes.
8484
8485         * codegen.cs (ModuleClass): HasDefaultCharSet when module defined global
8486         charset.
8487
8488 2007-02-24  Marek Safar  <marek.safar@gmail.com>
8489
8490         A fix for bug #80407
8491         * ecore.cs: Don't report ambiguity error when methods have same parent.
8492
8493 2007-02-23  Marek Safar  <marek.safar@gmail.com>
8494
8495         A fix for bug #80878
8496         * class.cs, cs-parser.jay: Event property can host anonymous methods.
8497
8498 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8499
8500         * attribute.cs: Enable ExtensionAttribute presence test.
8501
8502 2007-02-22  Marek Safar  <marek.safar@gmail.com>
8503
8504         * class.cs: Warn about missing GetHashCode only when Equals is override.
8505
8506         * decl.cs: Check accessibility of type arguments.
8507
8508         * typemanager.cs: Correctly report nullable array.
8509
8510 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8511
8512         * class.cs, report.cs: Capture more details when things go wrong.
8513
8514 2007-02-20  Marek Safar  <marek.safar@gmail.com>
8515
8516         A fix for bug #80650
8517         * cs-parser.jay: Anonymous container starts at constructor declaration
8518         and not at block beginning because it has to be usable in constructor
8519         initializer.
8520
8521         * statement.cs: Use context location and not block one for error reporting.
8522
8523 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8524
8525         A fix for bug #78712
8526         * class.cs.cs, decl.cs, ecore.cs: LookupAnyGeneric inspects nested types
8527         too.
8528
8529 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8530
8531         A fix for bug #80493 by Atsushi Enomoto
8532         * cs-parser.jay: Ignore invalid attribute target.
8533
8534 2007-02-18  Marek Safar  <marek.safar@gmail.com>
8535  
8536         * cs-tokenizer.cs: Ignore '\0' as white space character.
8537
8538 2007-02-17  Miguel de Icaza  <miguel@novell.com>
8539
8540         * cs-parser.jay: Add support for lambda expressions to the mcs
8541         compiler as well.
8542
8543         * lambda.cs: Only clone when we are probing, not on the final call
8544         (Compatible is the final call). 
8545
8546         * statement.cs (CloneContext): Introduce class to provide block
8547         remapping during clone.
8548
8549         All statements Clone themselves now.
8550
8551         (Clone): special handling for blocks, when we clone a block, we
8552         register the block inside this routine, as children of the block
8553         might trigger a lookup. 
8554         
8555         * expression.cs: Add support for CloneContext in all expressions. 
8556         
8557 2007-02-17  Marek Safar  <marek.safar@gmail.com>
8558  
8559         A fix for bug #80493
8560         * statement.cs: Report ambiguous warning when interfaces are not related.
8561
8562 2007-02-15  Marek Safar  <marek.safar@gmail.com>
8563
8564         C# 3.0 extension methods.
8565
8566         * attribute.cs (Error_MisusedExtensionAttribute): Extension attribute
8567         cannot be used directly.
8568
8569         * class.cs (Class.Emit): Emit extension attribute if any class method
8570         is extension method.
8571         (Method.Define): Add basic extension method validation conditions.
8572         (Method.Emit): Emit extension attribute for method.
8573
8574         * codegen.cs (AssemblyClass): Emit extension attribute if at least one
8575         extension method exists. Currently we follow same approach as Microsoft
8576         does, emit even if a method or a class are private but this can change
8577         later.
8578
8579         * cs-parser.jay: Add handling of `this' keyword in method parameters
8580         context.
8581
8582         * decl.cs (DeclSpace.IsStaticClass): New property.
8583         (MemberCache.FindExtensionMethods): Looks for extension methods with
8584         defined name and extension type.
8585
8586         * doc.cs: Updated after OverloadResolve changes.
8587
8588         * driver.cs: Add new soft reference to System.Core.dll.
8589
8590         * ecore.cs (MethodLookup): Can return only MethodGroupExpr.
8591         (ExtensionMethodGroupExpr): Represents group of extension methods.
8592
8593         * expression.cs (Invocation): Moved methods BetterConversion, MoreSpecific,
8594         BetterFunction, IsOverride, IsAncestralType, OverloadResolve
8595         to MethodGroupExpr and made non-static for easier customization.
8596         (Invocation.DoResolve): Add extension method lookup when no standard
8597         method was found.
8598         (MemberAccess.DoResolve): Try extension methods if no member exists.
8599
8600         * modifiers.cs: Add METHOD_EXTENSION modifier.
8601
8602         * namespace.cs (RegisterExtensionMethodClass): Register class namespace
8603         as well as candidate extension type.
8604         (ComputeNamespaces): When assembly constains extension methods registers
8605         them.
8606         (Namespace.RegisterExternalExtensionMethodClass): Register type for later
8607         extension method lookup.
8608         (Namespace.LookupExtensionMethod): Looks for extension method in this
8609         namespace.
8610         (NamespaceEntry.LookupExtensionMethod): Does extension methods lookup to
8611         find a method which matches name and extensionType.
8612
8613         * parameter.cs (Parameter): Add This modifer.
8614         (HasExtensionMethodModifier): New property.
8615         (Resolve): Add extension parameter check.
8616         (ModFlags): turned to property to exclude this modifier as it is not real
8617         parameter modifier.
8618         (Parameters): Implemented ExtensionMethodType and HasExtensionMethodType.
8619
8620         * support.cs (ParameterData): Add ExtensionMethodType.
8621         (ReflectionParameters): Implemented ExtensionMethodType interface property.
8622
8623         * typemanager.cs: Add type and ctor extension attribute type.
8624
8625 2007-02-15  Miguel de Icaza  <miguel@novell.com>
8626
8627         * report.cs (DisableErrors, EnableErrors): used to prevent error
8628         output when we are "trying" to compile various methods with
8629         different types. 
8630
8631         * ecore.cs (Expression): Add Clone method that calls the virtual
8632         CloneTo method.  The current CloneTo method in Expression throws
8633         an exception so we can track down all the places where this must
8634         be implemented (not using abstract, because that would be a lot of
8635         up-front-work before we can start testing the implementation
8636         idea). 
8637
8638         Important: we only need Clone capabilities for expressions created
8639         by the parser, as the expressions we will be cloning are
8640         expressions in the pre-resolved state.   This vastly simplifies
8641         the work required. 
8642         
8643         (SimpleName): Add CloneTo that does nothing.
8644         (EmptyCast): Add CloneTo.
8645         
8646         * expression.cs (Binary): Implement CloneTo.
8647         (Invocation.IsApplicable): Store the current ec in
8648         EmitContext.TempEc and restore it on return.  This is used so we
8649         do not have to sprinkle hundres of methods with an extra
8650         EmitContext, we know that the only user is the lambda expression
8651         ImplicitConversionExists code. 
8652         
8653         (Argument): Add Cloning capabilities.
8654         (LocalVariableReference, ParenthesizedExpression, Unary, Probe,
8655         Cast, Conditional, ArrayCreation, InvocationOrCast, Invocation,
8656         ArglistAccess, ArgList, TypeOf, SizeOf, CheckedExpr,
8657         UnCheckedExpr, ElementAccess, BaseAccess, BaseIndexerAccess,
8658         IndexerAccess): Add Clone capability.
8659
8660         (LocalVariableReference, This): TODO: needs cloned Block mapping.
8661
8662         (Argument): Add cloning capability.
8663
8664         * assign.cs (Assign): Implement CloneTo.
8665
8666         * anonymous.cs (ImplicitStandardConversionExists): Make virtual.
8667         
8668         * lambda.cs (ImplicitStandardConversionExists): Implement lambda
8669         version by calling Convert with the EmitContext (that we are
8670         currently storing in ec, this is not great, but will do for now,
8671         to avoid passing EmitContext parameters to hundreds of functions
8672         that do not need them now).
8673
8674         (SetExpression): Remove, it is not needed.
8675         
8676         (ContextualReturn): Implement CloneTo.
8677
8678         * statement.cs (Statement): Implement cloning infrastructure,
8679         similar to expressions.
8680
8681         (Block): Partial implementation of Clone for statements.
8682
8683         (Return): Implement clone.
8684         
8685         * constant.cs (Constant.CloneTo): New method, does nothing.
8686
8687         * codegen.cs (TempEc): Add a static EmitContext as a temporary
8688         solution, until we decide how to exactly do this.  
8689         
8690 2007-02-14  Marek Safar  <marek.safar@gmail.com>
8691  
8692         A fix for bug #80493
8693         * class.cs (FindOutBaseMethod): When the base accessor does not exist and
8694         a property is override we need to use second accessor.
8695
8696 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8697  
8698         A fix for bug #80418
8699         * attribute.cs, class.cs: Use correct calling conventions for pinvoke
8700         methods.
8701
8702 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8703
8704         Another fix for bug #80749
8705         * pending.cs: Abstract class has priority over interfaces.
8706
8707 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8708
8709         Another fix for bug #80749
8710         * pending.cs: Abstract class has priority over interfaces.
8711
8712 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8713
8714         Another fix for bug #80749
8715         * pending.cs: Abstract class has priority over interfaces.
8716
8717 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8718
8719         Another fix for bug #80749
8720         * pending.cs: Abstract class has priority over interfaces.
8721
8722 2007-02-13  Marek Safar  <marek.safar@gmail.com>
8723
8724         * class.cs Better error message.
8725
8726         * driver.cs: Add shorter versions of -optimize option.
8727
8728 2007-02-13  Martin Baulig  <martin@ximian.com>
8729
8730         * class.cs (Constructor.Emit): Check the return value of
8731         ec.ResolveTopBlock() and return on error.
8732
8733 2007-02-13  Raja R Harinath  <rharinath@novell.com>
8734
8735         * ecore.cs (Error_InvalidExpressionStatement): Add a comma to error
8736         message to fix error message regression.
8737
8738 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8739
8740         * delegate.cs: Delegate creation expression cannot be of Nullable type.
8741
8742 2007-02-12  Marek Safar  <marek.safar@gmail.com>
8743
8744         A fix for bug #80749
8745         * assign.cs (FieldInitializer): FieldInitializer has to keep track of
8746         its parent container.
8747
8748         * class.cs (DefineFieldInitializers): Each initializer can has different
8749         resolve context.
8750
8751         * const.cs: Updated.
8752
8753 2007-02-11  Miguel de Icaza  <miguel@novell.com>
8754
8755         * lambda.cs (LambdaExpression.Compatible): Remove some early code,
8756         now all the heavy lifting to check that embedded statements or
8757         expressions have the right form is done in the ContextualReturn.
8758
8759         (ContextualReturn): New class.  
8760
8761         * ecore.cs (Error_InvalidExpressionStatement): Make a helper
8762         method that can be invoked to report 201, so we do not replicate
8763         this everywhere.
8764
8765         * cs-parser.jay: Reuse Error_InvalidExpressionStatement.
8766         
8767         * cs-tokenizer.cs (xtoken): Correctly compute the column, it was
8768         treating tabs as spaces. 
8769
8770 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8771
8772         A fix for bug #80315 by martin.voelkle@gmail.com (Martin Voelkle)
8773         * assign.cs: Use full implicit conversion for right side check.
8774
8775 2007-02-09  Marek Safar  <marek.safar@gmail.com>
8776
8777         * statement.cs (Switch): Switch over boolean type is not standardized.
8778
8779 2007-02-08  Marek Safar  <marek.safar@gmail.com>
8780
8781         A fix for bug #80755
8782         * decl.cs (FindBaseEvent): Don't use method cache for events.
8783
8784 2007-02-07  Marek Safar  <marek.safar@gmail.com>
8785
8786         * cs-parser.jay: Better syntax error handling.
8787
8788         * ecore.cs, enum.cs, statement.cs, typemanager.cs: Print enum member name
8789         instead of underlying type value.
8790
8791 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8792
8793         * driver.cs: Check define identifier before is registered.
8794
8795         * namespace.cs: Use existing error message.
8796
8797         * report.cs: New warning.
8798
8799 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8800
8801         A fix for bug #80742
8802         * expression.cs: Delegate Invoke method can be called directly.
8803
8804 2007-02-06  Marek Safar  <marek.safar@gmail.com>
8805
8806         A fix for bug #80676
8807         * class.cs (IsEntryPoint): The Main method can have params modifier.
8808
8809 2007-02-04  Miguel de Icaza  <miguel@novell.com>
8810
8811         * parameter.cs (Parameter, Parameters): Add Clone method.
8812
8813         * anonymous.cs (Compatible): Turn method into virtual method, so
8814         LambdaExpression can implement a different behavior.
8815
8816         (CompatibleChecks, VerifyExplicitParameterCompatibility): Factor
8817         out the basic checking here, so it can be used by
8818         LambdaExpressions.
8819         
8820         * lambda.cs: Introduce "Compatible" function that will do the
8821         heavy lifting.
8822
8823 2007-02-02  Marek Safar  <marek.safar@gmail.com>
8824
8825         * attribute.cs: Unified one error message.
8826
8827         * class.cs (Class): Use type attributes and not properties to test static
8828         class.
8829         (IsEntryPoint): Don's pass local variable.
8830
8831         * convert.cs: Removed duplicate check.
8832
8833         * decl.cs, doc.cs, ecore.cs (LookupType): Renamed to LookupNamespaceOrType.
8834
8835         * driver.cs: Don't crash when soft reference does not exist.
8836
8837         * namespace.cs (EnsureNamespace): Renamed to RegisterNamespace.
8838         (UsingEntry): Removed redundant allocation.
8839
8840         * parameter.cs: Add fast path for type parameters.
8841
8842         * support.cs: Don't allocate attribute when it's not used.
8843
8844 2007-01-30  Miguel de Icaza  <miguel@novell.com>
8845
8846         * anonymous.cs
8847         (AnonymousMethodExpression.ImplicitStandardConversionExists): turn
8848         this into a virtual method, so we can override it in LambdaExpression.
8849
8850         * driver.cs: Improve diagnostics in case of failure. 
8851
8852         * cs-tokenizer.cs: Instead of trying to parse a type and a name,
8853         write a function that is slightly more complex and that parses:
8854
8855         type identifier [, type identifier]* )
8856
8857         The old function would return incorrectly a OPEN_PARENS_LAMBDA for
8858         this expression:
8859
8860                 (canEmpty ? i >= 0 : i > 0)
8861
8862 2007-01-30  Raja R Harinath  <rharinath@novell.com>
8863
8864         * cs-tokenizer.cs (parse_namespace_or_typename): Don't throw an
8865         exception on possibly valid code.
8866
8867 2007-01-29  Raja R Harinath  <rharinath@novell.com>
8868
8869         * cs-tokenizer.cs (is_punct) ['<']: Update to changes in
8870         Push/PopPosition.
8871         (parse_opt_type_arguments): Remove.  It's almost the same as
8872         parse_less_than.
8873         (parse_namespace_or_typename): Use parse_less_than.
8874
8875 2007-01-28  Miguel de Icaza  <miguel@novell.com>
8876
8877         * cs-tokenizer.cs: Typo fix, its not GMCS_SOURCES but GMCS_SOURCE,
8878         this bug took a few hours to find, because the state saved and
8879         restored by PushPosition and PopPosition was ignoring the state of
8880         parse_generic_less_than.
8881
8882         I can also now remove the handling of OP_LT and OP_GT, this solves
8883         the big mistery.
8884         
8885         * cs-tokenizer.cs: store the location for the ARROW token, we use
8886         that in the parser.
8887
8888         (PushPosition, PopPosition): save/restore also `current_token',
8889         restore `parse_generic_less_than' (was missing).
8890
8891         (parse_opt_type_arguments): use parse_type, not
8892         parse_namespace_or_typename to parse types.
8893
8894         * lambda.cs: Empty new file, will eventually have the lambda
8895         expression implementation.
8896
8897         * lambda.test: used to test the internal tokenizer. 
8898
8899         * report.cs (FeatureIsNotISO1): Rename from
8900         FeatureIsNotStandardized, because it was about the language level
8901         (1 vs 2) it was not about standarization.
8902
8903         (FeatureRequiresLINQ): New.
8904
8905         * support.cs (SeekableStreamReader): Only require that the reader
8906         is a TextReader, not a StreamReader, so we can plug StringReader. 
8907
8908         * cs-tokenizer.cs (parse_type_and_parameter): Returns true if at a
8909         given position in the input stream the following tokens can be
8910         parsed as a type followed by an identifier.
8911
8912         (is_punct): after a '(' if parse_type_and_parameter returns true,
8913         then return a special token OPEN_PARENS_LAMBDA which is used to
8914         avoid reduce/reduce errors in the grammar for the
8915         lambda_expression rules.
8916
8917         (parse_type): implement a type parser inside the
8918         tokenizer, the parser only returns true or false depending on
8919         whether the input at a given position can be parsed as a type.
8920
8921         (peek_token): new method used during type parsing.
8922
8923 2007-01-28  Raja R Harinath  <rharinath@novell.com>
8924
8925         Fix #80531
8926         * anonymous.cs (ScopeInfo.InflateParameters): New.
8927         (AnonymousContainer.Resolve): Use it to redirect types of
8928         delegate parameters.
8929
8930 2007-01-27  Raja R Harinath  <rharinath@novell.com>
8931
8932         Fix #80530
8933         * expression.cs (Error_InvalidArguments): Don't use two different
8934         messages for CS1503.  Use ExtraInformation and
8935         SymbolRelatedToPreviousError instead.
8936
8937         Fix #80358
8938         * decl.cs (DeclSpace.initialize_type_params): Don't access
8939         'type_params' of a partial class directly.
8940
8941 2007-01-26  Miguel de Icaza  <miguel@novell.com>
8942
8943         * constant.cs: Removed a handful of out-of-range checks that were
8944         not necessary. 
8945
8946 2007-01-25  Marek Safar  <marek.safar@gmail.com>
8947
8948         * expression.cs (CheckUselessComparison): Add additional check for char
8949         constants.
8950
8951         * namespace.cs: Fixed typo.
8952
8953 2007-01-23  Miguel de Icaza  <miguel@novell.com>
8954
8955         * constant.cs: Bloat removal, CheckRange and CheckUnsigned are
8956         gone, instead we inline the test, preventing the needless casts to
8957         longs, ulongs and doubles for the parameters, avoiding calls to
8958         methods that overchecked stuff, and instead inlined things
8959         nicely. 
8960
8961 2007-01-20  Marek Safar  <marek.safar@gmail.com>
8962
8963         * cs-parser.jay: Better parameter error handling.
8964
8965 2007-01-17  Marek Safar  <marek.safar@gmail.com>
8966
8967         A fix for bug #80368, #80522
8968         * expression.cs (ArrayCreation.only_constant_initializers): Indicates
8969         whether array initializer contains constants only.
8970         (ArrayCreation.Emit): Use better formula to decide when
8971         are array initializers for static initialization.
8972         (ArrayCreation.EmitDynamicInitializers): When the array is small enough we
8973         have to emit even constants otherwise they are pre-initialized.
8974
8975 2007-01-17  Bill Holmes  <bill.holmes@ansys.com>
8976             Raja R Harinath  <rharinath@novell.com>
8977
8978         Fix emit order of 'get' vs. 'set'.
8979         * support.cs (Accessors): New.
8980         * cs-parser.jay (accessor_declarations): Use it instead of 'Pair'.
8981         Note the order in which accessors are declared in the source.
8982         * class.cs (PropertyBase.DefineGet, PropertyBase.DefineSet): New.
8983         Refactored from Property.Define and Indexer.Define.
8984         (PropertyBase.DefineAccessors): New helper that calls the above in
8985         appropriate order as noted by the parser.
8986         (Property.Define, Indexer.Define): Update to changes.
8987         (PropertyBase.SetMethod.PropertyInfo): Don't return a null.
8988
8989 2007-01-17  Raja R Harinath  <rharinath@novell.com>
8990
8991         Fix cs0029-6.cs and gcs0029-2.cs (regression)
8992         * ecore.cs (EmptyConstantCast.ConvertImplicitly): Check that
8993         there's an implicit conversion from the current type to the target
8994         type before converting the underlying constant.
8995
8996 2007-01-16  Marek Safar  <marek.safar@gmail.com>
8997
8998         * const.cs (ResolveValue): Updated after constant conversion was made more
8999         generic.
9000
9001         * constant.cs (GetAttributableValue): constant to object conversion is
9002         used for attributes only.
9003         (IntConstant.ConvertImplicitly): Moved from convert to be used in all
9004         constant conversions.
9005         (LongConstant.ConvertImplicitly): Ditto.
9006
9007         * convert.cs (ImplicitNumericConversion): Extracted constant bussiness.
9008         (ImplicitConversionStandard): Handle constant conversion as extra step.
9009         It solves the issue when constant conversion was called indirectly like
9010         inside array initializer and constant folding was skipped.
9011
9012         * literal.cs (NullLiteral.ConvertImplicitly): Fixed an issue exposed by
9013         this change.
9014
9015         * statement.cs(ImplicitConversionStandard): Updated after constant
9016         conversion was made more generic.
9017
9018 2007-01-16  Sergey P. Kondratyev <se@unicom.tomica.ru>
9019
9020         * expression.cs (As.DoResolve): Use GenericConstraints instead of
9021         Constraints, solves the problem where the compiler incorrectly
9022         reported that a type parameter was not constrained to a class (Bug
9023         80518)
9024
9025 2007-01-14  Marek Habersack  <grendello@gmail.com>
9026
9027         * doc-bootstrap.cs: Fix a compilation problem in the bootstrap phase.
9028
9029 2007-01-14  Marek Safar  <marek.safar@gmail.com>
9030
9031         A fix for bug #80368
9032         * assign.cs (FieldInitializer): New class implements field
9033         initializer statement.
9034
9035         * attribute.cs: Update after FieldMember rename.
9036
9037         * class.cs (PropertyBasedMember): New common class for property based
9038         types.
9039         (InterfaceMemberBase): New base class for all members which can be used as
9040         an interface members.
9041         (MethodCore): Moved really common code to InterfaceMemberBase.
9042         (Method.Define): Equal and GetHasCode detection is relevant for methods
9043         only.
9044         (MethodData.Define): Don't assume that public event implements an
9045         interface automatically.
9046         (MethodData.DefineMethodBuilder): Issue an error even if only extern
9047         modifier is used.
9048         (MemberBase): Moved all interface speficic code to InterfaceMemberBase.
9049         (FieldMember): Merged with FieldBase.
9050         (EventProperty.AEventPropertyAccessor): New specialization to check whether
9051         event extern modifier can be used.
9052         (EventField.EventFieldAccessor): Moved event field specific code here.
9053         (Event.AllowedModifiers): Even event can be extern.
9054         (Event.FindOutBaseMethod): New override specific to events.
9055         (Indexer.parameters): Reintroduce parameters because base class holds
9056         only properties common data.
9057         (Indexer.CheckForDuplications): Indexers are threated as methods so we
9058         need do extra parameters check.
9059
9060         * const.cs: Update after FieldMember rename.
9061
9062         * decl.cs (MemberCache.FindBaseEvent): New method.
9063
9064         * doc.cs (GetMethodDocCommentName): Accept parameters as extra argument
9065         to reflect that indexer is now derived from PropertyBased.
9066
9067         * ecore.cs (GetMemberType): Made public.
9068         (EventExpr.ResolveMemberAccess): Use right event cache and checks for
9069         obsolete event.
9070
9071         * flowanalysis.cs, statement.cs: Update after FieldMember rename.
9072         
9073         * typemanager.cs (CSharpSignature): Correctly print event accessors.
9074         (RegisterEvent): Removed.
9075         (RegisterPrivateFieldOfEvent): Renamed to RegisterEventField.
9076         (GetPrivateFieldOfEvent): Renamed to GetEventField.
9077
9078 2007-01-11  Raja R Harinath  <rharinath@novell.com>
9079
9080         Fix #80249
9081         * statement.cs (CollectionForeach.TryType): Prefer generic
9082         GetEnumerator over non-generic variant.  Fix code to follow comments.
9083
9084 2007-01-09  Raja R Harinath  <rharinath@novell.com>
9085
9086         Fix #80446
9087         * support.cs (ReflectionParameter): Don't use an invalid index on
9088         the generic parameter data.
9089
9090 2007-01-08  Miguel de Icaza  <miguel@novell.com>
9091
9092         * driver.cs: Just add a tiny bit of infrastructure.
9093
9094 2007-01-02  Marek Safar  <marek.safar@gmail.com>
9095
9096         * class.cs (VerifyMembers): Fixed an crash reported on mono mailing list
9097         where field type is struct from current assembly.
9098         
9099         * ecore.cs (EnumConstant.AsString): Report an enum member name whenever
9100         it is possible.
9101
9102 2007-01-02  Marek Safar  <marek.safar@gmail.com>
9103
9104         A fix for bug #80381
9105         * attribute.cs (AttributeTester.RegisterNonObsoleteType): Registers
9106         the core types.
9107
9108         * namespace.cs (GlobalRootNamespace.LookupTypeReflection): Better error
9109         messages.
9110         (Namespace.LookupType): Always use core types from corlib when speficied.
9111
9112         * report.cs: A new warning.
9113
9114         * rootcontext.cs (BootstrapCorlib_ResolveInterface,
9115         BootstrapCorlib_ResolveClass): Register type as non-obsolete type.
9116         (ResolveCore): Add missing System.Runtime.InteropServices._Attribute.
9117
9118         * typemanager.cs (CoreLookupType): Register type as non-obsolete type.
9119         (InitCoreTypes): Set expression type of object_type and value_type
9120         immediately after lookup.
9121
9122 2007-01-01  Miguel de Icaza  <miguel@novell.com>
9123
9124         * cs-tokenizer.cs: Accept Pc class characters (Connector
9125         Punctuation) as valid identifiers.  Fixes #78259
9126
9127         * expression.cs (Invocation.DoResolve): Moved the check for the
9128         use of `this' for doing method calls to the Invocation resolution
9129         step, after overload resolution has taken place instead of doing
9130         the check at the low-level `This.DoResolve' level.
9131
9132         The `This.DoResolve'(appens before overload resolution, so it has
9133         no way of knowing if the method that will be called will be
9134         instace or static, triggering an erroneous report for cs0188 (Bug
9135         78113).
9136
9137         We now do the check for instance method invocations after we know
9138         what method will be called.
9139
9140         (This.CheckThisUsage): Move the actual use of this structure
9141         checking into its own method and expose it. 
9142
9143         * Everywhere that called Error_ValueCannotBeConverted: pass a new
9144         EmitContext.
9145
9146         Exceptions: Null.ConvertImplicitly,
9147         Constant.ImplicitConversionRequired as there are too many call
9148         sites for passing the ec. 
9149
9150         * ecore.cs (Expression.Error_ValueCannotBeConverted): Take an
9151         EmitContext, if the value is null, then we do not try to provide
9152         the extra information from the error (If a userdefined conversion
9153         exists, as UserDefinedConversion requires a non null-EmitContext).
9154
9155         Fixes: #80347
9156
9157 2006-12-30  Raja R Harinath  <rharinath@novell.com>
9158
9159         * flowanalysis.cs (MyBitVector): Document some invariants.
9160         (MyBitVector.Or, MyBitVector.And): Reimplement the optimizations
9161         introduced below, and add a couple of others, 
9162
9163 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9164
9165         * attribute.cs (GetMethodObsoleteAttribute): Uses new
9166         GetPropertyFromAccessor and GetEventFromAccessor.
9167         
9168         * class.cs (MethodCore.CheckBase): A new warning when obsolete member
9169         overrides non-obsolete one.
9170         (Indexer.Define): Error message has been moved to the parser.
9171
9172         * cs-parser.jay: Better syntax errors handling.
9173
9174         * delegate.cs (NewDelegate.DoResolve): Issue less confusing error message
9175         when an invocation has no arguments.
9176
9177         * ecore.cs: Removed not used caching.
9178
9179         * expression.cs (IsSpecialMethodInvocation): Reuses TypeManager
9180         implementation.
9181
9182         * report.cs: Add a new warning.
9183
9184         * support.cs (ReflectionParameters): Implements Equals, GetHashCode.
9185
9186         * typemanager.cs (enumeration_type): Removed.
9187         (CSharpSignature): Reuses IsSpecialMethod.
9188         (IsEqual): Hack for MS BCL.
9189         (GetPropertyFromAccessor): New method.
9190         (GetEventFromAccessor): New method.
9191         (IsSpecialMethod): Fixed to handle more cases.
9192
9193 2006-12-30  Marek Safar  <marek.safar@gmail.com>
9194
9195         * cs-tokenizer.cs (PreProcessDefinition, handle_preprocessing_directive):
9196         Made white spaces array static.
9197
9198         * ecore.cs (RemoveGenericArity): Optimized.
9199
9200         * flowanalysis.cs (MyBitVector.Or, MyBitVector.And): Optimized (up to
9201         10 times faster).
9202         (MyBitVector.initialize_vector): Simplified.
9203
9204 2006-12-22  Miguel de Icaza  <miguel@novell.com>
9205
9206         * ecore.cs: Am not entirely happy with this hack, but it seems to
9207         address the issue in 80257 (a small test case for
9208         CreativeDocs.NET). 
9209
9210         I set the MethodGroupExpr.Type to an internal compiler type
9211         (itself in this case) to force the resolution to take place.   Why
9212         it does not take place with a null is beyond me.
9213
9214 2006-12-20  Marek Safar  <marek.safar@gmail.com>
9215
9216         A fix for bug #80288
9217         * expression.cs (ResolveOperator): Consider user defined conversion for
9218         logical and operator too.
9219         (EmitBranchable): Optimization for logical and when full constant folding
9220         could not be applied but one operand is constant.
9221
9222 2006-12-19  Marek Safar  <marek.safar@gmail.com>
9223
9224         * class.cs (GetClassBases): Write 5 times every day, will never use
9225         FullName for error reporting.
9226
9227         * decl.cs (AsAccessible, CheckAccessLevel): Always unpack arrays first.
9228
9229 2006-12-19  Martin Baulig  <martin@ximian.com>
9230
9231         * statement.cs (LocalInfo.EmitSymbolInfo): New public method; emit
9232         the symbol file info here.
9233
9234 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9235
9236         * cs-tokenizer.cs (handle_preprocessing_directive): When previous section
9237         of `elseif' is taking then following sections are not taking.
9238         Fixes an issue reported on mono mailing list.
9239
9240 2006-12-18  Marek Safar  <marek.safar@gmail.com>
9241
9242         A fix for bug #80300
9243         * cs-tokenizer.cs (PreProcessDefinition): Do no define/undefine when
9244         a caller is not taking.
9245
9246 2006-12-18  Raja R Harinath  <rharinath@novell.com>
9247
9248         * anonymous.cs: Change several TypeContainer declarations to DeclSpace.
9249         (CompilerGeneratedClass): Use parent.PartialContainer unconditionally.
9250         (RootScopeInfo, AnonymousMethodMethod): Update to changes.
9251         * iterator.cs: Change several TypeContainer declarations to DeclSpace.
9252         * class.cs: Update to changes.
9253
9254 2006-12-17  Marek Safar  <marek.safar@gmail.com>
9255
9256         A fix for bug #79934
9257         * anonymous.cs (CompilerGeneratedClass): Register class in a shared
9258         partial container.
9259
9260         * class.cs (ResolveMembers): Register an iterator in current container and
9261         not in shared one.
9262
9263 2006-12-16  Raja R Harinath  <rharinath@novell.com>
9264
9265         Fix test-543.cs
9266         * expression.cs (VerifyArgumentsCompat): Allow zero arguments to
9267         satisfy a params annotated parameter.
9268
9269 2006-12-16  Marek Safar  <marek.safar@gmail.com>
9270
9271         A fix for bug #77014
9272         * expression.cs (Invocation.BetterFunction): Fixed to cope with dynamic
9273         paramters correctly and not rely on hacks in Parameters class.
9274         (Invocation.IsParamsMethodApplicable): Changed to accept params parameter
9275         at any possition.
9276         (Invocation.VerifyArgumentsCompat): Ditto.
9277         (Invocation.EmitArguments): Changed to correctly emit params arguments at
9278         any possition.
9279
9280         * parameter.cs (HasParams): Don't assume that params is the last one.
9281
9282         * support.cs (ReflectionParameters.ctor): Look for params attribute
9283         correctly.
9284         (ReflectionParameters.ParameterType): Removed hack when we returned last
9285         parameter for out of range parameters.
9286         (ParameterName, ParameterModifier): Ditto.
9287
9288 2006-12-14  Marek Safar  <marek.safar@gmail.com>
9289
9290         A fix for bug #79987
9291         * decl.cs (DeclSpace.VerifyClsCompliance): External names cache is null
9292         when assembly is not CLS compliant but type is. I have no idea why is this
9293         allowed.
9294
9295         * typemanager.cs (Reset): Invalidate AllClsTopLevelTypes cache.
9296
9297 2006-12-13  Miguel de Icaza  <miguel@novell.com>
9298
9299         * class.cs (ConstructorInitializer.Resolve): Allow for ":this()"
9300         in struct constructors, they are basically no-ops.
9301
9302 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9303
9304         * cs-tokenizer.cs (Position): Save preprocessor status too.
9305
9306 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9307
9308         A fix for bug #77794
9309         * cs-tokenizer.cs (consume_identifier): Check for correct partial context.
9310
9311 2006-12-12  Marek Safar  <marek.safar@gmail.com>
9312
9313         * cs-tokenizer.cs (get_cmd_arg): Support CR as the line terminator.
9314         Fixes #69299.
9315         (pp_expr): Report error for an invalid expression.
9316         (handle_preprocessing_directive): Simplified; add more error checking.
9317
9318 2006-12-11  Marek Safar  <marek.safar@gmail.com>
9319
9320         A fix for bug #74939
9321         * cs-tokenizer.cs (is_punct): We cannot simply disable preprocessor
9322         directives handling.
9323
9324 2006-12-10  Marek Safar  <marek.safar@gmail.com>
9325
9326         A fix for bugs #80093, and #75984
9327         * cs-tokenizer.cs (handle_preprocessing_directive): Fixed #if/#else/#endif
9328         logic, it seems to me as it worked before "by coincidence".
9329         (xtoken): Simplified to use reworked handle_preprocessing_directive.
9330         (cleanup): Enabled endif check.
9331
9332 2006-12-09  Marek Safar  <marek.safar@gmail.com>
9333
9334         A fix for bug #80162
9335         * statement.cs (CollectionForeach.TryType): Generics and non-generics
9336         enumerators are never ambiguous.
9337
9338 2006-12-08  Raja R Harinath  <rharinath@novell.com>
9339
9340         Fix #80060
9341         * cs-tokenizer.cs (parse_less_than): Recognize double-colons too.
9342
9343 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9344
9345         A fix for bug #80144
9346         * class.cs (EventProperty.Define): Explicit implementation means
9347         that an even is used.
9348
9349 2006-12-06  Marek Safar  <marek.safar@gmail.com>
9350
9351         Fixes the operators implementation (part II)
9352
9353         * cfold.cs (DoConstantNumericPromotions): Renamed to
9354         DoBinaryNumericPromotions and simplified.
9355         (BinaryFold): Couple of conversion fixes; simplified.
9356
9357         * constant.cs, ecore.cs, literal.cs
9358         (ToType): Renamed to ConvertImplicitly.
9359         (Reduce): Renamed to ConvertExplicitly.
9360
9361         * class.cs, convert.cs: Updated.
9362
9363         * expression.cs: TryReduce doesn't throw an exception.
9364
9365 2006-12-01  Marek Safar  <marek.safar@gmail.com>
9366
9367         A fix for bug #80108
9368         * ecore.cs (EventExpr.EmitAddOrRemove): Don't crash when right side is not
9369         compatible.
9370
9371 2006-11-30  Marek Safar  <marek.safar@gmail.com>
9372
9373         Fixes unary operators implementation (part I)
9374         Also fixes #80026
9375
9376         * cfold.cs (Error_CompileTimeOverflow): Made internal
9377
9378         * const.cs (IConstant): Changed to use reference to constant and
9379         not constant itself.
9380         Updated IConstant implementations.
9381
9382         * constant.cs (CreateConstant): New factory method.
9383         Updated IConstant implementation.
9384
9385         * convert.cs (ImplicitStandardConversionExists): Uses compiler Equals.
9386
9387         * ecore.cs: Updated to use CreateConstantReference.
9388
9389         * enum.cs: Reflects IConstant changes.
9390
9391         * expression.cs (Unary): Reimplemented +,-,~ to conform C# standard.
9392
9393         * literal.cs (NullConstant): Change to be independently usable.
9394
9395 2006-11-29  Martin Baulig  <martin@ximian.com>
9396
9397         * class.cs (Constructor.Emit): Correctly handle anonymous methods;
9398         we need to emit the scope initializer before calling the base .ctor.
9399
9400         * anonymous.cs: Merged back from the new anonymous methods branch.
9401         (AnonymousMethodHost): Renamed to `RootScopeInfo'.
9402
9403         * expression.cs (ParameterReference.DoResolveBase): Create a
9404         "normal" ScopeInfo when capturing parameters rather than using the
9405         root scope; this makes things work with anonymous methods having
9406         parameters.
9407
9408         * statement.cs
9409         (ToplevelBlock.AnonymousMethodHost): Renamed into `RootScope'.
9410
9411 2006-11-22  Marek Safar  <marek.safar@gmail.com>
9412
9413         A fix for bug #79987
9414         * class.cs (VerifyClsCompliance): Move redundant CLS compliance attribute
9415         check to a base class.
9416         * decl.cs (VerifyClsCompliance): Warn that CLS compliance cannot be tested
9417         only when assembly has missing attribute.
9418         * report.cs: Update.
9419
9420 2006-11-21  Marek Safar  <marek.safar@gmail.com>
9421
9422         * cs-tokenizer.cs: Merged with gmcs version.
9423
9424 2006-11-20  Marek Safar  <marek.safar@gmail.com>
9425
9426         * cs-tokenizer.cs,
9427         * cs-parser.jay: Better error message when partial keyword is misplaced.
9428
9429 2006-11-19  Gert Driesen  <drieseng@users.sourceforge.net>
9430
9431         A fix for bug #79810
9432         report.cs: CS1058 only applies to 2.0 profile (gmcs).
9433         codegen.cs: on 2.0 profile, non-exception throwables are wrapped in
9434         a RuntimeWrappedException by default.
9435
9436 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9437
9438         A fix for bug #79843
9439         * delegate.cs (Delegate.VerifyMethod): Fixed covariance and contravariance
9440         implementation.
9441         (DelegateCreation.Error_NoMatchingMethodForDelegate): Ditto.
9442
9443 2006-11-18  Marek Safar  <marek.safar@gmail.com>
9444
9445         * driver.cs, namespace.cs: Uses faster IndexOf version.
9446
9447 2006-11-17  Marek Safar  <marek.safar@gmail.com>
9448
9449         A fix for bug #79941
9450         * class.cs (MemberCore.IsDuplicateImplementation): Add more tricks for
9451         operators.
9452         (Operator.Define): Implicit/Explicit operator of same type is duplicate
9453         even if internal name is different.
9454         * convert.cs (GetConversionOperator): Replaced EmitContext with parentType.
9455         (UserDefinedConversion): Simplified as the operators cannot be internal.
9456         * ecore.cs (Error_ValueCannotBeConverted): Take account of user
9457         conversions.
9458         (MethodLookup): Replaced EmitContext with parentType.
9459         * expression.cs: Updated.
9460
9461 2006-11-09  Raja R Harinath  <rharinath@novell.com>
9462
9463         * driver.cs (BadAssembly): Handle all the ugliness of
9464         DefineDynamicAssembly.
9465
9466 2006-11-08  Raja R Harinath  <rharinath@novell.com>
9467
9468         Address parts of #58244 -- most of what's left is in the runtime
9469         * driver.cs (LoadAssembly): Simplify slightly.  Add CS0009 and
9470         CS1509 error checks, and handle them for all assembly loads, not
9471         just the first invocation.
9472         (LoadModule): Likewise.  Move handling of 'adder_method' ...
9473         * codegen.cs (AssemblyClass.AddModule): ... here.
9474
9475 2006-11-02  Marek Safar  <marek.safar@gmail.com>
9476
9477         * statement.cs.cs (CollectionForeach.TryType): Issue a error when
9478         IEnumerable<T> is ambiguous.
9479
9480 2006-10-31  Marek Safar  <marek.safar@gmail.com>
9481
9482         A fix for bug #67689
9483         * statement.cs.cs (CollectionForeach.TryType): Issue a warning when
9484         GetEnumerator is ambiguous.
9485
9486         * report.cs: Add new warning.
9487
9488 2006-10-29  Marek Safar  <marek.safar@gmail.com>
9489
9490         A fix for bug #78602
9491         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9492         to protected member can be nested type.
9493
9494 2006-10-28  Marek Safar  <marek.safar@gmail.com>
9495
9496         A fix for bug #78965
9497         ecore.cs (PropertyExpr.InstanceResolve): The qualifier for access
9498         to protected member must derive from current type.
9499
9500 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9501
9502         assign.cs: Reuses error method.
9503
9504         ecore.cs (Expression.Error_ValueCannotBeConverted): Report a value
9505         instead of type for constants.
9506         (Expression.Error_ValueAssignment): Common error method.
9507
9508         * expression.cs (UnaryMutator.ResolveOperator): Value cannot be used
9509         for any assignment.
9510
9511 2006-10-27  Marek Safar  <marek.safar@gmail.com>
9512
9513         A fix for bug #79081
9514         * expression.cs (MemberAccess.DoResolve): Check nested type
9515         accessibility.
9516
9517 2006-10-27  Atsushi Enomoto  <atsushi@ximian.com>
9518
9519         * doc.cs : nested delegates were not handled. Fixed bug #79754.
9520
9521 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9522
9523         A fix for bug #76591
9524         * cs-tokenizer.cs (IsCastToken): Enable a cast of anonymous method.
9525
9526 2006-10-26  Marek Safar  <marek.safar@gmail.com>
9527
9528         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Don't allow to have
9529         type forwarder of the same type multiple times.
9530
9531 2006-10-26  Raja R Harinath  <rharinath@novell.com>
9532
9533         Fix #78820
9534         * ecore.cs (PropertyExpr.InstanceResolve): Always resolve the
9535         instance as an rvalue, even when we later resolve as an lvalue.
9536
9537 2006-10-25  Martin Baulig  <martin@ximian.com>
9538
9539         * anonymous.cs: Fix #79673.
9540
9541 2006-10-24  Marek Safar  <marek.safar@seznam.cz>
9542
9543         A fix for bug #79666
9544         expression.cs (ArrayCreation.GetAttributableValue): An initializer can be
9545         ignored when is optimized (= default value) as its value is already set.
9546
9547 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9548
9549         A fix for bug #79724
9550         * report.cs (SymbolRelatedToPreviousError): Uses DeclSpace instead of
9551         TypeContainer for type lookup.
9552
9553 2006-10-23  Marek Safar  <marek.safar@seznam.cz>
9554
9555         A fix for bug #79231
9556         * ecore.cs (ResolveAsBaseTerminal): Removed redundant error test.
9557         * expression.cs (OverloadResolve): Always convert type name for
9558         an error message.
9559         (ResolveNamespaceOrType): Don't confuse a nested type with any 
9560         other member.
9561
9562 2006-10-18  Martin Baulig <martin@ximian.com>
9563
9564         * anonymous.cs: Propagate the IsStatic state, fixes the crasher in banshee.
9565
9566 2006-10-17  Miguel de Icaza  <miguel@novell.com>
9567
9568         * convert.cs: Fix typo, fixes the test-535.cs, we were casting to
9569         an int32, but requesting an int64 from the conversion
9570
9571 2006-10-12  Martin Baulig  <martin@ximian.com>
9572
9573         * anonymous.cs
9574         (AnonymousContainer.Resolve): Inflate the `ReturnType'.  Fixes #79592.
9575         
9576 2006-10-12  Martin Baulig  <martin@ximian.com>
9577
9578         * statement.cs
9579         (Using.EmitLocalVariableDeclFinally): Small fix for iterators.
9580
9581 2006-10-11  Miguel de Icaza  <miguel@novell.com>
9582
9583         * convert.cs: Remove broken code: I was doing the "Existance"
9584         tests for Implicit conversions.
9585
9586 2006-10-10  Miguel de Icaza  <miguel@novell.com>
9587
9588         * convert.cs: Added one missing case in
9589         ImplicitStandardConversionExists uint64 to intptr.
9590
9591         Fixes #59800
9592         
9593         * typemanager.cs (uintptr_type): another core known type.   
9594
9595         * ecore.cs (OperatorCast): routine used to do cast operations that
9596         depend on op_Explicit.  We could change some of the Decimal
9597         conversions to use this.
9598
9599         This one has a probe mechanism that checks both types for an op_
9600         which it coudl be used to eliminate two classes: CastToDecimal
9601         and CastFromDecimal.
9602
9603         * convert.cs: Implement the conversions documented in #59800
9604         
9605 2006-10-10  Martin Baulig  <martin@ximian.com>
9606
9607         * iterators.cs (Iterator.Resolve): Call RootScope.ResolveType()
9608         before RootScope.ResolveMembers().
9609
9610         * anonymous.cs (ScopeInfo.CapturedScope.ctor): Use the child's
9611         `CurrentType' if appropriate.
9612
9613 2006-10-09  Marek Safar  <marek.safar@seznam.cz>
9614
9615         A fix for bug #78568
9616         * cs-tokenizer.cs (Deambiguate_CloseParens): Expression cannot be cast
9617         when contains binary operators.
9618         * cs-parser.jay: Updated.
9619
9620 2006-10-09  Martin Baulig  <martin@ximian.com>
9621
9622         * delegate.cs
9623         (Delegate.DefineType): Don't call TypeParameter.Resolve() here;
9624         moved that into Define() and also do the other type parameter
9625         checks there.  Fixes #79094.  Added gtest-292.cs.
9626
9627         * expression.cs
9628         (ArrayCreation.EmitDynamicInitializers): Use `etype.IsValueType'
9629         since that doesn't include type parameters; don't use `Ldelema'
9630         for type parameters.  Fixes #78980.  Added gtest-293.cs.
9631
9632 2006-10-08  Marek Safar  <marek.safar@seznam.cz>
9633
9634         A fix for #77796
9635         * convert.cs (ExplicitReferenceConversion): Only enum to enum value
9636         conversion is allowed.
9637
9638 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9639
9640         * ecore.cs (Expression.MemberLookup): Don't register any symbol for
9641         error reporting when no error occurs.
9642
9643 2006-10-06  Marek Safar  <marek.safar@seznam.cz>
9644
9645         * cfold.cs (ConstantFold.BinaryFold): Report an error when the conversion
9646         does not exist.
9647
9648 2006-10-06  Raja R Harinath  <rharinath@novell.com>
9649
9650         Fix #79584
9651         * class.cs (DefineTypeBuilder): Check circular dependencies before
9652         setting the parent of the TypeBuilder.
9653         (CheckRecursiveDefinition): Don't use 'BaseType', since
9654         it may not be valid until after DefineTypeBuilder.  Use
9655         'base_type' instead.
9656
9657 2006-10-04  Martin Baulig  <martin@ximian.com>
9658
9659         Merged the Anonymous Methods patch.
9660
9661         * anonymous.cs, iterators.cs: The new anonymous methods code.
9662
9663         * statement.cs (Variable): New public abstract class.
9664         (LocalInfo.Variable): New public property.
9665         (LocalInfo.ResolveVariable): New public method.
9666         (Block.Flags): Add `IsIterator'.
9667         (Block.AddVariable): Improved the CS0136 check.
9668         (Block.AnonymousChildren): New public property.
9669         (Block.AddAnonymousChild): New public method.
9670         (ToplevelBlock): Update to use the new anonymous method framework.
9671         (ToplevelBlock.ctor): `container' is now a `Block' and not a
9672         `ToplevelBlock'; this is required to correctly implement the
9673         CS0136 check.
9674         (Fixed, Using): Use `TemporaryVariable' instead of directly
9675         creating the `LocalBuilder'.
9676
9677         * parameter.cs (Parameter.ResolveVariable): New public method.
9678         (Parameters.ResolveVariable): Likewise.
9679
9680         * ecore.cs (TemporaryVariable): Use the new `Variable' framework.
9681
9682         * class.cs (TypeContainer): Replaced the `iterators' list and
9683         corresponding methods with a list of `CompilerGeneratedClass'es.
9684         (TypeContainer.ResolveMembers): New public method.
9685         (Method): `IIteratorContainer' has been replaced by
9686         `IAnonymousHost'.
9687
9688         * expression.cs (VariableReference): New public abstract base
9689         class for `LocalVariableReference', `ParameterReference' and
9690         `This'.
9691
9692         * codegen.cs (EmitContext): Removed `capture_context',
9693         `HaveCaptureInfo', `EmitScopeInitFromBlock()' and `Capture*()'.
9694         (EmitContext.EmitThis): Removed.
9695
9696         * cs-parser.jay: Replace `iterator_container' with
9697         `anonymous_host'.       
9698
9699 2006-10-04  Martin Baulig  <martin@ximian.com>
9700
9701         * generic.cs (GenericMethod): Don't make this abstract.
9702         (Constraints.Clone): Added dummy implementation.
9703
9704 2006-10-04  Raja R Harinath  <harinath@gmail.com>
9705
9706         Fix #79577
9707         * namespace.cs (LookForAnyGenericType): Avoid nullref on
9708         'declspaces'.  Avoid allocating arrays willy-nilly.
9709
9710         Fix #79553
9711         * cfold.cs (BinaryFold): Move boolean Equality and Inequality
9712         cases out of the switch.
9713
9714 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9715
9716         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Better error
9717         message when non-generic type is used with the type arguments.
9718         * expression.cs: Updated.
9719
9720 2006-09-28  Raja R Harinath  <rharinath@novell.com>
9721
9722         Fix #79013
9723         * convert.cs (Convert.ImplicitStandardConversionExists): Avoid infloop.
9724         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
9725         Change semantics slightly.  Don't insist on having only one
9726         temporary EmptyExpression -- just throttle the creation of new ones.
9727
9728         Fix #79451
9729         * ecore.cs (Expression.MemberLookup): Enable CS0229 errors for
9730         non-interfaces too.  If no methods are found, don't try to create
9731         a MethodGroupExpr.
9732
9733 2006-09-28  Marek Safar  <marek.safar@seznam.cz>
9734
9735         * ecore.cs (ResolveAsTypeStep): Print better error when type can be
9736         generic type.
9737
9738         * namespace.cs (Namespace.LookForAnyGenericType): New method to help
9739         us produce better error message.
9740
9741 2006-09-27  Marek Safar  <marek.safar@seznam.cz>
9742
9743         * expression.cs (Binary.ResolveOperator): Warn about a side effect
9744         of the `|' operator.
9745
9746         * report.cs: A new warning added.
9747
9748 2006-09-27  Martin Baulig  <martin@ximian.com>
9749
9750         * generic.cs (GenericMethod): Don't make this abstract.
9751
9752 2006-09-27  Martin Baulig  <martin@ximian.com>
9753
9754         * report.cs
9755         (InternalErrorException): Added overloaded ctor taking a params array.
9756
9757 2006-09-26  Marek Safar  <marek.safar@seznam.cz>
9758
9759         * class.cs, codegen.cs, const.cs, cs-tokenizer.cs, driver.cs, ecore.cs:
9760         Fixed the cases when same error was reported twice.
9761
9762         * report.cs (SymbolRelatedToPreviousError): Simplified as all our messages
9763         now report symbol information.
9764
9765 2006-09-25  Martin Baulig  <martin@ximian.com>
9766
9767         * class.cs: Completely unified with the gmcs version.
9768
9769 2006-09-25  Martin Baulig  <martin@ximian.com>
9770
9771         * typemanager.cs (TypeManager.IsNullableType): New public function.
9772         (TypeManager.IsNullableTypeOf): Likewise.
9773         (TypeManager.IsNullableValueType): Likewise.
9774
9775         * class.cs (MethodCore): Added the `GenericMethod' argument from
9776         gmcs and also unified all classes derived from `MethodCore' with gmcs.
9777
9778 2006-09-24  Raja R Harinath  <harinath@gmail.com>
9779
9780         * convert.cs: Unify with gmcs version.
9781
9782 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9783
9784         * decl.cs (DeclSpace.VerifyClsCompliance): When type has type parameters
9785         verify them as well.
9786
9787         * report.cs: New warning.
9788
9789 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9790
9791         * anonymous.cs (AnonymousMethod.Compatible): Cannot generate arguments
9792         for anonymous block with out argument.
9793
9794 2006-09-24  Marek Safar  <marek.safar@seznam.cz>
9795
9796         * class.cs (ClassOrStruct.VerifyMembers): Fixed to report correctly
9797         not used private events only.
9798
9799 2006-09-23  Marek Safar  <marek.safar@seznam.cz>
9800
9801         * cfold.cs (BinaryFold): On the guest to unify empty constant cast.
9802
9803         * const.cs (Const.Define): Check for constant type.
9804         (Const.IsConstantTypeValid): Looks for valid constant types.
9805
9806         * convert.cs (ImplicitReferenceConversion): NullCast to EmptyConstantCast.
9807
9808         * ecore.cs (EmptyConstantCast): New common class for all constant based
9809         EmptyCast(s).
9810
9811         * expression.cs (Is.DoResolve): Handle null constant especially.
9812         (New.DoResolve): Check for new void().
9813         (MemberAccess.DoResolve): Cope with all kind of nulls.
9814
9815         * literal.cs (NullConstant): Uses EmptyConstantCast.
9816         (NullDefault): Based on EmptyConstantCast.
9817         (NullLiteral): Uses EmptyConstantCast.
9818
9819         * statement.cs (Block.ResolveMeta): Check for constant type.
9820
9821 2006-09-22  Martin Baulig  <martin@ximian.com>
9822
9823         * delegate.cs, attribute.cs: Merged with the gmcs versions.
9824
9825 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9826
9827         * literal.cs (NullDefault): The type of default(IFoo) is 'IFoo',
9828         not the null type.
9829
9830         Fix part of #79451
9831         * typemanager.cs (Closure.Filter): Consider PrivateScope attributes.
9832         * decl.cs (DeclSpace.FindMemberToOverride): Likewise.  Reorganize
9833         code slightly.
9834
9835 2006-09-22  Martin Baulig  <martin@ximian.com>
9836
9837         * ecore.cs: Merged with the gmcs version.
9838
9839         * generic.cs (ConstructedType): New dummy class.
9840         (TypeArguments): Don't make this abstract.
9841
9842         * typemanager.cs
9843         (TypeManager.IsGenericTypeDefinition): New method.
9844         (TypeManager.GetGenericFieldDefinition): Moved here from gmcs.
9845
9846 2006-09-22  Raja R Harinath  <rharinath@novell.com>
9847
9848         * expression.cs (ComposedCast): Check for arrays of TypedReference
9849         before creating the type, not after.
9850
9851 2006-09-21  Marek Safar  <marek.safar@seznam.cz>
9852
9853         * cfold.cs, const.cs, enum.cs, statement.cs: Updated
9854         after ToType change.
9855
9856         * constant.cs (Constant.ImplicitConversionRequired): Designed to used
9857         when constant must be implicitly convertible.
9858
9859         * convert.cs (ImplicitReferenceConversion): Reuse ToType.
9860
9861         * ecore.cs (NullCast): Derives from NullConstant.
9862
9863         * expression.cs (Is.DoResolve): Removed useless variables.
9864         (Conditional.DoResolve): Quick hack for `Foo () ? null : null'.
9865         (New.Constantify): Add enum support.
9866         (MemberAccess.DoResolve): Add warning when accessing null constant or
9867         variable.
9868
9869         * generic.cs (GenericConstraints.IsReferenceType): Another dummy
9870         property.
9871
9872         * literal.cs (NullConstant): New abstract class with common
9873         functionality for all null specializations.
9874         (NullDefault): Represents default(X) when result can be
9875         reduced to null.
9876         (NullLiteral): Updated.
9877
9878         * report.cs: Add new warning.
9879
9880 2006-09-21  Martin Baulig  <martin@ximian.com>
9881
9882         * generic.cs (GenericTypeParameterBuilder): Removed this ugly hack.
9883
9884 2006-09-21  Martin Baulig  <martin@ximian.com>
9885
9886         * generic.cs (GenericConstraints): New dummy class.
9887         (Constraints): Likewise.
9888         (TypeParameter): Likewise.
9889         (TypeParameterName): Likewise.
9890         (GenericMethod): Likewise.
9891
9892         * typemanager.cs (TypeManager.GetGenericArguments): New method.
9893
9894         * decl.cs: Merged with the gmcs version.
9895
9896 2006-09-21  Raja R Harinath  <rharinath@novell.com>
9897
9898         * generic.cs (TypeParameter): Implement IMemberContainer.
9899         (GenericTypeParameterBuilder): New.  An abominable repugnant hack.
9900
9901         * rootcontext.cs: Unify with gmcs version.
9902
9903         * report.cs: Unify with gmcs version.
9904         * typemanager.cs (AddTypeParameter, LookupTypeParameter): Move
9905         from gmcs/generics.cs.
9906         * generics.cs (TypeParameter): New dummy class.
9907
9908         * support.cs: Unify with gmcs version.
9909
9910 2006-09-20  Raja R Harinath  <rharinath@novell.com>
9911
9912         * ecore.cs (MethodGroupExpr.ResolveGeneric): New dummy method.
9913         * expression.cs (MemberAccess, BaseAccess): Remove GMCS_SOURCE #ifdef.
9914
9915         * decl.cs (MemberName): Unify with gmcs, except for GetTypeExpression.
9916         * generic.cs (TypeArguments): New dummy class to help avoid #ifdefs.
9917         * mcs.exe.sources: Add generic.cs.
9918
9919         * codegen.cs: Unify with gmcs version.
9920
9921         * codegen.cs (IResolveContent.GenericDeclContainer): Copy from gmcs.
9922         (EmitContext): Add GenericDeclContainer implementation.
9923         * decl.cs (MemberCore, DeclSpace): Likewise.
9924         * namespace.cs: Remove #ifdef GMCS_SOURCE.
9925
9926         * namespace.cs (GetTypeInAssembly): Remove #ifdef GMCS_SOURCE.
9927         MCS TypeManager has a corresponding dummy method.
9928
9929 2006-09-19  Martin Baulig  <martin@ximian.com>
9930
9931         * expression.cs: Completely merged with the gmcs version.
9932
9933 2006-09-19  Martin Baulig  <martin@ximian.com>
9934
9935         * expression.cs (Invocation): Merged with the gmcs version.
9936         (ArrayAccess.GetStoreOpcode): Likewise.
9937
9938 2006-09-19  Martin Baulig  <martin@ximian.com>
9939
9940         * typemanager.cs
9941         (TypeManager.IsGenericMethod): Moved here from ../gmcs/generic.cs.
9942         (TypeManager.IsGenericMethodDefinition): Likewise.
9943
9944 2006-09-19  Martin Baulig  <martin@ximian.com>
9945
9946         * typemanager.cs
9947         (TypeManager.IsEqual): Moved the gmcs implementation here.
9948         (TypeManager.DropGenericTypeArguments): Likewise.
9949         (TypeManager.DropGenericMethodArguments): Likewise.
9950         (TypeManager.GetTypeArguments): Moved here from gmcs.
9951         (TypeManager.HasGenericArguments): Likewise.
9952
9953 2006-09-19  Martin Baulig  <martin@ximian.com>
9954
9955         * expression.cs (Binary): Merged with the gmcs version.
9956
9957 2006-09-19  Martin Baulig  <martin@ximian.com>
9958
9959         * expression.cs (Probe, As, Is): Merged with the gmcs version.
9960
9961 2006-09-19  Martin Baulig  <martin@ximian.com>
9962
9963         * typemanager.cs: Merged with the gmcs version.
9964
9965 2006-09-16  Raja R Harinath  <rharinath@novell.com>
9966
9967         * AssemblyInfo.cs [GMCS_SOURCE]: Unify with gmcs source.
9968         * driver.cs: Likewise.
9969
9970 2006-09-16  Marek Safar  <marek.safar@seznam.cz>
9971
9972         A fix for #79401
9973         * class.cs (MethodCore.VerifyClsCompliance): Do check for abstract members
9974         only if parent type is class.
9975         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Fixed missing cache
9976         update.
9977
9978 2006-09-15  Marek Safar  <marek.safar@seznam.cz>
9979
9980         * cs-parser.jay,
9981         * expression.cs(MemberAccess.DoResolve): Don't crash when not allowed
9982         keywords are used.
9983         * typemanager.cs(CSharpName): Converts NullType to null.
9984
9985 2006-09-15  Martin Baulig  <martin@ximian.com>
9986
9987         * typemanager.cs
9988         (TypeManager.GetMethodName): Added mcs implementation.
9989         (TypeManager.IsEqual): Likewise.
9990
9991         * ecore.cs
9992         (SimpleName.RemoveGenericArity): Added dummy implementation.
9993
9994         * pending.cs: Merged with the gmcs version.     
9995
9996 2006-09-15  Martin Baulig  <martin@ximian.com>
9997
9998         * statement.cs: Merge with the gmcs version.
9999
10000 2006-09-15  Martin Baulig  <martin@ximian.com>
10001
10002         * statement.cs (Switch): Merge with the gmcs implementation
10003         (without nullables), which is newer.
10004
10005 2006-09-15  Martin Baulig  <martin@ximian.com>
10006
10007         * statement.cs (Block.Variables): Make this public.
10008         (ToplevelBlock.Parameters): Make this a property.
10009         (Throw.Resolve): Use `TypeManager.IsSubclassOf ()'.
10010
10011 2006-09-15  Martin Baulig  <martin@ximian.com>
10012
10013         * namespace.cs: Merge with the gmcs version.
10014
10015 2006-09-15  Martin Baulig  <martin@ximian.com>
10016
10017         * decl.cs (MemberName): Minor code cleanups.
10018
10019 2006-09-15  Martin Baulig  <martin@ximian.com>
10020
10021         * parameter.cs: Merge with the gmcs version.
10022
10023 2006-09-15  Martin Baulig  <martin@ximian.com>
10024
10025         * enum.cs: Merge with the gmcs version: 3005 is a warning in gmcs
10026         and an error in mcs.
10027
10028 2006-09-15  Martin Baulig  <martin@ximian.com>
10029
10030         * flowanalysis.cs: Merged from GMCS; added the generics code into
10031         a `GMCS_SOURCE' conditional so we can share this file.
10032
10033 2006-09-08  Martin Baulig  <martin@ximian.com>
10034
10035         * typemanager.cs (TypeManager.interlocked_type): New public field.
10036         (TypeManager.int_interlocked_compare-exchange): New public field.
10037         (TypeManager.InitEnumUnderlyingTypes): Also initialize the
10038         enumerator types here and call InitGenericCoreTypes().
10039         (TypeManager.InitCoreTypes): Call InitEnumeratorTypes() right
10040         after calling InitEnumUnderlyingTypes().
10041
10042         * rootcontext.cs
10043         (RootContext.ResolveCore): Added `System.Threading.Interlocked' to
10044         `classes_second_stage'. 
10045
10046 2006-09-14  Marek Safar  <marek.safar@seznam.cz>
10047
10048         * assign.cs, ecore.cs, expression.cs: Share error message text.
10049         * class.cs (FieldMember.Define): Check for varible of static type.
10050         * driver.cs (LoadAssembly): Uses error output for errors.
10051         * statement.cs: Updated.
10052
10053 2006-09-08  Marek Safar  <marek.safar@seznam.cz>
10054
10055         * expression.cs (Error_OperatorCannotBeApplied): Report type instead of
10056         type instance.
10057
10058 2006-09-07  Martin Baulig  <martin@ximian.com>
10059
10060         * driver.cs
10061         (MainDriver): Revert r62663 from Marek; see #70506 for details.
10062
10063 2006-08-29  Miguel de Icaza  <miguel@novell.com>
10064
10065         * cs-parser.jay: Turn 1522 into a warning, instead of an error #79210
10066         
10067 2006-08-17  Miguel de Icaza  <miguel@novell.com>
10068
10069         * cs-tokenizer.cs: Apply patch from Atsushi Enomoto that fixes
10070         #52019 and #79064, the use of the \uXXXX sequence in source code
10071         to represent unicode characters.
10072
10073 2006-08-15  Marek Safar  <marek.safar@seznam.cz>
10074
10075         * expression.cs (SizeOf.DoResolve): Check for void type. Fixed enum types
10076         support.
10077         * class.cs, ecore.cs, statement.cs: Merged to one error message.
10078
10079 2006-08-13  Miguel de Icaza  <miguel@novell.com>
10080
10081         * assign.cs: Catch attempts to assign to a method groups in += and
10082         report as 1656
10083
10084 2006-08-13  Marek Safar  <marek.safar@seznam.cz>
10085
10086         A fix for #79056
10087         * cs-parser.jay: Don't destroy current array type by typeof of array's.
10088
10089 2006-08-12  Marek Safar  <marek.safar@seznam.cz>
10090
10091         * class.cs (Method.Define): Issue a warning when generic method looks like
10092         an entry point.
10093         * decl.cs (MemberCore.GetSignatureForError): Print member type arguments
10094         as well.
10095
10096 2006-08-09  Marek Safar  <marek.safar@seznam.cz>
10097  
10098         * anonymous.cs(AnonymousDelegate.Emit): Uses Constructor filter when
10099         looking for ctor.
10100         * decl.cs (MemberCache.FindMembers): When container is interface we need to
10101         search all base interfaces as a member can be ambiguous.
10102         * delegate.cs (Delegate.FindMembers): Fixed to return valid data for
10103         Constructor member type filter. 
10104         (Delegate.ResolveConstructorMethod) Uses Constructor filter.
10105         * ecore.cs: (Expression.MemberLookup): Implemented ambiguity error/warning
10106         reporting for returned memberinfos.
10107         * report.cs: Updated.
10108         * typemanager.cs (TypeManager.LookupBaseInterfacesCache): Uses TypeManager
10109         version to work on all runtimes.
10110         (TypeManager.RealMemberLookup): Removed members filtering.
10111
10112 2006-08-08  Raja R Harinath  <rharinath@novell.com>
10113
10114         * ecore.cs (FieldExpr.EmitAssign): Release temporary.
10115         (PropertyExpr.EmitAssign): Likewise.
10116         * expression.cs (Indirection.EmitAssign): Likewise.
10117         (LocalVariableReference.EmitAssign): Likewise.
10118         (ParameterReference.EmitAssign): Likewise.
10119         (Invocation.EmitArguments): Likewise.
10120         (ArrayAccess.EmitAssign): Likewise.
10121         (IndexerAccess.EmitAssign): Likewise.
10122         (This.EmitAssign): Likewise.
10123         (ConditionalLogicalOperator.Emit): Likewise.
10124
10125         Fix #79026
10126         * codegen.cs (EmitContext.GetTemporaryLocal): Simplify.  Use Stack
10127         instead of ArrayList.  If the hashtable has a LocalBuilder, don't
10128         leave it in after returning it.
10129         (EmitContext.FreeTemporaryLocal): Simplify.  Update to changes.
10130
10131 2006-08-06  Marek Safar  <marek.safar@seznam.cz>
10132
10133         * expresssion.cs (IndexerAccess.DoResolve): Fixed to report correct error
10134         message.
10135
10136 2006-08-03  Raja R Harinath  <rharinath@novell.com>
10137
10138         Fix cs0146-3.cs and cs0146-4.cs.
10139         * class.cs (TypeManager.CheckRecursiveDefinition): Check that
10140         enclosing types don't depend on the current type.
10141
10142 2006-08-02  Raja R Harinath  <rharinath@novell.com>
10143
10144         Fix #77963
10145         * class.cs (TypeContainer.DoDefineMembers): Use
10146         FindBaseMemberWithSameName on Parent, since we're interested in
10147         whether we hide inherited members or not.
10148         (FindBaseMemberWithSameName): Make slightly more robust.
10149
10150         Fix the non-generic testcase from #77396
10151         * decl.cs (DeclSpace.DeclContainer): Remove override.
10152
10153         * namespace.cs (NamespaceEntry.Doppelganger): Create slave
10154         declspaces for doppelgangers too.
10155         (UsingEntry): Implement IResolveContext.
10156         (UsingEntry.Resolve): Don't set ToplevelTypes.Namespace.  Use
10157         'this' as the resolve context.
10158         (LocalAliasEntry): Likewise.
10159
10160         Implement parts of #77403
10161         * roottypes.cs (RootDeclSpace): New.  Used to represent the
10162         toplevel declaration space.  Each namespace declaration introduces
10163         a "partial" root declaretion space.
10164         * namespace.cs (NamespaceEntry.SlaveDeclSpace): New.
10165         (NamespaceEntry.ctor): Create a SlaveDeclSpace if necessary.
10166         * cs-parser.jay (CSharpParser.ctor): Initialize 'current_class'
10167         from 'current_namespace.SlaveDeclSpace'.
10168         (namespace_declaration): Likewise.
10169         * class.cs (TypeContainer.ctor): Remove parent==ToplevelTypes
10170         check.  It can't happen now.
10171         * decl.cs (DeclSpace.LookupType): Likewise.
10172         * driver.cs (MainDriver): Sanity check.
10173
10174 2006-08-01  Raja R Harinath  <rharinath@novell.com>
10175
10176         * decl.cs (DeclSpace.FindNestedType): Remove.
10177         (DeclSpace.LookupNestedTypeINHierarchy): Use PartialContainer and
10178         LookupTypeContainer to get the container of the nested type.
10179         * class.cs (TypeContainer.FindNestedType): Make non-override.
10180
10181 2006-07-31  Raja R Harinath  <rharinath@novell.com>
10182
10183         * decl.cs (DeclSpace.PartialContainer): Move field from ...
10184         * class.cs (TypeContainer.PartialContainer): ... here.
10185         (TypeContainer.AddBasesForPart): New helper.
10186         (MemberBase.ParentContainer): Remove.  Use Parent.PartialContainer
10187         instead.
10188         * cs-parser.jay (current_class): Convert to DeclSpace.
10189         (struct_declaration, interface_declaration, class_declaration):
10190         Use AddBasesForPart instead of .Bases directly.
10191         * const.cs, iterators.cs: Update to changes.
10192
10193 2006-07-28  Raja R Harinath  <rharinath@novell.com>
10194
10195         * class.cs (TypeContainer.AddMemberType): Rename from
10196         AddToTypeContainer.
10197         (TypeContainer.AddMember): Rename from AddToMemberContainer.
10198         (AddTypeContainer): New.  Combine AddClassOrStruct and
10199         AddInterface.
10200         (AddPartial): Update.  Add 'is_partial' argument.
10201         * roottypes.cs: Update to changes.
10202         * cs-parser.jay (push_current_class): New helper for handling
10203         current_container and current_class.
10204         (struct_declaration, interface_declaration, class_declaration):
10205         Use it.
10206
10207 2006-07-26  Raja R Harinath  <rharinath@novell.com>
10208
10209         * roottypes.cs: Rename from tree.cs.
10210
10211         Rename RootContext.Tree.Types to RootContext.ToplevelTypes.
10212         * tree.cs (Tree, ITreeDump): Remove types.
10213         * rootcontext.cs (tree, Tree): Remove fields.
10214         (root, ToplevelTypes): New.
10215         * *.cs: Update to rename.
10216
10217         * tree.cs (Tree.RecordDecl): Remove.
10218         (RootTypes.AddToTypeContainer): Record the toplevel type in its
10219         namespace here.
10220         * class.cs, cs-parser.jay: Remove mention of RecordDecl.
10221
10222 2006-07-23  Raja R Harinath  <harinath@gmail.com>
10223
10224         * codegen.cs (EmitContext.Flags): Move InCatch, InFinally,
10225         DoFlowAnalysis and OmitStructFlowAnalysis here.
10226         (ec.With): Rename from WithUnsafe and generalize.
10227         (ec.WithCheckState): Remove.  All users can be handled by 'With'.
10228         (ec.WithFlowAnalyis): New.
10229         * ecore.cs, expression.cs, statement.cs: Update.
10230
10231 2006-07-22  Raja R Harinath  <harinath@gmail.com>
10232
10233         * statement.cs (Block.ResolveMeta): Simplify slightly.
10234
10235         * codegen.cs (EmitContext.Flags): New enum.  Used to represent the
10236         multiple boolean fields.  Convert InUnsafe, constant_check_state,
10237         check_state to flags.
10238         (CheckState, ConstantCheckState): Update.
10239         (InUnsafe): New read-only property.
10240         (FlagsHandle): Rename from CheckStateHandle and convert to handle
10241         arbitrary flags.
10242         (WithUnsafe): New helper similar to WithCheckState.
10243         * statement.cs (Block.ResolveMeta): Use WithUnsafe.
10244         (Unsafe.Resolve, Unsafe.DoEmit): Likewise.
10245
10246 2006-07-21  Raja R Harinath  <rharinath@novell.com>
10247
10248         Make comparisons use the same IL irrespective of whether they're
10249         in a 'checked' or 'unchecked' context: one of the issues in #78899
10250         * codegen.cs (EmitContext.CheckState): Make read-only property.
10251         (EmitContext.ConstantCheckState): Likewise.
10252         (EmitContext.CheckStateHandle, EmitContext.WithCheckState): New
10253         helper that implement a save/restore stack for CheckState
10254         values.  This is the only way to change check-state.
10255         * ecore.cs (Expression.ExpressionToArrayArgument): Use WithCheckState.
10256         * expression.cs (CheckedExpr.DoResolve, CheckedExpr.Emit): Likewise.
10257         (CheckedExpr.EmitBranchable): New forwarding method.
10258         (UnCheckedExpr): Likewise.
10259         * statement.cs (Block.ResolveMeta): Use WithCheckState.
10260         (Unchecked.Resolve, Unchecked.DoEmit): Likewise.
10261         (Checked.Resolve, checked.DoEmit): Likewise.
10262
10263 2006-07-20  Miguel de Icaza  <miguel@novell.com>
10264
10265         * anonymous.cs: Cache the resolved anonymous delegate, and return
10266         this so that the ResolveTopBlock is only triggered once, not
10267         twice.
10268
10269         Currently we trigger ResolvetopBlock twice due to a first pass of
10270         argument check compatibility, and a second pass that does the
10271         actual resolution.   
10272         
10273 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10274
10275         * annonymous.cs (AnonymousMethod.CreateScopeType): Fixed nested type
10276         modifiers.
10277         * rootcontext.cs (Reset): Add helper_classes.
10278
10279 2006-07-15  Marek Safar  <marek.safar@seznam.cz>
10280
10281         A fix for #78860
10282         * statement.cs (Switch.SimpleSwitchEmit): Handle case null at any position
10283         correctly.
10284
10285 2006-07-13  Miguel de Icaza  <miguel@novell.com>
10286
10287         * statement.cs (Lock): Handle expressions of type
10288         TypeManager.null_type specially.  Fixes #78770
10289
10290 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10291
10292         * expression.cs (Binary.ResolveOperator): Don't crash when null is assigned
10293         to an event.
10294
10295 2006-07-08  Marek Safar  <marek.safar@seznam.cz>
10296
10297         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Fixed to look
10298         for accessors as well.
10299         * ecore.cs (EventExpr): Add AccessorTable.
10300
10301 2006-07-01  Marek Safar  <marek.safar@seznam.cz>
10302
10303         A fix for #78738
10304         * attribute.cs, class.cs, ecore.cs : Add missing location of related symbol
10305         for CS0122 where appropriate.
10306         * typemanager.cs (IsNestedChildOf): Type can be null in the case of top
10307         level attributes.
10308         (Filter): Assembly can be null in the case of top level attributes.
10309
10310 2006-06-25  Marek Safar  <marek.safar@seznam.cz>
10311
10312         A fix for #78690
10313
10314         * ecore.cs (Expression.MemberLookupFailed): Don't crash when failed lookup
10315         is done at global level.
10316
10317 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10318
10319         A fix for #77002, Implemented TypeForwarder support.
10320
10321         * attribute.cs (Attribute.GetArgumentType): Reads type argument.
10322         * expression.cs (TypeOf.TypeArgument): Exposes typeof type.
10323         * typemanager.cs (): Add type_forwarder_attr_type.
10324
10325 2006-06-24  Marek Safar  <marek.safar@seznam.cz>
10326
10327         * report.cs: Add CS0469 warning.
10328
10329 2006-06-21  Martin Baulig  <martin@ximian.com>
10330
10331         * codegen.cs (CodeGen.Save): Moved the symbol file generation into
10332         the `try'-block, so we also report CS0016 etc. there.
10333
10334 2006-06-21  Martin Baulig  <martin@ximian.com>
10335
10336         * delegate.cs
10337         (Delegate.VerifyMethod): Allow `params' methods; fixes #78678.
10338
10339 2006-06-21  Martin Baulig  <martin@ximian.com>
10340
10341         * expression.cs (Unary.ResolveOperator): In `Operator.AddressOf',
10342         also report CS1686 for parameters.
10343
10344 2006-06-21  Martin Baulig  <martin@ximian.com>
10345
10346         * statement.cs (GotoCase.Resolve): Report a warning (CS0469)
10347         instead of an error if the value is not implicitly convertible to
10348         the switch types; fixes #77964.
10349
10350 2006-06-21  Raja R Harinath  <rharinath@novell.com>
10351
10352         Fix #78673
10353         * class.cs (FieldBase.ResolveInitializer): Stop resolution if
10354         FieldBuilder is null.
10355
10356         Fix #78662
10357         * expression.cs (Binary.CheckShiftArguments): Don't overwrite original
10358         'left' and 'right' before error-checking.
10359
10360 2006-06-16  Juraj Skripsky  <js@hotfeet.ch>
10361
10362         * ecore.cs (SimpleName.Error_ObjectRefRequired): Do not truncate the name.
10363         Fixed bug #78601.
10364         (MemberExpr.EmitInstance): Use GetSignatureForError () to get full name.
10365         (FieldExpr.DoResolve): likewise.
10366         (PropertyExpr.InstanceResolve): likewise.
10367         (EventExpr.InstanceResolve): likewise. 
10368
10369 2006-06-04  Marek Safar  <marek.safar@seznam.cz>
10370
10371         * parameter.cs (Parameter.ApplyAttributeBuilder): More DefaultValue
10372         attribute applicable tests for attribute argument.
10373
10374 2006-06-02  Raja R Harinath  <rharinath@novell.com>
10375
10376         Fix #78079
10377         * expression.cs (Binary.DoNumericPromotions): Remove and rewrite.
10378         (Binary.OverloadResolve_PredefinedIntegral): New.
10379         (Binary.OverloadResolve_PredefinedFloating): New.
10380         (Binary.OverloadResolve_PredefinedString): New.
10381         (Binary.ResolveOperator): Use those instead of DoNumericPromotions.
10382         Follow the standard more closely, and treat numeric promotions in
10383         terms of overload resolution.
10384         (Binary.CheckShiftArguments): Simplify.
10385
10386 2006-06-01  Raja R Harinath  <rharinath@novell.com>
10387
10388         * flowanalysis.cs (MyBitVector): Simplify representation.
10389         (MyBitVector.Clone): Avoid allocating BitArray.
10390         (MyBitVector.operator&): Rename from MyBitVector.And and make symmetric.
10391         (MyBitVector.operator|): Likewise, with MyBitVector.Or.
10392         (*): Update.  Change all references to MyBitVector.And and
10393         MyBitVector.Or to &= and |=.
10394
10395 2006-05-29  Raja R Harinath  <rharinath@novell.com>
10396
10397         Fix cs0231-[34].cs.
10398         * cs-parser.jay (formal_parameter_list): Extend the pattern below
10399         to param arguments too.
10400
10401 2006-05-26  Miguel de Icaza  <miguel@novell.com>
10402
10403         * cs-parser.jay: Catch another parsing form for arglist being
10404         followed by other arguments.  Fixes #78313.
10405
10406 2006-05-24  Raja R Harinath  <rharinath@novell.com>
10407
10408         * flowanalysis.cs (FlowBranchingToplevel.AddReturnOrigin): Move
10409         checking of out parameters to ...
10410         (FlowBranchingToplevel.Merge): ... here.
10411         (FlowBranchingException.AddBreakOrigin): If 'finally_vector' is
10412         set, propagate the origin upward, and only complain if there was
10413         no other error.
10414         (FlowBranchingException.AddContinueOrigin): Likewise.
10415         (FlowBranchingException.AddReturnOrigin): Likewise.
10416         (FlowBranchingException.AddGotoOrigin): Likewise.       
10417
10418 2006-05-23  Raja R Harinath  <rharinath@novell.com>
10419
10420         * flowanalysis.cs (UsageVector.MergeOrigins): If an origin is
10421         unreachable, skip it.
10422         (FlowBranchingException.Merge): Always propagate jumps, even if
10423         the finally block renders subsequent code unreachable.
10424
10425 2006-05-18  Raja R Harinath  <rharinath@novell.com>
10426
10427         Fix #77601
10428         * statement.cs (Goto.Resolve): Move responsibility for resolving
10429         'goto' to FlowBranching.AddGotoOrigin.
10430         (Goto.SetResolvedTarget): New.  Callback to set the
10431         LabeledStatement that's the target of the goto.
10432         (Goto.DoEmit): Use Leave instead of Br when crossing an
10433         unwind-protect boundary.
10434         * flowanalysis.cs (FlowBranching.AddGotoOrigin): Rename from
10435         LookupLabel and adjust to new semantics.
10436         (FlowBranchingToplevel.AddGotoOrigin): Likewise.
10437         (FlowBranchingBlock.AddGotoOrigin): Likewise. Use
10438         Goto.SetResolvedTarget to update target.
10439         (FlowBranchingLabeled.AddGotoOrigin): Likewise.
10440         (FlowBranchingException.AddGotoOrigin): Rewrite to be similar to
10441         AddBreakOrigin & co.  Delay propagation until ...
10442         (FlowBranchingException.Merge): ... this.
10443
10444         * statement.cs (Block.Resolve): Always depend on flow-branching to
10445         determine unreachability.  Kill workaround that originally emitted
10446         only one statement after an "unreachable" label (see infloop in
10447         test-515.cs).
10448
10449         Fix #77869, #76148, #77755, #75255 and a host of other bugs.
10450         This is still "wrong", but anything better would probably need a
10451         multi-pass algorithm.
10452         * flowanalysis.cs (FlowBranchingLabeled): Salt away a copy of the
10453         usage vector.  Force current usage vector to be reachable, to
10454         optimistically signify backward jumps.
10455         (FlowBranchingLabeled.LookupLabel): Note if a backward jump is
10456         detected.
10457         (FlowBranchingLabeled.Merge): New.  If no backward jump was
10458         detected, return the original salted-away usage vector instead,
10459         updated with appropriate changes.  Print unreachable warning if
10460         necessary.
10461         * statement.cs (Block.Resolve): Don't print unreachable warning on
10462         a labeled statement.
10463
10464 2006-05-17  Gert Driesen  <drieseng@users.sourceforge.net>
10465
10466         * driver.cs: Pass filename without path to AssemblyBuilder's 
10467         AddResourceFile. Fixes bug #78407.
10468
10469 2006-05-17  Raja R Harinath  <rharinath@novell.com>
10470
10471         * statement.cs (LabeledStatement.Resolve): Move merging of origins ...
10472         * flowanalysis.cs (FlowBranchingLabeled): ... here.
10473         (FlowBranching.MergeChild): Overwrite
10474         reachability information from Labeled branchings too.
10475
10476 2006-05-16  Raja R Harinath  <rharinath@novell.com>
10477
10478         * statement.cs (Goto.Resolve): Merge jump origins here ...
10479         * flowanalysis.cs (FlowBranching.Label): ... rather than here.
10480
10481         * flowanalysis.cs (FlowBranching.LookupLabel): Move CS0159 check ...
10482         (FlowBranchingToplevel.LookupLabel): ... here.  Add CS1632 check.
10483         (FlowBranchingGoto.LookupLabel): New.  Handle back jumps.
10484         (FlowBranchingBlock.LookupLabel): Call LabeledStatement.AddReference
10485         here, ...
10486         * statement.cs (Goto.Resolve): ... not here.
10487         (Goto.Emit): Remove CS1632 check.
10488
10489 2006-05-14  Marek Safar  <marek.safar@seznam.cz>
10490
10491         * ecore.cs (Expression.ResolveAsTypeTerminal): Fixed type in the obsolete
10492         error message.
10493
10494 2006-05-11  Raja R Harinath  <rharinath@novell.com>
10495
10496         * flowanalysis.cs (UsageVector.MergeJumpOrigins): Kill.
10497         (FlowBranchingBlock.Label): Use UsageVector.MergeOrigins.
10498         (FlowBranchingException.Label): Likewise.
10499
10500         * flowanalysis.cs (MyBitVector.SetAll): New.  Sets all bits to the
10501         given value.
10502         (MyBitVector.Or): Use it to avoid losing information (Count).
10503         (FlowBranching.MergeOrigins): Likewise.
10504
10505         * flowanalysis.cs (UsageVector.IsDirty): Remove.
10506         (UsageVector.Parameters, UsageVector.ParameterVector): Likewise.
10507         (UsageVector.Locals, UsageVector.LocalVector): Likewise.
10508         (UsageVector.ToString): Simplify.
10509         (UsageVector.MergeSiblings): Move here from ...
10510         (FlowBranching.Merge): ... here.
10511         (FlowBranchingToplevel.CheckOutParameters): Take an UsageVector,
10512         not a MyBitVector.
10513
10514 2006-05-10  Raja R Harinath  <rharinath@novell.com>
10515
10516         * flowanalysis.cs (UsageVector.MergeOrigins): Simplify, now that a
10517         null bitvector is treated as all-true.
10518
10519         * flowanalysis.cs (MyBitVector.And, MyBitVector.Or): Make lazier.
10520         (MyBitVector): Rationalize invariants.  'vector != null' implies
10521         that we have our own copy of the bitvector.  Otherwise,
10522         'InheritsFrom == null' implies all inherited bits are true.
10523
10524 2006-05-09  Marek Safar  <marek.safar@seznam.cz>
10525
10526         * statement.cs (LocalInfo): Add IsConstant.
10527         (LocalInfo.DeclareLocal): Moved from EmitMeta and changed to don't emit
10528         local variable for constants.
10529
10530 2006-05-09  Raja R Harinath  <rharinath@novell.com>
10531
10532         * flowanalysis.cs (MyBitVector.Empty): New.
10533         (MyBitVector): Don't allow InheritedFrom to be null.
10534         (MyBitVector.And, MyBitVector.Or): Treat 'null' as all-ones.
10535         (UsageVector, FlowBranching): Update to changes.
10536
10537         * flowanalysis.cs (FlowBranching.InTryWithCatch): Don't terminate
10538         recursion.  The 'Parent == null' condition isn't sufficient for
10539         anonymous methods.
10540         (FlowBranching.AddBreakOrigin): Likewise.
10541         (FlowBranching.AddContinueOrigin): Likewise.
10542         (FlowBranching.AddReturnOrigin): Likewise.
10543         (FlowBranching.StealFinallyClauses): Likewise.
10544         (FlowBranching.MergeTopBlock): Move to FlowBranchingToplevel.
10545         (FlowBranching.CheckOutParameters): Likewise.
10546         (FlowBranchingToplevel): Terminate all the above recursions here.
10547         (FlowBranchingToplevel.End): Rename from MergeTopBlock.
10548         * codegen.cs (EmitContext.ResolveTopBlock): Update to changes.
10549
10550         * flowanalysis.cs (BranchingType.Toplevel): New.  Represents a
10551         toplevel block.
10552         (FlowBranchingToplevel): New.  Empty for now.
10553         (FlowBranching.MergeTopBlock): Update.
10554         * codegen.cs (EmitContext.ResolveTopBlock): Create a Toplevel
10555         branching for the anonymous delegate.
10556         (EmitContext.StartFlowBranching): Add ToplevelBlock variant.
10557
10558         * flowanalysis.cs (UsageVector.MergeOrigins): Reorganize.
10559         (UsageVector.MergeJumpOrigins): Don't ignore current reachability
10560         information at the start of the merge.  Reorganize.
10561
10562 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10563
10564         * class.cs (MethodData.Define): Method cannot implement interface accessor.
10565
10566 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10567
10568         * expression.cs (QualifiedAliasMember.ResolveAsTypeStep): Pass location
10569         to newly introduced ctor.
10570
10571         * namespace.cs (Namespace.Error_NamespaceDoesNotExist): Moved an error
10572         message to one place.
10573         (GlobalRootNamespace.Error_NamespaceDoesNotExist): Custom message for
10574         global namespace.
10575
10576 2006-05-07  Marek Safar  <marek.safar@seznam.cz>
10577
10578         * const.cs (Const.Error_ExpressionMustBeConstant): Better error message.
10579
10580         * ecore.cs (Expression.ResolveAsConstant): Updated.
10581
10582         * statement.cs (ResolveMeta): Updated.
10583
10584 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10585
10586         * cs-parser.jay: __arglist cannot be used in initializer.
10587
10588 2006-05-06  Marek Safar  <marek.safar@seznam.cz>
10589
10590         A fix for #77879
10591         * namespace.cs (LocalAliasEntry.DoResolve): Don't allow to access nested
10592         private types.
10593
10594 2006-05-05  Raja R Harinath  <rharinath@novell.com>
10595
10596         * statement.cs (EmptyStatement.ResolveUnreachable): Override.
10597         (LabeledStatement): Add 'name' parameter.
10598         (LabeledStatement.Name, LabeledStatement.JumpOrigins): New.
10599         (Block.AddLabel): Update to changes.
10600         * cs-parser.jay (labeled_statement): Likewise.
10601
10602         * flowanalysis.cs (BranchingType.Labeled): New.
10603         (UsageVector.MergeOrigins): Remove unused 'branching' argument.
10604         (FlowBranchingLabeled): New.  Does nothing for now, but will
10605         eventually handle 'goto' flows.
10606         * codegen.cs (StartFlowBranching): Add new LabeledStatement variant.
10607         * statement.cs (LabeledStatement.Resolve): Create a FlowBranching
10608         that's terminated ...
10609         (Block.Resolve): ... here.
10610
10611         * flowanalysis.cs (UsageVector.MergeFinally): Remove.
10612         (UsageVector.MergeFinallyOrigins): Likewise.
10613         (FlowBranching.InTryOrCatch): Likewise.
10614         (FlowBranching.AddFinallyVector): Likewise.
10615         (FlowBranchingException): Update to changes.
10616
10617         Fix #78290
10618         * statement.cs (Return.Resolve): Move error checking to ...
10619         * flowbranching.cs (FlowBranching.AddReturnOrigin): ... this.
10620         (FlowBranchingException): Handle return origins like break and
10621         continue origins.
10622         (FlowBranching.UsageVector.CheckOutParameters): Remove.
10623
10624 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10625
10626         A fix for #76122
10627         * class.cs (TypeContainer.FindMembers): Includes event method in the methods
10628         filter.
10629
10630 2006-05-04  Marek Safar  <marek.safar@seznam.cz>
10631
10632         A fix for #77543
10633         * class.cs (MethodData.Define): Do public accessor check only when method
10634         implements an interface.
10635
10636 2006-05-04  Raja R Harinath  <rharinath@novell.com>
10637
10638         Remove special handling of 'break'
10639         * flowanalysis.cs (Reachability): Remove all mention of 'breaks'.
10640         (Reachability.Meet): Simplify.  Remove 'do_breaks' argument.
10641         (UsageVector.Break): Remove.
10642         (FlowBranching.Merge): Use 'Reachable.IsUnreachable' to determine
10643         reachability.
10644         (FlowBranchingBreakable.Merge): Don't ResetBreaks.
10645
10646         * statement.cs (Break.Resolve): Call UsageVector.Goto (), not
10647         UsageVector.Breaks ().  Don't set NeedsReturnLabel.
10648
10649 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10650
10651         A fix for #75726
10652         * pending.cs (PendingImplementation.BaseImplements): A found member cannot
10653         be the interface member.
10654
10655 2006-05-03  Marek Safar  <marek.safar@seznam.cz>
10656
10657         A fix for #60069
10658         * constant.cs (LongConstant.EmitLong): Fixed to catch also negative values
10659         for emitting small (int) values.
10660
10661 2006-05-03  Raja R Harinath  <rharinath@novell.com>
10662
10663         Fix #59427
10664         * flowanalysis.cs (FlowBranchingException.Merge): Ensure
10665         control-flow passes through the 'finally' after merging-in all the
10666         control-flows from 'try' and the 'catch' clauses.
10667
10668         * flowanalysis.cs (FlowBranching.IsLoop): Remove.
10669         (FlowBranching.IsTryOrCatch): Remove 'is_return' parameter.  It's
10670         always true at the only non-recursive entry point.
10671         (FlowBranching.CreateBranching) [BranchingType.Loop]: Return a
10672         FlowBranchingBreakable.
10673         (FlowBranchingLoop): Remove.
10674         * statement.cs (Return.DoResolve): Update to changes.
10675
10676         Fix #76471, #76665
10677         * flowanalysis.cs (FlowBranching.BranchingType.Embedded): New.
10678         (FlowBranching.CreateBranching): Handle it: create a
10679         FlowBranchingContinuable.
10680         (FlowBranching.BreakCrossesExceptionBoundary): Remove.
10681         (FlowBranching.AddContinueOrigin): Similar to AddBreakOrigin,
10682         except that it handles the 'continue' command.
10683         (FlowBranching.UsageVector.MergeOrigins): Rename from
10684         MergeBreakOrigins.
10685         (FlowBranchingContinuable): Similar to FlowBranchingBreakable,
10686         except that it overrides AddContinueOrigin.
10687         (FlowBranchingException): Override AddContinueOrigin, similar to
10688         AddBreakOrigin.
10689         * statement.cs (While.Resolve, Foreach.ArrayForeach.Resolve):
10690         Create a new branching around the embedded statement.
10691         (Do.Resolve, For.Resolve): Likewise.  Do reachability analysis for
10692         control flow after the embedded statement.
10693         (Continue.Resolve): Move all error checking to AddContinueOrigin.
10694
10695         * flowanalysis.cs (FlowBranching.IsSwitch): Remove.
10696         (FlowBranching.CreateBranching) [BranchingType.Switch]: Create a
10697         FlowBranchingBreakable.
10698         (FlowBranchingSwitch): Remove.
10699
10700         Fix test-503.cs
10701         * statement.cs (Break.Resolve): Simplify.  Move responsibility for
10702         error reporting to ...
10703         * flowanalysis.cs (FlowBranching.AddBreakOrigin) ... this.
10704         Rename from 'AddBreakVector'.  Add new location argument.  Return
10705         a bool indicating whether the 'break' crosses an unwind-protect.
10706         (FlowBranchingException.AddBreakOrigin): Add.
10707         (FlowBranchingException.Merge): Propagate 'break's to surrounding
10708         flowbranching after updating with the effects of the 'finally'
10709         clause.
10710         (FlowBranchingBreakable): New common base class for
10711         FlowBranchingLoop and FlowBranchingSwitch.
10712
10713         * statement.cs (Foreach.ArrayForeach.Resolve): Set barrier after
10714         embedded statement.
10715         (Foreach.CollectionForeach.Resolve): Remove extraneous flowbranching.
10716
10717 2006-05-02  Raja R Harinath  <rharinath@novell.com>
10718
10719         * statement.cs (Do.Resolve): If the loop is infinite, set the
10720         barrier.
10721         (While.Resolve, For.Resolve): Set a barrier after the embedded
10722         statement.  There's no direct control flow that goes from the end
10723         of the embedded statement to the end of the loop.
10724         * flowanalysis.cs (FlowBranching.Infinite): Remove.
10725         (FlowBranchingLoop.Merge): Don't look at 'Infinite'.  The changes
10726         above ensure that the reachability is correctly computed.
10727
10728         * flowanalysis.cs (Reachability.ResetBarrier): Remove.
10729         (UsageVector.MergeBreakOrigins): If the current path is
10730         unreachable, treat it as if all parameters/locals are initialized.
10731         (FlowBranchingLoop.Merge): Don't clear any barriers.  Handle
10732         infinite loops before merging-in break origins.
10733
10734         * flowanalysis.cs (Reachability.Meet): Simplify code handling 'returns'.
10735         (Reachability.Reachable): Split part into ...
10736         (Reachability.Unreachable): ... this.  Simplify.
10737         (Reachability.IsUnreachable): Use 'Unreachable' instead.
10738
10739         * flowanalysis.cs (Reachability.SetReturnsSometimes): Remove.
10740         (Reachability.SetThrowsSometimes): Likewise.
10741         (FlowBranchingBlock.MergeTopBlock): Don't compare against
10742         TriState.Always, use corresponding property.
10743         * statement.cs (Lock.Resolve, Try.Resolve, Using.Resolve): Likewise.
10744         (Block.Resolve): Likewise.  Remove some redundant checks.
10745
10746 2006-05-02  Raja R Harinath  <harinath@gmail.com>
10747
10748         * flowanalysis.cs (UsageVector.Throw): Set barrier too.
10749         (Reachability.Meet): Don't bother checking AlwaysThrows --
10750         barrier is always set.
10751         (FlowBranchingBlock.Merge): Likewise.
10752
10753 2006-05-01  Raja R Harinath  <harinath@gmail.com>
10754
10755         * codegen.cs (EmitContext.ResolveTopBlock): Remove redundant
10756         checks for unreachable.
10757
10758 2006-05-01  Marek Safar  <marek.safar@seznam.cz>
10759
10760         A fix for #77980
10761         * flowanalysis.cs (UsageVector.IsAssigned): Add flag to ignore short path.
10762
10763         * statement.cs (Block.UsageWarning): Uses newly introduced flag to detect
10764         whether field is really assigned.
10765
10766 2006-04-30  Raja R Harinath  <harinath@gmail.com>
10767
10768         * flowanalysis.cs (Reachability): Make 4-argument constructor
10769         private.
10770         (Reachability.Meet): Rename from 'And'.  Remove static variant.
10771         (Reachability.Always): Rename from the highly misleading
10772         'Reachability.Never'.
10773         (FlowBranching.Merge): Update to changes.  Mark an impossible
10774         situation with a 'throw'.
10775         (*): Update to changes.
10776
10777 2006-04-29  Raja R Harinath  <harinath@gmail.com>
10778
10779         * flowanalysis.cs (TriState): Rename from FlowBranching.FlowReturns.
10780         Remove 'Undefined'.
10781         (FlowBranching.TriState_Meet): Rename from AndFlowReturns. Simplify.
10782         (FlowBranching.TriState_Max): Rename from OrFlowReturns. Simplify.
10783         (*): Update to changes.
10784         * statement.cs: Update to changes.
10785
10786 2006-04-28  Marek Safar  <marek.safar@seznam.cz>
10787
10788         A fix for #78049
10789         *class.cs (Method.FindOutBaseMethod): Base method cannot be property method.
10790
10791 2006-04-28  Raja R Harinath  <harinath@gmail.com>
10792
10793         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't create a
10794         dummy UsageVector.
10795
10796         * flowanalysis.cs (UsageVector.MergeChild): Change FlowBranching
10797         argument to two arguments: an usage-vector and a bool.  Move call
10798         to FlowBranching.Merge () ...
10799         (FlowBranching.MergeChild, FlowBranching.MergeTopBlock): ... here.
10800
10801         * flowanalysis.cs (UsageVector.MergeChild): Move special-case
10802         handling of loop and switch reachability to ...
10803         (FlowBranchingLoop.Merge, FlowBranchingSwitch.Merge): ... these.
10804
10805 2006-04-27  Raja R Harinath  <harinath@gmail.com>
10806
10807         * flowanalysis.cs (FlowBranching.InLoop): Move special-case
10808         handling to FlowBranchingLoop.InLoop.
10809         (FlowBranching.InSwitch): Likewise, to FlowBranchingSwitch.
10810
10811 2006-04-26  Marek Safar  <marek.safar@seznam.cz>
10812
10813         A fix for #78115
10814         * anonymous.cs (AnonymousMethod.DoResolve): Moved the check whether
10815         anonymous method is allowed from AnonymousContainer here.
10816
10817         * attribute.cs, codegen.cs (EmitContext): Add IsAnonymousMethodAllowed.
10818
10819 2006-04-24  Raja R Harinath  <rharinath@novell.com>
10820
10821         Fix #78156
10822         * flowanalysis.cs (MyBitVector.Or): Add null check on argument.
10823
10824 2006-04-23  Marek Safar  <marek.safar@seznam.cz>
10825
10826         A fix for #49011.
10827         * constant.cs (FloatConstant.Reduce): Add range checking for checked context.
10828         (DoubleConstant.Reduce): Ditto.
10829
10830 2006-04-23  Raja R Harinath  <rharinath@novell.com>
10831
10832         * expression.cs (LocalVariableReference.DoResolveBase): Simplify.
10833         Remove 'lvalue_right_side' argument.  Move parts to ...
10834         (LocalVariableReference.ResolveLocalInfo, LocalVariable.DoResolve)
10835         (LocalVariable.DoResolveLValue): ... these.
10836
10837 2006-04-21  Raja R Harinath  <rharinath@novell.com>
10838
10839         Fix cs1655.cs
10840         * codegen.cs (EmitContext.InRefOutArgumentResolving): Remove.
10841         * expression.cs (EmptyExpression.LValueMemberOutAccess): New.
10842         (LocalVariableReference.DoResolveBase): Use it to implement new
10843         CS1655 check.
10844         (IndexerAccess.DoResolveLValue): Handle LValueMemberOutAccess.
10845         (Argument.Resolve): Simplify.  Move CS1510 check ...
10846         * ecore.cs (Expression.ResolveLValue): ... here.
10847         (UnboxCast.DoResolveLValue): Handle LValueMemberOutAccess.
10848         (PropertyExpr.DoResolveLValue): Likewise.
10849         (FieldExpr.Report_AssignToReadonly): Likewise.
10850         (FieldExpr.DoResolve): Add 'out_access' argument.  Use
10851         LValueMemberAccess or LValueMemberOutAccess on instance depending
10852         on it.
10853         (FieldExpr.DoResolveLValue): Pass 'out_access' argument to
10854         DoResolve as appropriate.
10855
10856 2006-04-20  Raja R Harinath  <rharinath@novell.com>
10857
10858         Fix #75800
10859         * expression.cs (Invocation.VerifyArgumentsCompat): Don't try
10860         implicit conversions on 'out' and 'ref' arguments.
10861
10862         * expression.cs (Invocation.VerifyArgumentsCompat): Reorganize to
10863         improve clarity.  Remove dead code.
10864
10865         Fix #66031
10866         * statement.cs (Block.UsageWarning): Allow VariableInfo to be null.
10867         (Catch.Resolve): Resolve VarBlock if it exists.
10868
10869 2006-04-19  Miguel de Icaza  <miguel@novell.com>
10870
10871         * statement.cs (Foreach.EmitFinally): Do not emit the enumerator
10872         twice, this was some residual code, the enumerator was emitted
10873         properly in the two branche of if later.
10874
10875 2006-04-19  Raja R Harinath  <rharinath@novell.com>
10876
10877         * expression.cs (Cast.ResolveLValue): Remove.  The result of a
10878         cast is never an lvalue.
10879         (Cast.DoResolve, Cast.ResolveRest): Combine.
10880         (Argument.Emit): Simplify slightly.  Move 'Expr is
10881         IMemoryLocation' check ...
10882         (Argument.Resolve): ... here.
10883         (Argument.Error_LValueRequired): Remove.  Inline into only user.
10884
10885         Simplifications.  Fix cs0191-2.cs
10886         * ecore.cs (FieldExpr.DoResolve): Move handling of CS0192, CS0198,
10887         CS1649 and CS1651 to ...
10888         (FieldExpr.Report_AssignToReadonly): ... this.  Simplify by moving
10889         the actual selection of the error code and message to a lookup
10890         table.  Add a dummy return value to simplify callsites.
10891         (FieldExpr.ResolveLValue): Don't allow a constructor to write to
10892         readonly fields of other instances of the same type.  Move CS0197
10893         warning from ...
10894         * expression.cs (Argument.Resolve): ... here.  Simplify code.
10895         Ensure that ec.InRefOutArgumentResolving is only set during LValue
10896         resolution of an out or ref argument.  The code simplification
10897         above uses this invariant.
10898
10899 2006-04-18  Raja R Harinath  <rharinath@novell.com>
10900
10901         Possibly fix #77752.  Fix cs1690-[4-7].cs.
10902         * ecore.cs (Expression.CheckMarshalByRefAccess): Renamed from
10903         CheckMarshallByRefAccess.  Drop parameter.
10904         (FieldExpr.CheckMarshalByRefAccess): Update.  Change CS1690 to a
10905         warning.
10906         (FieldExpr.DoResolve): Call CheckMarshalByRefAccess on
10907         InstanceExpression.
10908         * report.cs (AllWarnings): Add CS1690.
10909         * expression.cs (Argument.Resolve): Use EmptyExpression.OutAccess
10910         for ref access too.
10911         (LocalVariableReference.DoResolveBase): Update.
10912
10913 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10914
10915         * class.cs (MethodOrOperator): Moved common parts from method class.
10916         detect obsolete attributes.
10917         (Method.Define): Simplified as it reuses code from base.
10918         (Constructor.ValidAttributeTargets): Fixed issue found during
10919         refactoring.
10920         (Destructor.ValidAttributeTargets): Fixed issue found during
10921         refactoring.
10922         (Operator): Finished refactoring set off by #78020. Operator class is now
10923         ordinary method class.
10924
10925         * anonymous.cs: Updated.
10926
10927         * decl.cs (DeclSpace): Add IsGeneric
10928
10929 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10930
10931         * class.cs (Constructor.Emit): Don't emit the attributes twice.
10932
10933 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10934
10935         * class.cs (Operator.Emit): Extracted code from MethodData to correctly
10936         detect obsolete attributes.
10937         (Method.CreateEmitContext): Moved to MethodOrOperator.
10938
10939 2006-04-09  Marek Safar  <marek.safar@seznam.cz>
10940
10941         A fix for #78048.
10942         * class.cs (TypeContainer.MemberCoreArrayList.DefineContainerMembers): Throw
10943         customized exception to make crash detection easier.
10944         (MethodOrOperator): Started to work on new base class for methods and
10945         operators.
10946         (Method): Derives from MethodOrOperator.
10947         (Constructor.Emit): Emits its own attributes.
10948         (AbstractPropertyEventMethod.Emit): Ditto.
10949         (Operator): Derives from MethodOrOperator, will refactor fully in extra
10950         patch.
10951         (Operator.Emit): It's temporary more tricky than should be.
10952         
10953         * doc.cs (GetMethodDocCommentName): Updated after operator changes.
10954
10955         * report.cs (InternalErrorException): Add ctor with inner exception.
10956
10957 2006-04-08  Marek Safar  <marek.safar@seznam.cz>
10958
10959         A fix for #76744.
10960         * ecore.cs (SimpleName.ResolveAsTypeStep): Report better error when type is
10961         only not visible.
10962
10963 2006-04-07  Marek Safar  <marek.safar@seznam.cz>
10964
10965         A fix for #77916.
10966         * expression.cs (ArrayCreation.GetAttributableValue): Creates correctly typed
10967         array.
10968
10969 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10970
10971         * class.cs (Class.ApplyAttributeBuilder): Report an error when ComImport
10972         attribute is present and Guid not.
10973         (Interface.ApplyAttributeBuilder): Ditto.
10974
10975         * attribute.cs: Add error message.
10976
10977 2006-04-06  Marek Safar  <marek.safar@seznam.cz>
10978
10979         A fix for #78020.
10980
10981         * attribute.cs (Attribute.AttachTo): The attribute can have multiple
10982         sources (it's composite) so hold them in extra array as they are used in
10983         Emit phase only. It worked in the previous versions by mistake.
10984         (Attribute.Emit): Emit attribute for more owners when exist.
10985
10986         * codegen.cs, class.cs: Updated to don't re-attach attribute twice as now
10987         it has now different behaviour.
10988
10989 2006-04-04  Marek Safar  <marek.safar@seznam.cz>
10990
10991         * constant.cs (Constant.IsDefaultInitializer): New method.
10992
10993         * class.cs: Updated.
10994
10995         * expression.cs (ArrayCreation.CheckIndices): Add an optimization to don't
10996         re-initialize default values. It saves KBs almost for every assembly.
10997         Thanks Zoltan for the idea.
10998         (ArrayCreation.ResolveInitializers): Renamed from ValidateInitializers.
10999         (ArrayCreation.DoResolve): Resolve only once.
11000         (ArrayCreation.Emit): Emit static initializer only when it is faster.
11001         (ArrayCreation.GetAttributableValue): Cope with optimized values.
11002
11003 2006-04-03  Zoltan Varga  <vargaz@gmail.com>
11004
11005         * report.cs (Warning, Error): Add 0-, 1-, and 2- argument specializations.
11006         From #77961.
11007
11008 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
11009
11010         * assign.cs (Assign.DoResolve): Assignment to same variable can occur
11011         in an embedded statement too.
11012
11013 2006-04-01  Raja R Harinath  <rharinath@novell.com>
11014
11015         Fix #77958
11016         * statement.cs (Switch.EmitObjectInteger) [ulong]: Remove bad cast.
11017
11018 2006-04-01  Marek Safar  <marek.safar@seznam.cz>
11019
11020         A fix for #77966.
11021
11022         * class.cs (TypeContainer.AddPartial): Don't report an error when modifier
11023         was not specified.
11024
11025         * modifiers.cs: Add DEFAULT_ACCESS_MODIFER.
11026
11027 2006-03-31  Marek Safar  <marek.safar@seznam.cz>
11028
11029         * assign.cs (LocalTemporary): Don't require ILGenerator in the resolve
11030         phase.
11031
11032         * anonymous.cs, assign.cs, ecore.cs, expression.cs: Updated after
11033         LocalTemporary change.
11034
11035         * class.cs (ClassOrStruct.DefineDefaultConstructor): Moved from
11036         TypeContainer.
11037         (ClassOrStruct.DefineFieldInitializers): Implemented static field
11038         initializers optimization.
11039         (ClassOrStruct.TypeAttr): Moved from modifiers.
11040         (Constructor.CheckBase): Don't crash when static ctor has parameters.
11041         (FieldBase.ResolveInitializer): Resolves initializer.
11042         (FieldBase.HasDefaultInitializer): New property.
11043
11044         * cs-parser.jay: Removed message.
11045
11046         * expression.cs (CompilerGeneratedThis): New specialization.
11047
11048         * modifiers.cs (TypeAttr): Moved to ClassOrStruct.TypeAttr
11049
11050 2006-03-28  Marek Safar  <marek.safar@seznam.cz>
11051
11052         * cs-parser.jay, cs-tokenizer.cs: On demand Stack allocation.
11053
11054 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
11055
11056         * ecore.cs (Expression.ResolveAsConstant): Clean up, enum constants should
11057         be now EnumConstants only.
11058
11059 2006-03-27  Marek Safar  <marek.safar@seznam.cz>
11060
11061         * attribute.cs, driver.cs: Reset more caches.
11062
11063 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11064
11065         * cs-tokenizer.cs (adjust_real): Uses float.Parse for float literals.
11066
11067 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11068
11069         * constant.cs (Constant.Reduce): Replaced EmitContext with single bool
11070         for easier reuse. Updated all overrides.
11071         (IntegralConstant): New base class for all integral constants.
11072         (IntegralConstant.Error_ValueCannotBeConverted): When assigned value if out
11073         of the constant range, report custom error.
11074         (UIntConstant.Reduce): Fixed uint conversion.
11075
11076         * ecore.cs, literal.cs: Reduce updates.
11077
11078 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11079
11080         A fix for #75813.
11081
11082         * class.cs (Constructor.Define): Removed extra if for default ctors.
11083         A patch from Atsushi Enomoto.
11084
11085 2006-03-26  Marek Safar  <marek.safar@seznam.cz>
11086
11087         * attribute.cs (Attribute.ResolveConstructor): Conversion was moved to
11088         GetAttributableValue.
11089
11090         * constant.cs (Constant.GetAttributableValue): Does implicit conversion
11091         when required.
11092
11093         * convert.cs (ImplicitConversionRequired): Error message moved to
11094         DoubleLiteral.
11095
11096         * ecore.cs (Expression.GetAttributableValue): Add type parameter for
11097         automatic implicit conversion of an output value.
11098         (EnumConstant.GetAttributableValue): Don't reduce the enum constants.
11099
11100         * expression.cs (ArrayCreation.GetAttributableValue): Add element type
11101         conversion.
11102         (TypeOf.GetAttributableValue): Add extra handling for object type.
11103
11104         * literal.cs (DoubleLiteral.Error_ValueCannotBeConverted): Doubles can have
11105         special error message.
11106
11107 2006-03-25  Marek Safar  <marek.safar@seznam.cz>
11108
11109         * class.cs (Constructor.Emit): Don't crash when struct ctor is
11110         InternalCall.
11111         (Constructor.ApplyAttributeBuilder): Transform MethodImplAttribute to be
11112         compatible with MS runtime.
11113
11114 2006-03-23  Marek Safar  <marek.safar@seznam.cz>
11115
11116         * attribute.cs (Attribute.ResolveConstructor): Check for an invalid
11117         attribute arguments here.
11118
11119         * class.cs (Indexer.Define): The check was moved to attribute class.
11120
11121 2006-03-22  Marek Safar  <marek.safar@seznam.cz>
11122
11123         * assign.cs, class.cs, codegen.cs, convert.cs, decl.cs, ecore.cs,
11124         expression.cs, typemanager.cs: Minor changes from gmcs to make merging
11125         easier.
11126
11127 2006-03-22  Raja R Harinath  <rharinath@novell.com>
11128
11129         Support ParameterDefaultValueAttribute in gmcs.  Also applied to
11130         mcs to keep code differences small.
11131         * attribute.cs (Attribute.GetParameterDefaultValue): New.
11132         * typemanager.cs (parameter_default_value_attribute_type): New.
11133         * parameter.cs (Parameter.ApplyAttributeBuilder): Use them.  Add
11134         CS1908 check.
11135
11136 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11137
11138         * expression.cs (StringConcat.Append): Reverted back to no warning state.
11139
11140 2006-03-21  Marek Safar  <marek.safar@seznam.cz>
11141
11142         * const.cs (Error_ConstantCanBeInitializedWithNullOnly): Share a message.
11143
11144         * statement.cs (Block.ResolveMeta): Look for wrong object constants in
11145         the blocks too.
11146
11147 2006-03-21  Atsushi Enomoto  <atsushi@ximian.com>
11148
11149         * doc-bootstrap.cs : fix build.
11150
11151 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11152
11153         * expression.cs (StringConcat.Append): Issue a warning when empty string
11154         is going to append.
11155
11156 2006-03-20  Marek Safar  <marek.safar@seznam.cz>
11157
11158         * assign.cs (CompoundAssign.ResolveSource): Removed.
11159
11160         * attribute.cs (ResolvePossibleAttributeType): Updated after MemberAccess
11161         clean up.
11162
11163         * class.cs (TypeContainer.FindMethods): Removed.
11164         (TypeContainer.CheckMemberUsage): Made static.
11165
11166         * codegen.cs (GetAssemblyName): Uses Length for empty string test.
11167
11168         * constant.cs (CheckRange): Removed unused type argument.
11169         (CheckUnsigned): Removed unused type argument.
11170
11171         * cs-parser.jay: Updated after MemberAccess clean up.
11172         Uses Length for empty string test.
11173
11174         * cs-tokenizer.cs: Uses Length for empty string test.
11175         (IsCastToken): Made static.
11176         (is_hex): Made static.
11177         (real_type_suffix): Made static.
11178
11179         * decl.cs (SetupCache): Made static.
11180         (OnGenerateDocComment): Removed unused ds argument.
11181
11182         * delegate.cs (VerifyDelegate): Removed unused argument.
11183
11184         * doc.cs: Uses Length for empty string test.
11185
11186         * driver.cs: Uses Length for empty string test.
11187
11188         * enum.cs (IsValidEnumType): Made static
11189
11190         * expression.cs (EnumLiftUp): Removed unused argument.
11191         (ResolveMethodGroup): Ditto.
11192         (BetterConversion): Ditto.
11193         (GetVarargsTypes): Ditto.
11194         (UpdateIndices): Ditto.
11195         (ValidateInitializers): Ditto.
11196         (MemberAccess.ctor): Ditto.
11197         (GetIndexersForType): Ditto.
11198
11199         * flowanalysis.cs: (MergeFinally): Removed unused argument.
11200
11201         * iterators.cs: Updated after MemberAccess clean up.
11202
11203         * location.cs: Uses Length for empty string test.
11204
11205         * namespace.cs: Uses Length for empty string test.
11206
11207          * report.cs (CheckWarningCode): Made static.
11208
11209         * statement.cs (LabeledStatement): Removed unused argument.
11210
11211         * typemanager.cs (FilterNone): Removed.
11212
11213 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11214
11215         * codegen.cs (EmitContext.TestObsoleteMethodUsage): Removed as it become
11216         obsolete.
11217
11218         * class.cs: Updated.
11219
11220 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11221
11222         * cs-parser.jay.cs: __arglist is not allowed for delegates.
11223
11224 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11225
11226         A fix for #77822.
11227
11228         * expression.cs (VerifyArgumentsCompat): Reverted to double error
11229         reporting, it's more tricky than I thought.
11230
11231 2006-03-18  Marek Safar  <marek.safar@seznam.cz>
11232
11233         A fix for #77816.
11234
11235         * anonymous.cs.cs (AnonymousMethod): Add host to allow access to 
11236         host container.
11237         (AnonymousMethod.ImplicitStandardConversionExists): New method.
11238         (AnonymousMethod.Compatible): Moved parameter resolving to DoResolve.
11239         Add more error reporting; Fixed issue with params.
11240
11241         * convert.cs (ImplicitStandardConversionExists): Returned conversion check.
11242
11243         * cs-parser.jay: AnonymousMethod requires host container.
11244
11245         * delegate.cs (NewDelegate.DoResolve): Updated after Compatible changes.
11246
11247 2006-03-18  Raja R Harinath  <harinath@gmail.com>
11248
11249         * class.cs: Change 'TypeContainer ds' constructor argument to
11250         'DeclSpace parent'.  Some classes were missed below due to
11251         different naming convention.
11252
11253         * class.cs (MemberCore.Parent): Delete.  This makes the
11254         ParentContainer changes below enforceable by the compiler.
11255
11256         Treat pointers to enclosing declaration space as 'DeclSpace', not
11257         'TypeContainer'.
11258         * class.cs, const.cs, delegate.cs, enum.cs, iterator.cs: Change
11259         'TypeContainer parent' constructor argument to 'DeclSpace parent'.
11260
11261         * statement.cs (LocalInfo..ctor): Use DeclSpace argument instead
11262         of TypeContainer.
11263         (Block.AddThisVariable): Likewise.
11264         * class.cs (MethodData.Define, MethodData.Emit): Likewise.
11265         (AbstractPropertyEventMethod.Emit): Likewise.
11266         (AbstractPropertyEventMethod.EmitMethod): Likewise.
11267         (GetMethod.Define, SetMethod.Define): Likewise.
11268         (PropertyMethod.Define, DelegateMethod.Define): Likewise.
11269         (DelegateMethod.EmitMethod): Likewise.
11270
11271         Fix regression test-partial-13.cs.
11272         Rationalize use of PartialContainer.  Ensure that the partial
11273         class semantics can be tied to type-correctness, i.e., any
11274         violation will cause a compile error.
11275         * class.cs, const.cs: Access all fields that belong to class
11276         TypeContainer via ParentContainer.  Arguments of EmitContexts and
11277         Resolve()-like functions still use 'Parent'.
11278
11279         * class.cs (SourceMethod): Use DeclSpace, not TypeContainer.
11280         (*.CreateEmitContext): Change TypeContainer argument to DeclSpace.
11281         (PropertyMethod.CheckModifiers): Remove unused argument.
11282         * codegen.cs (EmitContext..ctor): Change TypeContainer argument to
11283         DeclSpace.
11284
11285 2006-03-17  Raja R Harinath  <harinath@gmail.com>
11286
11287         Make semantics of PartialContainer simpler.
11288         * decl.cs (DeclSpace.IsPartial): Remove.
11289         * class.cs (TypeContainer.IsPartial): Likewise.
11290         (TypeContainer..ctor): Set PartialContainer to point to self.
11291         (TypeContainer.GetClsCompliantAttributeValue): Don't use IsPartial.
11292         (TypeContainer.FindNestedType): Likewise.
11293         (MemberCore.ParentContainer): Simplify.  Remove deprecation.
11294
11295 2006-03-17  Marek Safar  <marek.safar@seznam.cz>
11296
11297         * typemanager.cs.cs (GetInterfaces): Don't recreate 0-sized arrays.
11298
11299 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11300
11301         * class.cs (FieldMember.Emit): ParentContainer is real parent for partial
11302         classes.
11303
11304 2006-03-15  Marek Safar  <marek.safar@seznam.cz>
11305
11306         * class.cs (Operator.Define): An error for base conversion was not
11307         reported correctly.
11308
11309 2006-03-14  Atsushi Enomoto  <atsushi@ximian.com>
11310
11311         * iterator.cs : yield break is allowed in try statement which has
11312           catch clauses. Fixed bug #77767.
11313
11314 2006-03-13  Marek Safar  <marek.safar@seznam.cz>
11315
11316         A fix for #77593, #77574.
11317
11318         * class.cs (MethodCore.CheckBase): Another if for operator.
11319
11320 2006-03-09  Marek Safar  <marek.safar@seznam.cz>
11321
11322         * anonymous.cs (AnonymousMethod.Compatible): Don't crash when parameters
11323         were not resolved
11324
11325         * delegate.cs (Delegate.GetInvokeMethod): Use emitcontext free MemberLookup.
11326         (DelegateCreation.ImplicitStandardConversionExists): New method for just
11327         conversion test.
11328         
11329         *ecore.cs (Expression.MemberLookup): Don't ask for emitcontext when it's
11330         not needed.
11331
11332         * assign.cs, constant.cs, convert.cs, delegate.cs, expression.cs:
11333         Updated after another emitcontext usage was clean up. It should help us to
11334         synchronize with gmcs easier.
11335
11336 2006-03-04  Marek Safar  <marek.safar@seznam.cz>
11337
11338         A fix for #77353.
11339
11340         * class.cs (SetMethod.DefineParameters): Uses new parameters type ctor.
11341         (Event.Define): ditto
11342         (SetIndexerMethod.DefineParameters): Uses Parameters.MergeGenerated.
11343
11344         * delegate.cs (Delegate.Define): Uses Parameters.MergeGenerated.
11345         Removed redundant code and set NewSlot for Invoke method too.
11346
11347         * parameter.cs (Parameters.ctor): Add custom, type ctor.
11348         (Parameters.MergeGenerated): New method. Use this method when you merge
11349         compiler generated argument with user arguments.
11350
11351 2006-03-03  Marek Safar  <marek.safar@seznam.cz>
11352
11353         * attribute.cs (ResolveAsTypeTerminal): Removed.
11354
11355         * ecore.cs (Expression.ResolveAsTypeTerminal): Make virtual to allow
11356         specialization for predefined types; 30% speed up.
11357         Finally placed obsolete check to right place.
11358         (Expression.ResolveType): Removed.
11359
11360         * enum.cs, expression.cs, parameter.cs, statement.cs, typemanager.cs:
11361         Updated after ResolveType was removed.
11362
11363         * expression.cs (Cast.ctor): Check void cast.
11364         (Binary.ResolveAsTypeTerminal): Is never type.
11365         (Conditional.ResolveAsTypeTerminal): Is never type.
11366
11367         * rootcontext.cs (ResolveCore): Set base type to simplify some code later.
11368
11369 2006-03-01  Raja R Harinath  <rharinath@novell.com>
11370
11371         Fix #77679.
11372         * expression.cs (ParameterReference.DoResolveBase): Change return
11373         type to bool.
11374         (ParameterReference.DoResolve, ParameterReference.DoResolveLValue):
11375         Update.
11376
11377         Fix #77628.
11378         * ecore.cs (PropertyExpr.InstanceResolve): Fix CS1540 check.
11379
11380         Fix #77642.
11381         * typemanager.cs (GetFullNameSignature): Don't nullref on
11382         protected accessors.
11383
11384 2006-02-27  Marek Safar  <marek.safar@seznam.cz>
11385
11386         * attribute.cs (Attribute.PosArguments, Attribute.NamedArguments): Use
11387         these two separated members to simplify the code.
11388         (Attribute.Resolve): Refactored to use new fields and methods.
11389         (Attribute.ResolveConstructor): Extracted from ResolveArguments and
11390         implemented obsolete attribute checking.
11391         (Attribute.ResolveNamedArguments): Extracted from ResolveArguments and
11392         implemented obsolete checking again. It look line never ending quest ;-)
11393         (GlobalAttribute.ResolveConstructor): Need to override as the rest.
11394
11395         * cfold.cs (BinaryFold): TryReduce throws an exception to indicate error.
11396
11397         * constanct.cs (TryReduce): Throws OverflowException to indicate error.
11398
11399         *class.cs (Property.Define): Add RegisterProperty call.
11400
11401         * cs-parser.jay: Replaced ArrayList with fixed array for attribute
11402         argument groups (only 2).
11403
11404         * ecore.cs (Expression.GetAttributableValue): New virtual method used for
11405         encoding expression to arguments.
11406         (Expression.ExprClassToResolveFlags): Just turned to property.
11407
11408         * expression.cs (ArrayCreation.ValidateInitializers): Slightly optimized.
11409         (ArrayCreation.GetAttributableValue): Renamed from EncodeAsAttribute and
11410         optimized as well as implemented support for zero-length attributes.
11411
11412         * typemanager.cs (TypeManager.RegisterProperty, TypeManager.GetProperty):
11413         Add caching of PropertyInfo's.
11414
11415 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11416
11417         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Don't report
11418         error multiple times.
11419
11420 2006-02-25  Marek Safar  <marek.safar@seznam.cz>
11421
11422         New partial class implementation.
11423         A fix for #77027, #77029, #77403
11424
11425         * attribute.cs (Attributable): Made attributes protected.
11426
11427         * class.cs (TypeContainer): Add PartialContainer and partial_parts as
11428         the replacements of ClassPart and PartialContainer.
11429         (TypeContainer.AddClassOrStruct): Call RecordDecl here.
11430         (TypeContainer.AddInterface): Ditto.
11431         (TypeContainer.AddPartial): The main method for partial classes. It checks
11432         for errors and merges ModFlags and attributes. At the end class is added to
11433         partial_parts list.
11434         (TYpeContainer.DefineDefaultConstructor): Checks whether default ctor is
11435         required here.
11436         (TypeContainer.GetClsCompliantAttributeValue): Cope with partial class too.
11437         (TypeContainer.GetNormalPartialBases): Resolves base classes and interfaces
11438         from the rest of partial classes.
11439         (TypeContainer.GetClassBases): Simplified.
11440         (TypeContainer.DefineTypeBuilder): New method, mostly extracted from
11441         DefineType.
11442         (TypeContainer.DefineDefaultConstructor): Is used by derived classes.
11443         (TypeContainer.HasExplicitLayout): Uses Flags now.
11444         (PartialContainer): Removed.
11445         (ClassOrStruct.AddToContainer): Moved enclosing member name check here.
11446         (StaticClass): Was merged with Class.
11447         (Class.GetClassBases): class and static class bases are verified here.
11448         (Class.TypeAttr): Added static attributes when class is static.
11449         (Struct.RegisterFieldForInitialization): Moved from TypeContainer.
11450         (MemberBase): In some cases we need to call parent container for partial
11451         class. It should be eliminated but it's not easy now.
11452
11453         * cs-parser.jay: Replaced all PartialContainer with AddPartial.
11454
11455         * decls.cs (MemberCore.DocComment): Introduced new property as is used by
11456         partial classed to accumulate class comments.
11457         (MemberCore.GetClsCompliantAttributeValue): Moved from TypeContainer.
11458
11459         * doc.cs (GenerateTypeDocComment): Partial classes clean up.
11460
11461         * driver.cs (MainDriver): Tree.GetDecl was removed.
11462
11463         * modifiers.cs (Modifiers): Add partial modifier.
11464
11465         * tree.cs (Tree.decl): Removed.
11466         (RootTypes): Started to use this class more often for root types
11467         specializations.
11468
11469 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11470
11471         A fix for #77615
11472
11473         * attribute.cs (AttributeTester.GetCoClassAttribute): Don't crash when
11474         external interface does not have an attribute.
11475
11476 2006-02-22  Marek Safar  <marek.safar@seznam.cz>
11477
11478         Another prerequisites for new partial classs implementation.
11479         
11480         * attribute.cs (Attribute.Equal): Implemented.
11481         (Attribute.Emit): Changed as attributes can be applied more than twice.
11482         (Attributes.Emit): Check for duplicate attributes here.
11483
11484         * class.cs, decl.cs, delegate.cs, doc.cs, enum.cs: Don't pass DeclSpace
11485         as a parameter, clean-up.
11486
11487 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11488
11489         A fix for #77485
11490
11491         * class.cs (TypeContainer.DefineType): Cannot use ResolveType because it
11492         contains obsolete attribute check which can in some cases look for base
11493         type of current class which is not initialized yet.
11494         (TypeContainer.BaseType): Replacement of ptype.
11495
11496         * decl.cs (MemberCore.CheckObsoleteType): Reuse existing code.
11497
11498 2006-02-11  Marek Safar  <marek.safar@seznam.cz>
11499
11500         First of prerequisites for new partial classs implemention.
11501         
11502         * attribute.cs (Attributable): Extended by ResolveContext;
11503         Attributes finally have correct context for resolving in all cases.
11504         (AttachTo): Attribute owner is assigned here.
11505
11506         * codegen.cs (IResolveContext): Introduce new interface to hold
11507         all information needed in resolving phase.
11508         (EmitContext): Implements IResolveContext; more clean-up needed here.
11509         
11510         * decl.cs (MemberCore): Implemented IResolveContext.
11511
11512         * anonymous.cs, attribute.cs, class.cs, codegen.cs, const.cs,
11513         decl.cs, ecore.cs, enum.cs, expression.cs, iterators.cs, namespace.cs,
11514         parameter.cs, statement.cs, tree.cs, typemanager.cs:
11515         Refactored to use new IResolveContext instead of EmitContext; cleanup
11516
11517 2006-02-06  Miguel de Icaza  <miguel@novell.com>
11518
11519         * codegen.cs (EmitScopeInitFromBlock): check here the
11520         capture_context, there is no need to make two calls to the
11521         EmitContext. 
11522
11523         * anonymous.cs: Add some debugging messages that might help me
11524         track other instances of this problem in the future (the
11525         regression of test 467).
11526
11527         * cs-parser.jay: track the variable block, as we need to initalize
11528         any captured variables declared in this block for the "catch"
11529         portion of the "Try" statement.
11530
11531         * statement.cs (Try.Emit): If the "Catch" has a VarBlock, emit any
11532         scope initialization for captured variables. 
11533
11534         Also, move the emit for the variables after the block location has
11535         been marked.
11536
11537 2006-02-06  Marek Safar  <marek.safar@seznam.cz>
11538
11539         * ecore.cs (PropertyExpr.FindAccessors): Just made flags const.
11540
11541 2006-02-02  Miguel de Icaza  <miguel@novell.com>
11542
11543         * anonymous.cs (CaptureContext.EmitInitScope): I was wrong in the
11544         commit yesterday, the initialization for the roots is necessary.
11545         What is not necessary is the scope activation.
11546
11547 2006-02-02  Raja R Harinath  <rharinath@novell.com>
11548
11549         * ecore.cs (PropertyExpr.DoResolveLValue): Add CS0206 check.
11550         * expression.cs (IndexerAccess.DoResolveLValue): Add CS1612 and
11551         CS0206 checks.
11552         (Argument.Resolve): Remove CS0206 checks.
11553
11554 2006-02-01  Miguel de Icaza  <miguel@novell.com>
11555
11556         * anonymous.cs (CaptureContext.EmitInitScope): Do not emit the
11557         scopes for all the roots, the scopes will now be emitted when the
11558         Blocks are entered.   [This change was wrong, fixed on 2006-02-02]
11559
11560         (CaptureContext.EmitScopeInitFromBlock): Simply emit the ScopeInfo
11561         code.  This reduces a lot of existing cruft.
11562         
11563         * statement.cs (Block.Emit): Call EmitScopeInitFromBlock here, so
11564         that the ScopeInfo is generated as we enter the scope, not at the
11565         time of use, which is what we used to do before.
11566
11567         * codegen.cs (EmitScopeInitFromBlock): New routine, this is called
11568         every time a Block is about to be emitted if we have a
11569         CaptureContext. 
11570
11571 2006-02-01  Raja R Harinath  <rharinath@novell.com>
11572
11573         * typemanager.cs (NoTypes, NoTypeExprs): Remove.
11574         (Reset): Update.
11575         * *.cs: Use Type.EmptyTypes instead of TypeManager.NoTypes.
11576
11577         * typemanager.cs (cons_param_array_attribute): Make private.
11578         (Reset): Set it to null.
11579         (InitCoreHelpers): Don't initialize it.
11580         (ConsParamArrayAttribute): New.  Initialize it as needed.
11581         * parameter.cs (ParamsParameter.ApplyAttribute): Update to change.
11582
11583 2006-01-31  Miguel de Icaza  <miguel@novell.com>
11584
11585         * expression.cs: There might be errors reported during the
11586         selection of applicable methods.  If there are errors, do not
11587         continue execution as it will lead the compiler to crash.
11588
11589 2006-01-30  Miguel de Icaza  <miguel@novell.com>
11590
11591         * expression.cs: Member access is not allowed on anonymous
11592         methods.  Fixes #77402.
11593
11594 2006-01-30  Raja R Harinath  <rharinath@novell.com>
11595
11596         Fix #77401
11597         * cs-parser.jay (VariableDeclaration): Don't set
11598         current_array_type to null.
11599         (field_declaration, event_declaration, declaration_statement):
11600         Set it to null here.
11601
11602 2006-01-28  Raja R Harinath  <harinath@gmail.com>
11603
11604         * typemanager.cs (GenericParameterPosition): New.
11605         * doc.cs: Use it.
11606
11607 2006-01-28  Atsushi Enomoto  <atsushi@ximian.com>
11608
11609         * doc.cs : To process "include" elements, first we should create
11610           another list than XmlNodeList, because it could result in node
11611           removal, which could result in that the XmlNodeList gives up
11612           yielding next node.
11613
11614           (Also made code identical to gmcs again.)
11615
11616 2006-01-25  Miguel de Icaza  <miguel@novell.com>
11617
11618         * ecore.cs: Introduce an error report that we were not catching
11619         before, if not silent, we must report the error.  Gonzalo ran into
11620         it.
11621
11622 2006-01-23  Miguel de Icaza  <miguel@novell.com>
11623
11624         A fix for bug: #76957
11625         
11626         * iterators.cs (MoveNextMethod.CreateMethodHost): call
11627         ComputeMethodHost before creating the method, this is a new
11628         requirement. 
11629
11630         * anonymous.cs (AnonymousContainer): Now we track all the scopes
11631         that this method references (RegisterScope).  The actual scope
11632         where the method is hosted is computed with the ComputeMethodHost
11633         before we create the method.
11634
11635         Moved the Deepest routine here.
11636
11637         (AnonymousContainer.ComputeMethodHost): New routine used to
11638         compute the proper ScopeInfo that will host the anonymous method.
11639
11640         (ScopeInfo): Deal with multiple roots.  The problem was that we
11641         did not have a unique root where all ScopeInfos could be hanged
11642         from.   Remove `topmost' ScopeInfo, and instead keep an arraylist
11643         of roots.  
11644
11645         Remove AdjustMethodScope which is now computed at the end.  Remove
11646         LinkScope which did a partial link, instead link all ScopeInfos
11647         before code generation from the new "LinkScopes" routine. 
11648
11649         Simplify all the Add* routines as they no longer need to maintain
11650         the tree, they just need to record that they are using variables
11651         from a ScopeInfo.
11652
11653         (IsAncestor, GetAncestorScopes, GetParentScope, LinkScope): New
11654         routines to produce the forest of ScopeInfo trees.
11655
11656         * class.cs (TypeContainer.AppendMethod): This is just like
11657         AddMethod, but ensures that an interface implementation method
11658         (IEnumerable.XXX) is not inserted at the beginning of the queue of
11659         methods, but at the end.
11660
11661         We use this functionality to ensure that the generated MoveNext
11662         method in the iterator class is resolved/emitted before the
11663         enumerator methods created.   
11664
11665         This is required because the MoveNext method computes the right
11666         ScopeInfo for the method.  And the other methods will eventually
11667         need to resolve and fetch information computed from the anonymous
11668         method. 
11669
11670 2006-01-21  Raja R Harinath  <harinath@gmail.com>
11671             Carlos Alberto Cortez  <calberto.cortez@gmail.com>
11672
11673         Fix rest of #76995.
11674         * namespace.cs (NamespaceEntry.UsingExternalAliases): Don't add to
11675         the 'aliases' hash.
11676         (NamespaceEntry.LookupAlias): Lookup 'extern_aliases' hash too.
11677         (NamespaceEntry.VerifyUsing): Resolve external aliases too.
11678
11679 2006-01-18  Raja R Harinath  <rharinath@novell.com>
11680
11681         Fix #76656, cs0231-2.cs.
11682         * cs-parser.jay (formal_parameter_list): Make error case catch
11683         more issues.
11684         (parenthesized_expression_0): Add CS1026 check.
11685         (invocation_expression): Remove unused { $$ = lexer.Location }.
11686
11687 2006-01-17  Raja R Harinath  <rharinath@novell.com>
11688
11689         Fix #76824.
11690         * cs-parser.jay (statement_expression): Don't list out the
11691         individual statement-expressions.  Convert syntax error into
11692         CS0201 check.
11693
11694 2006-01-16  Raja R Harinath  <rharinath@novell.com>
11695
11696         Fix #76874.
11697         * ecore.cs (MemberAccess.CheckIntermediateModification): Remove.
11698         (UnboxCast.DoResolveLValue): New.  Move CS0445 check from
11699         CheckIntermediateModification.
11700         (FieldExpr.DoResolve): Add new two-argument version that
11701         allows us to resolve the InstanceExpression as an lvalue.
11702         The one-argument variant is now just a wrapper.
11703         (FieldExpr.DoResolveLValue): Use two-argument DoResolve.
11704         Resolve the lhs as an lvalue if the it has a value type.
11705         (FieldExpr.AssignToReadonly): Move CS1648 and CS1650 checks
11706         from Assign.DoResolve.
11707         (PropertyExpr.InstanceResolve): Allow InstanceExpression to be
11708         resolved as an lvalue.
11709         (PropertyExpr.DoResolve): Update.
11710         (PropertyExpr.DoResolveLValue): Resolve the lhs as an lvalue if it
11711         has a value type.  Move CS1612 check here from
11712         CheckIntermediateModification.
11713         * assign.cs (Assign.DoResolve): Remove CS1648 and CS1650 checks.
11714         * expression.cs (EmptyExpression.OutAccess): New.  Used as the
11715         'right_side' of a ResolveLValue on an 'out' argument.
11716         (EmptyExpression.LValueMemberAccess): New.  Used as the
11717         'right_side' of a propagated ResolveLValue on a value type.
11718         (LocalVariableReference.DoResolveBase): Recognize
11719         EmptyExpression.OutAccess and EmptyExpression.LValueMemberAccess.
11720         Add CS1654 check.
11721         (Argument.Resolve): Use EmptyExpression.OutAccess rather than
11722         EmptyExpression.Null.
11723
11724 2006-01-16  Atsushi Enomoto  <atsushi@ximian.com>
11725
11726         * typemanager.cs : added IsGenericParameter(). In mcs it always
11727           return false.
11728         * doc.cs : for generic parameters, use GenericParameterPosition,
11729           not FullName.
11730
11731 2006-01-12  Ben Maurer  <bmaurer@andrew.cmu.edu>
11732
11733         * expression.cs: Fix Console.WriteLine ((this = x).foo);
11734
11735 2006-01-12  Miguel de Icaza  <miguel@novell.com>
11736
11737         This fixes the problem where we used ldfld instead of ldflda to
11738         load the "THIS" pointer on captured parameters, when THIS is a
11739         value type.  See bug #77205.
11740         
11741         * iterators.cs (CapturedThisReference.Emit): Pass false to
11742         EmitThis (we do not need the address).
11743
11744         * codegen.cs (EmitThis): it needs to know whether we need the
11745         address of `this' or not.  This is used by value types.  
11746
11747         * expression.cs (This.AddressOf): Pass true to the EmitThis call,
11748         every other call passes false.
11749
11750 2006-01-12  Raja R Harinath  <rharinath@novell.com>
11751
11752         Fix #77221.
11753         * typemanager.cs (TryGetBaseDefinition): Rename from the mis-named
11754         GetOverride.
11755         * expression.cs (Invocation.OverloadResolve): Update.
11756         (Invocation.DoResolve): Avoid double resolution of invocation.
11757
11758 2006-01-11  Raja R Harinath  <rharinath@novell.com>
11759
11760         Fix #77180.
11761         * expression.cs (Unary.Emit): When in /checked+ mode, don't emit
11762         unary negation of floating point types as 0-expr; negation cannot
11763         overflow in floating point types.
11764
11765         Fix #77204.
11766         * expression.cs (MemberAccess.DoResolve): Disallow the use of '.'
11767         on operands of 'void' type.
11768
11769         Fix #77200.
11770         * cfold.cs (BinaryFold): Implement folding of BinaryOr, BinaryAnd
11771         and ExclusiveOr for boolean constants too.
11772
11773 2006-01-09  Raja R Harinath  <rharinath@novell.com>
11774
11775         Fix #75636.
11776         * expression.cs (Invocation.OverloadResolve): Replace reflected
11777         override methods with their base virtual methods, rather than
11778         skipping over them.
11779         * typemanager.cs (TypeManager.GetOverride): New.
11780
11781 2006-01-05  Jb Evain  <jbevain@gmail.com>
11782
11783         * class.cs (Property.Define, Indexer.Define): do not tag the
11784         properties as SpecialName | RTSpecialName.
11785
11786 2006-01-04  Miguel de Icaza  <miguel@novell.com>
11787
11788         * class.cs (MethodCore.IsDuplicateImplementation): This method was
11789         doing a low-level comparission of parameter types.  It was lacking
11790         a check for __argslist. 
11791
11792 2005-12-30  Miguel de Icaza  <miguel@novell.com>
11793
11794         * expression.cs (ParameterReference.DoResolveBase): Allow
11795         reference parameters if they are local to this block. 
11796
11797         This allows the ref and out parameters of a delegate to be used in
11798         an anonymous method, for example:
11799
11800         delegate void set (out int x);
11801
11802         set s = delegate (out int x){
11803                 x = 0;
11804         };
11805
11806         This is used by functionality introduced late in the C# language.
11807         
11808         * anonymous.cs (AnonymousMethod.Compatible): Allow anonymous
11809         method that take ref and out parameters. 
11810
11811         Fixes #77119 which was a late change in the spec.
11812
11813 2005-12-23  Miguel de Icaza  <miguel@novell.com>
11814
11815         * anonymous.cs (ScopeInfo.LinkScope): Do not link the scope to its
11816         parent if its the same scope.  Fixes #77060.
11817
11818 2005-12-21  Miguel de Icaza  <miguel@novell.com>
11819
11820         * driver.cs: Report the case of no source files and no -out:
11821         argument provided.
11822
11823 2005-12-20  Raja R Harinath  <rharinath@novell.com>
11824
11825         Fix #77035.
11826         * expression.cs (ComposedCast.GetSignatureForError): Define.
11827
11828 2005-12-18 Carlos Alberto Cortez <calberto.cortez@gmail.com>
11829
11830         Fix #76995
11831
11832         * namespace.cs (NamespaceEntry): Add extern_aliases as a
11833         ListDictionary, to contain the ExternAliasEntry entries (in
11834         addition to the NamespaceEntry.aliases hashtable). This field is
11835         shared between the original entry and its doppelganger (bodyless 
11836         copy of it).
11837         (NamespaceEntry.UsingExternalAlias): Add the extern alias entry to
11838         extern_aliases field.
11839         (NamespaceEntry.Lookup): Move the IsImplicit check after the
11840         lookup in extern_aliases.
11841
11842 2005-12-16  Raja R Harinath  <rharinath@novell.com>
11843
11844         Fix #77006.
11845         * class.cs (TypeContainer.Mark_HasEquals): New.
11846         (TypeContainer.Mark_HasGetHashCode): New.
11847         (ClassPart): Override them.
11848         (MethodCore.CheckBase): Use them instead of referring to Parent.Methods.
11849
11850         Fix #77008.
11851         * enum.cs (EnumMember.EnumMember): Pass the parent_enum as the
11852         'parent' argument to the base constructor.
11853
11854         Remove all mention of TypeContainer from decl.cs.
11855         * decl.cs (MemberCore.Parent): Change into a DeclSpace.
11856         (MemberCore.MemberCore): Change type of 'parent' argument to DeclSpace.
11857         (DeclSpace.DeclSpace): Likewise.
11858         (DeclSpace.DefineMembers): Remove unused argument.
11859         * cs-parser.jay (pop_current_class): Update to changes.  Simplify
11860         debugging check -- we don't care if the debug code throws an
11861         InvalidCastException instead of an InternalErrorException.
11862         * class.cs (TypeContainer.DefineMembers): Update to changes.
11863         (TypeContainer.DoDefineMembers): Likewise.
11864         (TypeContainer.GetMethods): Likewise.
11865         (PropertyMember.Define): Likewise.
11866         (MemberBase.Parent): New property that forwards to
11867         MemberCore.Parent, but ensures that we get a TypeContainer.
11868         * rootcontext.cs (RootContext.PopulateCoreType): Update to changes.
11869         (RootContext.PopulateTypes): Likewise.  Remove special case code
11870         for !RootContext.StdLib: DefineMembers is idempotent.
11871
11872 2005-12-14  Miguel de Icaza  <miguel@novell.com>
11873
11874         * convert.cs (ExplicitConversionCore): Check the return value from
11875         ExplicitConversionCore which can return null on failure.  Fixes #76914
11876
11877 2005-12-13  Marek Safar  <marek.safar@seznam.cz>
11878
11879         * class.cs (Method.ApplyAttributeBuilder): Test out modifier properly.
11880
11881 2005-12-11  Atsushi Enomoto  <atsushi@ximian.com>
11882
11883         * doc.cs : The search for referenced namespace was insufficient to
11884           get global one as it used to do. Fixed bug #76965.
11885
11886 2005-12-10  Atsushi Enomoto  <atsushi@ximian.com>
11887
11888         * doc.cs : check name in cref in the last phase that whether it is
11889           namespace or not.
11890
11891 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11892
11893         * cs-tokenizer.cs : reverted the latest change: it somehow broke
11894           Mono.C5.
11895
11896 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11897
11898         * doc.cs : so it turned out that we cannot skip override check for 
11899           interface members. Fixed bug #76954.
11900
11901 2005-12-09  Atsushi Enomoto  <atsushi@ximian.com>
11902
11903         * cs-tokenizer.cs : fixed bug #75984:
11904           - #warning and #error should not be handled when the source line
11905             is disabled.
11906           - #line is not checked strictly when the source line is disabled.
11907           - #define and #undef is on the other hand checked strictly at any
11908             state.
11909
11910 2005-12-08  Atsushi Enomoto  <atsushi@ximian.com>
11911
11912         * cs-tokenizer.cs : missing Location (actually, filename) in one of
11913           CS1027 report.
11914
11915 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11916
11917         * attribute.cs (GlobalAttribute.ctor): Pass NamespaceEntry only.
11918
11919         * class.cs (EmitFieldInitializers): Simplified and fixed to work with
11920         event initializers.
11921         (FieldBase.EmitInitializer): Moved from TypeContainer and simplified.
11922         (FieldBase.Initializer): Initializer is now optional.
11923         (EventField.Define): Only event field can have initializer.
11924
11925         * codegen.cs (EmitContext): DeclSpace is not readonly (small hack).
11926
11927         * const.cs (Const): Reuse initializer.
11928
11929         * cs-parser.jay: Updated after FieldBase changes.
11930         Added current_array_type to simplify array initializers.
11931
11932         * ecore.cs (NullCast.IsDefaultValue): Implemented.
11933
11934         * expression.cs, iterators.cs: Updated.
11935
11936         * namespace.cs (NamespaceEntry): Made UsingFound private.
11937
11938 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11939
11940         * parameterCollection.cs: Obsolete, removed.
11941         * parser.cs: Obsolete, removed.
11942
11943 2005-12-05  Marek Safar  <marek.safar@seznam.cz>
11944
11945         Fix #76849.
11946         * class.cs (Constructor.Emit): Set obsolete checking for whole context.
11947
11948         * enum.cs (Enum.Define): Set obsolete context here.
11949
11950 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11951
11952         * doc.cs :
11953           - FindDocumentedMember() now expects 1) paramList as null
11954             when "we don't have to check the number of parameters" and
11955             2) Type.EmptyTypes when "there is no arguments".
11956           - Introduced FoundMember struct to hold the exact type which was
11957             used to find the documented member (the above change broke
11958             test-xml-044; it might be better just to use DeclaringType than
11959             what MS does, like this change does, but it depends on usage.)
11960
11961 2005-12-05  Atsushi Enomoto  <atsushi@ximian.com>
11962
11963         * doc.cs : documented member might be from DeclaringType for nested
11964           types. Fixed bug #76782.
11965
11966 2005-12-03  Ben Maurer  <bmaurer@ximian.com>
11967
11968         * anonymous.cs: Have the param code handle leaving copies on the
11969         stack etc. Allows anonymous params to take part in the assignment
11970         code (++, +=, etc). Fixes bug #76550
11971
11972         * expression.cs: Handle the prepare_for_load/leave_copy by passing
11973         it down to the anon code.
11974
11975         * iterators.cs: Use dummy var here
11976
11977         * codegen.cs: Handle new vars
11978
11979 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11980
11981         Fix #76849.
11982         * class.cs (MethodData.Define): Set proper Obsolete context.
11983
11984         * ecore.cs (FieldExpr.ResolveMemberAccess): Don't check [Obsolete] in
11985         obsolete context.
11986         (FieldExpr.DoResolve): Ditto.
11987
11988 2005-12-01  Marek Safar  <marek.safar@seznam.cz>
11989
11990         Fix #76849.
11991         * class.cs (MethodCore.DoDefineParameters): Test [Obsolete] only when
11992         parent is not obsolete.
11993
11994 2005-12-01  Atsushi Enomoto  <atsushi@ximian.com>
11995
11996         * doc.cs : (FindDocumentedMember) find parameterless members first
11997           and get CS0419 in the early stage. Fixed first case of bug #76727.
11998
11999 2005-11-30  Marek Safar  <marek.safar@seznam.cz>
12000
12001         Fix #76859.
12002         * ecore.cs (Expression.ResolveAsConstant): Report constant error only when
12003         no error was reported.
12004
12005         *expression.cs (Binary.DoResolve): left can be null.
12006
12007 2005-11-22  Marek Safar  <marek.safar@seznam.cz>
12008
12009         Fix #76783.
12010         * class.cs (MethodData.Emit): Parameters should be labeled first.
12011
12012 2005-11-21  Marek Safar  <marek.safar@seznam.cz>
12013
12014         Fix #76761.
12015         * parameter.cs (Parameter.ApplyAttributeBuilder): Fixed `ref' detection.
12016
12017 2005-11-18  Marek Safar  <marek.safar@seznam.cz>
12018
12019         * attribute.cs (AreParametersCompliant): Moved to Parameter.
12020
12021         * class.cs (MethodCore): Parameter clean up.
12022         (IMethodData): Added ParameterInfo.
12023         (MethodData): Parameter clean up.
12024         (Indexer.Define): Parameter clean up.
12025
12026         * anonymous.cs,
12027         * codegen.cs,
12028         * cs-parser.jay,
12029         * decl.cs,
12030         * doc.cs,
12031         * ecore.cs,
12032         * flowanalysis.cs,
12033         * iterators.cs,
12034         * pending.cs,
12035         * statement.cs,
12036         * typemanager.cs: Parameter clean up.
12037
12038         * delegate.cs (Define): Get rid of duplicated code.
12039
12040         * expression.cs (ParameterReference): Removed useless parameters
12041         and simplified.
12042         (Invocation): Ditto.
12043
12044         * parameter.cs (ParamsParameter): New class, params specialization.
12045         (ArglistParameter): Attemp to separate arglist.
12046         (Parameter): Refactored to be reusable and faster.
12047         (Parameter.Modifier): Made understandable.
12048         (Parameters): Changed to be used as a class for `this' assembly
12049         parameters. Refactored to use new specialized classes.
12050
12051         * support.cs (ParameterData): Added Types property.
12052         (InternalParameters): Deleted.
12053
12054 2005-08-20  Martin Baulig  <martin@ximian.com>
12055
12056         Merging this patch from GMCS to fix #75867.
12057
12058         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12059         scope if we don't already have it.
12060
12061 2005-11-17  Martin Baulig  <martin@ximian.com>
12062
12063         * anonymous.cs
12064         (CaptureContext.EmitMethodHostInstance): Use `Ldarg_0' if we
12065         inherit the scope from our parent.  Fixes #76653.
12066
12067 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12068
12069         * doc.cs : the previous patch does not actually fix the bug.
12070           PropertyInfo override check is now implemented and really fixed it.
12071         * expression.cs : Invocation.IsAncestralType() is used from doc.cs.
12072
12073 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12074
12075         * doc.cs : apply "override filter" also to properties.
12076           Fixed bug #76730.
12077
12078 2005-11-16  Atsushi Enomoto  <atsushi@ximian.com>
12079
12080         * doc.cs : renamed FindMembers() to FindMethodBase(). For interfaces,
12081           no need to check overrides. For classes, omit those results from 
12082           interfaces since they must exist in the class. Fixed bug #76726.
12083
12084 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12085
12086         * typemanager.cs : (GetFullNameSignature) differentiate indexers
12087           with different parameters. Fixed the second problem in #76685.
12088
12089 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12090
12091         * doc.cs : (FindDocumentedMember) pass invocation_type as well (to
12092           get expected 'protected' access in CheckValidFamilyAccess()).
12093           Fixed bug #76692.
12094
12095 2005-11-15  Atsushi Enomoto  <atsushi@ximian.com>
12096
12097         * doc.cs : (GenerateTypeDocComment) Fields could be FixedField.
12098           Fixed bug #76705.  CS1569 was incorrectly commented out.
12099
12100 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
12101
12102         * doc.cs : use Invocation.IsOverride() to do real override check.
12103         * expression.cs : made Invocation.IsOverride() internal.
12104
12105 2005-11-14  Atsushi Enomoto  <atsushi@ximian.com>
12106
12107         * doc.cs : use TypeManager.FindMembers() instead of (possible)
12108           TypeBuilder.FindMembers() and filter overriden base members out.
12109           Fixed bug #76990.
12110
12111 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12112
12113         * doc.cs : ref/out parameters are represented as '@' (instead of
12114           '&' in type FullName). Fixed bug #76630 (additionally crefs).
12115
12116 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12117
12118         * doc.cs : when there was no '.' in cref to methods in doc comment,
12119           then parameters were missing in the output. Fixed bug #76691.
12120
12121 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12122
12123         * driver.cs : don't output docs when there is an error.
12124           Fixed bug #76693.
12125
12126 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12127
12128         * doc.cs :
12129           Now it should detect indexers. Fixed primary concern in bug #76685.
12130           Fixed CS0419 message to not show the identical member signature in
12131           the message.
12132
12133 2005-11-13  Atsushi Enomoto  <atsushi@ximian.com>
12134
12135         * doc.cs : (FindDocumentedMember) use TypeManager.MemberLookup()
12136           instead of Type.FindMembers() since it does not handle events.
12137           Fixed bug #71604.
12138
12139 2005-11-12  Gert Driesen  <drieseng@users.sourceforge.net>
12140
12141         * codegen.cs: Fixed typo (speficied -> specified).
12142
12143 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12144
12145         Fix #76369.
12146         * doc.cs (FindDocumentedTypeNonArray): Don't resolve again.
12147
12148 2005-11-11  Marek Safar  <marek.safar@seznam.cz>
12149
12150         * attribute.cs: Changed error message.
12151
12152         * cs-tokenizer.cs: One more check.
12153
12154 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12155
12156         * statement.cs (Block.Resolve): Ignore empty statement.
12157
12158 2005-11-10  Marek Safar  <marek.safar@seznam.cz>
12159
12160         * report.cs: Made error/warning methods more strict to avoid
12161         their misuse.
12162
12163         * anonymous.cs, attribute.cs, class.cs, codegen.cs, constant.cs,
12164         convert.cs, cs-parser.jay, cs-tokenizer.cs, decl.cs, delegate.cs,
12165         doc.cs, driver.cs, ecore.cs, expression.cs, location.cs,
12166         namespace.cs, parameter.cs, statement.cs, typemanager.cs: Updated.
12167
12168 2005-11-08  Marek Safar  <marek.safar@seznam.cz>
12169
12170         * attribute.cs (Attribute.GetCoClassAttributeValue): New method.
12171         (AttributeTester.GetCoClassAttribute): Get CoClassAttribute.
12172
12173         * class.cs (TypeContainer.IsComImport): New property.
12174         (Constructor.Define): Create proper ctor for ComImport types.
12175
12176         * expression.cs (New.CheckComImport): Fixed.
12177
12178 2005-11-07  Miguel de Icaza  <miguel@novell.com>
12179
12180         * anonymous.cs (CaptureContext.AddParameterToContext): The fact
12181         that a parameter has been captured does not mean that we do not
12182         have to do the rest of the processing.  This fixes the second part
12183         of #76592.  If there was another anonymous method capturing
12184         values in the past, the Scope would never be set for the second
12185         method that captured the same parameter.
12186
12187         (CaptureContext.EmitAssignParameter): When `leave_copy' is passed,
12188         properly manipulate the stack.   Second part of fix for #76592.
12189
12190         * expression.cs (New): Add support for invoking "new" on
12191         interfaces that have been flagged with the ComImport attribute and
12192         the CoClass.  Fixes #76637 
12193
12194         * statement.cs (Try.DoEmit): When a variable is captured, do not
12195         try to emit the vi.LocalBuilder variable as it has been captured.
12196         Create a temporary variable and store the results on the
12197         FieldBuilder.  Fixes #76642
12198
12199 2005-11-07  Marek Safar  <marek.safar@seznam.cz>
12200
12201         * class.cs (CheckPairedOperators): Made compilable with csc 2.0.
12202
12203         * ecore.cs (InstanceResolve): Fixed CS1540 detection.
12204
12205         * expression.cs (Binary.DoResolve): Added && optimalization.
12206     
12207         * typemanager.cs (AddUserType): Removed useless argument.
12208
12209 2005-11-04  Marek Safar  <marek.safar@seznam.cz>
12210
12211         * statement.cs (Block.variables): Uses ListDictionary.
12212
12213 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12214
12215         Fix #75969.
12216         * class.cs (PartialContainer.EmitType): Customized to emit
12217         security attributes.
12218         (ClassPart.ApplyAttributeBuilder): Transform security attribute
12219         for partial classes.
12220
12221 2005-11-03  Marek Safar  <marek.safar@seznam.cz>
12222
12223         Fix #76599.
12224         * expression.cs (ElementAccess.DoResolveLValue): Fixed buffer
12225         access has to be fixed.
12226         
12227         * typemanager.cs (IsUnmanagedType): Wrong common field type.
12228
12229 2005-11-01  Marek Safar  <marek.safar@seznam.cz>
12230
12231         Fix #76590.
12232         * ecore.cs (NullCast.Reduce): Implemented.
12233
12234         * expression.cs (ArrayCreation.CheckIndices): Correcly check
12235         constant type.
12236         
12237         * statement.cs (SwitchLabel.ResolveAndReduce): Catch null
12238         properly.
12239         (Foreach.Resolve): Catch null properly.
12240
12241 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12242  
12243         * cs-tokenizer.cs: Warning text fix.
12244
12245         * driver.cs: AllWarningNumbers exposed on public interface.
12246
12247         * report.cs (): Reviewed warning numbers.
12248         (IsValidWarning): Use binary search.
12249
12250 2005-10-29  Marek Safar  <marek.safar@seznam.cz>
12251  
12252         * driver.cs: Implemeted resource visibility.
12253         (Resources): New class for code sharing between /res: and
12254         /linkres:
12255  
12256 2005-10-28  Marek Safar  <marek.safar@seznam.cz>
12257
12258         Fix #76568.
12259         * cfold.cs (ConstantFold.BinaryFold): Implemented null cast
12260         folding.
12261         
12262         * convert (Convert.ImplicitReferenceConversion): NullCast holds
12263         contants only.
12264         
12265         * ecore.cs (NullCast): Child is contant only.
12266         
12267         * literal.cs (NullLiteral.Reduce): null can be converted to any
12268         reference type.
12269
12270 2005-10-28  Kornél Pál  <kornelpal@hotmail.com>
12271
12272         * driver.cs: Use Encoding.Default as default code page instead
12273           of ISO-28591.
12274
12275 2005-10-27  Raja R Harinath  <rharinath@novell.com>
12276
12277         Fix #76085.
12278         * expression.cs (Invocation.Error_InvalidArguments): Handle
12279         __arglist parameters.
12280         (Invocation.VerifyArgumentsCompat): Likewise.
12281         * support.cs (ReflectionParameters.GetSignatureForError): Print
12282         __arglist parameters.
12283         (InternalParamters.GetSignatureForError): Likewise.
12284         * parameter.cs (Parameters.GetSignatureForError): Likewise.
12285
12286 2005-10-26  Marek Safar  <marek.safar@seznam.cz>
12287
12288         * attribute.cs (GetPropertyValue): Made public.
12289
12290         * codegen.cs (AssemblyClass): ResolveClsCompliance renamed to
12291         Resolve.
12292         Add new property WrapNonExceptionThrows to handle 2.0 assembly
12293         attribute.
12294         (AssemblyClass.Emit): Emit RuntimeCompatibilityAttribute when it
12295         is not defined.
12296         
12297         * driver.cs: Reflect method name change.
12298         
12299         * statement.cs (Try.Resolve): Warn when try has both general
12300         exception handlers.
12301         
12302         * typemanager.cs: runtime_compatibility_attr_type new predefined
12303         type.
12304
12305 2005-10-26  Raja R Harinath  <harinath@gmail.com>
12306
12307         Fix #76419.
12308         * pending.cs (InterfaceMethod): Allow tm.args [i] to be null --
12309         treat it as an empty parameter list.
12310
12311 2005-10-26  Raja R Harinath  <rharinath@novell.com>
12312
12313         Fix #76271.     
12314         * ecore.cs (SimpleName.DoSimpleNameResolve): Make fall-back 
12315         ResolveAsTypeStep silent.
12316         * statement.cs (Block.AddConstant): Mark block as used.
12317         (Block.ResolveMeta): Avoid piling on error messages
12318         if a constant initializer resolution fails.
12319
12320 2005-10-25  Raja R Harinath  <rharinath@novell.com>
12321
12322         * namespace.cs (RootNamespace.VerifyUsingForAll, Namespace.VerifyUsing):
12323         Remove.
12324         (NamespaceEntry.VerifyAllUsing): New.
12325         (NamespaceEntry.AliasEntry.Resolve): New.  Handles common error
12326         behaviour.  Delegates actual resolution of alias to ...
12327         (NamespaceEntry.DoResolve): ... this.  Renamed from Resolve.
12328         (NamespaceEntry.LocalAliasEntry, NamespaceEntry.ExternAliasEntry):
12329         Update.
12330         * driver.cs (Driver.MainDriver): Update.
12331         
12332         * namespace.cs (NamespaceEntry.DefineNamespace): Remove.
12333         (NamespaceEntry.SymbolFileID): Make into a on-demand computed
12334         property.
12335         (Namespace.DefineNamespaces, RootNamespace.DefineNamespacesForAll):
12336         Remove.
12337         * symbolwriter.cs (SymbolWriter.Initialize): Don't call
12338         RootNamespace.DefineNamespacesForAll.
12339
12340 2005-10-24  Raja R Harinath  <harinath@gmail.com>
12341
12342         * typemanager.cs (assemblies, external_aliases, modules)
12343         (AddAssembly, AddExternAlias, AddModule GetAssemblies, Modules)
12344         (ComputeNamespaces, GetRootNamespace): Remove extra staging
12345         overhead.  Move resposibility ...
12346         * namespace.cs (GlobalRootNamespace): ... here.  Update to changes.
12347         * driver.cs, attribute.cs, codegen.cs: Update to changes.
12348
12349 2005-10-23  Raja R Harinath  <harinath@gmail.com>
12350
12351         * namespace.cs (RootNamespace.all_namespaces): Renamed from
12352         cached_namespaces.  Improve usage.
12353         (RootNamespace.Reset, RootNamespace.RegisterNamespace)
12354         (RootNamespace.VerifyUsingForAll, RootNamespace.DefineNamespacesForAll):
12355         Move from GlobalRootNamespace and simplify.
12356         (RootNamespace.Global): Make instance variable.
12357         (RootNamespace.RootNamespace): Add "alias name" parameter.
12358         (GlobalRootNamespace): Simplify drastically.
12359         (Namespace.Lookup): Don't use GetNamespace.
12360         * typemanager.cs (GetRootNamespace): Rename from
12361         ComputeNamespaceForAlias.
12362         (NamespaceClash): Use Global.IsNamespace instead of GetNamespace.
12363
12364 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12365
12366         * anonymous.cs (AnonymousContainer): Don't crash when container
12367         doesn't exist.
12368
12369 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12370
12371         * expression.cs (Binary.DoResolve): Warn when comparing same
12372         values.
12373
12374 2005-10-23  Marek Safar  <marek.safar@seznam.cz>
12375
12376         Fix #76486.
12377         * expression.cs (Binary.DoResolve): It looks like there are no
12378         convetsion rules in enum context.
12379
12380 2005-10-19  Carlos Alberto Cortez <calberto.cortez@gmail.com>
12381
12382         Add support for extern alias qualifiers.
12383         * typemanager.cs: Move some LookupTypeReflection code
12384         to namespace.cs, to have cleaner code. Added some methods
12385         to help us keep track of the extern aliased references.
12386         * driver.cs: Add suport for extern alias assemblies on command
12387         line and check for their warnings/errors. Also keep track of the
12388         extern aliased assemblies.
12389         * namespace.cs: Move the global functionality of Namespace
12390         to GlobalRootNamespace/RootNamespace. Now the global namespace
12391         is GlobalRootNamespace.Globa. Also the code moved from 
12392         typemanager.cs lives in GlobalRootNames.cs/RootNamespace.cs. 
12393         Finally added LocalAliasEntry (AliasEntry before) and
12394         ExternAliasEntry, to handle alias statements.
12395         * cs-parser.jay: Add support in the grammar for extern alias
12396         statement.
12397         * doc.cs, delegate.cs, expression.cs ecore.cs, symbolwriter.cs: 
12398         Update callings to Namespace (now in GlobalRootNamespace).
12399
12400 2005-10-18  Raja R Harinath  <rharinath@novell.com>
12401
12402         Fix #76371.
12403         * class.cs (TypeContainer.DefineType): Move updating of
12404         topological sort earlier in the code.
12405         * decl.cs (DeclSpace.ResolveBaseTypeExpr): Don't use TypeBuilder.
12406
12407 2005-10-18  Marek Safar  <marek.safar@seznam.cz>
12408
12409         Fix #76273.
12410         * cfold.cs (BinaryFold): Reduce constant in enum conversion.
12411         
12412         * constant.cs (Constant.TryReduce): Moved from Cast class.
12413         (Reduce): Made little bit more OO and fixed missing conversions.
12414         
12415         * ecore.cs (Reduce): Implemented.
12416         (Binary.EnumLiftUp): New method to upgrade values to enum values.
12417         
12418         * literal.cs (Reduce): Implemented.
12419         
12420         * class.cs: Reverted Miguel's wrong commit.
12421
12422 2005-10-14  Miguel de Icaza  <miguel@novell.com>
12423
12424         * ecore.cs (GetMemberType): Report the correct mapping for the MemberCore
12425
12426 2005-10-14  Atsushi Enomoto  <atsushi@ximian.com>
12427
12428         * cs-parser.jay, expression.cs : CS0214 was missing error location
12429           for constants. Fixed bug #76404.
12430
12431 2005-10-11  Marek Safar  <marek.safar@seznam.cz>
12432
12433         Fix #76370.
12434         * convert.cs (ExplicitConversionCore): Fixed object->enum
12435         conversion.
12436
12437 2005-10-10  Raja R Harinath  <rharinath@novell.com>
12438
12439         * ecore.cs (PropertyExpr.Emit): Use Invocation.EmitCall to emit
12440         InstanceExpression.
12441         (PropertyExpr.EmitCall): Likewise.
12442         * expression.cs (Invocation.EmitArguments): Handle case where
12443         arguments == null.
12444         (Invocation.EmitCall): Avoid allocating temporary variable if
12445         there are no arguments.
12446
12447 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12448
12449         Fix #76323.
12450         * convert.cs (ImplicitConversionStandard): Move conversion of
12451         void* to arbitrary pointer types ...
12452         (ExplicitConversionStandard): .. here.
12453         * ecore.cs (Expression.Error_ValueCannotBeConverted): Fix CS0266
12454         error to always print typenames.
12455
12456 2005-10-07  Raja R Harinath  <rharinath@novell.com>
12457
12458         * convert.cs (GetConversionOperator): Rename from
12459         GetConversionOperators.  Move operator selection code from ...
12460         (UserDefinedConversion): ... here.
12461
12462 2005-10-06  Marek Safar  <marek.safar@seznam.cz>
12463
12464         * convert.cs (ExplicitConversionCore): Removed duplicate enum
12465         conversion.
12466
12467 2005-10-05  Marek Safar  <marek.safar@seznam.cz>
12468
12469         * assign.cs (Assign.DoResolve): Error method changed.
12470
12471         * cfold.cs (DoConstantNumericPromotions): Error method changed.
12472         
12473         * const.cs (ResolveValue): Reset in_transit immediately.
12474         
12475         * constant.cs: Error method changed.
12476         
12477         * convert.cs: Removed useless location parameter.
12478         (ExplicitNumericConversion): Don't do double enum check.
12479         (ExplicitConversionCore): Renamed from ExplicitConversion.
12480         (ExplicitUnsafe): Extracted from ExplicitConversion.
12481         (ExplicitConversion): Uses for error reporting.
12482         
12483         * ecore.cs (Error_ValueCannotBeConverted): More logic for more
12484         error messages.
12485         (ResolveBoolean): Uses common error method.
12486         (CastToDecimal): Get rid of ec.
12487         (CastFromDecimal): Optimized.
12488         (ConvCast): Get rid of ec.
12489         
12490         * enum.cs (ResolveValue): Reset in_transit immediately.
12491         (Emit): Return after first error.
12492         
12493         * expression.cs: Convert changes.
12494         
12495         * literal.cs: Error method changed.
12496         
12497         * statement.cs: Error method changed.
12498
12499 2005-10-03  Raja R Harinath  <rharinath@novell.com>
12500
12501         * support.cs (SeekableStreamReader.Position): Don't error out when
12502         the requested position is just beyond the end of the current
12503         buffered data.
12504
12505 2005-09-28  Raja R Harinath  <rharinath@novell.com>
12506
12507         * support.cs (SeekableStreamReader): Simplify drastically.  Don't
12508         try to keep in sync with the byte count of the underlying Stream.
12509         However, this limits us to a window size of 2048 characters: i.e.,
12510         the maximum lookahead of our lexer/parser can be 2048 characters.
12511
12512 2005-09-28  Marek Safar  <marek.safar@seznam.cz>
12513
12514         Fix #76255.
12515         * driver.cs: Fix compilation files with full root path.
12516
12517 2005-09-25  Miguel de Icaza  <miguel@novell.com>
12518
12519         * report.cs (SymbolRelatedToPreviousError): Format the output so
12520         it does not use an open parenthesis that is never closed. 
12521
12522         * driver.cs: Follow coding guidelines
12523
12524 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12525
12526         Fix #72930.
12527         * const.cs (Const.ResolveValue): Check for assigning non-null
12528         value to reference type.
12529
12530 2005-09-27  Marek Safar  <marek.safar@seznam.cz>
12531
12532         * anonymous.cs: Implemented ExprClassName.
12533         
12534         * assign.cs (Assign.DoResolve): Don't chrash when type is not
12535         delegate.
12536         
12537         * attribute.cs (ResolveArguments): Enabled MethodImplOptions
12538         check.
12539         
12540         * class.cs (StaticClass.DefineContainerMembers): Report protected
12541         members as error.
12542         
12543         * codegen.cs: if(ed) PRODUCTION.
12544         
12545         * convert.cs (Error_CannotImplicitConversion): Better error
12546         distinction.
12547         
12548         * cs-parser.jay: More error checks.
12549         
12550         * cs-tokenizer.cs (consume_identifier): Fixed Miguel's revert.
12551         
12552         * driver.cs (CSCParseOption): Enabled wrong option check.
12553         
12554         * ecore.cs (Expression.ExprClassName): Turned to property.
12555         (MemberExpr.CheckIntermediateModification): For checking boxed
12556         value types     modification.
12557         
12558         * statement.cs (Fixed.Resolve): Expression type must be
12559         convertible to fixed type.
12560         (CollectionForeach.GetEnumeratorFilter,TryType):
12561         Small refactoring for easier error checking.
12562
12563 2005-09-26  Marek Safar  <marek.safar@seznam.cz>
12564
12565         * attribute.cs (Attribute.Resolve): Check Obsolete attribute for
12566         attributes.
12567         
12568         * class.cs (GeneratedBaseInitializer): New class for customization
12569         compiler generated initializers.
12570         (MemberBase.DoDefine): Check Obsolete attribute here.
12571         (FieldMember.DoDefine): Ditto.
12572         
12573         * const.cs (ExternalConstant.CreateDecimal): Builder for decimal
12574         constants.
12575         
12576         * decl.cs (MemberCore.EmitContext): Returns valid current ec.
12577         (MemberCore.GetObsoleteAttribute): Removed argument.
12578         (MemberCore.CheckObsoleteness): Obsolete attributes are hierarchic.
12579         (MemberCore.CheckObsoleteType): New helper.
12580         
12581         * delegate.cs,
12582         * enum.cs,
12583         * statement.cs: Updates after MemberCore changes.
12584         
12585         * ecore.cs (TypeExpr.ResolveType): Check type obsoleteness here.
12586         (FieldExpr.ResolveMemberAccess): Fixed decimal constants checks.
12587         
12588         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't check
12589         obsolete attribute for compiler construct.
12590         (As.DoResolve): Cache result.
12591         
12592         * iterators.cs (Define_Constructor): Use GeneratedBaseInitializer.
12593
12594 2005-09-26  Raja R Harinath  <rharinath@novell.com>
12595
12596         Fix #76133.
12597         * expression.cs (This.VerifyFixed): In a value type T, the type of
12598         'this' is T&, iow, 'this' is either an out or ref parameter.  In a
12599         value type R, 'this' is treated as a value parameter.
12600
12601 2005-09-22  Miguel de Icaza  <miguel@novell.com>
12602
12603         * statement.cs (Lock): Use the TemporaryVariable class instead of
12604         manually using local variables as those do not work when variables
12605         are captured.
12606
12607         * ecore.cs: Moved the TemporaryVariable class from being a nested
12608         class inside Foreach to be a public class that can be employed in
12609         other places. 
12610
12611 2005-09-19  Marek Safar  <marek.safar@seznam.cz>
12612
12613         * cs-parser.jay: interface_accessors replaced by
12614         accessor_declarations.
12615
12616         * ecore.cs, literal.cs, statement.cs: NullLiteral holds null
12617         location.
12618         
12619         * statement.cs (GotoCase.Resolve): Convert null constant to
12620         null case.
12621         (SwitchLabel.ResolveAndReduce): Ditto.
12622         (SwitchLabel.NullStringCase): Custom null stamp.
12623         (Switch.SimpleSwitchEmit): Fix from NullLiteral to NullStringCase.
12624         
12625         typemanager.cs (CSharpSignature): Don't skip first argument
12626         for full names.
12627
12628 2005-09-18  Miguel de Icaza  <miguel@novell.com>
12629
12630         * driver.cs: Set InEmacs based on the environment variable EMACS. 
12631
12632         * location.cs (InEmacs): in this mode, do not report column
12633         location as it confuses Emacs.
12634
12635 2005-09-16  Marek Safar  <marek.safar@seznam.cz>
12636
12637         * cfold.cs, constant.cs, convert.cs, ecore.cs,
12638         expression.cs, iterators.cs, literal.cs: Store constants and
12639         literals location.
12640         
12641         * class.cs (MemberBase.ShortName): Pass location.
12642         
12643         * cs-parser.jay: Some location fixes.
12644         
12645         * ecore.cs (Expression.Location): Made virtual.
12646
12647 2005-09-05  Miguel de Icaza  <miguel@novell.com>
12648
12649         * expression.cs (Cast.TryReduce): Only reduce to an EnumConstant
12650         if the underlying types are the same, otherwise we need to produce
12651         code that will do the proper cast.
12652
12653         This was exposed by Marek's constant rewrite which produced
12654         invalid code for the call site:
12655
12656         enum X : long { a }
12657         void Method (X v) {}
12658
12659         Method ((X) 5)
12660
12661         This fixes test-49.cs
12662
12663 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12664
12665         * attribute.cs : (Attribute.IsValidArgumentType): array of string/
12666           Type/Object should be allowed as well. Fixed bug #75968.
12667
12668 2005-09-05  Atsushi Enomoto  <atsushi@ximian.com>
12669
12670         * expression.cs : (Binary.DoResolve): when one is enum constant and
12671           another is constant 0, then return enum one *as enum type*.
12672           Fixed bug 74846.
12673
12674 2005-09-02  Raja R Harinath  <rharinath@novell.com>
12675
12676         * attribute.cs (GetMarshal): Work even if "DefineCustom" is
12677         internal.
12678
12679         Fix #75941.
12680         * ecore.cs (SimpleNameResolve.DoSimpleNameResolve): Disable
12681         flow-branching for LocalVariableReferences in case we were invoked
12682         from a MemberAccess.
12683         * expression.cs (LocalVariableReference.VerifyAssigned): New.
12684         Carved out of ...
12685         (LocalVariableReference.DoResolveBase): ... this.
12686         (MemberAccess.Resolve): Do the check that was disabled during
12687         SimpleNameResolve.
12688
12689 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12690
12691         * class.cs :
12692           (PartialContainer.Create): check abstract/sealed/static strictly
12693           but abstract/sealed can exist only at one side. Fixed bug #75883.
12694
12695 2005-09-01  Kornél Pál  <kornelpal@hotmail.com>
12696
12697         Fix #75945.
12698         * attribute.cs (Attribute.GetMarshal): If ArraySubType is not
12699         specified, don't default to UnmanagedType.I4.
12700
12701 2005-09-01  Atsushi Enomoto  <atsushi@ximian.com>
12702
12703         * expression.cs : conditional operator should check possibly
12704           incorrect assign expression. Fixed bug #75946.
12705
12706 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12707
12708         * cs-tokenizer.cs, cs-parser.jay, driver.cs, support.cs :
12709           Reverting the change. gmcs is much complex than mcs on this matter.
12710
12711 2005-08-31  Atsushi Enomoto  <atsushi@ximian.com>
12712
12713         * cs-tokenizer.cs : To read another token ahead of the actual 
12714           consumption, use new SavedToken and cache token instead of moving
12715           back the stream with SeekableStreamReader (it seemed problematic).
12716         * cs-parser.jay,
12717           driver.cs : Thus use StreamReader directly.
12718         * support.cs : Thus removed SeekableStreamReader.
12719
12720 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12721
12722         Fix #75934.
12723         * anonymous.cs (ScopeInfo.MakeFieldName): New helper.
12724         (ScopeInfo.EmitScopeType): Use it to construct field names from
12725         names of captured locals.
12726
12727         Fix #75929.
12728         * ecore.cs (BoxedCast.BoxedCast) [1-argument variant]: Remove.
12729         * convert.cs (ImplicitReferenceConversion, TryImplicitIntConversion):
12730         Pass 'target_type' to BoxedCast.  Don't default to 'object'.
12731         (ExplicitConversion): Remove enum cases already handled by
12732         implicit conversion.  Move implicit conversion check to the beginning.
12733         * delegate.cs (DelegateCreation.ResolveMethodGroupExpr): Update.
12734         * expression.cs (ArrayCreation.EmitDynamicInitializers):
12735         Don't treat System.Enum as a struct.
12736
12737 2005-08-30  Jb Evain  <jbevain@gmail.com>
12738
12739         * attribute.cs: handles as expression in parameters.
12740
12741 2005-08-30  Raja R Harinath  <rharinath@novell.com>
12742
12743         Fix #75802.
12744         * class.cs (TypeContainer.VerifyClsName): Don't use a
12745         PartialContainer when verifying CLS compliance.
12746         (AbstractPropertyEventMethod): Set Parent here, ...
12747         (PropertyMethod): ... not here.
12748
12749 2005-08-30  Atsushi Enomoto  <atsushi@ximian.com>
12750
12751         * attribute.cs : escaped attribute name should not be allowed to be
12752           resolved (e.g. @class as classAttribute). Fixed bug #75930.
12753
12754 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12755
12756         Fix #75927.
12757         * convert.cs (ImplicitStandardConversionExists): Allow zero also
12758         when converting a long constant to unsigned long.
12759         * expression.cs (Invocation.OverloadResolve): Add sanity check to
12760         detect where IsApplicable and VerifyArgumentsCompat disagree.
12761
12762 2005-08-29  Raja R Harinath  <rharinath@novell.com>
12763         and Carlos Alberto Cortez  <carlos@unixmexico.org>
12764
12765         Fix #75848.
12766         * class.cs (TypeContainer.CanElideInitializer): New helper.
12767         (TypeContainer.EmitFieldInitializers): Use it to determine if we
12768         can safely emitting the initializer of a field.
12769
12770 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12771
12772         * statement.cs : (Continue.Resolve()) Unlike break, continue is not
12773           allowed inside a switch (without loop). Fixed bug #75433.
12774
12775 2005-08-26  Kornél Pál  <kornelpal@hotmail.com>
12776
12777         * AssemblyInfo.cs: Using Consts.MonoVersion instead of MonoVersion.cs.
12778         * mcs.exe.sources: Using Consts.MonoVersion instead of MonoVersion.cs.
12779
12780 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12781
12782         * driver.cs : kinda reverting the default encoding changes (not exact 
12783           revert since I noticed that "codepage:reset" might not work fine).
12784
12785 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12786
12787         * class.cs : (AbstractPropertyEventMethod) SetupName() now takes
12788           Location. Now getter and setter store location correctly.
12789           (errors/cs0111-12.cs now reports the expected location.)
12790
12791 2005-08-25  Atsushi Enomoto  <atsushi@ximian.com>
12792
12793         * driver.cs : Use default encoding on the environment.
12794           Removed (now that) extra parameter for SeekableStreamReader.
12795         * support.cs : (SeekableStreamReader) third .ctor() argument for
12796           StreamReader is not required (always true). preamble size could
12797           be acquired in simpler and safe way.
12798
12799 2005-08-24  Atsushi Enomoto  <atsushi@ximian.com>
12800
12801         * cs-parser.jay: report CS0642 at warning level 3
12802           and report CS0642 for an if else statement also
12803           fixes bug #74745. Patch by John Luke (and a bit
12804           modified by me).
12805           Removed extra CS0642 warning check for "while",
12806           "for" and "fixed".
12807         * statement.cs: In Block.Resolve(), CS0642 check
12808           is reimplemented to check a sequence of an empty
12809           statement and a block.
12810
12811           Both fix bug #66777.
12812
12813 2005-08-24  Marek Safar  <marek.safar@seznam.cz>
12814
12815         * attribute.cs (GetMethodObsoleteAttribute): Disabled obsolete properties
12816         detection until I fix it.
12817         
12818         * cs-tokenizer.cs: Changed error message.
12819         
12820         * cs-parser.jay: Fixed 2 error locations.
12821         
12822         * ecore.cs (Error_TypeDoesNotContainDefinition): Share error message.
12823         (PropertyExpr.Error_PropertyNotFound): First attempt to detect non C#
12824         properties.
12825         
12826         * enum.cs (GetSignatureForError): Fixed.
12827         
12828         * expression.cs (Invocation.IsSpecialMethodInvocation): Improved special
12829         method detection.
12830         
12831         * class.cs,
12832         * typemanager.cs (RegisterProperty): Removed.
12833         
12834         * statement.cs (CheckInvariantMeaningInBlock): Changed error message.
12835
12836 2005-08-24  Raja R Harinath  <rharinath@novell.com>
12837
12838         Fix #75874.
12839         * expression.cs (ArrayAccess.EmitLoadOpcode): Emit ldelem.i for pointers.
12840         (ArrayAccess.GetStoreOpcode): Return stelem.i for pointers.
12841
12842 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12843
12844         * expression.cs : tiny fix is required for not warning positive ulong.
12845           See test-441.cs.
12846
12847 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12848
12849         * expression.cs : add CS0652 check for constant and integral
12850           expression. Fixed bug #53974.
12851
12852 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12853
12854         * expression.cs : in DoNumericPromotions(), check if there is implicit
12855           conversion overload for string (to check CS0034). Fixed bug #52492.
12856
12857 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12858
12859         * cs-tokenizer.cs : Check newline in char constant. Fixed bug #75245.
12860
12861 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12862
12863         * ecore.cs : report location when it is *not* Null.
12864
12865 2005-08-23  Atsushi Enomoto  <atsushi@ximian.com>
12866
12867         * codegen.cs,
12868           ecore.cs,
12869           flowanalysis.cs,
12870           expression.cs:
12871           Added OmitStructFlowAnalysis to EmitContext to handle CS0165 check
12872           correctly. Fixed bug #75721.
12873
12874 2005-08-23  Raja R Harinath  <rharinath@novell.com>
12875
12876         * support.cs (SeekableStreamReader.Position): Avoid an expensive
12877         loop that performs 'min (pos, char_count)'.
12878
12879         Fix #75862.
12880         * expression.cs (Unary.ResolveOperator): Don't discard implicit
12881         converted value in Operator.OnesComplement.
12882
12883 2005-08-22  Ben Maurer  <bmaurer@ximian.com>
12884
12885         * anonymous.cs: If the anon method is pulled into a helper class,
12886         it needs to be `internal' not `private'. Fixes runtime behavior on
12887         msft. bug #75704
12888
12889 2005-08-20  Martin Baulig  <martin@ximian.com>
12890
12891         * anonymous.cs (CaptureContext.CaptureThis): Create the topmost
12892         scope if we don't already have it.
12893
12894         * expression.cs (Invocation.EmitCall): Use `ec.EmitThis ()' rather
12895         than `ig.Emit (OpCodes.Ldarg_0)' to make it work inside iterators;
12896         fixes #75867.
12897
12898 2005-08-17  Marek Safar  <marek.safar@seznam.cz>
12899
12900         Fix #75803
12901         * decl.cs (DeclSpace.VerifyClsCompliance): Skip when collision object
12902         is a partial class.
12903
12904 2005-08-16  Marek Safar  <marek.safar@seznam.cz>
12905
12906         The big constants rewrite
12907         Fix #75746, #75685 and more
12908         As a side effect saved 1MB for MWF ;-)
12909         
12910         * attribute.cs (GetAttributeArgumentExpression): Use ToType, GetTypedValue.
12911         (GetMarshal, GetMethodImplOptions, GetLayoutKindValue): Values are not
12912         enum based for corlib compilation.
12913         
12914         * cfold.cs (BinaryFold): Convert operand for enum additions. Fixed enum
12915         subtractions.
12916         
12917         * class.cs (FixedField.Define): Use ResolveAsConstant.
12918         
12919         * const.cs (IConstant): Interface constants and enums.
12920         (Const.ResolveValue): New method for constant resolvning.
12921         (ExternalConstant): Constants from imported assemblies.
12922         
12923         * constant.cs (Constant.GetTypedValue): Used to get constant with forced
12924         conversion; like enums.
12925         (Constant.ToType): Converts this constant to different type.
12926         (Constant.Increment): Adds 1.
12927         
12928         * convert.cs (ImplicitConversionRequired): Simplified.
12929         
12930         * cs-parser.jay: Create EnumMember directly.
12931         
12932         * decl.cs (MemberCore.CheckObsoleteness): Checks for ObsoleteAttribute presence.
12933         
12934         * doc.cs (GenerateEnumDocComment): Removed.
12935         
12936         * ecore.cs (Expression.ResolveAsConstant): New constant specific method.
12937         (ConvertIntLiteral): Removed.
12938         (FieldExpr.ResolveMemberAccess): Refactored to remove constant specific if(s).
12939         
12940         * enum.cs (EnumMember): Implement IConstant.
12941         (Enum.IsValidEnumConstant): Removed.
12942         (Enum.GetNextDefaultValue): Removed.
12943         (Enum.FindMembers): Updated.
12944         (Enum.GenerateDocComment): Iterate enum members.
12945         
12946         * expression.cs (Cast.TryReduce): Handle enums correctly.
12947         (New.Constantify): Made public.
12948         (MemberAccess.DoResolve): Removed contant specific if(s).
12949         
12950         * literal.cs (NullLiteral): Implement new abstract methods.
12951         
12952         * statement.cs (GotoCase.Resolve): Use new constant methods.
12953         (SwitchLabel.ResolveAndReduce): Use new constant methods.
12954         
12955         * typemanager.cs (LookupEnum): Removed.
12956         (IsEnumType): Fixed to work with corlib.
12957         (RegisterConstant): Removed.
12958         (LookupConstant): Removed.
12959         (GetConstant): Changed to work with IConstant.
12960
12961 2005-08-04  Atsushi Enomoto  <atsushi@ximian.com>
12962
12963         * location.cs : Fixed overflown (>255) column number.
12964
12965 2005-08-03  Raja R Harinath  <rharinath@novell.com>
12966
12967         First cut of the qualified-alias-member feature.
12968         * cs-tokenizer.cs (Tokenizer.is_punct): Recognize the double-colon
12969         token.
12970         * cs-parser.jay (DOUBLE_COLON): New token.
12971         (namespace_or_type_name): Add rule for recognizing
12972         qualified-alias-members.
12973         (primary_expression): Likewise.
12974         (element_access): Allow QualifiedAliasMember as a possible
12975         type-bearing expression.
12976         (local_variable_type, local_variable_pointer_type): Likewise.
12977         * namespace.cs (NamespaceEntry.LookupAlias): New.  Looks up
12978         aliases in the current and enclosing namespace declarations.
12979         (NamespaceEntry.UsingAlias): Add CS0440 warning.
12980         * decl.cs (MemberName.is_double_colon): New.
12981         (MemberName.MemberName): Add new constructor for alias-member.
12982         (MemberName.GetTypeExpression): Generate QualifiedAliasMember too.
12983         * expression.cs (QualifiedAliasMember): New expression type.
12984
12985 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12986
12987         * location.cs : it borked when no argument was specified.
12988
12989 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12990
12991         * location.cs : tiny ToString() format fix.
12992
12993 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12994
12995         * statement.cs : oops, it was missing.
12996
12997 2005-08-02  Atsushi Enomoto  <atsushi@ximian.com>
12998
12999         A set of fixes for precise line/column location.
13000
13001         * location.cs :
13002           "token" field now holds a file/line "delta", a line number offset 
13003           from the segment, and a column number. See also:
13004           http://lists.ximian.com/pipermail/mono-devel-list/2004-
13005           December/009508.html
13006           Removed static IsNull. Use instance IsNull property instead.
13007         * cs-tokenizer.cs :
13008           For some tokens it stores Location. For Identifier it stores
13009           LocatedToken which is a pair of string name and location.
13010           Column numbers are adjusted only at getChar().
13011         * report.cs :
13012           Use Location.ToString() for reporting (it now contains column).
13013         * cs-parser.jay :
13014           Largely modified to use LocatedToken instead of
13015           string (IDENTIFIER), and to acquire Location from some tokens.
13016         * namespace.cs, decl.cs, ecore.cs, class.cs, delegate.cs,
13017           iterators.cs, const.cs, anonymous.cs, tree.cs, enum.cs,
13018           codegen.cs :
13019           Now MemberName holds Location. DeclSpace.ctor() receives Location
13020           as a parameter. Removed extra parameters to all derived classes.
13021           Replaced Location.IsNull() with instance property.
13022         * assign.cs, expression.cs :
13023           Added .ctor() overload that omits Location.
13024         * attribute.cs :
13025           Added "nameEscaped" flag that indicates the identifier was escaped
13026           in the source file. This fixes bug #57047.
13027
13028 2005-08-02  Marek Safar  <marek.safar@seznam.cz>
13029
13030         * attribute.cs (AttributeTester.GetImportedIgnoreCaseClsType):
13031         New method, looking for lo-case imported cls type.
13032
13033         * decl.cs (DeclSpace.VerifyClsCompliance): Check CS3005 for types
13034         here.
13035
13036         * driver.cs: Removed VerifyTopLevelNameClsCompliance usage.
13037
13038         * enum (Enum.VerifyClsCompliance): Hardcode non-compliant types.
13039
13040         * typemanager.cs (TypeManager.AllClsTopLevelTypes): Renamed from
13041         all_imported_types.
13042         (TypeManager.LoadAllImportedTypes): Lo-case imported types.
13043
13044         Optimized to save 3.5 MB for SWF compilation.
13045
13046 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
13047
13048         * class.cs (AddToTypeContainer): Use inheritance insted of if(s).
13049         (PartialContainer.Create): Moved logic AddToContainer.
13050         (PartialContainer.MarkForDuplicationCheck): Shares name.
13051         
13052         * decl.cs (DeclSpace.AddToContainer): Check name collisions at one
13053         place.
13054         
13055         * namespace.cs (Namespace.AddDeclSpace): Lazy declspaces
13056         initialization.
13057         (Namespace.GetSignatureForError): New method.
13058         
13059         * tree.cs (Tree.RecordDecl): Moved to AddToContainer.
13060         (RootTypes.AddToTypeContainer): se inheritance insted of if(s).
13061
13062 2005-08-01  Raja R Harinath  <rharinath@novell.com>
13063
13064         Fix #75669.
13065         * ecore.cs (Expression.MemberLookupFailed): Use queried_type for
13066         member lookup rather than qualifier_type, since qualifier_type can
13067         be null.
13068
13069 2005-08-01  Marek Safar  <marek.safar@seznam.cz>
13070
13071         * enum.cs (Enum.VerifyClsName): Fixed to allow not CLSCompliant
13072         enum member.
13073
13074 2005-07-31  Miguel de Icaza  <miguel@novell.com>
13075
13076         * statement.cs: Copy the local exception into the exception
13077         captured local.  Fixes 75674
13078
13079 2005-07-31  Raja R Harinath  <harinath@gmail.com>
13080
13081         Fix #75658.
13082         * expression.cs (Invocation.OverloadResolve): Don't report error
13083         CS1501 if error CS1502 has been reported.
13084         (New.DoResolve): Delegate CS1501 reporting to
13085         Invocation.OverloadResolve.
13086
13087         Fix #75656.
13088         * statement.cs (Block.CheckInvariantMeaningInBlock): Verify
13089         invariant-meaning-in-block property in an enclosing block if
13090         necessary.
13091
13092 2005-07-29  Marek Safar  <marek.safar@seznam.cz>
13093
13094         * statement.cs (SwitchLabel.ResolveAndReduce): Refactored.
13095         (SwitchLabel.Erorr_AlreadyOccurs): Share error message.
13096         (Switch.CheckSwitch): Just save 50kb for SWF.
13097
13098 2005-07-27  Martin Baulig  <martin@ximian.com>
13099
13100         * anonymous.cs (CaptureContext.AddField): Added
13101         `AnonymousContainer am' argument; compute its toplevel scope if
13102         it's not already computed.  Fixes #75649.
13103
13104 2005-07-26  Raja R Harinath  <rharinath@novell.com>
13105
13106         Fix #75628.
13107         * class.cs (Constructor.Emit): Reset block to null if the block
13108         resolve fails.
13109
13110 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
13111
13112         * class.cs (TypeContainer.VerifyMembers): Be compatible in warning 169.
13113
13114 2005-07-25  Marek Safar  <marek.safar@seznam.cz>
13115
13116         * class.cs (MethodData.Define): Check whether accessor implementing
13117         interface is public.
13118
13119         * driver.cs (Driver.parse): Try to be smart and check for `MZ' header.
13120
13121 2005-07-22  Marek Safar  <marek.safar@seznam.cz>
13122
13123         Fix #57245
13124         * namespace.cs (LookupType): Moved same type check to...
13125         
13126         * typemanager.cs (LookupTypeReflection): Don't allow to import more types
13127         with the same name.
13128
13129 2005-07-21  Raja R Harinath  <rharinath@novell.com>
13130
13131         * namespace.cs (NamespaceLookupType): Avoid a string allocation when we
13132         already found a typebuilder.
13133         * class.cs (MethodCore.IsDuplicateImplementation): Compare
13134         MemberNames, not strings.
13135
13136         * const.cs (Error_ExpressionMustBeConst): 
13137         Rename from Error_EpressionMustBeConst.
13138         * const.cs, class.cs, statement.cd: Update.
13139
13140 2005-07-21  Marek Safar  <marek.safar@seznam.cz>
13141
13142         Fix #65573
13143
13144         * const.cs (Const.LookupConstantValue): Report missing contant expression
13145         everytime.
13146         (Error_EpressionMustBeConstant): Only one error method.
13147
13148         * class.cs, statement.c: Updated.
13149
13150 2005-07-20  Raja R Harinath  <rharinath@novell.com>
13151
13152         * statement.cs (Block.Flags): Add back HasVarargs.
13153         (Block.flags): Make protected.
13154         (ToplevelBlock.HasVarargs): Convert to a property that updates flags.
13155
13156         * typemanager.cs (types, typecontainers, user_types): Remove.
13157         (UserTypes, TypeContainers): Likewise.
13158         (HandleDuplicate, AddDelegateType, AddEnumType): Likewise.
13159         (CleanUp, Reset): Update.
13160         (AddUserType): Combine variants.  Now, only updates builder_to_declspace.
13161         (GetNestedType): Use Type.GetNestedType.
13162         (CoreLookupType): Take two arguments, the namespace and the
13163         basename of the type.  Update to use the Namespace.Lookup
13164         mechanism.
13165         (InitEnumUnderlyingTypes, InitCoreTypes): Update.
13166         (RealMemberLookup): Use IsNestedChildOf instead of playing with
13167         string concatenation and substring matches.
13168         * class.cs, enum.cs, delegate.cs: Update to changes.
13169
13170 2005-07-20  Marek Safar  <marek.safar@seznam.cz>
13171
13172         * constant.cs (Constant.Error_ConstantValueCannotBeConverted): Moved from
13173         Expression and made virtual.
13174
13175         * convert.cs (ImplicitReferenceConversionExists): Skip for value types.
13176         (ImplicitStandardConversionExists): Fixed `byte' typo ?
13177
13178         * ecore.cs (Expression.Error_ConstantValueCannotBeConverted): Moved.
13179
13180         * literal.cs (NullLiteral.Error_ConstantValueCannotBeConverted): Customize
13181         error message.
13182
13183         * convert.cs, ecore.cs, enum.cs: Reflect Error_ConstantValueCannotBeConverted
13184         change.
13185
13186 2005-07-18  Marek Safar  <marek.safar@seznam.cz>
13187
13188         Fix #57707
13189         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Check whether
13190         AssemblyCultureAttribute is not used on executable.
13191
13192         * rootcontext.cs,
13193         * typemanager.cs: Add System.Reflection.AssemblyCultureAttribute.
13194
13195 2005-07-16  Raja R Harinath  <rharinath@novell.com>
13196
13197         Fix #60638.
13198         * expression.cs (Binary.Warning_UnintendeReferenceComparison):
13199         New.  Reports CS0252/CS0253.
13200         Mostly taken from preliminary patch by Duncak Mak.
13201         (Binary.DoResolveOperator): Store results of operator lookup.
13202         Use them to detect if we need to warn about unintended reference
13203         comparisons.
13204
13205 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13206
13207         Fix #72969.
13208         * namespace.cs (Namespace.Lookup): Add back location parameter.
13209         (Namespace.LookupType): Add CS0436 report.  Add location parameter.
13210         * delegate.cs, ecore.cs, expression.cs: Update to changes.
13211
13212         * codegen.cs (EmitContext.DeclSpace): Make readonly.
13213         * namespace.cs (Namespace.Lookup): Carve out type lookup into ...
13214         (Namespace.LookupType): ... this.
13215         (NamespaceEntry.GetUsingTable): Allocate only one zero-sized array
13216         of namespaces.
13217         * typemanager.cs (LookupTypeReflection): Remove buggy code that
13218         purported to handle pointers.
13219         (char_ptr_type, void_ptr_type): Use GetPointerType rather than
13220         CoreLookupType.
13221
13222 2005-07-15  Marek Safar  <marek.safar@seznam.cz>
13223
13224         * expression.cs (MemberAccess.ResolveNamespaceOrType): Don't report nested
13225         type as namespace.
13226
13227 2005-07-15  Raja R Harinath  <rharinath@novell.com>
13228
13229         * namespace.cs (Namespace.Lookup): Drop location parameter.
13230         (NamespaceEntry.LookupAlias): Remove.  Merge into ...
13231         (NamespaceEntry.Lookup): ... this.
13232         (NamespaceEntry.Error_AmbiguousTypeReference):
13233         Move here from DeclSpace.
13234         (NamespaceEntry.LookupNamespaceOrType): Move support for dotted
13235         names ...
13236         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): ... here.
13237         * decl.cs (DeclSpace.ErrorAmbiguousTypeReference):
13238         Move to NamespaceEntry.
13239         * delegate.cs, expression.cs: Update to changes.
13240
13241 2005-07-14  Marek Safar  <marek.safar@seznam.cz>
13242
13243         * attribute.cs (Attribute.ResolveAttributeType): Renamed from
13244         CheckAttributeType and refactored.
13245         (Attribute.ResolvePossibleAttributeType): Changed to reuse
13246         ResolveAsTypeTerminal error handling.
13247         (ResolveAsTypeTerminal): Introduced because of global attributes extra
13248         handling.
13249         (GetSignatureForError): Print errors in same way.
13250
13251         * class.cs,
13252         * codegen.cs: Reflect attribute GetSignatureForError change.
13253
13254         * ecore.cs,
13255         * expression.cs: Add silent parameter to ResolveAsTypeStep.
13256
13257         * namespace.cs (UsingEntry): Refactored to make fields private.
13258
13259         * assign.cs,
13260         statement.cs: Error_UnexpectedKind has extra parameter.
13261
13262 2005-07-14  Raja R Harinath  <rharinath@novell.com>
13263
13264         * ecore.cs (IAlias): Remove.
13265         * decl.cs (DeclSpace): Don't derive from IAlias.  Remove members
13266         that implement the interface.
13267         * namespace.cs (Namespace): Likewise.
13268         (Namespace.declspaces): Renamed from 'defined_names'.
13269         (Namespace.AddDeclSpace): Renamed from 'DefineName'.  Take a
13270         DeclSpace instead of an IAlias.
13271         * tree.cs (Tree.AddDecl): Update.
13272
13273 2005-07-12  Raja R Harinath  <rharinath@novell.com>
13274
13275         * statement.cs (Block.Flags); Remove HasVarargs.
13276         (Block.HasVarargs): Move to ToplevelBlock.
13277         (Block.ThisVariable, Block.AddThisVariable): Likewise.
13278         (Block.Variables): Make protected.  Initialize variable hashtable
13279         if necessary.
13280         (Block.AddVariable): Update.
13281         (Block.Resolve): Update to changes.
13282         (ToplevelBlock.HasVarargs): New boolean.
13283         (ToplevelBlock.ThisVariable): Move here from Block.
13284         (ToplevelBlock.AddThisVariable): Likewise.
13285         (ToplevelBlock.IsThisAssigned): New.  Forwards call to this_variable.
13286         * expression.cs (This.ResolveBase): Update to changes.
13287         (ArglistAccess.DoResolve): Likewise.
13288
13289 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13290
13291         Fix #75321
13292         * ecore.cs, class.cs: Use SetAssigned instead of direct access.
13293
13294         * class.cs (TypeContainer.VerifyMembers): Distinguish between
13295         not used and not used & assigned.
13296         (FieldBase.ASSIGNED): Moved to MemberCore.Flags.
13297
13298 2005-07-11  Marek Safar  <marek.safar@seznam.cz>
13299
13300         Fix #75053
13301         * expression.cs (Is.DoResolve): null is never provided type.
13302
13303 2005-07-08  Marek Safar  <marek.safar@seznam.cz>
13304
13305         Fix #52496
13306         * cs-parser.jay: Less strict event error rule to catch more errors.
13307
13308 2005-07-08  Martin Baulig  <martin@ximian.com>
13309
13310         Fix test-iter-10.cs - distinguish whether we `yield' in a property
13311         gettter (allowed) or setter (not allowed).
13312
13313         * class.cs (Accessor): Implement IIteratorContainer.
13314         (Accessor.Yields): New public field.
13315         (PropertyBase.PropertyMethod.Define): Handle iterators on a
13316         per-accessor basis.
13317
13318         * cs-parser.jay
13319         (get_accessor_declaration, set_accessor_declaration): Set the
13320         `yields' flag on the accessor, not the property.
13321         (property_declaration): Do the iterators check on a per-accessor
13322         basis and not for the whole property.
13323
13324 2005-07-08  Martin Baulig  <martin@ximian.com>
13325
13326         * anonymous.cs (CaptureContext.EmitParameterInstance): Correctly
13327         handle parameters in nested scopes; fixes #74808; see gtest-188.cs.
13328
13329 2005-07-07  Marek Safar  <marek.safar@seznam.cz>
13330
13331         Fix #74975
13332         * attribute.cs (orig_sec_assembly): Holds original version of assembly.
13333         (ExtractSecurityPermissionSet): Cope with self referencing security
13334         attributes properly.
13335
13336         * driver.cs (SetOutputFile): Made public property OutputFile.
13337
13338 2005-07-07  Raja R Harinath  <rharinath@novell.com>
13339
13340         Fix #75486.
13341         * class.cs (TypeContainer.first_nonstatic_field): Rename from
13342         has_nonstatic_fields.  Make into a FieldBase pointer.
13343         (TypeContainer.AddField): Add CS0282 check.
13344         (TypeContainer.EmitType): Update.
13345
13346 2005-07-06  Miguel de Icaza  <miguel@novell.com>
13347
13348         * cs-tokenizer.cs (consume_identifier): Do not create strings to
13349         compare if they start with __.
13350
13351 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13352
13353         * statement.cs (Switch.SwitchGoverningType): Only look at
13354         UserCasts that don't need implicit standard conversions to one of
13355         the allowed switch types (Fixes test-322.cs).
13356         (LocalInfo.Resolve): Re-enable sanity-test.
13357
13358 2005-07-06  Marek Safar  <marek.safar@seznam.cz>
13359
13360         * cs-tokenizer.cs (consume_identifier): Detect double undescores
13361         
13362         * ecore.cs (FieldExpr.AddressOf): Changed volatile error to warning.
13363         
13364         * expression.cs (Invocation.DoResolve): Report error CS0245 here.
13365
13366 2005-07-06  Raja R Harinath  <rharinath@novell.com>
13367
13368         Fix #75472.
13369         * ecore.cs (SimpleName.GetSignatureForError): Add.
13370         * expression.cs (MemberAccess.DoResolve): Don't clobber 'expr' field.
13371         (MemberAccess.GetSignatureForError): Add.
13372
13373 2005-07-05  Marek Safar  <marek.safar@seznam.cz>
13374  
13375         The big error and warning messages review.
13376         
13377         * anonymous.cs,
13378         * assign.cs,
13379         * attribute.cs,
13380         * class.cs,
13381         * codegen.cs,
13382         * convert.cs,
13383         * cs-parser.jay,
13384         * cs-tokenizer.cs,
13385         * decl.cs,
13386         * delegate.cs,
13387         * doc.cs,
13388         * driver.cs,
13389         * ecore.cs,
13390         * enum.cs,
13391         * expression.cs,
13392         * flowanalysis.cs,
13393         * iterators.cs,
13394         * literal.cs,
13395         * location.cs,
13396         * modifiers.cs,
13397         * namespace.cs,
13398         * parameter.cs,
13399         * pending.cs,
13400         * report.cs,
13401         * rootcontext.cs,
13402         * statement.cs,
13403         * support.cs,
13404         * tree.cs,
13405         * typemanager.cs: Updated.
13406         
13407         * class.cs: (MethodCore.SetYields): Moved here to share.
13408         (PropertyMethod.Define): Moved iterator setup here.
13409         
13410         * iterators.cs: Add orig_method to have full access to parent
13411         container.
13412
13413 2005-07-05  Raja R Harinath  <rharinath@novell.com>
13414
13415         Make 'fixed variable' handling standards compliant. Fix #70807, #72729.
13416         * ecore.cs (IVariable.VerifyFixed): Remove 'is_expression' parameter.
13417         (FieldExpr.VerifyFixed): Ensure that the field is part of a fixed
13418         variable of struct type.
13419         * expression.cs (Unary.ResolveOperator): Update to change.
13420         (Indirection.VerifyFixed): Likewise.
13421         (LocalVariableReference.VerifyFixed): A local variable is always fixed.
13422         (ParameterReference.VerifyFixed): Value parameters are fixed.
13423         (This.VerifyFixed): Treat 'this' as a value parameter.
13424         * statement.cs (LocalInfo.IsFixed): Remove.
13425
13426 2005-07-01  Martin Baulig  <martin@ximian.com>
13427
13428         * iterators.cs (Iterator.CapturedThisReference.Emit): Use
13429         `ec.EmitThis ()' to get the correct scope.
13430
13431 2005-07-01  Martin Baulig  <martin@ximian.com>
13432
13433         * ecore.cs (FieldExpr.DoResolve): Don't capture the field if it's
13434         instance is a ParameterReference; fixes #75299.
13435
13436 2005-07-01  Martin Baulig  <martin@ximian.com>
13437
13438         Reverted Marek's latest patch (r46725):
13439         - it contains structural changes which are neither mentioned in
13440           the ChangeLog nor explained anywhere; for example the additional
13441           argument of EmitContext's and Iterator's .ctor's and the
13442           TypeContainer.DefineMembers() change.
13443         - structural changes like this should go in in seperate patches
13444           and not be hidden in a huge patch which just seems to affect
13445           warnings and errors.
13446           a big and hard to understand patch.
13447         - it breaks iterators and causes regressions, for instance in
13448           test-iter-03.cs.      
13449
13450 2005-06-30  Raja R Harinath  <rharinath@novell.com>
13451
13452         Fix #75412.
13453         * expression.cs (Indexers.map): Remove.
13454         (Indexers.Append): Filter out inaccessible setters and getters.
13455         (IndexerAccess.DoResolve, IndexerAccess.DoResolveLValue): Update.
13456
13457         Fix #75283.
13458         * ecore.cs (MemberExpr.EmitInstance): New.  Add CS0120 check.
13459         Refactored from ...
13460         (FieldExpr.EmitInstance, PropertyExpr.EmitInstance): ... these.
13461         (FieldExpr.Emit, PropertyExpr.Emit): Update.
13462         (FieldExpr.EmitAssign, PropertyExpr.EmitAssign): Update.
13463         * expression.cs (Invocation.EmitCall): Add CS0120 check.
13464
13465 2005-06-30  Marek Safar  <marek.safar@seznam.cz>
13466
13467         Fix #75322
13468         * class.cs (FieldBase.GetInitializerExpression): One more field
13469         for backup.
13470
13471 2005-06-28  Miguel de Icaza  <miguel@novell.com>
13472
13473         * pending.cs: Do not define a proxy if the base method is virtual,
13474         it will be picked up by the runtime (bug 75270).
13475
13476 2005-06-08  Martin Baulig  <martin@ximian.com>
13477
13478         The big Iterators rewrite :-)
13479
13480         * iterators.cs: Rewrite this to use the anonymous methods framework.
13481
13482         * rootcontext.cs (RootContext.DefineTypes): Define Delegates
13483         before the TypeContainers; see 2test-21.cs.
13484
13485         * class.cs
13486         (TypeContainer.DefineType): Don't create a new EmitContext if we
13487         already have one (this only happens if we're an Iterator).
13488         (TypeContainer.Define): Also call Define() on all our iterators.
13489         (Method.CreateEmitContext): Added support for iterators.
13490
13491         * anonymous.cs
13492         (AnonymousContainer): New abstract base class for `AnonymousMethod'.
13493         (AnonymousContainer.CreateMethodHost): Moved here from
13494         AnonymousMethod and made abstract.
13495         (AnonymousContainer.CreateScopeType): New abstract method.
13496         (AnonymousContainer.IsIterator): New public property.
13497         (ScopeInfo.EmitScopeType): Call CreateScopeType() on our Host to
13498         get the ScopeTypeBuilder rather than manually defining it here. 
13499         (ScopeInfo.EmitScopeInstance): New public method; correctly handle
13500         iterators here.
13501
13502         * driver.cs (Driver.MainDriver): Call TypeManager.InitCodeHelpers()
13503         before RootContext.DefineTypes().
13504
13505         * codegen.cs (EmitContext.RemapToProxy): Removed.
13506         (EmitContext.CurrentAnonymousMethod): Changed type from
13507         AnonymousMethod -> AnonymousContainer.
13508         (EmitContext.ResolveTopBlock): Protect from being called twice.
13509         (EmitContext.MapVariable, RemapParameter(LValue)): Removed.
13510         (EmitContext.EmitThis): Removed the iterators hacks; use the
13511         anonymous methods framework for that.
13512
13513         * statement.cs
13514         (ToplevelBlock.Container): Make this a property, not a field.
13515         (ToplevelBlock.ReParent): New public method; move the
13516         ToplevelBlock into a new container.
13517         (Foreach.TemporaryVariable): Simplify.
13518
13519 2005-06-05  Martin Baulig  <martin@ximian.com>
13520
13521         * statement.cs (LocalInfo.CompilerGenerated): New flag.
13522         (Block.AddTemporaryVariable): New public method; creates a new
13523         `LocalInfo' for a temporary variable.
13524         (Block.EmitMeta): Create the LocalBuilders for all the temporary
13525         variables here.
13526         (Foreach.TemporaryVariable): Use Block.AddTemporaryVariable() for
13527         non-iterator variables.
13528
13529 2005-06-05  Martin Baulig  <martin@ximian.com>
13530
13531         * statement.cs (Foreach.TemporaryVariable): Create the
13532         LocalBuilder in the Emit phase and not in Resolve since in some
13533         situations, we don't have an ILGenerator during Resolve; see
13534         2test-19.cs for an example.
13535
13536 2005-06-04  Martin Baulig  <martin@ximian.com>
13537
13538         **** Merged r45395 from GCS ****
13539
13540         The big Foreach rewrite - Part II.
13541
13542         * typemanager.cs (TypeManager.object_getcurrent_void): Replaced
13543         with `PropertyInfo ienumerator_getcurrent'.
13544
13545         * codegen.cs (VariableStorage): Removed.
13546
13547         * statement.cs
13548         (Foreach): Derive from Statement, not ExceptionStatement.
13549         (Foreach.CollectionForeach): New nested class.  Moved all the code
13550         dealing with collection foreach here.
13551         (Foreach.ForeachHelperMethods): Removed.
13552         (Foreach.TemporaryVariable): Implement IMemoryLocation.
13553
13554 2005-05-23  Martin Baulig  <martin@ximian.com>
13555
13556         * statement.cs (Try.DoResolve): Don't create a `finally' if we
13557         don't need to.  Fix #75014.
13558
13559 2005-05-20  Martin Baulig  <martin@ximian.com>
13560
13561         Merged r44808 from GMCS.
13562
13563         * class.cs (TypeContainer.CircularDepException): Removed.
13564         (TypeContainer.DefineType): Removed the `InTransit' stuff.
13565         (TypeContainer.CheckRecursiveDefinition): Check for circular class
13566         (CS0146) and interface (CS0529) dependencies here.
13567
13568 2005-06-21  Raja R Harinath  <rharinath@novell.com>
13569
13570         * expression.cs (Invocation.EmitCall): Fix initialization
13571         'this_call' to reflect current behaviour.  Fix indentation.
13572
13573         * convert.cs (FindMostEncompassedType): Add two trivial special
13574         cases (number_of_types == 0 || number_of_types == 1).
13575         (FindMostEncompasingType): Likewise.
13576
13577 2005-06-17  Raja R Harinath  <rharinath@novell.com>
13578
13579         Some cleanups preparing for the fix of #75283.
13580         * ecore.cs (PropertyExpr.InstanceResolve): Tighten conditions for
13581         error testing.
13582         (EventExpr.InstanceResolve): Likewise.
13583         (EventExpr.DoResolve): Remove redundant checks.
13584
13585 2005-06-10  Duncan Mak  <duncan@novell.com>
13586
13587         * cs-tokenizer.cs (process_directives): New flag for controlling
13588         the processing of preprocessor directives.
13589         (x_token): After seeing a '#', return Token.NONE instead of going
13590         to handle_preprocessing_directive() when not processing
13591         directives. This avoids unnecessary processing during the token peek in
13592         is_punct().
13593
13594         This fixes #74939.
13595
13596         * cs-tokenizer.cs (handle_preprocessing_directive, xtoken): Use
13597         the existing error reporting methods instead of Report.Error.
13598
13599         * convert.cs (priv_fmt_expr): Remove. It's not needed anymore
13600         after Raja's rewrite.
13601
13602 2005-06-08  Miguel de Icaza  <miguel@novell.com>
13603
13604         * class.cs: Small fix.
13605
13606 2005-06-08  Raja R Harinath  <rharinath@novell.com>
13607
13608         Fix #75160.
13609         * class.cs (GetPartialBases): Fix return value check of
13610         part.GetClassBases.
13611
13612 2005-06-07  Raja R Harinath  <rharinath@novell.com>
13613
13614         Ensure that partial classes are registered in their enclosing
13615         namespace.  Initial part of fix of #75160.
13616         * tree.cs (Tree.RecordDecl): Add new namespace argument.
13617         Register declspace with namespace here, not in
13618         DeclSpace.RecordDecl.
13619         * cs-parser.jay: Pass namespace to RecordDecl.
13620         * class.cs (PartialContainer.Create): Likewise.
13621         (ClassPart.DefineType): New sanity-check.  Throws an exception if
13622         called.
13623         * decl.cs (Declspace.RecordDecl): Remove.
13624         * namespace.cs (NamespaceEntry.DefineName): Remove.
13625
13626 2005-06-06  Marek Safar  <marek.safar@seznam.cz>
13627
13628         * rootcontext.cs: Reset TargetExt as well.
13629
13630 2005-06-03  Raja R Harinath  <rharinath@novell.com>
13631
13632         * ecore.cs (Expression.Resolve): Emit CS0654 error when
13633         -langversion:ISO-1.
13634
13635 2005-06-02  Raja R Harinath  <rharinath@novell.com>
13636
13637         Fix #75080, cs0119.cs.
13638         * ecore.cs (Expression.ExprClassToResolveFlags): New.  Broken out
13639         of ...
13640         (Expression.Resolve): ... this.  Use it.  Remove bogus code
13641         allowing ExprClass.Type and ExprClass.Namespace for
13642         ResolveFlags.VariableOrValue.
13643         (Expression.Resolve) [1-argument variant]: Change default resolve
13644         flags based on language version.
13645         (Expression.Error_UnexpectedKind): Use a simple string array
13646         rather than an ArrayList.
13647         * expression.cs (TypeOf.DoResolve): Set eclass to ExprClass.Value,
13648         not ExprClass.Type.
13649         (TypeOfVoid.DoResolve): Likewise.
13650         (MemberAccess.DoResolve) [3-argument variant]: Make private.  Drop
13651         flags argument -- it always has the same value.
13652
13653 2005-05-31  Raja R Harinath  <rharinath@novell.com>
13654
13655         Fix #75081.
13656         * ecore.cs (Expression.ResolveLValue): Add a Location parameter.
13657         Use it in the error message.
13658         * assign.cs, expression.cs, statement.cs: Update.
13659
13660 2005-05-30  Raja R Harinath  <rharinath@novell.com>
13661
13662         Fix #75088.
13663         * ecore.cs (Expression.MemberLookupFailed): Add CS0122 check in
13664         the "almostMatchedMember" case too.
13665         * typemanager.cs (Closure.CheckValidFamilyAccess): Add anything
13666         that failed the accessibility checks to 'almost_match'.
13667
13668 2005-05-27  Vladimir Vukicevic  <vladimir@pobox.com>
13669
13670         * attribute.cs: Use internal MethodBuilder methods to set
13671         ExactSpelling and SetLastError on PInvoke methods, instead
13672         of passing them via charset.  Fixes #75060.
13673
13674 2005-05-27  Raja R Harinath  <rharinath@novell.com>
13675
13676         * parameter.cs (Parameter): Remove TODO comment.
13677         (Parameter.DefineParameter): Remove Location parameter.
13678         (Parameters.LabelParameters): Likewise.
13679         * class.cs (Constructor.Emit): Update to change.
13680         (MethodData.Emit): Likewise.
13681         * anonymous.cs (AnonymousMethod.EmitMethod): Likewise.  
13682         * delegate.cs (Delegate.Define, Delegate.Emit): Likewise.
13683
13684 2005-05-27  Atsushi Enomoto  <atsushi@ximian.com>
13685
13686         * parameter.cs,
13687           Removed Parameters.Location and added Parameter.Location instead.
13688           Removed Location parameter from Emit() and GetSignature().
13689         * anonymous.cs,
13690           class.cs,
13691           cs-parser.jay,
13692           delegate.cs,
13693           iterators.cs,
13694           statement.cs :
13695           Modified all related calls.
13696
13697 2005-05-26  Raja R Harinath  <rharinath@novell.com>
13698
13699         Improve user-defined conversion handling.
13700         * convert.cs (GetConversionOperators): Rewrite.  Return only the
13701         applicable operators.
13702         (AddConversionOperators): New.  Helper for GetConversionOperators.
13703         (FindMostEncompassedType, FindMostEncompassingType): Verify that
13704         there is only one most encompassed/encompassing type.
13705         (FindMostSpecificSource, FindMostSpecificTarget): Remove
13706         "applicable operator" handling.
13707         (UserConversion): Move cache here from GetConversionOperators.
13708         Directly cache the chosen operator, rather than the whole
13709         MethodGroup.
13710         (ExplicitNumericConversion): Fix buggy implementation of Decimal
13711         case.  Allow conversion of decimal to sbyte and byte too.
13712         * expression.cs (EmptyExpression.Grab, EmptyExpression.Release):
13713         New static methods.  Used to avoid allocating EmptyExpressions in
13714         convert.cs.
13715
13716 2005-05-24  Duncan Mak  <duncan@novell.com>
13717
13718         * ecore.cs (CastFromDecimal): New class for casting a decimal to
13719         another class, used in Convert.ExplicitNumericConversion.
13720         (CastToDecimal): New class, similar to above, but casts to
13721         System.Decimal, used in Convert.ImplicitNumericConversion and also
13722         in explicit convesion from double/float to decimal.
13723
13724         * convert.cs (ImplicitNumericConversion): Handle implicit
13725         conversions to System.Decimal.
13726         (ExplicitNumericConversion): handle explicit conversions to
13727         System.Decimal.
13728
13729         This fixes #68711.
13730         
13731 2005-05-20  Miguel de Icaza  <miguel@novell.com>
13732
13733         * typemanager.cs (EnumToUnderlying): Do not throw if we do not
13734         know the type at this stage, just break through.   Fixes #75008 
13735
13736 2005-05-19  Martin Baulig  <martin@ximian.com>
13737
13738         * delegate.cs
13739         (ImplicitDelegateCreation.Check): Added `bool check_only' argument
13740         to disable error reporting.
13741
13742         * convert.cs (Convert.ImplicitStandardConversionExists): Use it
13743         here since we don't want to report an error; see the new test-336.cs.
13744
13745 2005-05-19  Raja R Harinath  <rharinath@novell.com>
13746
13747         * statement.cs (ToplevelBlock.GetParameterReference)
13748         (ToplevelBlock.IsParameterReference,ToplevelBlock.IsLocalParameter):
13749         Move here from class Block.
13750         * ecore.cs (SimpleName.SimpleNameResolve): Update to changes.
13751         * expression.cs (ParameterReference.DoResolveBase): Likewise.
13752
13753 2005-05-18  Martin Baulig  <martin@ximian.com>
13754
13755         Fix #74978.
13756
13757         * flowanalysis.cs
13758         (FlowBranching.Reachability): Add non-static public And() and Or()
13759         methods.
13760         (FlowBranchingSwitch): New class; do the `break_origins' thing
13761         like in FlowBranchingLoop.
13762         (FlowBranching.UsageVector.MergeBreakOrigins): Also merge the
13763         reachability, not just locals and parameters.
13764         (FlowBranching.MergeChild): Remove some of the hacks for loop and
13765         switch; MergeBreakOrigins() now takes care of that.
13766
13767 2005-05-18  Martin Baulig  <martin@ximian.com>
13768
13769         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
13770         a loop and may leave it, reset the barrier; fixes #74974.
13771
13772 2005-05-17  Marek Safar  <marek.safar@seznam.cz>
13773         
13774         * attribute.cs (Attribute.ResolveArguments): GuidAttribute check
13775         is back.
13776         
13777         * cs-parser.jay: Catch more lexical errors.
13778         
13779         * report.cs: Add one more Error method.
13780         
13781         * rootcontext.cs,
13782         * typemanager.cs: Register System.Runtime.InteropServices.GuidAttribute
13783
13784 2005-05-17  Martin Baulig  <martin@ximian.com>
13785
13786         * expression.cs (Argument.Resolve): Turn on flow analysis; fix
13787         #70970. 
13788
13789 2005-05-16  Raja R Harinath  <rharinath@novell.com>
13790
13791         Fix test-382.cs.  Emit values of decimal constants.
13792         * class.cs (TypeContainer.RegisterFieldForInitialization): New.
13793         Carved out of ...
13794         (TypeContainer.AddField): ... this.
13795         (TypeContainer.EmitFieldInitializers): Allow the list of fields
13796         with initializers to include 'Const's.
13797         (ClassPart.RegisterFieldForInitialization): Forward to
13798         PartialContainer.
13799         * const.cs (Const.Const): Pass initializer to base class.
13800         (Const.Define): In case of decimal constants, register them for
13801         initialization in a static constructor.
13802
13803 2005-05-14  Martin Baulig  <martin@ximian.com>
13804
13805         * statement.cs (Block.Resolve): Correctly handle unreachable code;
13806         do not call ResolveUnreachable() on unreachable statements in
13807         here, see the comment in the source code.
13808
13809 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13810
13811         Fix #74934.
13812         * expression.cs (BinaryResolveOperator): If one of the operands of
13813         an equality comparison is 'null' and the other is a pointer type,
13814         convert the null to a NullPointer.
13815         * convert.cs (ImplicitReferenceConversion): If the expression is a
13816         NullLiteral and the target type is a pointer type, return a
13817         NullPointer instead.
13818         (ImplicitConversionStandard): Likewise.
13819
13820 2005-05-13  Marek Safar  <marek.safar@seznam.cz>
13821         
13822         * cs-parser.jay: Set readonly context based on special constructs.
13823         
13824         * expression.cs (LocalVariableReference.DoResolveBase): Improved
13825         readonly variable error handling.
13826         
13827         * rootcontext.cs (EmitCode): Don't verify members when error
13828         occurred.
13829         
13830         * statement.cs (LocalInfo): Add reaodnly context information.
13831         (SetReadOnlyContext, GetReadOnlyContext): New methods.
13832
13833 2005-05-13  Raja R Harinath  <rharinath@novell.com>
13834
13835         * statement.cs (Block.Resolve): Revert change below.  Modify fix
13836         for #74041 to initialize 'resolved' to false only for explicit
13837         blocks.  Fixes #74873.
13838
13839 2005-05-12  Raja R Harinath  <harinath@gmail.com>
13840
13841         Fix #74920.
13842         * typemanager.cs (unmanaged_enclosing_types): New.
13843         (IsUnmanagedType): Avoid infloops by using
13844         'unmanaged_enclosing_types' to talk with recursive invocations.
13845
13846 2005-05-13  Martin Baulig  <martin@ximian.com>
13847
13848         * statement.cs (Block.Resolve): Make the `bool unresolved' flag an
13849         instance variable, not a local.  Fix #74873.
13850         (Block.ResolveUnreachable): Set it to true here.
13851
13852 2005-05-11  Duncan Mak  <duncan@novell.com>
13853
13854         * cs-tokenizer.cs (get_cmd_arg): Check that 'c' is not -1 before
13855         continuing to process for 'arg'.
13856         (handle_preprocessing_directive): Check the argument of the #endif
13857         directive and report error CS1025 if there are any trailing
13858         characters.
13859
13860         According to the C# spec, having even whitespace after the #endif
13861         directive is illegal; however, because we call arg.TrimEnd ()
13862         beforehand, we have the same behavior as csc, allowing whitespace
13863         after the directive.
13864
13865         Fixes #74892.
13866
13867 2005-05-11  Marek Safar  <marek.safar@seznam.cz>
13868
13869         Fix #74863.
13870         
13871         * class.cs (ConstructorInitializer.GetOverloadedConstructor): Removed.
13872         (Constructor.GetObsoleteAttribute): Implemented correctly.
13873
13874 2005-05-10  Martin Baulig  <martin@ximian.com>
13875
13876         * support.cs (ReflectionParameters.ParameterModifier): Use
13877         `Parameter.Modifier.REF' if we both have `ParameterAttributes.Out'
13878         and `ParameterAttributes.In'.  Fixes #74884.
13879
13880 2005-05-10  Marek Safar  <marek.safar@seznam.cz>
13881
13882         * class.cs (Method.Define): Catch attempt for Finalizer declaration.
13883         
13884         * expression.cs (Argument.GetParameterModifier): Turned to property.
13885         (Invocation.Error_InvalidArguments): Add more descriptive errors.
13886         
13887         * parameter.cs (Parameter.GetModifierSignature): Translates modifier to
13888         its C# equivalent.
13889         
13890 2005-05-09  Raja R Harinath  <rharinath@novell.com>
13891
13892         Fix #74852.
13893         * decl.cs (MemberCache.AddMethods): Register override methods,
13894         rather than non-override methods.
13895         * typemanager.cs (RegisterOverride): New.
13896         (IsOverride): Update.
13897
13898 2005-05-09  Marek Safar  <marek.safar@seznam.cz>
13899
13900         Fix #73105.
13901         
13902         * ecore.cs (SimpleName.SimpleNameResolve): Add in_transit to catch
13903         recursive declaration.
13904         
13905         * statement.cs (Block.ResolveMeta): Report any error in resolving.
13906         
13907 2005-05-06  Marek Safar  <marek.safar@seznam.cz>
13908
13909         * cfold (DoConstantNumericPromotions): Don't try to convert 0 enum.
13910         
13911         * expression.cs (Binary.DoResolve): (x && 0) is always 0.
13912
13913 2005-05-05  Raja R Harinath  <rharinath@novell.com>
13914
13915         Fix #74797.
13916         * decl.cs (DeclSpace.FamilyAccessible): 
13917         Use TypeManager.IsNestedFamilyAccessible.
13918
13919         Fix reopened #64812.
13920         * typemanager.cs (Closure.Filter): Introduce checks for 'protected
13921         internal'.
13922
13923 2005-05-04  Raja R Harinath  <rharinath@novell.com>
13924             Abin Thomas  <projectmonokochi@rediffmail.com>
13925             Anoob V E  <projectmonokochi@rediffmail.com>
13926             Harilal P R  <projectmonokochi@rediffmail.com>
13927
13928         Fix #64812.
13929         * typemanager.cs (Closure.CheckValidFamilyAccess): Don't blindly
13930         allow access to all static members.
13931
13932 2005-05-04  Martin Baulig  <martin@ximian.com>
13933
13934         * ecore.cs (FieldExpr.DoResolveLValue): Always call fb.SetAssigned().
13935
13936 2005-05-04  Martin Baulig  <martin@ximian.com>
13937
13938         Fix #74655.
13939
13940         * statement.cs (Switch.SimpleSwitchEmit): Always emit the default
13941         section at the end; make things work if `default' is not the last
13942         section.        
13943
13944 2005-05-04  Martin Baulig  <martin@ximian.com>
13945
13946         Fix #70400.
13947
13948         * statement.cs (Switch): Replaced the `got_default' field with a
13949         `default_section' one.
13950         (Switch.CheckSwitch): Set `default_section' here.
13951         (Switch.Resolve): If we're a constant switch and the constant is
13952         not found, use the default section.
13953
13954 2005-05-03  Martin Baulig  <martin@ximian.com>
13955
13956         * expression.cs (ArrayAccess.EmitGetLength): New public method.
13957
13958         * statement.cs (Foreach.ArrayForeach): New nested class.
13959         (Foreach.TemporaryVariable): New nested class.
13960         (Foreach.EmitArrayForeach): Removed; this is now in the new
13961         ArrayForeach class.
13962
13963 2005-05-03  Raja R Harinath  <rharinath@novell.com>
13964
13965         * pending.cs (BaseImplements): Move the #74773 fix here.  This is
13966         more conservative.
13967         (VerifyPendingMethods): Revert change below.
13968
13969         * typemanager.cs (IsOverride, RegisterNonOverride): New.
13970         * decl.cs (MemberCache.AddMethod): Register "non-override" methods
13971         that used to trigger warning -28.  Remove warning -28.
13972         * expression.cs (Invocation.OverloadResolve): Use
13973         TypeManager.IsOverride to distinguish override methods.
13974
13975         Fix #74773.
13976         * pending.cs (VerifyPendingMethods): If a base type implements the
13977         requested interface, don't bother checking individual methods of
13978         the base type.  As a side-effect, this prevents the creation of
13979         unnecessary proxies.
13980
13981 2005-05-02  Martin Baulig  <martin@ximian.com>
13982
13983         Fix #70182.
13984
13985         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
13986         Also `And' the locals if the old vector is null.
13987         (FlowBranching.UsageVector.BitVector.And): Allow `vector' being
13988         null; in this case we basically reset all the variables.        
13989
13990 2005-05-02  Martin Baulig  <martin@ximian.com>
13991
13992         Fix #74529.
13993
13994         * flowanalysis.cs (FlowBranching.UsageVector.MergeBreakOrigins):
13995         Added `FlowBranching branching' argument; always `and' the
13996         variables instead of `or'ing them unless we're an infinite loop.
13997
13998         * statement.cs (While.Resolve): Create a new sibling unless we're
13999         infinite.       
14000
14001 2005-05-02  Martin Baulig  <martin@ximian.com>
14002
14003         Fix #70140.
14004
14005         * class.cs (ConstructorInitializer.Resolve): Added `Block block'
14006         arguments; use it instead of creating a new TopLevelBlock.
14007         (Constructor.Emit): Call `block.ResolveMeta ()' before resolving
14008         our ConstructorInitializer.
14009
14010         * statement.cs
14011         (TopLevelBlock.TopLevelBranching): New public property.
14012         (TopLevelBlock.ResolveMeta): New public method; call ResolveMeta()
14013         and create our `TopLevelBranching'.
14014
14015         * codegen.cs (EmitContext.ResolveTopBlock): If we're not an
14016         anonymous method host, use `block.TopLevelBranching' rather than
14017         creating a new branching.
14018
14019 2005-04-20  Miguel de Icaza  <miguel@novell.com>
14020
14021         * anonymous.cs (ScopeInfo.AddChild): when adding a new child to
14022         a ScopeInfo, if any of the current children is a child of the new
14023         entry, move those children there.
14024
14025 2005-04-30  Martin Baulig  <martin@ximian.com>
14026
14027         * statement.cs (Switch.SimpleSwitchEmit): Reset `default_at_end'
14028         at the beginning of a SwitchSection.  Fix #73335.
14029
14030 2005-04-27  Marek Safar  <marek.safar@seznam.cz>
14031
14032         Fix #74378
14033         * class.cs (EmitFieldInitializers): Use FieldExpr in initializer.
14034         
14035         * ecore.cs (FieldExpr): Add a new ctor with in_initializer.
14036         (FieldExpr.DoResolve): Obsolete members are ignored for field
14037         initializers.
14038         
14039 2005-04-26  Marek Safar  <marek.safar@seznam.cz>
14040
14041         * attribute.cs (AreOverloadedMethodParamsClsCompliant): Add array
14042         of arrays detection.
14043
14044         * class.cs (Interface.VerifyClsCompliance): Add base interfaces
14045         verification.
14046         (Field.VerifyClsCompliance): Volatile fields are not compliant.
14047
14048         * decl.cs (MemberCache.VerifyClsParameterConflict): Add array of
14049         arrays report.
14050
14051 2005-04-25  Ben Maurer  <bmaurer@ximian.com>
14052
14053         * cs-parser.jay: Use the prefered version of -unsafe in error
14054         message.
14055
14056 2005-04-22  Marek Safar  <marek.safar@seznam.cz>
14057
14058         * driver.cs (CompilerCallableEntryPoint.Invoke): Reset under any
14059         circumstances.
14060
14061 2005-04-20  John Luke  <john.luke@gmail.com>
14062
14063         * driver.cs: fix typo in error message, --outout to --output
14064
14065 2005-04-20  Marek Safar  <marek.safar@seznam.cz>
14066
14067         * codegen.cs (InRefOutArgumentResolving): New field.
14068         
14069         * ecore.cs (FieldExpr.DoResolve): Check for assigning to readonly
14070         fields outside contructor.
14071         
14072         * expression.cs (Argument.Resolve): Set InRefOutArgumentResolving.
14073         
14074 2005-04-19  Miguel de Icaza  <miguel@novell.com>
14075
14076         * anonymous.cs (CaptureContext.EmitParameterInstance): The
14077         parameter code was not completed ever, so it was not as up-to-date
14078         as local variables.  Must finish it.
14079
14080         The bug fix was to compare the Toplevel of the block, not the
14081         current block.  Thanks for Ben for pointing this out. 
14082
14083 2005-04-19  Raja R Harinath  <rharinath@novell.com>
14084
14085         * decl.cs (AddMethods): Use the declaring type of the problem
14086         method to determine if we want to squash a warning.
14087
14088 2005-04-19  Marek Safar  <marek.safar@seznam.cz>
14089
14090         * attribute.cs: Removed debug output.
14091
14092         * decl.cs (MemberCache.AddMethods): Fixed Finalize ignoring.
14093         
14094         * driver.cs (Driver.parse): Synchronize parser ErrorOutput with
14095         Report.Stderr.
14096         
14097 2005-04-18  Raja R Harinath  <rharinath@novell.com>
14098
14099         Fix #74481.
14100         * expression.cs (Binary.EqualsNullIsReferenceEquals): New.
14101         (Binary.DoResolveOperator): Use it to avoid blindly optimizing out
14102         all null comparisons against reference types.
14103
14104 2005-04-18  Marek Safar  <marek.safar@seznam.cz>
14105
14106         Fix# 74565
14107         * class.cs (TypeContainer.CircularDepException) New nested
14108         exception class.
14109         (GetPartialBases, GetNormalBases, GetClassBases): Removed error.
14110         (TypeContainer.DefineType): Removed error, reset InTransit before
14111         exit.
14112         (Class.DefineType): Throw exception when is in Transit.
14113         Catch exception and report error.
14114         (Struct.DefineType): Throw exception when is in Transit.
14115         Catch exception and report error.
14116         (Interface.DefineType): Throw exception when is in Transit.
14117         Catch exception and report error.
14118
14119         * codegen.cs: Add InCatch,InFinally to EmitContext to easily
14120         handle nested exception handlers.
14121
14122         * flowanalysis.cs (InTryWithCatch): New method, search for try with
14123         a catch.
14124
14125         * iterators.cs (Yield.CheckContext): Add CS1626 report. Updated
14126         InFinally and InCatch storage.
14127
14128         * statement.cs (Throw.Resolve): Use InCatch, InFinally from ec.
14129         (Catch.Resolve): Set and Restore ec.InCatch.
14130         (Try.Resolve): Set and Restore ec.InFinally.
14131         (Try.HasCatch): True when try has catch.
14132
14133 2005-04-17  Atsushi Enomoto  <atsushi@ximian.com>
14134
14135         * doc.cs : In some cases FilterName returns MonoEvent and MonoField
14136           for the same event member, so exclude such cases from warning 419.
14137           Fixed bug #74633.
14138
14139 2005-04-16  Miguel de Icaza  <miguel@novell.com>
14140
14141         * expression.cs (Binary.ResolveOperator): Apply patch from John
14142         Luke to fix bug 59864: operators &, | and ^ on enumerations
14143         require that the same enum type on both sides.
14144
14145         * driver.cs: Add warnings to old flag usage, this is to assist
14146         people who produce Makefiles and hope that the Makefiles will be
14147         used on Windows.
14148
14149         * class.cs (TypeContainer.EmitType): Moved the definition of the
14150         special $PRIVATE$ field from the resolve phase to the Emit phase.
14151         During resolve we do not know if we are a struct with
14152         HasExplicitLayout, we know this only after the attributes for the
14153         type are emitted.
14154
14155         Set the FieldOffset to zero on the dummy field that we create for
14156         the class.   Fixes 74590.
14157
14158 2005-04-16  Raja R Harinath  <rharinath@novell.com>
14159
14160         Fix #73834.
14161         * ecore.cs (PropertyExpr.resolved): New.
14162         (DoResolve): Use it to handle a case of double resolution here.
14163         Handle a case of identical-name-and-type-name.
14164         * expression.cs (ArrayCreation.CheckIndices): Avoid double
14165         resolution by storing the results of expression resolution back
14166         into the "probes" array.
14167
14168 2005-04-15  Raja R Harinath  <rharinath@novell.com>
14169
14170         Fix cs0208-7.cs and cs0208-8.cs.
14171         * typemanager.cs (IsUnmanagedType): Arrays are not allowed
14172         (cf. ECMA standard, behaviour of CSC 1.1 and CSC 2.0).  Improve
14173         error reporting to point out the reason a struct is not unmanaged.
14174
14175 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14176
14177         * doc.cs : In FindDocumentedType(), avoid TypeExpr.ResolveType() and 
14178           just use TypeExpr.Type. This fixes bug #74595 when merged to gmcs.
14179
14180 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14181
14182         Fix #74528.
14183         * ecore.cs (PropertyExpr.InstanceResolve): Handle a case of
14184         IdenticalNameAndTypeName here.
14185         (EventExpr.InstanceResolve): Likewise.
14186
14187 2005-04-13  Marek Safar  <marek.safar@seznam.cz>
14188
14189         C# 2.0 DefaultCharSetAttribute implementation
14190         
14191         * attribute.cs (Attribute.ResolveAsTypeStep): New protected method
14192         which allows us to set GlobalNamespace for every resolve.
14193         (Attribute.ResolveArguments): Cut from Resolve.
14194         (Attribute.GetCharSetValue): Returns CharSet named argument.
14195         (Attribute.DefinePInvokeMethod): Gets default charset from
14196         module settings.
14197         (GlobalAttribute.ResolveAsTypeStep): Override.
14198         (GlobalAttribute.ResolveArguments): Override.
14199         
14200         * class.cs (TypeAttr): Is protected.
14201         
14202         * codegen.cs (ModuleClass.DefaultCharSet): New member.
14203         (ModuleClass.DefaultCharSetType): New memeber.
14204         (ModuleClass.ResolveAttributes): Resolves DefaultCharSetAttribute.
14205         
14206         * decl.cs (Decl.TypeAttr): New protected virtual. Returns default
14207         charset from module.
14208         
14209         * delegate.cs (TypeAttr): Override.
14210         (Delegate.DefineType): Use this TypeAttr.
14211         
14212         * driver.cs (Driver.MainDriver): Call Module.ResolveAttributes
14213         at very early stage (before types are defined) to resolve model
14214         module attributes. It will probably not work with corlib but it
14215         should be ok.
14216         
14217         * enum.cs (Enum.TypeAttr): New protected virtual. Returns default
14218         charset from module.
14219         
14220         * typemanager.cs (default_charset_type): New type.
14221
14222 2005-04-13  Raja R Harinath  <rharinath@novell.com>
14223
14224         * decl.cs (MemberCache.AddMethods): Don't warn if
14225         System.Object.Finalize has buggy MethodAttributes.
14226
14227         * typemanager.cs (IsUnmanagedType): Restore !IsValueType check
14228         removed below.
14229
14230 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14231
14232         * doc.cs : detect ambiguous reference to overloaded members.
14233           Fixed bug #71603. MS 1.1 csc does not detect it.
14234
14235 2005-04-13  Atsushi Enomoto  <atsushi@ximian.com>
14236
14237         * doc.cs : delegates must not be referenced with parameters.
14238           Fixed bug #71605.
14239
14240 2005-04-12  Miguel de Icaza  <miguel@novell.com>
14241
14242         * typemanager.cs (IsUnmanagedType): Arrays are allowed.
14243
14244 2005-04-10  Miguel de Icaza  <miguel@novell.com>
14245
14246         * driver.cs (MainDriver): Stop processing if the CLS stage found
14247         errors. 
14248
14249         (CompilerCallableEntryPoint.InvokeCompiler): Always
14250         reset after execution;   Take a TextWriter argument for the
14251         output.
14252
14253         * report.cs: Use the error stream instead of hardcoding stderr. 
14254
14255 2005-04-09  Miguel de Icaza  <miguel@novell.com>
14256
14257         * class.cs: Reduce code paths to test, too small of an
14258         optimization to make it worth the extra testing.  Always perform
14259         it. 
14260
14261 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14262
14263         Fix #74510.
14264         * class.cs (OperatorArrayList.CheckPairedOperators): Skip
14265         operators that had errors reported on them.
14266
14267 2005-04-08  Marek Safar  <marek.safar@seznam.cz>
14268
14269         * attribute.cs (Attribute.IsValidArgumentType): Test valid named
14270         argument types.
14271         (Attribute.Resolve): Add named argument type checking.
14272         
14273         * class.cs (FixedField.Define): Use IsPrimitiveType
14274         
14275         * expression.cs (Binary.ResolveOperator): Reflect IsCLRType renaming.
14276         
14277         * iterators.cs (Iterator.DefineIterator): Add check for arglist and
14278         unsafe parameter types.
14279         
14280         * statement.cs (Using.ResolveExpression): Add better error description.
14281         
14282         * typemanager.cs (IsCLRType): Renamed to IsPrimitiveType.
14283         
14284 2005-04-08  Raja R Harinath  <rharinath@novell.com>
14285
14286         Fix #74484.
14287         * attribute.cs (Attribute.GetAttributeUsage): Resolve
14288         AttributeUsageAttribute in the emitcontext of the attribute class,
14289         not in the emitcontext of the attributable entity it was attached to.
14290         * cs-parser.jay: Use 'current_class', not 'current_container',
14291         when creating a GlobalAttribute.
14292
14293 2005-04-08  Alp Toker  <alp@atoker.com>
14294
14295         * pending.cs: The fix to #58413 failed to compile methods implementing
14296         interfaces with/without params modifiers and vice versa, even though
14297         params modifiers aren't part of the signature. Make the modifier check
14298         less strict as in csc.
14299
14300 2005-04-07  Abin Thomas  <projectmonokochi@rediffmail.com>
14301             Anoob V E  <projectmonokochi@rediffmail.com>
14302             Harilal P R  <projectmonokochi@rediffmail.com>
14303
14304         Fix #58413.
14305         * pending.cs (TypeAndMethods.mods): New.  Store the parameter
14306         modifiers of pending methods.
14307         (PendingImplementation.PendingImplementation): Initialize it.
14308         Add Parameter.Modifier [][] mods and initialize it with ParameterData.
14309         (PendingImplementation.InterFaceMethod): Repalce Type[] argument
14310         with ParameterData.  Add check for modifiers.
14311         * class.cs (MethodData.Define): Update to changes.
14312
14313 2005-04-07  Raja R Harinath  <rharinath@novell.com>
14314
14315         * ecore.cs (Expression.IsAccessorAccessible): Clarify code somewhat.
14316
14317 2005-04-07  Marek Safar  <marek.safar@seznam.cz>
14318
14319         * class.cs (PropertyMethod.Define): Check private accessor in abstract
14320         property.
14321         
14322         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't allow RequiredAttribute
14323         
14324         * rootcontext.cs,
14325         * typemanager.cs: Registered RequiredAttributeAttribute.
14326         
14327 2005-04-06  Marek Safar  <marek.safar@seznam.cz>
14328
14329         * class.cs (VerifyMembers): Doesn't need EmitContext argument.
14330         Warning CS0169 is back at level 3.
14331         (IMethodData.SetMemberIsUsed): New method.
14332         
14333         * decl.cs (IsUsed): New value; moved from FieldBase.Status
14334         (SetMemberIsUsed, IsUsed): New methods, encapsulate IsUsed.
14335         
14336         * delegate.cs (ResolveMethodGroupExpr): Call SetMemberIsUsed.
14337
14338         * ecore.cs (FieldExpr.ResolveMemberAccess): Call SetMemberIsUsed for
14339         contants.
14340         (PropertyExpr.ResolveAccessors): Call SetMemberIsUsed when delegate
14341         is used.
14342         
14343         * expression.cs (OverloadResolve): Call SetMemberIsUsed. when method
14344         is used.
14345         
14346         * rootcontext.cs (RootContext.EmitCode): Call VerifyMembers in extra run
14347         to avoid the problems with nested types.
14348
14349 2005-04-05  Abin Thomas  <projectmonokochi@rediffmail.com>
14350             Anoob V.E  <projectmonokochi@rediffmail.com>
14351             Harilal P.R  <projectmonokochi@rediffmail.com>
14352             Raja R Harinath  <rharinath@novell.com>
14353
14354         Fix #73820.
14355         * delegate.cs (Define): Emit ParamArrayAttribute for 'params'
14356         attribute.
14357         * typemanager (GetConstructor): Make public.
14358
14359 2005-04-05  John Luke  <john.luke@gmail.com>
14360             Raja R Harinath  <rharinath@novell.com>
14361
14362         Fix #62232.
14363         * typemanager.cs (IsUnmanagedType): Check non-public fields of a
14364         struct too.  Return false quicker in a few cases.
14365         (VerifyUnManaged): Use it.
14366
14367 2005-04-05  Raja R Harinath  <rharinath@novell.com>
14368
14369         Fix #74041.
14370         * statement.cs (Block.Resolve): Initialize 'unreachable' to false,
14371         not 'unreachable_seen'.
14372
14373 2005-04-04  Marek Safar  <marek.safar@seznam.cz>
14374
14375         * attribute.cs (Attribute.GetValue): Removed unused.
14376         
14377         * codegen.cs (CodeGen.TrimExt): Removed unused.
14378         
14379         * cs-parser.jay (output): Removed unused.
14380         
14381         * cs-tokenizer.cs (hex_digits): Removed unused.
14382         
14383         * enum.cs (MapToInternalType, GetEnumeratorName): Removed unused.
14384         
14385         * expression.cs (Indirection.LoadExprValue): Removed unused.
14386         (ArrayCreation.ExpressionToArrayArgument): Removed unused.
14387         
14388         * iterators.cs (Iterator.param_types): Removed unused.
14389         
14390         * statement.cs (Goto.block): Removed unused.
14391         (ToplevelBlock.did): Removed unused.
14392         (Switch.ResolveConstantSwitch): Removed unused.
14393
14394 2005-04-01  Ben Maurer  <bmaurer@ximian.com>
14395
14396         * rootcontext.cs: Allow mcs to bootstrap with the compilation
14397         resetting thingy.
14398
14399 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14400
14401         Fix #74232 and cs0208-3.cs.
14402         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0208 check.
14403         * typemanager.cs (IsUnmanagedType): Don't allow 'object' as an
14404         unmanaged type.  Don't use FieldBuilders when 't' is a
14405         TypeBuilder.  Use ModFlags and MemberType fields.
14406         * class.cs (MemberBase.member_type): Rename from MemberType.
14407         (MemberBase.MemberType): New property.  Determines member_type on
14408         demand.
14409         (MemberBase.DoDefine): Don't initialize MemberType here.
14410         (FieldMember.Define): Likewise.
14411
14412 2005-04-01  Marek Safar  <marek.safar@seznam.cz>
14413
14414         Fix #74241
14415         * class.cs (Event.Emit): Call Add/Remove emit even for interfaces.
14416         Attributes are emitted there.
14417         
14418 2005-04-01  Raja R Harinath  <rharinath@novell.com>
14419
14420         * cs-tokenizer.cs (consume_identifier): Treat 'partial' as a
14421         keyword in 'partial enum' too.
14422         * cs-parser.jay (enum_declaration): Add CS0267 check ('partial enum'
14423         is not allowed).
14424         Report from Kamil Skalski <nazgul@omega.pl>.
14425
14426         Fix #74309.
14427         * rootcontext.cs (ResolveTree): The 'root.Interfaces' list can
14428         have partial containers too.
14429
14430         * ecore.cs (SimpleName.SimpleNameResolve): Move 'invariant meaning
14431         in block' checks to Block.CheckInvariantMeaningInBlock.
14432         * statement.cs (Block.GetKnownVariableInfo): Make private.
14433         (Block.IsVariableUsedInChildBlock): Remove.
14434         (Block.IsVariableUsedInBlock): Likewise.
14435         (Block.CheckInvariantMeaningInBlock): New.  Show location of
14436         conflicting declaration.
14437         (Block.AddVariable): Make error messages less long-winded and more
14438         specific.  Show location of conflicting declaration.
14439         * parameter.cs (Parameters.Location): New readonly property.
14440
14441 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14442
14443         Clean up semantics of invoking ResolveMemberAccess.
14444         * ecore.cs (SimpleName.DoSimpleNameResolve): If a MemberExpression
14445         can have an instance, ensure that we pass in a non-TypeExpression
14446         to ResolveMemberAccess.  Tighten up IdenticalNameAndTypeName checks.
14447         (MemberExpr.DoSimpleNameResolve): Remove type_is_inferred
14448         argument.  Update to changes and simplify.
14449         (FieldExpr.Emitinstance): Remove CS0120 check.
14450         (PropertyExpr.EmitInstance): Likewise.
14451         * expression.cs (Argument.Resolve): Likewise.
14452         (Invocation.DoResolve): Update to changes in semantics of
14453         InstanceExpression.
14454
14455 2005-03-31  Marek Safar  <marek.safar@seznam.cz>
14456
14457         Fix #74241
14458         * class.cs (AbstractPropertyEventMethod.EmitMethod): Enable emit method
14459         customization.
14460         
14461         * decl.cs (MemberCache.AddMethods): Fix infinite loop.
14462
14463 2005-03-31  Raja R Harinath  <rharinath@novell.com>
14464
14465         Fix difference in behaviour with commandline invocation.
14466         * driver.cs (Driver.Reset): New.
14467         (CompilerCallableEntryPoint): Call it.
14468
14469         * statement.cs (If.Resolve): Avoid spurious "uninitialized
14470         variable" warnings if the boolean expression failed to resolve.
14471
14472 2005-03-30  Sebastien Pouliot  <sebastien@ximian.com>
14473
14474         * attribute.cs: Fix the union of several permissions when some of them
14475         are unrestricted (so the result isn't an unrestricted permission set).
14476         Fix #74036.
14477
14478 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14479
14480         * ecore.cs (MemberExpr): New class.  Convert from interface
14481         IMemberExpr.
14482         (MemberExpr.ResolveMemberAccess): Refactor and move here from
14483         MemberAccess.ResolveMemberAccess.  Tighten up pre-conditions and
14484         error checks.
14485         (MethodGroupExpr, FieldExpr, PropertyExpr, EventExpr): Update.
14486         (MethodGroupExpr.IsExplicitImpl): Remove.
14487         (Expression.GetFieldFromEvent): Remove.
14488         (SimpleName.MemberStaticCheck): Remove.
14489         (SimpleName.DoSimpleNameResolve): Update to changes.
14490         * expression.cs (MemberAccess.ResolveMemberAccess): Refactor.
14491         (MemberAccess.IdenticalNameAndTypeName): Remove.
14492         (MemberAccess.error176): Move to MemberExpr.
14493         (MemberAccess.DoResolve): Update to changes.
14494         (BaseAccess.DoResolve): Likewise.
14495
14496 2005-03-30  Marek Safar  <marek.safar@seznam.cz>
14497
14498         C# 2.0 Conditional attribute class implementation
14499         
14500         * attribute.cs (AttributeTester.IsAttributeExcluded): New method.
14501         Analyzes class whether it has attribute which has ConditionalAttribute
14502         and its condition is not defined.
14503         
14504         * class.cs (Class.ApplyAttributeBuilder): Add IsAttributeExcluded check.
14505         (Class.IsExcluded): New method. Search for at least one defined
14506         condition in ConditionalAttribute of attribute class.
14507
14508 2005-03-30  Raja R Harinath  <rharinath@novell.com>
14509
14510         * ecore.cs (PropertyExpr): Derive from Expression, not
14511         ExpressionStatement.
14512         (PropertyExpr.EmitStatement): Remove.
14513
14514 2005-03-29  Raja R Harinath  <rharinath@novell.com>
14515
14516         Fix #74060.
14517         * expression.cs (MemberAccess.ResolveMemberAccess): Allow the
14518         internal field "value__" of an enum be private.  The examples for
14519         "value__" that I found on MSDN all used FieldAttributes.Private.
14520
14521         * decl.cs (MemberCache.AddMethods): Use C# terminology in warning.
14522         Don't mention IL method attribute names.
14523
14524         Fix #47991.  Remove a TODO.
14525         * statement.cs (Block.Toplevel): Make into a field.
14526         (Block.Parameters): Move into ToplevelBlock.
14527         (Block.known_variables): Rename from child_variable_names.
14528         (Block.Block): Remove variants that take Parameters.  Initialize
14529         'Toplevel' with the immediately surrounding toplevel block.
14530         (Block.AddKnownVariable): Rename from AddChildVariableName.  Add a
14531         LocalInfo parameter.
14532         (Block.GetKnownVariableInfo): New.
14533         (Block.IsVariableNameUsedInChildBlock): Update.
14534         (Block.IsVariableNameUsedInBlock): New.  Checks if a name is used in
14535         the block, even though it may not be in scope.
14536         (Block.AddVariable): Remove Parameters parameter.  Use
14537         Toplevel.Parameters instead.
14538         (Block.AddConstant): Remove Parameters parameter.
14539         (Block.GetParameterReference): Update to use Toplevel.Parameters.
14540         (Block.IsParamaterReference): Likewise.
14541         (Block.IsLocalParameter): Likewise.  Simplify a lot.
14542         (ToplevelBlock.Parameters): New.  Moved from Block.
14543         (ToplevelBlock.ToplevelBlock): Update to changes.  Always
14544         initialize Parameters to a non-null value.
14545         * cs-parser.jay: Update to changes.
14546         * ecore.cs (SimpleName.SimpleNameResolve): Emit cs0136 error for
14547         simple names that mean different things in the same block.  Use
14548         Block.IsVariableNameUsedInBlock.
14549
14550 2005-03-28  Raja R Harinath  <rharinath@novell.com>
14551
14552         * typemanager.cs (TypeHandle.BaseType): Make into an IMemberContainer.
14553         (TypeHandle.TypeHandle): Use LookupMemberCache rather than
14554         GetTypeHandle.  It is possible for a reflected type to derive from
14555         a TypeBuilder (e.g., int[] derives from the TypeBuilder
14556         System.Array during mscorlib compilation).
14557         * decl.cs (MemberCache.MemberCache): If the base cache doesn't
14558         contain a method_hash, don't create one either.  Don't create a
14559         deep copy of the base cache's method_hash.
14560         (MemberCache.SetupCache): Rename back from DeepCopy.
14561         (MemberCache.AddMethods): Rewrite, now that method_hash isn't
14562         already initialized.  If we see an override function, add its
14563         underlying base virtual function to the member_hash too.
14564
14565         * enum.cs (Enum.LookupEnumValue): Remove debugging code.
14566
14567 2005-03-26  Raja R Harinath  <harinath@acm.org>
14568
14569         Fix #73038.
14570         * assign.cs (Assign.DoResolve): When the RHS of an assignment
14571         fails to resolve, ensure that the LHS is still resolved as an
14572         lvalue.
14573
14574 2005-03-25  Raja R Harinath  <harinath@acm.org>
14575
14576         * enum.cs (Enum.DefineType): Set ec.InEnumContext and
14577         ec.ContainerType.
14578         (Enum.current_ec): Remove.
14579         (Enum.LookupEnumValue): Remove EmitContext argument.
14580         Just uses the one created during DefineType.
14581         (Enum.FindMembers): Update.
14582         * expression.cs (MemberAccess.DoResolve): Update.
14583
14584 2005-03-22  Marek Safar  <marek.safar@seznam.cz>
14585
14586         * assign.cs (Assign.DoResolve): Check for CS1717 when
14587         source and target are same (uses Equals).
14588
14589         * expression.cs (LocalVariableReference, ParameterReference,
14590         This): Implemented Equals, GetHashCode.
14591
14592         * statement.cs (Block.GetParameterReference): Removed useless
14593         local variable.
14594
14595 2005-03-22  Raja R Harinath  <rharinath@novell.com>
14596
14597         Fix cs0128.cs
14598         * statement.cs (Block.AddVariable): Ensure that we skip implicit
14599         blocks before deciding whether the error is cs0136 or cs0128.
14600
14601         * cs-parser.jay: Pass MemberName to RootContext.Tree.RecordDecl.
14602         (using_alias_directive, using_namespace_directive): Pass
14603         MemberName, not an expression to Namespace.UsingAlias and
14604         Namespace.Using.
14605         (MakeName): Use the MemberName of the namespace.
14606         * namespace.cs (Namespace.MemberName): New.
14607         (UsingEntry.UsingEntry): Take a MemberName, not an expression.
14608         (AliasEntry.AliasEntry, Namespace.Using, Namespace.UsingAlias):
14609         Likewise.
14610         * decl.cs (MemberName.Name): Make readonly.
14611         (MemberName.FromDotted): New "constructor".
14612         (MemberName.Equals, MemberName.GetHashCode): Implement overrides.
14613         (MemberCore.Name): Compute from MemberName on demand.
14614         (MemberCore.SetMemberName): Provide a way to change the
14615         MemberName.
14616         (MemberCore.AddToContainer): Don't take a fullname parameter.
14617         * class.cs (TypeContainer.AddToMemberContainer): Don't add the
14618         fully qualified name of the container to the member name.
14619         (TypeContainer.AddToTypeContainer): Use a fully qualified name
14620         only if the type is a member of the root container.
14621         (TypeContainer.AddMethod, TypeContainer.AddProperty): Use
14622         MemberName.Left rather than searching for an embedded ".".
14623         (PartialContainer.CreatePart): Update to changes in RootContext.
14624         (MemberBase.ShortName): Turn into a property.  Use
14625         MemberCore.SetMemberName.
14626         (MemberBase.ExplicitInterfaceName): Remove.
14627         (MemberBase.UpdateMemberName): Remove.
14628         (AbstractPropertyEventMethod.UpdateName): Use SetMemberName.
14629         (PropertyBase.SetMemberName): New override.
14630         * tree.cs (Tree.RecordDecl): Take a MemberName and use it as hash key.
14631         (Tree.GetDecl): New.
14632         (Tree.AllDecls): Rename from Decls.
14633         * attribute.cs, enum.cs, report.cs: Update to changes.
14634         * driver.cs (MainDriver): Use MemberName.FromDotted on
14635         RootContext.MainClass.
14636
14637 2005-03-21  Marek Safar  <marek.safar@seznam.cz>
14638
14639         * class.cs (FixedField.Define): Check for CS1664 and more sanity
14640         checks.
14641
14642         * expression.cs (ElementAccess.DoResolveLValue): Check for CS1708.
14643
14644 2005-03-18  Marek Safar  <marek.safar@seznam.cz>
14645
14646         * modifiers.cs (Modifiers.PROPERTY_CUSTOM): New constant for
14647         property accessor modifiers.
14648
14649         * class.cs (FieldMember.ApplyAttributeBuilder): Don't allow apply
14650         fixed buffer attribute (CS1716).
14651         (PropertyMethod.HasCustomAccessModifier): When property accessor
14652         has custom modifier.
14653
14654         * ecore (PropertyExpr.DoResolve): Add CS0271 for custom accessor
14655         modifiers.
14656         (PropertyExpr.DoResolveLValue): Add CS0272.
14657
14658 2005-03-17  Miguel de Icaza  <miguel@novell.com>
14659
14660         * convert.cs: When converting to a pointer, use the proper Conv.U
14661         or Conv.I depending on the source data type.
14662
14663         * cs-tokenizer.cs: Make the size for large decimal constants,
14664         fixes #72957.
14665
14666 2005-03-17  Martin Baulig  <martin@ximian.com>
14667
14668         * anonymous.cs (AnonymousMethod.method_modifiers): Change default
14669         from `Modifiers.INTERNAL' to `Modifiers.PRIVATE'.  Fixes #73260.
14670
14671 2005-03-17  Martin Baulig  <martin@ximian.com>
14672
14673         * anonymous.cs (AnonymousMethod.EmitMethod): Changed return type
14674         to bool so we can return an error condition.
14675         (AnonymousDelegate.Emit): Check whether AnonymousMethod.EmitMethod()
14676         returned an error.
14677
14678 2005-03-16  Zoltan Varga  <vargaz@freemail.hu>
14679
14680         * attribute.cs: Encode ThrowOnUnmappableChar and BestFitMapping
14681         attributes.
14682
14683 2005-03-16  Raja R Harinath  <rharinath@novell.com>
14684
14685         Remove TypeManager.LookupType and TypeManager.LookupTypeDirect.
14686         Refactor to avoid traversing the list of assemblies, and to avoid
14687         string concatenation.
14688         * typemanager.cs (guid_attr_type): Remove.
14689         (negative_hits, pointers, references): Remove hashes.
14690         (type_hash): New.
14691         (GetConstructedType): New.  Uses type_hash to handle constructed
14692         types (arrays, references, pointers).
14693         (GetReferenceType, GetPointerType): Use it.
14694         (GetNestedType): New.  Uses type_hash to handle nested types of
14695         reflected types.
14696         (LookupType, LookupTypeDirect): Remove.
14697         (CoreLookupType): Inline parts of old LookupTypeDirect code.  Use
14698         'types' hash and LookupTypeReflection directly.
14699         (params_string, params_object): Use GetConstructedType.
14700         * namespace.cs (Namespace.cached_types): New.  Cache of reflected
14701         top-level types.
14702         (Namespace.Lookup): Use cached_types.
14703         (NamespaceEntry.LookupNamespaceOrType): Inline the functionality
14704         provided by old TypeManager.LookupType.
14705         * rootcontext.cs (MakeFQN): Remove.
14706         * decl.cs (DeclSpace.MakeFQN): Likewise.
14707         (DeclSpace.LookupType): Use TypeManager.GetNestedType.
14708         * expression.cs (ComposedCast.DoResolveAsTypeStep): Use
14709         TypeManager.GetConstructedType.
14710         * tree.cs (decl_ns_hash, LookupByNamespace): Remove.
14711
14712 2005-03-15  Marek Safar  <marek.safar@seznam.cz>
14713
14714         * class.cs (MethodCore.CheckBase): Report CS1715 for properties and
14715         indexers.
14716
14717         * cs-parser.jay: Reports CS1527 for any namespace element.
14718
14719         * delegate.cs (DelegateCreation.Error_NoMatchingMethodForDelegate):
14720         Added CS0407.
14721
14722         * expression.cs (ParameterReference.IsAssigned): Changed error to
14723         CS0269.
14724         (Error_WrongNumArguments): Moved CS0245 detection here.
14725
14726         * statement.cs (Return.Resolve): Add CS1622 report.
14727
14728 2005-03-11  Marek Safar  <marek.safar@seznam.cz>
14729
14730         * class.cs (StaticClass.DefineContainerMembers): Added CS0720.
14731
14732 2005-03-11  Zoltan Varga  <vargaz@freemail.hu>
14733
14734         * attribute.cs expression.cs: Get rid of some allocations.
14735
14736 2004-03-11  Atsushi Enomoto  <atsushi@ximian.com>
14737
14738         * doc.cs : just eliminate the latest change.
14739
14740 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14741
14742         * doc.cs : commented out the latest change. It breaks xml-030.cs
14743
14744 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14745
14746         * doc.cs : When TypeBuilder did not create Type yet, GetEvents() will
14747           fail. So invoke CreateType() in FindDocumentedType().
14748
14749 2004-03-10  Atsushi Enomoto  <atsushi@ximian.com>
14750
14751         * cs-tokenizer.cs : added IsKeyword().
14752         * doc.cs : Detect keyword incorrectly used as identifier.
14753           Allow identifiers prefixed by @.
14754
14755 2005-03-10  Marek Safar  <marek.safar@seznam.cz>
14756
14757         * attributes.cs (Attributes.Emit): Continue after CheckTargets.
14758         It caused exception in namespace resolving (again!).
14759         
14760         * class.cs (Class.ctor): Removed exit.
14761         (PropertyMethod.ctor): ditto.
14762         
14763         * codegen.cs (Codegen.Reset): Reset static data.
14764         (Codegen.ResolveTopBlock): Forward error status from ResolveMeta.
14765         
14766         * cs-tokenizer.cs (Cleanup): Removed.
14767         
14768         * driver.cs (GetSystemDir): Rewrote to one line command.
14769         It caused problem with unloaded dynamic modules.
14770         (UnixParseOption): Removed Exit.
14771         (CompilerCallableEntryPoint.InvokeCompiler): Make static.
14772         (CompilerCallableEntryPoint.Reset): Reset suitable static data.
14773         Now can be mcs used as library.
14774         
14775         * ecore.cs (Expression.ResolveBoolean): Use Location.Null for
14776         empty location.
14777         
14778         * location.cs (Reset): Reset static data.
14779         
14780         * namespace.cs (Reset): Reset static data.
14781         
14782         * report.cs (Report.Reset): Reset static data.
14783         
14784         * rootcontext.cs (RootContext.Reset): Reset static data.
14785         
14786         * tree.cs (RootTypes.ctor): Use Location.Null
14787         
14788         * typemanager.cs (TypeManager.Reset): Reset static data.
14789         (CoreLookupType): Removed Exit.
14790         (TypeHandle.Reset): Reset static data.
14791         
14792 2005-03-10  Raja R Harinath  <rharinath@novell.com>
14793
14794         Fix #73516.
14795         * typemanager.cs (ComputeNamespaces): Import namespaces from
14796         referenced modules too.
14797
14798 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14799
14800         * class.cs (TypeContainer.AddToMemberContainer): Use "." rather
14801         than '.'.
14802
14803 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14804
14805         * decl.cs (DeclSpace.LookupType): Don't loop but recurse into
14806         enclosing DeclSpace.  This ensures that a name-lookup populates
14807         more caches and there are fewer 'TypeExpression's.  Carve out
14808         nested type lookup into ...
14809         (LookupNestedTypeInHierarchy): ... this.
14810
14811 2005-03-09  Raja R Harinath  <rharinath@novell.com>
14812
14813         Clean up a few partial-class semantics.  
14814         Fixes test-357.cs and cs1618-2.cs.
14815         * cs-parser.jay (struct_declaration): Use 'current_class' as
14816         parent of newly-created struct.  Remove call to Register ().
14817         Use 'pop_current_class' to complete handing the current struct.
14818         (interface_declaration): Likewise.
14819         (class_declaration): Likewise.
14820         (enum_declaration): Use 'current_class' as parent of newly created
14821         enum.
14822         (delegate_declaration): Likewise.
14823         (pop_current_class): New function.  This is used to handle closing
14824         up the 'current_class' and 'current_container', and pointing them
14825         to the enclosing class/container.
14826         (CSharpParser): Initialize 'current_class' too.
14827         * decl.cs (MemberCore): Add check for invariant: a partial
14828         container is not a parsed entity, and thus does not enclose any
14829         parsed members.
14830         (DeclSpace.TypeResolveEmitContext): Expose 'type_resolve_ec'.
14831         (DeclSpace.BaseTypeExpr): Use it.
14832         (DeclSpace.LookupType): Add check for invariant.
14833         * class.cs (TypeContainer): Add check for invariant: a nested
14834         class should have the same NamespaceEntry as its enclosing class.
14835         (TypeContainer.EmitFieldInitializers): Make virtual.
14836         (TypeContainer.DefineDefaultConstructor): Adhere to invariant in
14837         MemberCore.
14838         (TypeContainer.Register): Remove.
14839         (TypeContainer.DefineType): Set the 'ec' of a PartialContainer to
14840         null.  Use TypeResolveEmitContext for resolving base types and
14841         interfaces.  Move initialization of Parts.TypeBuilder here from
14842         ...
14843         (TypeContainer.DefineNestedTypes): ... here.
14844         (PartialContainer): Take a Namespace not a NamespaceEntry.
14845         (PartialContainer.Create): Don't use Register.  Call the
14846         appropriate Add... function directly.
14847         (ClassPart): Take both the PartialContainer and the enclosing
14848         class as constructor arguments.
14849         (ClassPart.EmitFieldInitializers): Override.
14850         (ClassPart.PartFindNestedTypes): Remove.
14851         (FieldBase.GetInitializerExpression): Resolve the initializer
14852         expression in the emit context of the enclosing class.
14853         * tree.cs (RootTypes): Remove Register ().
14854         
14855 2005-03-08  Marek Safar  <marek.safar@seznam.cz>
14856
14857         * cs-parser.jay: Removed CS0134.
14858         
14859         * driver.cs: Removed CS1901.
14860         
14861         * expression.cs (SizeOf.DoResolve): Don't report CS0233
14862         for predefined types.
14863
14864 2005-03-07  Duncan Mak  <duncan@novell.com>
14865
14866         * codegen.cs (Save):  Catch UnauthorizedAccessException as
14867         well. Fixes bug #73454.
14868
14869 2005-03-07  Marek Safar  <marek.safar@seznam.cz>
14870
14871         * cs-tokenizer.cs (xtoken): Add CS1035.
14872         
14873         * class.cs (MethodData.Define): Add CS0683.
14874         (FieldMember.ctor): Add CS0681.
14875
14876 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14877
14878         * ecore.cs (SimpleName.DoResolve): Rename from
14879         SimpleName.DoResolveAllowStatic.
14880         (SimpleName.DoSimpleNameResolve): Remove 'allow_static' argument.
14881         Pass 'intermediate' flag to MemberStaticCheck.
14882         (SimpleName.MemberStaticCheck): Skip "static check" only in case
14883         of "intermediate" lookups via MemberAccess.
14884         (SimpleName.IdenticalNameAndTypeName): New.  Carved out of ...
14885         * expression.cs (MemberAccess.IdenticalNameAndTypeName): ... this.
14886
14887 2005-03-07  Raja R Harinath  <rharinath@novell.com>
14888
14889         Fix #73394.
14890         * ecore.cs (FieldExpr.EmitInstance): Catch cases of CS0120 that
14891         slipped in because of variable names that are identical to a
14892         builtin type's BCL equivalent ('string String;', 'int Int32;').
14893         (PropertyExpr.EmitInstance): Likewise.
14894
14895 2005-03-04  Marek Safar  <marek.safar@seznam.cz>
14896
14897         * cs-tokenizer.cs (PreProcessPragma): Add warning 1633, 1635.
14898         
14899         * report.cs (warning_ignore_table): Made public.
14900
14901 2005-03-04  Raja R Harinath  <rharinath@novell.com>
14902
14903         Fix #73282.
14904         * class.cs (MethodData.Emit): Pass 'container' to
14905         container.GetObsoleteAttribute instead of 'container.Parent'.
14906
14907 2005-03-03  Marek Safar  <marek.safar@seznam.cz>
14908
14909         * cs-parser.jay: Add 1534 error test.
14910
14911         * iterators.cs (Yield.CheckContext): Add error 1629.
14912         (Iterator.ctor): Save unsafe modifier.
14913         (MoveNextMethod.DoEmit): Restore unsafe context.
14914
14915         * namespace.cs (UsingAlias): Better error message.
14916
14917 2005-03-03  Dan Winship  <danw@novell.com>
14918
14919         * convert.cs (Error_CannotImplicitConversion): fix two bugs in
14920         the warning message [#73219]
14921
14922 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14923
14924         Fix compile with MCS 1.0.0.0.
14925         * cs-tokenizer.cs (PreProcessPragma): Simplify w_disable and
14926         w_restore to not depend on string constant folding.
14927
14928 2005-03-03  Raja R Harinath  <rharinath@novell.com>
14929
14930         * decl.cs (DeclSpace.LookupType): Remove 'silent' argument.  Move
14931         CS0246 check to users who passed 'silent = false'.
14932         * ecore.cs (TypeLookupExpression.DoResolveAsTypeStep): Add CS0246
14933         check.
14934         (SimpleName.SimpleNameResolve): Update.
14935         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add CS0246 check.
14936         (MemberAccess.IdenticalNameAndTypeName): Update.
14937         * doc.cs (FindDocumentedTypeNonArray): Update.
14938
14939 2005-03-03  Raja R Harinath  <rharinath@novell.com>     
14940
14941         * codegen.cs (EmitContext): Remove ResolvingTypeTree.
14942         * parameters.cs (ComputeAndDefineParameters): Remove.
14943         * decl.cs (ResolveBaseTypeExpr): Don't set ResolvingTypeTree.
14944         * delegate.cs (Define): Don't invoke ComputeAndDefineParameters.
14945         Use GetParameterInfo.
14946
14947 2005-03-02  Marek Safar  <marek.safar@seznam.cz>
14948
14949         * report.cs (StaticClass.DefineContainerMembers): Add warning 628.
14950
14951 2005-03-02  Raja R Harinath  <rharinath@novell.com>
14952
14953         Unify DeclSpace.LookupType and DeclSpace.FindType.
14954         * decl.cs (DeclSpace.FindNestedType): New virtual function.  This
14955         is in charge of defining nested types on demand.
14956         (DeclSpace.LookupType): Use it when the current_type is a
14957         TypeBuilder.  Use LookupTypeDirect for reflected types.
14958         (DeclSpace.FindType): Remove.
14959         (DeclSpace.LookupInterfaceOrClass): Likewise.
14960         (DeclSpace.DefineTypeAndParents): Likewise.
14961         * ecore.cs (SimpleName.ResolveAsTypeStep): Just call
14962         DeclSpace.LookupType.
14963         * doc.cs (FindDocumentedTypeNonArray): Use DeclSpace.LookupType.
14964         * typemanager.cs (LookupType): Simplify.
14965         (AddUserType): Remove type from negative_hits.
14966         * namespace.cs (Namespace.Lookup): Use TypeManager.LookupTypeDirect.
14967         * class.cs (TypeContainer.FindMembers): Move handling of nested
14968         types ...
14969         (TypeContainer.FindMembers_NestedTypes): ... here.
14970         (TypeContainer.FindNestedType): Implement override.
14971         (ClassPart.FindNestedType): Delegate to PartialContainer.
14972         (ClassPart.PartFindNestedType): Looks up the nested types of the
14973         part alone.
14974
14975 2005-03-02  Martin Baulig  <martin@ximian.com>
14976
14977         * class.cs (TypeContainer.DoDefineMembers): We also need a default
14978         static constructor in static classes.
14979
14980 2005-03-01  Zoltan Varga  <vargaz@freemail.hu>
14981
14982         * attribute.cs: Pass -1 to DefineLPArrayInternal if sizeConst or
14983         sizeParamIndex is not specified.
14984
14985 2005-03-01  Marek Safar  <marek.safar@seznam.cz>
14986
14987         Fix #73117
14988         * report.cs (WarningMessage.IsEnabled): Missing null check.
14989
14990 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
14991
14992         * attribute.cs (DefinePInvokeMethod): Fix, all data are stored
14993         in the fields and not in the properties.
14994
14995 2005-02-28  Zoltan Varga  <vargaz@freemail.hu>
14996
14997         * attribute.cs (GetMarshal): Marshal SizeConst and SizeParamIndex 
14998         fields as well.
14999
15000 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
15001
15002         * attribute.cs: Small refactoring (improved robustness).
15003         (ImplOptions, UnmanagedType, UsageAttribute): Removed members.
15004         (ValidateGuid): Removed.
15005         (Resolve): Removed referenced to above mentioned.
15006         (GetAttributeUsage): Made private and changed to work without
15007         class assistance.
15008         (GetIndexerAttributeValue): Don't crash.
15009         (GetConditionalAttributeValue): Ditto.
15010         (GetClsCompliantAttributeValue): Ditto.
15011         (ExtractSecurityPermissionSet): All attributes exceptions are
15012         error 648.
15013         (GetPropertyValue): New helper.
15014         (GetMethodImplOptions): New method.
15015         (DefinePInvokeMethod): Reuse common code. Implemented handling of
15016         some missing properties.
15017         
15018         * class.cs (ClassOrStruct.ApplyAttributeBuilder): Updated.
15019         (Method.ApplyAttributeBuilder): Updated.
15020         
15021         * decl.cs (DeclSpace.ApplyAttributeBuilder): Don't catch shared
15022         exception.
15023
15024 2005-02-28  Raja R Harinath  <rharinath@novell.com>
15025
15026         Fix #73052.
15027         * report.cs (Report.SymbolRelatedToPreviousError): Handle
15028         non-simple types (array, pointer, reference).
15029
15030 2005-02-28  Marek Safar  <marek.safar@seznam.cz>
15031
15032         * cs-parser.jay: Add errors 1617, 650, 1007, 531, 547, 548
15033
15034         * class.cs (MethodCore.IsDuplicateImplementation): Special error
15035         for operators.
15036         (Method.CheckBase): Catch wrong destructor here.
15037         (MethodData.Define): Add errors 550, 668.
15038
15039         * cs-tokenizer.cs (PreProcessPragma): Add warning 1634.
15040
15041         * ecore.cs (PropertyExpr.DoResolveLValue): Fixed wrong error code.
15042
15043         * pending.cs (VerifyPendingMethods): Add error 551.
15044
15045         * typemanager.cs (CSharpName): Next error report helper.
15046
15047 2005-02-25  Marek Safar  <marek.safar@seznam.cz>
15048
15049         * attribute.cs (Atttribute.Resolve): Add cache for parameter-less
15050         attributes. Removed useless attribute double check.
15051         It saves almost 2MBs for corlib.
15052
15053 2005-02-25  Raja R Harinath  <rharinath@novell.com>
15054
15055         Fix #72924.
15056         * statement.cs (ExpressionStatement.Resolve): Make robust to being
15057         called twice in case of error.
15058
15059 2005-02-23  Chris Toshok  <toshok@ximian.com>
15060
15061         Fix compiler portions of #72827.
15062         * statement.cs (Block.Emit): call Begin/EndScope on the
15063         EmitContext instead of the ILGenerator.
15064
15065         * codegen.cs (EmitContext.BeginScope): new method, call
15066         ILGenerator.BeginScope as well as the SymbolWriter's OpenScope (if
15067         we have one.)
15068         (EmitContext.BeginScope): same, but EndScope and CloseScope
15069
15070         * symbolwriter.cs (SymbolWriter.OpenScope): get the current il
15071         offset and call the superclass's OpenScope(int) with it.
15072         (SymbolWriter.CloseScope): get the current il
15073         offset and call superclass's CloseScope(int) with it.
15074
15075 2005-02-23  Marek Safar  <marek.safar@seznam.cz>
15076
15077         * anonymous.cs (AnonymousMethod.Compatible): Fixed to report
15078         CS1677 for out and ref as well.
15079
15080         * class.cs (Method.Define): Add error CS1599 detection.
15081         
15082         * cs-parser.jay: Add CS1609, CS1670, CS1627 detection.
15083         
15084         * cs-tokenizer.cs (xtoken): Add error CS1646 detection.
15085         
15086         * delegate.cs (Delegate.Define): Add error CS1599 detection.
15087         
15088         * support.cs.cs (ModifierDesc): New helper method.
15089
15090 2005-02-23  Raja R Harinath  <rharinath@novell.com>
15091             Abin Thomas  <projectmonokochi@rediffmail.com>
15092             Anoob V E  <projectmonokochi@rediffmail.com>
15093             Harilal P R  <projectmonokochi@rediffmail.com>
15094
15095         Fix #57851, #72718.
15096         * class.cs (ConstructorBuilder.Resolve): Make sure that the second
15097         MemberLookup (used for error reporting) actually returns a result.
15098         Fix error report number (122, not 112).
15099
15100 2005-02-22  Abin Thomas  <projectmonokochi@rediffmail.com>
15101             Anoob V E  <projectmonokochi@rediffmail.com>
15102             Harilal P R  <projectmonokochi@rediffmail.com>
15103
15104         Fix #71134.
15105         * pending.cs (PendingImplementation.GetAbstractMethods):
15106         Find NonPublic members too.
15107
15108 2005-02-22  Marek Safar  <marek.safar@seznam.cz>
15109
15110         * expression.cs.cs (ConditionalLogicalOperator.DoResolve):
15111         Fixed error 217.
15112         
15113         * class.cs (MethodCore.CheckMethodAgainstBase):
15114         Add error 239 report.
15115
15116 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15117
15118         Fix #68955.
15119         * expression.cs (Invocation.IsApplicable): Make public.
15120         (Invocation.IsParamsMethodApplicable): Likewise.
15121         * delegate.cs (Delegate.VerifyApplicability): Don't use
15122         Invocation.VerifyArgumentCompat for parameter applicability
15123         testing.  Use Invocation.IsApplicable and
15124         Invocation.IsParamsMethodApplicable.
15125
15126 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15127
15128         * ecore.cs (PropertyExpr.DoResolve): Add error 214 report.
15129         
15130         * class.cs (Operator.Define): Add error 217 report.
15131         
15132 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15133
15134         * namespace.cs (UsingEntry.Resolve): Undo change below.
15135
15136 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15137
15138         Fix #72756.
15139         * ecore.cs (Expression.MemberLookupFailed): Add argument to
15140         disable the error message when the extended MemberLookup also
15141         fails.
15142         (Expression.MemberLookupFinal): Update.
15143         (SimpleName.DoSimpleNameResolve): Update.
15144         * expression.cs (MemberAccess.ResolveNamespaceOrType):
15145         Don't use MemberLookupFinal.
15146         (New.DoResolve): Update.
15147         (BaseAccess.CommonResolve): Update.
15148
15149 2005-02-21  Raja R Harinath  <rharinath@novell.com>
15150
15151         Fix #72732.
15152         * attribute.cs (Attribute.ResolveType): If a 'resolve_error' had
15153         occured previously, don't resolve again.
15154
15155 2005-02-21  Marek Safar  <marek.safar@seznam.cz>
15156
15157         Fix #69949
15158         * attribute.cs (Attribute.GetAttributeUsage): Add EmitContext
15159         argument. Call ResolveAttributeUsage for unresolved.
15160         when types doesn't match ctor arguments.
15161         
15162         * class.cs (DoDefineMembers.TypeContainer): Removed safety check
15163         for nested attribute classes.
15164         (Class.attribute_usage): Removed.
15165         (Class.ResolveAttributeUsage): Resolves AttributeUsageAttribute
15166         for attribute class.
15167         
15168         * ecore.cs (IsAttribute): Removed.
15169         
15170         * namespace.cs (UsingEntry.Resolve): Don't destroy NamespaceEntry.
15171         
15172         * rootcontext.cs (RegisterAttribute): Removed, attributes are
15173         now normal types.
15174         (attribute_types): Removed.
15175         (EmitCode): Global attributes are emited as the latest.
15176
15177 2005-02-18  Marek Safar  <marek.safar@seznam.cz>
15178
15179         * class.cs (EmitFieldInitializers): Don't emit field initializer
15180         for default values when optimilization is on.
15181         
15182         * constant.cs (Constant.IsDefaultValue): New property.
15183         
15184         * driver.cs: Add /optimize handling.
15185         
15186         * constant.cs,
15187         * ecore.cs,
15188         * literal.cs: Implement new IsDefaultValue property.
15189         
15190         * rootcontext.cs (Optimize): New field, holds /optimize option.
15191
15192 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15193
15194         Fix crasher in re-opened #72347.
15195         * namespace.cs (Namespace.Lookup): Return null if
15196         DeclSpace.DefineType returns null.
15197
15198         Fix #72678.
15199         * expression.cs (Argument.Resolve): Handle a case of CS0120 here.
15200
15201 2005-02-18  Raja R Harinath  <rharinath@novell.com>
15202
15203         Fix remainder of #63202.  Change semantics of DoResolveLValue: it
15204         now returns null if it cannot resolve to an lvalue.
15205         * ecore.cs (Expression.DoResolveLValue): Return 'null' by default.
15206         (Expression.ResolveLValue): Emit CS0131 error if DoResolveLValue
15207         returned null.  Remove check for SimpleName.
15208         (EventExpr.DoResolveLValue): New.
15209         * iterators.cs (Iterator.FieldExpression.DoResolveLValue): New.
15210         * expression.cs (Argument.Error_LValueRequired): New.  Move CS1510
15211         error from ...
15212         (Argument.Resolve): ... here.  Use it.  Use DoResolveLValue to
15213         avoid CS0131 error.
15214         (Unary.ResolveOperator): Move CS0211 check ...
15215         (Unary.DoResolve): ... here.  Use DoResolveLValue to avoid
15216         CS0131 error.
15217         (Unary.DoResolveLValue): Simplify.
15218         (AddressOf.DoResolveLValue): New.
15219         (ArrayAccess.DoResolveLValue): New.
15220
15221 2005-02-16  Marek Safar  <marek.safar@seznam.cz>
15222
15223         * attribute.cs (Attribute.Resolve): Add arguments casting for
15224         when types doesn't match ctor arguments.
15225
15226 2005-02-16  Raja R Harinath  <rharinath@novell.com>
15227
15228         Fix parts of #63202.
15229         * expression.cs (UnaryMutator.ResolveOperator): Remove redundant
15230         lookup of operator in base type.  Ensure that all checks happen
15231         when the operator resolves to an "op_..." method.
15232
15233 2005-02-15  Raja R Harinath  <rharinath@novell.com>
15234
15235         Fix #71992.
15236         * namespace.cs (NamespaceEntry.LookupNamespaceOrType): Add
15237         'ignore_cs0104' parameter.  Pass it to ...
15238         (NamespaceEntry.Lookup): ... this.
15239         * decl.cs (DeclSpace.LookupType): Add 'ignore_cs0104' parameter.
15240         * ecore.cs (SimpleName.ResolveAsTypeStep): Update.
15241         (TypeLookupExpression.DoResolveAsTypeStep): Update.
15242         * expression.cs (MemberAccess.IdenticalNameAndTypeName):
15243         Update.  Request that cs0104 errors be ignored.
15244         (ComposedCast.ResolveAsTypeStep): Update.
15245
15246 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15247
15248         Fix #59209.
15249         * expression.cs (Invocation.BetterFunction): Remove support for
15250         comparing virtual functions and their overrides.
15251         (Invocation.IsOverride): New.
15252         (Invocation.OverloadResolve): Don't consider 'override' functions
15253         during candidate selection.  Store them in a lookaside list.
15254         If the selected method is a 'virtual' function, use the list to
15255         find any overrides that are closer to the LHS type.
15256
15257 2005-02-14  Marek Safar  <marek.safar@seznam.cz>
15258
15259         * expression.cs (New.DoResolve): Add complex core type reduction.
15260         (New.Constantify): Converts complex core type syntax like 'new int ()'
15261         to simple constant.
15262         
15263 2005-02-14  Raja R Harinath  <rharinath@novell.com>
15264
15265         * decl.cs (EntryType.EntryType): New constructor to create an
15266         updated copy of a cache entry.
15267         (MemberCache.AddMethods): Use it.
15268         (MemberCache.ClearDeclaredOnly): Remove.
15269         (MemberCache.MemberCache): Update.
15270
15271 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15272
15273         * codegen.cs (EmitContext): Introduce the `MethodIsStatic'
15274         variable.  This one is represents the actual low-level declaration
15275         of the method, as opposed to the semantic level `IsStatic'.   
15276
15277         An anonymous method which is hosted into a static method might be
15278         actually an instance method.  IsStatic would reflect the
15279         container, while MethodIsStatic represents the actual code
15280         generated.
15281
15282         * expression.cs (ParameterReference): Use the new MethodIsStatic
15283         instead of IsStatic.
15284
15285         * anonymous.cs (AnonymousMethod.Compatible): Pass the
15286         Modifiers.STATIC to the Anonymous' Method EmitContext if static is
15287         set on the current EmitContext. 
15288
15289         * expression.cs (Cast): Overload DoResolveLValue so we can pass
15290         resolve our casted expression as an LValue.  This triggers the
15291         proper LValue processing that is later required by Assign.
15292
15293         This fixes 72347.
15294
15295         * cs-tokenizer.cs (pp_and): recurse on pp_and, fixes #61903.
15296
15297 2005-02-11  Marek Safar  <marek.safar@seznam.cz>
15298
15299         C# 2.0 Fixed buffer implementation
15300
15301         * anonymous.cs: Update after RegisterHelperClass renaming.
15302
15303         * attribute.cs (AttributeTester.fixed_buffer_cache):
15304         Cache of external fixed buffers.
15305         (AttributeTester.GetFixedBuffer): Returns IFixedBuffer
15306         implementation if field is fixed buffer else null.
15307
15308         * class.cs
15309         (TypeContainer.AddField): Accept FieldMember instead of Field.
15310         (FieldBase.IsFieldClsCompliant): Extracted code from
15311         VerifyClsCompliance descendant customization.
15312         (FixedField): New class handles fixed buffer fields.
15313         (FixedFieldExternal): Keeps information about imported fixed
15314         buffer.
15315         (IFixedField): Make access to internal or external fixed buffer
15316         same.
15317
15318         * cs-parser.jay: Add fixed buffer parsing.
15319
15320         * ecore.cs (FieldExpr.Emit): Add special emit case for fixed
15321         buffer.
15322
15323         * expression.cs (Indirection): Extended implementation to accept
15324         fixed buffer field.
15325         (PointerArithmetic.Emit): Get element from fixed buffer as well.
15326         (ElementAccess.MakePointerAccess): Get type as parameter.
15327         (DoResolve): Add fixed buffer field expression conversion.
15328         (DoResolveLValue): Ditto.
15329         (FixedBufferPtr): New class. Moved most of original ArrayPtr.
15330         (ArrayPtr): Derives from FixedBufferPtr.
15331         (ArrayPtr.Emit): Add extra emit for array elements.
15332
15333         * flowanalysis.cs.cs (StructInfo): Use FieldMember.
15334
15335         * rootcontext.cs (CloseTypes): Emit CompilerGenerated attribute
15336         for compiler generated types.
15337         (RegisterCompilerGeneratedType): Renamed from RegisterHelperClass.
15338
15339         * statement.cs (Fixed): Refactored to be easier add fixed buffer
15340         and consume less memory.
15341         (Fixed.Resolve): Add fixed buffer case.
15342
15343         * typemanager.cs (compiler_generated_attr_ctor,
15344         fixed_buffer_attr_ctor): Add new 2.0 compiler attributes.
15345         (HasElementType): Add our own implementation to work on every
15346         runtime.
15347
15348 2005-02-11  Miguel de Icaza  <miguel@novell.com>
15349
15350         * anonymous.cs (CaptureContext): Track whether `this' has been
15351         referenced.   
15352
15353         * expression.cs (This.ResolveBase): Call CaptureThis.  Before we
15354         only captured `this' if it was implicitly done (instance
15355         methods/variables were used). 
15356
15357         * codegen.cs (EmitContext.CaptureThis): New method to flag that
15358         `this' must be captured.
15359
15360 2005-01-30  Miguel de Icaza  <miguel@novell.com>
15361  
15362         * anonymous.cs (CreateMethodHost): If there Scope.ScopeTypeBuilder
15363         is null it means that there has been no need to capture anything,
15364         so we just create a sibling.
15365
15366         Renamed `EmitHelperClasses' to `EmitAnonymousHelperClasses'
15367
15368         Just a partial fix.  The other half is fairly elusive.
15369         
15370 2005-02-10  Raja R Harinath  <rharinath@novell.com>
15371
15372         Fix #52586, cs0121-4.cs.
15373         * decl.cs (MemberCache.DeepCopy): Rename from SetupCache.  Take
15374         and return a hashtable.
15375         (MemberCache.ClearDeclaredOnly): New.
15376         (MemberCache.MemberCache): Update to change.  Make a deep copy of
15377         the method_hash of a base type too.
15378         (MemberCache.AddMethods): Adapt to having a deep copy of the base
15379         type methods.  Overwrite entries with the same MethodHandle so
15380         that the ReflectedType is correct.  The process leaves in base
15381         virtual functions and their overrides as distinct entries.
15382         (CacheEntry): Now a class instead of a struct.  It shouldn't alter
15383         matters since it was boxed in a ArrayList before.
15384         (CacheEntry.Member, CacheEntry.EntryType): Remove 'readonly'
15385         modifier.
15386         * expression.cs (Invocation.BetterFunction): Simplify.  Handle the
15387         case of a virtual function and its override (choose the overload
15388         as better).
15389         (Invocation.OverloadResolve): Avoid 'override' members during
15390         'applicable_type' calculation.
15391
15392 2005-02-09  Raja R Harinath  <rharinath@novell.com>
15393
15394         Combine two near-redundant caches.
15395         * typemanager.cs (method_params): Rename from method_internal_params.
15396         (TypeManager.GetParameterData): New.  Replace
15397         Invocation.GetParameterData.
15398         (TypeManager.LookupParametersByBuilder): Remove.
15399         * expression.cs (Invocation.method_parameter_cache): Remove.
15400         (Invocation.GetParameterData): Remove.
15401         Update to changes.
15402         * anonymous.cs, attribute.cs, convert.cs, delegate.cs:
15403         Update to changes.
15404
15405 2005-02-08  Raja R Harinath  <rharinath@novell.com>
15406
15407         Fix #72015.
15408         * delegate.cs (Delegate.DefineType): When bootstrapping corlib, if
15409         TypeManager.multicast_delegate_type is null, resolve it by looking
15410         up "System.MulticastDelegate".
15411         * rootcontext.cs (RootContext.ResolveCore): Simplify.
15412
15413 2005-02-07  Abin Thomas (NOSIP)  <projectmonokochi@rediffmail.com>
15414             Anoob V.E (NOSIP)  <projectmonokochi@rediffmail.com>
15415             Harilal P.R (NOSIP)  <projectmonokochi@rediffmail.com>
15416
15417         Fix cs0164.cs.
15418         * statement.cs (LabeledStatement.Resolve): Don't set 'referenced'.
15419         (LabeledStatement.AddReference): New.  Set 'referenced'.
15420         (Goto.Resolve): Use it.
15421
15422 2005-02-05  John Luke  <john.luke@gmail.com>
15423
15424         * driver.cs: remove duplicate -doc line in Usage ()
15425
15426 2005-02-04  Raja R Harinath  <rharinath@novell.com>
15427
15428         * location.cs (Location.AddFile): Fix CS2002 error report.
15429
15430 2005-02-02  Martin Baulig  <martin@ximian.com>
15431
15432         * delegate.cs (Delegate.DefineType): Report an internal error if
15433         TypeManager.multicast_delegate_type is null.  See bug #72015 for
15434         details.        
15435
15436 2005-02-02  Raja R Harinath  <rharinath@novell.com>
15437
15438         Fix a crasher in a variant of #31984.
15439         * const.cs (Constant.CheckBase): New override that defers the
15440         new-or-override check in case the base type hasn't been populated
15441         yet.
15442         (Constant.Define): Ensure the new-or-override check is performed.
15443
15444 2005-02-01  Duncan Mak  <duncan@ximian.com>
15445
15446         * const.cs (LookupConstantValue): Check that `ce' is not null
15447         before calling GetValue ().
15448
15449 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15450
15451         Fix test-334.cs (#69519).
15452         * cs-parser.jay (using_alias_directive): Pass in an expression to
15453         NamespaceEntry.UsingAlias.
15454         (using_namespace_directive): Pass in an expression to
15455         NamespaceEntry.Using.
15456         (namespace_name): Don't flatten to a string.
15457         * namespace.cs (NamespaceEntry.AliasEntry): Store an expression.
15458         (NamespaceEntry.AliasEntry.Resolve): Lookup using
15459         ResolveAsTypeStep.
15460         (NamespaceEntry.UsingEntry): Likewise.
15461         (NamespaceEntry.Using,NamespaceEntry.UsingAlias): Update to
15462         changes.
15463         (NamespaceEntry.LookupForUsing): Remove.
15464         (NamespaceEntry.LookupNamespaceOrType): Add support for dotted
15465         names.
15466         (NamespaceEntry.Lookup): Remove support for dotted names.
15467
15468 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15469
15470         * namespace.cs (NamespaceEntry.NamespaceEntry): Simplify, and
15471         split into two.
15472         (NamespaceEntry.ImplicitParent): Compute on demand.
15473         (NamespaceEntry.Doppelganger): New implicit namespace-entry that
15474         parallels the current.
15475         (NamespaceEntry.LookupForUsing): Use it.
15476         (NamespaceEntry.Lookup): If the current namespace-entry is
15477         implicit, don't search aliases and using tables.
15478
15479 2005-02-01  Raja R Harinath  <rharinath@novell.com>
15480
15481         Fix #31984.
15482         * class.cs (TypeContainer.DoDefineMembers): Don't initialize
15483         BaseCache here.
15484         (TypeContainer.BaseCache): Compute on demand.
15485         (TypeContainer.FindMembers): Define constants and types if they're
15486         not already created.
15487         (FieldMember.Define): Move resetting of ec.InUnsafe before error
15488         check.
15489         * const.cs (Constant.Define): Make idempotent.
15490
15491 2005-01-29  Miguel de Icaza  <miguel@novell.com>
15492
15493         * pending.cs: Produce better code (no nops produced by using Ldarg
15494         + value).
15495         
15496         * pending.cs (PendingImplementation.DefineProxy): It was not `arg
15497         i - 1' it should be arg + 1.
15498
15499         Fixes bug #71819.
15500
15501 2005-01-28  Raja R Harinath  <rharinath@novell.com>
15502
15503         * attribute.cs (Attribute.CheckAttributeType): Make private
15504         non-virtual.
15505         (Attribute.ResolveType): Make virtual.
15506         (GlobalAttribute.ResolveType,GlobalAttribute.Resolve): Simplify
15507         handling of RootContext.Tree.Types.
15508
15509 2005-01-27  Raja R Harinath  <rharinath@novell.com>
15510
15511         Update attribute-handling to use the SimpleName/MemberAccess
15512         mechanisms.
15513         * cs-parser.jay (attribute): Pass in an expression to the
15514         constructors of Attribute and GlobalAttribute.
15515         * attribute.cs (Attribute): Take an expression for the name.
15516         (Attribute.ResolvePossibleAttributeTypes): New.  Resolves the
15517         passed in attribute name expression.
15518         (Attribute.CheckAttributeType): Use it.
15519         * ecore.cs (FullNamedExpression.ResolveAsTypeStep): New.
15520         * expression.cs (MemberAccess.ResolveAsTypeStep): Move body to ...
15521         (MemberAccess.ResolveNamespaceOrType): ... here.  Add 'silent'
15522         argument to prevent error messages if the lookup fails.
15523
15524 2005-01-27  Marek Safar  <marek.safar@seznam.cz>
15525
15526         * expression.cs (Indirection): Implemented IVariable interface
15527         to support indirection in AddressOf operator.
15528         (PointerArithmetic.Emit): Add optimalization for case where
15529         result can be precomputed.
15530
15531 2005-01-26  Martin Baulig  <martin@ximian.com>
15532
15533         * class.cs (TypeContainer.AttributeTargets): Return the correct
15534         AttributeTargets depending on our `Kind' instead of throwing an
15535         exception; fixes #71632.
15536
15537 2005-01-26  Marek Safar  <marek.safar@seznam.cz>
15538
15539         Fix #71257
15540         * expression.cs (MemberAccess.ResolveMemberAccess): Add CS0176 test for
15541         constant members.
15542
15543 2005-01-25  Raja R Harinath  <rharinath@novell.com>
15544
15545         Fix #71602.
15546         * expression.cs (MemberAccess.DoResolve): Don't complain with
15547         cs0572 when the LHS of a member access has identical name and type
15548         name.
15549
15550 2005-01-25  Marek Safar  <marek.safar@seznam.cz>
15551
15552         Fix #71651, #71675
15553         * attribute.cs (ExtractSecurityPermissionSet): Catch exceptions from
15554         CreatePermission.
15555         Create custom PermissionSet only for PermissionSetAttribute.
15556
15557 2005-01-24  Marek Safar  <marek.safar@seznam.cz>
15558
15559         Fix #71649
15560         * class.cs (StaticClass.DefineContainerMembers): Enable enums and
15561         delegates in static class.
15562
15563 2005-01-24  Martin Baulig  <martin@ximian.com>
15564
15565         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
15566         merging an implicit block, just use its reachability.
15567
15568         * statement.cs (Block.Resolve): Make the unreachable code check
15569         work wrt. implicit blocks; see test-337 from #63842.
15570
15571 2005-01-21  Alp Toker  <alp@atoker.com>
15572  
15573         * cs-parser.jay: destructor_declaration's container is PartialContainer
15574         not Class when partial types are used, so use Kind prop instead of
15575         'is'.
15576         
15577 2005-01-22  Miguel de Icaza  <miguel@ximian.com>
15578
15579         * cs-parser.jay: Improve error reporting when an interface
15580         declares new types.
15581
15582 2005-01-20  Dick Porter  <dick@ximian.com>
15583
15584         * support.cs: SeekableStreamReader fix from Sandor Dobos
15585         (dobos_s@ibcnet.hu) to cope with Position setting when multibyte
15586         chars are read.  Fixes bug 70369.
15587
15588 2005-01-20  Raja R Harinath  <rharinath@novell.com>
15589
15590         * cs-parser.jay (catch_clause): Simplify current_block handling
15591         somewhat.
15592
15593 2005-01-17  Miguel de Icaza  <miguel@ximian.com>
15594
15595         * convert.cs (ImplicitStandardConversionExists): Synchronize the
15596         code with ImplicitStandardConversion to handle the implicit
15597         conversion of method groups into valid delegate invocations. 
15598
15599         The problem is that in parameter handling we were using this code
15600         path.  Fixes bug #64698
15601
15602 2005-01-19  Raja R Harinath  <rharinath@novell.com>
15603
15604         * cs-parser.jay: Fix several infelicities.
15605         - Avoid assigning to the parser value stack.  Code like 
15606           '$3 = null' is unclean.  Synthesize a value for the code block
15607           instead. 
15608         - Avoid using oob_stack for storing location information.  Use ...
15609         (_mark_): ... this.  New (empty) rule.  Saves the current location
15610         in $$.
15611         (foreach_statement): Avoid using oob_stack for current_block
15612         handling.  Use technique used in for_statement and
15613         using_statement.  Synthesize a value for the code block to store
15614         additional intermediate information.
15615
15616 2005-01-13  Miguel de Icaza  <miguel@ximian.com>
15617
15618         * ecore.cs (IsAccessorAccessible): Accessibility to private fields
15619         of a different type is only allowed to private fields of a
15620         containing type, not on fields of a base class.
15621
15622         See test-174.cs and error cs0122-9.cs
15623
15624 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15625
15626         Fix test-335.cs (bug #58126).
15627         * cs-parser.jay (argument): Split out non-expression parts of the
15628         rule into 'non_simple_argument'.
15629         (invocation_expression): Support parenthesized invocations with
15630         multiple arguments, and with single non-simple arguments.
15631
15632 2005-01-13  Raja R Harinath  <rharinath@novell.com>
15633
15634         * cs-tokenizer.cs (xtoken): Reset 'comments_seen' in a couple more
15635         places.
15636
15637 2005-01-12  Raja R Harinath  <rharinath@novell.com>
15638
15639         Fix cs0038-1.cs, cs1640-6.cs.
15640         * ecore.cs (Expression.Resolve): Remove special-case for
15641         SimpleName in error-handling.
15642         (Expression.almostMatchedMembers): Relax access permission to
15643         protected.
15644         (Expression.MemberLookupFailed): Handle duplicates in
15645         almostMatchedMembers list.
15646         (SimpleName.DoSimpleNameResolve): Catch CS0038 errors earlier.
15647         * expression.cs (New.DoResolve): Report CS1540 for more cases.
15648         * typemanager.cs (GetFullNameSignature): Use the MethodBase
15649         overload if the passed in MemberInfo is a MethodBase.
15650
15651 2005-01-12  Marek Safar  <marek.safar@seznam.cz>
15652
15653         Fix #70749
15654         * attribute.cs (ExtractSecurityPermissionSet): Don't report error
15655         for non-CAS & merge permission sets properly.
15656
15657 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15658
15659         Improve standard-compliance of simple name and member access 
15660         resolution.  Fixes bugs #52697, #57200, #67520, #69519.
15661         * ecore.cs (FullNamedExpression): New abstract base class 
15662         for Namespaces and TypeExpressions.
15663         (ResolveFlags.SimpleName): Remove.
15664         (SimpleName): Remove support for dotted names.
15665         (SimpleName.ResolveAsTypeStep): Simplify.  Now just a wrapper to 
15666         DeclSpace.FindType and DeclSpace.LookupType.
15667         (SimpleName.DoSimpleNameResolve): Remove support for dotted names.
15668         (Expression.ExprClassName): Make member function.
15669         * expression.cs (MemberAccess.ResolveAsTypeStep): Support LHS being
15670         a namespace.  Remove creation of dotted "SimpleName"s.
15671         (MemberAccess.DoResolve): Likewise.
15672         * decl.cs (DeclSpace.Cache): Make private.
15673         (DeclSpace.LookupInterfaceOrClass): Return a FullNamedExpression.
15674         (DeclSpace.FindType): Update.
15675         (DeclSpace.LookupType): Move here from RootContext.  Return a 
15676         FullNamedExpression.
15677         * namespace.cs (Namespace): Derive from FullNamedExpression
15678         so that it can be part of expression resolution.
15679         (Namespace.Lookup): Return an FullNamedExpression.
15680         (NamespaceEntry.LookupAlias): Lookup aliases only in current
15681         namespace.
15682         * rootcontext.cs (NamespaceLookup): Remove.
15683         (LookupType): Move to DeclSpace.
15684         * attribute.cs (CheckAttributeType): Update.
15685         * doc.cs (FindDocumentedType): Remove allowAlias argument.
15686         (FindDocumentedTypeNonArray): Likewise.
15687
15688 2005-01-11  Raja R Harinath  <rharinath@novell.com>
15689
15690         Fix cs0509.cs, cs1632.cs.
15691         * class.cs (TypeContainer.GetNormalBases): Don't assume !IsClass
15692         is the same as IsInterface.
15693         (TypeContainer.GetClassBases): Likewise.
15694         * statement.cs (LabeledStatement.ig): New field.
15695         (LabeledStatement.LabelTarget): Save ILGenerator which created the
15696         label.
15697         (LabeledStatement.DoEmit): Check that the label was created with
15698         the same ILGenerator.
15699
15700 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15701
15702         Fix #71058
15703         * attribute.cs (GetMethodObsoleteAttribute): Need to transform
15704         accessors to its properties.
15705
15706         * ecore.cs (PropertyExpr): Add AccessorTable to help track back
15707         from accessors to property.
15708         
15709 2005-01-10  Marek Safar  <marek.safar@seznam.cz>
15710
15711         Fix #70722
15712         * class.cs (MethodCore.CheckBase): Test base method obsoleteness
15713         only for overrides.
15714         
15715 2005-01-08  Miguel de Icaza  <miguel@ximian.com>
15716
15717         * attribute.cs: Check for null and empty strings.  
15718
15719         I have lost another battle to Paolo.
15720
15721 2005-01-07  Marek Safar  <marek.safar@seznam.cz>
15722
15723         Fix #70942
15724         * class.cs (PropertyMethod): Set Parent field in ctors.
15725         (SetMethod.InternalParameters): Add unsafe switch hack.
15726         Override MarkForDuplicationCheck where it is appropriate.
15727
15728         * decl.cs (MemberCore.MarkForDuplicationCheck): New method.
15729         It says whether container allows members with the same name.
15730         Base default is no.
15731         (DeclSpace.AddToContainer): Use MarkForDuplicationCheck.
15732         Removed is_method parameter.
15733
15734 2005-01-06  Duncan Mak  <duncan@ximian.com>
15735
15736         * cs-tokenizer.cs (xtoken): Redo the work for signaling CS1040
15737         because the previous change led to incorrect reporting of CS1032
15738         ("Cannot define/undefine preprocessor symbols after first token in
15739         file"). Instead of using `tokens_seen' as the only flag that
15740         triggers CS1040, introduce `comments_seen'. This new flag is used
15741         to signify having seen comments on the current line, so it is
15742         unset after a newline.
15743
15744 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15745
15746         * doc.cs : When searching for a type, find nested type too.
15747           This fixes bug #71040.
15748
15749 2005-01-06  Atsushi Enomoto  <atsushi@ximian.com>
15750
15751         * doc.cs :
15752           - Warn missing member comment on those classes which also does not
15753             have doc comments. Fixed bug #71041.
15754           - Don't warn missing doc comment on default constructor.
15755             Fixed bug #71042.
15756
15757 2005-01-06  Duncan Mak  <duncan@ximian.com>
15758
15759         * cs-tokenizer.cs (xtoken): After handling traditional C-style
15760         comments, set `tokens_seen' to true. This allows us to detect
15761         misplaced preprocessor directives (i.e. not at the beginning of
15762         the a line, nor after whitespaces). In that case, report error
15763         CS1040. This fixes bug #56460.
15764
15765         * cs-parser.jay (interface_member_declaration): Add checks for
15766         IsExplicitImpl, and report CS0541 error if an interface member is
15767         defined as an explicit interface declaration.
15768
15769 2005-01-06  Marek Safar  <marek.safar@seznam.cz>
15770
15771         Fix #70817
15772         * class.cs (PropertyMethod): Set Parent field in ctors.
15773         (SetMethod.InternalParameters): Add unsafe switch hack.
15774         
15775         * decl.cs (MemberCore.Parent): Cannot be readonly.
15776
15777 2005-01-06  Raja R Harinath  <rharinath@novell.com>
15778
15779         * decl.cs (DeclSpace.ResolveType): Remove.
15780         (DeclSpace.ResolveBaseTypeExpr): Rename from ResolveTypeExpr.
15781         Merge in code from ...
15782         (DeclSpace.GetTypeResolvingEmitContext): ... here.  Remove.
15783         * class.cs, enum.cs: Update to changes.
15784
15785 2005-01-06  Miguel de Icaza  <miguel@ximian.com>
15786
15787         * anonymous.cs: Ensure that we init the scope of our parent if it
15788         has not been initialized yet.
15789
15790 2004-12-30  Duncan Mak  <duncan@ximian.com>
15791
15792         * typemanager.cs (TypeManager.CheckStructCycles): Don't crash here
15793         if field.FieldBuilder is null. Fixes #70758.
15794
15795         * convert.cs: Fixed some typos and updated some of the comments.
15796         (ImplicitStandardConversionExists):
15797         (TryImplicitIntConversion): If `target_type' is an interface and
15798         the type of `ic' implements this interface, return true or a new
15799         BoxedCast instead of null. This fixes #70468.
15800
15801 2004-12-29  Duncan Mak  <duncan@ximian.com>
15802
15803         * expression.cs (Argument.Emit): Check that Expr is
15804         IMemoryLocation before casting to it, and report CS1510 otherwise.
15805
15806         This fixes #70402.
15807
15808 2004-12-21  Ben Maurer  <bmaurer@ximian.com>
15809
15810         * statement.cs (Block.ThisVariable): remove the recursion here, to
15811         make the --profile more sane.
15812
15813 2004-12-17  Carlos Cortez <calberto.cortez@gmail.com>
15814
15815         * driver.cs: Patch to handle a xsp bug that prevents to reference an .exe
15816         assembly, by JB Evain.
15817
15818 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15819
15820         * class.cs, decl.cs, ecore.cs, iterators.cs, pending.cs, 
15821           rootcontext.cs, typemanager.cs: Make nomenclature consistent.
15822         "parent" refers to enclosing type/class.  "base" refers to superclass.
15823
15824 2004-12-17  Raja R Harinath  <rharinath@novell.com>
15825
15826         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
15827         Ensure that we only have GlobalAttributes.
15828         * attribute.cs (Attribute.Emit): Make non-virtual.
15829         (GlobalAttribute.Emit): Remove.
15830         (Attribute.Resolve): Make virtual.
15831         (GlobalAttribute.Resolve): New.  Set Rootcontext.Tree.Types.NamespaceEntry.
15832         (Attribute.GetConditionalAttributeValue): Take an EmitContext as
15833         the argument. Don't create one.
15834         (Attribute.GetObsoleteAttribute): Likewise.
15835         (Attribute.GetClsCompliantAttributeValue): Likewise.
15836         * class.cs, decl.cs: Update to changes.
15837
15838 2004-12-17  Marek Safar  <marek.safar@seznam.cz>
15839
15840         * delegate.cs (NewDelegate.DoResolve): Add error 149 report.
15841         
15842         * ecore.cs (Expression.MemberLookupFailed): Fixed error 143.
15843         
15844         * statement.cs (Foreach.Resolve): Add error 186 report.
15845
15846 2004-12-16  Marek Safar  <marek.safar@seznam.cz>
15847
15848         * expression.cs (Conditional.DoResolve): Add warning 429.
15849         
15850         * statement.cs (If.Resolve): Add warning 665.
15851
15852 2004-12-16  Raja R Harinath  <rharinath@novell.com>
15853
15854         New invariant: RootContext.Tree.Types.NamespaceEntry == null
15855         except when in the parser, and in GlobalAttribute.
15856         * driver.cs (MainDriver): Reset RootContext.Tree.Types.NamespaceEntry.
15857         * attribute.cs (GlobalAttribute.CheckAttributeType): Reset
15858         RootContext.Tree.Types.NamespaceEntry once work is done.
15859         (GlobalAttribute.Emit): New.  Wrapper for Attribute.Emit, but sets
15860         and resets RootContext.Tree.Types.NamespaceEntry.
15861
15862 2004-12-15  Marek Safar  <marek.safar@seznam.cz>
15863
15864         * cs-parser.jay: Don't create a block for every variable.
15865
15866 2004-12-14  Miguel de Icaza  <miguel@ximian.com>
15867
15868         * location.cs: Provide extra information.
15869
15870         * statement.cs: The instance is not `ldarg_0.THIS' when accessing
15871         variables from the captured environment, it is the ldarg_0.
15872
15873 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15874
15875         * cs-parser.jay: Changed warning level for 642 to 4 until Miguel
15876         find a conclusion.
15877         
15878         * class.cs: Changed warning level for 169 to avoid developer
15879         displeasure from warning flooding. It will be changed back when they
15880         fix most of current BCL warnings.
15881         
15882         * RootContext.cs: Pushed default WarningLevel to 3.
15883         
15884         * statement.cs: Removed unused variable.
15885
15886 2004-12-14  Marek Safar  <marek.safar@seznam.cz>
15887
15888         * class.cs (TypeContainer.GetClassBases): Add error 1521 report.
15889         (TypeContainer.MethodModifiersValid): Refactored to use MemberCore.
15890         Add error 502 report.
15891         (StaticClass.DefineType): Add error 441 report.
15892         (Class.AllowedModifiersProp): New virtual property as temporary
15893         extension to AllowedModifiers.
15894         (Class.DefineType): Add error 418 report. Moved ModFlags check here
15895         to share implementation with StaticClass and don't call virtual
15896         methods from ctor.
15897         
15898         * driver.cs (MainDriver): Add error 1558 test.
15899
15900         * parameter.cs (Parameter.ApplyAttributeBuilder): Add error 662
15901         report. Moved error 36 test here.
15902
15903         * statement.cs (Throw.Resolve): Add error 724 report.
15904
15905         * typemanager.cs: Add out_attribute_type core type.
15906         
15907 2004-12-13  Marek Safar  <marek.safar@seznam.cz>
15908
15909         * class.cs (TypeContainer.VerifyClsCompliance): Add error
15910         3018 report.
15911         (PropertyBase.VerifyClsCompliance): Add errror 3025 report.
15912
15913         * codegen.cs (ModuleClass.ApplyAttributeBuilder): Add error
15914         3017 report.
15915         
15916         * decl.cs (MemberCore.VerifyClsCompliance): Add warning 3021.
15917
15918         * parameter.cs (ReturnParameter.ApplyAttributeBuilder): 
15919         Add error 3023 report.
15920         (Parameter.ApplyAttributeBuilder): Add error 3022 report.
15921
15922         * tree.cs (RootTypes.IsClsCompliaceRequired): Add fake
15923         implementation.
15924
15925 2004-12-12  John Luke  <john.luke@gmail.com>
15926
15927         * driver.cs (AddArgs): take -- into account when
15928         adding arguments, fixes bug 65710 
15929
15930 2004-12-12  Martin Baulig  <martin@ximian.com>
15931
15932         * expression.cs (Unary.TryReduceNegative): Added support for
15933         SByteConstant and ByteConstant.
15934         (Unary.Reduce): Check error values from TryReduceNegative().
15935
15936 2004-12-10  Marek Safar  <marek.safar@seznam.cz>
15937
15938         * attributes.cs (Attribute.Resolve): Avoid multiple error report
15939         and report exception as error 182.
15940
15941 2004-12-10  Raja R Harinath  <rharinath@novell.com>
15942
15943         * driver.cs (Main): Fix message when there are warnings.
15944
15945 2004-12-09  Miguel de Icaza  <miguel@ximian.com>
15946
15947         * delegate.cs: Fixed my fix from yesterday, sorry about that.
15948
15949 2004-12-09  Marek Safar  <marek.safar@seznam.cz>
15950
15951         * anonymous.cs, class.cs, convert.cs, doc.cs, support.cs: 
15952         Reduced number of warnings.
15953         
15954         * class.cs (TypeContainer.VerifyClsCompliance): One if is enough.
15955
15956 2004-12-08  Miguel de Icaza  <miguel@ximian.com>
15957
15958         * driver.cs: Removed message.
15959
15960         * delegate.cs: Fix bug introduced in 1.1.x: 70219.
15961
15962 2004-12-08    <vargaz@freemail.hu>
15963
15964         * cs-tokenizer.cs: Add workaround for NET 2.0 beta 1 csc bug.
15965
15966 2004-12-08  Martin Baulig  <martin@ximian.com>
15967
15968         * class.cs (TypeContainer.VerifyClsCompliance): Report a CS3003
15969         instead of a CS3002 for properties and indexer.
15970
15971 2004-12-08  Martin Baulig  <martin@ximian.com>
15972
15973         * decl.cs (MemberName.ToString): Make this work again.
15974
15975 2004-12-08  Marek Safar  <marek.safar@seznam.cz>
15976
15977         * attribute.cs (Resolve): Add error 591 detection.
15978
15979         * class.cs (FieldMember.Define): Add error 1547 detection.
15980         (Indexer.Define): Add error 620 detection.
15981         (Operator.Define): Add error 590 detection.
15982
15983         * ecore.cs: Missing argument for error 79.
15984
15985         * expression.cs (ComposedCast.DoResolveAsTypeStep): Add error 611
15986         detection.
15987
15988 2004-12-07  Marek Safar  <marek.safar@seznam.cz>
15989
15990         Fix #70106
15991         * assign.cs.cs (Assign.DoResolve): Reports error 1648 for value types
15992         only.
15993
15994 2004-12-07  Atsushi Enomoto  <atsushi@ximian.com>
15995
15996         * cs-parser.jay : handle doc comments on implicit/explicit operators.
15997           Some operator comments were suppressed.
15998         * doc.cs : Implicit/explicit operator name in doc comments are like
15999           "op_Explicit(type)~returnType", so added suffix handling.
16000
16001 2004-12-07  Martin Baulig  <martin@ximian.com>
16002
16003         * decl.cs
16004         (MemberCore.GetObsoleteAttribute): Don't create a new EmitContext.
16005         (MemberCore.GetClsCompliantAttributeValue): Likewise.
16006         (DeclSpace.ec): New protected field; store the EmitContext here.
16007         (DeclSpace.EmitContext): New public property; moved here from
16008         `TypeContainer'.
16009         (DeclSpace.GetClsCompliantAttributeValue): Don't create a new
16010         EmitContext.
16011
16012         * enum.cs (Enum.Define): Store the EmitContext in the `ec' field.
16013         (Enum.Emit): Don't create a new EmitContext.
16014
16015         * delegate.cs (Delegate.DefineType): Always create the
16016         EmitContext.
16017
16018         * iterators.cs (Iterators.DefineIterator): Create a new
16019         EmitContext and store it in `ec'.
16020
16021 2004-08-24  Martin Baulig  <martin@ximian.com>
16022
16023         * typemanager.cs
16024         (TypeManager.IsSubclassOf): Renamed to IsFamilyAccessible; use
16025         this for accessibility checks.
16026         (TypeManager.IsSubclassOrNestedChildOf): Renamed to
16027         IsNestedFamilyAccessible.
16028         (TypeManager.IsSubclassOf): New method, do what the name actually
16029         says.   
16030
16031 2004-12-06  Raja R Harinath  <rharinath@novell.com>
16032
16033         Fix crash on cs0657-17.cs.
16034         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
16035         Use RootContext.Tree.Types, not 'new RootTypes ()'.
16036         * attribute.cs (GlobalAttribute.CheckAttributeType): Narrow down
16037         the case where the NamespaceEntry gets overwritten.
16038
16039 2004-12-06  Marek Safar  <marek.safar@seznam.cz>
16040
16041         Fixed #69195, #56821
16042         * ecore.cs (ResolveBoolean): Tiny refactoring.
16043
16044         * expression.cs (Binary.DoResolve): Add warning 429 and skipping
16045         of right expression resolving when left is false constant and
16046         operator is LogicalAnd OR true constant and operator is LogicalOr.
16047
16048         * statement.cs (ResolveUnreachable): Always reports warning.
16049
16050 2004-12-05  Miguel de Icaza  <miguel@ximian.com>
16051
16052         * class.cs: Distinguish between 1721 and 1722 (just a little help
16053         for the programmer).
16054
16055 2004-12-03  Miguel de Icaza  <miguel@ximian.com>
16056
16057         * delegate.cs: Only allow this on new versions of the language. 
16058
16059 2004-12-02  Duncan Mak  <duncan@ximian.com>
16060
16061         * ecore.cs (PropertyExpr.IsAccessorAccessible): Moved to
16062         Expression class.
16063         (Expression.IsAccessorAccessible): Moved from the PropertyExpr to
16064         here as a static method. Take an additional bool out parameter
16065         `must_do_cs1540_check' for signaling to InstanceResolve.
16066         (PropertyExpr.InstanceResolve): Removed the `must_do_cs1540_check'
16067         member field from PropertyExpr class and made it an argument of
16068         the method instead.
16069         (EventExpr.InstanceResolve): Copied from PropertyExpr, removed the
16070         check for MarshalByRefObject, and report CS0122 instead of CS1540.
16071         (EventExpr.DoResolve): Call IsAccessorAccessible on `add_accessor'
16072         and `remove_accessor' as well as InstanceResolve: report CS0122
16073         where applicable.
16074
16075         Fixes #70129.
16076
16077 2004-12-03  Raja R Harinath  <rharinath@novell.com>
16078
16079         Fix test-327.cs, test-328.cs, and put in early infrastructure
16080         for eventually fixing #52697.
16081         * namespace.cs (NamespaceEntry.LookupForUsing): New method.
16082         (NamespaceEntry.LookupNamespaceOrType): New method, refactored
16083         from other methods.
16084         (NamespaceEntry.Lookup): Remove 'ignore_using' flag.
16085         (AliasEntry.Resolve, UsingEntry.Resolve): Use 'LookupForUsing'.
16086         (VerifyUsing, error246): Update.
16087         * rootcontext.cs (RootContext.NamespaceLookup): Just use
16088         'NamespaceEntry.LookupNamespaceOrType'.
16089
16090 2004-12-03  Martin Baulig  <martin@ximian.com>
16091
16092         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
16093         method as our child, call AnonymousMethod.Compatible() on it.
16094
16095 2004-12-03  Raja R Harinath  <rharinath@novell.com>
16096
16097         Disable XML documentation support in 'basic' profile.
16098         * decl.cs, class.cs [BOOTSTRAP_WITH_OLDLIB]: Don't import System.Xml.
16099         Redirect XmlElement to System.Object.
16100         * driver.cs, enum.cs, rootcontext.cs: Don't reference System.Xml.
16101         * doc.cs [BOOTSTRAP_WITH_OLDLIB]: Disable compile.
16102         * mcs.exe.sources: Add doc-bootstrap.cs.
16103         * doc-bootstrap.cs: New file.  Contains empty stub implementation
16104         of doc.cs.
16105
16106 2004-12-03  Atsushi Enomoto  <atsushi@ximian.com>
16107
16108         * cs-tokenizer.cs : Only '////' is rejected. Other non-whitespace
16109           comments are allowed.
16110
16111 2004-12-03  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16112
16113         * delegate.cs: Add checks for subtypes in paramaters and return values
16114         in VerifyMethod () to add support for Covariance/Contravariance
16115         in delegates.
16116         
16117 2004-12-02  Miguel de Icaza  <miguel@ximian.com>
16118
16119         * report.cs: Remove extra closing parenthesis.
16120
16121         * convert.cs (Error_CannotImplicitConversion): If the name of the
16122         types are the same, provide some extra information.
16123
16124         * class.cs (FieldBase): Use an unused bit field from the field to
16125         encode the `has_offset' property from the FieldMember.  This saves
16126         a couple of Ks on bootstrap compilation.
16127
16128         * delegate.cs (NewDelegate.DoResolve): If we have an anonymous
16129         method as our child, return the AnonymousMethod resolved
16130         expression.
16131
16132         * expression.cs (New.DoResolve): Allow return values from
16133         NewDelegate to also include AnonymousMethods.
16134
16135         Fixes #70150.
16136
16137 2004-12-02  Marek Safar  <marek.safar@seznam.cz>
16138
16139         Fix bug #70102
16140         * attribute.cs (Resolve): Improved implementation of params
16141         attribute arguments.
16142
16143         * support.cs (ParameterData): Add HasParams to be faster.
16144
16145 2004-12-02  Atsushi Enomoto  <atsushi@ximian.com>
16146
16147         all things are for /doc support:
16148
16149         * doc.cs: new file that supports XML documentation generation.
16150         * mcs.exe.sources: added doc.cs.
16151         * driver.cs:
16152           Handle /doc command line option.
16153           Report error 2006 instead of 5 for missing file name for /doc.
16154           Generate XML documentation when required, after type resolution.
16155         * cs-tokenizer.cs:
16156           Added support for picking up documentation (/// and /** ... */),
16157           including a new XmlCommentState enumeration.
16158         * cs-parser.jay:
16159           Added lines to fill Documentation element for field, constant,
16160           property, indexer, method, constructor, destructor, operator, event
16161           and class, struct, interface, delegate, enum.
16162           Added lines to warn incorrect comment.
16163         * rootcontext.cs :
16164           Added Documentation field (passed only when /doc was specified).
16165         * decl.cs:
16166           Added DocComment, DocCommentHeader, GenerateDocComment() and
16167           OnGenerateDocComment() and some supporting private members for
16168           /doc feature to MemberCore.
16169         * class.cs:
16170           Added GenerateDocComment() on TypeContainer, MethodCore and Operator.
16171         * delegate.cs:
16172           Added overriden DocCommentHeader.
16173         * enum.cs:
16174           Added overriden DocCommentHeader and GenerateDocComment().
16175
16176 2004-12-01  Miguel de Icaza  <miguel@ximian.com>
16177
16178         * cfold.cs (ConstantFold.DoConstantNumericPromotions): After
16179         unwrapping the enumeration values, chain to
16180         DoConstantNumericPromotions again, so we can promote things to the
16181         fundamental types (takes care of enums that are bytes, sbytes).
16182
16183         Fixes bug #62054.
16184
16185 2004-12-01  Raja R Harinath  <rharinath@novell.com>
16186
16187         * attribute.cs (Attribute.CheckAttributeType): Remove complain flag.
16188         Fix long-standing bug in type-lookup.  Use FindType instead of
16189         LookupType when ec.ResolvingTypeTree.
16190         (Attribute.ResolveType, Attribute.Resolve)
16191         (Attribute.DefinePInvokeMethod,GlobalAttribute.CheckAttributeType):
16192         Update to changes.
16193         (Attributes.Search): Remove internal version.  Update.
16194         (Attributes.SearchMulti): Update.
16195         (Attributes.GetClsCompliantAttribute): Remove.
16196         (Attributes.GetIndexerNameAttribute): Remove.
16197         * decl.cs (MemberCore.GetClsCompliantAttributeValue): Update to changes.
16198         (DeclSpace.GetClsCompliantAttributeValue): Likewise.
16199         * class.cs (Indexer.Define): Likewise.
16200
16201 2004-12-01  Marek Safar  <marek.safar@seznam.cz>
16202
16203         Fix bug #68790
16204         * ecore.cs: CheckMarshallByRefAccess new virtual method for testing
16205         MarshallByReference members access.
16206
16207         * expression.cs: Use CheckMarshallByRefAccess;
16208         Better error CS0197 message.
16209
16210         * report.cs: Print whole related error message.
16211
16212 2004-11-30  Raja R Harinath  <rharinath@novell.com>
16213
16214         * Makefile (mcs.exe) [PROFILE=default]: Keep a copy of mcs.exe in
16215         the current directory to help debugging.
16216
16217 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16218
16219         * class (GetClassBases): Better error 60 report.
16220         (EventProperty): Disabled warning 67 detection.
16221
16222 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16223
16224         Fix bug #60324
16225         * cfold.cs (Assign.DoResolve): Add subtraction for DecimalConstant.
16226
16227         * constant.cs (DecimalConstant.Emit): Don't use int ctor for
16228         precise values.
16229
16230 2004-11-29  Marek Safar  <marek.safar@seznam.cz>
16231
16232         Fix bug #49488
16233         * assign.cs (Assign.DoResolve): Add error 1648, 1650 report.
16234
16235         * decl.cs (MemberCore.MemberName): Error 1648 in compiler.
16236
16237 2004-11-26  Miguel de Icaza  <miguel@ximian.com>
16238
16239         * attribute.cs (Attribute.Resolve): Refine error reporting and
16240         report a cs0117 if the identifier does not exist, to distinguish
16241         from 0617 which is a miss-use of the actual identifier.
16242
16243         * ecore.cs (EventExpr.Emit): Refine error report and distinguish
16244         between cs0070 and cs0079.
16245
16246         * class.cs (MemberBase.DoDefine): When reporting a wrong
16247         accessibility level, we use MethodCore to compare instead of
16248         Method (this was a regression in some refactoring effort).
16249
16250         So now we correctly report cs0056 again.
16251
16252         * convert.cs (ImplicitReferenceConversion): Corrected typo, I was
16253         testing the target_type (which was known to be object_type) and
16254         not the source type (which is anonymous_method).
16255
16256         Fixed reporting of error cs1660.
16257
16258         * expression.cs (UserCast.Source): Expose the underlying cast.
16259
16260         * statement.cs (Switch.SwitchGoverningType): Sort the list of
16261         allowed types to find a match to int32 first (most common).
16262
16263         In addition, it ignores any ImplicitUserConversions that did an
16264         internal implicit conversion (as the switch statement allows only
16265         one integral conversion to exist).
16266
16267         * class.cs (PartialContainer.Create): rename `name' to
16268         `member_name' for clarity.  Then replace the string calls with a
16269         call to MemberName.GetPartialName, as now using
16270         MemberName.ToString is an error (this is due to the side effects
16271         it had, that were fixed in the past).
16272
16273         This will restore the error reporting on a number of partial class
16274         errors that were missusing this (and getting an exception as a
16275         results, which is now just a plain textual warning, because
16276         yyparse debug output would crash otherwise).
16277
16278 2004-11-26  Raja R Harinath  <rharinath@novell.com>
16279
16280         * Makefile (PROGRAM_INSTALL_DIR): Remove.
16281
16282 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16283
16284         * rootcontext.cs (LookupType): Make sure to cache lookups that
16285         don't give us a negative result. This saves about 5% of corlib
16286         compilation time.
16287
16288 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16289
16290         * report.cs (AbstractMessage.Print): messages are sent to stderr
16291
16292         * class.cs (TypeContainer.GetClassBases): It is an error to have a
16293         non-interface in the list of interfaces (at this point, either
16294         parent was properly set, or a base class is being listed in the
16295         interfaces section).
16296
16297         This flags error 1722, and resolves the crash from bug 69259.
16298
16299 2004-11-25  Ben Maurer  <bmaurer@ximian.com>
16300
16301         * statement.cs (Using.EmitExpressionFinally): make this work right
16302         for valuetypes. Fixes 69926.
16303
16304 2004-11-25  Miguel de Icaza  <miguel@ximian.com>
16305
16306         * const.cs (Const.ChangeType): Cope with the "0 literal can be
16307         converted to an enum" here, before we try to change the underlying
16308         type.  This code exists, but it is a different code path than the
16309         one used while encoding constants.
16310
16311         * convert.cs (ImplicitReferenceConversionExists): A surprisingly
16312         old bug: when converting from the null literal to a pointer,
16313         return an EmptyCast, not the NullLiteral.
16314
16315         This fixes #69921, the recent null_type changes probably made this
16316         bug more prominent.
16317
16318         (ImplicitReferenceConversionExists): In addition, resynchronized
16319         the code here, so it matches the same code in
16320         ImplicitReferenceConversionExists for the `from any class-type S
16321         to any interface-type T'.
16322         
16323
16324 2004-11-25  Marek Safar  <marek.safar@seznam.cz>
16325
16326         * cfold.cs (BinaryFold): Add addition for DecimalConstant.
16327
16328 2004-11-24  Miguel de Icaza  <miguel@ximian.com>
16329
16330         * cs-parser.jay: Use verbosity accordingly. 
16331
16332 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16333
16334         * expression.cs (Unary.ResolveOperator): Do not report warning;
16335         AddressOf reads from variable.
16336         
16337         (LocalVariableReferences.DoResolveBase): Improved my previous fix.
16338
16339 2004-11-24  Marek Safar  <marek.safar@seznam.cz>
16340
16341         Fix bug #69462
16342
16343         * attribute.cs (Attributable): Removed CheckTargets.
16344         (Attributes.Emit): Explicit attribute targets are tested here.
16345
16346         * class.cs (EventField.ValidAttributeTargets): Explicit target "field" is
16347         not enabled for interfaces.
16348
16349         * codegen.cs (CommonAssemblyModulClass.AddAttributes): Removed CheckTargets.
16350         (GetAssemblyName): Ouch next bug there.
16351
16352 2004-11-23  Carlos Alberto Cortez <calberto.cortez@gmail.com>
16353
16354         * expression.cs: Error 275 added.
16355         
16356 2004-11-23  Marek Safar  <marek.safar@seznam.cz>
16357
16358         Fix bug #69177 (Implemented decimal constant support)
16359
16360         * cfold.cs (DoConstantNumericPromotions: Add DecimalConstant.
16361         (BinaryFold): Add DecimalConstant.
16362
16363         * const.cs (Define): Decimal constant 
16364         (is not constant.
16365         (ChangeType): Add decimal type handling.
16366         (LookupConstantValue): Don't set value for decimal type but
16367         emit DecimalConstantAttribute. Needed for constant optimization.
16368
16369         * constant.cs (ToDecimal): New method.
16370         (ConvertToDecimal): New method.
16371         (IntConstant): Implemented ConvertToDecimal.
16372         (DecimalConstant.Emit): Emit optimized version for decimals in
16373         int range.
16374
16375         * expression.cs (ResolveOperator): Changed order of constant
16376         reduction to work correctly with native types which have
16377         overloaded operators.
16378         (ResolveMemberAccess): Extract constant value from attribute
16379         for decimal type.
16380
16381         * rootcontext.cs (ResolveCore): Add DecimalConstantAttribute.
16382
16383         * typemanager.cs (TypeManager): Add decimal_constant_attribute_type,
16384         void_decimal_ctor_int_arg, decimal_constant_attribute_ctor.
16385         (ChangeType): Decimal is special.
16386         (TypeToCoreType): Add decimal type.
16387
16388 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16389
16390         * convert.cs (ImplicitConversionRequired): Add error cs0642 for
16391         decimal types.
16392
16393 2004-11-22  Marek Safar  <marek.safar@seznam.cz>
16394
16395         * class.cs (EventField.ApplyAttributeBuilder): Fix error
16396         test cs1667-5.cs.
16397
16398 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16399
16400         * class.cs (MemberBase.DoDefine): Fix error cs0508 report.
16401
16402         * pending.cs (PendingImplementation): Grab only interfaces.
16403
16404 2004-11-19  Marek Safar  <marek.safar@seznam.cz>
16405
16406         * statement.cs (ForeachHelperMethods): Add location member and
16407         error 202 detection.
16408
16409 2004-11-19  Raja R Harinath  <rharinath@novell.com>
16410
16411         * Makefile (EXTRA_DISTFILES): Remove mcs.exe.config.  It's
16412         automatically handled by executable.make.
16413         (PROGRAM): Make profile-specific.
16414
16415 2004-11-18  Marek Safar  <marek.safar@seznam.cz>
16416
16417         * expression.cs (DoResolveBase): Fixed wrong warning for out
16418         variables.
16419
16420 2004-11-18  Martin Baulig  <martin@ximian.com>
16421
16422         Merged latest changes into gmcs.  Please keep this comment in
16423         here, it makes it easier for me to see what changed in MCS since
16424         the last time I merged.
16425
16426 2004-11-17  Raja R Harinath  <rharinath@novell.com>
16427
16428         * typemanager.cs (TypeHandle.GetTypeHandle): Make private.
16429         (TypeHandle.GetMemberCache): New.
16430         (TypeHandle.TypeHandle): Update.
16431         (TypeManager.LookupMemberCache): Rewritten from LookupMemberContainer.
16432         (TypeManager.LookupParentInterfacesCache):
16433         Rename from LookupInterfaceCache.  Optimize slightly.
16434         (TypeManager.MemberLookup_FindMembers): Update.
16435         * decl.cs (MemberCache.MemberCache): Set Container to null in the
16436         multi-type variant.
16437         (AddCacheContents): Rename from AddHashtable.
16438         * class.cs (TypeContainer.parent_container): Remove.
16439         (TypeContainer.VerifyClsCompliance): Don't use parent_container.
16440         (TypeContainer.DoDefineMembers): Don't initialize it.
16441         Update to name changes.
16442         
16443 2004-11-17  Miguel de Icaza  <miguel@ximian.com>
16444
16445         * class.cs (MethodCore.CheckAccessModifiers): New helper routine
16446         that factors the code to check access modifiers on override.  
16447
16448         (PropertyBase): Use the code here.
16449
16450         Patch from Lluis S'anchez, fixes bug #69361.
16451
16452 2004-11-15  Miguel de Icaza  <miguel@ximian.com>
16453
16454         * anonymous.cs (AnonymousMethod.Error_AddressOfCapturedVar): New
16455         routine that is used to report the use of a captured variable
16456         whose address has been taken.
16457
16458         There are two checks: one when variables are being captured and
16459         the other check is when the address of a variable is taken. 
16460         
16461         (because an anonymous methods might be resolved before *or* after
16462         the address has been taken) and 
16463
16464         * expression.cs (Conditional.DoResolve): Remove the special
16465         casing that Martin added to trueExpr and falseExpr being both
16466         NullLiteral.  We get the right behavior now just by introducing
16467         the null_type into the compiler. 
16468
16469         * convert.cs (ExplicitConversion): Change the code to use
16470         null_type instead of testing `expr is NullLiteral'.
16471         (ImplicitConversionStandard): use null_type too.
16472         (ImplicitReferenceConversionExists): use null_type too.
16473         (ImplicitReferenceConversion): use null_type too.
16474
16475         * literal.cs: The type of `NullLiteral' is now null_type instead
16476         of object_type. 
16477         (Resolve): Set the type here.
16478
16479         * typemanager.cs: Introduce null_type.
16480
16481 2004-11-17  Martin Baulig  <martin@ximian.com>
16482
16483         * decl.cs (MemberCache.AddHashtable): Add entries in the opposite
16484         direction, like FindMembers() does.  Fixes #69546, testcase is in
16485         test-315.cs.    
16486
16487 2004-11-16  Martin Baulig  <martin@ximian.com>
16488
16489         This is based on a patch from Marek Safar, see bug #69082.
16490         Fixes bugs #63705 and #67130.
16491
16492         * typemanager.cs (TypeManager.LookupInterfaceCache): New public
16493         method; create a MemberCache for an interface type and cache the
16494         result.
16495
16496         * decl.cs (IMemberContainer.ParentContainer): Removed.
16497         (IMemberContainer.ParentCache): New property.
16498         (MemberCache.SetupCacheForInterface): Removed.
16499         (MemberCache..ctor): Added .ctor which takes a `Type[]'; use this
16500         to create a cache for an interface's "parent".
16501
16502         * class.cs (TypeContainer.DoDefineMembers): Setup cache for
16503         interfaces too.
16504
16505 2004-11-16  Martin Baulig  <martin@ximian.com>
16506
16507         Merged back from gmcs; these changes already went into gmcs a
16508         couple of weeks ago.
16509
16510         * typemanager.cs
16511         (TypeManager.AddUserType): Removed the `ifaces' argument.
16512         (TypeManager.RegisterBuilder): Take a `Type []' instead of a
16513         `TypeExpr []'.
16514         (TypeManager.AddUserInterface): Removed.
16515         (TypeManager.ExpandInterfaces): Return a `Type []' instead of a
16516         `TypeExpr []'.
16517         (TypeManager.GetInterfaces): Likewise.
16518         (TypeManager.GetExplicitInterfaces): Likewise.
16519
16520         * ecore.cs (TypeExpr.GetInterfaces): Removed.
16521
16522         * class.cs (TypeContainer.base_class_type): Replaced with `ptype'.
16523         (TypeContainer.base_inteface_types): Replaced with `ifaces'.
16524
16525 2004-11-14  Ben Maurer  <bmaurer@ximian.com>
16526
16527         * statement.cs: Avoid adding bools to a hashtable.
16528
16529 2004-11-07  Miguel de Icaza  <miguel@ximian.com>
16530
16531         * expression.cs (Invocation.OverloadResolve): Flag error if we are
16532         calling an unsafe method from a safe location.
16533
16534 2004-11-06  Marek Safar  <marek.safar@seznam.cz>
16535
16536         Fix #69167
16537         * codegen.cs (ApplyAttributeBuilder): Do not return; it is only warning.
16538
16539 2004-11-06  Miguel de Icaza  <miguel@ximian.com>
16540
16541         * namespace.cs (VerifyUsing): use GetPartialName instead of
16542         ToString. 
16543
16544 2004-11-05  Miguel de Icaza  <miguel@ximian.com>
16545
16546         * statement.cs (Return.Resolve): Fix regression in typo: if
16547         `in_exc', we have to request a NeedReturnLabel, this was a typo
16548         introduced in the anonymous method check-in.  Fixes #69131.
16549
16550         * Indexers were using the ShortName when defining themselves,
16551         causing a regression in the compiler bootstrap when applying the
16552         patch from 2004-11-02 (first part), now they use their full name
16553         and the bug is gone.
16554
16555 2004-11-04  Zoltan Varga  <vargaz@freemail.hu>
16556
16557         * driver.cs: Strip the path from the names of embedded resources. Fixes
16558         #68519.
16559
16560 2004-11-04  Raja R Harinath  <rharinath@novell.com>
16561
16562         Fix error message regression: cs0104-2.cs.
16563         * namespace.cs (NamespaceEntry.Lookup): Remove 'silent' flag.
16564         (AliasEntry.Resolve): Update.
16565         * rootcontext.cs (RootContext.NamespaceLookup): Update.  Remove
16566         'silent' flag.
16567         (RootContext.LookupType): Update.
16568
16569 2004-11-03  Carlos Alberto Cortez <carlos@unixmexico.org>
16570
16571         * cs-parser.jay: Add support for handling accessor modifiers
16572         * class: Add support port accessor modifiers and error checking,
16573         define PropertyMethod.Define as virtual (not abstract anymore)
16574         * ecore.cs: Add checking for proeprties access with access modifiers
16575         * iterators.cs: Modify Accessor constructor call based in the modified
16576         constructor
16577 2004-11-02  Ben Maurer  <bmaurer@ximian.com>
16578
16579         * expression.cs (StringConcat): Handle being called twice,
16580         as when we have a concat in a field init with more than two
16581         ctors in the class
16582
16583 2004-11-02  Miguel de Icaza  <miguel@ximian.com>
16584
16585         * class.cs (Event.Define, Indexer.Define, Property.Define): Do not
16586         special case explicit implementations, we should always produce
16587         the .property or .event declaration.
16588         
16589         * decl.cs (MemberName): Renamed GetFullName to GetPartialName
16590         since it will not return correct data if people use this
16591         unresolved in the presence of using statements (see test-313).
16592
16593         * class.cs (MethodData.Define): If we are an explicit interface
16594         implementation, set the method name to the full name of the
16595         interface plus the name of the method.  
16596
16597         Notice that using the method.MethodName.GetFullName() does not
16598         work, as it will only contain the name as declared on the source
16599         file (it can be a shorthand in the presence of using statements)
16600         and not the fully qualifed type name, for example:
16601
16602         using System;
16603
16604         class D : ICloneable {
16605                 object ICloneable.Clone ()  {
16606                 }
16607         }
16608
16609         Would produce a method called `ICloneable.Clone' instead of
16610         `System.ICloneable.Clone'.
16611
16612         * namespace.cs (Alias.Resolve): Use GetPartialName.
16613         
16614 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16615
16616         * cs-parser.jay: Add error 1055 report.
16617
16618 2004-11-01  Miguel de Icaza  <miguel@ximian.com>
16619
16620         * assign.cs (Assign.DoResolve): Only do the transform of
16621         assignment into a New if the types are compatible, if not, fall
16622         through and let the implicit code deal with the errors and with
16623         the necessary conversions. 
16624
16625 2004-11-01  Marek Safar  <marek.safar@seznam.cz>
16626
16627         * cs-parser.jay: Add error 1031 report.
16628
16629         * cs-tokenizer.cs: Add location for error 1038.
16630
16631 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16632
16633         * cs-parser.jay: Add error 1016 report.
16634
16635 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16636
16637         * cs-parser.jay: Add errors 1575,1611 report.
16638
16639 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16640
16641         * cs-parser.jay: Add error 1001 report.
16642
16643 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16644
16645         Fix #68850
16646         * attribute.cs (GetMarshal): Add method argument for
16647         caller identification.
16648
16649         * class.cs, codegen.cs, enum.cs, parameter.cs: Added
16650         agument for GetMarshal and RuntimeMissingSupport.
16651
16652 2004-10-31  Marek Safar  <marek.safar@seznam.cz>
16653
16654         * attribute.cs (ExtractSecurityPermissionSet): Removed
16655         TypeManager.code_access_permission_type.
16656
16657         * typemanager.cs: Removed TypeManager.code_access_permission_type.
16658
16659 2004-10-27  Miguel de Icaza  <miguel@ximian.com>
16660
16661         * expression.cs (LocalVariableReference.DoResolveLValue): Check
16662         for obsolete use of a variable here.   Fixes regression on errors
16663         cs0619-25 and cs0619-26.
16664
16665 2004-10-27  Marek Safar  <marek.safar@seznam.cz>
16666
16667         Fix #62358, implemented security attribute encoding.
16668
16669         * attribute.cs (Attribute.CheckSecurityActionValididy): New method.
16670         Tests permitted SecurityAction for assembly or other types.
16671         (Assembly.ExtractSecurityPermissionSet): New method. Transforms
16672         data from SecurityPermissionAttribute to PermisionSet class.
16673
16674         * class.cs (ApplyAttributeBuilder): Added special handling
16675         for System.Security.Permissions.SecurityAttribute based types.
16676
16677         * codegen.cs (AssemblyClass.ApplyAttributeBuilder): Added
16678         special handling for System.Security.Permissions.SecurityAttribute
16679         based types.
16680
16681         * enum.cs (ApplyAttributeBuilder): Added special handling
16682         for System.Security.Permissions.SecurityAttribute based types.
16683
16684         * parameter.cs (ApplyAttributeBuilder): Added special handling
16685         for System.Security.Permissions.SecurityAttribute based types.
16686
16687         * rootcontext.cs: Next 2 core types.
16688
16689         * typemanager.cs (TypeManager.security_permission_attr_type):
16690         Built in type for the SecurityPermission Attribute.
16691         (code_access_permission_type): Build in type.
16692
16693 2004-10-17  Miguel de Icaza  <miguel@ximian.com>
16694
16695         * expression.cs (LocalVariableReference.DoResolveBase, Emit):
16696         Remove the tests for `ec.RemapToProxy' from here, and encapsulate
16697         all of this information into
16698         EmitContext.EmitCapturedVariableInstance.
16699         
16700         * codegen.cs (EmitCapturedVariableInstance): move here the
16701         funcionality of emitting an ldarg.0 in the presence of a
16702         remapping.   This centralizes the instance emit code.
16703
16704         (EmitContext.EmitThis): If the ScopeInfo contains a THIS field,
16705         then emit a load of this: it means that we have reached the
16706         topmost ScopeInfo: the one that contains the pointer to the
16707         instance of the class hosting the anonymous method.
16708
16709         * anonymous.cs (AddField, HaveCapturedFields): Propagate field
16710         captures to the topmost CaptureContext.
16711
16712 2004-10-12  Miguel de Icaza  <miguel@ximian.com>
16713
16714         * expression.cs (LocalVariableReference): Move the knowledge about
16715         the iterators into codegen's EmitCapturedVariableInstance.
16716
16717 2004-10-11  Miguel de Icaza  <miguel@ximian.com>
16718
16719         * codegen.cs (EmitContext.ResolveTopBlock): Emit a 1643 when not
16720         all code paths return a value from an anonymous method (it is the
16721         same as the 161 error, but for anonymous methods).
16722
16723 2004-10-08  Miguel de Icaza  <miguel@ximian.com>
16724
16725         The introduction of anonymous methods in the compiler changed
16726         various ways of doing things in the compiler.  The most
16727         significant one is the hard split between the resolution phase
16728         and the emission phases of the compiler.
16729
16730         For instance, routines that referenced local variables no
16731         longer can safely create temporary variables during the
16732         resolution phase: they must do so from the emission phase,
16733         since the variable might have been "captured", hence access to
16734         it can not be done with the local-variable operations from the runtime.
16735         
16736         * statement.cs 
16737
16738         (Block.Flags): New flag `IsTopLevel' to indicate that this block
16739         is a toplevel block.
16740
16741         (ToplevelBlock): A new kind of Block, these are the blocks that
16742         are created by the parser for all toplevel method bodies.  These
16743         include methods, accessors and anonymous methods.
16744
16745         These contain some extra information not found in regular blocks:
16746         A pointer to an optional CaptureContext (for tracking captured
16747         local variables and parameters).  A pointer to the parent
16748         ToplevelBlock.
16749         
16750         (Return.Resolve): Catch missmatches when returning a value from an
16751         anonymous method (error 1662).
16752         Invoke NeedReturnLabel from the Resolve phase instead of the emit
16753         phase.
16754
16755         (Break.Resolve): ditto.
16756
16757         (SwitchLabel): instead of defining the labels during the
16758         resolution phase, we now turned the public ILLabel and ILLabelCode
16759         labels into methods called GetILLabelCode() and GetILLabel() that
16760         only define the label during the Emit phase.
16761
16762         (GotoCase): Track the SwitchLabel instead of the computed label
16763         (its contained therein).  Emit the code by using
16764         SwitchLabel.GetILLabelCode ().
16765
16766         (LocalInfo.Flags.Captured): A new flag has been introduce to track
16767         whether the Local has been captured or not.
16768
16769         (LocalInfo.IsCaptured): New property, used to tell whether the
16770         local has been captured.
16771         
16772         * anonymous.cs: Vastly updated to contain the anonymous method
16773         support.
16774
16775         The main classes here are: CaptureContext which tracks any
16776         captured information for a toplevel block and ScopeInfo used to
16777         track the activation frames for various local variables.   
16778
16779         Each toplevel block has an optional capture context associated
16780         with it.  When a method contains an anonymous method both the
16781         toplevel method and the anonymous method will create a capture
16782         context.   When variables or parameters are captured, they are
16783         recorded on the CaptureContext that owns them, for example:
16784
16785         void Demo () {
16786              int a;
16787              MyDelegate d = delegate {
16788                  a = 1;
16789              }
16790         }
16791
16792         Here `a' will be recorded as captured on the toplevel
16793         CapturedContext, the inner captured context will not have anything
16794         (it will only have data if local variables or parameters from it
16795         are captured in a nested anonymous method.
16796
16797         The ScopeInfo is used to track the activation frames for local
16798         variables, for example:
16799
16800         for (int i = 0; i < 10; i++)
16801                 for (int j = 0; j < 10; j++){
16802                    MyDelegate d = delegate {
16803                         call (i, j);
16804                    }
16805                 }
16806
16807         At runtime this captures a single captured variable `i', but it
16808         captures 10 different versions of the variable `j'.  The variable
16809         `i' will be recorded on the toplevel ScopeInfo, while `j' will be
16810         recorded on a child.  
16811
16812         The toplevel ScopeInfo will also track information like the `this'
16813         pointer if instance variables were referenced (this is necessary
16814         as the anonymous method lives inside a nested class in the host
16815         type of the method). 
16816
16817         (AnonymousMethod): Expanded to track the Toplevel, implement
16818         `AnonymousMethod.Compatible' to tell whether an anonymous method
16819         can be converted to a target delegate type. 
16820
16821         The routine now also produces the anonymous method content
16822
16823         (AnonymousDelegate): A helper class that derives from
16824         DelegateCreation, this is used to generate the code necessary to
16825         produce the delegate for the anonymous method that was created. 
16826
16827         * assign.cs: API adjustments for new changes in
16828         Convert.ImplicitStandardConversionExists.
16829
16830         * class.cs: Adjustments to cope with the fact that now toplevel
16831         blocks are of type `ToplevelBlock'. 
16832
16833         * cs-parser.jay: Now we produce ToplevelBlocks for toplevel blocks
16834         insteda of standard blocks.
16835
16836         Flag errors if params arguments are passed to anonymous methods.
16837
16838         * codegen.cs (EmitContext): Replace `InAnonymousMethod' with
16839         `CurrentAnonymousMethod' which points to the current Anonymous
16840         Method.  The variable points to the AnonymousMethod class that
16841         holds the code being compiled.  It is set in the new EmitContext
16842         created for the anonymous method.
16843
16844         (EmitContext.Phase): Introduce a variable and an enumeration to
16845         assist in enforcing some rules about when and where we are allowed
16846         to invoke certain methods (EmitContext.NeedsReturnLabel is the
16847         only one that enfonces this right now).
16848
16849         (EmitContext.HaveCaptureInfo): new helper method that returns
16850         whether we have a CapturedContext initialized.
16851
16852         (EmitContext.CaptureVariable): New method used to register that a
16853         LocalInfo must be flagged for capturing. 
16854
16855         (EmitContext.CapturedParameter): New method used to register that a
16856         parameters must be flagged for capturing. 
16857         
16858         (EmitContext.CapturedField): New method used to register that a
16859         field must be flagged for capturing. 
16860
16861         (EmitContext.HaveCapturedVariables,
16862         EmitContext.HaveCapturedFields): Return whether there are captured
16863         variables or fields. 
16864
16865         (EmitContext.EmitMethodHostInstance): This is used to emit the
16866         instance for the anonymous method.  The instance might be null
16867         (static methods), this (for anonymous methods that capture nothing
16868         and happen to live side-by-side with the current method body) or a
16869         more complicated expression if the method has a CaptureContext.
16870
16871         (EmitContext.EmitTopBlock): Routine that drives the emission of
16872         code: it will first resolve the top block, then emit any metadata
16873         and then emit the code.  The split is done so that we can extract
16874         any anonymous methods and flag any captured variables/parameters.
16875         
16876         (EmitContext.ResolveTopBlock): Triggers the resolution phase,
16877         during this phase, the ILGenerator should not be used as labels
16878         and local variables declared here might not be accessible to any
16879         code that is part of an anonymous method.  
16880
16881         Exceptions to this include the temporary variables that are
16882         created by some statements internally for holding temporary
16883         variables. 
16884         
16885         (EmitContext.EmitMeta): New routine, in charge of emitting all the
16886         metadata for a cb
16887
16888         (EmitContext.TemporaryReturn): This method is typically called
16889         from the Emit phase, and its the only place where we allow the
16890         ReturnLabel to be defined other than the EmitMeta.  The reason is
16891         that otherwise we would have to duplicate a lot of logic in the
16892         Resolve phases of various methods that today is on the Emit
16893         phase. 
16894
16895         (EmitContext.NeedReturnLabel): This no longer creates the label,
16896         as the ILGenerator is not valid during the resolve phase.
16897
16898         (EmitContext.EmitThis): Extended the knowledge in this class to
16899         work in anonymous methods in addition to iterators. 
16900
16901         (EmitContext.EmitCapturedVariableInstance): This emits whatever
16902         code is necessary on the stack to access the instance to a local
16903         variable (the variable will be accessed as a field).
16904
16905         (EmitContext.EmitParameter, EmitContext.EmitAssignParameter,
16906         EmitContext.EmitAddressOfParameter): Routines to support
16907         parameters (not completed at this point). 
16908         
16909         Removals: Removed RemapLocal and RemapLocalLValue.  We probably
16910         will also remove the parameters.
16911
16912         * convert.cs (Convert): Define a `ConstantEC' which points to a
16913         null.  This is just to prefity some code that uses
16914         ImplicitStandardConversion code and do not have an EmitContext
16915         handy.
16916
16917         The idea is to flag explicitly that at that point in time, it is
16918         known that the conversion will not trigger the delegate checking
16919         code in implicit conversions (which requires a valid
16920         EmitContext). 
16921
16922         Everywhere: pass new EmitContext parameter since
16923         ImplicitStandardConversionExists now requires it to check for
16924         anonymous method conversions. 
16925
16926         (Convert.ImplicitStandardConversionExists): If the type of an
16927         expression is the anonymous_method_type, and the type is a
16928         delegate, we invoke the AnonymousMethod.Compatible method to check
16929         whether an implicit conversion is possible. 
16930
16931         (Convert.ImplicitConversionStandard): Only do implicit method
16932         group conversions if the language level is not ISO_1.
16933
16934         * delegate.cs (Delegate.GetInvokeMethod): Common method to get the
16935         MethodInfo for the Invoke method.  used by Delegate and
16936         AnonymousDelegate.
16937
16938         * expression.cs (Binary.DoNumericPromotions): only allow anonymous
16939         method conversions if the target type is a delegate.
16940
16941         Removed extra debugging nops.
16942
16943         (LocalVariableReference): Turn the `local_info' into a public
16944         field. 
16945
16946         Add `prepared' field, the same hack used for FieldExprs to cope
16947         with composed assignments, as Local variables do not necessarily
16948         operate purely on the stack as they used to: they can be captured
16949         fields. 
16950
16951         Add `temp' for a temporary result, like fields.
16952
16953         Refactor DoResolve and DoResolveLValue into DoResolveBase.
16954
16955         It now copes with Local variables that are captured and emits the
16956         proper instance variable to load it from a field in the captured
16957         case. 
16958
16959         (ParameterReference.DoResolveBase): During the resolve phase,
16960         capture parameters if we are in an anonymous method.
16961
16962         (ParameterReference.Emit, ParameterReference.AddressOf): If in an
16963         anonymous method, use the EmitContext helper routines to emit the
16964         parameter reference.
16965
16966         * iterators.cs: Set RemapToProxy to true/false during the
16967         EmitDispose class.
16968
16969         * parameters.cs (GetParameterByName): New helper method. 
16970
16971         * typemanager.cs (anonymous_method_type) a new type that
16972         represents an anonyous method.  This is always an internal type,
16973         used as a fencepost to test against the anonymous-methodness of an
16974         expression. 
16975         
16976 2004-10-20  Marek Safar  <marek.safar@seznam.cz>
16977
16978         * class.cs (MethodCore.CheckBase): Add errors 505, 533, 544,
16979         561 report.
16980         (PropertyBase.FindOutParentMethod): Add errors 545, 546 report.
16981
16982 2004-10-18  Martin Baulig  <martin@ximian.com>
16983
16984         * statement.cs (Fixed.Resolve): Don't access the TypeExpr's
16985         `Type' directly, but call ResolveType() on it.
16986         (Catch.Resolve): Likewise.
16987         (Foreach.Resolve): Likewise.
16988
16989 2004-10-18  Martin Baulig  <martin@ximian.com>
16990
16991         * expression.cs (Cast.DoResolve): Don't access the TypeExpr's
16992         `Type' directly, but call ResolveType() on it.
16993         (Probe.DoResolve): Likewise.
16994         (ArrayCreation.LookupType): Likewise.
16995         (TypeOf.DoResolve): Likewise.
16996         (SizeOf.DoResolve): Likewise.
16997
16998 2004-10-18  Martin Baulig  <martin@ximian.com>
16999
17000         * expression.cs (Invocation.BetterFunction): Put back
17001         TypeManager.TypeToCoreType().
17002
17003 2004-10-18  Raja R Harinath  <rharinath@novell.com>
17004
17005         * class.cs (FieldMember.DoDefine): Reset ec.InUnsafe after doing
17006         the ResolveType.
17007
17008 2004-10-18  Martin Baulig  <martin@ximian.com>
17009
17010         * parameter.cs (Parameter.Resolve):  Don't access the TypeExpr's
17011         `Type' directly, but call ResolveType() on it.
17012
17013 2004-10-18  Martin Baulig  <martin@ximian.com>
17014
17015         * class.cs (FieldMember.Define): Don't access the TypeExpr's
17016         `Type' directly, but call ResolveType() on it.
17017         (MemberBase.DoDefine): Likewise.
17018
17019         * expression.cs (New.DoResolve): Don't access the TypeExpr's
17020         `Type' directly, but call ResolveType() on it.
17021         (ComposedCast.DoResolveAsTypeStep): Likewise.
17022
17023         * statement.cs (LocalInfo.Resolve): Don't access the TypeExpr's
17024         `Type' directly, but call ResolveType() on it.
17025
17026 2004-10-17  John Luke  <john.luke@gmail.com>
17027
17028         * class.cs (Operator.GetSignatureForError): use CSharpName
17029
17030         * parameter.cs (Parameter.GetSignatureForError): Returns
17031         correct name even if was not defined.
17032
17033 2004-10-13  Raja R Harinath  <rharinath@novell.com>
17034
17035         Fix #65816.
17036         * class.cs (TypeContainer.EmitContext): New property.
17037         (DefineNestedTypes): Create an emitcontext for each part.
17038         (MethodCore.DoDefineParameters): Use container's emitcontext.
17039         Pass type array to InternalParameters.
17040         (MemberBase.DoDefine): Use container's emitcontext.
17041         (FieldMember.Define): Likewise.
17042         (Event.Define): Likewise.
17043         (SetMethod.GetParameterInfo): Change argument to EmitContext.
17044         Pass type array to InternalParameters.
17045         (SetIndexerMethod.GetParameterInfo): Likewise.
17046         (SetMethod.Define): Pass emitcontext to GetParameterInfo.
17047         * delegate.cs (Define): Pass emitcontext to
17048         ComputeAndDefineParameterTypes and GetParameterInfo.  Pass type
17049         array to InternalParameters.
17050         * expression.cs (ParameterReference.DoResolveBase): Pass
17051         emitcontext to GetParameterInfo.
17052         (ComposedCast.DoResolveAsTypeStep): Remove check on
17053         ec.ResolvingTypeTree.
17054         * parameter.cs (Parameter.Resolve): Change argument to
17055         EmitContext.  Use ResolveAsTypeTerminal.
17056         (Parameter.GetSignature): Change argument to EmitContext.
17057         (Parameters.ComputeSignature): Likewise.
17058         (Parameters.ComputeParameterTypes): Likewise.
17059         (Parameters.GetParameterInfo): Likewise.
17060         (Parameters.ComputeAndDefineParameterTypes): Likewise.
17061         Re-use ComputeParameterTypes.  Set ec.ResolvingTypeTree.
17062         * support.cs (InternalParameters..ctor): Remove variant that takes
17063         a DeclSpace.
17064         * typemanager.cs (system_intptr_expr): New.
17065         (InitExpressionTypes): Initialize it.
17066
17067 2004-10-12  Chris Toshok  <toshok@ximian.com>
17068
17069         * cs-parser.jay: fix location for try_statement and catch_clause.
17070
17071 2004-10-11  Martin Baulig  <martin@ximian.com>
17072
17073         * report.cs: Don't make --fatal abort on warnings, we have
17074         -warnaserror for that.
17075
17076 2004-10-07  Raja R Harinath  <rharinath@novell.com>
17077
17078         More DeclSpace.ResolveType avoidance.
17079         * decl.cs (MemberCore.InUnsafe): New property.
17080         * class.cs (MemberBase.DoDefine): Use ResolveAsTypeTerminal 
17081         with newly created EmitContext.
17082         (FieldMember.Define): Likewise.
17083         * delegate.cs (Delegate.Define): Likewise.
17084         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup with alias
17085         only if normal name-lookup fails.
17086         (TypeExpr.DoResolve): Enable error-checking.
17087         * expression.cs (ArrayCreation.DoResolve): Use ResolveAsTypeTerminal.
17088         (SizeOf.DoResolve): Likewise.
17089         (ComposedCast.DoResolveAsTypeStep): Likewise.
17090         (StackAlloc.DoResolve): Likewise.
17091         * statement.cs (Block.Flags): Add new flag 'Unsafe'.
17092         (Block.Unsafe): New property.
17093         (Block.EmitMeta): Set ec.InUnsafe as appropriate.
17094         (Unsafe): Set 'unsafe' flag of contained block.
17095         (LocalInfo.Resolve): Use ResolveAsTypeTerminal.
17096         (Fixed.Resolve): Likewise.
17097         (Catch.Resolve): Likewise.
17098         (Using.ResolveLocalVariableDecls): Likewise.
17099         (Foreach.Resolve): Likewise.
17100
17101 2004-10-05  John Luke <john.luke@gmail.com>
17102
17103         * cs-parser.jay: add location to error CS0175
17104
17105 2004-10-04  Miguel de Icaza  <miguel@ximian.com>
17106
17107         * ecore.cs (Expression.Constantity): Add support for turning null
17108         into a constant.
17109
17110         * const.cs (Const.Define): Allow constants to be reference types
17111         as long as the value is Null.
17112
17113 2004-10-04  Juraj Skripsky  <js@hotfeet.ch>
17114
17115         * namespace.cs (NamespaceEntry.Using): No matter which warning
17116         level is set, check if this namespace name has already been added.
17117
17118 2004-10-03 Ben Maurer  <bmaurer@ximian.com>
17119
17120         * expression.cs: reftype [!=]= null should always use br[true,false].
17121         # 67410
17122
17123 2004-10-03  Marek Safar  <marek.safar@seznam.cz>
17124
17125         Fix #67108
17126         * attribute.cs: Enum conversion moved to 
17127         GetAttributeArgumentExpression to be applied to the all
17128         expressions.
17129
17130 2004-10-01  Raja R Harinath  <rharinath@novell.com>
17131
17132         Fix #65833, test-300.cs, cs0122-5.cs, cs0122-6.cs.
17133         * class.c (TypeContainer.DefineType): Flag error if
17134         base types aren't accessible due to access permissions.
17135         * decl.cs (DeclSpace.ResolveType): Move logic to
17136         Expression.ResolveAsTypeTerminal.
17137         (DeclSpace.ResolveTypeExpr): Thin layer over
17138         Expression.ResolveAsTypeTerminal.
17139         (DeclSpace.CheckAccessLevel, DeclSpace.FamilyAccess):
17140         Refactor code into NestedAccess.  Use it.
17141         (DeclSpace.NestedAccess): New.
17142         * ecore.cs (Expression.ResolveAsTypeTerminal): Add new
17143         argument to silence errors.  Check access permissions.
17144         (TypeExpr.DoResolve, TypeExpr.ResolveType): Update.
17145         * expression.cs (ProbeExpr.DoResolve): Use ResolveAsTypeTerminal.
17146         (Cast.DoResolve): Likewise.
17147         (New.DoResolve): Likewise.
17148         (InvocationOrCast.DoResolve,ResolveStatement): Likewise.
17149         (TypeOf.DoResolve): Likewise.
17150
17151         * expression.cs (Invocation.BetterConversion): Return the Type of
17152         the better conversion.  Implement section 14.4.2.3 more faithfully.
17153         (Invocation.BetterFunction): Make boolean.  Make correspondence to
17154         section 14.4.2.2 explicit.
17155         (Invocation.OverloadResolve): Update.
17156         (Invocation): Remove is_base field.
17157         (Invocation.DoResolve): Don't use is_base.  Use mg.IsBase.
17158         (Invocation.Emit): Likewise.
17159
17160 2004-09-27  Raja R Harinath  <rharinath@novell.com>
17161
17162         * README: Update to changes.
17163
17164 2004-09-24  Marek Safar  <marek.safar@seznam.cz>
17165
17166         * cs-parser.jay: Reverted 642 warning fix.
17167
17168 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17169
17170         Fix bug #66615
17171         * decl.cs (FindMemberWithSameName): Indexer can have more than
17172         1 argument.
17173
17174 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17175
17176         * expression.cs (LocalVariableReference.DoResolveLValue):
17177         Do not report warning 219 for out values.
17178         (EmptyExpression.Null): New member to avoid extra allocations.
17179
17180 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17181
17182         * cs-parser.jay: Fix wrong warning 642 report.
17183
17184         * cs-tokenizer.cs (CheckNextToken): New helper;
17185         Inspect next character if is same as expected.
17186
17187 2004-09-23  Martin Baulig  <martin@ximian.com>
17188
17189         * convert.cs (Convert.ImplicitReferenceConversion): Some code cleanup.
17190         (Convert.ImplicitReferenceConversionExists): Likewise.
17191
17192 2004-09-23  Marek Safar  <marek.safar@seznam.cz>
17193
17194         * class.cs (Operator.Define): Add error 448 and 559 report.
17195
17196 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17197
17198         * class.cs (MemberBase.IsTypePermitted): New protected
17199         method for checking error CS0610.
17200
17201 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17202
17203         * class.cs (TypeContainer.HasExplicitLayout): New property
17204         Returns whether container has StructLayout attribute set Explicit.
17205         (FieldMember): New abstract class for consts and fields.
17206         (FieldMember.ApplyAttributeBuilder): Add error 636 and 637 report.
17207         (Field): Reuse FieldMember.
17208
17209         * const.cs (Const): Reuse FieldMember.
17210
17211         * rootcontext.cs: EmitConstants call moved to class.
17212
17213 2004-09-22  Martin Baulig  <martin@ximian.com>
17214
17215         Thanks to Peter Sestoft for this bug report.
17216
17217         * expression.cs (Conditional): If both the `trueExpr' and the
17218         `falseExpr' is a NullLiteral, return a NullLiteral.
17219
17220 2004-09-22  Martin Baulig  <martin@ximian.com>
17221
17222         * statement.cs (Foreach.EmitCollectionForeach): If we're in an
17223         iterator, use `enumerator.EmitThis()' instead of `ec.EmitThis()'
17224         for the "get_Current" call.
17225
17226 2004-09-22  Martin Baulig  <martin@ximian.com>
17227
17228         Marek and me just fixed one of our oldest bugs: #28562 :-)
17229
17230         * ecore.cs (EnumConstant.GetValueAsEnumType): New public method.
17231
17232         * attribute.cs (Attribute.GetAttributeArgumentExpression): If
17233         we're an EnumConstant, just return that.
17234         (Attribute.Resolve): GetAttributeArgumentExpression() may give us
17235         an EnumConstant.  In this case, we need to use GetValueAsEnumType()
17236         to get the value which'll actually be written into the attribute.
17237         However, we have to use GetValue() to access the attribute's value
17238         in the compiler.        
17239
17240 2004-09-22  Marek Safar  <marek.safar@seznam.cz>
17241
17242         * constant.cs (Constant.IsNegative): New abstract property
17243         IsNegative.
17244
17245         * expression.cs (ArrayAccess.DoResolve): Add warning 251.
17246         (StackAlloc.DoResolve): Reused IsNegative.
17247
17248 2004-09-21  Martin Baulig  <martin@ximian.com>
17249
17250         * codegen.cs (VariableStorage): Don't store the ILGenerator here;
17251         if we're used in an iterator, we may be called from different
17252         methods.
17253
17254         * statement.cs (Foreach.EmitFinally): Only emit an `Endfinally' if
17255         we actually have an exception block.
17256
17257 2004-09-20  John Luke <jluke@cfl.rr.com>
17258
17259         * class.cs, cs-parser.jay: Improve the error report for 1520:
17260         report the actual line where the error happens, not where the
17261         class was declared.
17262
17263         * assign.cs, delegate.cs, ecore.cs, expression.cs, statement.cs:
17264         Pass location information that was available elsewhere.
17265
17266 2004-09-19  Sebastien Pouliot  <sebastien@ximian.com>
17267
17268         * codegen.cs: Fix bug #56621. It is now possible to use MCS on the MS
17269         runtime to delay sign assemblies.
17270
17271 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17272
17273         * cs-parser.jay: Do not report the stack trace, this is barely
17274         used nowadays.
17275
17276 2004-08-22  John Luke  <john.luke@gmail.com>
17277  
17278         * driver.cs : check that a resource id is not already used
17279         before adding it, report CS1508 if it is, bug #63637
17280
17281 2004-09-19  Miguel de Icaza  <miguel@ximian.com>
17282
17283         * ecore.cs: Removed dead code.
17284
17285 2004-09-18  Marek Safar  <marek.safar@seznam.cz>
17286
17287         * class.cs: Do not report warning CS0067 on the interfaces.
17288
17289 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17290
17291         * cs-parser.jay: Add error 504 report.
17292
17293 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17294
17295         * rootcontext.cs: WarningLevel is 4 by default now.
17296
17297         * statement.cs (Fixed.Resolve): Do not null
17298         VariableInfo.
17299
17300 2004-09-16  Marek Safar  <marek.safar@seznam.cz>
17301
17302         Fixed bug #55780
17303         * ecore.cs (PropertyExpr.FindAccessors): Do not perform
17304         deep search when property is not virtual.
17305         (PropertyExpr.ResolveAccessors): Make one call for both
17306         accessors.
17307
17308 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17309
17310         Fixed bug #65766
17311         * statement.cs: Error 152 report constains also location.
17312
17313 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17314
17315         Fixed bug #65766
17316         * const.cs: Explicitly set constant as static.
17317
17318 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17319
17320         Fixed bug #64226
17321         * cs-parser.jay: Add error 1017 report.
17322
17323 2004-09-15  Marek Safar  <marek.safar@seznam.cz>
17324
17325         Fixed bug #59980, #64224
17326         * expression.cs (Invocation.DoResolve): Fixed error CS0571 test.
17327
17328         * typemanager.cs (IsSpecialMethod): Simplified
17329
17330 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17331
17332         * decl.cs (MemberCore.Emit): Resuscitated VerifyObsoleteAttribute
17333         condition with better params.
17334
17335 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17336
17337         Fixed bug #65238
17338         * attribute.cs (Resolve): Property has to have both
17339         accessors.
17340
17341 2004-09-14  Martin Baulig  <martin@ximian.com>
17342
17343         * decl.cs (MemberCore.Emit): Always call VerifyObsoleteAttribute().
17344
17345 2004-09-14  Marek Safar  <marek.safar@seznam.cz>
17346
17347         Fixed bug #61902
17348         * codegen.cs (TestObsoleteMethodUsage): Trace when method is
17349         called and is obsolete then this member suppress message
17350         when call is inside next [Obsolete] method or type.
17351
17352         * expression.cs: Use TestObsoleteMethodUsage member.
17353
17354 2004-09-14  Martin Baulig  <martin@ximian.com>
17355
17356         * cs-parser.jay: Sync a bit with the GMCS version.
17357
17358 2004-09-14  Martin Baulig  <martin@ximian.com>
17359
17360         * cs-parser.jay (CSharpParser): Don't derive from GenericsParser.
17361         (CSharpParser.yacc_verbose_flag): New public field.
17362
17363         * genericparser.cs: Removed.
17364
17365 2004-09-14  Raja R Harinath  <rharinath@novell.com>
17366
17367         * cs-parser.jay (event_declaration): Re-enable cs0071 error.
17368
17369 2004-09-13  Marek Safar  <marek.safar@seznam.cz>
17370
17371         * class.cs (MethodCore.CheckBase): Fix bug #65757.
17372
17373 2004-09-10  Martin Baulig  <martin@ximian.com>
17374
17375         Backported my MemberName changes from GMCS into MCS.
17376
17377         - we are now using a special `MemberName' class instead of using
17378         strings; in GMCS, the `MemberName' also contains the type
17379         arguments.
17380
17381         - changed the grammar rules a bit:
17382           * the old `member_name' is now a `namespace_or_type_name':
17383             The rule is that we use `namespace_or_type_name' everywhere
17384             where we expect either a "member name" (GetEnumerator) or a
17385             "member name" with an explicit interface name
17386             (IEnumerable.GetEnumerator).
17387             In GMCS, the explicit interface name may include type arguments
17388             (IEnumerable<T>.GetEnumerator).
17389           * we use `member_name' instead of just `IDENTIFIER' for
17390             "member names":
17391             The rule is that we use `member_name' wherever a member may
17392             have type parameters in GMCS.       
17393
17394         * decl.cs (MemberName): New public class.
17395         (MemberCore.MemberName): New public readonly field.
17396         (MemberCore.ctor): Take a `MemberName' argument, not a string.
17397         (DeclSpace): Likewise.
17398
17399         * delegate.cs (Delegate.ctor): Take a MemberName, not a string.
17400         * enum.cs (Enum.ctor): Likewise.
17401
17402         * namespace.cs (AliasEntry.Alias): Changed type from Expression to
17403         MemberName.     
17404         (AliasEntry.ctor): Take a MemberName, not an Expression.
17405         (AliasEntry.UsingAlias): Likewise.
17406
17407         * class.cs (TypeContainer.ctor): Take a MemberName, not a string.
17408         (IMethodData.MemberName): Changed type from string to MemberName.
17409         (MemberBase.ExplicitInterfaceName): Likewise.
17410         (AbstractPropertyEventMethod.SetupName): Make this private.
17411         (AbstractPropertyEventMethod.ctor): Added `string prefix'
17412         argument; compute the member name here.
17413         (AbstractPropertyEventMethod.UpdateName): Recompute the name based
17414         on the `member.MemberName' and the `prefix'.
17415
17416         * cs-parser.jay (attribute_name): Use `namespace_or_type_name',
17417         not `type_name'.
17418         (struct_declaration): Use `member_name' instead of `IDENTIFIER';
17419         thus, we get a `MemberName' instead of a `string'.  These
17420         declarations may have type parameters in GMCS.
17421         (interface_method_declaration, delegate_declaration): Likewise.
17422         (class_declaration, interface_declaration): Likewise.
17423         (method_header): Use `namespace_or_type_name' instead of
17424         `member_name'.  We may be an explicit interface implementation.
17425         (property_declaration, event_declaration): Likewise.
17426         (member_name): This is now just an `IDENTIFIER', not a
17427         `namespace_or_type_name'.
17428         (type_name, interface_type): Removed.
17429         (namespace_or_type_name): Return a MemberName, not an Expression.
17430         (primary_expression): Use `member_name' instead of `IDENTIFIER';
17431         call GetTypeExpression() on the MemberName to get an expression.
17432         (IndexerDeclaration.interface_type): Changed type from string to
17433         MemberName.
17434         (MakeName): Operate on MemberName's instead of string's.
17435
17436 2004-09-13  Raja R Harinath  <rharinath@novell.com>
17437
17438         Fix bug #55770.
17439         * namespace.cs (AliasEntry.Resolve): Implement section 16.3.1.
17440         (NamespaceEntry.Lookup): Add new argument to flag if we want the
17441         lookup to avoid symbols introduced by 'using'.
17442         * rootcontext.cs (NamespaceLookup): Update.
17443
17444 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17445
17446         * class.cs (TypeContainer.DoDefineMembers): Do not call
17447         DefineDefaultConstructor for static classes.
17448
17449 2004-09-12  Marek Safar  <marek.safar@seznam.cz>
17450
17451         * attribute.cs (Attribute.Resolve): Add error 653 report.
17452
17453         * class.cs (Class.ApplyAttributeBuilder): Add error 641
17454         report.
17455         (Method.ApplyAttributeBuilder): Add error 685 report.
17456         (Operator.Define): Add error 564 report.
17457
17458         * cs-tokenizer.cs (handle_hex): Add error 1013 report.
17459
17460         * expression.cs (Invocation.DoResolve): Add error
17461         245 and 250 report.
17462
17463         * parameter.cs (Parameter.ApplyAttributeBuilder): Add
17464         error 674 report.
17465
17466 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17467
17468         * class.cs (ConstructorInitializer.Resolve):
17469         Wrong error number (515->516).
17470
17471 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17472
17473         * class.cs (Indexer.Define): Add error 631 report.
17474
17475 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17476
17477         * ecore.cs (Error_NegativeArrayIndex): Fix 248 error.
17478
17479 2004-09-11  Marek Safar  <marek.safar@seznam.cz>
17480
17481         * expression.cs (Probe.DoResolve): Add error CS0241 report.
17482
17483 2004-09-10  Marek Safar  <marek.safar@seznam.cz>
17484
17485         * cs-parser.jay: Added error CS0241 report.
17486
17487 2004-09-10  Raja R Harinath  <rharinath@novell.com>
17488
17489         * cs-parser.jay (fixed_statement): Introduce a scope for the
17490         declaration in the 'fixed' statement.
17491
17492 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17493
17494         * cs-parser.jay: Added CS0230 error report.
17495
17496 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17497
17498         * cs-parser.jay: Added errors CS0231 and CS0257 report.
17499
17500 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17501
17502         * expression.cs (Argument.Resolve): Added error CS0192 and
17503         CS0199 report.
17504
17505 2004-09-09  Marek Safar  <marek.safar@seznam.cz>
17506
17507         C# 2.0 #pragma warning feature
17508
17509         * cs-tokenizer.cs (PreProcessPragma): New method; 
17510         Handles #pragma directive.
17511
17512         * report.cs (WarningRegions): New class; Support
17513         class for #pragma warning directive. It tests whether
17514         warning is enabled for a given line.
17515
17516 2004-09-08  Miguel de Icaza  <miguel@ximian.com>
17517
17518         * const.cs: Add more descriptive error report, tahnks to
17519         Sebastien. 
17520
17521 2004-09-08  Marek Safar  <marek.safar@seznam.cz>
17522
17523         * ecore.cs (FieldExpr.DoResolveLValue): Fixed CS0198 report.
17524
17525 2004-09-07  Miguel de Icaza  <miguel@ximian.com>
17526
17527         * expression.cs: Apply patch from Ben: Remove dead code from
17528         ArrayCreation, and remove the TurnintoConstant call in const.cs,
17529         as that code just threw an exception anwyays.
17530
17531         * const.cs: Remove the call to the turnintoconstant, for details
17532         see bug: #63144
17533         
17534         * literal.cs: The type of the null-literal is the null type;  So
17535         we use a placeholder type (literal.cs:System.Null, defined here)
17536         for it.
17537
17538         * expression.cs (Conditional.DoResolve): Remove some old code that
17539         is no longer needed, conversions have been fixed.
17540
17541         (ArrayCreationExpression.DoResolve): Return false if we fail to
17542         resolve the inner expression.
17543
17544 2004-09-07  Raja R Harinath  <rharinath@novell.com>
17545
17546         Fix test-290.cs.
17547         * cs-parser.jay (delegate_declaration): Record a delegate
17548         declaration as a type declaration.
17549         Reported by Jo Vermeulen <jo@lumumba.luc.ac.be>.
17550
17551 2004-09-06  Miguel de Icaza  <miguel@ximian.com>
17552
17553         * parameter.cs: Do not crash if the type can not be resolved. 
17554
17555         * expression.cs: Report errors with unsafe pointers, fixes #64896
17556
17557 2004-09-06 Ben Maurer  <bmaurer@users.sourceforge.net>
17558
17559         * expression.cs: Pointer arith always needs to do a conv.i
17560         if the operand is a long. fix 65320
17561
17562 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17563
17564         Fixed cs0619-37.cs, cs0619-38.cs
17565
17566         * enum.cs (GetObsoleteAttribute): Removed.
17567
17568         * expression.cs (MemberAccess.DoResolve): Test for [Obsolete]
17569         on Enum member is double staged. The first is tested member
17570         and then enum.
17571
17572 2004-09-04  Marek Safar  <marek.safar@seznam.cz>
17573
17574         Fixed #56986, #63631, #65231
17575
17576         * class.cs: (TypeContainer.AddToMemberContainer): New method,
17577         adds member to name container.
17578         (TypeContainer.AddToTypeContainer): New method, adds type to
17579         name container.
17580         (AddConstant, AddEnum, AddClassOrStruct, AddDelegate, AddMethod,
17581         AddConstructor, AddInterface, AddField, AddProperty, AddEvent,
17582         AddOperator): Simplified by reusing AddToMemberContainer.
17583         (TypeContainer.UserDefinedStaticConstructor): Changed to property
17584         instead of field.
17585         (Method.CheckForDuplications): Fixed implementation to test all
17586         possibilities.
17587         (MemberBase): Detection whether member is explicit interface
17588         implementation is now in constructor.
17589         (MemberBase.UpdateMemberName): Handles IndexerName.
17590         (Accessor): Changed to keep also location information.
17591         (AbstractPropertyEventMethod): Is derived from MemberCore.
17592         (AbstractPropertyEventMethod.IsDummy): Says whether accessor
17593         will be emited or not.
17594         (PropertyBase.AreAccessorsDuplicateImplementation):
17595         Tests whether accessors are not in collision with some method.
17596         (Operator): Is derived from MethodCore to simplify common
17597         operations.
17598
17599         * decl.cs (Flags.TestMethodDuplication): Test for duplication
17600         must be performed.
17601         (DeclSpace.AddToContainer): Adds the member to defined_names
17602         table. It tests for duplications and enclosing name conflicts.
17603
17604         * enum.cs (EnumMember): Clean up to reuse the base structures
17605
17606 2004-09-03  Martin Baulig  <martin@ximian.com>
17607
17608         * class.cs (TypeContainer.DefineDefaultConstructor): Put this back
17609         into TypeContainer, to make partial classes work again.
17610
17611 2004-09-03  Martin Baulig  <martin@ximian.com>
17612
17613         * rootcontext.cs (RootContext.V2): Removed.
17614
17615 2004-03-23  Martin Baulig  <martin@ximian.com>
17616
17617         * expression.cs (Invocation.OverloadResolve): Added `bool
17618         may_fail' argument and use it instead of the Location.IsNull() hack.
17619
17620 2004-09-03  Martin Baulig  <martin@ximian.com>
17621
17622         Merged latest changes into gmcs.  Please keep this comment in
17623         here, it makes it easier for me to see what changed in MCS since
17624         the last time I merged.
17625
17626 2004-09-03  Raja R Harinath  <rharinath@novell.com>
17627
17628         Fix #61128.
17629         * expression.cs (BetterConversion): Don't allow either conversion 
17630         to be null.  Remove redundant implicit conversion test when 'q ==
17631         null' -- when this function is invoked, we already know that the
17632         implicit conversion exists.
17633         (BetterFunction): Assume that 'best' is non-null.  Remove
17634         redundant reimplementation of IsApplicable when 'best' is null.
17635         (IsParamsMethodApplicable, IsApplicable): Add new parameter for
17636         number of arguments.
17637         (IsAncestralType): Extract from OverloadResolve.
17638         (OverloadResolve): Make robust to the MethodGroupExpr being
17639         unsorted.  Implement all the logic of Section 14.5.5.1, and
17640         support overloading of methods from multiple applicable types.
17641         Clean up logic somewhat.  Don't pass null methods to BetterFunction.
17642
17643         * report.cs (SymbolRelatedToPreviousError): Cleanup output.
17644         (RealError, Warning): Append type of report to related symbol.
17645
17646 2004-09-03  Marek Safar  <marek.safar@seznam.cz>
17647
17648         * enum.cs: Fixed CLS-Compliance checks for enum members.
17649         Error tests cs3008-8.cs, cs3014-8.cs
17650
17651 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17652
17653         Fixed bug #62342, #63102
17654         * class.cs: ImplementIndexer uses member.IsExplicitImpl
17655         like ImplementMethod.
17656
17657 2004-09-02  Marek Safar  <marek.safar@seznam.cz>
17658
17659         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17660         Fixed bug #65170.
17661
17662 2004-09-02  Martin Baulig  <martin@ximian.com>
17663
17664         * statement.cs (Using.EmitLocalVariableDeclFinally): Use
17665         TypeManager.GetArgumentTypes() rather than calling GetParameters()
17666         on the MethodBase.
17667
17668 2004-09-01  Marek Safar  <marek.safar@seznam.cz>
17669
17670         C# 2.0 Static classes implemented
17671
17672         * class.cs (TypeContainer): instance_constructors,
17673         initialized_fields, initialized_static_fields,
17674         default_constructor, base_inteface_types are protected to be
17675         accessible from StaticClass.
17676         (TypeContainer.DefineDefaultConstructor): New virtual method
17677         for custom default constructor generating
17678         (StaticClass): New class to handle "Static classes" feature.
17679
17680         * cs-parser.jay: Handle static keyword on class like instance
17681         of StaticClass.
17682
17683         * driver.cs: Added "/langversion" command line switch with two
17684         options (iso-1, default).
17685
17686 2004-08-31  Marek Safar  <marek.safar@seznam.cz>
17687
17688         * ecore.cs (FieldExpr.Resolve): Fixed bug #64689.
17689
17690 2004-08-31  Miguel de Icaza  <miguel@ximian.com>
17691
17692         * delegate.cs: Style.
17693
17694 2004-08-31 Ben Maurer  <bmaurer@users.sourceforge.net>
17695
17696         * delegate.cs: Add seperate instance expr field for miguel.
17697
17698 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17699
17700         * PointerArithmetic (Resolve): make sure we are not doing
17701         pointer arith on void*. Also, make sure we are resolved
17702         by not setting eclass until resolve.
17703
17704         All callers: Make sure that PointerArithmetic gets resolved.
17705
17706 2004-08-29 Ben Maurer  <bmaurer@users.sourceforge.net>
17707
17708         * ArrayCreation (LookupType): If the type does not resolve 
17709         to an array, give an error.
17710
17711 2004-08-27  Marek Safar  <marek.safar@seznam.cz>
17712
17713         * statement.cs (Try.Resolve): Fixed bug #64222
17714
17715 2004-08-27  Martin Baulig  <martin@ximian.com>
17716
17717         * class.cs
17718         (TC.OperatorArrayList.OperatorEntry.CheckPairedOperators): Don't
17719         crash here.     
17720
17721 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17722
17723         * ecore.cs (Constantify): Get underlying type via
17724         System.Enum.GetUnderlyingType to avoid StackOverflow on the
17725         Windows in special cases.
17726
17727 2004-08-26  Marek Safar  <marek.safar@seznam.cz>
17728
17729         * typemanager.cs (GetAddMethod): Used GetAddMethod (true)
17730         for obtaining also private methods.
17731         (GetRemoveMethod): Used GetRemoveMethod (true)
17732         for obtaining also private methods.
17733
17734 2004-08-24  Martin Baulig  <martin@ximian.com>
17735
17736         * class.cs (Method.Define): Set MethodAttributes.SpecialName and
17737         MethodAttributes.HideBySig for operators.
17738
17739 2004-08-23  Martin Baulig  <martin@ximian.com>
17740
17741         Back to the old error reporting system :-)
17742
17743         * report.cs (Message): Removed.
17744         (Report.MessageData, ErrorData, WarningData): Removed.
17745         (Report.Error, Warning): Back to the old system.
17746
17747 2004-08-23  Martin Baulig  <martin@ximian.com>
17748
17749         * decl.cs (IMemberContainer.Parent): Renamed to ParentContainer.
17750
17751         * class.cs (TypeContainer.ParentContainer): New public virtual
17752         method; replaces the explicit interface implementation.
17753         (ClassPart.ParentContainer): Override.
17754
17755 2004-08-23  Martin Baulig  <martin@ximian.com>
17756
17757         * statement.cs (Switch): Added support for constant switches; see
17758         #59428 or test-285.cs.
17759
17760 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17761
17762         Fixed bug #62740.
17763         * statement.cs (GetEnumeratorFilter): Removed useless
17764         logic because C# specs is strict. GetEnumerator must be
17765         public.
17766
17767 2004-08-22  Martin Baulig  <martin@ximian.com>
17768
17769         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
17770         a switch and may break, reset the barrier.  Fixes #59867.
17771
17772 2004-08-22  Marek Safar  <marek.safar@seznam.cz>
17773
17774         CLS-Compliance speed up (~5% for corlib)
17775
17776         * attribute.cs (AttributeTester.VerifyTopLevelNameClsCompliance):
17777         New method. Tests container for CLS-Compliant names
17778
17779         * class.cs (TypeContainer.VerifyClsName): New method.
17780         Checks whether container name is CLS Compliant.
17781         (Constructor): Implements IMethodData.
17782
17783         * decl.cs (MemberCache.GetPublicMembers ): New method. Builds
17784         low-case table for CLS Compliance test.
17785         (MemberCache.VerifyClsParameterConflict): New method.
17786         Checks method parameters for CS3006 error.
17787
17788         * enum.cs (EnumMember): Is derived from MemberCore.
17789         (Enum.VerifyClsName): Optimized for better performance.
17790
17791 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17792
17793         * report.cs: Renamed Error_T to Error and changed all
17794         references.
17795
17796 2004-08-06  Marek Safar  <marek.safar@seznam.cz>
17797
17798         * class.cs (TypeContainer.IndexerArrayList): New inner class
17799         container for indexers.
17800         (TypeContainer.DefaultIndexerName): New constant for default
17801         indexer name. Replaced all "Item" with this constant.
17802         (TypeContainer.DefineIndexers): Moved to IndexerArrayList class.
17803
17804         * typemanager.cs (TypeManager.default_member_ctor): Cache here
17805         DefaultMemberAttribute constructor.
17806
17807 2004-08-05  Martin Baulig  <martin@ximian.com>
17808
17809         * flowanalysis.cs (FlowBranching.UsageVector.MergeJumpOrigins):
17810         Fix bug #59429.
17811
17812 2004-08-05  Marek Safar  <marek.safar@seznam.cz>
17813
17814         * mcs.exe.sources: $(EXTRA_SOURCES) are now here to avoid
17815         multi platforms problem.
17816
17817         * compiler.csproj: Included shared files.
17818
17819 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17820
17821         Fix bug 60333, 55971 in the more general way
17822         * attribute.cs (Attribute.GetAttributeArgumentExpression):
17823         Added arg_type argument for constant conversion.
17824         (Attribute.Resolve): Reuse GetAttributeArgumentExpression.
17825
17826 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17827
17828         Fix bug #59760
17829         * class.cs (TypeContainer ): New inner classes MethodArrayList, 
17830         OperatorArrayList, MethodCoreArrayList for typecontainer
17831         containers. Changed class member types to these new types.
17832         (MethodArrayList.DefineMembers): Added test for CS0659.
17833
17834 2004-08-04  Miguel de Icaza  <miguel@ximian.com>
17835
17836         * cfold.cs: Synchronize the folding with the code in expression.cs
17837         Binary.DoNumericPromotions for uint operands.
17838
17839         * attribute.cs: Revert patch from Raja, it introduced a regression
17840         while building Blam-1.2.1 (hard to isolate a test case).
17841
17842 2004-08-04  Marek Safar  <marek.safar@seznam.cz>
17843
17844         Fix for #55382
17845         * class.cs:
17846         (TypeContainer.Define): Renamed to DefineContainerMembers because of
17847         name collision.
17848         (MethodCore.parent_method): New member. The method we're overriding
17849         if this is an override method.
17850         (MethodCore.CheckBase): Moved from Method class and made common.
17851         (MethodCore.CheckMethodAgainstBase): Moved from MemberBase and made
17852         private.
17853         (MethodCore.CheckForDuplications): New abstract method. For custom
17854         member duplication search in a container
17855         (MethodCore.FindOutParentMethod): New abstract method. Gets parent
17856         method and its return type.
17857         (Event.conflict_symbol): New member. Symbol with same name in the
17858         parent class.
17859
17860         * decl.cs:
17861         (MemberCache.FindMemberWithSameName): New method. The method
17862         is looking for conflict with inherited symbols.
17863
17864 2004-08-04  Martin Baulig  <martin@ximian.com>
17865
17866         * codegen.cs (VariableStorage.EmitLoadAddress): New public method.
17867
17868         * statement.cs (Foreach.EmitFinally): Make this work for valuetypes.
17869
17870 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17871
17872         * report.cs (Message): New enum for better error, warning reference in
17873         the code.
17874         (MessageData): New inner abstract class. It generally handles printing of
17875         error and warning messages.
17876         Removed unused Error, Warning, Message methods.
17877
17878 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17879
17880         Fix for cs0592-8.cs test
17881         * attribute.cs
17882         (Attributable.ValidAttributeTargets): Made public.
17883         (Attribute.ExplicitTarget): New member for explicit target value.
17884         (Attribute.CheckTargets): Now we translate explicit attribute
17885         target to Target here.
17886
17887 2004-08-03  Ben Maurer  <bmaurer@ximian.com>
17888
17889         * ecore.cs (MethodGroupExpr): new IsBase property.
17890
17891         * expression.cs (BaseAccess): Set IsBase on MethodGroupExpr.
17892
17893         * delegate.cs (DelegateCreation): store a MethodGroupExpr
17894         rather than an instance expr.
17895
17896         (DelegateCreation.Emit): Use the method group rather than
17897         the instance expression. Also, if you have base.Foo as the
17898         method for a delegate, make sure to emit ldftn, not ldftnvirt.
17899
17900         (ResolveMethodGroupExpr): Use the MethodGroupExpr. 
17901
17902         (NewDelegate.DoResolve): Only check for the existance of Invoke
17903         if the method is going to be needed. Use MethodGroupExpr.
17904
17905         (NewDelegate.Emit): Remove, DelegateCreation implements this.   
17906
17907         * expression.cs: For pointer arith., make sure to use
17908         the size of the type, not the size of the pointer to
17909         the type.
17910
17911 2004-08-03  Marek Safar  <marek.safar@seznam.cz>
17912
17913         Fix for #60722
17914         * class.cs (Class): Added error CS0502 test.
17915
17916 2004-08-03  John Luke  <jluke@cfl.rr.com>
17917             Raja R Harinath  <rharinath@novell.com>
17918
17919         Fix for #60997.
17920         * attribute.cs (Attribute.complained_before): New flag.
17921         (Attribute.ResolveType, Attribute.Resolve),
17922         (Attribute.DefinePInvokeMethod): Set it.
17923         (Attributes.Search): Pass 'complain' to Attribute.ResolveType.
17924         
17925 2004-08-03  Martin Baulig  <martin@ximian.com>
17926
17927         * expression.cs (Binary.ResolveOperator): Don't abort if we can't
17928         use a user-defined operator; we still need to do numeric
17929         promotions in case one argument is a builtin type and the other
17930         one has an implicit conversion to that type.  Fixes #62322.
17931
17932 2004-08-02  Martin Baulig  <martin@ximian.com>
17933
17934         * statement.cs (LocalInfo.Flags): Added `IsThis'.
17935         (LocalInfo.IsThis): New public property.
17936         (Block.EmitMeta): Don't create a LocalBuilder for `this'.
17937
17938 2004-08-01  Martin Baulig  <martin@ximian.com>
17939
17940         * class.cs (TypeContainer.GetClassBases): Don't set the default
17941         here since we may get called from GetPartialBases().
17942         (TypeContainer.DefineType): If GetClassBases() didn't return a
17943         parent, use the default one.
17944
17945 2004-07-30  Duncan Mak  <duncan@ximian.com>
17946
17947         * Makefile (mcs2.exe, mcs3.exe): add $(EXTRA_SOURCES).
17948
17949 2004-07-30  Martin Baulig  <martin@ximian.com>
17950
17951         * Makefile (EXTRA_SOURCES): List the symbol writer's sources here.
17952
17953         * class.cs (SourceMethod): New public class, derive from the
17954         symbol writer's ISourceMethod.
17955         (Method): Use the new symbol writer API.
17956
17957         * codegen.cs (CodeGen.InitializeSymbolWriter): Take the filename
17958         as argument and use the new symbol writer.
17959
17960         * location.cs
17961         (SourceFile): Implement the symbol writer's ISourceFile.
17962         (Location.SymbolDocument): Removed.
17963         (Location.SourceFile): New public property.
17964
17965         * symbolwriter.cs: Use the new symbol writer API.
17966
17967 2004-07-30  Raja R Harinath  <rharinath@novell.com>
17968
17969         * Makefile (install-local): Remove.  Functionality moved to
17970         executable.make.
17971
17972 2004-07-28  Lluis Sanchez Gual  <lluis@novell.com>
17973
17974         * Makefile: Install mcs.exe.config file together with mcs.exe.
17975         * mcs.exe.config: Added supportedRuntime entry to make sure it runs in the
17976         correct runtime version.
17977         
17978 2004-07-25  Martin Baulig  <martin@ximian.com>
17979
17980         * class.cs
17981         (TypeContainer.RegisterOrder): Removed, this was unused.
17982         (TypeContainer, interface_order): Removed.
17983         (TypeContainer.AddClass, AddStruct, AddInterface): Take a
17984         TypeContainer as argument since we can also be called with a
17985         `PartialContainer' for a partial class/struct/interface.
17986         (TypeContainer.IsInterface): Use `Kind == Kind.Interface' instead
17987         of checking whether we're an `Interface' - we could be a
17988         `PartialContainer'.
17989         (PartialContainer.Register): Override; call
17990         AddClass()/AddStruct()/AddInterface() on our parent.
17991
17992         * cs-parser.jay (interface_member_declaration): Add things to the
17993         `current_container', not the `current_class'.
17994
17995         * rootcontext.cs (RegisterOrder): The overloaded version which
17996         takes an `Interface' was unused, removed.
17997
17998         * typemanager.cs (TypeManager.LookupInterface): Return a
17999         `TypeContainer', not an `Interface'.
18000         (TypeManager.IsInterfaceType): The `builder_to_declspace' may
18001         contain a `PartialContainer' for an interface, so check it's
18002         `Kind' to figure out what it is.
18003
18004 2004-07-25  Martin Baulig  <martin@ximian.com>
18005
18006         * class.cs (Class.DefaultTypeAttributes): New public constant.
18007         (Struct.DefaultTypeAttributes): Likewise.
18008         (Interface.DefaultTypeAttributes): Likewise.
18009         (PartialContainer.TypeAttr): Override this and add the
18010         DefaultTypeAttributes.
18011
18012 2004-07-25  Martin Baulig  <martin@ximian.com>
18013
18014         * decl.cs (DeclSpace.Emit): Removed the `TypeContainer' argument,
18015         we can just use the `Parent' field instead.
18016
18017 2004-07-25  Martin Baulig  <martin@ximian.com>
18018
18019         * class.cs (TypeContainer.Emit): Renamed to EmitType().
18020
18021 2004-07-25  Martin Baulig  <martin@ximian.com>
18022
18023         * class.cs (TypeContainer.DefineMembers): Call DefineMembers() on
18024         our parts before defining any methods.
18025         (TypeContainer.VerifyImplements): Make this virtual.
18026         (ClassPart.VerifyImplements): Override and call VerifyImplements()
18027         on our PartialContainer.
18028
18029 2004-07-25  Martin Baulig  <martin@ximian.com>
18030
18031         * iterators.cs (Iterator.Define): Renamed to DefineIterator().
18032
18033         * decl.cs (DeclSpace.Define): Removed the `TypeContainer'
18034         argument, we can just use the `Parent' field instead.
18035
18036         * class.cs
18037         (MemberBase.CheckBase): Removed the `TypeContainer' argument.   
18038         (MemberBase.DoDefine): Likewise.
18039
18040 2004-07-24  Martin Baulig  <martin@ximian.com>
18041
18042         * decl.cs (MemberCore.Parent): New public field.
18043         (DeclSpace.Parent): Moved to MemberCore.
18044
18045         * class.cs (MethodCore.ds): Removed; use `Parent' instead.
18046         (MemberBase.ctor): Added TypeContainer argument, pass it to our
18047         parent's .ctor.
18048         (FieldBase, Field, Operator): Likewise.
18049         (EventProperty.ctor): Take a TypeContainer instead of a DeclSpace.
18050         (EventField, Event): Likewise.
18051
18052 2004-07-23  Martin Baulig  <martin@ximian.com>
18053
18054         * class.cs (PartialContainer): New public class.
18055         (ClassPart): New public class.
18056         (TypeContainer): Added support for partial classes.
18057         (TypeContainer.GetClassBases): Splitted some of the functionality
18058         out into GetNormalBases() and GetPartialBases().
18059
18060         * cs-tokenizer.cs (Token.PARTIAL): New token.
18061         (Tokenizer.consume_identifier): Added some hacks to recognize
18062         `partial', but only if it's immediately followed by `class',
18063         `struct' or `interface'.
18064
18065         * cs-parser.jay: Added support for partial clases.
18066
18067 2004-07-23  Martin Baulig  <martin@ximian.com>
18068
18069         * class.cs (MethodCore.ds): Made this a `TypeContainer' instead of
18070         a `DeclSpace' and also made it readonly.
18071         (MethodCore.ctor): Take a TypeContainer instead of a DeclSpace.
18072         (Method.ctor, Constructor.ctor, Destruktor.ctor): Likewise.
18073         (PropertyBase.ctor, Property.ctor, Indexer.ctor): Likewise.
18074
18075         * cs-parser.jay: Pass the `current_class', not the
18076         `current_container' (at the moment, this is still the same thing)
18077         to a new Method, Property, Event, Indexer or Constructor.
18078
18079 2004-07-23  Martin Baulig  <martin@ximian.com>
18080
18081         * cs-parser.jay (CSharpParser): Added a new `current_class' field
18082         and removed the `current_interface' one.
18083         (struct_declaration, class_declaration, interface_declaration):
18084         Set `current_class' to the newly created class/struct/interface;
18085         set their `Bases' and call Register() before parsing their body.
18086
18087 2004-07-23  Martin Baulig  <martin@ximian.com>
18088
18089         * class.cs (Kind): New public enum.
18090         (TypeContainer): Made this class abstract.
18091         (TypeContainer.Kind): New public readonly field.
18092         (TypeContainer.CheckDef): New public method; moved here from
18093         cs-parser.jay.
18094         (TypeContainer.Register): New public abstract method.
18095         (TypeContainer.GetPendingImplementations): New public abstract
18096         method.
18097         (TypeContainer.GetClassBases): Removed the `is_class' and
18098         `is_iface' parameters.
18099         (TypeContainer.DefineNestedTypes): Formerly known as
18100         DoDefineType().
18101         (ClassOrStruct): Made this class abstract.
18102
18103         * tree.cs (RootTypes): New public type. 
18104
18105 2004-07-20  Martin Baulig  <martin@ximian.com>
18106
18107         * tree.cs (Tree.RecordNamespace): Removed.
18108         (Tree.Namespaces): Removed.
18109
18110         * rootcontext.cs (RootContext.IsNamespace): Removed.
18111
18112         * cs-parser.jay (namespace_declaration): Just create a new
18113         NamespaceEntry here.
18114
18115 2004-07-20  Martin Baulig  <martin@ximian.com>
18116
18117         * statement.cs (ExceptionStatement): New abstract class.  This is
18118         now used as a base class for everyone who's using `finally'.
18119         (Using.ResolveLocalVariableDecls): Actually ResolveLValue() all
18120         our local variables before using them.
18121
18122         * flowanalysis.cs (FlowBranching.StealFinallyClauses): New public
18123         virtual method.  This is used by Yield.Resolve() to "steal" an
18124         outer block's `finally' clauses.
18125         (FlowBranchingException): The .ctor now takes an ExceptionStatement
18126         argument.
18127
18128         * codegen.cs (EmitContext.StartFlowBranching): Added overloaded
18129         version which takes an ExceptionStatement.  This version must be
18130         used to create exception branchings.
18131
18132         * iterator.cs
18133         (Yield.Resolve): "Steal" all `finally' clauses from containing blocks.
18134         (Iterator.EmitMoveNext): Added exception support; protect the
18135         block with a `fault' clause, properly handle 'finally' clauses.
18136         (Iterator.EmitDispose): Run all the `finally' clauses here.
18137
18138 2004-07-20  Martin Baulig  <martin@ximian.com>
18139
18140         * iterator.cs: This is the first of a set of changes in the
18141         iterator code.  Match the spec more closely: if we're an
18142         IEnumerable, then GetEnumerator() must be called.  The first time
18143         GetEnumerator() is called, it returns the current instance; all
18144         subsequent invocations (if any) must create a copy.
18145
18146 2004-07-19  Miguel de Icaza  <miguel@ximian.com>
18147
18148         * expression.cs: Resolve the constant expression before returning
18149         it. 
18150
18151 2004-07-19  Martin Baulig  <martin@ximian.com>
18152
18153         * iterators.cs (Iterator.MapVariable): Don't define fields twice.
18154         (Iterator.MoveNextMethod.DoEmit): Use `TypeManager.int32_type' as
18155         the return type of the new EmitContext.
18156
18157 2004-07-18  Martin Baulig  <martin@ximian.com>
18158
18159         * class.cs (Property.Define): Fix iterators.
18160
18161         * iterators.cs (Iterator.Define): Moved the
18162         `container.AddInterator (this)' call here from the .ctor; only do
18163         it if we resolved successfully.
18164
18165 2004-07-17  Miguel de Icaza  <miguel@ximian.com>
18166
18167         * cs-tokenizer.cs (handle_preprocessing_directive): Do not return
18168         `true' for preprocessing directives that we parse.  The return
18169         value indicates whether we should return to regular tokenizing or
18170         not, not whether it was parsed successfully.
18171
18172         In the past if we were in: #if false ... #line #endif, we would
18173         resume parsing after `#line'.  See bug 61604.
18174
18175         * typemanager.cs: Removed an old hack from Gonzalo to get corlib
18176         building: IsEnumType should return true only for enums, not for
18177         enums or System.Enum itself.  This fixes #61593.
18178
18179         Likely what happened is that corlib was wrong: mcs depended on
18180         this bug in some places.  The bug got fixed, we had to add the
18181         hack, which caused bug 61593.
18182
18183         * expression.cs (ArrayAccess.GetStoreOpCode): Remove an old hack
18184         that was a workaround for the older conditions.
18185
18186 2004-07-16  Ben Maurer  <bmaurer@ximian.com>
18187
18188         * assign.cs: IAssignMethod has a new interface, as documented
18189         inline. All assignment code now uses this new api.
18190
18191         * ecore.cs, expression.cs: All classes which implement
18192         IAssignMethod now use the new interface.
18193
18194         * expression.cs (Invocation): add a hack to EmitCall so that
18195         IndexerAccess can be the target of a compound assignment without
18196         evaluating its arguments twice.
18197
18198         * statement.cs: Handle changes in Invocation api.
18199
18200 2004-07-16  Martin Baulig  <martin@ximian.com>
18201
18202         * iterators.cs: Rewrote this.  We're now using one single Proxy
18203         class for both the IEnumerable and the IEnumerator interface and
18204         `Iterator' derives from Class so we can use the high-level API.
18205
18206         * class.cs (TypeContainer.AddIterator): New method.
18207         (TypeContainer.DoDefineType): New protected virtual method, which
18208         is called from DefineType().
18209         (TypeContainer.DoDefineMembers): Call DefineType() and
18210         DefineMembers() on all our iterators.
18211         (TypeContainer.Emit): Call Emit() on all our iterators.
18212         (TypeContainer.CloseType): Call CloseType() on all our iterators.
18213
18214         * codegen.cs (EmitContext.CurrentIterator): New public field.
18215
18216 2004-07-15  Martin Baulig  <martin@ximian.com>
18217
18218         * typemanager.cs
18219         (TypeManager.not_supported_exception_type): New type.   
18220
18221 2004-07-14  Martin Baulig  <martin@ximian.com>
18222
18223         * iterators.cs: Use real error numbers.
18224
18225 2004-07-14  Martin Baulig  <martin@ximian.com>
18226
18227         * iterator.cs (IteratorHandle.IsIEnumerable): The spec explicitly
18228         requires this to be a System.Collection.IEnumerable and not a
18229         class implementing that interface.
18230         (IteratorHandle.IsIEnumerator): Likewise, for IEnumerator.      
18231
18232 2004-07-13  Marek Safar  <marek.safar@seznam.cz>
18233
18234         * class.cs: Fixed previous fix, it broke some error tests.
18235
18236 2004-07-12  Martin Baulig  <martin@ximian.com>
18237
18238         * enum.cs (Enum.Define): Call Emit() to emit the attributes.
18239         Fixes #61293.
18240
18241 2004-07-09  Miguel de Icaza  <miguel@ximian.com>
18242
18243         * assign.cs (LocalTemporary): Add new argument: is_address,If
18244         `is_address' is true, then the value that we store is the address
18245         to the real value, and not the value itself.
18246         
18247         * ecore.cs (PropertyExpr): use the new local temporary
18248         stuff to allow us to handle X.Y += z (where X is a struct)
18249
18250 2004-07-08  Martin Baulig  <martin@ximian.com>
18251
18252         * statement.cs (Lock.Resolve): Set ec.NeedReturnLabel() if we do
18253         not always return, just like we're doing in Using.Resolve().
18254
18255 2004-07-07  Miguel de Icaza  <miguel@ximian.com>
18256
18257         * cs-parser.jay (fixed_statement): flag this as Pinned.
18258
18259 2004-07-06  Miguel de Icaza  <miguel@ximian.com>
18260
18261         * typemanager.cs (TypeManager): Removed MakePinned method, this
18262         mechanism is replaced with the .NET 2.x compatible mechanism of
18263         calling `ILGenerator.DeclareLocal (Type t, bool pinned)'.
18264
18265         * statement.cs (LocalInfo): Remove MakePinned, add Pinned property 
18266         Rename `Fixed' to `Pinned' as a flag, to distinguish from the
18267         `IsFixed' property which has a different meaning.
18268
18269 2004-07-02  Raja R Harinath  <rharinath@novell.com>
18270
18271         * ecore.cs (DoSimpleNameResolve): Expand CS0038 check to all names
18272         visible from inside a nested class, not just the names of the
18273         immediately enclosing class.
18274         Fix for bug #60730.
18275
18276 2004-06-24  Raja R Harinath  <rharinath@novell.com>
18277
18278         * expression.cs (BetterConversion): Remove buggy special-case
18279         handling of "implicit constant expression conversions".  At this
18280         point, we already know that the conversion is possible -- we're
18281         only checking to see which is better.
18282
18283 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18284
18285         * cs-parser.jay: Added error CS0210 test.
18286
18287 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18288
18289         * cs-parser.jay: Added error CS0134 test.
18290
18291 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18292
18293         Fix bug #52507
18294         * cs-parser.jay: Added error CS0145 test.
18295
18296 2004-06-24  Marek Safar  <marek.safar@seznam.cz>
18297
18298         * class.cs (Operator.Define): Added test for errors CS0553, CS0554.
18299
18300 2004-06-23  Ben Maurer  <bmaurer@ximian.com>
18301         
18302         * expression.cs (StackAlloc.Resolve): The argument may not
18303         be a constant; deal with this case.
18304         
18305 2004-06-23  Marek Safar  <marek.safar@seznam.cz>
18306
18307         * attribute.cs (IndexerName_GetIndexerName): Renamed to
18308         GetIndexerAttributeValue.
18309         (ScanForIndexerName): Renamed to GetIndexerNameAttribute.
18310
18311         * class.cs (Indexer.Define): Added error tests for CS0415,
18312         CS0609.
18313
18314 2004-06-23  Miguel de Icaza  <miguel@ximian.com>
18315
18316         * attribute.cs (Attribute.Resolve): Keep field code in sync with
18317         property code.
18318
18319 2004-06-23  Martin Baulig  <martin@ximian.com>
18320
18321         * flowanalysis.cs (UsageVector.MergeChild): If we're a loop and we
18322         neither return nor throw, reset the barrier as well.  Fixes #60457.
18323
18324 2004-06-22  Atsushi Enomoto  <atsushi@ximian.com>
18325
18326         * class.cs : EventAttributes is now set to None by default.
18327           This fixes bug #60459.
18328
18329 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18330
18331         Fix bug #60219
18332         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18333         Don't throw exception but return null (it's sufficient now).
18334
18335 2004-06-18  Marek Safar  <marek.safar@seznam.cz>
18336
18337         * typemanager.cs (GetArgumentTypes): Faster implementation.
18338
18339 2004-06-18  Martin Baulig  <martin@ximian.com>
18340
18341         * attribute.cs (Attribute.Resolve): Check whether we're an
18342         EmptyCast which a Constant child.  Fixes #60333.
18343
18344 2004-06-17  Ben Maurer  <bmaurer@ximian.com>
18345
18346         * statement.cs (EmitCollectionForeach): Account for the fact that
18347         not all valuetypes are in areas which we can take the address of.
18348         For these variables, we store to a temporary variable. Also, make
18349         sure that we dont emit a `callvirt' on a valuetype method.
18350
18351 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18352
18353         * expression.cs (StackAlloc.DoReSolve): Added test for
18354         negative parameter (CS0247).
18355
18356 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18357
18358         Fix bug #59792
18359         * class.cs: (Event.DelegateMethod.Emit): Added synchronization flag.
18360
18361 2004-06-15  Marek Safar  <marek.safar@seznam.cz>
18362
18363         Fix bug #59781
18364         * expression.cs: (Binary.DoNumericPromotions): Added conversion for
18365         ulong.
18366
18367 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18368
18369         Fix bug #58254 & cs1555.cs, cs1556.cs
18370         * driver.cs (MainDriver): Added tests for errors CS1555, CS1556.
18371
18372 2004-06-14  Marek Safar  <marek.safar@seznam.cz>
18373
18374         * cs-parser.jay: Added error CS1669 test for indexers.
18375
18376 2004-06-11  Martin Baulig  <martin@ximian.com>
18377
18378         * expression.cs (Invocation.IsParamsMethodApplicable): We need to
18379         call this twice: for params and varargs methods.
18380
18381 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18382
18383         * class.cs:
18384         (FieldBase.DoDefine, PropertyBase.DoDefine): Added error test CS0610.
18385
18386 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18387
18388         * attribute.cs (Attribute.GetValidTargets): Made public.
18389
18390         * class.cs: 
18391         (AbstractPropertyEventMethod): New class for better code sharing.
18392         (AbstractPropertyEventMethod.ApplyAttributeBuilder): Add error
18393         CS1667 report.
18394         (PropertyMethod, DelegateMethod): Derived from AbstractPropertyEventMethod
18395
18396 2004-06-11  Raja R Harinath  <rharinath@novell.com>
18397
18398         Fix bug #59477.
18399         * ecore.cs (ResolveFlags): Add new 'Intermediate' flag to tell
18400         that the call to Resolve is part of a MemberAccess.
18401         (Expression.Resolve): Use it for SimpleName resolution.
18402         (SimpleName.SimpleNameResolve, SimpleName.DoResolveAllowStatic):
18403         Add 'intermediate' boolean argument.
18404         (SimpleName.DoSimpleNameResolve): Likewise.  Use it to disable an
18405         error message when the SimpleName can be resolved ambiguously
18406         between an expression and a type.
18407         * expression.cs (MemberAccess.IdenticalNameAndTypeName): Make
18408         public.
18409         (MemberAccess.Resolve): Pass 'Intermediate' flag to the Resolve()
18410         call on the left-side.
18411
18412 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18413
18414         * class.cs:
18415         (MethodCore.VerifyClsCompliance): Added test for error CS3000.
18416
18417 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18418
18419         * attribute.cs (Attribute.Emit): Fixed error CS0579 reporting.
18420
18421 2004-06-11  Martin Baulig  <martin@ximian.com>
18422
18423         * expression.cs (Invocation.EmitCall): Use OpCodes.Callvirt for
18424         varargs methods if applicable.
18425
18426 2004-06-11  Martin Baulig  <martin@ximian.com>
18427
18428         * expression.cs (Invocation.EmitCall): Don't use
18429         `method.CallingConvention == CallingConventions.VarArgs' since the
18430         method could also have `CallingConventions.HasThis'.
18431
18432 2004-06-11  Marek Safar  <marek.safar@seznam.cz>
18433
18434         * class.cs (Event.GetSignatureForError): Implemented.
18435         Fixed crash in error test cs3010.cs
18436
18437 2004-06-10  Miguel de Icaza  <miguel@ximian.com>
18438
18439         * cs-tokenizer.cs: Change the way we track __arglist to be
18440         consistent with the other keywords.
18441
18442 2004-06-09  Miguel de Icaza  <miguel@ximian.com>
18443
18444         * codegen.cs: FAQ avoider: turn 1577 into a warning for now until
18445         tomorrow.
18446
18447 2004-06-09  Sebastien Pouliot  <sebastien@ximian.com>
18448
18449         * codegen.cs: Check that all referenced assemblies have a strongname
18450         before strongnaming the compiled assembly. If not report error CS1577.
18451         Fix bug #56563. Patch by Jackson Harper.
18452         * typemanager.cs: Added a method to return all referenced assemblies.
18453         Fix bug #56563. Patch by Jackson Harper.
18454
18455 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18456
18457         * class.cs:
18458         (Method.ApplyAttributeBuilder): Moved and added conditional
18459         attribute error tests (CS0577, CS0578, CS0243, CS0582, CS0629).
18460
18461         * delegate.cs:
18462         (DelegateCreation.ResolveMethodGroupExpr): Added error CS1618 test.
18463
18464 2004-06-08  Marek Safar  <marek.safar@seznam.cz>
18465
18466         Fixed #59640
18467         * class.cs: (EventField.attribute_targets): Changed default target.
18468
18469 2004-06-08  Martin Baulig  <martin@ximian.com>
18470
18471         * expression.cs (Invocation.EmitCall): Enable varargs methods.
18472
18473 2004-06-08  Martin Baulig  <martin@ximian.com>
18474
18475         * rootcontext.cs (ResolveCore): Added "System.RuntimeArgumentHandle".
18476
18477 2004-06-07  Martin Baulig  <martin@ximian.com>
18478
18479         Added support for varargs methods.
18480
18481         * cs-tokenizer.cs (Token.ARGLIST): New token for the `__arglist'
18482         keyword.
18483
18484         * cs-parser.jay: Added support for `__arglist'.
18485
18486         * decl.cs (MemberCache.AddMethods): Don't ignore varargs methods.
18487
18488         * expression.cs (Argument.AType): Added `ArgList'.
18489         (Invocation): Added support for varargs methods.
18490         (ArglistAccess): New public class.
18491         (Arglist): New public class.
18492
18493         * parameter.cs (Parameter.Modifier): Added `ARGLIST'.
18494
18495         * statement.cs (Block.Flags): Added `HasVarargs'.  We set this on
18496         a method's top-level block if the method has varargs.
18497
18498         * support.cs (ReflectionParameters, InternalParameters): Added
18499         support for varargs methods.    
18500
18501 2004-06-07  Miguel de Icaza  <miguel@ximian.com>
18502
18503         * class.cs: Provide location in indexer error report.
18504
18505         * driver.cs: Use standard names.
18506
18507         * namespace.cs: Catch the use of using after a namespace has been
18508         declared also on using aliases.
18509
18510 2004-06-03  Raja R Harinath  <rharinath@novell.com>
18511
18512         Bug #50820.
18513         * typemanager.cs (closure_private_ok, closure_invocation_type)
18514         (closure_qualifier_type, closure_invocation_assembly)
18515         (FilterWithClosure): Move to ...
18516         (Closure): New internal nested class.
18517         (Closure.CheckValidFamilyAccess): Split out from Closure.Filter.
18518         (MemberLookup, RealMemberLookup): Add new almost_match parameter.
18519         * ecore.cs (almostMatchedMembers): New variable to help report CS1540.
18520         (MemberLookup, MemberLookupFailed): Use it.
18521         * expression.cs (New.DoResolve): Treat the lookup for the
18522         constructor as being qualified by the 'new'ed type.
18523         (Indexers.GetIndexersForTypeOrInterface): Update.
18524
18525 2004-06-03  Marek Safar  <marek.safar@seznam.cz>
18526
18527         * attribute.cs
18528         (GetConditionalAttributeValue): New method. Returns
18529         condition of ConditionalAttribute.
18530         (SearchMulti): New method.  Returns all attributes of type 't'.
18531         Use it when attribute is AllowMultiple = true.
18532         (IsConditionalMethodExcluded): New method.
18533
18534         * class.cs
18535         (Method.IsExcluded): Implemented. Returns true if method has conditional
18536         attribute and the conditions is not defined (method is excluded).
18537         (IMethodData): Extended interface for ConditionalAttribute support.
18538         (PropertyMethod.IsExcluded): Implemented.
18539
18540         * decl.cs
18541         (MemberCore.Flags): Excluded_Undetected, Excluded new caching flags.
18542
18543         * expression.cs
18544         (Invocation.IsMethodExcluded): Checks the ConditionalAttribute
18545         on the method.
18546
18547 2004-06-02 Ben Maurer  <bmaurer@users.sourceforge.net>
18548
18549         * expression.cs (ArrayCreationExpression): Make this just an
18550         `expression'. It can't be a statement, so the code here was
18551         dead.
18552
18553 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18554
18555         Fixed #59072
18556         * typemanager.cs (GetFullNameSignature): New method for
18557         MethodBase types.
18558
18559 2004-06-02  Marek Safar  <marek.safar@seznam.cz>
18560
18561         Fixed #56452
18562         * class.cs (MemberBase.GetSignatureForError): New virtual method.
18563         Use this method when MethodBuilder is null.
18564         (MethodData.DefineMethodBuilder): Encapsulated code to the new method.
18565         Added test for error CS0626 (MONO reports error for this situation).
18566         (IMethodData.GetSignatureForError): Extended interface.
18567
18568 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18569
18570         * attribute.cs
18571         (AttributeTester.GetObsoleteAttribute): Returns instance of
18572         ObsoleteAttribute when type is obsolete.
18573
18574         * class.cs
18575         (TypeContainer.VerifyObsoleteAttribute): Override.
18576         (Method.GetSignatureForError): New method for usage when MethodBuilder is null.
18577         (MethodCode.VerifyObsoleteAttribute): Override.
18578         (MemberBase.VerifyObsoleteAttribute): Override.
18579
18580         * decl.cs
18581         (MemberCore.CheckUsageOfObsoleteAttribute): Tests presence of ObsoleteAttribute
18582         and report proper error.
18583
18584         *delegate.cs
18585         Delegate.VerifyObsoleteAttribute): Override.
18586
18587         * ecore.cs
18588         (Expression.CheckObsoleteAttribute): Tests presence of ObsoleteAttribute
18589         and report proper error.
18590         (FieldExpr.DoResolve): Added tests for ObsoleteAttribute.
18591
18592         * enum.cs
18593         (Enum.GetObsoleteAttribute): Returns ObsoleteAttribute for both enum type
18594         and enum member.
18595
18596         * expression.cs
18597         (Probe.DoResolve, Cast.DoResolve, LocalVariableReference.DoResolve,
18598         New.DoResolve, SizeOf.DoResolve, TypeOf.DoResolce, MemberAccess.DoResolve):
18599         Added test for ObsoleteAttribute.
18600
18601         * statement.cs
18602         (Catch): Derived from Statement.
18603
18604 2004-06-01  Marek Safar  <marek.safar@seznam.cz>
18605  
18606         Fixed bug #59071 & cs0160.cs
18607  
18608         * statement.cs (Try.Resolve): Check here whether order of catch
18609         clauses matches their dependencies.
18610
18611 2004-05-31  Miguel de Icaza  <miguel@ximian.com>
18612
18613         * Reverted patch to namespace.cs (Use lookuptypedirect).  This
18614         caused a regression: #59343.  Referencing nested classes from an
18615         assembly stopped working.
18616
18617 2004-05-31  Martin Baulig  <martin@ximian.com>
18618
18619         MCS is now frozen for beta 2.
18620
18621 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18622
18623         * convert.cs: add a trivial cache for overload operator resolution.
18624
18625 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18626
18627         * decl.cs: If possible, use lookuptypedirect here. We can only do
18628         this if there is no `.' after the namespace. Avoids using
18629         LookupType, which does lots of slow processing.
18630         (FindNestedType) New method, does what it says :-).
18631         * namespace.cs: use LookupTypeDirect.
18632         * rootcontext.cs: use membercache, if possible.
18633         * typemanager.cs (LookupTypeDirect): Cache negative hits too.
18634
18635 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18636
18637         * expression.cs:
18638         According to the spec, 
18639
18640         In a member access of the form E.I, if E is a single identifier,
18641         and if the meaning of E as a simple-name (§7.5.2) is a constant,
18642         field, property, localvariable, or parameter with the same type as
18643         the meaning of E as a type-name (§3.8), then both possible
18644         meanings of E are permitted.
18645
18646         We did not check that E as a simple-name had the same type as E as
18647         a type name.
18648
18649         This trivial check gives us 5-7% on bootstrap time.
18650
18651 2004-05-30 Ben Maurer  <bmaurer@users.sourceforge.net>
18652
18653         * expression.cs (Invocation.OverloadResolve): Avoid the
18654         use of hashtables and boxing here by allocating on demand.
18655
18656 2004-05-30  Martin Baulig  <martin@ximian.com>
18657
18658         * rootcontext.cs (RootContext.LookupType): Don't cache things if
18659         we're doing a silent lookup.  Don't try to lookup nested types in
18660         TypeManager.object_type (thanks to Ben Maurer).
18661
18662 2004-05-30  Martin Baulig  <martin@ximian.com>
18663
18664         Committing a patch from Ben Maurer.
18665
18666         * rootcontext.cs (RootContext.LookupType): Cache negative results.
18667
18668 2004-05-29  Martin Baulig  <martin@ximian.com>
18669
18670         * class.cs (IMethodData.ShouldIgnore): New method.
18671
18672         * typemanager.cs (TypeManager.MethodFlags): Don't take a
18673         `Location' argument, we don't need it anywhere.  Use
18674         `IMethodData.ShouldIgnore ()' instead of
18675         `MethodData.GetMethodFlags ()'.
18676         (TypeManager.AddMethod): Removed.
18677         (TypeManager.AddMethod2): Renamed to AddMethod.
18678
18679 2004-05-29  Martin Baulig  <martin@ximian.com>
18680
18681         Committing a patch from Benjamin Jemlich <pcgod@gmx.net>.
18682
18683         * convert.cs (Convert.ImplicitReferenceConversion): If we're
18684         converting from a class type S to an interface type and we already
18685         have an object on the stack, don't box it again.  Fixes #52578.
18686
18687 2004-05-29  Martin Baulig  <martin@ximian.com>
18688
18689         * class.cs (ConstructorInitializer.GetOverloadedConstructor):
18690         Added support for `params' parameters.  Fixes #59267.
18691
18692 2004-05-29  Martin Baulig  <martin@ximian.com>
18693
18694         * literal.cs (NullPointer): Provide a private .ctor which sets
18695         `type' to TypeManager.object_type.  Fixes #59048.
18696
18697 2004-05-29  Martin Baulig  <martin@ximian.com>
18698
18699         * expression.cs (MemberAccess.ResolveMemberAccess): If we're an
18700         EventExpr, set `ee.InstanceExpression = left'.  Fixes #59188.
18701
18702         * ecore.cs (EventExpr.instance_expr): Make the field private.
18703
18704 2004-05-26  Marek Safar  <marek.safar@seznam.cz>
18705
18706         Fixed bug #50080 & cs0214-2.cs
18707         * expression.cs (Cast.DoResolve): Check unsafe context here.
18708         
18709         * statement.cs (Resolve.DoResolve): Likewise.
18710
18711 2004-05-26  Martin Baulig  <martin@ximian.com>
18712
18713         * namespace.cs (NamespaceEntry.Lookup): Added `bool silent'.
18714
18715         * rootcontext.cs (RootContext.NamespaceLookup): Added `bool silent'.
18716         (RootContext.LookupType): Pass down the `silent' flag.
18717
18718 2004-05-25  Martin Baulig  <martin@ximian.com>
18719
18720         * expression.cs
18721         (MethodGroupExpr.IdenticalTypeName): New public property.
18722         (Invocation.DoResolve): Don't report a CS0176 if the "instance"
18723         expression actually refers to a type.
18724
18725 2004-05-25  Martin Baulig  <martin@ximian.com>
18726
18727         * expression.cs (Invocation.DoResolve): Applied Ben Maurer's patch
18728         for #56176 and made it actually work.
18729
18730 2004-05-25  Martin Baulig  <martin@ximian.com>
18731
18732         * ecore.cs (Expression.CacheTemporaries): Make this virtual.
18733         (FieldExpr, PropertyExpr): Override and implement
18734         CacheTemporaries.  Fixes #52279.
18735
18736 2004-05-25  Miguel de Icaza  <miguel@ximian.com>
18737
18738         * location.cs: In the new compiler listing a file twice is a
18739         warning, not an error.
18740
18741 2004-05-24  Martin Baulig  <martin@ximian.com>
18742
18743         * enum.cs (Enum.DefineType): For the `BaseType' to be a
18744         TypeLookupExpression; otherwise, report a CS1008.  Fixes #58571.
18745
18746 2004-05-24  Martin Baulig  <martin@ximian.com>
18747
18748         * decl.cs (DeclSpace.FindType): Try doing an alias lookup before
18749         walking the `using' list.  Fixes #53921.
18750
18751 2004-05-24  Martin Baulig  <martin@ximian.com>
18752
18753         * const.cs (Const.LookupConstantValue): Added support for
18754         EmptyCast's; fixes #55251.
18755
18756 2004-05-24  Martin Baulig  <martin@ximian.com>
18757
18758         * ecore.cs (SimpleName.SimpleNameResolve): Renamed to
18759         DoSimpleNameResolve() and provide a SimpleNameResolve() wrapper
18760         which does the CS0135 check.  The reason is that we first need to
18761         check whether the variable actually exists.
18762
18763 2004-05-24  Martin Baulig  <martin@ximian.com>
18764
18765         * class.cs (MemberBase.DoDefine): Use DeclSpace.FindType() rather
18766         than RootContext.LookupType() to find the explicit interface
18767         type.  Fixes #58584.
18768
18769 2004-05-24  Raja R Harinath  <rharinath@novell.com>
18770
18771         * Makefile: Simplify.  Use executable.make.
18772         * mcs.exe.sources: New file.  List of sources of mcs.exe.
18773
18774 2004-05-24  Anders Carlsson  <andersca@gnome.org>
18775
18776         * decl.cs:
18777         * enum.cs:
18778         Use the invariant culture when doing String.Compare for CLS case
18779         sensitivity.
18780         
18781 2004-05-23  Martin Baulig  <martin@ximian.com>
18782
18783         * decl.cs (DeclSpace.FindType): Only check the `using' list if we
18784         don't have any dots.  Fixes #52622, added cs0246-8.cs.
18785
18786         * namespace.cs (NamespaceEntry.Lookup): Likewise.
18787         
18788 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18789
18790         * class.cs (MemberBase.Define): Reuse MemberType member for 
18791         resolved type. Other methods can use it too.
18792
18793 2004-05-23  Martin Baulig  <martin@ximian.com>
18794
18795         * ecore.cs (SimpleName.SimpleNameResolve): Only report a CS0135 if
18796         the variable also exists in the current block (otherwise, we need
18797         to report a CS0103).  Fixes #58670.
18798
18799 2004-05-23  Martin Baulig  <martin@ximian.com>
18800
18801         * flowanalysis.cs (Reachability.Reachable): Compute this
18802         on-the-fly rather than storing it as a field.
18803
18804 2004-05-23  Martin Baulig  <martin@ximian.com>
18805
18806         * flowanalysis.cs (Reachability.And): Manually compute the
18807         resulting `barrier' from the reachability.      
18808        
18809 2004-05-23  Marek Safar  <marek.safar@seznam.cz>
18810
18811         Fix bug #57835
18812         * attribute.cs (AttributeTester.GetMethodObsoleteAttribute): Returns
18813         instance of ObsoleteAttribute when symbol is obsolete.
18814
18815         * class.cs
18816         (IMethodData): Extended interface for ObsoleteAttribute support.
18817
18818 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18819
18820         * attribute.cs: Fix bug #55970
18821
18822 2004-05-22  Marek Safar  <marek.safar@seznam.cz>
18823
18824         Fix bug #52705
18825         * attribute.cs
18826         (GetObsoleteAttribute): New method. Creates the instance of
18827         ObsoleteAttribute.
18828         (AttributeTester.GetMemberObsoleteAttribute): Returns instance of
18829         ObsoleteAttribute when member is obsolete.
18830         (AttributeTester.Report_ObsoleteMessage): Common method for
18831         Obsolete error/warning reporting.
18832
18833         * class.cs
18834         (TypeContainer.base_classs_type): New member for storing parent type.
18835
18836         * decl.cs
18837         (MemberCore.GetObsoleteAttribute): Returns instance of ObsoleteAttribute
18838         for this MemberCore.
18839
18840 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18841
18842         * attribute.cs, const.cs: Fix bug #58590
18843
18844 2004-05-21  Martin Baulig  <martin@ximian.com>
18845
18846         * flowanalysis.cs (FlowBranching.MergeTopBlock): Don't check for
18847         out parameters if the end of the method is unreachable.  Fixes
18848         #58098. 
18849
18850 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18851
18852         * codegen.cs, cs-parser.jay: Removed SetAttributes method.
18853         Hari was right, why extra method.
18854
18855 2004-05-21  Marek Safar  <marek.safar@seznam.cz>
18856
18857         * attribute.cs, cs-parser.jay: Fix errors/cs0579-7.cs.
18858
18859 2004-05-20  Martin Baulig  <martin@ximian.com>
18860
18861         Merged this back from gmcs to keep the differences to a minumum.
18862
18863         * attribute.cs (Attribute.CheckAttributeType): Take an EmitContext
18864         instead of a Declspace.
18865         (Attribute.ResolveType): Likewise.
18866         (Attributes.Search): Likewise.
18867         (Attributes.Contains): Likewise.
18868         (Attributes.GetClsCompliantAttribute): Likewise.
18869
18870         * class.cs (TypeContainer.VerifyMembers): Added EmitContext
18871         argument.
18872         (MethodData.ApplyAttributes): Take an EmitContext instead of a
18873         DeclSpace.
18874
18875 2004-05-19  Marek Safar  <marek.safar@seznam.cz>
18876
18877         Fix bug #58688 (MCS does not report error when the same attribute
18878         is assigned twice)
18879
18880         * attribute.cs (Attribute.Emit): Distinction between null and default.
18881
18882 2004-05-19  Raja R Harinath  <rharinath@novell.com>
18883
18884         * cs-parser.jay (attribute): Create a GlobalAttribute for the case
18885         of a top-level attribute without an attribute target.
18886         * attribute.cs (Attribute.Error_AttributeConstructorMismatch): 
18887         Make non-static.
18888         (Attribute.Conditional_GetConditionName), 
18889         (Attribute.Obsolete_GetObsoleteMessage): Update.
18890         (Attribute.IndexerName_GetIndexerName): New.  Attribute-specific
18891         part of ScanForIndexerName.
18892         (Attribute.CanIgnoreInvalidAttribute): New function.
18893         (Attribute.ScanForIndexerName): Move to ...
18894         (Attributes.ScanForIndexerName): ... here.
18895         (Attributes.Attrs): Rename from now-misnamed AttributeSections.
18896         (Attributes.Search): New internal variant that can choose not to
18897         complain if types aren't resolved.  The original signature now
18898         complains.
18899         (Attributes.GetClsCompliantAttribute): Use internal variant, with
18900         complaints suppressed.
18901         (GlobalAttribute.CheckAttributeType): Overwrite ds.NamespaceEntry
18902         only if it not useful.
18903         (CanIgnoreInvalidAttribute): Ignore assembly attribute errors at
18904         top-level for attributes that are shared between the assembly
18905         and a top-level class.
18906         * parameter.cs (ImplicitParameter): Rename from ParameterAtribute.
18907         * class.cs: Update to reflect changes.
18908         (DefineIndexers): Fuse loops.
18909         * codegen.cs (GetAssemblyName): Update to reflect changes.  Accept
18910         a couple more variants of attribute names.
18911
18912 2004-05-18  Marek Safar  <marek.safar@seznam.cz>
18913
18914         Fix bug #52585 (Implemented explicit attribute declaration)
18915
18916         * attribute.cs:
18917         (Attributable.ValidAttributeTargets): New abstract method. It gets
18918         list of valid attribute targets for explicit target declaration.
18919         (Attribute.Target): It holds target itself.
18920         (AttributeSection): Removed.
18921         (Attribute.CheckTargets): New method. It checks whether attribute
18922         target is valid for the current element.
18923
18924         * class.cs:
18925         (EventProperty): New class. For events that are declared like
18926         property (with add and remove accessors).
18927         (EventField): New class. For events that are declared like field.
18928         class.cs
18929
18930         * cs-parser.jay: Implemented explicit attribute target declaration.
18931
18932         * class.cs, decl.cs, delegate.cs, enum.cs, parameter.cs:        
18933         Override ValidAttributeTargets.
18934
18935         * parameter.cs:
18936         (ReturnParameter): Class for applying custom attributes on 
18937         the return type.
18938         (ParameterAtribute): New class. Class for applying custom
18939         attributes on the parameter type.
18940
18941 2004-05-17  Miguel de Icaza  <miguel@ximian.com>
18942
18943         * class.cs (MemberBase.DoDefine): Pass UNSAFE on interface
18944         definitions. 
18945
18946         (Method): Allow UNSAFE here.
18947
18948         * modifiers.cs: Support unsafe reporting.
18949
18950 2004-05-17  Marek Safar  <marek.safar@seznam.cz>
18951
18952         * decl.cs: Fix bug #58478.
18953
18954 2004-05-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
18955
18956         * statement.cs: When checking for unreachable code on an EmptyStatement,
18957         set the location. Fixes bug #58488.
18958
18959 2004-05-13  Miguel de Icaza  <miguel@ximian.com>
18960
18961         * driver.cs: Add -pkg handling.
18962
18963         From Gonzalo: UseShelLExecute=false
18964
18965 2004-05-12  Marek Safar  <marek.safar@seznam.cz>
18966
18967         * attribute.cs:
18968         (Attribute.GetAttributeTargets): New method. Gets AttributeTargets
18969         for attribute.
18970         (Attribute.IsClsCompliaceRequired): Moved to base for better
18971         accesibility.
18972         (Attribute.UsageAttribute): New property for AttributeUsageAttribute
18973         when attribute is AttributeUsageAttribute.
18974         (Attribute.GetValidTargets): Simplified.
18975         (Attribute.GetAttributeUsage): New method returns AttributeUsage
18976         attribute for this type.
18977         (Attribute.ApplyAttributes): Method renamed to Emit and make
18978         non-static.
18979         (GlobalAttributeSection): New class for special handling of global
18980         attributes (assembly, module).
18981         (AttributeSection.Emit): New method.
18982
18983         * class.cs: Implemented Attributable abstract methods.
18984         (MethodCore.LabelParameters): Moved to Parameter class.
18985         (Accessor): Is back simple class.
18986         (PropertyMethod): Implemented Attributable abstract class.
18987         (DelegateMethod): Implemented Attributable abstract class.
18988         (Event): New constructor for disctintion between normal Event
18989         and Event with accessors.
18990
18991         * cs-parser.jay: Used new Event ctor and GlobalAttributeSection.
18992
18993         * codegen.cs, const.cs, decl.cs, delegate.cs:
18994         (CommonAssemblyModulClass): Implemented Attributable abstract class
18995         and simplified.
18996
18997         * enum.cs: Implement IAttributeSupport interface.
18998         (EnumMember): New class for emum members. Implemented Attributable
18999         abstract class
19000
19001         * parameter.cs:
19002         (ParameterBase): Is abstract.
19003         (ReturnParameter): New class for easier [return:] attribute handling.
19004
19005         * typemanager.cs: Removed builder_to_attr.
19006
19007 2004-05-11  Raja R Harinath  <rharinath@novell.com>
19008
19009         Fix bug #57151.
19010         * attribute.cs (Attribute.GetPositionalValue): New function.
19011         * class.cs (TypeContainer.VerifyMembers): New function.
19012         (TypeContainer.Emit): Use it.
19013         (ClassOrStruct): New base class for Class and Struct.
19014         (ClassOrStruct.ApplyAttributeBuilder): New function.  Note if 
19015         StructLayout(LayoutKind.Explicit) was ascribed to the struct or
19016         class.
19017         (ClassOrStruct.VerifyMembers): If the struct is explicitly laid out,
19018         then each non-static field should have a FieldOffset attribute.
19019         Otherwise, none of the fields should have a FieldOffset attribute.
19020         * rootcontext.cs (RootContext.ResolveCore): Resolve StructLayout 
19021         and FieldOffset attributes.
19022         * typemanager.cs (TypeManager.struct_layout_attribute_type)
19023         (TypeManager.field_offset_attribute_type): New core types.
19024         (TypeManager.InitCoreTypes): Initialize them.
19025
19026 2004-05-11  Michal Moskal  <malekith@pld-linux.org>
19027
19028         * class.cs (Event.RemoveDelegateMethod.DelegateMethodInfo):
19029         Return correct type.
19030         From bug #58270.
19031
19032 2004-05-09  Miguel de Icaza  <miguel@ximian.com>
19033
19034         * expression.cs (Binary.DoNumericPromotions): 0 long constant can
19035         be implicitly converted to ulong.
19036         
19037         * expression.cs: The logic for allowing operator &, | and ^ worked
19038         was wrong, it worked before because we did not report an error in
19039         an else branch.  Fixes 57895.
19040
19041         * class.cs: Applied patch from iain@mccoy.id.au Iain McCoy to
19042         allow volatile fields to be reference types.
19043
19044 2004-05-07  Miguel de Icaza  <miguel@ximian.com>
19045
19046         * driver.cs: Add support for /debug-
19047
19048 2004-05-07  Raja R Harinath  <rharinath@novell.com>
19049
19050         * attribute.cs (Attribute.CheckAttributeType, Attribute.ResolveType): 
19051         Add a 'complain' parameter to silence errors.
19052         (Attribute.Resolve): Update to changes.  Put in sanity check to catch
19053         silently overlooked type-resolutions.
19054         (Attribute.ScanForIndexerName, Attribute.DefinePInvokeMethod): Update
19055         to reflect changes.
19056         (Attributes.Search): New function.
19057         (Attributes.Contains, Attributes.GetClsCompliantAttribute): Use Search.
19058         (Attributes.GetAttributeFullName): Remove hack.
19059         * class.cs (MethodCore.LabelParameters, MethodData.ApplyAttributes): 
19060         Update to reflect changes.
19061         * codegen.cs (CommonAssemblyModulClass.GetClsCompliantAttribute):
19062         Use Attributes.Search instead of nested loops.
19063
19064 2004-05-07  Marek Safar  <marek.safar@seznam.cz>
19065
19066         * decl.cs:
19067         (MemberCore.Flags): Extended for caching presence of CLSCompliantAttribute.
19068         (MemberCore.VerifyClsCompliance): Implemented CS3019 error report.
19069         (DeclSpace.GetClsCompliantAttributeValue): Returns simple bool.
19070
19071         * report.cs: (Report.Warning): Renamed to Warning_T because of
19072         parameter collision.
19073
19074 2004-05-05  Raja R Harinath  <rharinath@novell.com>
19075
19076         * expression.cs (MemberAccess.ResolveMemberAccess):
19077         Exit with non-zero status after Report.Error.
19078         * rootcontext.cs (RootContext.BootstrapCorlib_ResolveDelegate):
19079         Likewise.
19080         * typemanager.cs (TypeManager.CoreLookupType): Likewise.
19081
19082 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
19083
19084         * support.cs: Don't hang when the file is empty.
19085
19086 2004-05-04  Lluis Sanchez Gual  <lluis@ximian.com>
19087
19088         * support.cs: In SeekableStreamReader, compute the preamble size of the
19089           underlying stream. Position changes should take into account that initial
19090           count of bytes.
19091
19092 2004-05-03  Todd Berman  <tberman@sevenl.net>
19093
19094         * driver.cs: remove unused GetSysVersion function.
19095
19096 2004-05-03  Todd Berman  <tberman@sevenl.net>
19097
19098         * driver.cs: Remove the hack from saturday, as well as the hack
19099         from jackson (LoadAssemblyFromGac), also adds the CWD to the
19100         link_paths to get that bit proper.
19101
19102 2004-05-01  Todd Berman  <tberman@sevenl.net>
19103
19104         * driver.cs: Try a LoadFrom before a Load, this checks the current
19105         path. This is currently a bug in mono that is be fixed, however, this
19106         provides a workaround for now. This will be removed when the bug
19107         is fixed.
19108
19109 2004-05-01  Sebastien Pouliot  <sebastien@ximian.com>
19110
19111         * CryptoConvert.cs: Updated to latest version. Fix issue with 
19112         incomplete key pairs (#57941).
19113
19114 2004-05-01  Todd Berman  <tberman@sevenl.net>
19115
19116         * driver.cs: Remove '.' from path_chars, now System.* loads properly
19117         from the GAC
19118
19119 2004-04-30  Jackson Harper  <jackson@ximian.com>
19120
19121         * codegen.cs: Open keys readonly.
19122         
19123 2004-04-30  Gonzalo Paniagua Javier <gonzalo@ximian.com>
19124
19125         * typemanager.cs: don't report cyclic struct layout when a struct
19126         contains 2 or more fields of the same type. Failed for Pango.AttrShape
19127         which has 2 Pango.Rectangle fields.
19128
19129 2004-04-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19130
19131         * expression.cs: Handle IntPtr comparisons with IL code
19132         rather than a method call.
19133
19134 2004-04-29  Martin Baulig  <martin@ximian.com>
19135
19136         * ecore.cs (PropertyExpr.FindAccessor): New private method.  Walk
19137         the list of PropertyInfo's in class hierarchy and find the
19138         accessor.  Fixes #56013.
19139
19140 2004-04-29  Martin Baulig  <martin@ximian.com>
19141
19142         * typemanager.cs (TypeManager.CheckStructCycles): Fixed.
19143
19144 2004-04-29  Martin Baulig  <martin@ximian.com>
19145
19146         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19147
19148         * ecore.cs (FieldExpr.AddressOf): Make this work for valuetypes.
19149
19150 2004-04-29  Martin Baulig  <martin@ximian.com>
19151
19152         * class.cs (ConstructorInitializer.Resolve): Check whether the
19153         parent .ctor is accessible.  Fixes #52146.
19154
19155 2004-04-29  Martin Baulig  <martin@ximian.com>
19156
19157         Applying a patch from Benjamin Jemlich <pcgod@gmx.net>.
19158
19159         * statement.cs (Using.EmitLocalVariableDecls): Use
19160         TypeManager.idisposable_type, not typeof (IDisposable).
19161         (Foreach.EmitCollectionForeach): Added support for valuetypes.
19162
19163 2004-04-29  Martin Baulig  <martin@ximian.com>
19164
19165         * class.cs (Event.Define): Don't emit the field and don't set
19166         RTSpecialName and SpecialName for events on interfaces.  Fixes
19167         #57703. 
19168
19169 2004-04-29  Raja R Harinath  <rharinath@novell.com>
19170
19171         Refactor Attribute.ApplyAttributes.
19172         * attribute.cs (Attributable): New base class for objects that can
19173         have Attributes applied on them.
19174         (Attribute): Make AttributeUsage fields public.
19175         (Attribute.GetFieldValue, Attribute.GetMarshal): Make non-static.
19176         (Attribute.IsInternalCall): New property.
19177         (Attribute.UsageAttr): Convert to a public read-only property.
19178         (Attribute.CheckAttributeType): Use a DeclSpace, not an EmitContext.
19179         (Attribute.ResolveType, Attribute.Resolve)
19180         (Attribute.ScanForIndexerName): Update to reflect changes.
19181         (Attribute.CheckAttributeTarget): Re-format.
19182         (Attribute.ApplyAttributes): Refactor, to various
19183         Attributable.ApplyAttributeBuilder methods.
19184         * decl.cs (MemberCore): Make Attributable.
19185         * class.cs (Accessor): Make Attributable.
19186         (MethodData.ApplyAttributes): Use proper attribute types, not
19187         attribute names.
19188         (TypeContainer.LabelParameters): Pass Parameter to ApplyAttributes.
19189         (TypeContainer.ApplyAttributeBuilder)
19190         (Method.ApplyAttributeBuilder, Constructor.ApplyAttributeBuilder)
19191         (Field.ApplyAttributeBuilder, Accessor.ApplyAttributeBuilder)   
19192         (PropertyBase.ApplyAttributeBuilder, Event.ApplyAttributeBuilder)
19193         (Operator.ApplyAttributeBuilder): New factored-out methods.
19194         * const.cs (Const.ApplyAttributeBuilder): Likewise.
19195         * delegate.cs (Delegate.ApplyAttributeBuilder): Likewise.
19196         * enum.cs (Enum.ApplyAttributeBuilder): Likewise.
19197         * parameter.cs (ParameterBase): New Attributable base class
19198         that can also represent Return types.
19199         (Parameter): Update to the changes.
19200
19201 2004-04-29  Jackson Harper  <jackson@ximian.com>
19202
19203         * driver.cs: Prefer the corlib system version when looking for
19204         assemblies in the GAC. This is still a hack, but its a better hack
19205         now.
19206         
19207 2004-04-29  Marek Safar  <marek.safar@seznam.cz>
19208
19209         * decl.cs, enum.cs: Improved error 3005 reporting.
19210   
19211         * report.cs (SymbolRelatedToPreviousError): New method for error reporting.
19212         (related_symbols): New private member for list of symbols
19213         related to reported error/warning.
19214         
19215         * tree.cs: Do not use now obsolete Report.LocationOfPreviousError.
19216
19217 2004-04-29  Martin Baulig  <martin@ximian.com>
19218
19219         * ecore.cs (Expression.Constantify): If we're an enum and
19220         TypeManager.TypeToCoreType() doesn't give us another type, use
19221         t.UnderlyingSystemType.  Fixes #56178.  
19222
19223 2004-04-29  Martin Baulig  <martin@ximian.com>
19224
19225         * decl.cs (MemberCache.SetupCacheForInterface): Look over all our
19226         interfaces and for each interface, only add members directly
19227         declared in that interface.  Fixes #53255.
19228
19229 2004-04-28  Martin Baulig  <martin@ximian.com>
19230
19231         * expression.cs (ConditionalLogicalOperator): Use a temporary
19232         variable for `left' to avoid that we evaluate it more than once;
19233         bug #52588.
19234
19235 2004-04-28  Martin Baulig  <martin@ximian.com>
19236
19237         * expression.cs (ComposedCast.DoResolveAsTypeStep): Don't allow
19238         `void[]' (CS1547).
19239
19240 2004-04-28  Martin Baulig  <martin@ximian.com>
19241
19242         * statement.cs (LocalInfo.Resolve): Check whether the type is not
19243         void (CS1547).
19244
19245         * class.cs (MemberBase.CheckParameters, FieldBase.DoDefine): Check
19246         whether the type is not void (CS1547).
19247
19248 2004-04-28  Martin Baulig  <martin@ximian.com>
19249
19250         * expression.cs (Unary.DoResolveLValue): Override this and report
19251         CS0131 for anything but Operator.Indirection.
19252
19253 2004-04-28  Martin Baulig  <martin@ximian.com>
19254
19255         Committing a patch from Ben Maurer; see bug #50820.
19256
19257         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19258         check for classes.
19259
19260         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19261         classes.        
19262
19263 2004-04-28  Martin Baulig  <martin@ximian.com>
19264
19265         Committing a patch from Ben Maurer; see bug #50820.
19266
19267         * typemanager.cs (TypeManager.FilterWithClosure): Added CS1540
19268         check for classes.
19269
19270         * ecore.cs (Expression.MemberLookupFailed): Added CS1540 check for
19271         classes.        
19272
19273 2004-04-28  Martin Baulig  <martin@ximian.com>
19274
19275         * statement.cs (Block.LookupLabel): Also lookup in implicit child blocks.
19276         (Block.AddLabel): Call DoLookupLabel() to only search in the
19277         current block.
19278
19279 2004-04-28  Martin Baulig  <martin@ximian.com>
19280
19281         * cfold.cs (ConstantFold.BinaryFold): Added special support for
19282         comparing StringConstants and NullLiterals in Equality and Inequality.
19283
19284 2004-04-28  Jackson Harper  <jackson@ximian.com>
19285
19286         * driver.cs: Attempt to load referenced assemblies from the
19287         GAC. This is the quick and dirty version of this method that
19288         doesnt take into account versions and just takes the first
19289         canidate found. Will be good enough for now as we will not have more
19290         then one version installed into the GAC until I update this method.
19291
19292 2004-04-28  Martin Baulig  <martin@ximian.com>
19293
19294         * typemanager.cs (TypeManager.CheckStructCycles): New public
19295         static method to check for cycles in the struct layout.
19296
19297         * rootcontext.cs (RootContext.PopulateTypes): Call
19298         TypeManager.CheckStructCycles() for each TypeContainer.
19299         [Note: We only need to visit each type once.]
19300
19301 2004-04-28  Martin Baulig  <martin@ximian.com>
19302
19303         * constant.cs (StringConstant.Emit): Emit Ldnull if we're null.
19304
19305         * const.cs (Const.LookupConstantValue): Return a `bool' signalling
19306         success and added `out object value'.  Use a `bool resolved' field
19307         to check whether we've already been called rather than
19308         `ConstantValue != null' since this breaks for NullLiterals.
19309
19310 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19311
19312         * driver.cs (Driver.MainDriver) [IsModuleOnly]: Open code the
19313         setting of this flag, since the 'set' method may be non-public.
19314
19315 2004-04-28  Raja R Harinath  <rharinath@novell.com>
19316
19317         * flowanalysis.cs (FlowBranchingException.LookupLabel): Add a null
19318         check on current_vector.Block.
19319
19320 2004-04-27  Martin Baulig  <martin@ximian.com>
19321
19322         * expression.cs (BaseAccess.CommonResolve): Don't allow `base' in
19323         a field initializer.  Fixes #56459.
19324
19325 2004-04-27  Martin Baulig  <martin@ximian.com>
19326
19327         * ecore.cs (PropertyExpr.DoResolve/DoResolveLValue): Check whether
19328         we're not attempting to use an indexer.  Fixes #52154.
19329
19330 2004-04-27  Martin Baulig  <martin@ximian.com>
19331
19332         * statement.cs (Return): Don't create a return label if we don't
19333         need it; reverts my change from January 20th.  Thanks to Ben
19334         Maurer for this.
19335
19336 2004-04-27  Martin Baulig  <martin@ximian.com>
19337
19338         According to the spec, `goto' can only leave a nested scope, but
19339         never enter it.
19340
19341         * statement.cs (Block.LookupLabel): Only lookup in the current
19342         block, don't recurse into parent or child blocks.
19343         (Block.AddLabel): Check in parent and child blocks, report
19344         CS0140/CS0158 if we find a duplicate.
19345         (Block): Removed this indexer for label lookups.
19346         (Goto.Resolve): Call LookupLabel() on our current FlowBranching;
19347         this already does the error reporting for us.
19348
19349         * flowanalysis.cs
19350         (FlowBranching.UsageVector.Block): New public variable; may be null.
19351         (FlowBranching.CreateSibling): Added `Block' argument.
19352         (FlowBranching.LookupLabel): New public virtual method.  Lookup a
19353         label for the target of a `goto' and check whether we're not
19354         leaving a `finally'.
19355
19356 2004-04-27  Martin Baulig  <martin@ximian.com>
19357
19358         * flowanalysis.cs (FlowBranching.UsageVector.MergeChild): If we're
19359         a finite loop block, also do the ALWAYS->SOMETIMES for throws (not
19360         just for returns).
19361
19362 2004-04-27  Martin Baulig  <martin@ximian.com>
19363
19364         * statement.cs (Block.AddLabel): Also check for implicit blocks
19365         and added a CS0158 check.
19366
19367 2004-04-27  Martin Baulig  <martin@ximian.com>
19368
19369         * flowanalysis.cs (FlowBranchingLoop): New class.
19370         (FlowBranching.UsageVector.MergeJumpOrigins): Take a list of
19371         UsageVector's instead of an ArrayList.
19372         (FlowBranching.Label): Likewise.
19373         (FlowBranching.UsageVector.MergeBreakOrigins): New method.
19374         (FlowBranching.AddBreakVector): New method.
19375
19376 2004-04-27  Miguel de Icaza  <miguel@ximian.com>
19377
19378         * attribute.cs: Small regression fix: only convert the type if we
19379         the type is different, fixes System.Drawing build.
19380
19381 2004-04-27  Martin Baulig  <martin@ximian.com>
19382
19383         * attribute.cs (Attribute.Resolve): If we have a constant value
19384         for a named field or property, implicity convert it to the correct
19385         type.
19386
19387 2004-04-27  Raja R Harinath  <rharinath@novell.com>
19388
19389         * statement.cs (Block.Block): Implicit blocks share
19390         'child_variable_names' fields with parent blocks.
19391         (Block.AddChildVariableNames): Remove.
19392         (Block.AddVariable): Mark variable as "used by a child block" in
19393         every surrounding block.
19394         * ecore.cs (SimpleName.SimpleNameResolve): If the name has already
19395         been used in a child block, complain about violation of "Invariant
19396         meaning in blocks" rule.
19397         * cs-parser.jay (declare_local_variables): Don't use
19398         AddChildVariableNames.
19399         (foreach_statement): Don't create an implicit block: 'foreach'
19400         introduces a scope.
19401
19402 2004-04-23  Miguel de Icaza  <miguel@ximian.com>
19403
19404         * convert.cs (ImplicitNumericConversion): 0 is also positive when
19405         converting from 0L to ulong.  Fixes 57522.
19406
19407 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19408
19409         * decl.cs (FindMemberToOverride): Fix wrong warning for case when
19410         derived class hides via 'new' keyword field from base class (test-242.cs).
19411         TODO: Handle this in the more general way.
19412         
19413         * class.cs (CheckBase): Ditto.
19414
19415 2004-04-22  Marek Safar  <marek.safar@seznam.cz>
19416
19417         * decl.cs (caching_flags): New member for storing cached values
19418         as bit flags.
19419         (MemberCore.Flags): New enum where bit flags for caching_flags
19420         are defined.
19421         (MemberCore.cls_compliance): Moved to caching_flags.
19422         (DeclSpace.Created): Moved to caching_flags.
19423
19424         * class.cs: Use caching_flags instead of DeclSpace.Created
19425         
19426 2004-04-21  Miguel de Icaza  <miguel@ximian.com>
19427
19428         * ecore.cs (PropertyExpr.GetAccesor): Only perform the 1540 check
19429         if we are only a derived class, not a nested class.
19430
19431         * typemanager.cs: Same as above, but do this at the MemberLookup
19432         level (used by field and methods, properties are handled in
19433         PropertyExpr).   Allow for the qualified access if we are a nested
19434         method. 
19435
19436 2004-04-21  Marek Safar  <marek.safar@seznam.cz>
19437
19438         * class.cs: Refactoring.
19439         (IMethodData): New inteface; Holds links to parent members
19440         to avoid member duplication (reduced memory allocation).
19441         (Method): Implemented IMethodData interface.
19442         (PropertyBase): New inner classes for get/set methods.
19443         (PropertyBase.PropertyMethod): Implemented IMethodData interface
19444         (Event): New inner classes for add/remove methods.
19445         (Event.DelegateMethod): Implemented IMethodData interface.
19446
19447         * cs-parser.jay: Pass DeclSpace to Event class for creation of valid
19448         EmitContext (related to class.cs refactoring).
19449
19450 2004-04-21  Raja R Harinath  <rharinath@novell.com>
19451
19452         * delegate.cs (Delegate.VerifyApplicability): If the number of
19453         arguments are the same as the number of parameters, first try to
19454         verify applicability ignoring  any 'params' modifier on the last
19455         parameter.
19456         Fixes #56442.
19457
19458 2004-04-16  Raja R Harinath  <rharinath@novell.com>
19459
19460         * class.cs (TypeContainer.AddIndexer): Use
19461         'ExplicitInterfaceName' to determine if interface name was
19462         explicitly specified.  'InterfaceType' is not initialized at this time.
19463         (TypeContainer.DefineIndexers): Remove use of temporary list.  The
19464         Indexers array is already in the required order.  Initialize
19465         'IndexerName' only if there are normal indexers.
19466         (TypeContainer.DoDefineMembers): Don't initialize IndexerName.
19467         (TypeContainer.Emit): Emit DefaultMember attribute only if
19468         IndexerName is initialized.
19469         Fixes #56300.
19470
19471 2004-04-15  Benjamin Jemlich  <pcgod@gmx.net>
19472
19473         * enum.cs (Enum.DefineType): Don't allow char as type for enum.
19474         Fixes #57007
19475
19476 2004-04-15  Raja R Harinath  <rharinath@novell.com>
19477
19478         * attribute.cs (Attribute.CheckAttributeType): Check for ambiguous
19479         attributes.
19480         Fix for #56456.
19481
19482         * attribute.cs (Attribute.Resolve): Check for duplicate named
19483         attributes.
19484         Fix for #56463.
19485
19486 2004-04-15  Miguel de Icaza  <miguel@ximian.com>
19487
19488         * iterators.cs (MarkYield): track whether we are in an exception,
19489         and generate code accordingly.  Use a temporary value to store the
19490         result for our state.
19491
19492         I had ignored a bit the interaction of try/catch with iterators
19493         since their behavior was not entirely obvious, but now it is
19494         possible to verify that our behavior is the same as MS .NET 2.0
19495
19496         Fixes 54814
19497
19498 2004-04-14  Miguel de Icaza  <miguel@ximian.com>
19499
19500         * iterators.cs: Avoid creating temporaries if there is no work to
19501         do. 
19502
19503         * expression.cs (ArrayAccess.EmitLoadOpcode): If dealing with
19504         Enumerations, use TypeManager.EnumToUnderlying and call
19505         recursively. 
19506
19507         Based on the patch from Benjamin Jemlich (pcgod@gmx.net), fixes
19508         bug #57013
19509
19510         (This.Emit): Use EmitContext.EmitThis to emit our
19511         instance variable.
19512
19513         (This.EmitAssign): Ditto.
19514
19515         * ecore.cs (FieldExpr.Emit): Remove RemapToProxy special
19516         codepaths, we will move all the functionality into
19517         Mono.CSharp.This 
19518
19519         (FieldExpr.EmitAssign): Ditto.
19520
19521         This fixes several hidden bugs that I uncovered while doing a code
19522         review of this today.
19523
19524         * codegen.cs (EmitThis): reworked so the semantics are more clear
19525         and also support value types "this" instances.
19526
19527         * iterators.cs: Changed so that for iterators in value types, we
19528         do not pass the value type as a parameter.  
19529
19530         Initialization of the enumerator helpers is now done in the caller
19531         instead of passing the parameters to the constructors and having
19532         the constructor set the fields.
19533
19534         The fields have now `assembly' visibility instead of private.
19535
19536 2004-04-11  Miguel de Icaza  <miguel@ximian.com>
19537
19538         * expression.cs (Argument.Resolve): Check if fields passed as ref
19539         or out are contained in a MarshalByRefObject.
19540
19541         * typemanager.cs, rootcontext.cs: Add System.Marshalbyrefobject as
19542         another compiler type.
19543
19544 2004-04-06 Ben Maurer  <bmaurer@users.sourceforge.net>
19545
19546         * class.cs (Indexer.Define): use the new name checking method.
19547         Also, return false on an error.
19548         * cs-tokenizer.cs (IsValidIdentifier): Checks for a valid identifier.
19549         (is_identifier_[start/part]_character): make static.
19550
19551 2004-04-10  Miguel de Icaza  <miguel@ximian.com>
19552
19553         * expression.cs (Binary.ResolveOperator): Do no append strings
19554         twice: since we can be invoked more than once (array evaluation)
19555         on the same concatenation, take care of this here.  Based on a fix
19556         from Ben (bug #56454)
19557
19558 2004-04-08  Sebastien Pouliot  <sebastien@ximian.com>
19559
19560         * codegen.cs: Fix another case where CS1548 must be reported (when 
19561         delay-sign isn't specified and no private is available #56564). Fix
19562         loading the ECMA "key" to delay-sign an assembly. Report a CS1548 
19563         error when MCS is used on the MS runtime and we need to delay-sign 
19564         (which seems unsupported by AssemblyBuilder - see #56621).
19565
19566 2004-04-08  Marek Safar  <marek.safar@seznam.cz>
19567
19568         * typemanager.cs (TypeManager.TypeToCoreType): Handle IntPtr too.
19569         (TypeManager.ComputeNamespaces): Faster implementation for
19570         Microsoft runtime.
19571
19572         * compiler.csproj: Updated AssemblyName to mcs.
19573
19574 2004-04-07  Miguel de Icaza  <miguel@ximian.com>
19575
19576         * rootcontext.cs: Add new types to the boot resolution.
19577
19578         * ecore.cs (TypeExpr.CanInheritFrom): Inheriting from
19579         MulticastDelegate is not allowed.
19580
19581         * typemanager.cs: Add new types to lookup: System.TypedReference
19582         and ArgIterator.
19583
19584         * paramter.cs (Parameter.Resolve): if we are an out/ref parameter,
19585         check for TypedReference or ArgIterator, they are not allowed. 
19586
19587         * ecore.cs (BoxedCast): Set the eclass to ExprClass.Value, this
19588         makes us properly catch 1510 in some conditions (see bug 56016 for
19589         details). 
19590
19591 2004-04-06  Bernie Solomon  <bernard@ugsolutions.com>
19592
19593         * CryptoConvert.cs: update from corlib version
19594         with endian fixes.
19595
19596 2004-04-05  Miguel de Icaza  <miguel@ximian.com>
19597
19598         * class.cs (Indexer.Define): Check indexername declaration
19599
19600 2004-04-05  Marek Safar  <marek.safar@seznam.cz>
19601
19602         * attribute.cs (IsClsCompliant): Fixed problem with handling
19603         all three states (compliant, not-compliant, undetected).
19604
19605 2004-03-30  Marek Safar  <marek.safar@seznam.cz>
19606
19607         * attribute.cs (Attribute): Location is now public.
19608         (Resolve): Store resolved arguments (pos_values) in attribute class.
19609         Attribute extractors (now GetClsCompliantAttributeValue) can reuse them.
19610         (GetClsCompliantAttributeValue): New method that gets
19611         CLSCompliantAttribute value.
19612         (GetClsCompliantAttribute): Returns CLSCompliantAttribute for DeclSpace
19613         if exists else null.
19614         (AttributeTester): New class for CLS-Compliant verification routines.
19615
19616         * class.cs (Emit): Add CLS-Compliant verification.
19617         (Method.GetSignatureForError): Implemented.
19618         (Constructor.GetSignatureForError): Implemented
19619         (Constructor.HasCompliantArgs): Returns if constructor has
19620         CLS-Compliant arguments.
19621         (Constructor.Emit): Override.
19622         (Construcor.IsIdentifierClsCompliant): New method; For constructors
19623         is needed to test only parameters.
19624         (FieldBase.GetSignatureForError): Implemented.
19625         (TypeContainer): New member for storing base interfaces.
19626         (TypeContainer.FindMembers): Search in base interfaces too.
19627
19628         * codegen.cs (GetClsComplianceAttribute): New method that gets
19629         assembly or module CLSCompliantAttribute value.
19630         (ResolveClsCompliance): New method that resolve CLSCompliantAttribute
19631         for assembly.
19632         (ModuleClass.Emit): Add error 3012 test.
19633
19634         * const.cs (Emit): Override and call base for CLS-Compliant tests.
19635
19636         * decl.cs (ClsComplianceValue): New enum that holds CLS-Compliant
19637         state for all decl types.
19638         (MemberCore.Emit): Emit is now virtual and call VerifyClsCompliance
19639         if CLS-Compliant tests are required.
19640         (IsClsCompliaceRequired): New method. Analyze whether code
19641         must be CLS-Compliant.
19642         (IsExposedFromAssembly): New method. Returns true when MemberCore
19643         is exposed from assembly.
19644         (GetClsCompliantAttributeValue): New method. Resolve CLSCompliantAttribute
19645         value or gets cached value.
19646         (HasClsCompliantAttribute): New method. Returns true if MemberCore
19647         is explicitly marked with CLSCompliantAttribute.
19648         (IsIdentifierClsCompliant): New abstract method. This method is
19649         used to testing error 3005.
19650         (IsIdentifierAndParamClsCompliant): New method. Common helper method
19651         for identifier and parameters CLS-Compliant testing.
19652         (VerifyClsCompliance): New method. The main virtual method for
19653         CLS-Compliant verifications.
19654         (CheckAccessLevel): In one special case (System.Drawing) was TypeBuilder
19655         null. I don't know why is null (too many public members !).
19656         (GetClsCompliantAttributeValue). New method. Goes through class hierarchy
19657         and get value of first CLSCompliantAttribute that found.
19658
19659         * delegate.cs (Emit): Override and call base for CLS-Compliant tests.
19660         (VerifyClsCompliance): Override and add extra tests.
19661
19662         * driver.cs (CSCParseOption): New command line options (clscheck[+|-]).
19663         clscheck- disable CLS-Compliant verification event if assembly is has
19664         CLSCompliantAttribute(true).
19665
19666         * enum.cs (Emit): Override and call base for CLS-Compliant tests.
19667         ApllyAttribute is now called in emit section as in the other cases.
19668         Possible future Emit integration.
19669         (IsIdentifierClsCompliant): New override.
19670         (VerifyClsCompliance): New override.
19671         (GetEnumeratorName): Returns full enum name.
19672
19673         * parameter.cs (GetSignatureForError): Implemented.
19674
19675         * report.cs (WarningData): New struct for Warning message information.
19676         (LocationOfPreviousError): New method.
19677         (Warning): New method. Reports warning based on the warning table.
19678         (Error_T): New method. Reports error based on the error table.
19679
19680         * rootcontext.cs (EmitCode): Added new Emit(s) because CLS-Compliant
19681         verifications are done here.
19682
19683         * tree.cs (RecordDecl): Used new LocationOfPreviousError method.
19684
19685         * typemanager.cs (cls_compliant_attribute_type): New member thath holds
19686         CLSCompliantAttribute.
19687         (all_imported_types): New member holds all imported types from other
19688         assemblies.
19689         (LoadAllImportedTypes): New method fills static table with exported types
19690         from all referenced assemblies.
19691         (Modules): New property returns all assembly modules.
19692
19693 2004-03-30  Miguel de Icaza  <miguel@ximian.com>
19694
19695         * cs-parser.jay: Add a rule to catch wrong event syntax instead of
19696         throwing a parser error.
19697
19698         * ecore.cs (PropertyExpr.GetAccessor): Apply patch from Patrik Reali
19699         which removes the hardcoded get_/set_ prefixes for properties, as
19700         IL allows for the properties to be named something else.  
19701
19702         Bug #56013
19703
19704         * expression.cs: Do not override operand before we know if it is
19705         non-null.  Fix 56207
19706
19707 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19708
19709         * typemanager.cs: support for pinned variables.
19710
19711 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19712
19713         * decl.cs, typemanager.cs: Avoid using an arraylist
19714         as a buffer if there is only one result set.
19715
19716 2004-03-29 Ben Maurer  <bmaurer@users.sourceforge.net>
19717
19718         * expression.cs: Make sure you cant call a static method
19719         with an instance expression, bug #56174.
19720
19721 2004-03-29  Miguel de Icaza  <miguel@ximian.com>
19722
19723         * class.cs (IsDuplicateImplementation): Improve error reporting to
19724         flag 663 (method only differs in parameter modifier).
19725
19726         * cs-tokenizer.cs: Do not require whitespace when a ( or " will do
19727         in preprocessor directives.
19728
19729         * location.cs (LookupFile): Allow for the empty path.
19730
19731         * attribute.cs (DefinePInvokeMethod): Fix 56148;  I would like a
19732         better approach for some of that patch, but its failing with the
19733         CharSet enumeration.  For now try/catch will do.
19734
19735         * typemanager.cs: Do not crash if a struct does not have fields.
19736         Fixes 56150.
19737
19738 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19739
19740         * expression.cs: cs0213, cant fix a fixed expression.
19741         fixes 50231.
19742
19743 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19744
19745         * cs-parser.jay: detect invalid embeded statements gracefully.
19746         bug #51113.
19747
19748 2004-03-28 Ben Maurer  <bmaurer@users.sourceforge.net>
19749
19750         * ecore.cs, typemanager.cs: Correct impl of cs1540 check.
19751         As a regex:
19752         s/
19753         the invocation type may not be a subclass of the tye of the item/
19754         The type of the item must be a subclass of the invocation item.
19755         /g
19756
19757         Fixes bug #50820.
19758
19759 2004-03-25  Sebastien Pouliot  <sebastien@ximian.com>
19760
19761         * attribute.cs: Added methods to get a string and a bool from an
19762         attribute. Required to information from AssemblyKeyFileAttribute,
19763         AttributeKeyNameAttribute (string) and AssemblyDelaySign (bool).
19764         * codegen.cs: Modified AssemblyName creation to include support for
19765         strongnames. Catch additional exceptions to report them as CS1548.
19766         * compiler.csproj: Updated include CryptoConvert.cs.
19767         * compiler.csproj.user: Removed file - user specific configuration.
19768         * CryptoConvert.cs: New. A COPY of the class CryptoConvert from 
19769         Mono.Security assembly. The original class is maintained and tested in
19770         /mcs/class/Mono.Security/Mono.Security.Cryptography/CryptoConvert.cs.
19771         * drivers.cs: Added support for /keyfile, /keycontainer and /delaysign
19772         like CSC 8.0 (C# v2) supports.
19773         * Makefile: Added CryptoConvert.cs to mcs sources.
19774         * rootcontext.cs: Added new options for strongnames.
19775
19776 2004-03-24 Ben Maurer  <bmaurer@users.sourceforge.net>
19777
19778         * driver.cs: For --expect-error, report error code `2'
19779         if the program compiled with no errors, error code `1' if
19780         it compiled with an error other than the one expected.
19781
19782 2004-03-24  Sebastien Pouliot  <sebastien@ximian.com>
19783
19784         * compiler.csproj: Updated for Visual Studio .NET 2003.
19785         * compiler.csproj.user: Updated for Visual Studio .NET 2003.
19786         * compiler.sln: Updated for Visual Studio .NET 2003.
19787
19788 2004-03-24  Ravi Pratap M  <ravi@ximian.com>
19789
19790         * expression.cs: Fix bug #47234. We basically need to apply the
19791         rule that we prefer the conversion of null to a reference type
19792         when faced with a conversion to 'object' (csc behaviour).
19793
19794 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19795
19796         * statement.cs: Shorter form for foreach, eliminates
19797         a local variable. r=Martin.
19798
19799 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19800
19801         * constant.cs, ecore.cs, literal.cs: New prop IsZeroInteger that
19802         checks if we can use brtrue/brfalse to test for 0.
19803         * expression.cs: use the above in the test for using brtrue/brfalse.
19804         cleanup code a bit.
19805
19806 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19807
19808         * expression.cs: Rewrite string concat stuff. Benefits:
19809
19810         - "a" + foo + "b" + "c" becomes "a" + foo + "bc"
19811         - "a" + foo + "b" + bar + "c" + baz ... uses concat (string []).
19812         rather than a concat chain.
19813
19814         * typemanager.cs: Add lookups for more concat overloads.
19815
19816 2004-03-23 Ben Maurer  <bmaurer@users.sourceforge.net>
19817
19818         * expression.cs: Emit shorter il code for array init.
19819
19820         newarr
19821         dup
19822         // set 1
19823
19824         // set 2
19825
19826         newarr
19827         stloc.x
19828
19829         ldloc.x
19830         // set 1
19831
19832         ldloc.x
19833         // set 2
19834
19835 2004-03-22 Ben Maurer  <bmaurer@users.sourceforge.net>
19836
19837         * statement.cs: Before, two switch blocks would be merged if the
19838         total size of the blocks (end_item - begin_item + 1) was less than
19839         two times the combined sizes of the blocks.
19840
19841         Now, it will only merge if after the merge at least half of the
19842         slots are filled.
19843
19844         fixes 55885.
19845
19846 2004-03-20  Atsushi Enomoto  <atsushi@ximian.com>
19847
19848         * class.cs : csc build fix for GetMethods(). See bug #52503.
19849
19850 2004-03-20 Ben Maurer  <bmaurer@users.sourceforge.net>
19851
19852         * expression.cs: Make sure fp comparisons work with NaN.
19853         This fixes bug #54303. Mig approved this patch a long
19854         time ago, but we were not able to test b/c the runtime
19855         had a related bug.
19856
19857 2004-03-19  Miguel de Icaza  <miguel@ximian.com>
19858
19859         * ecore.cs (TypExpr.GetHashCode): implement this overload. 
19860
19861 2004-03-19  Martin Baulig  <martin@ximian.com>
19862
19863         * class.cs (MemberCore.IsDuplicateImplementation): Report the
19864         error here and not in our caller.
19865
19866 2004-03-19  Martin Baulig  <martin@ximian.com>
19867
19868         * interface.cs: Completely killed this file.
19869         (Interface): We're now a TypeContainer and live in class.cs.
19870
19871         * class.cs (TypeContainer.GetClassBases): Added `bool is_iface'
19872         argument; we're now also called for interfaces.
19873         (TypeContainer.DefineMembers): Allow this method being called
19874         multiple times.
19875         (TypeContainer.GetMethods): New public method; formerly known as
19876         Interface.GetMethod().  This is used by PendingImplementation.
19877         (TypeContainer.EmitDefaultMemberAttr): Moved here from Interface;
19878         it's now private and non-static.
19879         (Interface): Moved this here; it's now implemented similar to
19880         Class and Struct.
19881         (Method, Property, Event, Indexer): Added `bool is_interface'
19882         argument to their .ctor's.
19883         (MemberBase.IsInterface): New public field.
19884
19885         * cs-parser.jay: Create normal Method, Property, Event, Indexer
19886         instances instead of InterfaceMethod, InterfaceProperty, etc.
19887         (opt_interface_base): Removed; we now use `opt_class_base' instead.
19888         (InterfaceAccessorInfo): Create `Get' and `Set' Accessor's.
19889
19890 2004-03-19  Martin Baulig  <martin@ximian.com>
19891
19892         * class.cs (MethodCore.IsDuplicateImplementation): New private
19893         method which does the CS0111 checking.
19894         (Method.CheckBase, Constructor.CheckBase, PropertyBase.CheckBase):
19895         Use IsDuplicateImplementation().
19896
19897 2004-03-17 Ben Maurer  <bmaurer@users.sourceforge.net>
19898
19899         * decl.cs (FindMemberToOverride): New method to find the correct
19900         method or property to override in the base class.
19901         * class.cs
19902             - Make Method/Property use the above method to find the
19903               version in the base class.
19904             - Remove the InheritableMemberSignatureCompare as it is now
19905               dead code.
19906
19907         This patch makes large code bases much faster to compile, as it is
19908         O(n) rather than O(n^2) to do this validation.
19909
19910         Also, it fixes bug 52458 which is that nested classes are not
19911         taken into account when finding the base class member.
19912
19913         Reviewed/Approved by Martin.
19914
19915 2004-03-17  Marek Safar  <marek.safar@seznam.cz>
19916
19917         * interface.cs: In all interface classes removed redundant
19918         member initialization.
19919
19920 2004-03-16  Martin Baulig  <martin@ximian.com>
19921
19922         * class.cs (TypeContainer.GetClassBases): Fix the CS0528 check.
19923
19924 2004-03-15  Miguel de Icaza  <miguel@ximian.com>
19925
19926         * decl.cs (DefineTypeAndParents): New helper method to define a
19927         type's containers before the type itself is defined;  This is a
19928         bug exposed by the recent changes to Windows.Forms when an
19929         implemented interface was defined inside a class that had not been
19930         built yet.   
19931
19932         * modifiers.cs (MethodAttr): All methods in C# are HideBySig.
19933
19934         (Check): Loop correctly to report errors modifiers
19935         (UNSAFE was not in the loop, since it was the same as TOP).
19936
19937         * interface.cs: Every interface member now takes a ModFlags,
19938         instead of a "is_new" bool, which we set on the base MemberCore. 
19939
19940         Every place where we called "UnsafeOk" in the interface, now we
19941         call the proper member (InterfaceMethod.UnsafeOK) instead to get
19942         the unsafe settings from the member declaration instead of the
19943         container interface. 
19944
19945         * cs-parser.jay (opt_new): Allow unsafe here per the spec. 
19946
19947         * pending.cs (TypeAndMethods): Add `get_indexer_name' and
19948         `set_indexer_name' to the pending bits (one per type).
19949
19950         We fixed a bug today that was picking the wrong method to
19951         override, since for properties the existing InterfaceMethod code
19952         basically ignored the method name.  Now we make sure that the
19953         method name is one of the valid indexer names.
19954
19955 2004-03-14  Gustavo Giráldez  <gustavo.giraldez@gmx.net>
19956  
19957         * support.cs (SeekableStreamReader): Keep track of stream byte
19958         positions and don't mix them with character offsets to the buffer.
19959
19960         Patch from Gustavo Giráldez
19961
19962 2004-03-15  Marek Safar  <marek.safar@seznam.cz>
19963
19964         * interface.cs (InterfaceSetGetBase): Removed double member
19965         initialization, base class does it as well.
19966
19967 2004-03-13  Martin Baulig  <martin@ximian.com>
19968
19969         * class.cs: Reverted Miguel's latest commit; it makes mcs crash
19970         when compiling corlib.
19971
19972 2004-03-13  Miguel de Icaza  <miguel@ximian.com>
19973
19974         * convert.cs (ExplicitConversion): We were reporting an error on
19975         certain conversions (object_type source to a value type, when the
19976         expression was `null') before we had a chance to pass it through
19977         the user defined conversions.
19978
19979         * driver.cs: Replace / and \ in resource specifications to dots.
19980         Fixes 50752
19981
19982         * class.cs: Add check for duplicate operators.  Fixes 52477
19983
19984 2004-03-11  Miguel de Icaza  <miguel@ximian.com>
19985
19986         * statement.cs (Switch.SimpleSwitchEmit): Deal with default labels
19987         that are in the middle of the statements, not only at the end.
19988         Fixes #54987
19989
19990         * class.cs (TypeContainer.AddField): No longer set the
19991         `HaveStaticConstructor' flag, now we call it
19992         `UserDefineStaticConstructor' to diferentiate the slightly
19993         semantic difference.
19994
19995         The situation is that we were not adding BeforeFieldInit (from
19996         Modifiers.TypeAttr) to classes that could have it.
19997         BeforeFieldInit should be set to classes that have no static
19998         constructor. 
19999
20000         See:
20001
20002         http://www.yoda.arachsys.com/csharp/beforefieldinit.html
20003
20004         And most importantly Zoltan's comment:
20005
20006         http://bugzilla.ximian.com/show_bug.cgi?id=44229
20007
20008         "I think beforefieldinit means 'it's ok to initialize the type sometime 
20009          before its static fields are used', i.e. initialization does not need
20010          to be triggered by the first access to the type. Setting this flag
20011          helps the JIT to compile better code, since it can run the static
20012          constructor at JIT time, and does not need to generate code to call it
20013          (possibly lots of times) at runtime. Unfortunately, mcs does not set
20014          this flag for lots of classes like String. 
20015          
20016          csc sets this flag if the type does not have an explicit static 
20017          constructor. The reasoning seems to be that if there are only static
20018          initalizers for a type, and no static constructor, then the programmer
20019          does not care when this initialization happens, so beforefieldinit
20020          can be used.
20021          
20022          This bug prevents the AOT compiler from being usable, since it 
20023          generates so many calls to mono_runtime_class_init that the AOT code
20024          is much slower than the JITted code. The JITted code is faster, 
20025          because it does not generate these calls if the vtable is type is
20026          already initialized, which is true in the majority of cases. But the
20027          AOT compiler can't do this."
20028
20029 2004-03-10  Miguel de Icaza  <miguel@ximian.com>
20030
20031         * class.cs (MethodData.Emit): Refactor the code so symbolic
20032         information is generated for destructors;  For some reasons we
20033         were taking a code path that did not generate symbolic information
20034         before. 
20035
20036 2004-03-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20037
20038         * class.cs: Create a Constructor.CheckBase method that
20039         takes care of all validation type code. The method
20040         contains some code that was moved from Define.
20041
20042         It also includes new code that checks for duplicate ctors.
20043         This fixes bug #55148.
20044
20045 2004-03-09  Joshua Tauberer <tauberer@for.net>
20046
20047         * expression.cs (ArrayCreation): Fix: More than 6 nulls in
20048         a { ... }-style array creation invokes EmitStaticInitializers
20049         which is not good for reference-type arrays.  String, decimal
20050         and now null constants (NullCast) are not counted toward
20051         static initializers.
20052
20053 2004-03-05  Martin Baulig  <martin@ximian.com>
20054
20055         * location.cs (SourceFile.HasLineDirective): New public field;
20056         specifies whether the file contains or is referenced by a "#line"
20057         directive.
20058         (Location.DefineSymbolDocuments): Ignore source files which
20059         either contain or are referenced by a "#line" directive.        
20060
20061 2004-02-29  Ben Maurer <bmaurer@users.sourceforge.net>
20062
20063         * class.cs (Method.CheckBase): Avoid using FindMembers, we have
20064         direct access to our parent, so check the method inline there.
20065
20066 2004-02-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20067
20068         * expression.cs (Invocation.EmitCall): Miguel's last commit
20069         caused a regression. If you had:
20070
20071             T t = null;
20072             t.Foo ();
20073
20074         In Foo the implict this would be null.
20075
20076 2004-02-27  Miguel de Icaza  <miguel@ximian.com>
20077
20078         * expression.cs (Invocation.EmitCall): If the method is not
20079         virtual, do not emit a CallVirt to it, use Call.
20080
20081         * typemanager.cs (GetFullNameSignature): Improve the method to
20082         cope with ".ctor" and replace it with the type name.
20083
20084         * class.cs (ConstructorInitializer.Resolve): Now the method takes
20085         as an argument the ConstructorBuilder where it is being defined,
20086         to catch the recursive constructor invocations.
20087
20088 2004-02-26  Miguel de Icaza  <miguel@ximian.com>
20089
20090         * iterators.cs (IteratorHandler.IsIEnumerator, IsIEnumerable): New
20091         routines to check if a type is an enumerable/enumerator allow
20092         classes that implement the IEnumerable or IEnumerator interfaces.
20093
20094         * class.cs (Property, Operator): Implement IIteratorContainer, and
20095         implement SetYields.
20096
20097         (Property.Define): Do the block swapping for get_methods in the
20098         context of iterators.   We need to check if Properties also
20099         include indexers or not.
20100
20101         (Operator): Assign the Block before invoking the
20102         OperatorMethod.Define, so we can trigger the Iterator code
20103         replacement. 
20104
20105         * cs-parser.jay (SimpleIteratorContainer): new helper class.  Both
20106         Property and Operator classes are not created when we parse the
20107         declarator but until we have the block completed, so we use a
20108         singleton SimpleIteratorContainer.Simple to flag whether the
20109         SetYields has been invoked.
20110
20111         We propagate this setting then to the Property or the Operator to
20112         allow the `yield' to function.
20113
20114 2004-02-25  Marek Safar  <marek.safar@seznam.cz>
20115
20116         * codegen.cs: Implemented attribute support for modules.
20117         New AssemblyClass, ModuleClass and CommonAssemblyModulClass for
20118         Assembly/Module functionality.
20119
20120         * attribute.cs, class.cs, cs-parser.jay, delegate.cs, driver.cs, enum.cs
20121         interface.cs, rootcontext.cs, statement.cs, typemanager.cs:
20122         Updated dependencies on CodeGen.ModuleBuilder and CodeGen.AssemblyBuilder.
20123
20124 2004-02-16  Marek Safar  <marek.safar@seznam.cz>
20125
20126         * interface.cs (FindMembers): The operation is performed on all base
20127         interfaces and not only on the first. It is required for future CLS Compliance patch.
20128
20129 2004-02-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20130
20131         * statement.cs, codegen.cs:
20132         This patch deals with patterns such as:
20133
20134         public class List : IEnumerable {
20135
20136                 public MyEnumerator GetEnumerator () {
20137                         return new MyEnumerator(this);
20138                 }
20139
20140                 IEnumerator IEnumerable.GetEnumerator () {
20141                         ...
20142                 }
20143                 
20144                 public struct MyEnumerator : IEnumerator {
20145                         ...
20146                 }
20147         }
20148
20149         Before, there were a few things we did wrong:
20150         1) we would emit callvirt on a struct, which is illegal
20151         2) we emited ldarg when we needed to emit ldarga
20152         3) we would mistakenly call the interface methods on an enumerator
20153         type that derived from IEnumerator and was in another assembly. For example:
20154
20155         public class MyEnumerator : IEnumerator
20156
20157         Would have the interface methods called, even if there were public impls of the
20158         method. In a struct, this lead to invalid IL code.
20159
20160 2004-02-11  Marek Safar  <marek.safar@seznam.cz>
20161
20162         * const.cs: Const is now derived from FieldBase. Method EmitConstant name
20163           renamed to Emit.
20164
20165         * delegate.cs (Define): Fixed crash when delegate type is undefined.
20166
20167 2004-02-11  Miguel de Icaza  <miguel@ximian.com>
20168
20169         * cs-parser.jay: Fix small regression: we were not testing V2
20170         compiler features correctly.
20171
20172         * interface.cs: If the emit context is null, then create one
20173
20174 2004-02-09  Marek Safar  <marek.safar@seznam.cz>
20175
20176         * decl.cs (GetSignatureForError): New virtual method to get full name
20177           for error messages.
20178
20179         * attribute.cs (IAttributeSupport): New interface for attribute setting.
20180           Now it is possible to rewrite ApplyAttributes method to be less if/else.
20181
20182         * interface.cs : All InterfaceXXX classes are now derived from MemberCore.
20183           Duplicated members and code in these classes has been removed.
20184           Better encapsulation in these classes.
20185
20186 2004-02-07  Miguel de Icaza  <miguel@ximian.com>
20187
20188         * assign.cs (Assign.DoResolve): When dealing with compound
20189         assignments, there is a new rule in ECMA C# 2.4 (might have been
20190         there before, but it is documented here) that states that in:
20191
20192         a op= b;
20193
20194         If b is of type int, and the `op' is a shift-operator, then the
20195         above is evaluated as:
20196
20197         a = (int) a op b 
20198
20199         * expression.cs (Binary.ResolveOperator): Instead of testing for
20200         int/uint/long/ulong, try to implicitly convert to any of those
20201         types and use that in pointer arithmetic.
20202
20203         * delegate.cs (Error_NoMatchingMethodForDelegate): Compute the
20204         method to print information for from the type, not from the
20205         null-method we were given.
20206
20207 2004-02-01  Duncan Mak  <duncan@ximian.com>
20208
20209         * cs-tokenizer.cs (get_cmd_arg): Skip over whitespace before
20210         parsing for cmd, fixes bug #53694.
20211
20212 2004-02-04  Marek Safar  <marek.safar@seznam.cz>
20213
20214         * class.cs, decl.cs: Fixed problem where IndexerName attribute was ignored
20215         in the member name duplication tests. Property and operator name duplication
20216         was missing too (error tests cs0102-{2,3,4,5}.cs, cs0111-{3,4}.cs).
20217
20218 2004-02-03  Marek Safar  <marek.safar@seznam.cz>
20219
20220         * interface.cs (PopulateMethod): Fixed crash when interface method
20221         returns not existing type (error test cs0246-3.cs).
20222
20223 2004-02-02  Ravi Pratap M <ravi@ximian.com>
20224
20225         * cs-parser.jay (interface_accessors): Re-write actions to also
20226         store attributes attached to get and set methods. Fix spelling
20227         while at it.
20228
20229         (inteface_property_declaration): Modify accordingly.
20230
20231         (InterfaceAccessorInfo): New helper class to store information to pass
20232         around between rules that use interface_accessors.
20233
20234         * interface.cs (Emit): Apply attributes on the get and set
20235         accessors of properties and indexers too.
20236
20237         * attribute.cs (ApplyAttributes): Modify accordingly to use the
20238         right MethodBuilder when applying attributes to the get and set accessors.
20239
20240 2004-01-31  Miguel de Icaza  <miguel@ximian.com>
20241
20242         * cs-tokenizer.cs: Applied patch from Marek Safar to fix bug 53386
20243
20244 2004-01-26  Miguel de Icaza  <miguel@ximian.com>
20245
20246         * cs-tokenizer.cs: Handle #line hidden from PDC bits.
20247
20248 2004-01-25  Miguel de Icaza  <miguel@ximian.com>
20249
20250         * cs-parser.jay: Remove YIELD token, instead use the new grammar
20251         changes that treat `yield' specially when present before `break'
20252         or `return' tokens.
20253
20254         * cs-tokenizer.cs: yield is no longer a keyword.
20255
20256 2004-01-23  Marek Safar  <marek.safar@seznam.cz>
20257
20258         * cs-parser.jay, class.cs (DefineDefaultConstructor): Fixed ModFlags
20259         setting for default constructors.
20260         For default constructors are almost every time set wrong Modifier. The
20261         generated IL code has been alright. But inside mcs this values was
20262         wrong and this was reason why several of my CLS Compliance tests
20263         failed.
20264
20265 2004-01-22  Martin Baulig  <martin@ximian.com>
20266
20267         * cs-parser.jay (namespace_or_type_name): Return an Expression,
20268         not a QualifiedIdentifier.  This is what `type_name_expression'
20269         was previously doing.
20270         (type_name_expression): Removed; the code is now in
20271         `namespace_or_type_name'.
20272         (qualified_identifier): Removed, use `namespace_or_type_name'
20273         instead.
20274         (QualifiedIdentifier): Removed this class.      
20275
20276 2004-01-22  Martin Baulig  <martin@ximian.com>
20277
20278         * namespace.cs (NamespaceEntry.UsingAlias): Take an Expression,
20279         not a string as alias name.
20280
20281 2004-01-21  Miguel de Icaza  <miguel@ximian.com>
20282
20283         * ecore.cs (FieldInfo.AddressOf): Revert patch from previous
20284         #52730 bug, and instead compute correctly the need to use a
20285         temporary variable when requesting an address based on the
20286         static/instace modified of the field and the constructor.
20287  
20288 2004-01-21  Martin Baulig  <martin@ximian.com>
20289
20290         * ecore.cs (SimpleName.ResolveAsTypeStep): Lookup in the current
20291         class and namespace before looking up aliases.  Fixes #52517.
20292
20293 2004-01-21  Martin Baulig  <martin@ximian.com>
20294
20295         * flowanalysis.cs (UsageVector.Merge): Allow variables being
20296         assinged in a 'try'; fixes exception4.cs.
20297
20298 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20299         * class.cs : Implemented parameter-less constructor for TypeContainer
20300
20301         * decl.cs: Attributes are now stored here. New property OptAttributes
20302
20303         * delegate.cs, enum.cs, interface.cs: Removed attribute member.
20304
20305         * rootcontext.cs, tree.cs: Now use parameter-less constructor of TypeContainer
20306
20307 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20308
20309         * typemanager.cs (CSharpSignature): Now reports also inner class name.
20310           (CSharpSignature): New method for indexer and property signature.
20311
20312 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20313
20314         * pending.cs (IsVirtualFilter): Faster implementation.
20315
20316 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20317
20318         * typemanager.cs: Avoid inclusion of same assembly more than once.
20319
20320 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20321
20322         * cs-parser.jay: Fixed problem where the last assembly attribute
20323           has been applied also to following declaration (class, struct, etc.)
20324           
20325 2004-01-21  Marek Safar  <marek.safar@seznam.cz>
20326
20327         * class.cs: Added error CS0538, CS0539 reporting.
20328         Fixed crash on Microsoft runtime when field type is void.
20329
20330         * cs-parser.jay: Added error CS0537 reporting.
20331
20332         * pending.cs: Added error CS0535 reporting.
20333         Improved error report for errors CS0536, CS0534.
20334
20335 2004-01-20  Miguel de Icaza  <miguel@ximian.com>
20336
20337         Merge a few bits from the Anonymous Method MCS tree.
20338
20339         * statement.cs (ToplevelBlock): New class for toplevel methods,
20340         will hold anonymous methods, lifted variables.
20341
20342         * cs-parser.jay: Create toplevel blocks for delegates and for
20343         regular blocks of code. 
20344
20345 2004-01-20  Martin Baulig  <martin@ximian.com>
20346
20347         * codegen.cs (EmitContext): Removed `InTry', `InCatch',
20348         `InFinally', `InLoop', `TryCatchLevel', `LoopBeginTryCatchLevel'
20349         and `NeedExplicitReturn'; added `IsLastStatement'.
20350         (EmitContext.EmitTopBlock): Emit the explicit "ret" if we either
20351         have a `ReturnLabel' or we're not unreachable.
20352
20353         * flowanalysis.cs (FlowBranching.MergeChild): Actually merge the
20354         child's reachability; don't just override ours with it.  Fixes
20355         #58058 (lluis's example).
20356         (FlowBranching): Added public InTryOrCatch(), InCatch(),
20357         InFinally(), InLoop(), InSwitch() and
20358         BreakCrossesTryCatchBoundary() methods.
20359
20360         * statement.cs (Return): Do all error checking in Resolve().
20361         Unless we are the last statement in a top-level block, always
20362         create a return label and jump to it.
20363         (Break, Continue): Do all error checking in Resolve(); also make
20364         sure we aren't leaving a `finally'.
20365         (Block.DoEmit): Set `ec.IsLastStatement' when emitting the last
20366         statement in a top-level block.
20367         (Block.Flags): Added `IsDestructor'.
20368         (Block.IsDestructor): New public property.
20369
20370 2004-01-20  Martin Baulig  <martin@ximian.com>
20371
20372         * statement.cs (Break.DoEmit): Set ec.NeedExplicitReturn; fixes #52427.
20373
20374 2004-01-20  Martin Baulig  <martin@ximian.com>
20375
20376         * statement.cs (Statement.ResolveUnreachable): New public method.
20377         (If, While): Do the dead-code elimination in Resolve(), not in Emit().
20378         (Block.Resolve): Resolve unreachable statements.
20379
20380 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20381
20382         * expression.cs: We need to fix the case where we do
20383         not have a temp variable here.
20384
20385         * assign.cs: Only expression compound assignments need
20386         temporary variables.
20387
20388 2004-01-19 Ben Maurer  <bmaurer@users.sourceforge.net>
20389
20390         * flowanalysis.cs: Reduce memory allocation in a few ways:
20391           - A block with no variables should not allocate a bit
20392             vector for itself.
20393           - A method with no out parameters does not need any tracking
20394             for assignment of the parameters, so we need not allocate
20395             any data for it.
20396           - The arrays:
20397                 public readonly Type[] VariableTypes;
20398                 public readonly string[] VariableNames;
20399             Are redundant. The data is already stored in the variable
20400             map, so we need not allocate another array for it.
20401           - We need to add alot of checks for if (params | locals) == null
20402             due to the first two changes.
20403
20404 2004-01-18  Miguel de Icaza  <miguel@ximian.com>
20405
20406         * ecore.cs (FieldExpr.AddressOf): For ValueTypes that do not
20407         implement IMemoryLocation, we store a copy on a local variable and
20408         take the address of it.  Patch from Benjamin Jemlich
20409
20410         * cs-parser.jay: Applied patch from Ben Maurer to the "type" rule
20411         to use a special "type_name_expression" rule which reduces the
20412         number of "QualifiedIdentifier" classes created, and instead
20413         directly creates MemberAccess expressions.
20414
20415 2004-01-17  Miguel de Icaza  <miguel@ximian.com>
20416
20417         * convert.cs: Applied patch from Benjamin Jemlich (pcgod@gmx.net)
20418         that fixes #52853.  Null literal assignment to ValueType
20419
20420         * class.cs (MethodData.Emit): Instead of checking the name of the
20421         method to determine if its a destructor, create a new derived
20422         class from Method called Destructor, and test for that.  
20423
20424         * cs-parser.jay: Create a Destructor object instead of a Method.  
20425
20426         Based on a fix from Benjamin Jemlich (pcgod@gmx.net)
20427
20428         Fixes: 52933
20429
20430 2004-01-16  Miguel de Icaza  <miguel@ximian.com>
20431
20432         * expression.cs (Binary.ResolveOperator): Perform an implicit
20433         conversion from MethodGroups to their delegate types on the
20434         Addition operation.
20435
20436         * delegate.cs: Introduce a new class DelegateCreation that is the
20437         base class for `NewDelegate' and `ImplicitDelegateCreation',
20438         factor some code in here.
20439
20440         * convert.cs (Convert.ImplicitConversionStandard): Add an implicit
20441         conversion from MethodGroups to compatible delegate types. 
20442
20443         * ecore.cs (Expression.Resolve): Do not flag error 654
20444         (Methodgroupd needs parenthesis) if running on the V2 compiler, as
20445         we allow conversions from MethodGroups to delegate types now.
20446
20447         * assign.cs (Assign.DoResolve): Do not flag errors on methodgroup
20448         assignments in v2 either.
20449
20450 2004-01-10  Miguel de Icaza  <miguel@ximian.com>
20451
20452         * ecore.cs (FieldExpr.AddressOf): Fix generated IL for accessing
20453         static read-only fields in ctors.
20454
20455         Applied patch from Benjamin Jemlich 
20456
20457         * expression.cs (UnaryMutator): Avoid leaking local variables. 
20458
20459 2004-01-09  Miguel de Icaza  <miguel@ximian.com>
20460
20461         * cs-tokenizer.cs (IsCastToken): Allow the various native types
20462         here to return true, as they can be used like this:
20463
20464                 (XXX) int.MEMBER ()
20465
20466         Fixed 49836 and all the other dups
20467
20468 2004-01-09  Zoltan Varga  <vargaz@freemail.hu>
20469
20470         * driver.cs: Implement /win32res and /win32icon.
20471
20472 2004-01-08  Miguel de Icaza  <miguel@ximian.com>
20473
20474         * cs-parser.jay: Add a rule to improve error handling for the
20475         common mistake of placing modifiers after the type.
20476
20477 2004-01-07  Miguel de Icaza  <miguel@ximian.com>
20478
20479         * cs-parser.jay (interface_event_declaration): Catch
20480         initialization of events on interfaces, and report cs0068
20481
20482         * cs-parser.jay (interface_event_declaration): Catch
20483         initialization of events. 
20484
20485         * ecore.cs: Better report missing constructors.
20486
20487         * expression.cs (Binary.ResolveOperator): My previous bug fix had
20488         the error reporting done in the wrong place.  Fix.
20489
20490         * expression.cs (Binary.ResolveOperator): Catch the 
20491         operator + (E x, E y) error earlier, and later allow for implicit
20492         conversions in operator +/- (E e, U x) from U to the underlying
20493         type of E.
20494
20495         * class.cs (TypeContainer.DefineDefaultConstructor): Fix bug
20496         52596, if the container class is abstract, the default constructor
20497         is protected otherwise its public (before, we were always public).
20498
20499         * statement.cs (Fixed.Resolve): Catch a couple more errors in the
20500         fixed statement.
20501
20502         (Using.EmitLocalVariableDecls): Applied patch from Benjamin
20503         Jemlich that fixes bug #52597, MCS was generating invalid code for
20504         idisposable structs.   Thanks to Ben for following up with this
20505         bug as well.
20506
20507 2004-01-06  Miguel de Icaza  <miguel@ximian.com>
20508
20509         * driver.cs: Allow assemblies without code to be generated, fixes
20510         52230.
20511
20512 2004-01-07  Nick Drochak <ndrochak@gol.com>
20513
20514         * attribute.cs: Remove unneeded catch variables. Eliminates a warning.
20515
20516 2004-01-05  Miguel de Icaza  <miguel@ximian.com>
20517
20518         * cs-parser.jay: Add rules to improve error reporting if fields or
20519         methods are declared at the namespace level (error 116)
20520
20521         * Add rules to catch event add/remove
20522
20523 2004-01-04  David Sheldon <dave-mono@earth.li>
20524
20525   * expression.cs: Added matching ")" to error message for 
20526   CS0077
20527
20528 2004-01-03 Todd Berman <tberman@gentoo.org>
20529
20530         * ecore.cs, attribute.cs:
20531         Applying fix from #52429.
20532
20533 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20534
20535         * ecore.cs, expression.cs, statement.cs:
20536         Total rewrite of how we handle branching. We
20537         now handle complex boolean expressions with fewer
20538         jumps. As well if (x == 0) no longer emits a ceq.
20539
20540         if (x is Foo) is much faster now, because we generate
20541         better code.
20542
20543         Overall, we get a pretty big improvement on our benchmark
20544         tests. The code we generate is smaller and more readable.
20545
20546         I did a full two-stage bootstrap. The patch was reviewed
20547         by Martin and Miguel.
20548
20549 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20550
20551         * cs-parser.jay: Make primary_expression not take a QI.
20552         we dont need this because the member_access rule covers
20553         us here. So we replace the rule with just IDENTIFIER.
20554
20555         This has two good effects. First, we remove a s/r conflict.
20556         Second, we allocate many fewer QualifiedIdentifier objects.
20557
20558 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20559
20560         * attribute.cs: Handle MarshalAs attributes as pseudo, and
20561         set the correct information via SRE. This prevents
20562         hanging on the MS runtime. Fixes #29374.
20563
20564 2004-01-03 Ben Maurer  <bmaurer@users.sourceforge.net>
20565
20566         * convert.cs: correctly handle conversions to value types
20567         from Enum and ValueType as unboxing conversions.
20568
20569         Fixes bug #52569. Patch by Benjamin Jemlich.
20570
20571 2004-01-02  Ravi Pratap  <ravi@ximian.com>
20572
20573         * expression.cs (BetterConversion): Prefer int -> uint
20574         over int -> ulong (csc's behaviour). This fixed bug #52046.
20575
20576 2004-01-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20577
20578         * decl.cs (MemberCache.FindMembers): now returns a
20579         MemberInfo [].
20580
20581         * typemanager.cs: In general, go with with ^^.
20582         (CopyNewMethods): take an IList.
20583         (RealMemberLookup): Only allocate an arraylist
20584         if we copy from two sets of methods.
20585
20586         This change basically does two things:
20587         1) Fewer array lists allocated due to CopyNewMethods.
20588         2) the explicit cast in MemberList costed ALOT.
20589
20590 2004-01-02  Zoltan Varga  <vargaz@freemail.hu>
20591
20592         * cs-tokenizer.cs (consume_identifier) driver.cs: Cache identifiers in
20593         a hashtable to avoid needless string allocations when an identifier is
20594         used more than once (the common case).
20595
20596 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20597
20598         * pending.cs: MS's TypeBuilder.GetInterfaces ()
20599         is broken, it will not return anything. So, we
20600         have to use the information we have in mcs to
20601         do the task.
20602
20603         * typemanager.cs: Add a cache for GetInterfaces,
20604         since this will now be used more often (due to ^^)
20605
20606         (GetExplicitInterfaces) New method that gets the
20607         declared, not effective, interfaces on a type
20608         builder (eg, if you have interface IFoo, interface
20609         IBar, Foo : IFoo, Bar : Foo, IBar, GetExplInt (Bar) ==
20610         { IBar }.
20611
20612         This patch makes MCS able to bootstrap itself on
20613         Windows again.
20614
20615 2004-01-01 Ben Maurer  <bmaurer@users.sourceforge.net>
20616
20617         * expression.cs: Remove the Nop's that Miguel put
20618         in by mistake.
20619
20620 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20621
20622         * report.cs, codegen.cs: Give the real stack trace to
20623         the error when an exception is thrown.
20624
20625 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20626
20627         * decl.cs: only allocate hashtables for ifaces if 
20628         it is an iface!
20629
20630 2003-12-31 Ben Maurer  <bmaurer@users.sourceforge.net>
20631
20632         * expression.cs: fix the error from cs0121-2.cs
20633         (a parent interface has two child interfaces that
20634         have a function with the same name and 0 params
20635         and the function is called through the parent).
20636
20637 2003-12-30 Ben Maurer  <bmaurer@users.sourceforge.net>
20638
20639         * class.cs, rootcontext.cs, typmanager.cs: do not
20640         leak pointers.
20641
20642 2003-12-28 Ben Maurer  <bmaurer@users.sourceforge.net>
20643
20644         * codegen.cs: remove stack for the ec flow branching.
20645         It is already a linked list, so no need.
20646
20647 2003-12-27 Ben Maurer  <bmaurer@users.sourceforge.net>
20648
20649         * Makefile: Allow custom profiler here.
20650
20651 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20652
20653         * typemanager.cs (LookupType):
20654           - Use a static char [], because split takes
20655             a param array for args, so it was allocating
20656             every time.
20657           - Do not store true in a hashtable, it boxes.
20658
20659 2003-12-26 Ben Maurer  <bmaurer@users.sourceforge.net>
20660
20661         * flowanalysis.cs: bytify common enums.
20662
20663 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20664
20665         * modifiers.cs: Add a new set of flags for the
20666         flags allowed on explicit interface impls.
20667         * cs-parser.jay: catch the use of modifiers in
20668         interfaces correctly.
20669         * class.cs: catch private void IFoo.Blah ().
20670
20671         All related to bug #50572.
20672
20673 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20674
20675         * decl.cs: Rewrite the consistant accessability checking.
20676         Accessability is not linear, it must be implemented in
20677         a tableish way. Fixes #49704.
20678
20679 2003-12-25 Ben Maurer  <bmaurer@users.sourceforge.net>
20680
20681         * expression.cs: Handle negation in a checked context.
20682         We must use subtraction from zero. Fixes #38674.
20683
20684 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20685
20686         * class.cs: Ignore static void main in DLLs.
20687         * rootcontext.cs: Handle the target type here,
20688         since we are have to access it from class.cs
20689         * driver.cs: account for the above.
20690
20691 2003-12-23 Ben Maurer  <bmaurer@users.sourceforge.net>
20692
20693         * report.cs: Give line numbers and files if available.
20694
20695 2003-12-20  Zoltan Varga  <vargaz@freemail.hu>
20696
20697         * driver.cs: Implement /addmodule.
20698
20699         * typemanager.cs:  Change 'modules' field so it now contains Modules not
20700         ModuleBuilders.
20701
20702 2003-12-20  Martin Baulig  <martin@ximian.com>
20703
20704         * class.cs (TypeContainer.DefineMembers): Don't do the CS0649 check here.
20705         (FieldBase.IsAssigned): Removed this field.
20706         (FieldBase.SetAssigned): New public method.
20707         (TypeContainer.Emit): Make the CS0169/CS0649 checks actually work.
20708
20709 2003-12-20  Martin Baulig  <martin@ximian.com>
20710
20711         * expression.cs (LocalVariableReference.DoResolve): Don't set
20712         `vi.Used' if we're called from DoResolveLValue().
20713
20714         * statement.cs (Block.DoResolve): `ec.DoEndFlowBranching()' now
20715         returns the usage vector it just merged into the current one -
20716         pass this one to UsageWarning().
20717         (Block.UsageWarning): Take the `FlowBranching.UsageVector' instead
20718         of the `EmitContext', don't call this recursively on our children.
20719
20720 2003-12-19  Zoltan Varga  <vargaz@freemail.hu>
20721
20722         * driver.cs: Implement /target:module.
20723
20724 2003-12-18  Zoltan Varga  <vargaz@freemail.hu>
20725
20726         * support.cs (CharArrayHashtable): New helper class.
20727
20728         * cs-tokenizer.cs: Store keywords in a hashtable indexed by 
20729         char arrays, not strings, so we can avoid creating a string in
20730         consume_identifier if the identifier is a keyword.
20731
20732 2003-12-16  Martin Baulig  <martin@ximian.com>
20733
20734         * statement.cs (LocalInfo.Assigned): Removed this property.
20735         (LocalInfo.Flags): Removed `Assigned'.
20736         (LocalInfo.IsAssigned): New public method; takes the EmitContext
20737         and uses flow analysis.
20738         (Block.UsageWarning): Made this method private.
20739         (Block.Resolve): Call UsageWarning() if appropriate.
20740
20741         * expression.cs (LocalVariableReference.DoResolve): Always set
20742         LocalInfo.Used here.
20743
20744 2003-12-13  Martin Baulig  <martin@ximian.com>
20745
20746         * statement.cs (Statement.DoEmit, Statement.Emit): Don't return
20747         any value here; we're now using flow analysis to figure out
20748         whether a statement/block returns a value.
20749
20750 2003-12-13  Martin Baulig  <martin@ximian.com>
20751
20752         * flowanalysis.cs (UsageVector.MergeFinallyOrigins): Made this
20753         working again.
20754         (FlowBranching.MergeFinally): Don't call
20755         `branching.CheckOutParameters()' here, this is called in
20756         MergeTopBlock().
20757         (FlowBranchingException.AddSibling): Call MergeFinallyOrigins()
20758         when adding the `finally' vector.       
20759
20760 2003-12-13  Martin Baulig  <martin@ximian.com>
20761
20762         * flowanalysis.cs
20763         (UsageVector.MergeJumpOrigins, FlowBranching.Label): Make this
20764         actually work and also fix #48962.
20765
20766 2003-12-12 Ben Maurer  <bmaurer@users.sourceforge.net>
20767
20768         * decl.cs: Do not check System.Object for nested types,
20769         since we know it does not have any. Big bang for buck:
20770
20771         BEFORE:
20772            Run 1:   8.35 seconds
20773            Run 2:   8.32 seconds
20774            corlib:  17.99 seconds
20775         AFTER:
20776            Run 1:   8.17 seconds
20777            Run 2:   8.17 seconds
20778            corlib:  17.39 seconds
20779
20780 2003-12-11 Ben Maurer  <bmaurer@users.sourceforge.net>
20781
20782         * class.cs (FindMembers): Allocate arraylists on demand. Most of the
20783         time we are returning 0 members, so we save alot here.
20784
20785 2003-12-11  Martin Baulig  <martin@ximian.com>
20786
20787         * flowanalysis.cs (UsageVector.MergeResult): Renamed this back to
20788         `MergeChild()', also just take the `FlowBranching' as argument;
20789         call Merge() on it and return the result.
20790         (FlowBranching.Merge): We don't need to do anything if we just
20791         have one sibling.
20792
20793 2003-12-11  Martin Baulig  <martin@ximian.com>
20794
20795         * flowanalysis.cs: Use a list of `UsageVector's instead of storing
20796         them in an `ArrayList' to reduce memory usage.  Thanks to Ben
20797         Maurer for this idea.
20798
20799 2003-12-11  Martin Baulig  <martin@ximian.com>
20800
20801         * flowanalysis.cs (MergeResult): This class is now gone; we now
20802         use the `UsageVector' for this.  The reason for this is that if a
20803         branching just has one sibling, we don't need to "merge" them at
20804         all - that's the next step to do.
20805         (FlowBranching.Merge): We now return a `UsageVector' instead of a
20806         `MergeResult'.
20807
20808 2003-12-11  Martin Baulig  <martin@ximian.com>
20809
20810         Reworked flow analyis and made it more precise and bug-free.  The
20811         most important change is that we're now using a special `Reachability'
20812         class instead of having "magic" meanings of `FlowReturns'.  I'll
20813         do some more cleanups and optimizations and also add some more
20814         documentation this week.
20815
20816         * flowanalysis.cs (Reachability): Added `Throws' and `Barrier';
20817         largely reworked this class.
20818         (FlowReturns): Removed `Unreachable' and `Exception'; we now use
20819         the new `Reachability' class instead of having "magic" values here.
20820         (FlowBranching): We're now using an instance of `Reachability'
20821         instead of having separate `Returns', `Breaks' etc. fields.
20822
20823         * codegen.cs (EmitContext.EmitTopBlock): Set `has_ret' solely
20824         based on flow analysis; ignore the return value of block.Emit ().
20825
20826 2003-12-10  Zoltan Varga  <vargaz@freemail.hu>
20827
20828         * driver.cs typemanager.cs: Find the mono extensions to corlib even
20829         if they are private.
20830
20831 2003-12-09  Martin Baulig  <martin@ximian.com>
20832
20833         * flowanalyis.cs (FlowBranching.Return, Goto, Throw): Removed;
20834         call them directly on the UsageVector.
20835
20836 2003-12-09  Martin Baulig  <martin@ximian.com>
20837
20838         * flowanalysis.cs (FlowBranching.MergeChild, MergeTopBlock):
20839         Changed return type from `FlowReturns' to `Reachability'.
20840
20841 2003-12-09  Martin Baulig  <martin@ximian.com>
20842
20843         * flowanalysis.cs (FlowBranching.Reachability): New sealed class.
20844         (FlowBranching.MergeResult): Replaced the `Returns', `Breaks' and
20845         `Reachable' fields with a single `Reachability' one.
20846
20847 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20848
20849         * class.cs (FindMembers): Remove foreach's.
20850
20851         Bootstrap times:
20852
20853         BEFORE
20854                 Run 1:   8.74 seconds
20855                 Run 2:   8.71 seconds
20856
20857         AFTER
20858                 Run 1:   8.64 seconds
20859                 Run 2:   8.58 seconds
20860
20861
20862 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20863
20864         * cs-parser.jay:
20865         * gen-treedump.cs:
20866         * statement.cs:
20867         This patch does a few things:
20868                 1. EmptyStatement is now a singleton, so it is never reallocated.
20869                 2. All blah is EmptyStatement constructs have been changed to
20870                    blah == EmptyStatement.Value, which is much faster and valid
20871                    now that EmptyStatement is a singleton.
20872                 3. When resolving a block, rather than allocating a new array for
20873                    the non-empty statements, empty statements are replaced with
20874                    EmptyStatement.Value
20875                 4. Some recursive functions have been made non-recursive.
20876         Mainly the performance impact is from (3), however (1) and (2) are needed for
20877         this to work. (4) does not make a big difference in normal situations, however
20878         it makes the profile look saner.
20879
20880         Bootstrap times:
20881
20882         BEFORE
20883         9.25user 0.23system 0:10.28elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20884         9.34user 0.13system 0:10.23elapsed 92%CPU (0avgtext+0avgdata 0maxresident)k
20885         Total memory allocated: 56397 KB
20886
20887         AFTER
20888         9.13user 0.09system 0:09.64elapsed 95%CPU (0avgtext+0avgdata 0maxresident)k
20889         8.96user 0.24system 0:10.13elapsed 90%CPU (0avgtext+0avgdata 0maxresident)k
20890         Total memory allocated: 55666 KB
20891
20892 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20893
20894         * support.cs: Rewrite DoubleHash to use its own impl. Is faster
20895         than the hashtable in a hashtable version
20896
20897         * decl.cs: Right now, whenever we try to lookup a type inside a namespace,
20898         we always end up concating a string. This results in a huge perf
20899         loss, because many strings have to be tracked by the GC. In this
20900         patch, we first use a hashtable that works with two keys, so that
20901         the strings do not need to be concat'ed.
20902
20903         Bootstrap times:
20904         BEFORE
20905                 Run 1:   8.74 seconds
20906                 Run 2:   8.71 seconds
20907
20908         AFTER
20909                 Run 1:   8.65 seconds
20910                 Run 2:   8.56 seconds
20911
20912 2003-12-08 Ben Maurer  <bmaurer@users.sourceforge.net>
20913
20914         * Makefile: Add a new target `do-time' that does a quick and simple
20915         profile, leaving easy to parse output.
20916
20917 2003-12-08  Zoltan Varga  <vargaz@freemail.hu>
20918
20919         * codegen.cs (Init): Create the dynamic assembly with 
20920         AssemblyBuilderAccess.Save, to enable some optimizations in the runtime.
20921
20922 2003-12-02 Ben Maurer  <bmaurer@users.sourceforge.net>
20923
20924         * support.cs: Make the PtrHashtable use only one
20925         instance of its comparer.
20926
20927 2003-11-30  Zoltan Varga  <vargaz@freemail.hu>
20928
20929         * typemanager.cs: Fix lookup of GetNamespaces.
20930
20931 2003-11-29  Miguel de Icaza  <miguel@ximian.com>
20932
20933         * expression.cs: Removed redundant line.
20934
20935         * statement.cs (Block.Resolve, Block.Emit): Avoid foreach on
20936         ArrayLists, use for loops with bounds.  
20937
20938         * flowanalysis.cs (FlowBranching.Merge): Avoid foreach on
20939         arraylist.
20940
20941         * expression.cs (Invocation.OverloadResolve): Avoid foreach on
20942         arraylists, use for loop with bounds.
20943
20944         The above three changes give us a 0.071 second performance
20945         improvement out of 3.294 seconds down to 3.223.  On my machine
20946         the above changes reduced the memory usage by 1,387 KB during
20947         compiler bootstrap.
20948
20949         * cs-parser.jay (QualifiedIdentifier): New class used to represent
20950         QualifiedIdentifiers.  Before we created a new string through
20951         concatenation, and mostly later on, the result would be
20952         manipulated by DecomposeQI through string manipulation.
20953
20954         This reduced the compiler memory usage for bootstrapping from
20955         59380 KB to 59007 KB on my machine, 373 KB, and also reduced the
20956         compile times in 0.05 seconds.
20957
20958 2003-11-28  Dick Porter  <dick@ximian.com>
20959
20960         * support.cs: Do string compares with the Invariant culture.
20961
20962         * rootcontext.cs: 
20963         * gen-treedump.cs: 
20964         * expression.cs: 
20965         * driver.cs: 
20966         * decl.cs: 
20967         * codegen.cs: 
20968         * class.cs: Use the char forms of IndexOf and LastIndexOf, so that
20969         the comparison is done with the Invariant culture.
20970
20971 2003-11-27  Miguel de Icaza  <miguel@ximian.com>
20972
20973         * statement.cs (Foreach.TryType): Use DeclaredOnly to find the
20974         GetEnumerator method.
20975
20976         (ProbeCollectionType): Iterate starting at the most specific type
20977         upwards looking for a GetEnumerator
20978
20979         * expression.cs: Shift count can be up to 31 for int/uint and 63
20980         for long/ulong.
20981
20982 2003-11-26  Miguel de Icaza  <miguel@ximian.com>
20983
20984         * statement.cs (Block.LookupLabel): Also look for the label on the
20985         children blocks.  Use a hash table to keep track of visited
20986         nodes. 
20987
20988         * cfold.cs (IntConstant to UIntConstant mapping): Only return if
20989         we actually did transform the other operand, otherwise fall back
20990         to the common codepath that casts to long.
20991
20992         * cs-tokenizer.cs: Use the same code pattern as the int case.
20993         Maybe I should do the parsing myself, and avoid depending on the
20994         Parse routines to get this done.
20995
20996 2003-11-25  Miguel de Icaza  <miguel@ximian.com>
20997
20998         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
20999         which fixes bug 51347.  This time test it.
21000
21001         * expression.cs: Make TypeOfVoid derive from TypeOf, so code in
21002         attributes for example can not tell the difference between these.
21003         The difference was only a syntax feature of the language. 
21004
21005         * attribute.cs: Apply attributes to delegates.
21006
21007         * delegate.cs: Call the apply attributes method.
21008
21009 2003-11-24  Miguel de Icaza  <miguel@ximian.com>
21010
21011         * convert.cs (TryImplicitIntConversion): One line bug fix: we were
21012         comparing 0 vs Byte.MinValue, not the value
21013
21014         (ImplicitConversionRequired): When reporting a conversion error,
21015         use error 31 to print out the constant error instead of the
21016         simpler 29.
21017
21018         * expression.cs: Apply fix from l_m@pacbell.net (Laurent Morichetti),  
21019         which fixes bug 51347.
21020
21021 2003-11-22  Miguel de Icaza  <miguel@ximian.com>
21022
21023         * driver.cs: Applied patch from gert.driesen@pandora.be (Gert Driesen) 
21024         which fixes the -warnaserror command line option.
21025
21026 2003-11-21  Miguel de Icaza  <miguel@ximian.com>
21027
21028         * cfold.cs (DoNumericPromotions): During constant folding of
21029         additions on UIntConstant, special case intconstants with
21030         IntConstants like we do on the expression binary operator. 
21031
21032 2003-11-12  Miguel de Icaza  <miguel@ximian.com>
21033
21034         * convert.cs (ImplicitReferenceConversion): We were missing a case
21035         (System.Enum are not value types or class types, so we need to
21036         classify them separatedly).
21037
21038         * driver.cs: We do not support error 2007.
21039
21040 2003-11-12 Jackson Harper <jackson@ximian.com>
21041
21042         * driver.cs: Use corlib.dll or mscorlib.dll when looking up the
21043         system directory. Also use the full file name so users can
21044         libraries names mscorlib-o-tron.dll in a non system dir.
21045
21046 2003-11-10  Martin Baulig  <martin@ximian.com>
21047
21048         * typemanager.cs (TypeManager.ResolveExpressionTypes): Removed.
21049         (TypeManager.InitCoreTypes): Initialize them here, but instead of
21050         calling `ResolveType()' on them, directly assign their `Type'.
21051
21052 2003-11-08  Martin Baulig  <martin@ximian.com>
21053
21054         * class.cs (TypeContainer.GetClassBases): Use TypeExpr's for the
21055         return value and the `out parent' parameter.
21056         (TypeContainer.DefineType): Moved the CS0644 check into
21057         GetClassBases().  Don't pass the interface types to the
21058         `builder.DefineType()'/`builder.DefineNestedType()', but resolve
21059         them later and then call `TypeBuilder.AddInterfaceImplementation()'.
21060
21061         * ecore.cs (TypeExpr.IsAttribute): New property.
21062         (TypeExpr.GetInterfaces): New method.
21063
21064         * interface.cs (Interface.GetInterfaceTypeByName): Return a
21065         TypeExpr instead of a Type.
21066         (Interface.GetInterfaceBases): Return TypeExpr's instead of Type's.
21067         (Interface.DefineType): Don't pass the interface types to the
21068         `builder.Definetype()'/`builder.DefineNestedType()', but resolve
21069         them later and then call `TypeBulider.AddInterfaceImplementation()'.
21070
21071         * typemanager.cs (TypeManager.AddUserType): Take a `TypeExpr[]'
21072         instead of a `Type[]'.
21073         (TypeManager.RegisterBuilder): Likewise.
21074         (TypeManager.AddUserInterface): Likewise.
21075         (TypeManager.ExpandInterfaces): Take a `Type[]' instead of a
21076         `Type[]' and also return a `TypeExpr[]'.
21077         (TypeManager.GetInterfaces): Return a `TypeExpr[]'.
21078
21079 2003-11-08  Martin Baulig  <martin@ximian.com>
21080
21081         * decl.cs (DeclSpace.ResolveTypeExpr): Return a TypeExpr, not an
21082         Expression.     
21083
21084 2003-11-08  Martin Baulig  <martin@ximian.com>
21085
21086         * decl.cs (DeclSpace.GetTypeResolveEmitContext): Call
21087         TypeManager.ResolveExpressionTypes().
21088
21089         * ecore.cs (Expression.ResolveAsTypeTerminal): Return a TypeExpr
21090         instead of an Expression.
21091         (TypeExpr): This is now an abstract base class for `TypeExpression'.
21092         (TypeExpression): New public class; formerly known as `TypeExpr'.
21093
21094         * expression.cs (ComposedCast): Derive from TypeExpr.
21095
21096         * typemanager.cs (TypeManager.system_*_expr): These are now
21097         TypExpr's instead of Expression's.
21098         (TypeManager.ResolveExpressionTypes): New public static function;
21099         called from DeclSpace.GetTypeResolveEmitContext() to resolve all
21100         of them.        
21101
21102 2003-11-06  Miguel de Icaza  <miguel@ximian.com>
21103
21104         * expression.cs (New.DoResolve): Do not dereference value that
21105         might be a null return.
21106
21107         * statement.cs (Block.EmitMeta): Use the Const.ChangeType to make
21108         sure that the constant value has the right type.  Fixes an
21109         unreported bug, similar to 50425.
21110
21111         * const.cs (Const.LookupConstantValue): Call
21112         ImplicitStandardConversionExists before doing a conversion to
21113         avoid havng the TypeManager.ChangeType do conversions.
21114
21115         Reduced the number of casts used
21116
21117         (Const.ChangeType): New routine to enable reuse of the constant
21118         type changing code from statement.
21119
21120         * typemanager.cs (ChangeType): Move common initialization to
21121         static global variables.
21122
21123         Fixes #50425.
21124
21125         * convert.cs (ImplicitReferenceConversion): Somehow we allowed
21126         every value type to go through, even if it was void.  Fix that. 
21127
21128         * cs-tokenizer.cs: Use is_identifier_start_character on the start
21129         character of the define, and the is_identifier_part_character for
21130         the rest of the string.
21131
21132 2003-11-05  Miguel de Icaza  <miguel@ximian.com>
21133
21134         * expression.cs (UnaryMutator.EmitCode): When I updated
21135         LocalVariableReference.DoResolve, I overdid it, and dropped an
21136         optimization done on local variable references.
21137
21138 2003-11-04  Miguel de Icaza  <miguel@ximian.com>
21139
21140         * ecore.cs: Convert the return from Ldlen into an int.
21141
21142 2003-10-20  Miguel de Icaza  <miguel@ximian.com>
21143
21144         * decl.cs (DeclSpace.GetAccessLevel): Handle NotPublic case for
21145         the accessibility, this is a special case for toplevel non-public
21146         classes (internal for instance).
21147
21148 2003-10-20  Nick Drochak <ndrochak@gol.com>
21149
21150         * ecore.cs: Fix typo and build.  Needed another right paren.
21151
21152 2003-10-19  Miguel de Icaza  <miguel@ximian.com>
21153
21154         * ecore.cs: Applied fix from Ben Maurer.   We were handling in the
21155         `internal' case regular and protected, but not allowing protected
21156         to be evaluated later.  Bug 49840
21157
21158 2003-10-15  Miguel de Icaza  <miguel@ximian.com>
21159
21160         * statement.cs (Switch.TableSwitchEmit): Compare the upper bound
21161         to kb.Nlast, and not the kb.nFirst to isolate the switch
21162         statement.
21163
21164         Extract the underlying type, so enumerations of long/ulong are
21165         treated like long/ulong.
21166
21167 2003-10-14  Miguel de Icaza  <miguel@ximian.com>
21168
21169         * expression.cs (New): Overload the meaning of RequestedType to
21170         track the possible creation of the NewDelegate type, since
21171         DoResolve is invoked more than once for new constructors on field
21172         initialization.
21173
21174         See bugs: #48800 and #37014
21175
21176         * cs-parser.jay (declare_local_constants): Take an arraylist
21177         instead of a single constant.
21178
21179         (local_constant_declaration): It should take a
21180         constant_declarators, not a constant_declarator.  Fixes 49487
21181
21182         * convert.cs: Fix error report.
21183
21184 2003-10-13 Jackson Harper <jackson@ximian.com>
21185
21186         * typemanager.cs (TypeToCoreType): Add float and double this fixes
21187         bug #49611
21188
21189 2003-10-09  Martin Baulig  <martin@ximian.com>
21190
21191         * class.cs (MethodCore): Added additional `DeclSpace ds' argument
21192         to the .ctor.
21193         (MethodCore.DoDefineParameters): Removed the TypeContainer
21194         argument; use the DeclSpace which was passed to the .ctor instead.
21195         (MethodCore.CheckParameter): Take a DeclSpace instead of a
21196         TypeContainer; we only need a DeclSpace here.
21197
21198 2003-10-09  Martin Baulig  <martin@ximian.com>
21199
21200         * class.cs (MethodData): Added additional `DeclSpace ds' argument
21201         to the .ctor.
21202         (MethodData.Define, MethodData.Emit): Pass the `ds' to the
21203         EmitContext's .ctor.    
21204
21205 2003-10-09  Martin Baulig  <martin@ximian.com>
21206
21207         * decl.cs (DeclSpace.AsAccessible): Moved here from TypeContainer.
21208         (AccessLevel, CheckAccessLevel, GetAccessLevel): They're used by
21209         AsAccessible(), moved them as well.
21210
21211         * class.cs (TypeContainer.AsAccessible): Moved to DeclSpace.
21212
21213 2003-10-08  Atsushi Enomoto <ginga@kit.hi-ho.ne.jp>
21214
21215         * cs-parser.jay : Renamed yyName to yyNames related to jay.
21216
21217 2003-10-07  Miguel de Icaza  <miguel@ximian.com>
21218
21219         * expression.cs (Binary.Emit.GreatherThanOrEqual): Fix the code
21220         generation for >=, as spotted by Paolo, bug 48679.  
21221         Patch from David Waite.
21222
21223         * cs-tokenizer.cs: Add handling for #pragma.
21224
21225         * cs-parser.jay: Allow for both yield and yield return in the
21226         syntax.  The anti-cobolization of C# fight will go on!
21227
21228         * class.cs (TypeBuilder.DefineType): Catch error condition here
21229         (Parent.DefineType erroring out and returning null).
21230
21231         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
21232         coping with enumerations variables, we were mistakenly processing
21233         them as a regular value type instead of built-in types.  Fixes the
21234         bug #48063
21235
21236         * typemanager.cs (IsBuiltinOrEnum): New method.
21237
21238 2003-09-30  Miguel de Icaza  <miguel@ximian.com>
21239
21240         * cs-parser.jay: Upgrade: yield now needs the return clause.
21241
21242 2003-09-19  Martin Baulig  <martin@ximian.com>
21243
21244         * decl.cs (MemberCache.SetupCacheForInterface): Take a
21245         `MemberCache parent' argument.  Normally, an interface doesn't
21246         have a parent type except System.Object, but we use this in gmcs
21247         for generic type parameters.
21248
21249 2003-09-18  Martin Baulig  <martin@ximian.com>
21250
21251         * typemanager.cs (TypeHandle.ctor): Set `IsInterface' solely based
21252         on `type.IsInterface'; don't check whether the type has a parent
21253         to determine whether it's an interface.
21254
21255 2003-09-15  Martin Baulig  <martin@ximian.com>
21256
21257         * class.cs (TypeContainer.DefineType): Added an error flag to
21258         avoid reporting duplicate CS0146's ("class definition is
21259         circular.").
21260
21261         * driver.cs (Driver.MainDriver): Abort if
21262         RootContext.ResolveTree() reported any errors.
21263
21264 2003-09-07  Martin Baulig  <martin@ximian.com>
21265
21266         * report.cs (Error, Warning): Added overloaded versions which take
21267         a `params object[] args' and call String.Format().
21268
21269 2003-09-07  Martin Baulig  <martin@ximian.com>
21270
21271         * decl.cs (DeclSpace..ctor): Don't call
21272         NamespaceEntry.DefineName() here; do it in RecordDecl() which is
21273         called from Tree.RecordDecl().  Fixes the CS0101 reporting.
21274         (DeclSpace.RecordDecl): New method.
21275
21276         * tree.cs (Tree.RecordDecl): Call ds.RecordDecl().
21277
21278 2003-09-02  Ravi Pratap  <ravi@ximian.com>
21279
21280         * attribute.cs (CheckAttributeTarget): Ensure that we allow return
21281         value attributes to be applied to ParameterBuilders.
21282
21283         * class.cs (MethodCore.LabelParameters): Make static and more
21284         generic so that it can be used from other places - like interface
21285         methods, for instance.
21286
21287         * interface.cs (Interface.Emit): Call LabelParameters before
21288         emitting attributes on the InterfaceMethod.
21289
21290 2003-08-26  Martin Baulig  <martin@ximian.com>
21291
21292         * ecore.cs (SimpleName.SimpleNameResolve): Look for members before
21293         resolving aliases; fixes #47927.
21294
21295 2003-08-26  Martin Baulig  <martin@ximian.com>
21296
21297         * statement.cs (Using.DoResolve): This is internally emitting a
21298         try/finally clause, so we need to set ec.NeedExplicitReturn if we
21299         do not always return.  Fixes #47681.
21300
21301 2003-08-26  Martin Baulig  <martin@ximian.com>
21302
21303         * decl.cs (MemberCore): Moved WarningNotHiding(),
21304         Error_CannotChangeAccessModifiers() and CheckMethodAgainstBase()
21305         into MemberBase.
21306         (AdditionResult): Make this nested in DeclSpace.
21307         (DeclSpace.ctor): The .ctor now takes an additional NamespaceEntry
21308         argument; call NamespaceEntry.Define() unless we're nested in a
21309         class or struct.
21310
21311         * namespace.cs (Namespace.DefineName): New public function.  This
21312         is called from DeclSpace's .ctor to add 
21313         (Namespace.Lookup): Include DeclSpaces in the lookup.
21314
21315         * class.cs (Operator): Derive from MemberBase, not MemberCore.
21316
21317         * const.cs (Const): Derive from MemberBase, not MemberCore.     
21318
21319 2003-08-25  Martin Baulig  <martin@ximian.com>
21320
21321         * convert.cs (Convert.ExplicitReferenceConversion): When
21322         converting from an interface type to a class, unbox if the target
21323         type is a struct type.  Fixes #47822.
21324
21325 2003-08-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21326
21327         * typemanager.cs: fixed the values of MethodFlags. Closes #47855 and
21328         #47854.
21329
21330 2003-08-22  Martin Baulig  <martin@ximian.com>
21331
21332         * class.cs (TypeManager.DefineType): When defining a nested type,
21333         call DefineType() on our parent; fixes #47801.
21334
21335 2003-08-22  Martin Baulig  <martin@ximian.com>
21336
21337         * class.cs (MethodData.Define): While checking if a method is an
21338         interface implementation, improve the test a bit more to fix #47654.
21339
21340 2003-08-22  Martin Baulig  <martin@ximian.com>
21341
21342         * expression.cs (Probe.DoResolve): Check whether `expr' resolved
21343         correctly; fixes #47722.
21344
21345 2003-08-22  Martin Baulig  <martin@ximian.com>
21346
21347         * expression.cs (UnaryMutator.ResolveVariable): If the target is a
21348         LocalVariableReference, ensure it's not read-only.  Fixes #47536.
21349
21350         * statement.cs (Fixed.DoResolve): Make all variables read-only. 
21351
21352 2003-08-22  Martin Baulig  <martin@ximian.com>
21353
21354         * ecore.cs (FieldExpr.DoResolveLValue): Static read-only fields
21355         can only be assigned in static constructors.  Fixes #47161.
21356
21357 2003-08-22  Martin Baulig  <martin@ximian.com>
21358
21359         Rewrote and improved the flow analysis code.
21360
21361         * flowbranching.cs (FlowBranching): Make this class abstract.
21362         (FlowBranching.CreateBranching): New static function to create a
21363         new flow branching.
21364         (FlowBranchingBlock, FlowBranchingException): New classes.
21365         (FlowBranching.UsageVector.Type): New public readonly field.
21366         (FlowBranching.UsageVector.Breaks): Removed the setter.
21367         (FlowBranching.UsageVector.Returns): Removed the setter.
21368         (FlowBranching.UsageVector): Added Break(), Return(),
21369         NeverReachable() and Throw() methods to modify the reachability.
21370         (FlowBranching.UsageVector.MergeChildren): Removed, this is now
21371         done by FlowBranching.Merge().
21372         (FlowBranching.UsageVector.MergeChild): New method; merges the
21373         merge result into the current vector.
21374         (FlowBranching.Merge): New abstract method to merge a branching.
21375
21376 2003-08-12  Martin Baulig  <martin@ximian.com>
21377
21378         * expression.cs (Indirection.CacheTemporaries): Create the
21379         LocalTemporary with the pointer type, not its element type.
21380
21381 2003-08-10  Miguel de Icaza  <miguel@ximian.com>
21382
21383         * cs-parser.jay: FIRST_KEYWORD, LAST_KEYWORD: used to know if a
21384         token was a keyword or not.
21385
21386         Add `error' options where an IDENTIFIER was expected;  Provide
21387         CheckToken and CheckIdentifierToken convenience error reporting
21388         functions. 
21389
21390         Do not use `DeclSpace.Namespace', use `DeclSpace.NamespaceEntry'.
21391
21392         * decl.cs: Rename `NamespaceEntry Namespace' public field into
21393         NameSpaceEntry NameSpaceEntry.
21394
21395         (LookupInterfaceOrClass): Avoid creating a full qualified name
21396         from namespace and name: avoid doing lookups when we know the
21397         namespace is non-existant.   Use new Tree.LookupByNamespace which
21398         looks up DeclSpaces based on their namespace, name pair.
21399
21400         * driver.cs: Provide a new `parser verbose' to display the
21401         exception thrown during parsing.  This is turned off by default
21402         now, so the output of a failure from mcs is more graceful.
21403
21404         * namespace.cs: Track all the namespaces defined in a hashtable
21405         for quick lookup.
21406
21407         (IsNamespace): New method
21408
21409 2003-08-09  Miguel de Icaza  <miguel@ximian.com>
21410
21411         * namespace.cs: Remove redundant call;  Avoid using MakeFQN when
21412         we know that we need to concatenate (full typename can never be
21413         null). 
21414
21415         * class.cs: ditto.
21416
21417         * statement.cs: Use a bitfield;  Do not initialize to null things
21418         which are done by the constructor by default.
21419
21420         * cs-parser.jay: bug fix, parameter was 4, not 3.
21421
21422         * expression.cs: Just use the property;
21423
21424         * statement.cs: No need for GetVariableInfo method.
21425
21426 2003-08-08  Martin Baulig  <martin@ximian.com>
21427
21428         * flowanalysis.cs (FlowReturns): This is now nested in the
21429         `FlowBranching' class.
21430         (MyBitVector): Moved this here from statement.cs.
21431         (FlowBranching.SiblingType): New enum type.
21432         (FlowBranching.CreateSibling): Added `SiblingType' argument.
21433
21434 2003-08-07  Martin Baulig  <martin@ximian.com>
21435
21436         * flowanalysis.cs (FlowBranchingType): This is now nested in the
21437         `FlowBranching' class and called `BranchingType'.
21438
21439 2003-08-07  Martin Baulig  <martin@ximian.com>
21440
21441         * flowanalysis.cs: Moved all the control flow analysis code into
21442         its own file.
21443
21444 2003-08-07  Martin Baulig  <martin@ximian.com>
21445
21446         * assign.cs (Assign.DoResolve): `target' must either be an
21447         IAssignMethod or an EventAccess; report a CS0131 otherwise.  Fixes
21448         #37319.
21449
21450 2003-08-07  Miguel de Icaza  <miguel@ximian.com>
21451
21452         * expression.cs (BinaryMethod): This kind of expression is created by the
21453         Binary class if it determines that the operator has to be handled
21454         by a method.
21455
21456         (BinaryDelegate): This kind of expression is created if we are
21457         dealing with a + or - operator on delegates.
21458
21459         (Binary): remove method, argumetns, and DelegateOperator: when
21460         dealing with methods, 
21461
21462         * ecore.cs (EventExpr.EmitAddOrRemove): Update to new layout.
21463
21464         * statement.cs (Block): use bitfields for the three extra booleans
21465         we had in use.   Remove unused topblock parameter.
21466
21467         * codegen.cs: Remove unecessary argument to Block.EmitTopBlock
21468
21469         * assign.cs: Drop extra unneeded tests.
21470
21471 2003-08-06  Miguel de Icaza  <miguel@ximian.com>
21472
21473         * iterators.cs (Mapvariable): provide a mechanism to use prefixes.
21474
21475         * statement.cs (Foreach): Use VariableStorage instead of
21476         LocalBuilders.   
21477
21478         * codegen.cs (VariableStorage): New class used by clients that
21479         require a variable stored: locals or fields for variables that
21480         need to live across yield.
21481
21482         Maybe provide a convenience api for EmitThis+EmitLoad?
21483
21484         (GetTemporaryLocal, FreeTemporaryLocal): Recycle
21485         these bad boys.
21486
21487 2003-08-05  Miguel de Icaza  <miguel@ximian.com>
21488
21489         * codegen.cs (RemapLocal, RemapLocalLValue, RemapParameter,
21490         RemapParameterLValue): New methods that are used to turn a
21491         precomputed FieldInfo into an expression like this:
21492
21493                 instance.FieldInfo
21494
21495         The idea is to use this instead of making LocalVariableReference
21496         have more than one meaning.
21497
21498         * cs-parser.jay: Add error production to BASE.
21499
21500         * ecore.cs: Deal with TypeManager.GetField returning null, which
21501         is now a valid return value.
21502
21503         (FieldExprNoAddress): New expression for Fields whose address can
21504         not be taken.
21505
21506         * expression.cs (LocalVariableReference): During the resolve
21507         phases, create new expressions if we are in a remapping context.
21508         Remove code that dealt with remapping here.
21509
21510         (ParameterReference): same.
21511
21512         (ProxyInstance): New expression, like the `This' expression, but
21513         it is born fully resolved.  We know what we are doing, so remove
21514         the errors that are targeted to user-provided uses of `this'.
21515
21516         * statement.cs (Foreach): our variable is now stored as an
21517         Expression;  During resolution, follow the protocol, dont just
21518         assume it will return this.
21519
21520 2003-08-06  Martin Baulig  <martin@ximian.com>
21521
21522         * support.cs (SeekableStreamReader.cs): New public class.
21523
21524         * cs-tokenizer.cs, cs-parser.jay, driver.cs: Use the new
21525         SeekableStreamReader instead of the normal StreamReader.
21526
21527 2003-08-04  Martin Baulig  <martin@ximian.com>
21528
21529         * cs-parser.jay (CLOSE_PARENS_CAST, CLOSE_PARENS_NO_CAST,
21530         CLOSE_PARENS_OPEN_PARENS, CLOSE_PARENS_MINUS): New tokens to
21531         deambiguate casts and delegate invocations.
21532         (parenthesized_expression): Use the new tokens to ensure this is
21533         not a cast of method invocation.
21534
21535         * cs-tokenizer.cs (is_punct): Return one of the new special tokens
21536         when reading a `)' and Deambiguate_CloseParens () was previously
21537         called.
21538
21539         * expression.cs (ParenthesizedExpression): New class.  This is
21540         just used for the CS0075 test.
21541         (Binary.DoResolve): Check for CS0075.   
21542
21543 2003-07-29  Ravi Pratap  <ravi@ximian.com>
21544
21545         * expression.cs (Invocation.MakeUnionSet): Patch from Lluis
21546         Sanchez : use TypeManager.ArrayContainsMethod instead of a direct
21547         reference comparison.
21548
21549         (TypeManager.ArrayContainsMethod): When we have a MethodInfo, also
21550         examine the ReturnType for equality - this is necessary in the
21551         cases of implicit and explicit operators whose signature also
21552         includes the return type.
21553
21554 2003-07-26  Miguel de Icaza  <miguel@ximian.com>
21555
21556         * namespace.cs: Cache the result of the namespace computation,
21557         instead of computing it every time.
21558
21559 2003-07-24  Miguel de Icaza  <miguel@ximian.com>
21560
21561         * decl.cs: Use a global arraylist that we reuse over invocations
21562         to avoid excesive memory consumption.  Reduces memory usage on an
21563         mcs compile by one meg (45 average).
21564
21565         * typemanager.cs (LookupTypeReflection): In .NET pointers are
21566         private, work around that.
21567
21568 2003-07-23  Miguel de Icaza  <miguel@ximian.com>
21569
21570         * literal.cs (IntLiteral): Define Zero and One static literals. 
21571
21572         * cs-parser.jay (integer_literal): use static literals to reduce
21573         memory usage for the most used literals (0, 1 and -1).  211kb
21574         reduced in memory usage.
21575
21576         Replace all calls to `new ArrayList' with `new
21577         ArrayList(4)' which is a good average number for most allocations,
21578         and also requires only 16 bytes of memory for its buffer by
21579         default. 
21580
21581         This reduced MCS memory usage in seven megabytes for the RSS after
21582         bootstrapping.
21583
21584 2003-07-28  Ravi Pratap  <ravi@ximian.com>
21585
21586         * expression.cs (Invocation.OverloadResolve): Fix the algorithm to
21587         handle params methods the correct way by forming only one
21588         applicable set with params and normal methods in them. Earlier we
21589         were looking at params methods only if we found no normal methods
21590         which was not the correct thing to do.
21591
21592         (Invocation.BetterFunction): Take separate arguments indicating
21593         when candidate and the best method are params methods in their
21594         expanded form.
21595
21596         This fixes bugs #43367 and #46199.
21597
21598         * attribute.cs: Documentation updates.
21599
21600         (CheckAttribute): Rename to CheckAttributeTarget.
21601         (GetValidPlaces): Rename to GetValidTargets.
21602
21603         * expression.cs (Invocation.IsParamsMethodApplicable): Fix trivial
21604         bug - use Convert.ImplicitConversion, not ImplicitUserConversion!
21605
21606         Fixes bug #44468.
21607
21608 2003-07-28  Martin Baulig  <martin@ximian.com>
21609
21610         * class.cs (TypeContainer.DefineMembers): Use the base type's full
21611         name when looking up the base class of a nested class.  Fixes #46977.
21612
21613 2003-07-26  Martin Baulig  <martin@ximian.com>
21614
21615         * expression.cs (Indexers.Indexer): New nested struct; contains
21616         getter, setter and the indexer's type.
21617         (Indexers.Properties): This is now an ArrayList of
21618         Indexers.Indexer's.
21619         (IndexerAccess.DoResolveLValue): Correctly set the type if the
21620         indexer doesn't have any getters.
21621
21622         * assign.cs (Assign.DoResolve): Also do the implicit conversions
21623         for embedded property and indexer assignments.
21624
21625 2003-07-26  Martin Baulig  <martin@ximian.com>
21626
21627         * cs-tokenizer.cs (Tokenizer.xtoken): Report a CS1040 if a
21628         preprocessor directive is not the first non-whitespace character
21629         on a line.
21630
21631 2003-07-26  Martin Baulig  <martin@ximian.com>
21632
21633         * namespace.cs (NamespaceEntry.Lookup): New method; rewrote the
21634         namespace parsing, follow the spec more closely.
21635
21636         * rootcontext.cs (RootContext.NamespaceLookup): Use the new
21637         NamespaceEntry.Lookup().
21638
21639 2003-07-25  Martin Baulig  <martin@ximian.com>
21640
21641         * MethodCore.cs (OverridesSomething): New public field; it's set
21642         from TypeContainer.DefineMembers if this method overrides
21643         something (which doesn't need to be a method).  Fix #39462.
21644
21645 2003-07-25  Ravi Pratap  <ravi@ximian.com>
21646
21647         * typemanager.cs (GetMembers): Ensure that the list of members is
21648         reversed. This keeps things in sync.
21649
21650         * attribute.cs (Attribute.CheckAttribute): Break as soon as we
21651         find an AttributeUsage attribute.
21652
21653         * expression.cs (Invocation.OverloadResolve): Perform the check
21654         which disallows Invoke to be directly called on a Delegate.
21655
21656         (Error_InvokeOnDelegate): Report error cs1533.
21657
21658 2003-07-25  Martin Baulig  <martin@ximian.com>
21659
21660         * expression.cs (Indexers.GetIndexersForType): Only look in the
21661         interface hierarchy if the requested type is already an
21662         interface.  Fixes #46788 while keeping #46502 fixed.
21663
21664 2003-07-25  Martin Baulig  <martin@ximian.com>
21665
21666         * class.cs (TypeContainer.DefineMembers): Check whether all
21667         readonly fields have been assigned and report warning CS0649 if
21668         not.
21669
21670         * statement.cs (LocalInfo.IsFixed): Always return true if this is
21671         a valuetype.
21672
21673 2003-07-24  Ravi Pratap  <ravi@ximian.com>
21674
21675         * decl.cs (MemberCache.AddMethods): Reverse the order of the array
21676         returned from GetMethods to make things consistent with the
21677         assumptions MCS makes about ordering of methods.
21678
21679         This should comprehensively fix bug #45127 and it does :-)
21680
21681         * ecore.cs (MethodGroupExpr.DeclaringType): Correct bug - the
21682         ordering is actually reverse.
21683
21684         * Clean up some debug messages I left lying around.
21685
21686         * interface.cs (Populate*): Get rid of code which emits attributes
21687         since the stage in which we emit attributes is the 'Emit' stage,
21688         not the define stage.
21689
21690         (Emit): Move attribute emission for interface members here.
21691
21692 2003-07-22  Ravi Pratap  <ravi@ximian.com>
21693
21694         * expression.cs (Invocation.OverloadResolve): Follow the spec more
21695         closely: we eliminate methods in base types when we have an
21696         applicable method in a top-level type.
21697
21698         Please see section 14.5.5.1 for an exact description of what goes
21699         on. 
21700
21701         This fixes bug #45127 and a host of other related to corlib compilation.
21702
21703         * ecore.cs (MethodGroupExpr.DeclaringType): The element in the
21704         array is the method corresponding to the top-level type (this is
21705         because of the changes made to icall.c) so we change this
21706         accordingly.
21707
21708         (MethodGroupExpr.Name): This too.
21709
21710         * typemanager.cs (GetElementType): New method which does the right
21711         thing when compiling corlib. 
21712
21713         * everywhere: Make use of the above in the relevant places.
21714
21715 2003-07-22  Martin Baulig  <martin@ximian.com>
21716
21717         * cs-parser.jay (invocation_expression): Moved
21718         `OPEN_PARENS expression CLOSE_PARENS unary_expression' here from
21719         `cast_expression', but create a InvocationOrCast which later
21720         resolves to either an Invocation or a Cast.
21721
21722         * ecore.cs (ExpressionStatement.ResolveStatement): New virtual
21723         method; call this before EmitStatement() to make sure that this
21724         expression can be used as a statement.
21725
21726         * expression.cs (InvocationOrCast): New class; resolves to either
21727         an Invocation or a Cast.
21728
21729         * statement.cs (StatementExpression): Call ResolveStatement() on
21730         the ExpressionStatement before emitting it.
21731
21732 2003-07-21  Martin Baulig  <martin@ximian.com>
21733
21734         * expression.cs (Invocation.VerifyArgumentsCompat): Check whether
21735         `ref' and `out' attributes match; fixes #46220.
21736         (MemberAccess.ResolveMemberAccess): You can't reference a type
21737         through an expression; fixes #33180.
21738         (Indexers.GetIndexersForType): Don't return the indexers from
21739         interfaces the class implements; fixes #46502.
21740
21741 2003-07-21  Martin Baulig  <martin@ximian.com>
21742
21743         * class.cs (TypeContainer.CheckPairedOperators): Added CS0660 and
21744         CS0661 checks; fixes bug #30442.
21745
21746 2003-07-21  Martin Baulig  <martin@ximian.com>
21747
21748         * decl.cs (AdditionResult): Added `Error'.
21749
21750         * enum.cs (AddEnumMember): Report a CS0076 if name is `value__'.
21751
21752         * typemanager.cs (TypeManager.ChangeType): Catch exceptions;
21753         makes cs0031.cs actually work.
21754
21755 2003-07-20  Martin Baulig  <martin@ximian.com>
21756
21757         * namespace.cs: Fixed that bug which caused a crash when compiling
21758         the debugger's GUI.
21759
21760 2003-07-20  Miguel de Icaza  <miguel@ximian.com>
21761
21762         * typemanager.cs (LookupTypeReflection): Never expose types which
21763         are NotPublic, NestedPrivate, NestedAssembly, or
21764         NestedFamANDAssem.  We used to return these, and later do a check
21765         that would report a meaningful error, but the problem is that we
21766         would not get the real match, if there was a name override.
21767
21768 2003-07-18  Miguel de Icaza  <miguel@ximian.com>
21769
21770         * namespace.cs (Namespace, Name): Do not compute the namespace
21771         name dynamically, compute it in the constructor.  This reduced
21772         memory usage by 1697 KB.
21773
21774         * driver.cs: Use --pause to pause at the end.
21775
21776 2003-07-17  Peter Williams  <peter@newton.cx>
21777
21778         * Makefile: Change the name of the test target so that it doesn't
21779         conflict with the recursive test target.
21780
21781 2003-07-17  Miguel de Icaza  <miguel@ximian.com>
21782
21783         * expression.cs (LocalVariableReference.Emit, EmitAssign,
21784         AddressOf): Do not use EmitThis, that was wrong, use the actual
21785         this pointer.
21786
21787 2003-07-15  Miguel de Icaza  <miguel@ximian.com>
21788
21789         * class.cs (MethodData.Define): While checking if a method is an
21790         interface implementation, improve the test: If we are not public
21791         (use new test here: use the computed MethodAttributes directly,
21792         instead of the parsed modifier flags) check if the `implementing'
21793         method comes from an interface or not.
21794
21795         * pending.cs (VerifyPendingMethods): Slightly better error
21796         message.
21797
21798         * makefile: add test target that does the mcs bootstrap.
21799
21800 2003-07-16  Ravi Pratap  <ravi@ximian.com>
21801
21802         * interface.cs (Define): Do nothing here since there are no
21803         members to populate etc. Move the attribute emission out of here
21804         since this was just totally the wrong place to put it. Attribute
21805         application happens during the 'Emit' phase, not in the 'Define'
21806         phase.
21807
21808         (Emit): Add this method and move the attribute emission here
21809
21810         * rootcontext.cs (EmitCode): Call the Emit method on interface
21811         types too.
21812
21813 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21814
21815         * expression.cs (OverloadResolve): Report error only if Location
21816         is not 'Null' which means that there was a probe going on.
21817
21818 2003-07-14  Martin Baulig  <martin@ximian.com>
21819
21820         * expression.cs (ConditionalLogicalOperator): New public class to
21821         implement user defined conditional logical operators.
21822         This is section 14.11.2 in the spec and bug #40505.
21823
21824 2003-07-14  Martin Baulig  <martin@ximian.com>
21825
21826         * ecore.cs (FieldExpr.DoResolveLValue): Fixed bug #46198.
21827
21828 2003-07-14  Martin Baulig  <martin@ximian.com>
21829
21830         * codegen.cs (EmitContext.InFixedInitializer): New public field.
21831
21832         * ecore.cs (IVariable.VerifyFixed): New interface method.
21833
21834         * expression.cs (Unary.ResolveOperator): When resolving the `&'
21835         operator, check whether the variable is actually fixed.  Fixes bug
21836         #36055.  Set a variable definitely assigned when taking its
21837         address as required by the spec.
21838
21839         * statement.cs (LocalInfo.IsFixed): New field.
21840         (LocalInfo.MakePinned): Set `IsFixed' to true.
21841
21842 2003-07-14  Ravi Pratap M  <ravi@ximian.com>
21843
21844         * attribute.cs (Attribute.Resolve): While doing a Member lookup
21845         for .ctors, ensure that we only ask for members declared in the
21846         attribute type (BindingFlags.DeclaredOnly).
21847
21848         Fixes bug #43632.
21849
21850         * expression.cs (Error_WrongNumArguments): Report error 1501
21851         correctly the way CSC does.
21852
21853 2003-07-13  Martin Baulig  <martin@ximian.com>
21854
21855         * expression.cs (MemberAccess.ResolveAsTypeStep): Try to do a type
21856         lookup on the fully qualified name, to make things like "X.X" work
21857         where "X.X" is a fully qualified type name, but we also have a
21858         namespace "X" in the using list.  Fixes #41975.
21859
21860 2003-07-13  Martin Baulig  <martin@ximian.com>
21861
21862         * assign.cs (Assign.GetEmbeddedAssign): New protected virtual
21863         function. If we're a CompoundAssign, we need to create an embedded
21864         CompoundAssign, not an embedded Assign.
21865         (Assign.DoResolve): Make this work for embedded CompoundAssign's.
21866         Fixes #45854.
21867
21868 2003-07-13  Martin Baulig  <martin@ximian.com>
21869
21870         * typemanager.cs (TypeManager.IsNestedChildOf): Make this actually
21871         work to fix bug #46088.
21872
21873 2003-07-13  Ravi Pratap <ravi@ximian.com>
21874
21875         * class.cs (Operator.Emit): Do not emit attributes here - it is
21876         taken care of by the Method class that we delegate too. This takes
21877         care of bug #45876.
21878
21879 2003-07-10  Martin Baulig  <martin@ximian.com>
21880
21881         * expression.cs (TypeOfVoid): New class.
21882         (TypeOf): Report a CS0673 if it's System.Void.  Fixes #42264.
21883
21884 2003-07-10  Martin Baulig  <martin@ximian.com>
21885
21886         * class.cs (MethodCore.DoDefineParameters): Added CS0225 check;
21887         bug #35957.
21888
21889 2003-07-10  Martin Baulig  <martin@ximian.com>
21890
21891         * rootcontext.cs (RootContext.NamespaceLookup): Take a DeclSpace,
21892         not a NamespaceEntry, so we can use DeclSpace.CheckAccessLevel().
21893
21894         * decl.cs (DeclSpace.FindType): Use DeclSpace.CheckAccessLevel().
21895
21896         * typemanager.cs (TypeManager.IsAccessibleFrom): Removed.
21897
21898 2003-07-10  Martin Baulig  <martin@ximian.com>
21899
21900         * expression.cs (ArrayCreation): Don't use a byte blob for arrays
21901         of decimal.  Fixes #42850.
21902
21903         NOTE: I also fixed the created byte blob, but this doesn't work on
21904         the MS runtime and csc never produces any byte blobs for decimal
21905         arrays.
21906
21907 2003-07-10  Martin Baulig  <martin@ximian.com>
21908
21909         * statement.cs (StructInfo.GetStructInfo): Catch deep cycles in
21910         structs; fixes #32068.
21911         (Block.AddChildVariableNames): Fixed #44302.
21912
21913 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21914
21915         * namespace.cs: fixed compilation with csc. It's bugzilla #44302.
21916
21917 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21918
21919         * attribute.cs: And this test is onger needed.
21920
21921 2003-07-08  Martin Baulig  <martin@ximian.com>
21922
21923         * rootcontext.cs (RootContext.NamespaceLookup): Ignore
21924         inaccessible types.  Fixes #36313.
21925
21926         * decl.cs (DeclSpace.FindType): Ignore inaccessible types.
21927
21928         * namespace.cs (NamespaceEntry): Create implicit entries for all
21929         namespaces; ie. if we have `namespace N1.N2.N3 { ... }', we create
21930         implicit entries for N1.N2 and N1.
21931
21932 2003-07-08  Martin Baulig  <martin@ximian.com>
21933
21934         Rewrote the handling of namespaces to fix a lot of the issues
21935         wrt. `using' aliases etc.
21936
21937         * namespace.cs (Namespace): Splitted this class into a
21938         per-assembly `Namespace' and a per-file `NamespaceEntry'.
21939
21940         * typemanager.cs (TypeManager.IsNamespace): Removed.
21941         (TypeManager.ComputeNamespaces): Only compute namespaces from
21942         loaded assemblies here, not the namespaces from the assembly we're
21943         currently compiling.
21944
21945 2003-07-08  Martin Baulig  <martin@ximian.com>
21946
21947         * rootcontext.cs, class.cs: Fixed the CS1530 reporting.
21948
21949 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21950
21951         * typemanager.cs: Reverted patch from Gonzalo, my previous patch
21952         already fixed it.  
21953
21954         I thought about the memory savings here, but LookupTypeReflection
21955         is used under already very constrained scenarios.  Compiling
21956         corlib or mcs only exposes one hit, so it would not really reduce
21957         any memory consumption.
21958
21959 2003-07-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
21960
21961         * typemanager.cs: fixes bug #45889 by only adding public types from
21962         other assemblies to the list of known types.
21963
21964 2003-07-07  Miguel de Icaza  <miguel@ximian.com>
21965
21966         * attribute.cs (Attribute.Resolve): Add call to CheckAccessLevel
21967         on the type we resolved.
21968
21969 2003-07-05  Martin Baulig  <martin@ximian.com>
21970
21971         * pending.cs (PendingImplementation.ParentImplements): Don't
21972         create the proxy if the parent is abstract.
21973
21974         * class.cs (TypeContainer.DefineIndexers): Process explicit
21975         interface implementations first.  Fixes #37714.
21976
21977 2003-07-04  Miguel de Icaza  <miguel@ximian.com>
21978
21979         * expression.cs (MemberAccess.ResolveMemberAccess): Events are
21980         defined recursively;  but since we modify the input parameters
21981         (left is set to `this' temporarily), we reset this value if the
21982         left_is_explicit is false, which gives the original semantics to
21983         the code.  
21984
21985         * literal.cs (NullPointer): new class used to represent a null
21986         literal in a pointer context.
21987
21988         * convert.cs (Convert.ImplicitReferenceConversion): Is the target
21989         type is a pointer, use a NullPointer object instead of a
21990         NullLiteral.   Closes 43687
21991
21992         (ExplicitConversion): Convert pointer values using
21993         the conv opcode to the proper type.
21994
21995         * ecore.cs (New): change ValueTypeVariable property into a method,
21996         that returns whether the valuetype is suitable for being used.
21997
21998         * expression.cs (Binary.DoNumericPromotions): Only return if we
21999         the int constant was a valid uint, and we can return both left and
22000         right as uints.  If not, we continue processing, to trigger the
22001         type conversion.  This fixes 39018.
22002
22003         * statement.cs (Block.EmitMeta): During constant resolution, set
22004         the CurrentBlock property on the emitcontext, so that we resolve
22005         constants propertly.
22006
22007 2003-07-02  Martin Baulig  <martin@ximian.com>
22008
22009         * codegen.cs (EmitContext.NeedExplicitReturn): New public variable.
22010         (EmitContext.EmitTopBlock): Emit an explicit return if it's set.
22011
22012         * statement.cs (Try.Resolve): Set ec.NeedExplicitReturn rather
22013         than emitting it here.
22014
22015         * statement.cs: Fixed some more flow analysis bugs.
22016
22017 2003-07-02  Martin Baulig  <martin@ximian.com>
22018
22019         * class.cs (MethodData.Define): When implementing interface
22020         methods, set Final unless we're Virtual.
22021
22022         * decl.cs (MemberCore.CheckMethodAgainstBase): Make the CS0506
22023         check work for interface methods.
22024
22025 2003-07-01  Martin Baulig  <martin@ximian.com>
22026
22027         * ecore.cs (EmitContext.This): Replaced this property with a
22028         GetThis() method which takes a Location argument.  This ensures
22029         that we get the correct error location for a CS0188.
22030
22031 2003-07-01  Miguel de Icaza  <miguel@ximian.com>
22032
22033         * ecore.cs: (Convert.ConvertIntLiteral): Add test for
22034         ImplicitStandardConversion.
22035
22036         * class.cs (TypeContainer.GetClassBases): Small bug fix for 45649.
22037
22038 2003-07-01  Zoltan Varga  <vargaz@freemail.hu>
22039
22040         * expression.cs (ResolveOperator): Fix Concat (string, string, string)
22041         optimization.
22042
22043 2003-06-30  Miguel de Icaza  <miguel@ximian.com>
22044
22045         * class.cs (Constructor.Define): Turn off initlocals for unsafe
22046         constructors.
22047
22048         (MethodData.Define): Turn off initlocals for unsafe methods.
22049
22050 2003-06-29  Miguel de Icaza  <miguel@ximian.com>
22051
22052         * decl.cs (DeclSpace.CheckAccessLevel): Make this routine
22053         complete;  Fixes #37521.
22054
22055         * delegate.cs: Use Modifiers.TypeAttr to compute the
22056         TypeAttributes, instead of rolling our own.  This makes the flags
22057         correct for the delegates.
22058
22059 2003-06-28  Miguel de Icaza  <miguel@ximian.com>
22060
22061         * class.cs (Constructor.Define): Set the private flag for static
22062         constructors as well.
22063
22064         * cs-parser.jay (statement_expression): Set the return value to
22065         null, to avoid a crash when we catch an error.
22066
22067 2003-06-24  Miguel de Icaza  <miguel@ximian.com>
22068
22069         * cs-parser.jay: Applied patch from Jackson that adds support for
22070         extern and unsafe modifiers to destructor declarations.
22071
22072         * expression.cs: Report error 21 if the user is trying to index a
22073         System.Array.
22074
22075         * driver.cs: Add an error message, suggested by the bug report.
22076
22077         * class.cs (TypeContainer.Emit): Only call EmitFieldInitializers
22078         if we do not have a ": this ()" constructor initializer.  Fixes 45149
22079
22080 2003-06-14  Miguel de Icaza  <miguel@ximian.com>
22081
22082         * namespace.cs: Add some information to reduce FAQs.
22083
22084 2003-06-13  Miguel de Icaza  <miguel@ximian.com>
22085
22086         * cfold.cs (BinaryFold): BitwiseAnd, BitwiseOr: handle other
22087         underlying enumeration types.  Fixes #43915.
22088
22089         * expression.cs: Treat ushort/short as legal values to be used in
22090         bitwise operations.
22091
22092 Wed Jun 4 13:19:04 CEST 2003 Paolo Molaro <lupus@ximian.com>
22093
22094         * delegate.cs: transfer custom attributes for paramenters from
22095         the delegate declaration to Invoke and BeginInvoke.
22096
22097 Tue Jun 3 11:11:08 CEST 2003 Paolo Molaro <lupus@ximian.com>
22098
22099         * attribute.cs: handle custom marshalers and emit marshal info
22100         for fields, too.
22101
22102 2003-05-28  Hector E. Gomez Morales  <hgomez_36@flashmail.com>
22103
22104         * makefile.gnu: Added anonymous.cs to the compiler sources.
22105
22106 2003-05-28  Miguel de Icaza  <miguel@ximian.com>
22107
22108         * iterators.cs: Change the name of the proxy class to include two
22109         underscores.
22110
22111         * cs-parser.jay: Update grammar to include anonymous methods.
22112
22113         * anonymous.cs: new file.
22114
22115 2003-05-27  Miguel de Icaza  <miguel@ximian.com>
22116
22117         * class.cs (Field.Define): Add missing test for pointers and
22118         safety. 
22119
22120 2003-05-27  Ravi Pratap  <ravi@ximian.com>
22121
22122         * expression.cs (ArrayAccess.GetStoreOpCode): For System.IntPtr,
22123         we use the stobj opcode.
22124
22125         (ArrayCreation.EmitDynamicInitializers): Revert Miguel's patch
22126         since it wasn't the correct fix. 
22127
22128         It still is puzzling that we are required to use stobj for IntPtr
22129         which seems to be a ValueType.
22130
22131 2003-05-26  Miguel de Icaza  <miguel@ximian.com>
22132
22133         * ecore.cs (SimpleName.SimpleNameResolve): Consider using aliases
22134         during regular simple name resolution.   Now, the trick is that
22135         instead of returning for processing the simplename, we do a
22136         TypeManager.LookupType (ie, a rooted lookup as opposed to a
22137         contextual lookup type).   If a match is found, return that, if
22138         not, return for further composition.
22139
22140         This fixes long-standing 30485.
22141
22142         * expression.cs (ArrayCreation.EmitDynamicInitializers): When
22143         using the address to initialize an object, do an Stobj instead of
22144         using the regular Stelem.
22145
22146         (IndexerAccess.Emit, IndexerAccess.EmitAssign):
22147         Pass `is_base_indexer' to Invocation.EmitCall instead of false.
22148         Because if we are a BaseIndexerAccess that value will be true.
22149         Fixes 43643.
22150
22151         * statement.cs (GotoCase.Resolve): Return after reporting an
22152         error, do not attempt to continue. 
22153
22154         * expression.cs (PointerArithmetic.Emit): If our operand is a
22155         long, convert our constants to match the operand before
22156         multiplying.  Convert to I type before adding.   Fixes 43670.
22157
22158 2003-05-14  Ravi Pratap  <ravi@ximian.com>
22159
22160         * enum.cs (ImplicitConversionExists) : Rename to
22161         ImplicitEnumConversionExists to remove ambiguity. 
22162
22163         * ecore.cs (NullCast): New type of cast expression class which
22164         basically is very similar to EmptyCast with the difference being
22165         it still is a constant since it is used only to cast a null to
22166         something else
22167         (eg. (string) null)
22168
22169         * convert.cs (ImplicitReferenceConversion): When casting a null
22170         literal, we return a NullCast.
22171
22172         * literal.cs (NullLiteralTyped): Remove - I don't see why this
22173         should be around anymore.
22174
22175         The renaming (reported was slightly wrong). Corrections:
22176
22177         ConvertImplicitStandard -> ImplicitConversionStandard
22178         ConvertExplicitStandard -> ExplicitConversionStandard
22179
22180         * expression.cs (StaticCallExpr.MakeSimpleCall): Resolve arguments
22181         before passing them in !
22182
22183         * convert.cs (ImplicitConversionStandard): When comparing for
22184         equal expr and target types, ensure that expr is not a
22185         NullLiteral.
22186
22187         In general, we must not be checking (expr_type ==
22188         target_type) in the top level conversion methods
22189         (ImplicitConversion, ExplicitConversion etc). This checking is
22190         done in the methods that they delegate to.
22191
22192 2003-05-20  Miguel de Icaza  <miguel@ximian.com>
22193
22194         * convert.cs: Move Error_CannotConvertType,
22195         ImplicitReferenceConversion, ImplicitReferenceConversionExists,
22196         ImplicitNumericConversion, ImplicitConversionExists,
22197         ImplicitUserConversionExists, StandardConversionExists,
22198         FindMostEncompassedType, FindMostSpecificSource,
22199         FindMostSpecificTarget, ImplicitUserConversion,
22200         ExplicitUserConversion, GetConversionOperators,
22201         UserDefinedConversion, ConvertImplicit, ConvertImplicitStandard,
22202         TryImplicitIntConversion, Error_CannotConvertImplicit,
22203         ConvertImplicitRequired, ConvertNumericExplicit,
22204         ExplicitReferenceConversionExists, ConvertReferenceExplicit,
22205         ConvertExplicit, ConvertExplicitStandard from the ecore.cs into
22206         its own file.
22207
22208         Perform the following renames:
22209
22210         StandardConversionExists -> ImplicitStandardConversionExists
22211         ConvertImplicit -> ImplicitConversion
22212         ConvertImplicitStandard -> ImplicitStandardConversion
22213         TryImplicitIntConversion -> ImplicitIntConversion
22214         ConvertImplicitRequired -> ImplicitConversionRequired
22215         ConvertNumericExplicit -> ExplicitNumericConversion
22216         ConvertReferenceExplicit -> ExplicitReferenceConversion
22217         ConvertExplicit -> ExplicitConversion
22218         ConvertExplicitStandard -> ExplicitStandardConversion
22219
22220 2003-05-19  Martin Baulig  <martin@ximian.com>
22221
22222         * statement.cs (TypeInfo.StructInfo): Made this type protected.
22223         (TypeInfo): Added support for structs having structs as fields.
22224
22225         * ecore.cs (FieldExpr): Implement IVariable.
22226         (FieldExpr.DoResolve): Call VariableInfo.GetSubStruct() to get the
22227         VariableInfo for the field.
22228
22229 2003-05-18  Martin Baulig  <martin@ximian.com>
22230
22231         * expression.cs (This.DoResolve): Report a CS0027 if we're
22232         emitting a field initializer.
22233
22234 2003-05-18  Martin Baulig  <martin@ximian.com>
22235
22236         * expression.cs (This.ResolveBase): New public function.
22237         (This.DoResolve): Check for CS0188.
22238
22239         * codegen.cs (EmitContext.This): Just call This.ResolveBase(), not
22240         This.Resolve().
22241
22242         * ecore.cs (MethodGroupExpr.DoResolve): Set the
22243         `instance_expression' to null if we don't have any non-static
22244         methods.
22245
22246 2003-05-18  Martin Baulig  <martin@ximian.com>
22247
22248         Reworked the way how local variables and parameters are handled by
22249         the flow analysis code.
22250
22251         * statement.cs (TypeInfo, VariableMap): New public classes.
22252         (VariableInfo): New public class.  This is now responsible for
22253         checking whether a variable has been assigned.  It is used for
22254         parameters and local variables.
22255         (Block.EmitMeta): Take the InternalParameters as argument; compute
22256         the layout of the flow vectors here.
22257         (Block.LocalMap, Block.ParameterMap): New public properties.
22258         (FlowBranching): The .ctor doesn't get the InternalParameters
22259         anymore since Block.EmitMeta() now computes the layout of the flow
22260         vector.
22261         (MyStructInfo): This class is now known as `StructInfo' and nested
22262         in `TypeInfo'; we don't access this directly anymore.
22263
22264         * ecore.cs (IVariable): Added `VariableInfo VariableInfo'
22265         property and removed IsAssigned(), IsFieldAssigned(),
22266         SetAssigned() and SetFieldAssigned(); we now call them on the
22267         VariableInfo so we don't need to duplicate this code everywhere.
22268
22269         * expression.cs (ParameterReference): Added `Block block' argument
22270         to the .ctor.
22271         (LocalVariableReference, ParameterReference, This): The new
22272         VariableInfo class is now responsible for all the definite
22273         assignment stuff.
22274
22275         * codegen.cs (EmitContext.IsVariableAssigned, SetVariableAssigned,
22276         IsParameterAssigned, SetParameterAssigned): Removed.
22277
22278 2003-05-18  Martin Baulig  <martin@ximian.com>
22279
22280         * typemanager.cs (InitCoreTypes): Try calling
22281         SetCorlibTypeBuilders() with 4 args; if that fails, fall back to
22282         the 3-args-version.  Corlib now also needs our `void_type'.
22283         (GetMethod): Added overloaded version which takes an optional
22284         `bool report_errors' to allow lookups of optional methods.
22285
22286 2003-05-12  Martin Baulig  <martin@ximian.com>
22287
22288         * statement.cs (VariableInfo): Renamed to LocalInfo since it's
22289         only used for locals and not for parameters.
22290
22291 2003-05-12  Miguel de Icaza  <miguel@ximian.com>
22292
22293         * support.cs (InternalParameters.ParameterType): Return the
22294         ExternalType of the parameter.
22295
22296         * parameter.cs (Parameter.ExternalType): drop the two arguments,
22297         they were unused.
22298
22299 2003-05-11  Miguel de Icaza  <miguel@ximian.com>
22300
22301         * class.cs (MethodData.Define): Do not set the `newslot' on
22302         interface members, if they are also flagged as "override".
22303
22304         * expression.cs (UnaryMutator.EmitCode): Simple workaround to emit
22305         better code for ++i and i++.  This only works for static fields
22306         and local variables.
22307
22308         * typemanager.cs (LookupDeclSpace): Add new method, sometimes we
22309         want to pull the DeclSpace out of the builder_to_declspace instead
22310         of the TypeBuilder (like in TypeContainer.FindMembers).
22311
22312         * class.cs (TypeContainer.FindMembers): Use LookupDeclSpace
22313         instead of LookupTypeContainer.  Fixes the crash on .NET for
22314         looking up interface members.
22315
22316         * const.cs: Create our own emit context during the Definition
22317         stage, so that constants are evaluated in the proper context, when
22318         a recursive definition happens.
22319
22320 2003-05-11  Martin Baulig  <martin@ximian.com>
22321
22322         * statement.cs (Block.CreateSwitchBlock): New method.  Creates a
22323         new block for a switch section.
22324         (Block.AddLabel, Block.LookupLabel): If we're a switch section, do
22325         the adding/lookup in the switch block.  Fixes #39828.
22326
22327 2003-05-09  Miguel de Icaza  <miguel@ximian.com>
22328
22329         * expression.cs (UnaryMutator.LoadOneAndEmitOp): Missing
22330         functionality: I needed to convert the data after I had performed
22331         the add/sub operation into the operands type size.
22332
22333         * ecore.cs (ImplicitReferenceConversion): When boxing an interface
22334         pass the type for the box operation, otherwise the resulting
22335         object would have been of type object.
22336
22337         (BoxedCast): Add constructor to specify the type to box as.
22338
22339 2003-05-07  Miguel de Icaza  <miguel@ximian.com>
22340
22341         * iterators.cs: I was reusing the `count' variable inadvertently,
22342         take steps to not allow this to happen.
22343
22344 2003-05-06  Miguel de Icaza  <miguel@ximian.com>
22345
22346         * attribute.cs (Attribute.Resolve): Params attributes are encoded
22347         by creating an array at the point where the params starts and
22348         putting all those arguments there, then adjusting the size of the
22349         array.
22350
22351 2003-05-05  Miguel de Icaza  <miguel@ximian.com>
22352
22353         * expression.cs (New.AddressOf): Implement interface
22354         IMemoryLocation.  This is used when the `new' operator is used in
22355         the context of an invocation to a method on a value type.
22356
22357         See http://bugzilla.ximian.com/show_bug.cgi?id=#42390 for an
22358         example. 
22359
22360         * namespace.cs: Also check the using aliases here.
22361
22362         * driver.cs: Move the test for using validity after the types have
22363         been entered, so we do a single pass that also includes the using
22364         aliases. 
22365
22366         * statement.cs (Try.Resolve): Avoid crashing if there is a failure
22367         in the regular case.   CreateSiblingForFinally is doing extra
22368         error checking.
22369
22370         * attribute.cs (GetAttributeArgumentExpression): Store the result
22371         on an out value, and use the return value to indicate failure
22372         instead of using null (which is a valid return for Constant.GetValue).
22373
22374         * statement.cs: Perform the analysis flow for the increment
22375         portion after the statement, because this will be the real flow of
22376         execution.  Fixes #42385
22377
22378         * codegen.cs (EmitContext.EmitArgument,
22379         EmitContext.EmitStoreArgument): New helper functions when the
22380         RemapToProxy flag is set.
22381
22382         * expression.cs (ParameterReference.EmitLdarg): Expose this useful
22383         function.
22384
22385         Add support for remapping parameters. 
22386
22387         * iterators.cs: Propagate parameter values;  Store parameter
22388         values in the proxy classes.
22389
22390 2003-05-04  Miguel de Icaza  <miguel@ximian.com>
22391
22392         * ecore.cs (FieldExpr): Fix an obvious bug.  static fields do not
22393         need a proxy reference;  I do not know what I was thinking
22394
22395         * cs-parser.jay (constructor_initializer): catch another error,
22396         and display nice message.
22397
22398         (field_declaration): catch void field declaration
22399         to flag a better error. 
22400
22401         * class.cs (MemberBase.CheckBase): Report an error instead of a
22402         warning if a new protected member is declared in a struct. 
22403         (Field.Define): catch the error of readonly/volatile.
22404
22405         * ecore.cs (FieldExpr.EmitAssign): reuse the field lookup.
22406
22407         (FieldExpr.AddressOf): ditto.  Catch error where the address of a
22408         volatile variable is taken
22409
22410 2003-05-02  Miguel de Icaza  <miguel@ximian.com>
22411
22412         * statement.cs (Fixed.Resolve): Report an error if we are not in
22413         an unsafe context.
22414
22415 2003-05-01  Miguel de Icaza  <miguel@ximian.com>
22416
22417         * typemanager.cs: reuse the code that handles type clashes for
22418         delegates and enumerations.
22419
22420         * class.cs (Report28): Always report.
22421
22422         * expression.cs (EncodeAsAttribute): Allow nulls here.
22423
22424 2003-04-28  Miguel de Icaza  <miguel@ximian.com>
22425
22426         * attribute.cs (Attribute.GetAttributeArgumentExpression): Moved
22427         the functionality for testing whether an expression is valid for
22428         an attribute here.  Also handle the case of arrays of elements
22429         being stored. 
22430
22431         * expression.cs (ArrayCreation.EncodeAsAttribute): Add support for
22432         encoding a linear array into an array of objects that are suitable
22433         to be passed to an CustomAttributeBuilder.
22434
22435         * delegate.cs: Check unsafe types being used outside of an Unsafe context.
22436
22437         * ecore.cs: (FieldExpr): Handle field remapping here.
22438
22439         * iteratators.cs: Pass the instance variable (if the method is an
22440         instance method) to the constructors, so we can access the field
22441         variables on the class.
22442
22443         TODO: Test this with structs.  I think the THIS variable on
22444         structs might have to be a pointer, and not a refenrece
22445
22446 2003-04-27  Miguel de Icaza  <miguel@ximian.com>
22447
22448         * codegen.cs (EmitContext.Mapvariable): Adds a mechanism to map
22449         local variables to fields in a proxy class.
22450
22451         * iterators.cs (PopulateProxy): Rename our internal fields to
22452         <XXX>.  
22453         Create a <THIS> field if we are an instance method, so we can
22454         reference our parent container variables.
22455         (MapVariable): Called back from the EmitContext code to enter a
22456         new variable to field mapping into the proxy class (we just create
22457         a FieldBuilder).
22458
22459         * expression.cs
22460         (LocalVariableReference.{Emit,EmitAssign,AddressOf}): Add support
22461         for using the remapped locals to fields.
22462
22463         I placed the code here, because that gives the same semantics to
22464         local variables, and only changes the Emit code.
22465
22466         * statement.cs (Fixed.Resolve): it is not allowed to have fixed
22467         statements inside iterators.
22468         (VariableInfo): Add a FieldBuilder for the cases when we are
22469         remapping local variables to fields in a proxy class
22470
22471         * ecore.cs (SimpleNameResolve): Avoid testing two times for
22472         current_block != null.
22473
22474         * statement.cs (Swithc.SimpleSwitchEmit): Removed code that did
22475         not cope with strings, as it has been moved to the
22476         TableSwitchEmit.  Fixed bug in switch generation.
22477
22478         * expression.cs (New.DoResolve): Provide more context for the user
22479         when reporting an error.
22480
22481         * ecore.cs (Expression.LoadFromPtr): Use ldind_i when loading
22482         pointers. 
22483
22484         * expression.cs (MemberAccess.DoResolve): When we get a type back,
22485         check the permissions for it.  Note than in a type-resolution
22486         context the check was already present in DeclSpace.ResolveType,
22487         but was missing from the MemberAccess.
22488
22489         (ArrayCreation.CheckIndices): warn if the user has
22490         more nested levels of expressions, but there are no more
22491         dimensions specified.  Avoids crash on bug 41906.
22492
22493 2003-04-26  Miguel de Icaza  <miguel@ximian.com>
22494
22495         * statement.cs (Block): replace Implicit bool, for a generic
22496         flags.   
22497         New flag: `Unchecked'.  This is used during the EmitMeta phase
22498         (which is out-of-line with the regular Resolve/Emit process for a
22499         statement, as this is done ahead of time, but still gets a chance
22500         to call constant resolve).
22501
22502         (Block.Flags): new enum for adding a new flag.
22503
22504         (Block.EmitMeta): track the state of unchecked.
22505
22506         (Unchecked): Set the "UnChecked" flags on any blocks we enclose,
22507         to enable constant resolution to work there as well.
22508
22509 2003-04-22  Miguel de Icaza  <miguel@ximian.com>
22510
22511         * typemanager.cs (ienumerable_type): Also look up
22512         System.Collections.IEnumerable. 
22513
22514 2003-04-21  Miguel de Icaza  <miguel@ximian.com>
22515
22516         TODO: Test more than one conditional per method.
22517
22518         * class.cs (Indexer.Define): Report the location where the user is
22519         referencing the unsupported feature.
22520
22521         (MethodData): Overload the use of `conditionals' to
22522         minimize the creation of needless ArrayLists.   This saves roughly
22523         212kb on my machine.
22524
22525         (Method): Implement the new IIteratorContainer interface.
22526         (Method.SetYields): Implement the method by setting the ModFlags
22527         to contain METHOD_YIELDS.
22528
22529         * expression.cs (Unary.ResolveOperator): Use expr_type, not Expr,
22530         which just got set to null.
22531
22532         * iterators.cs: New file.
22533
22534         (Yield, YieldBreak): New statements.
22535
22536         * statement.cs (Return.Resolve): Flag an error if we are used in
22537         an iterator method.
22538
22539         * codegen.cs (InIterator): New flag set if the code is being
22540         compiled in an iterator method.
22541
22542         * modifiers.cs: New flag METHOD_YIELDS.  This modifier is an
22543         internal modifier, and we just use it to avoid adding extra
22544         fields, as this is seldom used.  
22545
22546         * cs-parser.jay: Add yield_statement (yield and yield break).
22547
22548         * driver.cs: New flag -v2 to turn on version 2 features. 
22549
22550         * cs-tokenizer.cs (Tokenizer): Add yield and __yield to the
22551         hashtable when v2 is enabled.
22552
22553 2003-04-20  Miguel de Icaza  <miguel@ximian.com>
22554
22555         * typemanager.cs (TypeManager.NamespaceClash): Use to check if
22556         there is already a namespace defined with this name.
22557
22558         (TypeManager.InitCoreTypes): Remove the temporary workaround, as
22559         people upgraded their corlibs.
22560
22561         (TypeManager.CoreLookupType): Use LookupTypeDirect, as we
22562         always use fully qualified types, no need to use the compiler
22563         front end.
22564
22565         (TypeManager.IsNamespace): Use binarysearch.
22566
22567         * class.cs (AddClass, AddStruct, AddInterface, AddEvent,
22568         AddDelegate): I did not quite use the new IsValid API properly: I
22569         have to pass the short-name and the fullname.  I was passing only
22570         the basename instead of the fullname sometimes. 
22571
22572         (TypeContainer.DefineType): call NamespaceClash.
22573
22574         * interface.cs (Interface.DefineType): use NamespaceClash before
22575         defining the type.
22576
22577         * delegate.cs (Delegate.DefineType): use NamespaceClash before
22578         defining the type.
22579
22580         * enum.cs: (Enum.DefineType): use NamespaceClash before
22581         defining the type.
22582
22583         * typemanager.cs (: 3-line patch that gives us some tasty 11%
22584         speed increase.  First, use the negative_hits cache when we get a
22585         negative.  Second, add the type with its full original name
22586         instead of the new . and + encoded name (reflection uses + to
22587         separate type from a nested type).  Use LookupTypeReflection
22588         directly which bypasses the type->name hashtable (that we already
22589         know does not contain the type.
22590
22591         * decl.cs (DeclSpace.ResolveTypeExpr): track the
22592         location/container type. 
22593
22594         * driver.cs: When passing utf8, use directly the UTF8Encoding.
22595
22596 2003-04-19  Miguel de Icaza  <miguel@ximian.com>
22597
22598         * decl.cs (ResolveTypeExpr): Mirror check acess here too.
22599
22600         * delegate.cs (NewDelegate.Resolve): Test whether an instance
22601         method is being referenced in the method group from a static
22602         context, and report error 120 if so.
22603
22604         * expression.cs, ecore.cs (Error_UnexpectedKind): New name for
22605         Error118. 
22606
22607         * typemanager.cs: Add intermediate namespaces (if a namespace A.B
22608         is created, we create the A namespace).
22609
22610         * cs-parser.jay: A namespace also introduces a DeclarationFound.
22611         Fixes #41591
22612
22613 2003-04-18  Miguel de Icaza  <miguel@ximian.com>
22614
22615         * typemanager.cs (GetReferenceType, GetPointerType): In .NET each
22616         invocation to ModuleBuilder.GetType with the same values will
22617         return a new type instance, so we need to cache its return
22618         values. 
22619
22620         * expression.cs (Binary.ResolveOperator): Only allow the compare
22621         operators on enums if they are of the same type.
22622
22623         * ecore.cs (Expression.ImplicitReferenceConversion): handle target
22624         types of ValueType on their own case.  Before we were giving them
22625         the same treatment as objects.
22626
22627         * decl.cs (DeclSpace.IsValid): IsValid takes the short name and
22628         fullname.  Short name is used to compare against container name.
22629         Fullname is used to check against defined namespace names.
22630
22631         * class.cs (AddProperty, AddField, AddClass, AddStruct, AddEnum,
22632         AddDelegate, AddEvent): Pass new parameter to DeclSpace.IsValid
22633
22634         (Method.CheckBase): Call parent.
22635         (MemberBase.CheckBase): Check for protected members on sealed
22636         classes.
22637         (PropertyBase.CheckBase): Call parent.
22638         (Field.Define): Call parent.
22639
22640         * report.cs: Negative error codes are now mapped to 8000 - code,
22641         so that the display is render more nicely.
22642
22643         * typemanager.cs: Do not use try/catch, instead report a regular
22644         error. 
22645
22646         (GetPointerType, GetReferenceType): These methods provide
22647         mechanisms to obtain the T* and T& from a T.  We had the code
22648         previously scattered around the code base, and it also used
22649         TypeManager.LookupType that would go through plenty of caches.
22650         This one goes directly to the type source.
22651
22652         In some places we did the Type.GetType followed by
22653         ModuleBuilder.GetType, but not in others, so this unifies the
22654         processing as well.
22655
22656         * namespace.cs (VerifyUsing): Perform a non-lazy approach to using
22657         statements now that we have namespace information.
22658
22659         * typemanager.cs (IsNamespace): New method, returns whether the
22660         string presented is a namespace or not.
22661
22662         (ComputeNamespaces): New public entry point, computes the list of
22663         available namespaces, using the GetNamespaces API call in Mono, or
22664         the slower version in MS.NET.   
22665
22666         Now before we start the semantic analysis phase, we have a
22667         complete list of namespaces including everything that the user has
22668         provided.
22669
22670         Deleted old code to cache namespaces in .nsc files.
22671
22672 2003-04-17  Miguel de Icaza  <miguel@ximian.com>
22673
22674         * class.cs: (TypeContainer.DefineDefaultConstructor): Use the
22675         class/struct location definition Location for the implicit
22676         constructor location.
22677
22678         (Operator.Define): Use the location of the operator for the
22679         implicit Method definition.
22680
22681         (Constructor.Emit): use the constructor location for the implicit
22682         base initializer constructor.
22683
22684         * ecore.cs: Remove ITypeExpression.  This interface is now gone,
22685         and the Expression class now contains two new methods:
22686
22687         ResolveAsTypeStep and ResolveAsTypeTerminal.  This is used to
22688         isolate type lookup from the rest of the resolution process.
22689
22690         Since we use Expressions to hold type definitions due to the way
22691         we parse the input we have historically overloaded Resolve to
22692         perform the Type lookups if a special flag is passed.  Now this is
22693         eliminated and two methods take their place. 
22694
22695         The differences in the two methods between xStep and xTerminal is
22696         that xStep is involved in our current lookup system that uses
22697         SimpleNames to compose a name, while xTerminal is used just to
22698         catch the case where the simplename lookup failed.
22699
22700 2003-04-16  Miguel de Icaza  <miguel@ximian.com>
22701
22702         * expression.cs (ResolveMemberAccess): Remove redundant code.
22703         TypeExpr expressions are always born fully resolved.
22704
22705         * interface.cs (PopulateMethod): Do not lookup the types twice.
22706         We were doing it once during SemanticAnalysis and once during
22707         PopulateMethod.
22708
22709         * cs-parser.jay: Due to our hack in the grammar, things like A.B[]
22710         in local variable type definitions, were being returned as a
22711         SimpleName (we decomposed everything into a string), that is
22712         because primary_expression was being used instead of a type in the
22713         grammar (reduce/reduce conflicts).
22714
22715         The part that was wrong is that we converted the expression into a
22716         string (an oversimplification in one hand, compounded with primary
22717         expressions doing string concatenation).
22718
22719         So things like:
22720
22721         A.B.C [] x;
22722
22723         Would return "A.B.C[]" as a SimpleName.  This stopped things like
22724         using clauses from working on this particular context.  And a type
22725         was being matched directly against "A.B.C[]".
22726
22727         We now use the correct approach, and allow for ComposedCast to be
22728         part of the unary expression.  So the "A.B.C []" become a composed
22729         cast of "A.B.C" (as a nested group of MemberAccess with a
22730         SimpleName at the end) plus the rank composition "[]". 
22731
22732         Also fixes 35567
22733
22734 2003-04-10  Miguel de Icaza  <miguel@ximian.com>
22735
22736         * decl.cs (CheckAccessLevel): Implement the NestedPrivate rules
22737         for the access level checking.
22738
22739         * class.cs: Cosmetic changes.  Renamed `TypeContainer parent' to
22740         `TypeContainer container', because I kept getting confused when I
22741         was debugging this code.
22742
22743         * expression.cs (Indexers): Instead of tracking getters/setters,
22744         we now track them in parallel.  We create one arraylist less, but
22745         most importantly it is possible now for the LValue code to find a
22746         matching get for a set.
22747
22748         (IndexerAccess.DoResolveLValue): Update the code.
22749         GetIndexersForType has been modified already to extract all the
22750         indexers from a type.  The code assumed it did not.
22751
22752         Also make the code set the correct return type for the indexer.
22753         This was fixed a long time ago for properties, but was missing for
22754         indexers.  It used to be void_type.
22755
22756         (Binary.Emit): Test first for doubles instead of
22757         floats, as they are more common.
22758
22759         (Binary.EmitBranchable): Use the .un version of the branch opcodes
22760         when dealing with floats and the <=, >= operators.  This fixes bug
22761         #39314 
22762
22763         * statement.cs (Foreach.EmitArrayForeach): bug fix: The code used
22764         to load the array value by emitting a load on the foreach variable
22765         type.  This was incorrect.  
22766
22767         We now emit the code to load an element using the the array
22768         variable type, and then we emit the conversion operator.
22769
22770         Fixed #40176
22771
22772 2003-04-10  Zoltan Varga  <vargaz@freemail.hu>
22773
22774         * attribute.cs: Avoid allocation of ArrayLists in the common case.
22775
22776 2003-04-09  Miguel de Icaza  <miguel@ximian.com>
22777
22778         * class.cs (MethodSignature.InheritableMemberSignatureCompare):
22779         test for protection before we test for signatures. 
22780
22781         (MethodSignature.ToString): implement.
22782
22783         * expression.cs (Unary.TryReduceNegative): Add missing minus sign
22784         to the case where we reduced into a LongConstant.
22785
22786         * decl.cs (CheckAccessLevel): If the type is an array, we can not
22787         depend on whether the information is acurrate, because the
22788         Microsoft runtime will always claim that the array type is public,
22789         regardless of the real state.
22790
22791         If the type is a pointer, another problem happens: the type is
22792         reported as non-public in Microsoft.  
22793
22794         In both cases we have to call CheckAccessLevel recursively with
22795         the underlying type as the argument to be tested.
22796
22797 2003-04-08  Miguel de Icaza  <miguel@ximian.com>
22798
22799         * assign.cs (Assign.Emit): If we are dealing with a compound
22800         assignment expression, we should use the code path that stores the
22801         intermediate result in a temporary value.  This fixes #40903.
22802
22803         *expression.cs (Indirection.ToString): Provide ToString method for
22804         debugging. 
22805
22806 2003-04-08  Zoltan Varga  <vargaz@freemail.hu>
22807
22808         * class.cs: Null out fields holding references to Block objects so
22809         they can be garbage collected.
22810
22811         * expression.cs (OverloadResolve): Remove unused local.
22812
22813 2003-04-07  Martin Baulig  <martin@ximian.com>
22814
22815         * codegen.cs (EmitContext.CurrentFile): New public field.
22816         (EmitContext.Mark): Use the CurrentFile to check whether the
22817         location is in the correct file.
22818         (EmitContext.EmitTopBlock): Initialize CurrentFile here.
22819
22820 2003-04-07  Martin Baulig  <martin@ximian.com>
22821
22822         * ecore.cs (Expression.ResolveBoolean): Don't call ec.Mark().
22823
22824         * codegen.cs (EmitContext.EmitTopBlock): Don't call Mark() on the
22825         location.  [FIXME: The location argument which gets passed to this
22826         method is sometimes wrong!]
22827
22828 2003-04-07  Nick Drochak <ndrochak@gol.com>
22829
22830         * codegen.cs: Be more verbose when we can't find the symbol writer dll.
22831
22832 2003-04-07  Miguel de Icaza  <miguel@ximian.com>
22833
22834         * expression.cs (Indirection.EmitAssign): We were using the
22835         temporary, but returning immediately instead of continuing the
22836         EmitAssing flow.
22837
22838 2003-04-06  Martin Baulig  <martin@ximian.com>
22839
22840         * ecore.cs (SimpleName.SimpleNameResolve): Don't report an error
22841         if it's a nested child, but also deriving from the outer class.
22842         See test 190.cs.
22843
22844         * typemanager.cs (IsNestedChildOf): Make this work if it's a
22845         nested child, but also deriving from the outer class.  See
22846         test-190.cs.
22847         (FilterWithClosure): We may access private members of the outer
22848         class if we're a nested child and deriving from the outer class.
22849         (RealMemberLookup): Only set `closure_private_ok' if the
22850         `original_bf' contained BindingFlags.NonPublic.
22851
22852 2003-04-05  Martin Baulig  <martin@ximian.com>
22853
22854         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #40670.
22855
22856 2003-04-02  Miguel de Icaza  <miguel@ximian.com>
22857
22858         * class.cs (Event.Define): Do not allow abstract events to have
22859         initializers. 
22860
22861 2003-04-01  Miguel de Icaza  <miguel@ximian.com>
22862
22863         * cs-parser.jay: Add error productions for ADD/REMOVE missing a
22864         block in event declarations.
22865
22866         * ecore.cs (FieldExpr.AddressOf): If our instance expression is a
22867         value type, get its address.
22868
22869         * expression.cs (Is.Emit): For action `LeaveOnStack' we were
22870         leaving a class on the stack instead of a boolean value (int
22871         0/1).  Change the code so we compare against null, and then the
22872         result against zero.
22873
22874         * class.cs (TypeContainer.GetClassBases): We were checking for the
22875         parent class being sealed too late.
22876
22877         * expression.cs (Binary.Emit): For <= and >= when dealing with
22878         floating point values, use cgt.un and clt.un instead of cgt and
22879         clt alone.
22880
22881 2003-04-01  Zoltan Varga  <vargaz@freemail.hu>
22882
22883         * statement.cs: Apply the same optimization as MS: skip the 
22884         GetEnumerator returning an IEnumerator, and use the one returning a 
22885         CharEnumerator instead. This allows us to avoid the try-finally block 
22886         and the boxing.
22887
22888 2003-03-31  Gaurav Vaish <gvaish_mono@lycos.com>
22889
22890         * cs-parser.jay: Attributes cannot be applied to
22891                          namespaces. Fixes #40473
22892
22893 2003-03-31  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22894
22895         * class.cs:
22896         (Add*): check if the name is valid using the full name for constants,
22897         fields, properties and events.
22898
22899 2003-03-28  Miguel de Icaza  <miguel@ximian.com>
22900
22901         * enum.cs (Enum.DefineType, Enum.IsValidEnumConstant): Also allow
22902         char constants to be part of the enumeration.
22903
22904         * expression.cs (Conditional.DoResolve): Add support for operator
22905         true. Implements the missing functionality from 14.12
22906
22907         * class.cs (TypeContainer.CheckPairedOperators): Report error for missmatch on
22908         operator true/false as required by the spec.
22909
22910         * expression.cs (Unary.ResolveOperator): In LogicalNot, do an
22911         implicit conversion to boolean.
22912
22913         * statement.cs (Statement.ResolveBoolean): A boolean expression is
22914         also one where the type implements `operator true'. 
22915
22916         * ecore.cs (Expression.GetOperatorTrue): New helper routine to
22917         get an expression that will invoke operator true based on an
22918         expression.  
22919
22920         (GetConversionOperators): Removed the hack that called op_True
22921         here.  
22922
22923         (Expression.ResolveBoolean): Move this from Statement.
22924
22925 2003-03-17  Miguel de Icaza  <miguel@ximian.com>
22926
22927         * ecore.cs (FieldExpr): do not allow initialization of initonly
22928         fields on derived classes
22929
22930 2003-03-13  Martin Baulig  <martin@ximian.com>
22931
22932         * statement.cs (Block.Emit): Call ig.BeginScope() and
22933         ig.EndScope() when compiling with debugging info; call
22934         LocalBuilder.SetLocalSymInfo _after_ opening the scope.
22935
22936 2003-03-08  Miguel de Icaza  <miguel@ximian.com>
22937
22938         * expression.cs (Indexers): Do not construct immediately, allow
22939         for new members to be appended as we go.  Fixes 38143
22940
22941 2003-03-07  Gonzalo Paniagua Javier <gonzalo@ximian.com>
22942
22943         * expression.cs: save/restore context when resolving an unchecked
22944         expression.
22945
22946 2003-03-05  Miguel de Icaza  <miguel@ximian.com>
22947
22948         * cfold.cs: Catch division by zero in modulus operator during
22949         constant folding.
22950
22951 2003-03-03  Miguel de Icaza  <miguel@ximian.com>
22952
22953         * interface.cs (Interface.DefineMembers): Avoid defining members
22954         twice. 
22955
22956 2003-02-27  Miguel de Icaza  <miguel@ximian.com>
22957
22958         * driver.cs: handle the +/- options for -noconfig
22959
22960         * statement.cs (Unckeched.Resolve): Also track the state of
22961         unchecked in the Resolve phase.
22962
22963 2003-02-27  Martin Baulig  <martin@ximian.com>
22964
22965         * ecore.cs (Expression.MemberLookup): Don't create a
22966         MethodGroupExpr for something which is not a method.  Fixes #38291.
22967
22968 2003-02-25  Miguel de Icaza  <miguel@ximian.com>
22969
22970         * class.cs (MemberBase.CheckParameters): Also check that the type
22971         is unmanaged if it is a pointer.
22972
22973         * expression.cs (SizeOf.Resolve): Add location information.
22974
22975         * statement.cs (Block.EmitMeta): Flag error (208) if a pointer to
22976         a managed type is declared.
22977
22978         * expression.cs (Invocation.VerifyArgumentsCompat): Check for the
22979         parameter modifiers as well.  Fixes bug 38606
22980
22981         * class.cs: Very sad.  Am backing out the speed up changes
22982         introduced by the ArrayList -> Array in the TypeContainer, as they
22983         were not actually that much faster, and introduced a bug (no error
22984         reports on duplicated methods).
22985
22986         * assign.cs (CompoundAssign.DoLResolve): Resolve the original
22987         source first, this will guarantee that we have a valid expression
22988         before calling in lower levels functions that will require a
22989         resolved object.  Then use this original_source in the
22990         target.ResolveLValue instead of the original source that was
22991         passed to us.
22992
22993         Another change.  Use target.Resolve instead of LValueResolve.
22994         Although we are resolving for LValues, we will let the Assign code
22995         take care of that (it will be called again from Resolve).  This
22996         basically allows code like this:
22997
22998         class X { X operator + (X x, object o) {} X this [int idx] { get; set; } }
22999         class Y { void A (X x) { x [0] += o; }
23000
23001         The problem was that the indexer was trying to resolve for
23002         set_Item (idx, object o) and never finding one.  The real set_Item
23003         was set_Item (idx, X).  By delaying the process we get the right
23004         semantics. 
23005
23006         Fixes bug 36505
23007
23008 2003-02-23  Martin Baulig  <martin@ximian.com>
23009
23010         * statement.cs (Block.Emit): Override this and set ec.CurrentBlock
23011         while calling DoEmit ().
23012
23013         * codegen.cs (EmitContext.Mark): Don't mark locations in other
23014         source files; if you use the #line directive inside a method, the
23015         compiler stops emitting line numbers for the debugger until it
23016         reaches the end of the method or another #line directive which
23017         restores the original file.
23018
23019 2003-02-23  Martin Baulig  <martin@ximian.com>
23020
23021         * statement.cs (FlowBranching.UsageVector.MergeChildren): Fix bug #37708.
23022
23023 2003-02-23  Martin Baulig  <martin@ximian.com>
23024
23025         * statement.cs (Block.AddChildVariableNames): We need to call this
23026         recursively, not just for our immediate children.
23027
23028 2003-02-23  Martin Baulig  <martin@ximian.com>
23029
23030         * class.cs (Event.Define): Always make the field private, like csc does.
23031
23032         * typemanager.cs (TypeManager.RealMemberLookup): Make events
23033         actually work, fixes bug #37521.
23034
23035 2003-02-23  Miguel de Icaza  <miguel@ximian.com>
23036
23037         * delegate.cs: When creating the various temporary "Parameters"
23038         classes, make sure that we call the ComputeAndDefineParameterTypes
23039         on those new parameters (just like we do with the formal ones), to
23040         allow them to be resolved in the context of the DeclSpace.
23041
23042         This fixes the bug that Dick observed in Bugzilla #38530.
23043
23044 2003-02-22  Miguel de Icaza  <miguel@ximian.com>
23045
23046         * expression.cs (ResolveMemberAccess): When resolving a constant,
23047         do not attempt to pull a constant if the value was not able to
23048         generate a valid constant.
23049
23050         * const.cs (LookupConstantValue): Do not report more errors than required.
23051
23052 2003-02-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23053
23054         * expression.cs: fixes bug #38328.
23055
23056 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
23057
23058         * class.cs: Changed all the various members that can be part of a
23059         class from being an ArrayList to be an Array of the right type.
23060         During the DefineType type_list, interface_list, delegate_list and
23061         enum_list are turned into types, interfaces, delegates and enums
23062         arrays.  
23063
23064         And during the member population, indexer_list, event_list,
23065         constant_list, field_list, instance_constructor_list, method_list,
23066         operator_list and property_list are turned into their real arrays.
23067
23068         Although we could probably perform this operation earlier, for
23069         good error reporting we need to keep the lists and remove the
23070         lists for longer than required.
23071
23072         This optimization was triggered by Paolo profiling the compiler
23073         speed on the output of `gen-sample-program.pl' perl script. 
23074
23075         * decl.cs (DeclSpace.ResolveType): Set the ContainerType, so we do
23076         not crash in methods like MemberLookupFailed that use this field.  
23077
23078         This problem arises when the compiler fails to resolve a type
23079         during interface type definition for example.
23080
23081 2003-02-18  Miguel de Icaza  <miguel@ximian.com>
23082
23083         * expression.cs (Indexers.GetIndexersForType): Interfaces do not
23084         inherit from System.Object, so we have to stop at null, not only
23085         when reaching System.Object.
23086
23087 2003-02-17  Miguel de Icaza  <miguel@ximian.com>
23088
23089         * expression.cs: (Indexers.GetIndexersForType): Martin's fix used
23090         DeclaredOnly because the parent indexer might have had a different
23091         name, but did not loop until the top of the hierarchy was reached.
23092
23093         The problem this one fixes is 35492: when a class implemented an
23094         indexer from an interface, we were getting the interface method
23095         (which was abstract) and we were flagging an error (can not invoke
23096         abstract method).
23097
23098         This also keeps bug 33089 functioning, and test-148 functioning.
23099
23100         * typemanager.cs (IsSpecialMethod): The correct way of figuring
23101         out if a method is special is to see if it is declared in a
23102         property or event, or whether it is one of the predefined operator
23103         names.   This should fix correctly #36804.
23104
23105 2003-02-15  Miguel de Icaza  <miguel@ximian.com>
23106
23107         The goal here is to remove the dependency on EmptyCast.Peel ().
23108         Killing it completely.
23109
23110         The problem is that currently in a number of places where
23111         constants are expected, we have to "probe" for an EmptyCast, and
23112         Peel, which is not the correct thing to do, as this will be
23113         repetitive and will likely lead to errors. 
23114
23115         The idea is to remove any EmptyCasts that are used in casts that
23116         can be reduced to constants, so we only have to cope with
23117         constants. 
23118
23119         This bug hunt was triggered by Bug 37363 and the desire to remove
23120         the duplicate pattern where we were "peeling" emptycasts to check
23121         whether they were constants.  Now constants will always be
23122         constants.
23123
23124         * ecore.cs: Use an enumconstant here instead of wrapping with
23125         EmptyCast.  
23126
23127         * expression.cs (Cast.TryReduce): Ah, the tricky EnumConstant was
23128         throwing me off.  By handling this we can get rid of a few hacks.
23129
23130         * statement.cs (Switch): Removed Peel() code.
23131
23132 2003-02-14  Miguel de Icaza  <miguel@ximian.com>
23133
23134         * class.cs: Location information for error 508
23135
23136         * expression.cs (New.DoResolve): Add a guard against double
23137         resolution of an expression.  
23138
23139         The New DoResolve might be called twice when initializing field
23140         expressions (see EmitFieldInitializers, the call to
23141         GetInitializerExpression will perform a resolve on the expression,
23142         and later the assign will trigger another resolution
23143
23144         This leads to bugs (#37014)
23145
23146         * delegate.cs: The signature for EndInvoke should contain any ref
23147         or out parameters as well.  We were not doing this in the past. 
23148
23149         * class.cs (Field.Define): Do not overwrite the type definition
23150         inside the `volatile' group.  Turns out that volatile enumerations
23151         were changing the type here to perform a validity test, which
23152         broke conversions. 
23153
23154 2003-02-12  Miguel de Icaza  <miguel@ximian.com>
23155
23156         * ecore.cs (FieldExpr.AddressOf): In the particular case of This
23157         and structs, we do not want to load the instance variable
23158
23159         (ImplicitReferenceConversion, ImplicitReferenceConversionExists):
23160         enum_type has to be handled like an object reference (implicit
23161         conversions exists from this to object), but the regular IsClass
23162         and IsValueType tests will never return true for this one.
23163
23164         Also we use TypeManager.IsValueType instead of type.IsValueType,
23165         just for consistency with the rest of the code (this is only
23166         needed if we ever use the construct exposed by test-180.cs inside
23167         corlib, which we dont today).
23168
23169 2003-02-12  Zoltan Varga  <vargaz@freemail.hu>
23170
23171         * attribute.cs (ApplyAttributes): apply all MethodImplAttributes, not
23172         just InternalCall.
23173
23174 2003-02-09  Martin Baulig  <martin@ximian.com>
23175
23176         * namespace.cs (Namespace..ctor): Added SourceFile argument.
23177         (Namespace.DefineNamespaces): New static public method; this is
23178         called when we're compiling with debugging to add all namespaces
23179         to the symbol file.
23180
23181         * tree.cs (Tree.RecordNamespace): Added SourceFile argument and
23182         pass it to the Namespace's .ctor.
23183
23184         * symbolwriter.cs (SymbolWriter.OpenMethod): Added TypeContainer
23185         and MethodBase arguments; pass the namespace ID to the symwriter;
23186         pass the MethodBase instead of the token to the symwriter.
23187         (SymbolWriter.DefineNamespace): New method to add a namespace to
23188         the symbol file.
23189
23190 2003-02-09  Martin Baulig  <martin@ximian.com>
23191
23192         * symbolwriter.cs: New file.  This is a wrapper around
23193         ISymbolWriter with a cleaner API.  We'll dynamically Invoke()
23194         methods here in near future.
23195
23196 2003-02-09  Martin Baulig  <martin@ximian.com>
23197
23198         * codegen.cs (EmitContext.Mark): Just pass the arguments to
23199         ILGenerator.MarkSequencePoint() which are actually used by the
23200         symbol writer.
23201
23202 2003-02-09  Martin Baulig  <martin@ximian.com>
23203
23204         * location.cs (SourceFile): New public sealed class.  This
23205         contains the name and an index which is used in the location's token.
23206         (Location): Reserve an appropriate number of bits in the token for
23207         the source file instead of walking over that list, this gives us a
23208         really huge performance improvement when compiling with debugging.
23209
23210         * driver.cs (Driver.parse, Driver.tokenize_file): Take a
23211         `SourceFile' argument instead of a string.
23212         (Driver.ProcessFile): Add all the files via Location.AddFile(),
23213         but don't parse/tokenize here, we need to generate the list of all
23214         source files before we do that.
23215         (Driver.ProcessFiles): New static function.  Parses/tokenizes all
23216         the files.
23217
23218         * cs-parser.jay (CSharpParser): Take a `SourceFile' argument
23219         instead of a string.
23220
23221         * cs-tokenizer.cs (Tokenizer): Take `SourceFile' argument instead
23222         of a string.
23223
23224 2003-02-09  Martin Baulig  <martin@ximian.com>
23225
23226         * cs-tokenizer.cs (Tokenizer.PreProcessLine): Also reset the
23227         filename on `#line default'.
23228
23229 Sat Feb 8 17:03:16 CET 2003 Paolo Molaro <lupus@ximian.com>
23230
23231         * statement.cs: don't clear the pinned var when the fixed statement
23232         returns from the method (fixes bug#37752).
23233
23234 Sat Feb 8 12:58:06 CET 2003 Paolo Molaro <lupus@ximian.com>
23235
23236         * typemanager.cs: fix from mathpup@mylinuxisp.com (Marcus Urban) 
23237         to IsValueType.
23238
23239 2003-02-07  Martin Baulig  <martin@ximian.com>
23240
23241         * driver.cs: Removed the `--debug-args' command line argument.
23242
23243         * codegen.cs (CodeGen.SaveSymbols): Removed, this is now done
23244         automatically by the AsssemblyBuilder.
23245         (CodeGen.InitializeSymbolWriter): We don't need to call any
23246         initialization function on the symbol writer anymore.  This method
23247         doesn't take any arguments.
23248
23249 2003-02-03  Miguel de Icaza  <miguel@ximian.com>
23250
23251         * driver.cs: (AddAssemblyAndDeps, LoadAssembly): Enter the types
23252         from referenced assemblies as well.
23253
23254 2003-02-02  Martin Baulig  <martin@ximian.com>
23255
23256         * class.cs (MethodData.Emit): Generate debugging info for external methods.
23257
23258 2003-02-02  Martin Baulig  <martin@ximian.com>
23259
23260         * class.cs (Constructor.Emit): Open the symbol writer before
23261         emitting the constructor initializer.
23262         (ConstructorInitializer.Emit): Call ec.Mark() to allow
23263         single-stepping through constructor initializers.
23264
23265 2003-01-30  Miguel de Icaza  <miguel@ximian.com>
23266
23267         * class.cs: Handle error 549: do not allow virtual methods in
23268         sealed classes. 
23269
23270 2003-02-01 Jackson Harper <jackson@latitudegeo.com>
23271
23272         * decl.cs: Check access levels when resolving types
23273
23274 2003-01-31 Jackson Harper <jackson@latitudegeo.com>
23275
23276         * statement.cs: Add parameters and locals set in catch blocks that might 
23277         return to set vector
23278
23279 2003-01-29  Miguel de Icaza  <miguel@ximian.com>
23280
23281         * class.cs (Operator): Set the SpecialName flags for operators.
23282
23283         * expression.cs (Invocation.DoResolve): Only block calls to
23284         accessors and operators on SpecialName methods.
23285
23286         (Cast.TryReduce): Handle conversions from char constants.
23287
23288
23289 Tue Jan 28 17:30:57 CET 2003 Paolo Molaro <lupus@ximian.com>
23290
23291         * statement.cs: small memory and time optimization in FlowBranching.
23292
23293 2003-01-28  Pedro Mart  <yoros@wanadoo.es>
23294
23295         * expression.cs (IndexerAccess.DoResolveLValue): Resolve the same
23296         problem that the last fix but in the other sid (Set).
23297
23298         * expression.cs (IndexerAccess.DoResolve): Fix a problem with a null
23299         access when there is no indexer in the hierarchy.
23300
23301 2003-01-27 Jackson Harper <jackson@latitudegeo.com>
23302
23303         * class.cs: Combine some if statements.
23304
23305 2003-01-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23306
23307         * driver.cs: fixed bug #37187.
23308
23309 2003-01-27  Pedro Martinez Juliá  <yoros@wanadoo.es>
23310
23311         * expression.cs (IndexerAccess.DoResolve): Before trying to resolve
23312         any indexer, it's needed to build a list with all the indexers in the
23313         hierarchy (AllGetters), else we have problems. Fixes #35653.
23314
23315 2003-01-23  Miguel de Icaza  <miguel@ximian.com>
23316
23317         * class.cs (MethodData.Define): It is wrong for an interface
23318         implementation to be static in both cases: explicit and implicit.
23319         We were only handling this in one case.
23320
23321         Improve the if situation there to not have negations.
23322
23323         * class.cs (Field.Define): Turns out that we do not need to check
23324         the unsafe bit on field definition, only on usage.  Remove the test.
23325
23326 2003-01-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23327
23328         * driver.cs: use assembly.Location instead of Codebase (the latest
23329         patch made mcs fail when using MS assemblies).
23330
23331 2003-01-21  Tim Haynes <thaynes@openlinksw.com>
23332
23333         * driver.cs: use DirectorySeparatorChar instead of a hardcoded "/" to
23334         get the path to *corlib.dll.
23335
23336 2003-01-21  Nick Drochak <ndrochak@gol.com>
23337
23338         * cs-tokenizer.cs:
23339         * pending.cs:
23340         * typemanager.cs: Remove compiler warnings
23341
23342 2003-01-20  Duncan Mak  <duncan@ximian.com>
23343
23344         * AssemblyInfo.cs: Bump the version number to 0.19.
23345
23346 2003-01-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23347
23348         * cs-tokenizer.cs: little fixes to line numbering when #line is used.
23349
23350 2003-01-18  Zoltan Varga  <vargaz@freemail.hu>
23351
23352         * class.cs (Constructor::Emit): Emit debugging info for constructors.
23353
23354 2003-01-17  Miguel de Icaza  <miguel@ximian.com>
23355
23356         * cs-parser.jay: Small fix: we were not comparing the constructor
23357         name correctly.   Thanks to Zoltan for the initial pointer.
23358
23359 2003-01-16 Jackson Harper <jackson@latitudegeo.com>
23360
23361         * cs-tokenizer.cs: Set file name when specified with #line
23362
23363 2003-01-15  Miguel de Icaza  <miguel@ximian.com>
23364
23365         * cs-parser.jay: Only perform the constructor checks here if we
23366         are named like the class;  This will help provider a better
23367         error.  The constructor path is taken when a type definition is
23368         not found, but most likely the user forgot to add the type, so
23369         report that rather than the constructor error.
23370
23371 Tue Jan 14 10:36:49 CET 2003 Paolo Molaro <lupus@ximian.com>
23372
23373         * class.cs, rootcontext.cs: small changes to avoid unnecessary memory
23374         allocations.
23375
23376 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23377
23378         * cs-parser.jay: Add cleanup call.
23379
23380 2003-01-13  Duncan Mak  <duncan@ximian.com>
23381
23382         * cs-tokenizer.cs (Cleanup): Rename to 'cleanup' to make it more
23383         consistent with other methods.
23384
23385 2003-01-13 Jackson Harper <jackson@latitudegeo.com>
23386
23387         * cs-tokenizer.cs: Add Cleanup method, also fix #region error messages.
23388
23389 Sun Jan 12 19:58:42 CET 2003 Paolo Molaro <lupus@ximian.com>
23390
23391         * attribute.cs: only set GuidAttr to true when we have a
23392         GuidAttribute.
23393
23394 2003-01-09  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23395
23396         * ecore.cs:
23397         * expression.cs:
23398         * typemanager.cs: fixes to allow mcs compile corlib with the new
23399         Type.IsSubclassOf fix.
23400
23401 2003-01-08  Miguel de Icaza  <miguel@ximian.com>
23402
23403         * expression.cs (LocalVariableReference.DoResolve): Classify a
23404         constant as a value, not as a variable.   Also, set the type for
23405         the variable.
23406
23407         * cs-parser.jay (fixed_statement): take a type instead of a
23408         pointer_type, so we can produce a better error message later.
23409
23410         * statement.cs (Fixed.Resolve): Flag types that are not pointers
23411         as an error.  
23412
23413         (For.DoEmit): Make inifinite loops have a
23414         non-conditional branch back.
23415
23416         (Fixed.DoEmit): First populate the pinned variables, then emit the
23417         statement, then clear the variables.  Before I was emitting the
23418         code once for each fixed piece.
23419
23420
23421 2003-01-08  Martin Baulig  <martin@ximian.com>
23422
23423         * statement.cs (FlowBranching.MergeChild): A break in a
23424         SWITCH_SECTION does not leave a loop.  Fixes #36155.
23425
23426 2003-01-08  Martin Baulig  <martin@ximian.com>
23427
23428         * statement.cs (FlowBranching.CheckOutParameters): `struct_params'
23429         lives in the same number space than `param_map'.  Fixes #36154.
23430
23431 2003-01-07  Miguel de Icaza  <miguel@ximian.com>
23432
23433         * cs-parser.jay (constructor_declaration): Set the
23434         Constructor.ModFlags before probing for it.  This makes the
23435         compiler report 514, 515 and 132 (the code was there, but got
23436         broken). 
23437
23438         * statement.cs (Goto.Resolve): Set `Returns' to ALWAYS.
23439         (GotoDefault.Resolve): Set `Returns' to ALWAYS.
23440         (GotoCase.Resolve): Set `Returns' to ALWAYS.
23441
23442 Tue Jan 7 18:32:24 CET 2003 Paolo Molaro <lupus@ximian.com>
23443
23444         * enum.cs: create the enum static fields using the enum type.
23445
23446 Tue Jan 7 18:23:44 CET 2003 Paolo Molaro <lupus@ximian.com>
23447
23448         * class.cs: don't try to create the ParamBuilder for the return
23449         type if it's not needed (and handle it breaking for the ms runtime
23450         anyway).
23451
23452 2003-01-06 Jackson Harper <jackson@latitudegeo.com>
23453
23454         * cs-tokenizer.cs: Add REGION flag to #region directives, and add checks to make sure that regions are being poped correctly
23455
23456 2002-12-29  Miguel de Icaza  <miguel@ximian.com>
23457
23458         * cs-tokenizer.cs (get_cmd_arg): Fixups to allow \r to terminate
23459         the command.   This showed up while compiling the JANET source
23460         code, which used \r as its only newline separator.
23461
23462 2002-12-28  Miguel de Icaza  <miguel@ximian.com>
23463
23464         * class.cs (Method.Define): If we are an operator (because it
23465         reuses our code), then set the SpecialName and HideBySig.  #36128
23466
23467 2002-12-22  Miguel de Icaza  <miguel@ximian.com>
23468
23469         * ecore.cs (FieldExpr.DoResolve): Instead of throwing an
23470         exception, report error 120 `object reference required'.
23471
23472         * driver.cs: Add --pause option, used during to measure the size
23473         of the process as it goes with --timestamp.
23474
23475         * expression.cs (Invocation.DoResolve): Do not allow methods with
23476         SpecialName to be invoked.
23477
23478 2002-12-21  Miguel de Icaza  <miguel@ximian.com>
23479
23480         * cs-tokenizer.cs: Small fix to the parser: compute the ascii
23481         number before adding it.
23482
23483 2002-12-21  Ravi Pratap  <ravi@ximian.com>
23484
23485         * ecore.cs (StandardImplicitConversion): When in an unsafe
23486         context, we allow conversion between void * to any other pointer
23487         type. This fixes bug #35973.
23488
23489 2002-12-20 Jackson Harper <jackson@latitudegeo.com>
23490
23491         * codegen.cs: Use Path.GetFileNameWithoutExtension so an exception
23492         is not thrown when extensionless outputs are used 
23493
23494 2002-12-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23495
23496         * rootcontext.cs: fixed compilation of corlib.
23497
23498 2002-12-19  Miguel de Icaza  <miguel@ximian.com>
23499
23500         * attribute.cs (Attributes.Contains): Add new method.
23501
23502         * class.cs (MethodCore.LabelParameters): if the parameter is an
23503         `out' parameter, check that no attribute `[In]' has been passed.
23504
23505         * enum.cs: Handle the `value__' name in an enumeration.
23506
23507 2002-12-14  Jaroslaw Kowalski <jarek@atm.com.pl>
23508
23509         * decl.cs: Added special case to allow overrides on "protected
23510         internal" methods
23511
23512 2002-12-18  Ravi Pratap  <ravi@ximian.com>
23513
23514         * attribute.cs (Attributes.AddAttributeSection): Rename to this
23515         since it makes much more sense.
23516
23517         (Attributes.ctor): Don't require a Location parameter.
23518
23519         * rootcontext.cs (AddGlobalAttributeSection): Rename again.
23520
23521         * attribute.cs (ApplyAttributes): Remove extra Location parameters
23522         since we already have that information per attribute.
23523
23524         * everywhere : make appropriate changes.
23525
23526         * class.cs (LabelParameters): Write the code which actually
23527         applies attributes to the return type. We can't do this on the MS
23528         .NET runtime so we flag a warning in the case an exception is
23529         thrown.
23530
23531 2002-12-18  Miguel de Icaza  <miguel@ximian.com>
23532
23533         * const.cs: Handle implicit null conversions here too.
23534
23535 2002-12-17  Ravi Pratap  <ravi@ximian.com>
23536
23537         * class.cs (MethodCore.LabelParameters): Remove the extra
23538         Type [] parameter since it is completely unnecessary. Instead
23539         pass in the method's attributes so that we can extract
23540         the "return" attribute.
23541
23542 2002-12-17  Miguel de Icaza  <miguel@ximian.com>
23543
23544         * cs-parser.jay (parse): Use Report.Error to flag errors instead
23545         of ignoring it and letting the compile continue.
23546
23547         * typemanager.cs (ChangeType): use an extra argument to return an
23548         error condition instead of throwing an exception.
23549
23550 2002-12-15  Miguel de Icaza  <miguel@ximian.com>
23551
23552         * expression.cs (Unary.TryReduce): mimic the code for the regular
23553         code path.  Perform an implicit cast in the cases where we can
23554         implicitly convert to one of the integral types, and then reduce
23555         based on that constant.   This fixes bug #35483.
23556
23557 2002-12-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23558
23559         * typemanager.cs: fixed cut & paste error in GetRemoveMethod.
23560
23561 2002-12-13  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23562
23563         * namespace.cs: fixed bug #35489.
23564
23565 2002-12-12  Miguel de Icaza  <miguel@ximian.com>
23566
23567         * class.cs: Remove some dead code.
23568
23569         * cs-parser.jay: Estimate the number of methods needed
23570         (RootContext.MethodCount);
23571
23572         * cs-tokenizer.cs: Use char arrays for parsing identifiers and
23573         numbers instead of StringBuilders.
23574
23575         * support.cs (PtrHashtable): Add constructor with initial size;
23576         We can now reduce reallocations of the method table.
23577
23578 2002-12-10  Ravi Pratap  <ravi@ximian.com>
23579
23580         * attribute.cs (ApplyAttributes): Keep track of the emitted
23581         attributes on a per-target basis. This fixes bug #35413.
23582
23583 2002-12-10  Miguel de Icaza  <miguel@ximian.com>
23584
23585         * driver.cs (MainDriver): On rotor encoding 28591 does not exist,
23586         default to the Windows 1252 encoding.
23587
23588         (UnixParseOption): Support version, thanks to Alp for the missing
23589         pointer. 
23590
23591         * AssemblyInfo.cs: Add nice assembly information.
23592
23593         * cs-tokenizer.cs: Add fix from Felix to the #if/#else handler
23594         (bug 35169).
23595
23596         * cs-parser.jay: Allow a trailing comma before the close bracked
23597         in the attribute_section production.
23598
23599         * ecore.cs (FieldExpr.AddressOf): Until I figure out why the
23600         address of the instance was being taken, I will take this out,
23601         because we take the address of the object immediately here.
23602
23603 2002-12-09  Ravi Pratap  <ravi@ximian.com>
23604
23605         * typemanager.cs (AreMultipleAllowed): Take care of the most
23606         obvious case where attribute type is not in the current assembly -
23607         stupid me ;-)
23608
23609 2002-12-08  Miguel de Icaza  <miguel@ximian.com>
23610
23611         * ecore.cs (SimpleName.DoResolve): First perform lookups on using
23612         definitions, instead of doing that afterwards.  
23613
23614         Also we use a nice little hack, depending on the constructor, we
23615         know if we are a "composed" name or a simple name.  Hence, we
23616         avoid the IndexOf test, and we avoid 
23617
23618         * codegen.cs: Add code to assist in a bug reporter to track down
23619         the source of a compiler crash. 
23620
23621 2002-12-07  Ravi Pratap  <ravi@ximian.com>
23622
23623         * attribute.cs (Attribute.ApplyAttributes) : Keep track of which attribute
23624         types have been emitted for a given element and flag an error
23625         if something which does not have AllowMultiple set is used more
23626         than once.
23627
23628         * typemanager.cs (RegisterAttributeAllowMultiple): Keep track of
23629         attribute types and their corresponding AllowMultiple properties
23630
23631         (AreMultipleAllowed): Check the property for a given type.
23632
23633         * attribute.cs (Attribute.ApplyAttributes): Register the AllowMultiple
23634         property in the case we have a TypeContainer.
23635
23636         (Attributes.AddAttribute): Detect duplicates and just skip on
23637         adding them. This trivial fix catches a pretty gross error in our
23638         attribute emission - global attributes were being emitted twice!
23639
23640         Bugzilla bug #33187 is now fixed.
23641
23642 2002-12-06  Miguel de Icaza  <miguel@ximian.com>
23643
23644         * cs-tokenizer.cs (pp_expr): Properly recurse here (use pp_expr
23645         instead of pp_and).
23646
23647         * expression.cs (Binary.ResolveOperator): I can only use the
23648         Concat (string, string, string) and Concat (string, string,
23649         string, string) if the child is actually a concatenation of
23650         strings. 
23651
23652 2002-12-04  Miguel de Icaza  <miguel@ximian.com>
23653
23654         * cs-tokenizer.cs: Small fix, because decimal_digits is used in a
23655         context where we need a 2-character lookahead.
23656
23657         * pending.cs (PendingImplementation): Rework so we can keep track
23658         of interface types all the time, and flag those which were
23659         implemented by parents as optional.
23660
23661 2002-12-03  Miguel de Icaza  <miguel@ximian.com>
23662
23663         * expression.cs (Binary.ResolveOperator): Use
23664         String.Concat(string,string,string) or
23665         String.Concat(string,string,string,string) when possible. 
23666
23667         * typemanager: More helper methods.
23668
23669
23670 Tue Dec 3 19:32:04 CET 2002 Paolo Molaro <lupus@ximian.com>
23671
23672         * pending.cs: remove the bogus return from GetMissingInterfaces()
23673         (see the 2002-11-06 entry: the mono runtime is now fixed in cvs).
23674
23675 2002-12-02  Gonzalo Paniagua Javier <gonzalo@ximian.com>
23676
23677         * namespace.cs: avoid duplicated 'using xxx' being added to
23678         using_clauses. This prevents mcs from issuing and 'ambiguous type' error
23679         when we get more than one 'using' statement for the same namespace.
23680         Report a CS0105 warning for it.
23681
23682 2002-11-30  Miguel de Icaza  <miguel@ximian.com>
23683
23684         * cs-tokenizer.cs (consume_identifier): use read directly, instead
23685         of calling getChar/putback, uses internal knowledge of it.    
23686
23687         (xtoken): Reorder tokenizer so most common patterns are checked
23688         first.  This reduces the compilation time in another 5% (from 8.11s
23689         average to 7.73s for bootstrapping mcs on my Mobile p4/1.8ghz).
23690
23691         The parsing time is 22% of the compilation in mcs, and from that
23692         64% is spent on the tokenization process.  
23693
23694         I tried using a binary search for keywords, but this is slower
23695         than the hashtable.  Another option would be to do a couple of
23696         things:
23697
23698                 * Not use a StringBuilder, instead use an array of chars,
23699                   with a set value.  Notice that this way we could catch
23700                   the 645 error without having to do it *afterwards*.
23701
23702                 * We could write a hand-parser to avoid the hashtable
23703                   compares altogether.
23704
23705         The identifier consumption process takes 37% of the tokenization
23706         time.  Another 15% is spent on is_number.  56% of the time spent
23707         on is_number is spent on Int64.Parse:
23708
23709                 * We could probably choose based on the string length to
23710                   use Int32.Parse or Int64.Parse and avoid all the 64-bit
23711                   computations. 
23712
23713         Another 3% is spend on wrapping `xtoken' in the `token' function.
23714
23715         Handle 0xa0 as whitespace (#34752)
23716
23717 2002-11-26  Miguel de Icaza  <miguel@ximian.com>
23718
23719         * typemanager.cs (IsCLRType): New routine to tell whether a type
23720         is one of the builtin types.  
23721
23722         Maybe it needs to use TypeCodes to be faster.  Maybe we could use
23723         typecode in more places instead of doing pointer comparissions.
23724         We could leverage some knowledge about the way the typecodes are
23725         laid out.
23726
23727         New code to cache namespaces in assemblies, it is currently not
23728         invoked, to be used soon.
23729
23730         * decl.cs (DeclSpace.MakeFQN): Simple optimization.
23731
23732         * expression.cs (Binary.ResolveOperator): specially handle
23733         strings, and do not perform user-defined operator overloading for
23734         built-in types.
23735
23736 2002-11-24  Miguel de Icaza  <miguel@ximian.com>
23737
23738         * cs-tokenizer.cs: Avoid calling Char.IsDigit which is an
23739         internalcall as it is a pretty simple operation;  Avoid whenever
23740         possible to call Char.IsLetter.
23741
23742         (consume_identifier): Cut by half the number of
23743         hashtable calls by merging the is_keyword and GetKeyword behavior.
23744
23745         Do not short-circuit, because if we do, we
23746         report errors (ie, #if false && true would produce an invalid
23747         directive error);
23748
23749
23750 2002-11-24  Martin Baulig  <martin@ximian.com>
23751
23752         * expression.cs (Cast.TryReduce): If we're in checked syntax,
23753         check constant ranges and report a CS0221.  Fixes #33186.
23754
23755 2002-11-24  Martin Baulig  <martin@ximian.com>
23756
23757         * cs-parser.jay: Make this work for uninitialized variable
23758         declarations in the `for' initializer.  Fixes #32416.
23759
23760 2002-11-24  Martin Baulig  <martin@ximian.com>
23761
23762         * ecore.cs (Expression.ConvertExplicit): Make casting from/to
23763         System.Enum actually work.  Fixes bug #32269, added verify-6.cs.
23764
23765 2002-11-24  Martin Baulig  <martin@ximian.com>
23766
23767         * expression.cs (Binary.DoNumericPromotions): Added `check_user_conv'
23768         argument; if true, we also check for user-defined conversions.
23769         This is only needed if both arguments are of a user-defined type.
23770         Fixes #30443, added test-175.cs.
23771         (Binary.ForceConversion): Pass the location argument to ConvertImplicit.
23772
23773         * ecore.cs (Expression.ImplicitUserConversionExists): New method.
23774
23775 2002-11-24  Martin Baulig  <martin@ximian.com>
23776
23777         * expression.cs (ArrayAccess.GetStoreOpcode): New public static
23778         function to get the store opcode.
23779         (Invocation.EmitParams): Call ArrayAccess.GetStoreOpcode() and
23780         only emit the Ldelema if the store opcode is Stobj.  You must run
23781         both test-34 and test-167 to test this.  Fixes #34529.
23782
23783 2002-11-23  Martin Baulig  <martin@ximian.com>
23784
23785         * ecore.cs (Expression.MemberLookup): Added additional
23786         `qualifier_type' argument which is used when we're being called
23787         from MemberAccess.DoResolve() and null if we're called from a
23788         SimpleName lookup.
23789         (Expression.MemberLookupFailed): New method to report errors; this
23790         does the CS1540 check and reports the correct error message.
23791
23792         * typemanager.cs (MemberLookup): Added additional `qualifier_type'
23793         argument for the CS1540 check and redone the way how we're dealing
23794         with private members.  See the comment in the source code for details.
23795         (FilterWithClosure): Reverted this back to revision 1.197; renamed
23796         `closure_start_type' to `closure_qualifier_type' and check whether
23797         it's not null.  It was not this filter being broken, it was just
23798         being called with the wrong arguments.
23799
23800         * expression.cs (MemberAccess.DoResolve): use MemberLookupFinal()
23801         and pass it the correct `qualifier_type'; this also does the error
23802         handling for us.
23803
23804 2002-11-22  Miguel de Icaza  <miguel@ximian.com>
23805
23806         * expression.cs (Invocation.EmitParams): If the we are dealing
23807         with a non-built-in value type, load its address as well.
23808
23809         (ArrayCreation): Use a a pretty constant instead
23810         of the hardcoded value 2.   Use 6 instead of 2 for the number of
23811         static initializers.  
23812
23813         (ArrayCreation.EmitDynamicInitializers): Peel enumerations,
23814         because they are not really value types, just glorified integers. 
23815
23816         * driver.cs: Do not append .exe, the CSC compiler does not do it.
23817
23818         * ecore.cs: Remove redundant code for enumerations, make them use
23819         the same code path as everything else, fixes the casting issue
23820         with enumerations in Windows.Forms.
23821
23822         * attribute.cs: Do only cast to string if it is a string, the
23823         validation happens later.
23824
23825         * typemanager.cs: Temproary hack to avoid a bootstrap issue until
23826         people upgrade their corlibs.
23827
23828         * ecore.cs: Oops, enumerations were not following the entire code path
23829
23830 2002-11-21  Miguel de Icaza  <miguel@ximian.com>
23831
23832         * typemanager.cs (FilterWithClosure): Commented out the test for
23833         1540 in typemanager.cs, as it has problems when accessing
23834         protected methods from a parent class (see test-174.cs). 
23835
23836         * attribute.cs (Attribute.ValidateGuid): new method.
23837         (Attribute.Resolve): Use above.
23838
23839 2002-11-19  Miguel de Icaza  <miguel@ximian.com>
23840
23841         * enum.cs: In FindMembers, perform a recursive lookup for values. (34308)
23842
23843         * ecore.cs (SimpleName.SimpleNameResolve): Remove the special
23844         handling for enumerations, as we only needed the TypeContainer
23845         functionality to begin with (this is required for the fix below to
23846         work for enums that reference constants in a container class for
23847         example). 
23848
23849         * codegen.cs (EmitContext): Make TypeContainer a DeclSpace.
23850
23851         * enum.cs (Enum.Define): Use `this' instead of parent, so we have
23852         a valid TypeBuilder to perform lookups on.o
23853
23854         * class.cs (InheritableMemberSignatureCompare): Use true in the
23855         call to GetGetMethod and GetSetMethod, because we are comparing
23856         the signature, and we need to get the methods *even* if they are
23857         private. 
23858
23859         (PropertyBase.CheckBase): ditto.
23860
23861         * statement.cs (Switch.ResolveAndReduce, Block.EmitMeta,
23862         GotoCase.Resolve): Use Peel on EmpytCasts.
23863
23864         * ecore.cs (EmptyCast): drop child, add Peel method.
23865
23866 2002-11-17  Martin Baulig  <martin@ximian.com>
23867
23868         * ecore.cs (EmptyCast.Child): New public property.
23869
23870         * statement.cs (SwitchLabel.ResolveAndReduce): Check whether the
23871         label resolved to an EmptyCast.  Fixes #34162.
23872         (GotoCase.Resolve): Likewise.
23873         (Block.EmitMeta): Likewise.
23874
23875 2002-11-17  Martin Baulig  <martin@ximian.com>
23876
23877         * expression.cs (Invocation.BetterConversion): Prefer int over
23878         uint; short over ushort; long over ulong for integer literals.
23879         Use ImplicitConversionExists instead of StandardConversionExists
23880         since we also need to check for user-defined implicit conversions.
23881         Fixes #34165.  Added test-173.cs.
23882
23883 2002-11-16  Martin Baulig  <martin@ximian.com>
23884
23885         * expression.cs (Binary.EmitBranchable): Eliminate comparisions
23886         with the `true' and `false' literals.  Fixes #33151.
23887
23888 2002-11-16  Martin Baulig  <martin@ximian.com>
23889
23890         * typemanager.cs (RealMemberLookup): Reverted Miguel's patch from
23891         October 22nd; don't do the cs1540 check for static members.
23892
23893         * ecore.cs (PropertyExpr.ResolveAccessors): Rewrote this; we're
23894         now using our own filter here and doing the cs1540 check again.
23895
23896 2002-11-16  Martin Baulig  <martin@ximian.com>
23897
23898         * support.cs (InternalParameters): Don't crash if we don't have
23899         any fixed parameters.  Fixes #33532.
23900
23901 2002-11-16  Martin Baulig  <martin@ximian.com>
23902
23903         * decl.cs (MemberCache.AddMethods): Use BindingFlags.FlattenHierarchy
23904         when looking up static methods to make this work on Windows.
23905         Fixes #33773.
23906
23907 2002-11-16  Martin Baulig  <martin@ximian.com>
23908
23909         * ecore.cs (PropertyExpr.VerifyAssignable): Check whether we have
23910         a setter rather than using PropertyInfo.CanWrite.
23911
23912 2002-11-15  Nick Drochak  <ndrochak@gol.com>
23913
23914         * class.cs: Allow acces to block member by subclasses. Fixes build
23915         breaker.
23916
23917 2002-11-14  Martin Baulig  <martin@ximian.com>
23918
23919         * class.cs (Constructor.Emit): Added the extern/block check.
23920         Fixes bug #33678.
23921
23922 2002-11-14  Martin Baulig  <martin@ximian.com>
23923
23924         * expression.cs (IndexerAccess.DoResolve): Do a DeclaredOnly
23925         iteration while looking for indexers, this is needed because the
23926         indexer may have a different name in our base classes.  Fixed the
23927         error reporting (no indexers at all, not get accessor, no
23928         overloaded match).  Fixes bug #33089.
23929         (IndexerAccess.DoResolveLValue): Likewise.
23930
23931 2002-11-14  Martin Baulig  <martin@ximian.com>
23932
23933         * class.cs (PropertyBase.CheckBase): Make this work for multiple
23934         indexers.  Fixes the first part of bug #33089.
23935         (MethodSignature.InheritableMemberSignatureCompare): Added support
23936         for properties.
23937
23938 2002-11-13  Ravi Pratap  <ravi@ximian.com>
23939
23940         * attribute.cs (Attribute.Resolve): Catch the
23941         NullReferenceException and report it since it isn't supposed to
23942         happen. 
23943
23944 2002-11-12  Miguel de Icaza  <miguel@ximian.com>
23945
23946         * expression.cs (Binary.EmitBranchable): Also handle the cases for
23947         LogicalOr and LogicalAnd that can benefit from recursively
23948         handling EmitBranchable.  The code now should be nice for Paolo.
23949
23950 2002-11-08  Miguel de Icaza  <miguel@ximian.com>
23951
23952         * typemanager.cs (LookupType): Added a negative-hit hashtable for
23953         the Type lookups, as we perform quite a number of lookups on
23954         non-Types.  This can be removed once we can deterministically tell
23955         whether we have a type or a namespace in advance.
23956
23957         But this might require special hacks from our corlib.
23958
23959         * TODO: updated.
23960
23961         * ecore.cs (TryImplicitIntConversion): Handle conversions to float
23962         and double which avoids a conversion from an integer to a double.
23963
23964         * expression.cs: tiny optimization, avoid calling IsConstant,
23965         because it effectively performs the lookup twice.
23966
23967 2002-11-06  Miguel de Icaza  <miguel@ximian.com>
23968
23969         But a bogus return here to keep the semantics of the old code
23970         until the Mono runtime is fixed.
23971
23972         * pending.cs (GetMissingInterfaces): New method used to remove all
23973         the interfaces that are already implemented by our parent
23974         classes from the list of pending methods. 
23975
23976         * interface.cs: Add checks for calls after ResolveTypeExpr.
23977
23978 2002-11-05  Miguel de Icaza  <miguel@ximian.com>
23979
23980         * class.cs (Class.Emit): Report warning 67: event not used if the
23981         warning level is beyond 3.
23982
23983         * ecore.cs (Expression.ConvertExplicit): Missed a check for expr
23984         being a NullLiteral.
23985
23986         * cs-parser.jay: Fix, Gonzalo reverted the order of the rank
23987         specifiers. 
23988
23989         * class.cs (TypeContainer.GetClassBases): Cover a missing code
23990         path that might fail if a type can not be resolved.
23991
23992         * expression.cs (Binary.Emit): Emit unsigned versions of the
23993         operators. 
23994
23995         * driver.cs: use error 5.
23996
23997 2002-11-02  Gonzalo Paniagua Javier <gonzalo@gnome-db.org>
23998
23999         * cs-parser.jay: simplified a rule and 5 SR conflicts dissapeared.
24000
24001 2002-11-01  Miguel de Icaza  <miguel@ximian.com>
24002
24003         * cs-parser.jay (switch_section): A beautiful patch from Martin
24004         Baulig that fixed 33094.
24005
24006 2002-10-31  Miguel de Icaza  <miguel@ximian.com>
24007
24008         * ecore.cs (PropertyExpr.DoResolveLValue, PropertyExpr.DoResolve):
24009         Check whether the base is abstract and report an error if so.
24010
24011         * expression.cs (IndexerAccess.DoResolveLValue,
24012         IndexerAccess.DoResolve): ditto. 
24013
24014         (Invocation.DoResolve): ditto.
24015
24016         (Invocation.FullMethodDesc): Improve the report string.
24017
24018         * statement.cs (Block): Eliminate IsVariableDefined as it is
24019         basically just a wrapper for GetVariableInfo.
24020
24021         * ecore.cs (SimpleName): Use new 
24022
24023         * support.cs (ReflectionParamter.ParameterType): We unwrap the
24024         type, as we return the actual parameter ref/unref state on a
24025         different call.
24026
24027 2002-10-30  Miguel de Icaza  <miguel@ximian.com>
24028
24029         * support.cs: Return proper flags REF/OUT fixing the previous
24030         commit.  
24031
24032         * expression.cs: Reverted last patch, that was wrong.  Is_ref is
24033         not used to mean `ref' but `ref or out' in ParameterReference
24034
24035         * delegate.cs (FullDelegateDesc): use ParameterDesc to get the
24036         full type signature instead of calling TypeManger.CSharpName
24037         ourselves. 
24038
24039         * support.cs (InternalParameters.ParameterDesc): Do not compare
24040         directly to the modflags, because REF/OUT will actually be bitsets
24041         if set. 
24042
24043         * delegate.cs (VerifyMethod): Check also the modifiers.
24044
24045         * cs-tokenizer.cs: Fix bug where floating point values with an
24046         exponent where a sign was missing was ignored.
24047
24048         * driver.cs: Allow multiple assemblies to be specified in a single
24049         /r: argument
24050
24051 2002-10-28  Miguel de Icaza  <miguel@ximian.com>
24052
24053         * cs-parser.jay: Ugly.  We had to add a multiplicative_expression,
24054         because identifiers after a parenthesis would end up in this kind
24055         of production, and we needed to desamiguate it for having casts
24056         like:
24057
24058                 (UserDefinedType *) xxx
24059
24060 2002-10-24  Miguel de Icaza  <miguel@ximian.com>
24061
24062         * typemanager.cs (RealMemberLookup): when we deal with a subclass,
24063         we should set on the Bindingflags.NonPublic, but not turn on
24064         private_ok.  private_ok controls whether a Private member is
24065         returned (this is chekced on the filter routine), while the
24066         BindingFlags.NonPublic just controls whether private/protected
24067         will be allowed.   This fixes the problem part of the problem of
24068         private properties being allowed to be used in derived classes.
24069
24070         * expression.cs (BaseAccess): Provide an DoResolveLValue method,
24071         so we can call the children DoResolveLValue method (this will
24072         properly signal errors on lvalue assignments to base properties)
24073
24074         * ecore.cs (PropertyExpr.ResolveAccessors): If both setter and
24075         getter are null, and we have a property info, we know that this
24076         happened because the lookup failed, so we report an error 122 for
24077         protection level violation.
24078
24079         We also silently return if setter and getter are null in the
24080         resolve functions, this condition only happens if we have flagged
24081         the error before.  This is the other half of the problem. 
24082
24083         (PropertyExpr.ResolveAccessors): Turns out that PropertyInfo does
24084         not have accessibility information, that is why we were returning
24085         true in the filter function in typemanager.cs.
24086
24087         To properly report 122 (property is inaccessible because of its
24088         protection level) correctly, we report this error in ResolveAccess
24089         by failing if both the setter and the getter are lacking (ie, the
24090         lookup failed). 
24091
24092         DoResolve and DoLResolve have been modified to check for both
24093         setter/getter being null and returning silently, the reason being
24094         that I did not want to put the knowledge about this error in upper
24095         layers, like:
24096
24097         int old = Report.Errors;
24098         x = new PropertyExpr (...);
24099         if (old != Report.Errors)
24100                 return null;
24101         else
24102                 return x;
24103
24104         So the property expr is returned, but it is invalid, so the error
24105         will be flagged during the resolve process. 
24106
24107         * class.cs: Remove InheritablePropertySignatureCompare from the
24108         class, as we no longer depend on the property signature to compute
24109         whether it is possible to implement a method or not.
24110
24111         The reason is that calling PropertyInfo.GetGetMethod will return
24112         null (in .NET, in Mono it works, and we should change this), in
24113         cases where the Get Method does not exist in that particular
24114         class.
24115
24116         So this code:
24117
24118         class X { public virtual int A { get { return 1; } } }
24119         class Y : X { }
24120         class Z : Y { public override int A { get { return 2; } } }
24121
24122         Would fail in Z because the parent (Y) would not have the property
24123         defined.  So we avoid this completely now (because the alternative
24124         fix was ugly and slow), and we now depend exclusively on the
24125         method names.
24126
24127         (PropertyBase.CheckBase): Use a method-base mechanism to find our
24128         reference method, instead of using the property.
24129
24130         * typemanager.cs (GetPropertyGetter, GetPropertySetter): These
24131         routines are gone now.
24132
24133         * typemanager.cs (GetPropertyGetter, GetPropertySetter): swap the
24134         names, they were incorrectly named.
24135
24136         * cs-tokenizer.cs: Return are more gentle token on failure. 
24137
24138         * pending.cs (PendingImplementation.InterfaceMethod): This routine
24139         had an out-of-sync index variable, which caused it to remove from
24140         the list of pending methods the wrong method sometimes.
24141
24142 2002-10-22  Miguel de Icaza  <miguel@ximian.com>
24143
24144         * ecore.cs (PropertyExpr): Do not use PropertyInfo.CanRead,
24145         CanWrite, because those refer to this particular instance of the
24146         property, and do not take into account the fact that we can
24147         override single members of a property.
24148
24149         Constructor requires an EmitContext.  The resolution process does
24150         not happen here, but we need to compute the accessors before,
24151         because the resolution does not always happen for properties.
24152
24153         * typemanager.cs (RealMemberLookup): Set private_ok if we are a
24154         subclass, before we did not update this flag, but we did update
24155         bindingflags. 
24156
24157         (GetAccessors): Drop this routine, as it did not work in the
24158         presence of partially overwritten set/get methods. 
24159
24160         Notice that this broke the cs1540 detection, but that will require
24161         more thinking. 
24162
24163 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24164
24165         * class.cs:
24166         * codegen.cs:
24167         * driver.cs: issue a warning instead of an error if we don't support
24168         debugging for the platform. Also ignore a couple of errors that may
24169         arise when trying to write the symbols. Undo my previous patch.
24170
24171 2002-10-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24172
24173         * driver.cs: ignore /debug switch except for Unix platforms.
24174
24175 2002-10-23  Nick Drochak  <ndrochak@gol.com>
24176
24177         * makefile: Remove mcs2.exe and mcs3.exe on 'make clean'
24178
24179 2002-10-21  Miguel de Icaza  <miguel@ximian.com>
24180
24181         * driver.cs: Do not make mcs-debug conditional, so we do not break
24182         builds that use it.
24183
24184         * statement.cs (UsageVector.MergeChildren): I would like Martin to
24185         review this patch.  But basically after all the children variables
24186         have been merged, the value of "Breaks" was not being set to
24187         new_breaks for Switch blocks.  I think that it should be set after
24188         it has executed.  Currently I set this to the value of new_breaks,
24189         but only if new_breaks is FlowReturn.ALWAYS, which is a bit
24190         conservative, but I do not understand this code very well.
24191
24192         I did not break anything in the build, so that is good ;-)
24193
24194         * cs-tokenizer.cs: Also allow \r in comments as a line separator.
24195
24196 2002-10-20  Mark Crichton  <crichton@gimp.org>
24197
24198         * cfold.cs: Fixed compile blocker.  Really fixed it this time.
24199
24200 2002-10-20  Nick Drochak  <ndrochak@gol.com>
24201
24202         * cfold.cs: Fixed compile blocker.
24203
24204 2002-10-20  Miguel de Icaza  <miguel@ximian.com>
24205
24206         * driver.cs: I was chekcing the key, not the file.
24207
24208 2002-10-19  Ravi Pratap  <ravi@ximian.com>
24209
24210         * ecore.cs (UserDefinedConversion): Get rid of the bogus error
24211         message that we were generating - we just need to silently return
24212         a null.
24213
24214 2002-10-19  Miguel de Icaza  <miguel@ximian.com>
24215
24216         * class.cs (Event.Define): Change my previous commit, as this
24217         breaks the debugger.  This is a temporary hack, as it seems like
24218         the compiler is generating events incorrectly to begin with.
24219
24220         * expression.cs (Binary.ResolveOperator): Added support for 
24221         "U operator - (E x, E y)"
24222
24223         * cfold.cs (BinaryFold): Added support for "U operator - (E x, E
24224         y)".
24225
24226         * ecore.cs (FieldExpr.AddressOf): We had a special code path for
24227         init-only variables, but this path did not take into account that
24228         there might be also instance readonly variables.  Correct this
24229         problem. 
24230
24231         This fixes bug 32253
24232
24233         * delegate.cs (NewDelegate.DoResolve): Catch creation of unsafe
24234         delegates as well.
24235
24236         * driver.cs: Change the extension for modules to `netmodule'
24237
24238         * cs-parser.jay: Improved slightly the location tracking for
24239         the debugger symbols.
24240
24241         * class.cs (Event.Define): Use Modifiers.FieldAttr on the
24242         modifiers that were specified instead of the hardcoded value
24243         (FamAndAssem).  This was basically ignoring the static modifier,
24244         and others.  Fixes 32429.
24245
24246         * statement.cs (Switch.SimpleSwitchEmit): Simplified the code, and
24247         fixed a bug in the process (32476)
24248
24249         * expression.cs (ArrayAccess.EmitAssign): Patch from
24250         hwang_rob@yahoo.ca that fixes bug 31834.3
24251
24252 2002-10-18  Miguel de Icaza  <miguel@ximian.com>
24253
24254         * driver.cs: Make the module extension .netmodule.
24255
24256 2002-10-16  Miguel de Icaza  <miguel@ximian.com>
24257
24258         * driver.cs: Report an error if the resource file is not found
24259         instead of crashing.
24260
24261         * ecore.cs (PropertyExpr.EmitAssign): Pass IsBase instead of
24262         false, like Emit does.
24263
24264 2002-10-16  Nick Drochak  <ndrochak@gol.com>
24265
24266         * typemanager.cs: Remove unused private member.  Also reported mcs
24267         bug to report this as a warning like csc.
24268
24269 2002-10-15  Martin Baulig  <martin@gnome.org>
24270
24271         * statement.cs (Statement.Emit): Made this a virtual method; emits
24272         the line number info and calls DoEmit().
24273         (Statement.DoEmit): New protected abstract method, formerly knows
24274         as Statement.Emit().
24275
24276         * codegen.cs (EmitContext.Mark): Check whether we have a symbol writer.
24277
24278 2002-10-11  Miguel de Icaza  <miguel@ximian.com>
24279
24280         * class.cs: Following the comment from 2002-09-26 to AddMethod, I
24281         have fixed a remaining problem: not every AddXXXX was adding a
24282         fully qualified name.  
24283
24284         Now everyone registers a fully qualified name in the DeclSpace as
24285         being defined instead of the partial name.  
24286
24287         Downsides: we are slower than we need to be due to the excess
24288         copies and the names being registered this way.  
24289
24290         The reason for this is that we currently depend (on the corlib
24291         bootstrap for instance) that types are fully qualified, because
24292         we dump all the types in the namespace, and we should really have
24293         types inserted into the proper namespace, so we can only store the
24294         basenames in the defined_names array.
24295
24296 2002-10-10  Martin Baulig  <martin@gnome.org>
24297
24298         * expression.cs (ArrayAccess.EmitStoreOpcode): Reverted the patch
24299         from bug #31834, see the bug report for a testcase which is
24300         miscompiled.
24301
24302 2002-10-10  Martin Baulig  <martin@gnome.org>
24303
24304         * codegen.cs (EmitContext.Breaks): Removed, we're now using the
24305         flow analysis code for this.
24306
24307         * statement.cs (Do, While, For): Tell the flow analysis code about
24308         infinite loops.
24309         (FlowBranching.UsageVector): Added support for infinite loops.
24310         (Block.Resolve): Moved the dead code elimination here and use flow
24311         analysis to do it.
24312
24313 2002-10-09  Miguel de Icaza  <miguel@ximian.com>
24314
24315         * class.cs (Field.Define): Catch cycles on struct type
24316         definitions. 
24317
24318         * typemanager.cs (IsUnmanagedtype): Do not recursively check
24319         fields if the fields are static.  We only need to check instance
24320         fields. 
24321
24322         * expression.cs (As.DoResolve): Test for reference type.
24323
24324         * statement.cs (Using.ResolveExpression): Use
24325         ConvertImplicitRequired, not ConvertImplicit which reports an
24326         error on failture
24327         (Using.ResolveLocalVariableDecls): ditto.
24328
24329         * expression.cs (Binary.ResolveOperator): Report errors in a few
24330         places where we had to.
24331
24332         * typemanager.cs (IsUnmanagedtype): Finish implementation.
24333
24334 2002-10-08  Miguel de Icaza  <miguel@ximian.com>
24335
24336         * expression.cs: Use StoreFromPtr instead of extracting the type
24337         and then trying to use Stelem.  Patch is from hwang_rob@yahoo.ca
24338
24339         * ecore.cs (ImplicitReferenceConversion): It is possible to assign
24340         an enumeration value to a System.Enum, but System.Enum is not a
24341         value type, but an class type, so we need to box.
24342
24343         (Expression.ConvertExplicit): One codepath could return
24344         errors but not flag them.  Fix this.  Fixes #31853
24345
24346         * parameter.cs (Resolve): Do not allow void as a parameter type.
24347
24348 2002-10-06  Martin Baulig  <martin@gnome.org>
24349
24350         * statemenc.cs (FlowBranching.SetParameterAssigned): Don't crash
24351         if it's a class type and not a struct.  Fixes #31815.
24352
24353 2002-10-06  Martin Baulig  <martin@gnome.org>
24354
24355         * statement.cs: Reworked the flow analysis code a bit to make it
24356         usable for dead code elimination.
24357
24358 2002-10-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24359
24360         * cs-parser.jay: allow empty source files. Fixes bug #31781.
24361
24362 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24363
24364         * expression.cs (ComposedCast.DoResolveType): A quick workaround
24365         to fix the test 165, will investigate deeper.
24366
24367 2002-10-04  Martin Baulig  <martin@gnome.org>
24368
24369         * statement.cs (FlowBranching.UsageVector.MergeChildren): Make
24370         finally blocks actually work.
24371         (Try.Resolve): We don't need to create a sibling for `finally' if
24372         there is no finally block.
24373
24374 2002-10-04  Martin Baulig  <martin@gnome.org>
24375
24376         * class.cs (Constructor.Define): The default accessibility for a
24377         non-default constructor is private, not public.
24378
24379 2002-10-04  Miguel de Icaza  <miguel@ximian.com>
24380
24381         * class.cs (Constructor): Make AllowedModifiers public, add
24382         EXTERN.
24383
24384         * cs-parser.jay: Perform the modifiers test here, as the
24385         constructor for the Constructor class usually receives a zero
24386         because of the way we create it (first we create, later we
24387         customize, and we were never checking the modifiers).
24388
24389         * typemanager.cs (Typemanager.LookupTypeDirect): This new function
24390         is a version of LookupTypeReflection that includes the type-name
24391         cache.  This can be used as a fast path for functions that know
24392         the fully qualified name and are only calling into *.GetType() to
24393         obtain a composed type.
24394
24395         This is also used by TypeManager.LookupType during its type
24396         composition.
24397
24398         (LookupType): We now also track the real type name, as sometimes
24399         we can get a quey for the real type name from things like
24400         ComposedCast.  This fixes bug 31422.
24401
24402         * expression.cs (ComposedCast.Resolve): Since we are obtaining a
24403         complete type fullname, it does not have to go through the type
24404         resolution system to obtain the composed version of the type (for
24405         obtaining arrays or pointers).
24406
24407         (Conditional.Emit): Use the EmitBoolExpression to
24408         generate nicer code, as requested by Paolo.
24409
24410         (ArrayCreation.CheckIndices): Use the patch from
24411         hwang_rob@yahoo.ca to validate the array initializers. 
24412
24413 2002-10-03  Miguel de Icaza  <miguel@ximian.com>
24414
24415         * class.cs (ConstructorInitializer.Emit): simplify code by using
24416         Invocation.EmitCall, and at the same time, fix the bugs in calling
24417         parent constructors that took variable arguments. 
24418
24419         * ecore.cs (Expression.ConvertNumericExplicit,
24420         Expression.ImplicitNumericConversion): Remove the code that
24421         manually wrapped decimal (InternalTypeConstructor call is now gone
24422         as well).
24423
24424         * expression.cs (Cast.TryReduce): Also handle decimal types when
24425         trying to perform a constant fold on the type.
24426
24427         * typemanager.cs (IsUnmanagedtype): Partially implemented.
24428
24429         * parameter.cs: Removed ResolveAndDefine, as it was not needed, as
24430         that only turned off an error report, and did nothing else. 
24431
24432 2002-10-02  Miguel de Icaza  <miguel@ximian.com>
24433
24434         * driver.cs: Handle and ignore /fullpaths
24435
24436 2002-10-01  Miguel de Icaza  <miguel@ximian.com>
24437
24438         * expression.cs (Binary.ResolveOperator): Catch the case where
24439         DoNumericPromotions returns true, 
24440
24441         (Binary.DoNumericPromotions): Simplify the code, and the tests.
24442
24443 2002-09-27  Miguel de Icaza  <miguel@ximian.com>
24444
24445         * ecore.cs (EventExpr.Emit): Instead of emitting an exception,
24446         report error 70.
24447
24448 2002-09-26  Miguel de Icaza  <miguel@ximian.com>
24449
24450         * ecore.cs (ConvertNumericExplicit): It is not enough that the
24451         conversion exists, but it is also required that the conversion be
24452         performed.  This manifested in "(Type64Enum) 2".  
24453
24454         * class.cs (TypeManager.AddMethod): The fix is not to change
24455         AddEnum, because that one was using a fully qualified name (every
24456         DeclSpace derivative does), but to change the AddMethod routine
24457         that was using an un-namespaced name.  This now correctly reports
24458         the duplicated name.
24459
24460         Revert patch until I can properly fix it.  The issue
24461         is that we have a shared Type space across all namespaces
24462         currently, which is wrong.
24463
24464         Options include making the Namespace a DeclSpace, and merge
24465         current_namespace/current_container in the parser.
24466
24467 2002-09-25  Miguel de Icaza  <miguel@ximian.com>
24468
24469         * cs-parser.jay: Improve error reporting when we get a different
24470         kind of expression in local_variable_type and
24471         local_variable_pointer_type. 
24472
24473         Propagate this to avoid missleading errors being reported.
24474
24475         * ecore.cs (ImplicitReferenceConversion): treat
24476         TypeManager.value_type as a target just like object_type.   As
24477         code like this:
24478
24479         ValueType v = 1;
24480
24481         Is valid, and needs to result in the int 1 being boxed before it
24482         is assigned to the value type v.
24483
24484         * class.cs (TypeContainer.AddEnum): Use the basename, not the name
24485         to validate the enumeration name.
24486
24487         * expression.cs (ArrayAccess.EmitAssign): Mimic the same test from
24488         EmitDynamicInitializers for the criteria to use Ldelema.  Thanks
24489         to hwang_rob@yahoo.ca for finding the bug and providing a patch.
24490
24491         * ecore.cs (TryImplicitIntConversion): When doing an
24492         implicit-enumeration-conversion, check if the type is 64-bits and
24493         perform a conversion before passing to EnumConstant.
24494
24495 2002-09-23  Miguel de Icaza  <miguel@ximian.com>
24496
24497         * decl.cs (Error_AmbiguousTypeReference); New routine used to
24498         report ambiguous type references.  Unlike the MS version, we
24499         report what the ambiguity is.   Innovation at work ;-)
24500
24501         (DeclSpace.FindType): Require a location argument to
24502         display when we display an ambiguous error.
24503
24504         * ecore.cs: (SimpleName.DoResolveType): Pass location to FindType.
24505
24506         * interface.cs (GetInterfaceTypeByName): Pass location to FindType.
24507
24508         * expression.cs (EmitDynamicInitializers): Apply patch from
24509         hwang_rob@yahoo.ca that fixes the order in which we emit our
24510         initializers. 
24511
24512 2002-09-21  Martin Baulig  <martin@gnome.org>
24513
24514         * delegate.cs (Delegate.VerifyApplicability): Make this work if the
24515         delegate takes no arguments.
24516
24517 2002-09-20  Miguel de Icaza  <miguel@ximian.com>
24518
24519         * constant.cs: Use Conv_U8 instead of Conv_I8 when loading longs
24520         from integers.
24521
24522         * expression.cs: Extract the underlying type.
24523
24524         * ecore.cs (StoreFromPtr): Use TypeManager.IsEnumType instad of IsEnum
24525
24526         * decl.cs (FindType): Sorry about this, fixed the type lookup bug.
24527
24528 2002-09-19  Miguel de Icaza  <miguel@ximian.com>
24529
24530         * class.cs (TypeContainer.DefineType): We can not use the nice
24531         PackingSize with the size set to 1 DefineType method, because it
24532         will not allow us to define the interfaces that the struct
24533         implements.
24534
24535         This completes the fixing of bug 27287
24536
24537         * ecore.cs (Expresion.ImplicitReferenceConversion): `class-type S'
24538         means also structs.  This fixes part of the problem. 
24539         (Expresion.ImplicitReferenceConversionExists): ditto.
24540
24541         * decl.cs (DeclSparce.ResolveType): Only report the type-not-found
24542         error if there were no errors reported during the type lookup
24543         process, to avoid duplicates or redundant errors.  Without this
24544         you would get an ambiguous errors plus a type not found.  We have
24545         beaten the user enough with the first error.  
24546
24547         (DeclSparce.FindType): Emit a warning if we have an ambiguous
24548         reference. 
24549
24550         * ecore.cs (SimpleName.DoResolveType): If an error is emitted
24551         during the resolution process, stop the lookup, this avoids
24552         repeated error reports (same error twice).
24553
24554         * rootcontext.cs: Emit a warning if we have an ambiguous reference.
24555
24556         * typemanager.cs (LookupType): Redo the type lookup code to match
24557         the needs of System.Reflection.  
24558
24559         The issue is that System.Reflection requires references to nested
24560         types to begin with a "+" sign instead of a dot.  So toplevel
24561         types look like: "NameSpace.TopLevelClass", and nested ones look
24562         like "Namespace.TopLevelClass+Nested", with arbitrary nesting
24563         levels. 
24564
24565 2002-09-19  Martin Baulig  <martin@gnome.org>
24566
24567         * codegen.cs (EmitContext.EmitTopBlock): If control flow analysis
24568         says that a method always returns or always throws an exception,
24569         don't report the CS0161.
24570
24571         * statement.cs (FlowBranching.UsageVector.MergeChildren): Always
24572         set `Returns = new_returns'.
24573
24574 2002-09-19  Martin Baulig  <martin@gnome.org>
24575
24576         * expression.cs (MemberAccess.ResolveMemberAccess): When resolving
24577         to an enum constant, check for a CS0176.
24578
24579 2002-09-18  Miguel de Icaza  <miguel@ximian.com>
24580
24581         * class.cs (TypeContainer.CheckPairedOperators): Now we check
24582         for operators that must be in pairs and report errors.
24583
24584         * ecore.cs (SimpleName.DoResolveType): During the initial type
24585         resolution process, when we define types recursively, we must
24586         check first for types in our current scope before we perform
24587         lookups in the enclosing scopes.
24588
24589         * expression.cs (MakeByteBlob): Handle Decimal blobs.
24590
24591         (Invocation.VerifyArgumentsCompat): Call
24592         TypeManager.TypeToCoreType on the parameter_type.GetElementType.
24593         I thought we were supposed to always call this, but there are a
24594         few places in the code where we dont do it.
24595
24596 2002-09-17  Miguel de Icaza  <miguel@ximian.com>
24597
24598         * driver.cs: Add support in -linkres and -resource to specify the
24599         name of the identifier.
24600
24601 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24602
24603         * ecore.cs (StandardConversionExists): Sync with the conversion
24604         code: allow anything-* to void* conversions.
24605
24606         (FindMostSpecificSource): Use an Expression argument
24607         instead of a Type, because we might be handed over a Literal which
24608         gets a few more implicit conversions that plain types do not.  So
24609         this information was being lost.
24610
24611         Also, we drop the temporary type-holder expression when not
24612         required.
24613
24614 2002-09-17  Martin Baulig  <martin@gnome.org>
24615
24616         * class.cs (PropertyBase.CheckBase): Don't check the base class if
24617         this is an explicit interface implementation.
24618
24619 2002-09-17  Martin Baulig  <martin@gnome.org>
24620
24621         * class.cs (PropertyBase.CheckBase): Make this work for indexers with
24622         different `IndexerName' attributes.
24623
24624         * expression.cs (BaseIndexerAccess): Rewrote this class to use IndexerAccess.
24625         (IndexerAccess): Added special protected ctor for BaseIndexerAccess and
24626         virtual CommonResolve().
24627
24628 2002-09-16  Miguel de Icaza  <miguel@ximian.com>
24629
24630         * enum.cs (LookupEnumValue): Use the EnumConstant declared type,
24631         and convert that to the UnderlyingType.
24632
24633         * statement.cs (Foreach.Resolve): Indexers are just like variables
24634         or PropertyAccesses.
24635
24636         * cs-tokenizer.cs (consume_string): Track line numbers and columns
24637         inside quoted strings, we were not doing this before.
24638
24639 2002-09-16  Martin Baulig  <martin@gnome.org>
24640
24641         * ecore.cs (MethodGroupExpr.DoResolve): If we have an instance expression,
24642         resolve it.  This is needed for the definite assignment check of the
24643         instance expression, fixes bug #29846.
24644         (PropertyExpr.DoResolve, EventExpr.DoResolve): Likewise.
24645
24646 2002-09-16  Nick Drochak  <ndrochak@gol.com>
24647
24648         * parameter.cs: Fix compile error.  Cannot reference static member
24649         from an instance object.  Is this an mcs bug?
24650
24651 2002-09-14  Martin Baulig  <martin@gnome.org>
24652
24653         * decl.cs (MemberCache.SetupCacheForInterface): Don't add an interface
24654         multiple times.  Fixes bug #30295, added test-166.cs.
24655
24656 2002-09-14  Martin Baulig  <martin@gnome.org>
24657
24658         * statement.cs (Block.Emit): Don't emit unreachable code.
24659         (Switch.SimpleSwitchEmit, Switch.TableSwitchEmit): Check for missing
24660         `break' statements.
24661         (Goto.Emit, Continue.Emit): Set ec.Breaks = true.
24662
24663 2002-09-14  Martin Baulig  <martin@gnome.org>
24664
24665         * parameter.cs (Parameter.Attributes): Make this work if Modifier.ISBYREF
24666         is set.
24667
24668 2002-09-14  Martin Baulig  <martin@gnome.org>
24669
24670         * typemanager.cs (TypeManager.IsNestedChildOf): This must return false
24671         if `type == parent' since in this case `type.IsSubclassOf (parent)' will
24672         be false on the ms runtime.
24673
24674 2002-09-13  Martin Baulig  <martin@gnome.org>
24675
24676         * ecore.cs (SimpleName.SimpleNameResolve): Include the member name in
24677         the CS0038 error message.
24678
24679 2002-09-12  Miguel de Icaza  <miguel@ximian.com>
24680
24681         * expression.cs (CheckedExpr, UnCheckedExpr): If we have a
24682         constant inside, return it.
24683
24684 2002-09-12  Martin Baulig  <martin@gnome.org>
24685
24686         * cfold.cs (ConstantFold.DoConstantNumericPromotions): Check whether an
24687         implicit conversion can be done between enum types.
24688
24689         * enum.cs (Enum.LookupEnumValue): If the value is an EnumConstant,
24690         check whether an implicit conversion to the current enum's UnderlyingType
24691         exists and report an error if not.
24692
24693         * codegen.cs (CodeGen.Init): Delete the symbol file when compiling
24694         without debugging support.
24695
24696         * delegate.cs (Delegate.CloseDelegate): Removed, use CloseType instead.
24697         Fixes bug #30235.  Thanks to Ricardo Fernández Pascual.
24698
24699 2002-09-12  Martin Baulig  <martin@gnome.org>
24700
24701         * typemanager.cs (TypeManager.IsNestedChildOf): New method.
24702
24703         * ecore.cs (IMemberExpr.DeclaringType): New property.
24704         (SimpleName.SimpleNameResolve): Check whether we're accessing a
24705         nonstatic member of an outer type (CS0038).
24706
24707 2002-09-11  Miguel de Icaza  <miguel@ximian.com>
24708
24709         * driver.cs: Activate the using-error detector at warning level
24710         4 (at least for MS-compatible APIs).
24711
24712         * namespace.cs (VerifyUsing): Small buglett fix.
24713
24714         * pending.cs (PendingImplementation): pass the container pointer. 
24715
24716         * interface.cs (GetMethods): Allow for recursive definition.  Long
24717         term, I would like to move every type to support recursive
24718         definitions, not the current ordering mechanism that we have right
24719         now.
24720
24721         The situation is this: Attributes are handled before interfaces,
24722         so we can apply attributes to interfaces.  But some attributes
24723         implement interfaces, we will now handle the simple cases
24724         (recursive definitions will just get an error).  
24725
24726         * parameter.cs: Only invalidate types at the end if we fail to
24727         lookup all types.  
24728
24729 2002-09-09  Martin Baulig  <martin@gnome.org>
24730
24731         * ecore.cs (PropertyExpr.Emit): Also check for
24732         TypeManager.system_int_array_get_length so this'll also work when
24733         compiling corlib.  Fixes #30003.
24734
24735 2002-09-09  Martin Baulig  <martin@gnome.org>
24736
24737         * expression.cs (ArrayCreation.MakeByteBlob): Added support for enums
24738         and throw an exception if we can't get the type's size.  Fixed #30040,
24739         added test-165.cs.
24740
24741 2002-09-09  Martin Baulig  <martin@gnome.org>
24742
24743         * ecore.cs (PropertyExpr.DoResolve): Added check for static properies.
24744
24745         * expression.cs (SizeOf.DoResolve): Sizeof is only allowed in unsafe
24746         context.  Fixes bug #30027.
24747
24748         * delegate.cs (NewDelegate.Emit): Use OpCodes.Ldvirtftn for
24749         virtual functions.  Fixes bug #30043, added test-164.cs.
24750
24751 2002-09-08  Ravi Pratap  <ravi@ximian.com>
24752
24753         * attribute.cs : Fix a small NullRef crash thanks to my stupidity.
24754
24755 2002-09-08  Nick Drochak  <ndrochak@gol.com>
24756
24757         * driver.cs: Use an object to get the windows codepage since it's not a
24758         static property.
24759
24760 2002-09-08  Miguel de Icaza  <miguel@ximian.com>
24761
24762         * statement.cs (For.Emit): for infinite loops (test == null)
24763         return whether there is a break inside, not always "true".
24764
24765         * namespace.cs (UsingEntry): New struct to hold the name of the
24766         using definition, the location where it is defined, and whether it
24767         has been used in a successful type lookup.
24768
24769         * rootcontext.cs (NamespaceLookup): Use UsingEntries instead of
24770         strings.
24771
24772         * decl.cs: ditto.
24773
24774 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24775
24776         * attribute.cs : Fix incorrect code which relied on catching
24777         a NullReferenceException to detect a null being passed in
24778         where an object was expected.
24779
24780 2002-09-06  Miguel de Icaza  <miguel@ximian.com>
24781
24782         * statement.cs (Try): flag the catch variable as assigned
24783
24784         * expression.cs (Cast): Simplified by using ResolveType instead of
24785         manually resolving.
24786
24787         * statement.cs (Catch): Fix bug by using ResolveType.
24788
24789 2002-09-06  Ravi Pratap  <ravi@ximian.com>
24790
24791         * expression.cs (BetterConversion): Special case for when we have
24792         a NullLiteral as the argument and we have to choose between string
24793         and object types - we choose string the way csc does.
24794
24795         * attribute.cs (Attribute.Resolve): Catch the
24796         NullReferenceException and report error #182 since the Mono
24797         runtime no more has the bug and having this exception raised means
24798         we tried to select a constructor which takes an object and is
24799         passed a null.
24800
24801 2002-09-05  Ravi Pratap  <ravi@ximian.com>
24802
24803         * expression.cs (Invocation.OverloadResolve): Flag a nicer error
24804         message (1502, 1503) when we can't locate a method after overload
24805         resolution. This is much more informative and closes the bug
24806         Miguel reported.
24807
24808         * interface.cs (PopulateMethod): Return if there are no argument
24809         types. Fixes a NullReferenceException bug.
24810
24811         * attribute.cs (Attribute.Resolve): Ensure we allow TypeOf
24812         expressions too. Previously we were checking only in one place for
24813         positional arguments leaving out named arguments.
24814
24815         * ecore.cs (ImplicitNumericConversion): Conversion from underlying
24816         type to the enum type is not allowed. Remove code corresponding to
24817         that.
24818
24819         (ConvertNumericExplicit): Allow explicit conversions from
24820         the underlying type to enum type. This precisely follows the spec
24821         and closes a bug filed by Gonzalo.
24822
24823 2002-09-04  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24824
24825         * compiler.csproj:
24826         * compiler.csproj.user: patch from Adam Chester (achester@bigpond.com).
24827
24828 2002-09-03  Miguel de Icaza  <miguel@ximian.com>
24829
24830         * statement.cs (SwitchLabel.ResolveAndReduce): In the string case,
24831         it was important that we stored the right value after the
24832         reduction in `converted'.
24833
24834 2002-09-04  Martin Baulig  <martin@gnome.org>
24835
24836         * location.cs (Location.SymbolDocument): Use full pathnames for the
24837         source files.
24838
24839 2002-08-30  Miguel de Icaza  <miguel@ximian.com>
24840
24841         * expression.cs (ComposedCast): Use DeclSparce.ResolveType instead
24842         of the expression resolve mechanism, because that will catch the
24843         SimpleName error failures.
24844
24845         (Conditional): If we can not resolve the
24846         expression, return, do not crash.
24847
24848 2002-08-29  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24849
24850         * cs-tokenizer.cs:
24851         (location): display token name instead of its number.
24852
24853 2002-08-28  Martin Baulig  <martin@gnome.org>
24854
24855         * expression.cs (Binary.ResolveOperator): Don't silently return
24856         but return an error if an operator cannot be applied between two
24857         enum types.
24858
24859 2002-08-28  Martin Baulig  <martin@gnome.org>
24860
24861         * class.cs (Constructor.Define): Set the permission attributes
24862         correctly instead of making all constructors public.
24863
24864 2002-08-28  Martin Baulig  <martin@gnome.org>
24865
24866         * ecore.cs (Expression.DoResolve): Do a TypeManager.MemberLook
24867         for private members before reporting a CS0103; if we find anything,
24868         it's a CS0122.
24869
24870 2002-08-28  Martin Baulig  <martin@gnome.org>
24871
24872         * typemanager.cs (TypeManager.FilterWithClosure): It's not enough
24873         to check whether `closure_start_type == closure_invocation_type',
24874         we also need to check whether `m.DeclaringType == closure_invocation_type'
24875         before bypassing the permission checks.  We might be accessing
24876         protected/private members from the base class.
24877         (TypeManager.RealMemberLookup): Only set private_ok if private
24878         members were requested via BindingFlags.NonPublic.
24879
24880         * ecore.cs (MethodGroupExpr.IsExplicitImpl): New property.
24881
24882         * expression.cs (MemberAccess.ResolveMemberAccess): Set
24883         MethodGroupExpr.IsExplicitImpl if appropriate.
24884         (Invocation.DoResolve): Don't report the CS0120 for explicit
24885         interface implementations.
24886
24887 2002-08-27  Martin Baulig  <martin@gnome.org>
24888
24889         * expression.cs (Invocation.DoResolve): If this is a static
24890         method and we don't have an InstanceExpression, we must report
24891         a CS0120.
24892
24893 2002-08-25  Martin Baulig  <martin@gnome.org>
24894
24895         * expression.cs (Binary.ResolveOperator): Don't allow `!=' and
24896         `==' between a valuetype and an object.
24897
24898 2002-08-25  Miguel de Icaza  <miguel@ximian.com>
24899
24900         * ecore.cs (TypeExpr): Provide a ToString method.
24901
24902 2002-08-24  Martin Baulig  <martin@gnome.org>
24903
24904         * codegen.cs (CodeGen.InitMonoSymbolWriter): The symbol file is
24905         now called proggie.dbg and it's a binary file.
24906
24907 2002-08-23  Martin Baulig  <martin@gnome.org>
24908
24909         * decl.cs (MemberCache.AddMethods): Ignore varargs methods.
24910
24911 2002-08-23  Martin Baulig  <martin@gnome.org>
24912
24913         * struct.cs (MyStructInfo.ctor): Make this work with empty
24914         structs; it's not allowed to use foreach() on null.
24915
24916 2002-08-23  Martin Baulig  <martin@gnome.org>
24917
24918         * codegen.cs (CodeGen.InitMonoSymbolWriter): Tell the symbol
24919         writer the full pathname of the generated assembly.
24920
24921 2002-08-23  Martin Baulig  <martin@gnome.org>
24922
24923         * statements.cs (FlowBranching.UsageVector.MergeChildren):
24924         A `finally' block never returns or breaks; improved handling of
24925         unreachable code.
24926
24927 2002-08-23  Martin Baulig  <martin@gnome.org>
24928
24929         * statement.cs (Throw.Resolve): Allow `throw null'.
24930
24931 2002-08-23  Martin Baulig  <martin@gnome.org>
24932
24933         * expression.cs (MemberAccess.ResolveMemberAccess): If this is an
24934         EventExpr, don't do a DeclaredOnly MemberLookup, but check whether
24935         `ee.EventInfo.DeclaringType == ec.ContainerType'.  The
24936         MemberLookup would return a wrong event if this is an explicit
24937         interface implementation and the class has an event with the same
24938         name.
24939
24940 2002-08-23  Martin Baulig  <martin@gnome.org>
24941
24942         * statement.cs (Block.AddChildVariableNames): New public method.
24943         (Block.AddChildVariableName): Likewise.
24944         (Block.IsVariableNameUsedInChildBlock): Likewise.
24945         (Block.AddVariable): Check whether a variable name has already
24946         been used in a child block.
24947
24948         * cs-parser.jay (declare_local_variables): Mark all variable names
24949         from the current block as being used in a child block in the
24950         implicit block.
24951
24952 2002-08-23  Martin Baulig  <martin@gnome.org>
24953
24954         * codegen.cs (CodeGen.InitializeSymbolWriter): Abort if we can't
24955         find the symbol writer.
24956
24957         * driver.cs: csc also allows the arguments to /define being
24958         separated by commas, not only by semicolons.
24959
24960 2002-08-23  Martin Baulig  <martin@gnome.org>
24961
24962         * interface.cs (Interface.GetMembers): Added static check for events.
24963
24964 2002-08-15  Martin Baulig  <martin@gnome.org>
24965
24966         * class.cs (MethodData.EmitDestructor): In the Expression.MemberLookup
24967         call, use ec.ContainerType.BaseType as queried_type and invocation_type.
24968
24969         * ecore.cs (Expression.MemberLookup): Added documentation and explained
24970         why the MethodData.EmitDestructor() change was necessary.
24971
24972 2002-08-20  Martin Baulig  <martin@gnome.org>
24973
24974         * class.cs (TypeContainer.FindMembers): Added static check for events.
24975
24976         * decl.cs (MemberCache.AddMembers): Handle events like normal members.
24977
24978         * typemanager.cs (TypeHandle.GetMembers): When queried for events only,
24979         use Type.GetEvents(), not Type.FindMembers().
24980
24981 2002-08-20  Martin Baulig  <martin@gnome.org>
24982
24983         * decl.cs (MemberCache): Added a special method cache which will
24984         be used for method-only searched.  This ensures that a method
24985         search will return a MethodInfo with the correct ReflectedType for
24986         inherited methods.      
24987
24988 2002-08-20  Martin Baulig  <martin@gnome.org>
24989
24990         * decl.cs (DeclSpace.FindMembers): Made this public.
24991
24992 2002-08-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
24993
24994         * delegate.cs: fixed build on windows.
24995         [FIXME:  Filed as bug #29150: MCS must report these errors.]
24996
24997 2002-08-19  Ravi Pratap  <ravi@ximian.com>
24998
24999         * ecore.cs (StandardConversionExists): Return a false
25000         if we are trying to convert the void type to anything else
25001         since that is not allowed.
25002
25003         * delegate.cs (DelegateInvocation.DoResolve): Ensure that
25004         we flag error 70 in the event an event is trying to be accessed
25005         directly from outside the declaring type.
25006
25007 2002-08-20  Martin Baulig  <martin@gnome.org>
25008
25009         * typemanager.cs, decl.cs: Moved MemberList, IMemberContainer and
25010         MemberCache from typemanager.cs to decl.cs.
25011
25012 2002-08-19  Martin Baulig  <martin@gnome.org>
25013
25014         * class.cs (TypeContainer): Implement IMemberContainer.
25015         (TypeContainer.DefineMembers): Create the MemberCache.
25016         (TypeContainer.FindMembers): Do better BindingFlags checking; only
25017         return public members if BindingFlags.Public was given, check
25018         whether members are static.
25019
25020 2002-08-16  Martin Baulig  <martin@gnome.org>
25021
25022         * decl.cs (DeclSpace.Define): Splitted this in Define and
25023         DefineMembers.  DefineMembers is called first and initializes the
25024         MemberCache.
25025
25026         * rootcontext.cs (RootContext.DefineMembers): New function.  Calls
25027         DefineMembers() on all our DeclSpaces.
25028
25029         * class.cs (TypeContainer.Define): Moved all code to DefineMembers(),
25030         but call DefineMembers() on all nested interfaces.  We call their
25031         Define() in our new Define() function.
25032
25033         * interface.cs (Interface): Implement IMemberContainer.
25034         (Interface.Define): Moved all code except the attribute stuf to
25035         DefineMembers().
25036         (Interface.DefineMembers): Initialize the member cache.
25037
25038         * typemanager.cs (IMemberFinder): Removed this interface, we don't
25039         need this anymore since we can use MemberCache.FindMembers directly.
25040
25041 2002-08-19  Martin Baulig  <martin@gnome.org>
25042
25043         * typemanager.cs (MemberCache): When creating the cache for an
25044         interface type, add all inherited members.
25045         (TypeManager.MemberLookup_FindMembers): Changed `ref bool searching'
25046         to `out bool used_cache' and documented it.
25047         (TypeManager.MemberLookup): If we already used the cache in the first
25048         iteration, we don't need to do the interfaces check.
25049
25050 2002-08-19  Martin Baulig  <martin@gnome.org>
25051
25052         * decl.cs (DeclSpace.FindMembers): New abstract method.  Moved this
25053         here from IMemberFinder and don't implement this interface anymore.
25054         (DeclSpace.MemberCache): Moved here from IMemberFinder.
25055
25056         * typemanager.cs (IMemberFinder): This interface is now only used by
25057         classes which actually support the member cache.
25058         (TypeManager.builder_to_member_finder): Renamed to builder_to_declspace
25059         since we only put DeclSpaces into this Hashtable.
25060         (MemberLookup_FindMembers): Use `builder_to_declspace' if the type is
25061         a dynamic type and TypeHandle.GetTypeHandle() otherwise.
25062
25063 2002-08-16  Martin Baulig  <martin@gnome.org>
25064
25065         * typemanager.cs (ICachingMemberFinder): Removed.
25066         (IMemberFinder.MemberCache): New property.
25067         (TypeManager.FindMembers): Merged this with RealFindMembers().
25068         This function will never be called from TypeManager.MemberLookup()
25069         so we can't use the cache here, just the IMemberFinder.
25070         (TypeManager.MemberLookup_FindMembers): Check whether the
25071         IMemberFinder has a MemberCache and call the cache's FindMembers
25072         function.
25073         (MemberCache): Rewrote larger parts of this yet another time and
25074         cleaned it up a bit.
25075
25076 2002-08-15  Miguel de Icaza  <miguel@ximian.com>
25077
25078         * driver.cs (LoadArgs): Support quoting.
25079
25080         (Usage): Show the CSC-like command line arguments.
25081
25082         Improved a few error messages.
25083
25084 2002-08-15  Martin Baulig  <martin@gnome.org>
25085
25086         * typemanager.cs (IMemberContainer.Type): New property.
25087         (IMemberContainer.IsInterface): New property.
25088
25089         The following changes are conditional to BROKEN_RUNTIME, which is
25090         defined at the top of the file.
25091
25092         * typemanager.cs (MemberCache.MemberCache): Don't add the base
25093         class'es members, but add all members from TypeHandle.ObjectType
25094         if we're an interface.
25095         (MemberCache.AddMembers): Set the Declared flag if member.DeclaringType
25096         is the current type.
25097         (MemberCache.CacheEntry.Container): Removed this field.
25098         (TypeHandle.GetMembers): Include inherited members.
25099
25100 2002-08-14  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25101
25102         * typemanager.cs: fixed compilation and added a comment on a field that
25103         is never used.
25104
25105 2002-08-15  Martin Baulig  <martin@gnome.org>
25106
25107         * class.cs (ConstructorInitializer.Resolve): In the
25108         Expression.MemberLookup call, use the queried_type as
25109         invocation_type.
25110
25111         * typemanager.cs (IMemberContainer.GetMembers): Removed the `bool
25112         declared' attribute, it's always true.
25113         (IMemberContainer.Parent, IMemberContainer.Name): New properties.
25114         (TypeManager.MemberLookup_FindMembers): [FIXME FIXME FIXME] Added
25115         temporary wrapper for FindMembers which tells MemberLookup whether
25116         members from the base classes are included in the return value.
25117         This will go away soon.
25118         (TypeManager.MemberLookup): Use this temporary hack here; once the
25119         new MemberCache is completed, we don't need to do the DeclaredOnly
25120         looping here anymore since the MemberCache will take care of this.
25121         (TypeManager.IsSubclassOrNestedChildOf): Allow `type == parent'.
25122         (MemberCache): When creating the MemberCache for a class, get
25123         members from the current class and all its base classes.
25124         (MemberCache.CacheEntry.Container): New field.  This is a
25125         temporary hack until the Mono runtime is fixed to distinguish
25126         between ReflectedType and DeclaringType.  It allows us to use MCS
25127         with both the MS runtime and the unfixed Mono runtime without
25128         problems and without accecting performance.
25129         (MemberCache.SearchMembers): The DeclaredOnly looping from
25130         TypeManager.MemberLookup is now done here.      
25131
25132 2002-08-14  Martin Baulig  <martin@gnome.org>
25133
25134         * statement.cs (MyStructInfo.MyStructInfo): Don't call
25135         Type.GetFields on dynamic types but get the fields from the
25136         corresponding TypeContainer.
25137         (MyStructInfo.GetStructInfo): Added check for enum types.
25138
25139         * typemanager.cs (MemberList.IsSynchronized): Implemented.
25140         (MemberList.SyncRoot): Implemented.
25141         (TypeManager.FilterWithClosure): No need to check permissions if
25142         closure_start_type == closure_invocation_type, don't crash if
25143         closure_invocation_type is null.
25144
25145 2002-08-13  Martin Baulig  <martin@gnome.org>
25146
25147         Rewrote TypeContainer.FindMembers to use a member cache.  This
25148         gives us a speed increase of about 35% for the self-hosting MCS
25149         build and of about 15-20% for the class libs (both on GNU/Linux).
25150
25151         * report.cs (Timer): New class to get enhanced profiling.  This
25152         whole class is "TIMER" conditional since it remarkably slows down
25153         compilation speed.
25154
25155         * class.cs (MemberList): New class.  This is an IList wrapper
25156         which we're now using instead of passing MemberInfo[]'s around to
25157         avoid copying this array unnecessarily.
25158         (IMemberFinder.FindMember): Return a MemberList, not a MemberInfo [].
25159         (ICachingMemberFinder, IMemberContainer): New interface.
25160         (TypeManager.FilterWithClosure): If `criteria' is null, the name
25161         has already been checked, otherwise use it for the name comparision.
25162         (TypeManager.FindMembers): Renamed to RealMemberFinder and
25163         provided wrapper which tries to use ICachingMemberFinder.FindMembers
25164         if possible.  Returns a MemberList, not a MemberInfo [].
25165         (TypeHandle): New class, implements IMemberContainer.  We create
25166         one instance of this class per type, it contains a MemberCache
25167         which is used to do the member lookups.
25168         (MemberCache): New class.  Each instance of this class contains
25169         all members of a type and a name-based hash table.
25170         (MemberCache.FindMembers): This is our new member lookup
25171         function.  First, it looks up all members of the requested name in
25172         the hash table.  Then, it walks this list and sorts out all
25173         applicable members and returns them.
25174
25175 2002-08-13  Martin Baulig  <martin@gnome.org>
25176
25177         In addition to a nice code cleanup, this gives us a performance
25178         increase of about 1.4% on GNU/Linux - not much, but it's already
25179         half a second for the self-hosting MCS compilation.
25180
25181         * typemanager.cs (IMemberFinder): New interface.  It is used by
25182         TypeManager.FindMembers to call FindMembers on a TypeContainer,
25183         Enum, Delegate or Interface.
25184         (TypeManager.finder_to_member_finder): New PtrHashtable.
25185         (TypeManager.finder_to_container): Removed.
25186         (TypeManager.finder_to_delegate): Removed.
25187         (TypeManager.finder_to_interface): Removed.
25188         (TypeManager.finder_to_enum): Removed.
25189
25190         * interface.cs (Interface): Implement IMemberFinder.
25191
25192         * delegate.cs (Delegate): Implement IMemberFinder.
25193
25194         * enum.cs (Enum): Implement IMemberFinder.
25195
25196         * class.cs (TypeContainer): Implement IMemberFinder.
25197
25198 2002-08-12  Martin Baulig  <martin@gnome.org>
25199
25200         * ecore.cs (TypeExpr.DoResolveType): Mark this as virtual.
25201
25202 2002-08-12  Martin Baulig  <martin@gnome.org>
25203
25204         * ecore.cs (ITypeExpression): New interface for expressions which
25205         resolve to a type.
25206         (TypeExpression): Renamed to TypeLookupExpression.
25207         (Expression.DoResolve): If we're doing a types-only lookup, the
25208         expression must implement the ITypeExpression interface and we
25209         call DoResolveType() on it.
25210         (SimpleName): Implement the new ITypeExpression interface.
25211         (SimpleName.SimpleNameResolve): Removed the ec.OnlyLookupTypes
25212         hack, the situation that we're only looking up types can't happen
25213         anymore when this method is called.  Moved the type lookup code to
25214         DoResolveType() and call it.
25215         (SimpleName.DoResolveType): This ITypeExpression interface method
25216         is now doing the types-only lookup.
25217         (TypeExpr, TypeLookupExpression): Implement ITypeExpression.
25218         (ResolveFlags): Added MaskExprClass.
25219
25220         * expression.cs (MemberAccess): Implement the ITypeExpression
25221         interface.
25222         (MemberAccess.DoResolve): Added support for a types-only lookup
25223         when we're called via ITypeExpression.DoResolveType().
25224         (ComposedCast): Implement the ITypeExpression interface.
25225
25226         * codegen.cs (EmitContext.OnlyLookupTypes): Removed.  Call
25227         Expression.Resolve() with ResolveFlags.Type instead.
25228
25229 2002-08-12  Martin Baulig  <martin@gnome.org>
25230
25231         * interface.cs (Interface.Define): Apply attributes.
25232
25233         * attribute.cs (Attribute.ApplyAttributes): Added support for
25234         interface attributes.
25235
25236 2002-08-11  Martin Baulig  <martin@gnome.org>
25237
25238         * statement.cs (Block.Emit): Only check the "this" variable if we
25239         do not always throw an exception.
25240
25241         * ecore.cs (PropertyExpr.DoResolveLValue): Implemented, check
25242         whether the property has a set accessor.
25243
25244 2002-08-11  Martin Baulig  <martin@gnome.org>
25245
25246         Added control flow analysis support for structs.
25247
25248         * ecore.cs (ResolveFlags): Added `DisableFlowAnalysis' to resolve
25249         with control flow analysis turned off.
25250         (IVariable): New interface.
25251         (SimpleName.SimpleNameResolve): If MemberAccess.ResolveMemberAccess
25252         returns an IMemberExpr, call DoResolve/DoResolveLValue on it.
25253         (FieldExpr.DoResolve): Resolve the instance expression with flow
25254         analysis turned off and do the definite assignment check after the
25255         resolving when we know what the expression will resolve to.
25256
25257         * expression.cs (LocalVariableReference, ParameterReference):
25258         Implement the new IVariable interface, only call the flow analysis
25259         code if ec.DoFlowAnalysis is true.
25260         (This): Added constructor which takes a Block argument.  Implement
25261         the new IVariable interface.
25262         (MemberAccess.DoResolve, MemberAccess.DoResolveLValue): Call
25263         DoResolve/DoResolveLValue on the result of ResolveMemberLookup().
25264         This does the definite assignment checks for struct members.
25265
25266         * class.cs (Constructor.Emit): If this is a non-static `struct'
25267         constructor which doesn't have any initializer, call
25268         Block.AddThisVariable() to tell the flow analysis code that all
25269         struct elements must be initialized before control returns from
25270         the constructor.
25271
25272         * statement.cs (MyStructInfo): New public class.
25273         (UsageVector.this [VariableInfo vi]): Added `int field_idx'
25274         argument to this indexer.  If non-zero, check an individual struct
25275         member, not the whole struct.
25276         (FlowBranching.CheckOutParameters): Check struct members.
25277         (FlowBranching.IsVariableAssigned, SetVariableAssigned): Added
25278         overloaded versions of these methods which take an additional
25279         `int field_idx' argument to check struct members.
25280         (FlowBranching.IsParameterAssigned, SetParameterAssigned): Added
25281         overloaded versions of these methods which take an additional
25282         `string field_name' argument to check struct member.s
25283         (VariableInfo): Implement the IVariable interface.
25284         (VariableInfo.StructInfo): New public property.  Returns the
25285         MyStructInfo instance of the variable if it's a struct or null.
25286         (Block.AddThisVariable): New public method.  This is called from
25287         Constructor.Emit() for non-static `struct' constructor which do
25288         not have any initializer.  It creates a special variable for the
25289         "this" instance variable which will be checked by the flow
25290         analysis code to ensure that all of the struct's fields are
25291         initialized before control returns from the constructor.
25292         (UsageVector): Added support for struct members.  If a
25293         variable/parameter is a struct with N members, we reserve a slot
25294         in the usage vector for each member.  A struct is considered fully
25295         initialized if either the struct itself (slot 0) or all its
25296         members are initialized.
25297
25298 2002-08-08  Martin Baulig  <martin@gnome.org>
25299
25300         * driver.cs (Driver.MainDriver): Only report an error CS5001
25301         if there were no compilation errors.
25302
25303         * codegen.cs (EmitContext.EmitContext): Use the DeclSpace's
25304         `UnsafeContext' property to determine whether the parent is in
25305         unsafe context rather than checking the parent's ModFlags:
25306         classes nested in an unsafe class are unsafe as well.
25307
25308 2002-08-08  Martin Baulig  <martin@gnome.org>
25309
25310         * statement.cs (UsageVector.MergeChildren): Distinguish between
25311         `Breaks' and `Returns' everywhere, don't set `Breaks' anymore if
25312         we return.  Added test17() and test18() to test-154.cs.
25313
25314 2002-08-08  Martin Baulig  <martin@gnome.org>
25315
25316         * typemanager.cs (TypeManager.FilterWithClosure): If we have
25317         Family access, make sure the invoking type isn't a subclass of the
25318         queried type (that'd be a CS1540).
25319
25320         * ecore.cs (Expression.MemberLookup): Added overloaded version of
25321         this method which takes an additional `Type invocation_type'.
25322
25323         * expression.cs (BaseAccess.DoResolve): Use the base type as
25324         invocation and query type.
25325         (MemberAccess.DoResolve): If the lookup failed and we're about to
25326         report a CS0122, try a lookup with the ec.ContainerType - if this
25327         succeeds, we must report a CS1540.
25328
25329 2002-08-08  Martin Baulig  <martin@gnome.org>
25330
25331         * ecore.cs (IMemberExpr): Added `bool IsInstance' property.
25332         (MethodGroupExpr): Implement the IMemberExpr interface.
25333
25334         * expression (MemberAccess.ResolveMemberAccess): No need to have
25335         any special code for MethodGroupExprs anymore, they're now
25336         IMemberExprs.   
25337
25338 2002-08-08  Martin Baulig  <martin@gnome.org>
25339
25340         * typemanager.cs (TypeManager.FilterWithClosure): Check Assembly,
25341         Family, FamANDAssem and FamORAssem permissions.
25342         (TypeManager.IsSubclassOrNestedChildOf): New public method.
25343
25344 2002-08-08  Martin Baulig  <martin@gnome.org>
25345
25346         * statement.cs (FlowBranchingType): Added LOOP_BLOCK.
25347         (UsageVector.MergeChildren): `break' breaks unless we're in a switch
25348         or loop block.
25349
25350 Thu Aug 8 10:28:07 CEST 2002 Paolo Molaro <lupus@ximian.com>
25351
25352         * driver.cs: implemented /resource option to embed managed resources.
25353
25354 2002-08-07  Martin Baulig  <martin@gnome.org>
25355
25356         * class.cs (FieldBase.Initializer): Renamed to `init' and made private.
25357         (FieldBase.HasFieldInitializer): New public property.
25358         (FieldBase.GetInitializerExpression): New public method.  Resolves and
25359         returns the field initializer and makes sure it is only resolved once.
25360         (TypeContainer.EmitFieldInitializers): Call
25361         FieldBase.GetInitializerExpression to get the initializer, this ensures
25362         that it isn't resolved multiple times.
25363
25364         * codegen.cs (EmitContext): Added `bool IsFieldInitialier'.  This tells
25365         the resolving process (SimpleName/MemberLookup) that we're currently
25366         emitting a field initializer (which must not access any instance members,
25367         this is an error CS0236).
25368
25369         * ecore.cs (SimpleName.Error_ObjectRefRequired): Added EmitContext
25370         argument, if the `IsFieldInitializer' flag is set, we must report and
25371         error CS0236 and not an error CS0120.   
25372
25373 2002-08-07  Martin Baulig  <martin@gnome.org>
25374
25375         * ecore.cs (IMemberExpr): New public interface.
25376         (FieldExpr, PropertyExpr, EventExpr): Implement IMemberExpr.
25377         (SimpleName.SimpleNameResolve): Call MemberAccess.ResolveMemberAccess
25378         if the expression is an IMemberExpr.
25379
25380         * expression.cs (MemberAccess.ResolveMemberAccess): Allow `left'
25381         to be null, implicitly default to `this' if we're non-static in
25382         this case.  Simplified the code a lot by using the new IMemberExpr
25383         interface.  Also fixed bug #28176 here.
25384
25385 2002-08-06  Martin Baulig  <martin@gnome.org>
25386
25387         * cs-parser.jay (SimpleLookup): Removed.  We need to create
25388         ParameterReferences during semantic analysis so that we can do a
25389         type-only search when resolving Cast, TypeOf and SizeOf.
25390         (block): Pass the `current_local_parameters' to the Block's
25391         constructor.
25392
25393         * class.cs (ConstructorInitializer): Added `Parameters parameters'
25394         argument to the constructor.
25395         (ConstructorInitializer.Resolve): Create a temporary implicit
25396         block with the parameters.
25397
25398         * ecore.cs (SimpleName.SimpleNameResolve): Resolve parameter
25399         references here if we aren't doing a type-only search.
25400
25401         * statement.cs (Block): Added constructor which takes a
25402         `Parameters parameters' argument.
25403         (Block.Parameters): New public property.
25404
25405         * support.cs (InternalParameters.Parameters): Renamed `parameters'
25406         to `Parameters' and made it public readonly.
25407
25408 2002-08-06  Martin Baulig  <martin@gnome.org>
25409
25410         * ecore.cs (Expression.Warning): Made this public as well.
25411
25412         * report.cs (Report.Debug): Print the contents of collections.
25413
25414 2002-08-06  Martin Baulig  <martin@gnome.org>
25415
25416         * ecore.cs (Expression.ResolveFlags): New [Flags] enum.  This is
25417         used to tell Resolve() which kinds of expressions it may return.
25418         (Expression.Resolve): Added overloaded version of this method which
25419         takes a `ResolveFlags flags' argument.  This can be used to tell
25420         Resolve() which kinds of expressions it may return.  Reports a
25421         CS0118 on error.
25422         (Expression.ResolveWithSimpleName): Removed, use Resolve() with
25423         ResolveFlags.SimpleName.
25424         (Expression.Error118): Added overloaded version of this method which
25425         takes a `ResolveFlags flags' argument.  It uses the flags to determine
25426         which kinds of expressions are allowed.
25427
25428         * expression.cs (Argument.ResolveMethodGroup): New public method.
25429         Resolves an argument, but allows a MethodGroup to be returned.
25430         This is used when invoking a delegate.
25431
25432         * TODO: Updated a bit.
25433
25434 2002-08-06  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25435
25436         Fixed compilation with csc.
25437
25438         * ecore.cs: Expression.Error made public. Is this correct? Should
25439         Warning be made public too?
25440
25441         * expression.cs: use ea.Location instead of ea.loc.
25442         [FIXME:  Filed as bug #28607: MCS must report these errors.]
25443
25444 2002-08-06  Martin Baulig  <martin@gnome.org>
25445
25446         * ecore.cs (Expression.loc): Moved the location here instead of
25447         duplicating it in all derived classes.
25448         (Expression.Location): New public property.
25449         (Expression.Error, Expression.Warning): Made them non-static and
25450         removed the location argument.
25451         (Expression.Warning): Added overloaded version which takes an
25452         `int level' argument.
25453         (Expression.Error118): Make this non-static and removed the
25454         expression and location arguments.
25455         (TypeExpr): Added location argument to the constructor.
25456
25457         * expression.cs (StaticCallExpr): Added location argument to
25458         the constructor.
25459         (Indirection, PointerArithmetic): Likewise.
25460         (CheckedExpr, UnCheckedExpr): Likewise.
25461         (ArrayAccess, IndexerAccess, UserCast, ArrayPtr): Likewise.
25462         (StringPtr): Likewise.
25463
25464
25465 2002-08-05  Martin Baulig  <martin@gnome.org>
25466
25467         * expression.cs (BaseAccess.DoResolve): Actually report errors.
25468
25469         * assign.cs (Assign.DoResolve): Check whether the source
25470         expression is a value or variable.
25471
25472         * statement.cs (Try.Resolve): Set ec.InTry/InCatch/InFinally
25473         while resolving the corresponding blocks.
25474
25475         * interface.cs (Interface.GetInterfaceTypeByName): Actually report
25476         an error, don't silently return null.
25477
25478         * statement.cs (Block.AddVariable): Do the error reporting here
25479         and distinguish between CS0128 and CS0136.
25480         (Block.DoResolve): Report all unused labels (warning CS0164).
25481         (LabeledStatement): Pass the location to the constructor.
25482         (LabeledStatement.HasBeenReferenced): New property.
25483         (LabeledStatement.Resolve): Set it to true here.
25484
25485         * statement.cs (Return.Emit): Return success even after reporting
25486         a type mismatch error (CS0126 or CS0127), this is what csc does and
25487         it avoids confusing the users with any consecutive errors.
25488
25489 2002-08-05  Martin Baulig  <martin@gnome.org>
25490
25491         * enum.cs (Enum.LookupEnumValue): Catch circular definitions.
25492
25493         * const.cs (Const.LookupConstantValue): Catch circular definitions.
25494
25495         * expression.cs (MemberAccess.DoResolve): Silently return if an
25496         error has already been reported.
25497
25498         * ecore.cs (Expression.MemberLookupFinal): Silently return if an
25499         error has already been reported.
25500
25501 2002-08-05  Martin Baulig  <martin@gnome.org>
25502
25503         * statement.cs (UsageVector): Only initialize the `parameters'
25504         vector if we actually have any "out" parameters.
25505
25506 2002-08-05  Martin Baulig  <martin@gnome.org>
25507
25508         * expression.cs (Binary.ResolveOperator): When combining delegates,
25509         they must have the same type.
25510
25511 2002-08-05  Martin Baulig  <martin@gnome.org>
25512
25513         * typemanager.cs (TypeManager.GetArgumentTypes): Don't call
25514         PropertyInfo.GetIndexParameters() on dynamic types, this doesn't
25515         work with the ms runtime and we also don't need it: if we're a
25516         PropertyBuilder and not in the `indexer_arguments' hash, then we
25517         are a property and not an indexer.
25518
25519         * class.cs (TypeContainer.AsAccessible): Use Type.IsArray,
25520         Type.IsPointer and Type.IsByRef instead of Type.HasElementType
25521         since the latter one doesn't work with the ms runtime.
25522
25523 2002-08-03  Martin Baulig  <martin@gnome.org>
25524
25525         Fixed bugs #27998 and #22735.
25526
25527         * class.cs (Method.IsOperator): New public field.
25528         (Method.CheckBase): Report CS0111 if there's already a method
25529         with the same parameters in the current class.  Report CS0508 when
25530         attempting to change the return type of an inherited method.
25531         (MethodData.Emit): Report CS0179 if a method doesn't have a body
25532         and it's not marked abstract or extern.
25533         (PropertyBase): New abstract base class for Property and Indexer.
25534         (PropertyBase.CheckBase): Moved here from Property and made it work
25535         for indexers.
25536         (PropertyBase.Emit): Moved here from Property.Emit, Indexer.Emit is
25537         the same so we can reuse it there.
25538         (Property, Indexer): Derive from PropertyBase.
25539         (MethodSignature.inheritable_property_signature_filter): New delegate
25540         to find properties and indexers.
25541
25542         * decl.cs (MemberCore.CheckMethodAgainstBase): Added `string name'
25543         argument and improved error reporting.
25544
25545         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): Renamed to
25546         EmptyReadOnlyParameters and made it a property.
25547
25548         * typemanager.cs (TypeManager.GetArgumentTypes): Added overloaded
25549         version of this method which takes a `PropertyInfo indexer'.
25550         (TypeManager.RegisterIndexer): New method.
25551
25552         * class.cs: Added myself as author of this file :-)
25553
25554 2002-08-03  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25555
25556         * class.cs: fixed compilation on windoze.
25557
25558 2002-08-03  Martin Baulig  <martin@gnome.org>
25559
25560         * interface.cs (Interface.GetInterfaceBases): Check whether all
25561         base interfaces are at least as accessible than the current one.
25562
25563         * class.cs (TypeContainer.GetClassBases): Check whether base types
25564         are at least as accessible than the current type.
25565         (TypeContainer.AsAccessible): Implemented and made non-static.
25566         (MemberBase.CheckParameters): Report errors if the accessibility
25567         checks fail.
25568
25569         * delegate.cs (Delegate.Delegate): The default visibility is
25570         internal for top-level types and private for nested types.
25571         (Delegate.Define): Report errors if the accessibility checks fail.
25572
25573         * enum.cs (Enum.Enum): The default visibility is internal for
25574         top-level types and private for nested types.
25575         (Enum.DefineType): Compute the correct visibility.
25576
25577         * modifiers.cs (Modifiers.TypeAttr): Added a version of this
25578         function which takes a `bool is_toplevel' instead of a TypeContainer.
25579
25580         * typemanager.cs (TypeManager.IsBuiltinType): `void' is also a
25581         builtin type.
25582
25583 2002-08-02  Martin Baulig  <martin@gnome.org>
25584
25585         * expression.cs (LocalVariableReferenc): Added constructor which
25586         takes additional `VariableInfo vi' and `bool is_readonly' arguments.
25587         (LocalVariableReference.IsReadOnly): New property.
25588         (LocalVariableReference.DoResolveLValue): Report a CS1604 if the
25589         variable is readonly, use our own readonly flag to do this; you can
25590         use the new constructor to get a writable reference to a read-only
25591         variable.
25592
25593         * cs-parser.jay (foreach_statement, using_statement): Get a writable
25594         reference to the local variable.
25595
25596 2002-08-01  Miguel de Icaza  <miguel@ximian.com>
25597
25598         * rootcontext.cs (ResolveCore): Also include System.Exception
25599
25600         * statement.cs (Block.Emit): Do not emit the dead-code warnings if
25601         we reach an EmptyStatement.
25602
25603         (Catch.DoResolve, Throw.DoResolve): Throwing the System.Exception
25604         is also fine.
25605
25606         * expression.cs (Binary.ResolveOperator): Check error result in
25607         two places.
25608
25609         use brtrue/brfalse directly and avoid compares to null.
25610
25611 2002-08-02  Martin Baulig  <martin@gnome.org>
25612
25613         * class.cs (TypeContainer.Define): Define all nested interfaces here.
25614         Fixes bug #28407, added test-155.cs.
25615
25616 2002-08-01  Martin Baulig  <martin@gnome.org>
25617
25618         * class.cs (Event.EmitDefaultMethod): Make this work with static
25619         events.  Fixes #28311, added verify-3.cs.
25620
25621 2002-08-01  Martin Baulig  <martin@gnome.org>
25622
25623         * statement.cs (ForeachHelperMethods): Added `enumerator_type' and
25624         `is_disposable' fields.
25625         (Foreach.GetEnumeratorFilter): Set `hm.enumerator_type' and
25626         `hm.is_disposable' if we're using the collection pattern.
25627         (Foreach.EmitCollectionForeach): Use the correct type for the
25628         enumerator's local variable, only emit the try/finally block if
25629         necessary (fixes #27713).
25630
25631 2002-08-01  Martin Baulig  <martin@gnome.org>
25632
25633         * ecore.cs (Expression.report118): Renamed to Error118 and made
25634         it public static.
25635
25636         * statement.cs (Throw.Resolve): Check whether the expression is of
25637         the correct type (CS0118) and whether the type derives from
25638         System.Exception (CS0155).
25639         (Catch.Resolve): New method.  Do the type lookup here and check
25640         whether it derives from System.Exception (CS0155).
25641         (Catch.CatchType, Catch.IsGeneral): New public properties.
25642
25643         * typemanager.cs (TypeManager.exception_type): Added.
25644
25645 2002-07-31  Miguel de Icaza  <miguel@ximian.com>
25646
25647         * driver.cs: Updated About function.
25648
25649 2002-07-31  Martin Baulig  <martin@gnome.org>
25650
25651         Implemented Control Flow Analysis.
25652
25653         * codegen.cs (EmitContext.DoFlowAnalysis): New public variable.
25654         (EmitContext.CurrentBranching): Added.
25655         (EmitContext.StartFlowBranching): Added.
25656         (EmitContext.EndFlowBranching): Added.
25657         (EmitContext.KillFlowBranching): Added.
25658         (EmitContext.IsVariableAssigned): Added.
25659         (EmitContext.SetVariableAssigned): Added.
25660         (EmitContext.IsParameterAssigned): Added.
25661         (EmitContext.SetParameterAssigned): Added.
25662         (EmitContext.EmitTopBlock): Added `InternalParameters ip' argument.
25663         Added control flow analysis stuff here.
25664
25665         * expression.cs (Unary.DoResolve): If the operator is Oper.AddressOf,
25666         resolve the expression as lvalue.
25667         (LocalVariableReference.DoResolve): Check whether the variable has
25668         already been assigned.
25669         (ParameterReference.DoResolveLValue): Override lvalue resolve to mark
25670         the parameter as assigned here.
25671         (ParameterReference.DoResolve): Check whether the parameter has already
25672         been assigned.
25673         (Argument.Resolve): If it's a `ref' or `out' argument, resolve the
25674         expression as lvalue.
25675
25676         * statement.cs (FlowBranching): New class for the flow analysis code.
25677         (Goto): Resolve the label in Resolve, not in Emit; added flow analysis.
25678         (LabeledStatement.IsDefined): New public property.
25679         (LabeledStatement.AddUsageVector): New public method to tell flow
25680         analyis that the label may be reached via a forward jump.
25681         (GotoCase): Lookup and resolve the label in Resolve, not in Emit; added
25682         flow analysis.
25683         (VariableInfo.Number): New public field.  This is used by flow analysis
25684         to number all locals of a block.
25685         (Block.CountVariables): New public property.  This is the number of
25686         local variables in this block (including the locals from all parent
25687         blocks).
25688         (Block.EmitMeta): Number all the variables.
25689
25690         * statement.cs: Added flow analysis support to all classes.
25691
25692 2002-07-31  Martin Baulig  <martin@gnome.org>
25693
25694         * driver.cs: Added "--mcs-debug" argument if MCS_DEBUG is defined.
25695         To get debugging messages, compile mcs with /define:MCS_DEBUG and
25696         then use this argument.
25697
25698         * report.cs (Report.Debug): Renamed to conditional to "MCS_DEBUG".
25699
25700         * makefile.gnu (MCS_FLAGS): Include $(MCS_DEFINES), the user may
25701         use this to specify /define options.
25702
25703 2002-07-29  Martin Baulig  <martin@gnome.org>
25704
25705         * statement.cs (Fixed): Moved all code that does variable lookups
25706         and resolvings from Emit to Resolve.
25707
25708         * statement.cs (For): Moved all code that does variable lookups
25709         and resolvings from Emit to Resolve.
25710
25711         * statement.cs (Using): Moved all code that does variable lookups
25712         and resolvings from Emit to Resolve.
25713
25714 2002-07-29  Martin Baulig  <martin@gnome.org>
25715
25716         * attribute.cs (Attribute.Resolve): Explicitly catch a
25717         System.NullReferenceException when creating the
25718         CustromAttributeBuilder and report a different warning message.
25719
25720 2002-07-29  Martin Baulig  <martin@gnome.org>
25721
25722         * support.cs (ParameterData.ParameterName): Added method to
25723         get the name of a parameter.
25724
25725         * typemanager.cs (TypeManager.IsValueType): New public method.
25726
25727 2002-07-29  Martin Baulig  <martin@gnome.org>
25728
25729         * parameter.cs (Parameter.Modifier): Added `ISBYREF = 8'.  This
25730         is a flag which specifies that it's either ref or out.
25731         (Parameter.GetParameterInfo (DeclSpace, int, out bool)): Changed
25732         the out parameter to `out Parameter.Modifier mod', also set the
25733         Parameter.Modifier.ISBYREF flag on it if it's either ref or out.
25734
25735         * support.cs (InternalParameters.ParameterModifier): Distinguish
25736         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25737         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25738
25739         * expression.cs (Argument.GetParameterModifier): Distinguish
25740         between Parameter.Modifier.OUT and Parameter.Modifier.REF, set the
25741         Parameter.Modifier.ISBYREF flag if it's either ref or out.
25742
25743 2002-07-29  Martin Baulig  <martin@gnome.org>
25744
25745         * expression.cs (ParameterReference.ParameterReference): Added
25746         `Location loc' argument to the constructor.
25747
25748         * cs-parser.jay: Pass location to ParameterReference.
25749
25750 2002-07-28  Miguel de Icaza  <miguel@ximian.com>
25751
25752         * statement.cs (Try): Initialize the location.
25753
25754         * cs-parser.jay: pass location to Try.
25755
25756         * expression.cs (Unary.Reduce): Change the prototype to return
25757         whether a constant fold could be performed or not.  The result is
25758         returned in an out parameters.  In the case of Indirection and
25759         AddressOf, we want to perform the full tests.
25760
25761 2002-07-26  Miguel de Icaza  <miguel@ximian.com>
25762
25763         * statement.cs (Statement.Emit): Flag dead code.
25764
25765 2002-07-27  Andrew Birkett  <andy@nobugs.org>
25766
25767         * expression.cs (Unary.Reduce): Handle AddressOf and Indirection.
25768
25769 2002-07-27  Martin Baulig  <martin@gnome.org>
25770
25771         * class.cs (MethodData.Define): Put back call to
25772         TypeManager.AddMethod(), accidentally commented this out.
25773
25774         * report.cs (Debug): New public method to print debugging information,
25775         this is `[Conditional ("DEBUG")]'.
25776
25777 2002-07-26  Martin Baulig  <martin@gnome.org>
25778
25779         * cs-parser.jay (CSharpParser): Added `Stack switch_stack'.
25780         (switch_statement): Push the current_block to the switch_stack and
25781         pop it again when we're done with the switch.
25782         (switch_section): The new block is a child of the current_block.
25783         Fixes bug #24007, added test-152.cs.
25784
25785 2002-07-27  Martin Baulig  <martin@gnome.org>
25786
25787         * expression.cs (Invocation.EmitArguments): When calling a varargs
25788         function with only its fixed arguments, we need to pass an empty
25789         array.
25790
25791 2002-07-27  Martin Baulig  <martin@gnome.org>
25792
25793         Mono 0.13 has been released.
25794
25795 2002-07-25  Miguel de Icaza  <miguel@ximian.com>
25796
25797         * driver.cs: Rename --resource to --linkres, because that is what
25798         we do currently, we dont support --resource yet.
25799
25800         * cs-tokenizer.cs: Fix test for reporting endif mismatches.
25801
25802 2002-07-25  Martin Baulig  <martin@gnome.org>
25803
25804         * class.cs (MethodData): New public class.  This is a `method builder'
25805         class for a method or one accessor of a Property/Indexer/Event.
25806         (MethodData.GetMethodFlags): Moved here from MemberBase.
25807         (MethodData.ApplyAttributes): Likewise.
25808         (MethodData.ApplyObsoleteAttribute): Likewise.
25809         (MethodData.ApplyConditionalAttribute): Likewise.
25810         (MethodData.ApplyDllImportAttribute): Likewise.
25811         (MethodData.CheckAbstractAndExternal): Likewise.
25812         (MethodData.Define): Formerly knows as MemberBase.DefineMethod().
25813         (MethodData.Emit): Formerly known as Method.Emit().
25814         (MemberBase): Moved everything which was specific to a single
25815         accessor/method to MethodData.
25816         (Method): Create a new MethodData and call Define() and Emit() on it.
25817         (Property, Indexer, Event): Create a new MethodData objects for each
25818         accessor and call Define() and Emit() on them.
25819
25820 2002-07-25  Martin Baulig  <martin@gnome.org>
25821
25822         Made MethodCore derive from MemberBase to reuse the code from there.
25823         MemberBase now also checks for attributes.
25824
25825         * class.cs (MethodCore): Derive from MemberBase, not MemberCore.
25826         (MemberBase.GetMethodFlags): Moved here from class Method and marked
25827         as virtual.
25828         (MemberBase.DefineAccessor): Renamed to DefineMethod(), added
25829         `CallingConventions cc' and `Attributes opt_attrs' arguments.
25830         (MemberBase.ApplyAttributes): New virtual method; applies the
25831         attributes to a method or accessor.
25832         (MemberBase.ApplyObsoleteAttribute): New protected virtual method.
25833         (MemberBase.ApplyConditionalAttribute): Likewise.
25834         (MemberBase.ApplyDllImportAttribute): Likewise.
25835         (MemberBase.CheckAbstractAndExternal): Likewise.
25836         (MethodCore.ParameterTypes): This is now a property instead of a
25837         method, it's initialized from DoDefineParameters().
25838         (MethodCore.ParameterInfo): Removed the set accessor.
25839         (MethodCore.DoDefineParameters): New protected virtual method to
25840         initialize ParameterTypes and ParameterInfo.
25841         (Method.GetReturnType): We can now simply return the MemberType.
25842         (Method.GetMethodFlags): Override the MemberBase version and add
25843         the conditional flags.
25844         (Method.CheckBase): Moved some code from Define() here, call
25845         DoDefineParameters() here.
25846         (Method.Define): Use DoDefine() and DefineMethod() from MemberBase
25847         here to avoid some larger code duplication.
25848         (Property.Emit, Indexer.Emit): Call CheckAbstractAndExternal() to
25849         ensure that abstract and external accessors don't declare a body.
25850
25851         * attribute.cs (Attribute.GetValidPieces): Make this actually work:
25852         `System.Attribute.GetCustomAttributes (attr.Type)' does a recursive
25853         lookup in the attribute's parent classes, so we need to abort as soon
25854         as we found the first match.
25855         (Attribute.Obsolete_GetObsoleteMessage): Return the empty string if
25856         the attribute has no arguments.
25857
25858         * typemanager.cs (TypeManager.AddMethod): Now takes a MemberBase instead
25859         of a Method.
25860
25861 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25862
25863         * cs-parser.jay: reverted previous patch.
25864
25865 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25866
25867         * cs-parser.jay: fixed bug #22119.
25868
25869 2002-07-24  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25870
25871         * attribute.cs: fixed compilation. The error was:
25872         "attribute.cs(571,17): error CS0177: The out parameter 'is_error' must 
25873         be assigned to before control leaves the current method."
25874         [FIXME:  Filed as bug #28186: MCS must report this error.]
25875
25876 2002-07-25  Martin Baulig  <martin@gnome.org>
25877
25878         * attribute.cs (Attribute.Conditional_GetConditionName): New static
25879         method to pull the condition name ouf of a Conditional attribute.
25880         (Attribute.Obsolete_GetObsoleteMessage): New static method to pull
25881         the obsolete message and error flag out of an Obsolete attribute.
25882
25883         * class.cs (Method.GetMethodFlags): New public method to get the
25884         TypeManager.MethodFlags for this method.
25885         (Method.ApplyConditionalAttribute, Method.ApplyObsoleteAttribute): New
25886         private methods.
25887         (Method.Define): Get and apply the Obsolete and Conditional attributes;
25888         if we're overriding a virtual function, set the new private variable
25889         `parent_method'; call the new TypeManager.AddMethod().
25890
25891         * typemanager.cs (TypeManager.AddMethod): New static method.  Stores
25892         the MethodBuilder and the Method in a PtrHashtable.
25893         (TypeManager.builder_to_method): Added for this purpose.
25894         (TypeManager.MethodFlags): Added IsObsoleteError.
25895         (TypeManager.GetMethodFlags): Added `Location loc' argument.  Lookup
25896         Obsolete and Conditional arguments in MethodBuilders.  If we discover
25897         an Obsolete attribute, emit an appropriate warning 618 / error 619 with
25898         the message from the attribute.
25899
25900 2002-07-24  Martin Baulig  <martin@gnome.org>
25901
25902         * cs-tokenizer.cs: Eat up trailing whitespaces and one-line comments in
25903         preprocessor directives, ensure that the argument to #define/#undef is
25904         exactly one identifier and that it's actually an identifier.
25905
25906         Some weeks ago I did a `#define DEBUG 1' myself and wondered why this
25907         did not work ....
25908
25909 2002-07-24  Martin Baulig  <martin@gnome.org>
25910
25911         * statement.cs (Foreach.ForeachHelperMethods): Added `Type element_type',
25912         initialize it to TypeManager.object_type in the constructor.
25913         (Foreach.GetEnumeratorFilter): Set `hm.element_type' to the return type
25914         of the `hm.get_current' method if we're using the collection pattern.
25915         (Foreach.EmitCollectionForeach): Use `hm.element_type' as the source type
25916         for the explicit conversion to make it work when we're using the collection
25917         pattern and the `Current' property has a different return type than `object'.
25918         Fixes #27713.
25919
25920 2002-07-24  Martin Baulig  <martin@gnome.org>
25921
25922         * delegate.cs (Delegate.VerifyMethod): Simply return null if the method
25923         does not match, but don't report any errors.  This method is called in
25924         order for all methods in a MethodGroupExpr until a matching method is
25925         found, so we don't want to bail out if the first method doesn't match.
25926         (NewDelegate.DoResolve): If none of the methods in the MethodGroupExpr
25927         matches, report the 123.  Fixes #28070.
25928
25929 2002-07-24  Martin Baulig  <martin@gnome.org>
25930
25931         * expression.cs (ArrayAccess.EmitStoreOpcode): Moved the
25932         TypeManager.TypeToCoreType() to the top of the method so the
25933         following equality checks will work.  Fixes #28107.
25934
25935 2002-07-24  Martin Baulig  <martin@gnome.org>
25936
25937         * cfold.cs (ConstantFold.DoConstantNumericPromotions): "If either
25938         operand is of type uint, and the other operand is of type sbyte,
25939         short or int, the operands are converted to type long." -
25940         Actually do what this comment already told us.  Fixes bug #28106,
25941         added test-150.cs.
25942
25943 2002-07-24  Martin Baulig  <martin@gnome.org>
25944
25945         * class.cs (MethodBase): New abstract class.  This is now a base
25946         class for Property, Indexer and Event to avoid some code duplication
25947         in their Define() and DefineMethods() methods.
25948         (MethodBase.DoDefine, MethodBase.DefineAccessor): Provide virtual
25949         generic methods for Define() and DefineMethods().
25950         (FieldBase): Derive from MemberBase, not MemberCore.
25951         (Property): Derive from MemberBase, not MemberCore.
25952         (Property.DefineMethod): Moved all the code from this method to the
25953         new MethodBase.DefineAccessor(), just call it with appropriate
25954         argumetnts.
25955         (Property.Define): Call the new Property.DoDefine(), this does some
25956         sanity checks and we don't need to duplicate the code everywhere.
25957         (Event): Derive from MemberBase, not MemberCore.
25958         (Event.Define): Use the new MethodBase.DefineAccessor() to define the
25959         accessors, this will also make them work with interface events.
25960         (Indexer): Derive from MemberBase, not MemberCore.
25961         (Indexer.DefineMethod): Removed, call MethodBase.DefineAccessor() insstead.
25962         (Indexer.Define): Use the new MethodBase functions.
25963
25964         * interface.cs (InterfaceEvent.InterfaceEvent): Added `Location loc'
25965         argument to the constructor.
25966         (Interface.FindMembers): Added support for interface events.
25967         (Interface.PopluateEvent): Implemented.
25968
25969         Added test-149.cs for this.  This also fixes bugs #26067 and #24256.
25970
25971 2002-07-22  Miguel de Icaza  <miguel@ximian.com>
25972
25973         * class.cs (TypeContainer.AddMethod): Adding methods do not use IsValid,
25974         but this is required to check for a method name being the same as
25975         the containing class.  
25976
25977         Handle this now.
25978
25979 2002-07-22  Gonzalo Paniagua Javier <gonzalo@ximian.com>
25980
25981         * interface.cs: initialize variable.
25982
25983 2002-07-23  Martin Baulig  <martin@gnome.org>
25984
25985         Implemented the IndexerName attribute in interfaces.
25986
25987         * class.cs (TypeContainer.DefineIndexers): Don't set the indexer
25988         name if this is an explicit interface implementation.
25989         (Indexer.InterfaceIndexerName): New public variable.  If we're
25990         implementing an interface indexer, this is the IndexerName in that
25991         interface.  Otherwise, it's the IndexerName.
25992         (Indexer.DefineMethod): If we're implementing interface indexer,
25993         set InterfaceIndexerName.  Use the new Pending.IsInterfaceIndexer
25994         and Pending.ImplementIndexer methods.
25995         (Indexer.Define): Also define the PropertyBuilder if we're
25996         implementing an interface indexer and this is neither an explicit
25997         interface implementation nor do the IndexerName match the one in
25998         the interface.
25999
26000         * pending.cs (TypeAndMethods): Added `MethodInfo [] need_proxy'.
26001         If a method is defined here, then we always need to create a proxy
26002         for it.  This is used when implementing interface indexers.
26003         (Pending.IsInterfaceIndexer): New public method.
26004         (Pending.ImplementIndexer): New public method.
26005         (Pending.InterfaceMethod): Added `MethodInfo need_proxy' argument.
26006         This is used when implementing interface indexers to define a proxy
26007         if necessary.
26008         (Pending.VerifyPendingMethods): Look in the `need_proxy' array and
26009         define a proxy if necessary.
26010
26011         * interface.cs (Interface.IndexerName): New public variable.
26012         (Interface.PopulateIndexer): Set the IndexerName.
26013         (Interface.DefineIndexers): New private method.  Populate all the
26014         indexers and make sure their IndexerNames match.
26015
26016         * typemanager.cs (IndexerPropertyName): Added support for interface
26017         indexers.
26018
26019 2002-07-22  Martin Baulig  <martin@gnome.org>
26020
26021         * codegen.cs (EmitContext.HasReturnLabel): New public variable.
26022         (EmitContext.EmitTopBlock): Always mark the ReturnLabel and emit a
26023         ret if HasReturnLabel.
26024         (EmitContext.TryCatchLevel, LoopBeginTryCatchLevel): New public
26025         variables.
26026
26027         * statement.cs (Do.Emit, While.Emit, For.Emit, Foreach.Emit): Save
26028         and set the ec.LoopBeginTryCatchLevel.
26029         (Try.Emit): Increment the ec.TryCatchLevel while emitting the block.
26030         (Continue.Emit): If the ec.LoopBeginTryCatchLevel is smaller than
26031         the current ec.TryCatchLevel, the branch goes out of an exception
26032         block.  In this case, we need to use Leave and not Br.
26033
26034 2002-07-22  Martin Baulig  <martin@gnome.org>
26035
26036         * statement.cs (Try.Emit): Emit an explicit ret after the end of the
26037         block unless the block does not always return or it is contained in
26038         another try { ... } catch { ... } block.  Fixes bug #26506.
26039         Added verify-1.cs to the test suite.
26040
26041 2002-07-22  Martin Baulig  <martin@gnome.org>
26042
26043         * statement.cs (Switch.TableSwitchEmit): If we don't have a default,
26044         then we do not always return.  Fixes bug #24985.
26045
26046 2002-07-22  Martin Baulig  <martin@gnome.org>
26047
26048         * expression.cs (Invocation.OverloadedResolve): Do the BetterFunction()
26049         lookup on a per-class level; ie. walk up the class hierarchy until we
26050         found at least one applicable method, then choose the best among them.
26051         Fixes bug #24463 and test-29.cs.
26052
26053 2002-07-22  Martin Baulig  <martin@gnome.org>
26054
26055         * typemanager.cs (TypeManager.ArrayContainsMethod): Don't check the
26056         return types of the methods.  The return type is not part of the
26057         signature and we must not check it to make the `new' modifier work.
26058         Fixes bug #27999, also added test-147.cs.
26059         (TypeManager.TypeToCoreType): Added TypeManager.type_type.
26060
26061         * expression.cs (Invocation.DoResolve): Call TypeManager.TypeToCoreType()
26062         on the method's return type.
26063
26064 2002-07-21  Martin Baulig  <martin@gnome.org>
26065
26066         * assign.cs: Make this work if the rightmost source is a constant and
26067         we need to do an implicit type conversion.  Also adding a few more tests
26068         to test-38.cs which should have caught this.
26069
26070         * makefile.gnu: Disable debugging, there's already the mcs-mono2.exe
26071         target in the makefile for this.  The makefile.gnu is primarily intended
26072         for end-users who don't want to debug the compiler.
26073
26074 2002-07-21  Martin Baulig  <martin@gnome.org>
26075
26076         * assign.cs: Improved the Assign class so it can now handle embedded
26077         assignments (X = Y = Z = something).  As a side-effect this'll now also
26078         consume less local variables.  test-38.cs now passes with MCS, added
26079         a few new test cases to that test.
26080
26081 2002-07-20  Martin Baulig  <martin@gnome.org>
26082
26083         * expression.cs (Binary.EmitBranchable): Emit correct unsigned branch
26084         instructions.  Fixes bug #27977, also added test-146.cs.
26085
26086 2002-07-19  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26087
26088         * cs-tokenizer.cs: fixed getHex ().
26089
26090 2002-07-19  Martin Baulig  <martin@gnome.org>
26091
26092         * expression.cs (Invocation.EmitParams): Use TypeManager.LookupType(),
26093         not Type.GetType() to lookup the array type.  This is needed when
26094         we're constructing an array of a user-defined type.
26095         (ArrayAccess.EmitDynamicInitializers): Only emit the Ldelema for
26096         single-dimensional arrays, but also for single-dimensial arrays of
26097         type decimal.
26098
26099 2002-07-19  Martin Baulig  <martin@gnome.org>
26100
26101         * expression.cs (New.DoEmit): Create a new LocalTemporary each time
26102         this function is called, it's not allowed to share LocalBuilders
26103         among ILGenerators.
26104
26105 2002-07-19  Martin Baulig  <martin@gnome.org>
26106
26107         * expression.cs (Argument.Resolve): Report an error 118 when trying
26108         to pass a type as argument.
26109
26110 2002-07-18  Martin Baulig  <martin@gnome.org>
26111
26112         * ecore.cs (Expression.ImplicitNumericConversion): Don't emit a
26113         Conv_R_Un for the signed `long' type.
26114
26115 2002-07-15  Miguel de Icaza  <miguel@ximian.com>
26116
26117         * expression.cs (MemberAccess.DoResolve): Do not reuse the field
26118         `expr' for the temporary result, as that will fail if we do
26119         multiple resolves on the same expression.
26120
26121 2002-07-05  Miguel de Icaza  <miguel@ximian.com>
26122
26123         * ecore.cs (SimpleNameResolve): Use ec.DeclSpace instead of
26124         ec.TypeContainer for looking up aliases. 
26125
26126         * class.cs (TypeContainer): Remove LookupAlias from here.
26127
26128         * decl.cs (DeclSpace); Move here.
26129
26130 2002-07-01  Miguel de Icaza  <miguel@ximian.com>
26131
26132         * class.cs (FindMembers): Only call filter if the constructor
26133         bulider is not null.
26134
26135         Also handle delegates in `NestedTypes' now.  Now we will perform
26136         type lookups using the standard resolution process.  This also
26137         fixes a bug.
26138
26139         * decl.cs (DeclSpace.ResolveType): New type resolution routine.
26140         This uses Expressions (the limited kind that can be parsed by the
26141         tree) instead of strings.
26142
26143         * expression.cs (ComposedCast.ToString): Implement, used to flag
26144         errors since now we have to render expressions.
26145
26146         (ArrayCreation): Kill FormElementType.  Use ComposedCasts in
26147         FormArrayType. 
26148
26149         * ecore.cs (SimpleName.ToString): ditto.
26150
26151         * cs-parser.jay: Instead of using strings to assemble types, use
26152         Expressions to assemble the type (using SimpleName, ComposedCast,
26153         MemberAccess).  This should fix the type lookups in declarations,
26154         because we were using a different code path for this.
26155
26156         * statement.cs (Block.Resolve): Continue processing statements
26157         even when there is an error.
26158
26159 2002-07-17  Miguel de Icaza  <miguel@ximian.com>
26160
26161         * class.cs (Event.Define): Also remove the `remove' method from
26162         the list of pending items.
26163
26164         * expression.cs (ParameterReference): Use ldarg.N (0..3) to
26165         generate more compact code. 
26166
26167 2002-07-17  Martin Baulig  <martin@gnome.org>
26168
26169         * const.cs (Const.LookupConstantValue): Add support for constant
26170         `unchecked' and `checked' expressions.
26171         Also adding test case test-140.cs for this.
26172
26173 2002-07-17  Martin Baulig  <martin@gnome.org>
26174
26175         * statement.cs (Foreach.GetEnumeratorFilter): When compiling corlib,
26176         check whether mi.ReturnType implements the IEnumerator interface; the
26177         `==' and the IsAssignableFrom() will fail in this situation.
26178
26179 2002-07-16  Ravi Pratap  <ravi@ximian.com>
26180
26181         * ecore.cs (SimpleName.SimpleNameResolve) : Apply Gonzalo's fix 
26182         here too.
26183
26184 2002-07-16  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26185
26186         * expression.cs: fixed bug #27811.
26187
26188 2002-07-14  Miguel de Icaza  <miguel@ximian.com>
26189
26190         * expression.cs (ParameterReference.AddressOf): Patch from Paolo
26191         Molaro: when we are a ref, the value already contains a pointer
26192         value, do not take the address of it.
26193
26194 2002-07-14 Rafael Teixeira <rafaelteixeirabr@hotmail.com>
26195         * removed mb-parser.jay and mb-tokenizer.cs
26196
26197 Sat Jul 13 19:38:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26198
26199         * expression.cs: check against the building corlib void type.
26200
26201 Sat Jul 13 19:35:58 CEST 2002 Paolo Molaro <lupus@ximian.com>
26202
26203         * ecore.cs: fix for valuetype static readonly fields: when 
26204         initializing them, we need their address, not the address of a copy.
26205
26206 Sat Jul 13 17:32:53 CEST 2002 Paolo Molaro <lupus@ximian.com>
26207
26208         * typemanager.cs: register also enum_type in corlib.
26209
26210 Sat Jul 13 15:59:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26211
26212         * class.cs: allow calling this (but not base) initializers in structs.
26213
26214 Sat Jul 13 15:12:06 CEST 2002 Paolo Molaro <lupus@ximian.com>
26215
26216         * ecore.cs: make sure we compare against the building base types
26217         in GetTypeSize ().
26218
26219 Sat Jul 13 15:10:32 CEST 2002 Paolo Molaro <lupus@ximian.com>
26220
26221         * typemanager.cs: fix TypeToCoreType() to handle void and object
26222         (corlib gets no more typerefs after this change).
26223
26224 2002-07-12  Miguel de Icaza  <miguel@ximian.com>
26225
26226         * expression.cs (ArrayCreation.EmitArrayArguments): use
26227         Conv.Ovf.U4 for unsigned and Conv.Ovf.I4 for signed.
26228
26229         (ArrayAccess.LoadArrayAndArguments): Use Conv_Ovf_I and
26230         Conv_Ovf_I_Un for the array arguments.  Even if C# allows longs as
26231         array indexes, the runtime actually forbids them.
26232
26233         * ecore.cs (ExpressionToArrayArgument): Move the conversion code
26234         for array arguments here.
26235
26236         * expression.cs (EmitLoadOpcode): System.Char is a U2, use that
26237         instead of the default for ValueTypes.
26238
26239         (New.DoEmit): Use IsValueType instead of
26240         IsSubclassOf (value_type)
26241         (New.DoResolve): ditto.
26242         (Invocation.EmitCall): ditto.
26243
26244         * assign.cs (Assign): ditto.
26245
26246         * statement.cs (Unsafe): Ok, so I got the semantics wrong.
26247         Statements *are* currently doing part of their resolution during
26248         Emit.  
26249
26250         Expressions do always resolve during resolve, but statements are
26251         only required to propagate resolution to their children.
26252
26253 2002-07-11  Miguel de Icaza  <miguel@ximian.com>
26254
26255         * driver.cs (CSCParseOption): Finish the /r: and /lib: support.
26256
26257         (LoadAssembly): Do not add the dll if it is already specified
26258
26259         (MainDriver): Add the System directory to the link path at the end,
26260         after all the other -L arguments. 
26261
26262         * expression.cs (ArrayAccess.EmitLoadOpcode): I was using the
26263         wrong opcode for loading bytes and bools (ldelem.i1 instead of
26264         ldelem.u1) and using the opposite for sbytes.
26265
26266         This fixes Digger, and we can finally run it.
26267
26268         * driver.cs (UnixParseOption): Move the option parsing here.  
26269         (CSCParseOption): Implement CSC-like parsing of options.
26270
26271         We now support both modes of operation, the old Unix way, and the
26272         new CSC-like way.  This should help those who wanted to make cross
26273         platform makefiles.
26274
26275         The only thing broken is that /r:, /reference: and /lib: are not
26276         implemented, because I want to make those have the same semantics
26277         as the CSC compiler has, and kill once and for all the confussion
26278         around this.   Will be doing this tomorrow.
26279
26280         * statement.cs (Unsafe.Resolve): The state is checked during
26281         resolve, not emit, so we have to set the flags for IsUnsfe here.
26282
26283 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26284
26285         * expression.cs (MemberAccess.ResolveMemberAccess): Since we can
26286         not catch the Error_ObjectRefRequired in SimpleName (as it is
26287         possible to have a class/instance variable name that later gets
26288         deambiguated), we have to check this here.      
26289
26290 2002-07-10  Ravi Pratap  <ravi@ximian.com>
26291
26292         * class.cs (TypeContainer.GetFieldFromEvent): Move away from here,
26293         make static and put into Expression.
26294
26295         (Event.Define): Register the private field of the event with the 
26296         TypeManager so that GetFieldFromEvent can get at it.
26297
26298         (TypeManager.RegisterPrivateFieldOfEvent): Implement to
26299         keep track of the private field associated with an event which
26300         has no accessors.
26301
26302         (TypeManager.GetPrivateFieldOfEvent): Implement to get at the
26303         private field.
26304
26305         * ecore.cs (GetFieldFromEvent): RE-write to use the above methods.
26306
26307 2002-07-10  Miguel de Icaza  <miguel@ximian.com>
26308
26309         * expression.cs (Binary.EmitBranchable): this routine emits the
26310         Binary expression in a branchable context.  This basically means:
26311         we need to branch somewhere, not just get the value on the stack.
26312
26313         This works together with Statement.EmitBoolExpression.
26314
26315         * statement.cs (Statement.EmitBoolExpression): Use
26316         EmitBranchable. 
26317
26318 2002-07-09  Miguel de Icaza  <miguel@ximian.com>
26319
26320         * statement.cs (For): Reduce the number of jumps in loops.
26321
26322         (For): Implement loop inversion for the For statement.
26323
26324         (Break): We can be breaking out of a Try/Catch controlled section
26325         (foreach might have an implicit try/catch clause), so we need to
26326         use Leave instead of Br.
26327
26328         * ecore.cs (FieldExpr.AddressOf): Fix for test-139 (augmented
26329         now).  If the instace expression supports IMemoryLocation, we use
26330         the AddressOf method from the IMemoryLocation to extract the
26331         address instead of emitting the instance.
26332
26333         This showed up with `This', as we were emitting the instance
26334         always (Emit) instead of the Address of This.  Particularly
26335         interesting when This is a value type, as we dont want the Emit
26336         effect (which was to load the object).
26337
26338 2002-07-08  Miguel de Icaza  <miguel@ximian.com>
26339
26340         * attribute.cs: Pass the entry point to the DefinePInvokeMethod
26341
26342         * statement.cs (Checked): Set the CheckedState during the resolve
26343         process too, as the ConvCast operations track the checked state on
26344         the resolve process, and not emit.
26345
26346         * cs-parser.jay (namespace_member_declaration): Flag that we have
26347         found a declaration when we do.  This is used to flag error 1529
26348
26349         * driver.cs: Report ok when we display the help only.
26350
26351 2002-07-06  Andrew Birkett  <adb@tardis.ed.ac.uk>
26352
26353         * cs-tokenizer.cs (xtoken): Improve handling of string literals.
26354
26355 2002-07-04  Miguel de Icaza  <miguel@ximian.com>
26356
26357         * cs-tokenizer.cs (define): We also have to track locally the
26358         defines.  AllDefines is just used for the Conditional Attribute,
26359         but we also need the local defines for the current source code. 
26360
26361 2002-07-03  Miguel de Icaza  <miguel@ximian.com>
26362
26363         * statement.cs (While, For, Do): These loops can exit through a
26364         Break statement, use this information to tell whether the
26365         statement is the last piece of code.
26366
26367         (Break): Flag that we break.
26368
26369         * codegen.cs (EmitContexts): New `Breaks' state variable.
26370
26371 2002-07-03  Martin Baulig  <martin@gnome.org>
26372
26373         * class.cs (TypeContainer.MethodModifiersValid): Allow override
26374         modifiers in method declarations in structs.  Otherwise, you won't
26375         be able to override things like Object.Equals().
26376
26377 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26378
26379         * class.cs (Method, Property, Indexer): Do not allow the public
26380         modifier to be used in explicit interface implementations.
26381
26382         (TypeContainer.MethodModifiersValid): Catch virtual, abstract and
26383         override modifiers in method declarations in structs
26384
26385 2002-07-02   Andrew Birkett <adb@tardis.ed.ac.uk>
26386
26387         * cs-tokenizer.cs (adjust_int, adjust_real): Do not abort on
26388         integer or real overflow, report an error
26389
26390 2002-07-02  Martin Baulig  <martin@gnome.org>
26391
26392         * typemanager.cs (TypeManager.InitCoreTypes): When compiling
26393         corlib, dynamically call AssemblyBuilder.SetCorlibTypeBuilders()
26394         to tell the runtime about our newly created System.Object and
26395         System.ValueType types.
26396
26397 2002-07-02  Miguel de Icaza  <miguel@ximian.com>
26398
26399         * expression.cs (This): Use Stobj/Ldobj when we are a member of a
26400         struct instead of Ldarg/Starg.
26401
26402 2002-07-02  Martin Baulig  <martin@gnome.org>
26403
26404         * expression.cs (Indirection.Indirection): Call
26405         TypeManager.TypeToCoreType() on `expr.Type.GetElementType ()'.
26406
26407 2002-07-02  Martin Baulig  <martin@gnome.org>
26408
26409         * expression.cs (ArrayAccess.EmitStoreOpcode): If the type is a
26410         ValueType, call TypeManager.TypeToCoreType() on it.
26411         (Invocations.EmitParams): Call TypeManager.TypeToCoreType() on
26412         the OpCodes.Newarr argument.
26413
26414 2002-07-02  Martin Baulig  <martin@gnome.org>
26415
26416         * expression.cs (Invocation.EmitCall): When compiling corlib,
26417         replace all calls to the system's System.Array type to calls to
26418         the newly created one.
26419
26420         * typemanager.cs (TypeManager.InitCodeHelpers): Added a few more
26421         System.Array methods.
26422         (TypeManager.InitCoreTypes): When compiling corlib, get the methods
26423         from the system's System.Array type which must be replaced.
26424
26425 Tue Jul 2 19:05:05 CEST 2002 Paolo Molaro <lupus@ximian.com>
26426
26427         * typemanager.cs: load unverifiable_code_ctor so we can build
26428         corlib using the correct type. Avoid using GetTypeCode() with
26429         TypeBuilders.
26430         * rootcontext.cs: uses TypeManager.unverifiable_code_ctor and
26431         TypeManager.object_type to allow building corlib.
26432
26433 Tue Jul 2 19:03:19 CEST 2002 Paolo Molaro <lupus@ximian.com>
26434
26435         * ecore.cs: handle System.Enum separately in LoadFromPtr().
26436
26437 2002-07-01  Martin Baulig  <martin@gnome.org>
26438
26439         * class.cs: Make the last change actually work, we need to check
26440         whether `ifaces != null' to avoid a crash.
26441
26442 Mon Jul 1 16:15:03 CEST 2002 Paolo Molaro <lupus@ximian.com>
26443
26444         * class.cs: when we build structs without fields that implement
26445         interfaces, we need to add the interfaces separately, since there is
26446         no API to both set the size and add the interfaces at type creation
26447         time.
26448
26449 Mon Jul 1 14:50:47 CEST 2002 Paolo Molaro <lupus@ximian.com>
26450
26451         * expression.cs: the dimension arguments to the array constructors
26452         need to be converted if they are a long.
26453
26454 Mon Jul 1 12:26:12 CEST 2002 Paolo Molaro <lupus@ximian.com>
26455
26456         * class.cs: don't emit ldarg.0 if there is no parent constructor
26457         (fixes showstopper for corlib).
26458
26459 2002-06-29  Martin Baulig  <martin@gnome.org>
26460
26461         MCS now compiles corlib on GNU/Linux :-)
26462
26463         * attribute.cs (Attribute.ApplyAttributes): Treat Accessors like Method,
26464         ie. check for MethodImplOptions.InternalCall.
26465
26466         * class.cs (TypeContainer.DefineType): When compiling corlib, both parent
26467         and TypeManager.attribute_type are null, so we must explicitly check
26468         whether parent is not null to find out whether it's an attribute type.
26469         (Property.Emit): Always call Attribute.ApplyAttributes() on the GetBuilder
26470         and SetBuilder, not only if the property is neither abstract nor external.
26471         This is necessary to set the MethodImplOptions on the accessor methods.
26472         (Indexer.Emit): Call Attribute.ApplyAttributes() on the GetBuilder and
26473         SetBuilder, see Property.Emit().
26474
26475         * rootcontext.cs (RootContext.PopulateTypes): When compiling corlib, don't
26476         populate "System.Object", "System.ValueType" and "System.Attribute" since
26477         they've already been populated from BootCorlib_PopulateCoreTypes().
26478
26479 2002-06-29  Martin Baulig  <martin@gnome.org>
26480
26481         * ecore.cs (Expression.ImplicitReferenceConversionExists): If expr
26482         is the NullLiteral, we also need to make sure that target_type is not
26483         an enum type.   
26484
26485 2002-06-29  Martin Baulig  <martin@gnome.org>
26486
26487         * rootcontext.cs (RootContext.ResolveCore): We must initialize
26488         `TypeManager.multicast_delegate_type' and `TypeManager.delegate_type'
26489         before calling BootstrapCorlib_ResolveDelegate ().
26490
26491 2002-06-27  Gonzalo Paniagua Javier <gonzalo@ximian.com>
26492
26493         * statement.cs: fixed build-breaker. All tests passed ok.
26494
26495 2002-06-27  Martin Baulig  <martin@gnome.org>
26496
26497         * typemanager.cs (TypeManager.VerifyUnManaged): Added explicit check
26498         for System.Decimal when compiling corlib.
26499
26500 2002-06-27  Martin Baulig  <martin@gnome.org>
26501
26502         * statement.cs (Switch.TableSwitchEmit): Make this work with empty
26503         switch blocks which contain nothing but a default clause.
26504
26505 2002-06-26  Andrew  <adb@tardis.ed.ac.uk>
26506
26507        * ../errors/cs1501-3.cs: Added new test for struct ctr typechecks.
26508
26509 2002-06-27  Martin Baulig  <martin@gnome.org>
26510
26511         * ecore.cs (PropertyExpr.PropertyExpr): Call
26512         TypeManager.TypeToCoreType() on the `pi.PropertyType'.
26513
26514         * typemanager.cs (TypeManager.TypeToCoreType): Return if the type
26515         is already a TypeBuilder.
26516
26517 2002-06-27  Martin Baulig  <martin@gnome.org>
26518
26519         * ecore.cs (Expression.ImplicitReferenceConversionExists): Use
26520         `target_type == TypeManager.array_type', not IsAssignableFrom() in
26521         the "from an array-type to System.Array" case.  This makes it work
26522         when compiling corlib.
26523
26524 2002-06-27  Martin Baulig  <martin@gnome.org>
26525
26526         * ecore.cs (Expression.SimpleNameResolve): If the expression is a
26527         non-static PropertyExpr, set its InstanceExpression.  This makes
26528         the `ICollection.Count' property work in System/Array.cs.
26529
26530 2002-06-25  Andrew Birkett  <adb@tardis.ed.ac.uk>
26531
26532         * driver.cs: Made error handling more consistent.  Errors now
26533         tracked by Report class, so many methods which used to return int
26534         now return void.  Main() now prints success/failure and 
26535         errors/warnings message.
26536
26537         Renamed '--probe' compiler argument to '--expect-error'.  Removed
26538         the magic number return values (123 and 124).  Now, if the
26539         expected error occurs, the compiler exits with success (exit value
26540         0).  If the compilation completes without seeing that particular
26541         error, the compiler exits with failure (exit value 1).  The
26542         makefile in mcs/errors has been changed to handle the new behaviour.
26543
26544         * report.cs: Made 'expected error' number a property and renamed
26545         it from 'Probe' to 'ExpectedError'.
26546
26547         * genericparser.cs: Removed error handling support, since it is
26548         now all done by Report class.
26549
26550         * cs-parser.jay, mb-parser.jay: Errors are tracked by Report
26551         class, so parse() no longer returns an int.
26552
26553         * namespace.cs: Use Report.Error instead of GenericParser.error
26554
26555 2002-06-22  Miguel de Icaza  <miguel@ximian.com>
26556
26557         * class.cs (TypeContainer.AddMethod, TypeContainer.AddIndexer,
26558         TypeContainer.AddOperator): At the front of the list put the
26559         explicit implementations, so they get resolved/defined first. 
26560
26561 2002-06-21  Miguel de Icaza  <miguel@ximian.com>
26562
26563         * class.cs (TypeContainer.VerifyImplements): Verifies that a given
26564         interface type is implemented by this TypeContainer.  Used during
26565         explicit interface implementation.
26566
26567         (Property.Define, Indexer.Define, Method.Define): Validate that
26568         the given interface in the explicit implementation is one of the
26569         base classes for the containing type.
26570
26571         Also if we are explicitly implementing an interface, but there is
26572         no match in the pending implementation table, report an error.
26573
26574         (Property.Define): Only define the property if we are
26575         not explicitly implementing a property from an interface.  Use the
26576         correct name also for those properties (the same CSC uses,
26577         although that is really not needed).
26578
26579         (Property.Emit): Do not emit attributes for explicitly implemented
26580         properties, as there is no TypeBuilder.
26581
26582         (Indexer.Emit): ditto.
26583
26584         Hiding then means that we do not really *implement* a pending
26585         implementation, which makes code fail.
26586
26587 2002-06-22  Martin Baulig  <martin@gnome.org>
26588
26589         * ecore.cs (Expression.Constantify): Call TypeManager.TypeToCoreType() on
26590         the return value of Object.GetType().  [FIXME: we need to do this whenever
26591         we get a type back from the reflection library].
26592
26593 Fri Jun 21 13:37:57 CEST 2002 Paolo Molaro <lupus@ximian.com>
26594
26595         * typemanager.cs: make ExpandInterfaces() slip duplicated interfaces.
26596
26597 2002-06-20  Miguel de Icaza  <miguel@ximian.com>
26598
26599         * attribute.cs: Return null if we can not look up the type.
26600
26601         * class.cs (TypeContainer.GetClassBases): Use ExpandInterfaces on
26602         the interface types found.
26603
26604         * interface.cs (Interface.GetInterfaceBases): Use ExpandInterfaces on the
26605         interface types found.
26606
26607         * typemanager.cs (GetInterfaces): Make this routine returns alll
26608         the interfaces and work around the lame differences between
26609         System.Type and System.Reflection.Emit.TypeBuilder in the results
26610         result for GetInterfaces.
26611
26612         (ExpandInterfaces): Given an array of interface types, expand and
26613         eliminate repeated ocurrences of an interface.  This expands in
26614         context like: IA; IB : IA; IC : IA, IB; the interface "IC" to
26615         be IA, IB, IC.
26616
26617 2002-06-21  Martin Baulig  <martin@gnome.org>
26618
26619         * typemanager.cs (TypeManager.EnumToUnderlying): It's now safe to call this function
26620         on System.Enum.
26621
26622 2002-06-21  Martin Baulig  <martin@gnome.org>
26623
26624         * typemanager.cs (TypeManager.TypeToCoreType): New function.  When compiling corlib
26625         and called with one of the core types, return the corresponding typebuilder for
26626         that type.
26627
26628         * expression.cs (ArrayAccess.DoResolve): Call TypeManager.TypeToCoreType() on the
26629         element type.
26630
26631 2002-06-21  Martin Baulig  <martin@gnome.org>
26632
26633         * ecore.cs (Expression.ExplicitReferenceConversionExists): Use
26634         `target_type.IsArray' instead of `target_type.IsSubclassOf (TypeManager.array_type)'.
26635         (Expression.ConvertReferenceExplicit): Likewise.
26636
26637         * expression.cs (ElementAccess.DoResolve): Likewise.
26638         (ElementAccess.DoResolveLValue): Likewise.
26639
26640 2002-06-10  Martin Baulig  <martin@gnome.org>
26641
26642         * interface.cs (Interface.PopulateIndexer): When creating the setter, we need to
26643         add the "value" parameter to the parameter list.
26644
26645         * statement.cs (Fixed.Emit): Pass the return value of the child block's Emit()
26646         to our caller.
26647
26648 2002-06-19  Miguel de Icaza  <miguel@ximian.com>
26649
26650         * expression.cs (ArrayCreation.ExpressionToArrayArgument): Convert
26651         the argument to an int, uint, long or ulong, per the spec.  Also
26652         catch negative constants in array creation.
26653
26654 Thu Jun 20 17:56:48 CEST 2002 Paolo Molaro <lupus@ximian.com>
26655
26656         * class.cs: do not allow the same interface to appear twice in
26657         the definition list.
26658
26659 Wed Jun 19 22:33:37 CEST 2002 Paolo Molaro <lupus@ximian.com>
26660
26661         * ecore.cs: don't use ldlen with System.Array.
26662
26663 Wed Jun 19 20:57:40 CEST 2002 Paolo Molaro <lupus@ximian.com>
26664
26665         * ecore.cs: stobj requires a type argument. Handle indirect stores on enums.
26666
26667 Wed Jun 19 20:17:59 CEST 2002 Paolo Molaro <lupus@ximian.com>
26668
26669         * modifiers.cs: produce correct field attributes for protected
26670         internal. Easy fix so miguel can work on ther harder stuff:-)
26671
26672 2002-06-18  Miguel de Icaza  <miguel@ximian.com>
26673
26674         * pending.cs: New file.  Move the code from class.cs here.
26675         Support clearning the pending flag for all methods (when not doing
26676         explicit interface implementation).
26677
26678 Tue Jun 18 10:36:22 CEST 2002 Paolo Molaro <lupus@ximian.com>
26679
26680         * rootcontext.cs: added a couple more types needed to bootstrap.
26681
26682 2002-06-17  Miguel de Icaza  <miguel@ximian.com>
26683
26684         * typemanager.cs (GetConstructor): Use DeclaredOnly to look the
26685         constructor in the type, instead of any constructor in the type
26686         hierarchy.  Thanks to Paolo for finding this bug (it showed up as
26687         a bug in the Mono runtime when applying the params attribute). 
26688
26689 2002-06-16  Rafael Teixeira  <rafaelteixeirabr@hotmail.com>
26690         * changed namespace.cs to use "GenericParser.error(...)" instead of "CSharpParser.error(...)"
26691
26692 2002-06-14  Rachel Hestilow  <hestilow@ximian.com>
26693
26694         * expression.cs (Unary.ResolveOperator): Use TypeManager
26695         to resolve the type.
26696
26697 2002-06-13  Ravi Pratap  <ravi@ximian.com>
26698
26699         * cs-parser.jay (enum_member_declaration): Pass in the attributes
26700         attached.
26701
26702         * enum.cs (AddEnumMember): Add support to store the attributes associated 
26703         with each member too.
26704
26705         * attribute.cs (CheckAttribute, ApplyAttributes): Update to handle
26706         field builders too - this takes care of the enum member case.
26707
26708 2002-06-10  Rachel Hestilow  <hestilow@ximian.com>
26709
26710         * typemanager.cs (TypeManager.VerifyUnManaged): Allow
26711         address-of operator on both value types and pointers.
26712
26713 2002-06-10  Martin Baulig  <martin@gnome.org>
26714
26715         * interface.cs (Interface.PopulateIndexer): Add the indexer's
26716         PropertyBuilder to the `property_builders' list.
26717
26718         * expression.cs (Indexers.GetIndexersForTypeOrInterface): New private method.
26719         (Indexers.GetIndexersForType): Call GetIndexersForTypeOrInterface() on the
26720         `lookup_type' and all its interfaces.  Unfortunately, Type.FindMembers() won't
26721         find any indexers which are inherited from an interface.
26722
26723 2002-06-09  Martin Baulig  <martin@gnome.org>
26724
26725         * const.cs (Const.LookupConstantValue): Convert `Expr' to a literal of
26726         the same type as the constant if necessary.  There's also a test-130.cs
26727         for this.
26728
26729         * enum.cs (Enum.ChangeEnumType): Moved to typemanager.cs and made public.
26730
26731         * typemanager.cs (TypeManager.ChangeType): Previously known as
26732         Enum.ChangeEnumType().
26733
26734 2002-06-09  Martin Baulig  <martin@gnome.org>
26735
26736         * expression.cs (Cast.TryReduce): Added support for consts.
26737
26738 2002-06-08  Ravi Pratap  <ravi@ximian.com>
26739
26740         * class.cs (Accessor): Hold attributes information so we can pass
26741         it along.
26742
26743         * cs-parser.jay (get_accessor_declaration, set_accessor_declaration):
26744         Modify to pass in attributes attached to the methods.
26745
26746         (add_accessor_declaration, remove_accessor_declaration): Ditto.
26747
26748         * attribute.cs (ApplyAttributes, CheckAttribute): Update accordingly
26749         to handle the Accessor kind :-)
26750
26751         * class.cs (Property.Emit, Event.Emit): Apply attributes to the accessors
26752
26753 2002-06-08  Martin Baulig  <martin@gnome.org>
26754
26755         * expression.cs (Unary.TryReduceNegative): Added support for
26756         ULongConstants.
26757
26758 2002-06-08  Martin Baulig  <martin@gnome.org>
26759
26760         * enum.cs (Enum.LookupEnumValue): Don't report an error if the
26761         name can't be found in the `defined_names' - the caller will do a
26762         MemberLookup in this case and thus find methods in System.Enum
26763         such as Enum.IsDefined().
26764
26765 2002-06-08  Martin Baulig  <martin@gnome.org>
26766
26767         * enum.cs (Enum.ChangeEnumType): This is a custom version of
26768         Convert.ChangeType() which works with TypeBuilder created types.
26769         (Enum.LookupEnumValue, Enum.Define): Use it here.
26770
26771         * class.cs (TypeContainer.RegisterRequiredImplementations): Added
26772         `TypeBuilder.BaseType != null' check.
26773         (TypeContainer.FindMembers): Only lookup parent members if we
26774         actually have a parent.
26775         (Method.EmitDestructor): Added `ec.ContainerType.BaseType != null' check.
26776         (ConstructorInitializer.Resolve): Likewise.
26777
26778         * interface.cs (Interface.FindMembers): Added
26779         `TypeBuilder.BaseType != null' check.
26780
26781         * rootcontext.cs (RootContext.ResolveCore): Added
26782         "System.Runtime.CompilerServices.IndexerNameAttribute" to
26783         classes_second_stage.
26784
26785         * typemanager.cs (TypeManager.InitCoreTypes): Don't initialize
26786         debug_type and trace_type when compiling with --nostdlib.       
26787
26788 2002-06-07  Martin Baulig  <martin@gnome.org>
26789
26790         * class.cs (TypeContainer): Added `have_nonstatic_fields' field.
26791         (AddField): Set it to true when adding a non-static field.
26792         (DefineType): Use `have_nonstatic_fields' to find out whether we
26793         have non-static fields, not `Fields != null'.
26794
26795 2002-06-02  Miguel de Icaza  <miguel@ximian.com>
26796
26797         * ecore.cs (SimpleNameResolve): Removed simple bug (we were
26798         dereferencing a null on the static-field code path)
26799
26800 2002-05-30  Martin Baulig  <martin@gnome.org>
26801
26802         * codegen.cs (InitMonoSymbolWriter): Added `string[] args' argument
26803         to take command line arguments.  Use reflection to call the new
26804         custom `Initialize' function on the symbol writer and pass it the
26805         command line arguments.
26806
26807         * driver.cs (--debug-args): New command line argument to pass command
26808         line arguments to the symbol writer.
26809
26810 2002-05-28  Miguel de Icaza  <miguel@ximian.com>
26811
26812         * assign.cs (DoResolve): Forgot to do the implicit conversion to
26813         the target type for indexers and properties.  Thanks to Joe for
26814         catching this.
26815
26816 2002-05-27  Miguel de Icaza  <miguel@ximian.com>
26817
26818         * typemanager.cs (MethodFlags): returns the method flags
26819         (Obsolete/ShouldIgnore) that control warning emission and whether
26820         the invocation should be made, or ignored. 
26821
26822         * expression.cs (Invocation.Emit): Remove previous hack, we should
26823         not do this on matching a base type, we should do this based on an attribute
26824
26825         Only emit calls to System.Diagnostics.Debug and
26826         System.Diagnostics.Trace if the TRACE and DEBUG defines are passed
26827         on the command line.
26828
26829         * rootcontext.cs: Global settings for tracing and debugging.
26830
26831         * cs-tokenizer.cs (define): New utility function to track
26832         defines.   Set the global settings for TRACE and DEBUG if found.
26833
26834 2002-05-25  Ravi Pratap  <ravi@ximian.com>
26835
26836         * interface.cs (Populate*): Pass in the TypeContainer as well as
26837         the DeclSpace as parameters so that we can create EmitContexts and
26838         then use that to apply attributes etc.
26839
26840         (PopulateMethod, PopulateEvent, PopulateProperty)
26841         (PopulateIndexer): Apply attributes everywhere.
26842
26843         * attribute.cs (CheckAttribute): Include InterfaceMethod, InterfaceEvent
26844         etc.
26845
26846         (ApplyAttributes): Update accordingly.
26847
26848         We now apply interface attributes for all members too.
26849
26850 2002-05-26  Miguel de Icaza  <miguel@ximian.com>
26851
26852         * class.cs (Indexer.Define); Correctly check if we are explicit
26853         implementation (instead of checking the Name for a ".", we
26854         directly look up if the InterfaceType was specified).
26855
26856         Delay the creation of the PropertyBuilder.
26857
26858         Only create the PropertyBuilder if we are not an explicit
26859         interface implementation.   This means that explicit interface
26860         implementation members do not participate in regular function
26861         lookups, and hence fixes another major ambiguity problem in
26862         overload resolution (that was the visible effect).
26863
26864         (DefineMethod): Return whether we are doing an interface
26865         implementation. 
26866
26867         * typemanager.cs: Temporary hack until we get attributes in
26868         interfaces (Ravi is working on that) and we get IndexerName
26869         support in interfaces.
26870
26871         * interface.cs: Register the indexers as properties.
26872
26873         * attribute.cs (Attribute.Resolve): Catch the error, and emit a
26874         warning, I have verified that this is a bug in the .NET runtime
26875         (JavaScript suffers of the same problem).
26876
26877         * typemanager.cs (MemberLookup): When looking up members for
26878         interfaces, the parent of an interface is the implicit
26879         System.Object (so we succeed in searches of Object methods in an
26880         interface method invocation.  Example:  IEnumerable x;  x.ToString
26881         ()) 
26882
26883 2002-05-25  Miguel de Icaza  <miguel@ximian.com>
26884
26885         * class.cs (Event): Events should also register if they do
26886         implement the methods that an interface requires.
26887
26888         * typemanager.cs (MemberLookup); use the new GetInterfaces
26889         method. 
26890
26891         (GetInterfaces): The code used to lookup interfaces for a type is
26892         used in more than one place, factor it here. 
26893
26894         * driver.cs: Track the errors at the bottom of the file, we kept
26895         on going.
26896
26897         * delegate.cs (NewDelegate.Emit): We have to emit a null as the
26898         instance if the method we are calling is static!
26899
26900 2002-05-24  Miguel de Icaza  <miguel@ximian.com>
26901
26902         * attribute.cs (ApplyAttributes): Make this function filter out
26903         the IndexerName attribute (as that attribute in reality is never
26904         applied) and return the string constant for the IndexerName
26905         attribute. 
26906
26907         * class.cs (TypeContainer.Emit): Validate that all the indexers
26908         have the same IndexerName attribute, and if so, set the
26909         DefaultName attribute on the class. 
26910
26911         * typemanager.cs: The return value might contain other stuff (not
26912         only methods).  For instance, consider a method with an "Item"
26913         property and an Item method.
26914
26915         * class.cs: If there is a problem with the parameter types,
26916         return. 
26917
26918 2002-05-24  Ravi Pratap  <ravi@ximian.com>
26919
26920         * ecore.cs (ImplicitConversionExists): Wrapper function which also
26921         looks at user defined conversion after making a call to 
26922         StandardConversionExists - we need this for overload resolution.
26923
26924         * expression.cs : Update accordingly the various method calls.
26925
26926         This fixes 2 bugs filed against implicit user defined conversions 
26927
26928 2002-05-22  Miguel de Icaza  <miguel@ximian.com>
26929
26930         * statement.cs: Track the result of the assignment.
26931
26932 2002-05-21  Miguel de Icaza  <miguel@ximian.com>
26933
26934         * expression.cs (MemberAccess): Improved error reporting for
26935         inaccessible members.
26936
26937 2002-05-22  Martin Baulig  <martin@gnome.org>
26938
26939         * makefile (mcs-mono2.exe): New target.  This is mcs compiled with
26940         itself with debugging support.
26941
26942 2002-05-22  Martin Baulig  <martin@gnome.org>
26943
26944         * typemanager.cs ("System.Runtime.InteropServices.StructLayoutAttribute"):
26945         Removed, this isn't needed anymore.
26946
26947 2002-05-20  Martin Baulig  <martin@gnome.org>
26948
26949         * typemanager.cs (InitEnumUnderlyingTypes): "System.Char" can't
26950         be underlying type for an enum.
26951
26952 2002-05-20  Miguel de Icaza  <miguel@ximian.com>
26953
26954         * typemanager.cs (InitEnumUnderlyingTypes): New helper function
26955         that splits out the loading of just the core types.
26956
26957         * rootcontext.cs (ResolveCore): Split the struct resolution in
26958         two, so we can load the enumeration underlying types before any
26959         enums are used.
26960
26961         * expression.cs (Is): Bandaid until we fix properly Switch (see
26962         bug #24985 for details).
26963
26964         * typemanager.cs (ImplementsInterface): The hashtable will contain
26965         a null if there are no interfaces implemented.
26966
26967 2002-05-18  Miguel de Icaza  <miguel@ximian.com>
26968
26969         * cs-parser.jay (indexer_declarator): It is fine to have array
26970         parameters
26971
26972 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
26973
26974         * typemanager.cs: (RegisterBuilder): New function used to register
26975         TypeBuilders that implement interfaces.  Since
26976         TypeBuilder.GetInterfaces (as usual) does not work with lame
26977         Reflection.Emit. 
26978         (AddUserType): register interfaces.
26979
26980         (ImplementsInterface): Use the builder_to_ifaces hash if we are
26981         dealing with TypeBuilder.  Also, arrays are showing up as
26982         SymbolTypes, which are not TypeBuilders, but whose GetInterfaces
26983         methods can not be invoked on them!
26984
26985         * ecore.cs (ExplicitReferenceConversionExists): Made public.
26986         (ImplicitReferenceConversionExists): Split out from
26987         StandardConversionExists. 
26988
26989         * expression.cs (As): We were only implementing one of the three
26990         cases for the as operator.  We now implement them all.
26991         (Is): Implement the various other cases for Is as well.
26992
26993         * typemanager.cs (CACHE): New define used to control if we want or
26994         not the FindMembers cache.  Seems to have a negative impact on
26995         performance currently
26996
26997         (MemberLookup): Nested types have full acess to
26998         enclosing type members
26999
27000         Remove code that coped with instance/static returns for events, we
27001         now catch this in RealFindMembers.
27002
27003         (RealFindMembers): only perform static lookup if the instance
27004         lookup did not return a type or an event.  
27005
27006 2002-05-17  Miguel de Icaza  <miguel@ximian.com>
27007
27008         * assign.cs (CompoundAssign): We pass more semantic information
27009         now to Compound Assignments than we did before: now we have all
27010         the information at hand, and now we resolve the target *before* we
27011         do the expression expansion, which allows the "CacheValue" method
27012         to have the effect we intended (before, a [x] += 1 would generate
27013         two differen ArrayAccess expressions from the ElementAccess,
27014         during the resolution process).
27015
27016         (CompoundAssign.DoResolve): Resolve target and original_source here.
27017
27018 2002-05-16  Miguel de Icaza  <miguel@ximian.com>
27019
27020         * expression.cs (ArrayAccess): dropped debugging information. 
27021
27022         * typemanager.cs: Small bug fix: I was always returning i_members,
27023         instead of one of i_members or s_members (depending on which had
27024         the content).
27025
27026         * assign.cs (IAssignMethod.CacheTemporaries): New method.  This
27027         method is invoked before any code generation takes place, and it
27028         is a mechanism to inform that the expression will be invoked more
27029         than once, and that the method should use temporary values to
27030         avoid having side effects
27031
27032         (Assign.Emit): Call CacheTemporaries in the IAssignMethod.
27033
27034         * ecore.cs (Expression.CacheTemporaries): Provide empty default
27035         implementation.
27036
27037         * expression.cs (Indirection, ArrayAccess): Add support for
27038         CacheTemporaries in these two bad boys. 
27039
27040         * ecore.cs (LoadFromPtr): figure out on our own if we need to use
27041         ldobj or ldind_ref.  
27042         (StoreFromPtr): Handle stobj as well.
27043
27044         * expression.cs (UnaryMutator): Share more code.
27045
27046         * typemanager.cs (FindMembers): Thanks to Paolo for tracking this
27047         down: I was not tracking the Filter function as well, which
27048         was affecting the results of the cache.
27049
27050 2002-05-15  Miguel de Icaza  <miguel@ximian.com>
27051
27052         * attribute.cs: Remove the hack to handle the CharSet property on
27053         StructLayouts. 
27054
27055 2002-05-14  Miguel de Icaza  <miguel@ximian.com>
27056
27057         * attribute.cs (DoResolve): More uglyness, we now only try to
27058         resolve the attribute partially, to extract the CharSet
27059         information (only if we are a StructLayout attribute).  Otherwise 
27060
27061         (GetExtraTypeInfo): Add some code to conditionally kill in the
27062         future this.   I am more and more convinced that the .NET
27063         framework has special code to handle the attribute setting on
27064         certain elements.
27065
27066         * expression.cs (IsParamsMethodApplicable): Revert my previous
27067         foreach change here, it was wrong.
27068
27069 2002-05-13  Miguel de Icaza  <miguel@ximian.com>
27070
27071         * cs-tokenizer.cs: (pp_primary): Eat the ')' at the end.
27072         (pp_expr): do not abort on unknown input, just return.
27073         (eval): abort if there are pending chars.
27074
27075         * attribute.cs (Attribute.Resolve): Positional parameters are
27076         optional.  Deal with that case.
27077
27078         * class.cs (DefineType): Call Attribute.GetExtraTypeInfo to fetch
27079         the Ansi/Unicode/Auto information for the type.
27080
27081         (TypeContainer.DefineType): instantiate the EmitContext here, as
27082         we will be using it during the type definition (to resolve
27083         attributes) and during the emit phase.
27084
27085         * attribute.cs (Attribute.GetExtraTypeInfo): This routine is used
27086         to pull type information out of the attributes
27087
27088         (Attribute.Resolve): track the constructor builder, and allow for
27089         multiple invocations (structs and classes will use this).
27090
27091         * ecore.cs (MemberLookupFinal): new version with all the
27092         parameters customizable.
27093
27094         * expression.cs (New.DoResolve): Use MemberLookupFinal to locate
27095         constructors.  Return if the result value is null (as the error
27096         would have been flagged already by MemberLookupFinal)
27097
27098         Do not allow instances of abstract classes or interfaces to be
27099         created.
27100
27101         * class.cs: (MethodSignature.InheritableMemberSignatureCompare):
27102         We have to compare the assembly property here when dealing with
27103         FamANDAssem and Assembly access modifiers, because we might be
27104         creating an assembly from *modules* (that means that we are not
27105         getting TypeBuilders for types defined in other modules that are
27106         part of this assembly).
27107
27108         (Method.Emit): If the method is marked abstract and has a body,
27109         emit an error. 
27110
27111         (TypeContainer.DefineMembers): If both the defined member and the
27112         parent name match are methods, then do not emit any warnings: let
27113         the Method.Define routine take care of flagging warnings.  But if
27114         there is a mismatch (method overrides something else, or method is
27115         overriwritten by something, then emit warning).
27116
27117         (MethodSignature.MemberSignatureCompare): If the sig.ret_type is
27118         set to null, this means `do not check for the return type on the
27119         signature'. 
27120
27121         (Method.Define): set the return type for the method signature to
27122         null, so that we get methods with the same name and parameters and
27123         different return types.  This is used to flag warning 114 (you are
27124         hiding a method, and you probably want to use the new/override
27125         keywords instead).
27126
27127         * typemanager.cs (MemberLookup): Implemented proper access
27128         control, closing a long standing set of bug reports.  The problem
27129         was that the Framework only has two bits: Public and NonPublic,
27130         and NonPublic includes private and protected methods, but we need
27131         to enforce the FamANDAssem, FamOrAssem and Family. 
27132
27133 2002-05-11  Miguel de Icaza  <miguel@ximian.com>
27134
27135         * statement.cs (GotoCase): Return true: Ammounts to giving up
27136         knowledge on whether we return or not, and letting the other case
27137         be responsible for it.
27138
27139 2002-05-10  Miguel de Icaza  <miguel@ximian.com>
27140
27141         * driver.cs: Do not load directories for each file processed, only
27142         do it if there is a pattern.
27143
27144         * ecore.cs: Report readonly assigns here as well, as we might have
27145         been resolved only by MemberAccess.
27146
27147         (SimpleName.SimpleNameResolve): Also be useful for LValue
27148         resolution.   We need this to propagate assign to local readonly variables
27149
27150         * typemanager.cs: Use a ptrhashtable for the criteria, because we
27151         do not want to reuse potential criteria memory.
27152
27153         * class.cs (MyEventBuilder): Set reflected_type;
27154
27155         * ecore.cs (Constantify): Added support for constifying bools.
27156
27157         (RootContext.LookupType): Added a cache for values looked up in
27158         the declaration space.
27159
27160         * typemanager.cs (FindMembers): Now is a front-end to
27161         RealFindMembers, and provides a two-level hashtable-based cache to
27162         the request.  
27163
27164         15% performance improvement: from 22.5 to 19.2 seconds.
27165
27166         * expression.cs (IsParamsMethodApplicable): use foreach.
27167         (Invocation.DoResolve): ditto.
27168         (New.DoResolve): ditto.
27169         (ArrayCreation.DoResolve): ditto.
27170
27171         * ecore.cs (FindMostEncompassingType): use foreach.
27172
27173         * delegate.cs (NewDelegate.DoResolve): Use foreach
27174
27175         * ecore.cs (Expression.FindMostSpecificSource): Use foreach.
27176         (RemoveMethods): use foreach.
27177
27178         * expression.cs (Invocation.MakeUnionSet): Optimization: Use two
27179         nested foreach statements instead of for, and also break out of
27180         the inner loop once a match is found.
27181
27182         (Invocation.OverloadResolve): Use foreach, simplify the code. 
27183
27184 2002-05-08  Miguel de Icaza  <miguel@ximian.com>
27185
27186         * cfold.cs (BinaryFold): During an enumeration evaluation context,
27187         we actually unwrap the expression to allow for extra information
27188         to be extracted. 
27189
27190         * expression.cs: Use Shr_Un on unsigned operations. 
27191
27192 2002-05-08  Ravi Pratap  <ravi@ximian.com>
27193
27194         * ecore.cs (FindMostEncompass*): Fix trivial bug where the set of 
27195         applicable operators was not being considered correctly. This closes
27196         the bug Miguel reported.
27197
27198 Wed May 8 16:40:50 CEST 2002 Paolo Molaro <lupus@ximian.com>
27199
27200         * attribute.cs: check that the type derives from System.Attribute
27201         and report the correct error in that case (moved the duplicate code to
27202         its own method, too).
27203
27204 Wed May 8 11:50:31 CEST 2002 Paolo Molaro <lupus@ximian.com>
27205
27206         * attribute.cs: lookup attribute type name as the spec says: first the
27207         bare attribute name and then name + "Attribute" (nant compiles with
27208         mcs after this fix).
27209
27210 2002-05-07  Miguel de Icaza  <miguel@ximian.com>
27211
27212         * expression.cs (Unary.TryReduceNegative): Ah!  Tricky!  Tricky!
27213         Because of the way we parse things, we should try to see if a
27214         UIntConstant can fit in an integer.
27215
27216 2002-05-07  Ravi Pratap  <ravi@ximian.com>
27217
27218         * ecore.cs (GetConversionOperators): Do not pick up op_True operators
27219         when we are in an explicit context.
27220
27221         (ConvertReferenceExplicit): When converting from Iface type S to Class
27222         T make sure the rules are implemented as an OR.
27223
27224         * parameter.cs (ParameterType): Make it a property for now although the
27225         purpose really isn't anything immediate.
27226
27227         * expression.cs (Is*Applicable): Do better checking on the parameter type
27228         of a ref/out parameter. The ones from the system assemblies are already 
27229         marked with the correct type so we don't need to do any correction.
27230
27231         * ecore.cs (StandardConversionExists): Conversion from Interface types to 
27232         the object type is standard too so include that.
27233
27234 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27235
27236         * ecore.cs (StandardConversionExists): Augment with missing code:
27237         deal with IntConstant, LongConstants and Enumerations.
27238
27239         * assign.cs: Report the error, instead of failing silently
27240
27241         * rootcontext.cs (AddGlobalAttributes): Track attributes on the
27242         typecontainer that they are declared, because the
27243         typecontainer/namespace will have the list of using clauses that
27244         need to be applied.
27245
27246         Assembly Attributes were escaping the normal registration
27247         mechanism. 
27248
27249         (EmitCode): Apply attributes within an EmitContext that represents
27250         the container they were declared on.
27251
27252         * cs-parser.jay: Track bases for structs.  How did I get this wrong?
27253
27254 2002-05-06  Ravi Pratap  <ravi@ximian.com>
27255
27256         * ecore.cs (FindMostEncompassingType, FindMostEncompassedType):
27257         Revamp completely - make much cleaner as we now operate only
27258         on a set of Types.
27259
27260         (FindMostSpecificSource, FindMostSpecificTarget): New methods
27261         to implement the logic detailed in the spec more correctly.
27262
27263         (UserDefinedConversion): Update accordingly.
27264
27265 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27266
27267         * statement.cs: Return flow analysis information up.
27268
27269         * cs-tokenizer.cs (adjust_real): Share code between LITERAL_DOUBLE
27270         and the default.
27271
27272         (token): Do not consume an extra character before calling
27273         decimal_digits.
27274
27275 2002-05-06  Piers Haken <piersh@friskit.com>
27276
27277         * cs-parser.jay: add 'override' attribute to System.Object.Finalize
27278
27279 2002-05-06  Miguel de Icaza  <miguel@ximian.com>
27280
27281         * class.cs (Constructor.Emit): Set the IsStatic flag in the
27282         EmitContext during the instance constructor initializer
27283         resolution, to stop access to instance variables.
27284
27285         This is mandated by the spec, last paragraph of the `constructor
27286         initializers' section. 
27287
27288 2002-05-05  Miguel de Icaza  <miguel@ximian.com>
27289
27290         * cs-parser.jay, class.cs (Accessor): new class used to represent
27291         an accessor (get or set).  In the past we used `null' to represent
27292         a missing accessor.  But this is ambiguous because there was no
27293         way to tell in abstract indexers/properties if one of them was
27294         specified.
27295
27296         Now there is a way of addressing that.
27297
27298         * expression.cs (Indexers.GetIndexersForType): Use TypeManager.MemberLookup
27299         instead of FindMembers.
27300
27301         * class.cs (TypeContainer.EmitFieldInitializer): Do not typecast
27302         the result of Assign.Resolve as Assign, but rather as ExpressionStatement.
27303
27304         * attribute.cs: Treat indexers and properties as the same in terms
27305         of applying attributes
27306
27307         * ecore.cs (FindMostEncompassedType): Use statically initialized
27308         EmptyExpressions()s like we do elsewhere to avoid creating useless
27309         objects (and we take this out of the tight loop).
27310
27311         (GetConversionOperators): Move the code to extract the actual
27312         operators to a separate routine to clean things up.
27313
27314 2002-05-04  Miguel de Icaza  <miguel@ximian.com>
27315
27316         * ecore.cs (FieldExpr): Remove un-needed tests for null, since now
27317         events are always registered FieldBuilders.
27318
27319         * class.cs (FieldBase): New class shared by Fields 
27320
27321         * delegate.cs: If we are a toplevel delegate, use our full name.
27322         If we are a nested delegate, then only use our tail name.
27323
27324 2002-05-02  Ravi Pratap  <ravi@ximian.com>
27325
27326         * expression.cs (IsApplicable): Ensure that we add the "&" to
27327         ref/out types before comparing it with the type of the argument.
27328
27329         (IsParamsMethodApplicable): Ditto.
27330
27331         (Argument.Type): Use TypeManager.LookupType instead of Type.GetType - 
27332         silly me ;-)
27333
27334         * delegate.cs : Handle the case when we have more than one applicable
27335         method. Flag an error only when we finish checking all.
27336
27337 2002-05-02  Miguel de Icaza  <miguel@ximian.com>
27338
27339         * expression.cs: Add support for boolean static initializers.
27340
27341 2002-05-01  Miguel de Icaza  <miguel@ximian.com>
27342
27343         * attribute.cs: Use proper cast for Events, since we use a MyEventBuilder.
27344
27345         * parameter.cs (ComputeParameterTypes,
27346         ComputeAndDefineParameterTypes): Better error handling: now we
27347         clear the `types' cache if we fail during any of the type lookups.
27348         We also return the status code correctly to our caller
27349
27350         * delegate.cs: If we fail to define a delegate, abort the extra
27351         steps. 
27352
27353         * expression.cs (Binary.ResolveOperator): for
27354         operator==(object,object) and operator !=(object, object) we also
27355         have to verify that there is an implicit conversion from one to
27356         the other.
27357
27358         (ArrayAccess.DoResolve): Array Access can operate on
27359         non-variables. 
27360
27361 2002-04-30  Miguel de Icaza  <miguel@ximian.com>
27362
27363         * assign.cs (CompoundAssign): A new class used as a "flag" that
27364         the assignment actually is happening as part of a compound
27365         assignment operator.
27366
27367         During compound assignment, a few new rules exist to enable things
27368         like:
27369
27370         byte b |= 1 + 2
27371
27372         From the spec:
27373
27374         x op= y can be evaluated as x = (T) (x op y) (ie, an explicit cast
27375         to the type of x) if y is implicitly convertible to the type of x,
27376         and the operator is a builtin operator and the return type of the
27377         operator is explicitly convertible to the type of x. 
27378
27379         * rootcontext.cs: Reset warning level to 2.  4 catches various
27380         "interesting" features in mcs, we must clean this up at some
27381         point, but currently am trying to kill other bugs ;-)
27382
27383         * ecore.cs (SimpleName.SimpleNameResolve): Perform member lookups
27384         in container classes as well.  
27385
27386         * expression.cs (Binary.ResolveOperator): Handle string case
27387         before anything else (as operator overloading does emit an error
27388         before doing anything else).
27389
27390         This code could go away when we move to a table driven model, but
27391         i could not come up with a good plan last night.
27392
27393 2002-04-30  Lawrence Pit <loz@cable.a2000.nl>
27394
27395         * typemanager.cs (CSharpName): reimplementation using regex.
27396         * class.cs: added null check for fields in Emit
27397         * rootcontext.cs: set warninglevel to 4
27398
27399 2002-04-29  Miguel de Icaza  <miguel@ximian.com>
27400
27401         * typemanager.cs (CSharpName): reimplemented with Lupus
27402         suggestion.
27403
27404 2002-04-28  Miguel de Icaza  <miguel@ximian.com>
27405
27406         * statement.cs (If): correclty implement Resolve, because we were
27407         not catching sem errors in there.  The same process is needed
27408         everywhere else. 
27409         (Return, StatementExpression, For, While, Do, Throw, Lock): Implement Resolve
27410
27411
27412         (Statement.Warning_DeadCodeFound): Factorize code.
27413         (While): Report dead code here too.
27414
27415         (Statement): Added Resolve virtual method to allow
27416         for resolution split from the emit code.
27417
27418 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27419
27420         * statement.cs (EmitBoolExpression): No longer try to resolve the
27421         expression here.    
27422         (MakeBoolean): New utility function that resolve, implicitly
27423         converts to boolean and tags the expression. 
27424
27425
27426         (If, Do): Implement dead code elimination.
27427         (While): Implement loop inversion
27428
27429         (Do, While, For, If): Resolve the expression prior to calling our
27430         code generation.
27431
27432 2002-04-22  Lawrence Pit <loz@cable.a2000.nl>
27433
27434         * class.cs:
27435           - added method Report28 (warning: program has more than one entry point)
27436           - added method IsEntryPoint, implements paragraph 10.1 of the spec
27437           - modified method Method.Define, the part at the end of the method
27438
27439         * rootcontext.cs: added static public Location EntryPointLocation;
27440           
27441         * ../errors/cs0028.cs : Add test case for the above warning.              
27442
27443         * typemanager.cs:
27444           - modified method CSharpName to allow arrays of primitive type to
27445             be printed nicely (e.g. instead of System.Int32[][] it now prints
27446             int[][])
27447           - added method CSharpSignature: returns the signature of a method
27448             in string format to be used in reporting errors, warnings, etc.
27449
27450         * support.cs: InternalParameters.ParameterDesc variable tmp initialized
27451         with String.Empty.
27452
27453 2002-04-26  Ravi Pratap  <ravi@ximian.com>
27454
27455         * delegate.cs (Define): Fix extremely silly bug where I was
27456         setting the type of the 'object' parameter of the BeginInvoke
27457         method to System.IAsyncResult instead of System.Object ;-)
27458
27459 2002-04-26  Miguel de Icaza  <miguel@ximian.com>
27460
27461         * class.cs (ConstructorInitializer.Resolve): Also use DeclaredOnly
27462         here. 
27463
27464         (Constructor.Emit): return if we fail to initialize the
27465         constructor.  Another door closed!  
27466
27467         * expression.cs (New.DoResolve): Improve error message (from -6 to
27468         1501).  Use DeclaredOnly lookup to find the exact constructor.
27469
27470         * typemanager.cs (MemberLookup): If DeclaredOnly is set, do not
27471         loop.  This is useful.
27472
27473         * cs-parser.jay: Adjust the default parameters so that destructors
27474         have the proper signature.
27475
27476 2002-04-26  Martin Baulig  <martin@gnome.org>
27477
27478         * driver.cs (LoadAssembly): If `assembly' contains any characters
27479         which are only valid in path names and not in assembly names
27480         (currently slash, backslash and point), use Assembly.LoadFrom ()
27481         instead of Assembly.Load () on the `assembly' (before iteration
27482         over the link_paths).
27483
27484 2002-04-26  Martin Baulig  <martin@gnome.org>
27485
27486         * cs-tokenizer.cs (is_hex): Correctly handle lowercase chars.
27487
27488 2002-04-25  Miguel de Icaza  <miguel@ximian.com>
27489
27490         * class.cs (Property): use the new typemanager.MemberLookup
27491
27492         (TypeContainer.MemberLookup): Implement using the
27493         TypeManager.MemberLookup now. 
27494
27495         * typemanager.cs: Make MemberLookup a function of the TypeManager,
27496         and return MemberInfos, so that these can be used without an
27497         EmitContext (what we had before).
27498
27499 2002-04-24  Miguel de Icaza  <miguel@ximian.com>
27500
27501         * expression.cs: Fix the case where the argument to params if the
27502         type of the params.  I omitted handling this before.   Fixed
27503
27504 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27505
27506         * driver.cs: Call BootCorlib_PopulateCoreType
27507
27508         * class.cs (Property.CheckBase): Check for properties only, not
27509         for all members. 
27510
27511         * interface.cs: Temporary hack: try/catch around the
27512         CustomAttributeBuilder, because I am getting an exception that I
27513         do not understand.
27514
27515         * rootcontext.cs (BootCorlib_PopulateCoreType): Populate some
27516         types whose definitions are required to be there (attributes are
27517         defined before standard types).
27518
27519         Compute definitions as we boot the various types, as they are used
27520         immediately (value_type class will need object_type, but if we do
27521         not initialize object_type, we will pass a null, which will let
27522         the runtime pick the System.Object from the existing corlib, which
27523         is not what we want).
27524
27525 2002-04-22  Patrik Torstensson <totte@labs2.com>
27526
27527         * cs-tokenizer.cs: fixed a number of trim() issues.
27528
27529 2002-04-22  Ravi Pratap  <ravi@ximian.com>
27530
27531         * expression.cs (Argument.Type): Ensure that we return the correct
27532         type when we have out or ref parameters [in which case we 
27533         append a "&"].
27534
27535 2002-04-22  Miguel de Icaza  <miguel@ximian.com>
27536
27537         * class.cs (Property, Indexer): Allow extern modifier in there. 
27538
27539         * typemanager.cs (InitBaseTypes): Initializes object_type and
27540         value_type, since those will be used early on during the bootstrap
27541         process to compile corlib.
27542
27543         (InitCoreTypes): Move code from here to InitBaseTypes.
27544
27545 2002-04-21  Miguel de Icaza  <miguel@ximian.com>
27546
27547         * ecore.cs (PropertyExpr): Optimize calls to Array::get_Length on
27548         single-dimension arrays as using the ldlen opcode.  
27549
27550         Daniel Lewis discovered this optimization.  
27551
27552         * typemanager.cs: Add signature for System.Array::get_Length
27553
27554 2002-04-20  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27555
27556         * statement.cs: report the error when the foreach does not apply to an
27557         array nor a collection.
27558
27559 2002-04-19  Miguel de Icaza  <miguel@ximian.com>
27560
27561         * expression.cs: Add implicit conversions to the operator ~.
27562
27563         * constant.cs (DecimalConstant.Emit): Emit decimal value.
27564
27565         * typemanager.cs: Locate the decimal constructor.
27566
27567 2002-04-17  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27568
27569         * attribute.cs: use the new property of TypeOf.
27570         * expression.cs: added 'get' property around typearg.
27571
27572         These changes fix a build breaker reported by NickD. Is this the
27573         correct way to fix?  If not, please, revert my changes and make it
27574         work :-).
27575
27576 2002-04-17  Miguel de Icaza  <miguel@ximian.com>
27577
27578         * attribute.cs: Add support for typeof in attribute invocations.
27579         I am not sure that this is right though.
27580
27581 2002-04-14  Duncan Mak  <duncan@ximian.com>
27582
27583         * cfold.cs (BinaryFold): Catch DivideByZeroException in the
27584         Binary.Operator.Division case.
27585
27586 2002-04-13  Ravi Pratap  <ravi@ximian.com>
27587
27588         * class.cs (DefineType): Ensure that we do a proper check on
27589         attribute types and also register it with the TypeManager.
27590
27591         (TypeContainer.Targets): The default for attribute types is
27592         AttributeTargets.All.
27593
27594         * attribute.cs (ApplyAttributes): Registering the attribute type
27595         is done elsewhere, not when we discover we have a Usage attribute.
27596
27597 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27598
27599         * expression.cs (VerifyArgumentsCompat): Implement Miguel's suggestion
27600         and get rid of is_delegate parameter.
27601
27602         * everywhere : update.
27603
27604 2002-04-12  Ravi Pratap  <ravi@ximian.com>
27605
27606         * cs-parser.jay (compilation_unit): Revamp completely to use
27607         some new ideas that I got from Rhys' grammar to solve the problems
27608         with assembly level attributes.
27609
27610         (outer_declaration): New grammar production.
27611
27612         (attribute_sections): Add.
27613
27614         (opt_attributes): Base on attribute_sections
27615
27616         (namespace_declaration): Allow opt_attributes to tackle the case
27617         when we have assembly level attributes - we are clever in this
27618         regard now ;-)
27619
27620         * attribute.cs (ApplyAttributes): Do not worry about assembly 
27621         attributes in the non-global context.
27622
27623         * rootcontext.cs (AddGlobalAttributes): Go back to using this
27624         instead of SetGlobalAttributes.
27625
27626         * class.cs, rootcontext.cs : Ensure we define and generate 
27627         attribute types before anything else.
27628
27629         * attribute.cs (CheckAttribute and GetValidPlaces): Handle the exception
27630         and flag the new error -20 for the case when the attribute type
27631         does not have valid targets specified. csc does not catch this.
27632
27633         * ../errors/errors.txt : update for error # -20
27634
27635 2002-04-11  Ravi Pratap  <ravi@ximian.com>
27636
27637         * support.cs (InternalParameters.ParameterModifier): Do some null
27638         checking and return sane values.
27639
27640         * class.cs (Method.Define): If we are a PInvoke method, ensure
27641         that we are static and extern. Report error # 601
27642
27643         * ../errors/cs0601.cs : Add test case for the above error.
27644
27645 2002-04-07  Ravi Pratap  <ravi@ximian.com>
27646
27647         * rootcontext.cs (attribute_types): We need to keep type of
27648         all attribute types separately and emit code for them first.
27649
27650         (RegisterAttribute) : Implement.
27651
27652         * class.cs (DefineType): Check if the current Type is a custom
27653         attribute type and register it accordingly.
27654
27655         * rootcontext.cs (AddGlobalAttributes): Fix silly bug where we were
27656         adding the first attribute twice and rename to
27657
27658         (SetGlobalAttributes): this.
27659
27660         * rootcontext.cs (NamespaceLookup): Run through the aliases too and perform
27661         lookups.
27662
27663         * attribute.cs (ApplyAttributes): Take an additional argument telling us
27664         if we are processing global arguments. Hmm, I am unsure of this.
27665
27666 2002-04-12  Gonzalo Paniagua Javier <gonzalo@ximian.com>
27667
27668         * expression.cs: added static array of strings to avoid calling
27669         Enum.ToString () for Operator in Binary. Significant recover of
27670         performance.
27671
27672 2002-04-10  Miguel de Icaza  <miguel@ximian.com>
27673
27674         * class.cs (FindMembers): Allow the Builders of the various
27675         members to be null.  If they are skip them.  This only happens
27676         during the PInvoke declaration.
27677
27678 2002-04-09  Miguel de Icaza  <miguel@ximian.com>
27679
27680         * parameter.cs (Parameters.ComputeParameterTypes): Flag the
27681         failure, so we do not keep going afterwards.
27682
27683         * expression.cs: (Invocation.OverloadResolve): I believe Ravi
27684         wanted to pass `false' as the `is_delegate' argument.  If this is
27685         the case, why not use delegate_type == null to mean `is_delegate =
27686         false' and anything else as is_delegate = true.
27687
27688 Tue Apr  9 05:40:12  2002 Piers Haken <piersh@friskit.com>
27689
27690         * statement.cs: fixed SimpleSwitchEmit to make 'goto case' goto the
27691         code for the section, not the beginning of the tests.
27692
27693 2002-04-08  Miguel de Icaza  <miguel@ximian.com>
27694
27695         * cfold.cs: Handle operator + (Enum x, Underlying x) 
27696
27697         * expression.cs (Binary): same.  Warn about errors where we have
27698         Enum/Enum in operator + as well.
27699
27700 Mon Apr  8 06:29:03  2002 Piers Haken <piersh@friskit.com>
27701
27702         * statement.cs:
27703                 - added support for switch(bool)
27704                 - optimize loading of I8/U8 constants (ldc.i4, iconv_i8)
27705                 - add TableSwitchEmit() to handle table-based switch statements
27706
27707 2002-04-05  Ravi Pratap  <ravi@ximian.com>
27708
27709         * expression.cs (Invocation.OverloadResolve): Factor out code which
27710         does parameter compatibility checking with arguments so that we can 
27711         re-use the code even from Delegate.VerifyApplicability
27712
27713         (VerifyArgumentsCompat): Move above code here.
27714
27715         * delegate.cs (VerifyApplicability): Get rid of duplicate code
27716         and instead make a call to the above method.
27717
27718 2002-03-31  Ravi Pratap  <ravi@ximian.com>
27719
27720         * typemanager.cs (attribute_type): Corresponds to System.Attribute.
27721         We use it to keep track of classes which are attribute types.
27722
27723 2002-04-02  Miguel de Icaza  <miguel@ximian.com>
27724
27725         * delegate.cs (Delegate.Define): Correctly define the types in the
27726         presence of fixed and array parameters.
27727
27728         * class.cs (TypeContainers.FindMembers): Use NonPublic flag while
27729         doing FindMembers.
27730
27731         * ecore.cs (Expression.MemberLookup): Reset binding flags to not
27732         include NonPublic after the first iteration.
27733
27734         * class.cs (Indexer.CheckBase): Only check if both parents are
27735         non-null. 
27736
27737         * cs-parser.jay (accessor_body): If empty, set to null.
27738
27739         * ecore.cs (SimpleName.SimpleNameResolve): We did not have the
27740         same code path here to resolve constants names that we did have in
27741         MemberAccess.DoResolve.  There is too much code duplicated here.
27742
27743 2002-04-01  Miguel de Icaza  <miguel@ximian.com>
27744
27745         * statement.cs, makefile: Drop Statementcollection and just use ArrayLists
27746
27747         * ecore.cs: Optimize UserDefinedConversion by minimizing the calls
27748         to MakeUnionSet.
27749
27750         * cs-tokenizer.cs: Reuse a single StringBuilder for assembling
27751         tokens, numbers and strings.
27752
27753         * ecore.cs (MethodGroupExpr): Make Emit warn about missing
27754         parenthesis.
27755
27756         * delegate.cs: Use ComputeAndDefineParameterTypes for both the
27757         asyncronous parameters and the regular parameters.  
27758
27759         * codegen.cs (CodeGen.Init): Use the constructor that allows us to
27760         specify the target directory.
27761
27762         * expression.cs: (This.DoResolve): Simplify
27763         (As.Emit): Optimize, do not generate IsInst if the expression is
27764         always of the given type.
27765
27766         (Is.DoResolve): Bug fix, we were reporting both always/never for
27767         the is expression.
27768
27769         * (Invocation.MakeUnionSet): Simplify vastly and optimize, we were
27770         creating too many unnecessary arrays.
27771
27772 2002-03-31  Miguel de Icaza  <miguel@ximian.com>
27773
27774         * class.cs (EmitFieldInitializer): Use Assign expression to assign
27775         fields instead of rolling our own initializer.   Takes care of all
27776         implicit conversions, and drops unnecessary static checks/argument.
27777
27778 2002-03-31  Dick Porter  <dick@ximian.com>
27779
27780         * driver.cs: use the GetDirectories() return values properly, and
27781         use "/" as path separator.
27782
27783 2002-03-30  Miguel de Icaza  <miguel@ximian.com>
27784
27785         * expression.cs (Unary): Optimize - - expr into expr.
27786         (Binary): Optimize a + (-b) into a -b.
27787
27788         * codegen.cs (CodeGen): Made all methods static.
27789
27790 2002-03-29  Miguel de Icaza  <miguel@ximian.com>
27791
27792         * rootcontext.cs: 
27793
27794         * decl.cs: Rename `definition' into `TypeBuilder' and drop the
27795         TypeBuilder property.
27796
27797         * cs-parser.jay: Drop the use of RecordXXX and use RecordDecl
27798         instead. 
27799
27800         * tree.cs: Removed the various RecordXXXX, and replaced with a
27801         single RecordDecl.  Removed all the accessor methods, and just
27802         left a single access point Type 
27803
27804         * enum.cs: Rename DefineEnum to DefineType.
27805
27806         * decl.cs: New abstract method `DefineType' used to unify the
27807         Defines for Enumerations, Interfaces, TypeContainers and
27808         Delegates.
27809
27810         (FindType): Moved LookupInterfaceOrClass here.  Moved the
27811         LookupBaseClasses method that used to live in class.cs and
27812         interface.cs here, and renamed to FindType.
27813
27814         * delegate.cs: Implement DefineType.  Take advantage of the
27815         refactored pattern for locating the parent builder without taking
27816         the parent_builder argument (which we know does not work if we are
27817         nested, and triggering a toplevel definition).
27818
27819 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27820
27821         * decl.cs (MemberCore.CheckMethodAgainstBase): Test if the
27822         accessibility of a member has changed during override and report
27823         an error if so.
27824
27825         * class.cs (Method.Define, Property.Define): Only complain on
27826         overrides if the method is private, any other accessibility is
27827         fine (and since we just checked the permission is the same, we are
27828         good to go).
27829
27830         * cs-tokenizer.cs: only line, region, endregion, if, endif, else
27831         and elif are processed always.  The other pre-processing
27832         directives are only processed if we are "taking" the path
27833
27834 2002-03-29  Martin Baulig  <martin@gnome.org>
27835
27836         * class.cs (Method.Emit): Only emit symbolic debugging info if the
27837         current location is not Null.
27838
27839         * codegen.cs (CodeGen.SaveSymbols): Split out symbol writing code into
27840         a separate method so we can profile it.
27841
27842         * driver.cs (ShowTime): We need to use `(int) span.TotalSeconds' since
27843         `span.Seconds' are just seconds, but no minutes or hours.
27844         (MainDriver): Profile the CodeGen.SaveSymbols calls.
27845
27846 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27847
27848         * class.cs (Method.Define), (Property.Define), (Indexer.Define):
27849         Remove the gratuitous set of Final:
27850
27851                                 // If an interface implementation, then we can set Final.
27852                                 if (((flags & MethodAttributes.Abstract) == 0) &&
27853                                     implementing.DeclaringType.IsInterface)
27854                                         flags |= MethodAttributes.Final;
27855
27856         I do not know what I was smoking when I used that.
27857
27858
27859         * cs-parser.jay, delegate.cs: Make Delegate be a DeclSpace, first
27860         step into fixing the name resolution issues for delegates and
27861         unifying the toplevel name resolution.
27862
27863 2002-03-28  Martin Baulig  <martin@gnome.org>
27864
27865         * class.cs (Method.Emit): If we have a symbol writer, call its
27866         OpenMethod(), CloseMethod() and SetMethodSourceRange() methods to
27867         tell it about the current method.
27868
27869         * codegen.cs (EmitContext.Mark): New public method. Tell the symbol
27870         writer that we're going to emit the first byte of IL code for a new
27871         statement (a new source line).
27872         (EmitContext.EmitTopBlock): If we have a symbol writer, call
27873         EmitContext.Mark() before emitting any code.
27874
27875         * location.cs (SymbolDocument): Return null when we're Null.
27876
27877         * statement.cs (Statement): Moved the `Location loc' variable here.
27878         (Statement.EmitBoolExpression): If we have a symbol writer, call
27879         ec.Mark() before emitting any code to tell it that we're at the
27880         beginning of a new statement.
27881         (StatementExpression): Added `Location' argument to the constructor.
27882         (Block): Added public readonly variable `StartLocation' and public
27883         variable `EndLocation'.  The latter is to be set using SetEndLocation().
27884         (Block): Added constructor which takes a start and end location.
27885         (Block.SetEndLocation): New method. This sets the end location.
27886         (Block.EmitMeta): If we have a symbol writer, tell it the names of the
27887         local variables we create.
27888         (Block.Emit): If we have a symbol writer, call ec.Mark() before emitting
27889         each statement and do also mark the begin and end of the block.
27890
27891         * cs-parser.jay (block : OPEN_BRACE): Use the new `Block' constructor to
27892         tell it the current lexer.Location, use Location.Null for the end of the
27893         block.
27894         (block : OPEN_BRACE opt_statement_list CLOSE_BRACE): When closing the
27895         current block, set its end location using SetEndLocation().
27896         (statement_expression): StatementExpression constructor now takes the
27897         lexer.Location as additional argument.
27898         (for_statement, declare_local_variables): Likewise.
27899         (declare_local_variables): When creating a new implicit block, use the
27900         new Block constructor and pass it the lexer.Location.
27901
27902 2002-03-28  Miguel de Icaza  <miguel@ximian.com>
27903
27904         * ecore.cs (Expression.MemberLookup): On interfaces, lookup
27905         members also on the parent interfaces recursively.
27906
27907 2002-03-27  Miguel de Icaza  <miguel@ximian.com>
27908
27909         * report.cs: Use new formats, since Gonzalo finished the missing
27910         bits. 
27911
27912         * expression.cs (Binary.ResolveOperator): added missing operator|
27913         operator& and operator^ for bool/bool.
27914
27915         * cs-parser.jay: CheckDef now takes a Location argument that is
27916         used to report errors more precisly (instead of reporting the end
27917         of a definition, we try to track something which is a lot closer
27918         to the source of the problem).
27919
27920         * cs-tokenizer.cs: Track global token use, so we can properly flag
27921         the use of #define/#undef after the first token has been seen.
27922
27923         Also, rename the reportXXXX to Error_DescriptiveName
27924
27925         * decl.cs (DeclSpace.IsTopLevel): Move property here from
27926         TypeContainer, so that Enum and Interface can use this too.
27927
27928         * class.cs (TypeContainer.LookupInterfaceOrClass,
27929         GetInterfaceOrClass, GetClassBases, DefineType): Drop the
27930         `builder' argument.  Typically this was used to pass the parent
27931         builder (a ModuleBuilder or a TypeBuilder from whoever triggered
27932         the definition).  
27933
27934         The problem is that a nested class could trigger the definition of
27935         a toplevel class, and the builder would be obviously wrong in that
27936         case. 
27937
27938         So we drop this argument, and we compute dynamically the
27939         TypeBuilder/ModuleBuilder (the correct information was available
27940         to us anyways from DeclSpace.Parent)
27941
27942         * interface.cs (Interface.DefineInterface): Drop builder
27943         parameter cleanup like class.cs
27944
27945         * enum.cs (Enum.DefineEnum): Drop builder parameter.  Clean up
27946         like class.cs
27947
27948         * statement.cs (Switch.EmitObjectInteger): Emit short/ushort
27949         values. 
27950
27951         (Try.Emit): Propagate the returns value from the statement.
27952
27953         (Return.Emit): Even if we are leavning 
27954
27955         * driver.cs: Catch IOExpcetion for Directory.GetFiles as well.
27956
27957         * modifiers.cs: Fix the computation of MethodAttributes flags.
27958
27959 Tue Mar 26 21:14:36 CET 2002 Paolo Molaro <lupus@ximian.com>
27960
27961         * driver.cs: allow compilation of files that start with '/'.
27962         Add a default case when checking the argument of --target.
27963
27964 2002-03-25  Miguel de Icaza  <miguel@ximian.com>
27965
27966         * interface.cs: Implement the same search algorithm for types in
27967         the interface code.
27968
27969         * delegate.cs: Do not allow multiple definition.
27970
27971         * Recovered ChangeLog that got accidentally amputated
27972
27973         * interface.cs (Interface.DefineInterface): Prevent from double definitions.
27974
27975         * rootcontext.cs: Load manually enum to allow core classes to
27976         contain enumerations.
27977
27978         * enum.cs, ecore.cs, driver.cs, attribute.cs, class.cs, expression.cs:
27979         Update to new static methods in TypeManager.
27980
27981         * typemanager.cs (GetMethod, GetConstructor): Use our
27982         implementation of FindMembers to find the members, since during
27983         corlib compilation, the types are TypeBuilders and GetMethod and
27984         GetConstructor do not work.
27985
27986         Make all methods in TypeManager static.
27987
27988         (InitCodeHelpers): Split the functionality from
27989         the InitCodeTypes function.
27990
27991         * driver.cs: Call InitCodeHelpers after we have populated the
27992         types. 
27993
27994         * cs-parser.jay (delegate_declaration): we did not used to compute
27995         the delegate name correctly for void delegates.
27996
27997 2002-03-24  Miguel de Icaza  <miguel@ximian.com>
27998
27999         * rootcontext.cs (RootContext): Init the interface_resolve_order
28000         and type_container_resolve_order always.
28001
28002         (ResolveCore, BootstrapCorlib_ResolveClass,
28003         BootstrapCorlib_ResolveStruct): New functions to bootstrap the
28004         compiler when compiling with --nostdlib
28005
28006         * class.cs (TypeContainer.DefineType): Check that our parent is
28007         not null.  This test is most important when we are bootstraping
28008         the core types.
28009
28010         * codegen.cs: Split out the symbol writing code.
28011
28012 2002-03-25  Martin Baulig  <martin@gnome.org>
28013
28014         * driver.cs (-g): Made -g an alias for --debug.
28015
28016 2002-03-24  Martin Baulig  <martin@gnome.org>
28017
28018         * codegen.cs (SymbolWriter): New public variable. Returns the
28019         current symbol writer.
28020         (CodeGen): Added `bool want_debugging_support' argument to the
28021          constructor. If true, tell the ModuleBuild that we want debugging
28022         support and ask it for the ISymbolWriter.
28023         (Save): If we have a symbol writer, call it's Close() method after
28024         saving the assembly.
28025
28026         * driver.c (--debug): New command line argument to create a
28027         debugger information file.
28028
28029         * location.cs (SymbolDocument): New public property. Returns an
28030         ISymbolDocumentWriter object for the current source file or null
28031         if we don't have a symbol writer.
28032
28033 2002-03-21  Miguel de Icaza  <miguel@ximian.com>
28034
28035         * driver.cs (LoadAssembly): Correctly return when all the paths
28036         have been tried and not before.
28037
28038         * statement.cs (Switch.Emit): return the actual coverage for this
28039         statement (returns/not-returns)
28040
28041         (Switch.SimpleSwitchEmit): Do not generate jumps to the end of the
28042         switch of the statement if we are the last switch section.  That
28043         kills two problems: try/catch problems (we used to emit an empty
28044         nop at the end) and switch statements where all branches would
28045         return. 
28046
28047 2002-03-19  Miguel de Icaza  <miguel@ximian.com>
28048
28049         * driver.cs: Add default assemblies (the equivalent to the
28050         Microsoft CSC.RSP file)
28051
28052         * cs-tokenizer.cs: When updating `cols and setting it to zero,
28053         also update tokens_seen and set it to false.
28054
28055         * driver.cs: Implement --recurse for Mike.
28056
28057         * driver.cs (SplitPathAndPattern): Small bug fix, I was not
28058         correctly splitting out the paths.
28059
28060 2002-03-18  Miguel de Icaza  <miguel@ximian.com>
28061
28062         * interface.cs (Interface.PopulateProperty): Instead of using
28063         `parent' as the declaration space for the set parameters, use
28064         `this' 
28065
28066         * support.cs (InternalParameters): InternalParameters constructor
28067         takes a DeclSpace instead of a TypeContainer.
28068
28069         * expression.cs (ArrayCreation.EmitDynamicInitializers): If value
28070         types are being initialized, load the address of it before calling
28071         the function.  
28072
28073         (New): Provide a mechanism to disable the generation of local
28074         value type temporaries when the caller will be providing us with
28075         an address to store it.
28076
28077         (ArrayCreation.EmitDynamicInitializers): Use it.
28078
28079 2002-03-17  Miguel de Icaza  <miguel@ximian.com>
28080
28081         * expression.cs (Invocation.EmitArguments): Only probe for array
28082         property if there is more than one argument.  Sorry about that.
28083
28084         * class.cs (Invocation.EmitArguments): Fix to emit arguments for
28085         empty param arrays.
28086
28087         * class.cs (Method.LabelParameters): Fix incorrect code path that
28088         prevented the `ParamArrayAttribute' from being applied to the
28089         params attribute.
28090
28091 2002-03-16  Miguel de Icaza  <miguel@ximian.com>
28092
28093         * support.cs (ReflectionParameters): Correctly compute whether the
28094         last argument is a params array.  Fixes the problem with
28095         string.Split ('a')
28096
28097         * typemanager.cs: Make the assemblies array always be non-null
28098         (empty, but non-null)
28099
28100         * tree.cs (RecordDecl): New function that abstracts the recording
28101         of names.  This reports error 101, and provides a pointer to the
28102         previous declaration.  Fixes a crash in the compiler.
28103
28104         * cs-parser.jay (constructor_declaration): Update to new grammar,
28105         and provide a constructor_body that can be empty.
28106
28107 2002-03-15  Miguel de Icaza  <miguel@ximian.com>
28108
28109         * driver.cs: Add support for --resources.
28110
28111         * expression.cs: (FetchGetMethod, FetchAddressMethod, EmitAssign):
28112         Make all types for the various array helper methods be integer.
28113
28114         * ecore.cs (Expression.ConvertNumericExplicit): Pass the
28115         CheckState to ConvCast.
28116
28117         (ConvCast): Now it takes a `checked' state argument, to avoid
28118         depending on the emit context for the conversion, and just using
28119         the resolve time setting.
28120
28121         * expression.cs (ArrayCreation.EmitArrayArguments): New function,
28122         instead of Invocation.EmitArguments.  We do not emit the original
28123         arguments, instead we emit those which have been converted to
28124         unsigned int expressions.
28125
28126         * statement.cs (Block.EmitMeta): Drop tracking of indexes.
28127
28128         * codegen.cs: ditto.
28129
28130         * expression.cs (LocalVariableReference): Drop the use of the
28131         Store function that depended on the variable index.
28132
28133         * statement.cs (VariableInfo): Drop the `Idx' property from this
28134         class, as this is not taking into account the indexes for
28135         temporaries tat we generate during the execution, getting the
28136         indexes wrong.
28137
28138         * class.cs: First emit class initializers, then call the parent
28139         constructor. 
28140
28141         * expression.cs (Binary): Fix opcode emision.
28142         (UnaryMutator.EmitCode): Support checked code generation
28143
28144         * ecore.cs (MemberLookup): TypeManager.FindMembers will return
28145         matches for events for both the Static and Instance scans,
28146         pointing to the same element.   Fix that.
28147
28148 2002-03-14  Miguel de Icaza  <miguel@ximian.com>
28149
28150         * rootcontext.cs (ResolveTree): Always set the
28151         interface_resolve_order, because nested interfaces will be calling
28152         into us.
28153
28154         * class.cs (GetInterfaceOrClass): Track the same resolution
28155         process used by TypeManager.LookupType.  This fixes the nested
28156         type lookups in class declarations (separate path from
28157         LookupType). 
28158
28159         (TypeContainer.DefineType): Also define nested interfaces.
28160         (TypeContainer.RegisterOrder): New public function used to
28161         register the order in which child interfaces need to be closed.
28162
28163         Nested interfaces need to be closed after their parents have been
28164         created. 
28165
28166         * interface.cs (InterfaceAttr): Put all the logic for computing
28167         the interface attribute here. 
28168
28169         (DefineInterface): Register our interface order with the
28170         RootContext or with the TypeContainer depending on the case.
28171
28172 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28173
28174         * cs-parser.jay: rework foreach statement to work with the new
28175         changes to the policy on SimpleNames.
28176
28177         * report.cs: support Stacktrace on warnings as well.
28178
28179         * makefile: drop --unsafe and /unsafe from the compile.
28180
28181 2002-03-13  Ravi Pratap  <ravi@ximian.com>
28182
28183         * ecore.cs (StandardConversionExists): Modify to take an Expression
28184         as the first parameter. Ensure we do null -> reference type conversion
28185         checking.
28186
28187         * Everywhere : update calls accordingly, making use of MyEmptyExpr to store
28188         temporary Expression objects.
28189
28190 Wed Mar 13 12:32:40 CET 2002 Paolo Molaro <lupus@ximian.com>
28191
28192         * interface.cs: workaround bug in method overloading resolution
28193         (there is already a bugzilla bug for it).
28194
28195 2002-03-12  Miguel de Icaza  <miguel@ximian.com>
28196
28197         We could also solve this problem by having a separate path for
28198         performing type lookups, instead of DoResolve, we could have a
28199         ResolveType entry point, and only participating pieces of the
28200         production (simplename, deref, array) would implement this. 
28201
28202         * codegen.cs (EmitContext): New field OnlyLookupTypes used to
28203         signal SimpleName to only resolve type names and not attempt to
28204         resolve anything else.
28205
28206         * expression.cs (Cast): Set the flag.
28207
28208         * ecore.cs (SimpleName): Use the OnlyLookupTypes flag
28209
28210         * class.cs: Only report 108 if there is no `new' modifier.
28211
28212         * cs-parser.jay: rework foreach statement to work with the new
28213         changes to the policy on SimpleNames.
28214
28215         * report.cs: support Stacktrace on warnings as well.
28216
28217         * makefile: drop --unsafe and /unsafe from the compile.
28218
28219 2002-03-11  Miguel de Icaza  <miguel@ximian.com>
28220
28221         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28222         lookups here, instead of doing that at parse time.  This means
28223         that our grammar will not introduce `LocalVariableReferences' as
28224         expressions at this point.  That solves the problem of code like
28225         this:
28226
28227         class X {
28228            static void Main ()
28229            { int X = 1;
28230             { X x = null }}}
28231
28232         This is only half the fix.  The full fix requires parameters to
28233         also be handled in this way.
28234
28235         * Everywhere: Use ec.DeclSpace on calls to LookupType, as this
28236         makes the use more obvious of the DeclSpace.  The
28237         ec.TypeContainer.TypeBuilder is now only used to pull the
28238         TypeBuilder for it.
28239
28240         My theory is that I can get rid of the TypeBuilder completely from
28241         the EmitContext, and have typecasts where it is used (from
28242         DeclSpace to where it matters).  
28243
28244         The only pending problem is that the code that implements Aliases
28245         is on TypeContainer, and probably should go in DeclSpace.
28246
28247         * ecore.cs (SimpleName.SimpleNameResolve): Perform local variable
28248         lookups here, instead of doing that at parse time.  This means
28249         that our grammar will not introduce `LocalVariableReferences' as
28250         expressions at this point.  That solves the problem of code like
28251         this:
28252
28253         class X {
28254            static void Main ()
28255            { int X = 1;
28256             { X x = null }}}
28257
28258         This is only half the fix.  The full fix requires parameters to
28259         also be handled in this way.
28260
28261         * class.cs (Property.DefineMethod): When implementing an interface
28262         method, set newslot, when implementing an abstract method, do not
28263         set the flag (before we tried never setting it, or always setting
28264         it, which is the difference).
28265         (Indexer.DefineMethod): same.
28266         (Method.DefineMethod): same.
28267
28268         * ecore.cs: Only set the status used flag if we get back a Field.
28269
28270         * attribute.cs: Temporary hack, so Paolo can keep working.
28271
28272 2002-03-08  Ravi Pratap  <ravi@ximian.com>
28273
28274         * attribute.cs (Attribute.UnmanagedType): This is to keep track of
28275         the unmanaged type in the case we have a MarshalAs attribute.
28276
28277         (Resolve): Handle the case when we are parsing the special MarshalAs
28278         attribute [we need to store the unmanaged type to use later]
28279
28280         * typemanager.cs (marshal_as_attr_type): Built in type for the 
28281         MarshalAs Attribute.
28282
28283         * attribute.cs (ApplyAttributes): Recognize the MarshalAs attribute 
28284         on parameters and accordingly set the marshalling info.
28285
28286 2002-03-09  Miguel de Icaza  <miguel@ximian.com>
28287
28288         * class.cs: Optimizing slightly by removing redundant code after
28289         we switched to the `NoTypes' return value.
28290         (Property.DefineMethod): use NoTypes here too.
28291
28292         This fixes the bug I introduced in my last batch of changes.
28293
28294 2002-03-05  Ravi Pratap  <ravi@ximian.com>
28295
28296         * tree.cs (RecordEnum): Add. We now keep track of enums too.
28297
28298         * class.cs (LookupInterfaceOrClass): Check against the list of recorded
28299         Enums since those are types too. 
28300
28301         * cs-parser.jay (enum_declaration): Record enums as we parse them.
28302
28303         * enum.cs (DefineEnum): Return if the TypeBuilder has already been defined 
28304         thanks to a call during the lookup process.
28305
28306 2002-03-07  Miguel de Icaza  <miguel@ximian.com>
28307
28308         * statement.cs (Foreach): Lots of work to accomodate a particular
28309         kind of foreach statement that I had not kept in mind.  It is
28310         possible to have foreachs on classes that provide a GetEnumerator
28311         method that return objects that implement the "pattern" for using
28312         a foreach, there is no need to support GetEnumerator
28313         specifically. 
28314
28315         This is needed to compile nant.
28316
28317         * decl.cs: Only report 114 if the member is not `Finalize' and if
28318         the warning level is at least 2.
28319
28320         * class.cs: Moved the compare function from Method to
28321         MethodSignature. 
28322
28323         (MethodSignature.InheritableMemberSignatureCompare): Add new
28324         filter function that is used to extract inheritable methods from a
28325         class. 
28326
28327         (Method.Define): Use the new `inheritable_method_signature_filter'
28328         delegate
28329
28330         * cs-tokenizer.cs (get_cmd_arg): Do not add white space to the
28331         command. 
28332
28333 2002-03-06  Miguel de Icaza  <miguel@ximian.com>
28334
28335         * ecore.cs (Expression.ConvertReferenceExplicit): Removed dead code.
28336
28337         * cs-parser.jay: Add opt_semicolon to the interface declaration.
28338
28339         * expression.cs: Pass location information to
28340         ConvertImplicitStandard. 
28341
28342         * class.cs: Added debugging code to track return values from
28343         interfaces. 
28344
28345 2002-03-05  Miguel de Icaza  <miguel@ximian.com>
28346
28347         * expression.cs (Is.DoResolve): If either side of the `is' is an
28348         interface, do not flag the warning.
28349
28350         * ecore.cs (ImplicitReferenceConversion): We need a separate test
28351         for interfaces
28352
28353         * report.cs: Allow for --fatal to be used with --probe.
28354
28355         * typemanager.cs (NoTypes): Move the definition for the empty Type
28356         array here. 
28357
28358         * class.cs (TypeContainer.FindMembers): Also look for methods defined by
28359         properties. 
28360         (TypeContainer.DefineProxy): New function used to proxy to parent
28361         implementations when implementing interfaces.
28362         (TypeContainer.ParentImplements): used to lookup if our parent
28363         implements a public function that is required by an interface.
28364         (TypeContainer.VerifyPendingMethods): Hook this up.
28365
28366         * typemanager.cs (TypeManager, AddModule, AddAssembly): Make the
28367         `modules' and `assemblies' arraylists into arrays.  We only grow
28368         these are the very early start up of the program, so this improves
28369         the speedof LookupType (nicely measured).
28370
28371         * expression.cs (MakeByteBlob): Replaced unsafe code with
28372         BitConverter, as suggested by Paolo.
28373
28374         * cfold.cs (ConstantFold.Binary): Special case: perform constant
28375         folding of string concatenation, but if either side is a string,
28376         and the other is not, then return null, and let the runtime use
28377         the concatenation on the string plus the object (using
28378         `Object.ToString'). 
28379
28380 2002-03-04  Miguel de Icaza  <miguel@ximian.com>
28381
28382         Constant Folding has been implemented now.
28383
28384         * expression.cs (Unary.Reduce): Do not throw an exception, catch
28385         the error instead on types that are not supported in one's
28386         complement. 
28387
28388         * constant.cs (Constant and all children): New set of functions to
28389         perform implict and explicit conversions.
28390
28391         * ecore.cs (EnumConstant): Implement the new functions to perform
28392         conversion by proxying to the child expression.
28393
28394         * codegen.cs: (ConstantCheckState): Constant evaluation has its
28395         own separate setting that can not be turned off from the command
28396         line using --unchecked or --checked and is only controlled using
28397         the checked/unchecked statements and expressions.  This setting is
28398         used by the constant folder to flag errors.
28399
28400         * expression.cs (CheckedExpr, UncheckedExpr): Set the
28401         ConstantCheckState as well.   
28402
28403         During Resolve, they also have to flag the state, because the
28404         constant folder runs completely in the Resolve phase.
28405
28406         * statement.cs (Checked, Unchecked): Set the ConstantCheckState as
28407         well.
28408
28409 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28410
28411         * cfold.cs: New file, this file contains the constant folder.
28412
28413         * ecore.cs (IMemoryLocation.AddressOf): Now takes an extra
28414         argument to track whether we are using the resulting address to
28415         load or store a value and provide better error messages. 
28416
28417         (FieldExpr.Emit, FieldExpr.EmitAssign, FieldExpr.AddressOf): Use
28418         new AddressOf arguments.
28419
28420         * statement.cs (Foreach.EmitCollectionForeach): Update
28421
28422         * expression.cs (Argument.Emit): Call AddressOf with proper
28423         arguments to track usage.
28424
28425         (New.DoEmit): Call AddressOf with new arguments.
28426
28427         (Unary.Emit): Adjust AddressOf call.
28428
28429 2002-03-01  Ravi Pratap  <ravi@ximian.com>
28430
28431         * cs-parser.jay (member_access): Change the case for pre-defined types
28432         to use a MemberAccess instead of a SimpleName. Thanks to Felix again for 
28433         this suggestion.
28434
28435         * class.cs (Operator::Emit): If we are abstract or extern, we don't have
28436         a method body.
28437
28438         * attribute.cs (CheckAttribute, ApplyAttribute): Ensure that we treat operators
28439         essentially like methods and apply attributes like MethodImplOptions to them too.
28440
28441         * ecore.cs (SimpleName.SimpleNameResolve): Perform a check on ec.TypeContainer.TypeBuilder
28442         not being null.
28443
28444         * codegen.cs (EmitContext): The constructor now takes in an extra argument specifying the
28445         DeclSpace as the distinction is important. We provide sane defaults as usually the TypeContainer
28446         is the DeclSpace.
28447
28448         * Update code everywhere accordingly.
28449
28450         * ecore.cs : Change references to ec.TypeContainer to ec.DeclSpace where appropriate.
28451
28452         * cs-parser.jay (enum_declaration): Set the current namespace of the enum.
28453
28454 2002-02-28  Ravi Pratap  <ravi@ximian.com>
28455
28456         * rootcontext.cs (LookupType): As we cycle through the chain of namespaces
28457         try performing lookups against those instead of jumping straight into using
28458         the 'using' clauses.
28459
28460         (ImplicitParent): Add. Thanks to Felix Arrese-Igor for this idea.
28461
28462         (LookupType): Perform lookups in implicit parents too.
28463
28464         * class.cs (GetInterfaceOrClass): Modify to perform the exact same lookup
28465         sequence as RootContext.LookupType. 
28466
28467         * rootcontext.cs (NamespaceLookup): Split out code from LookupType which tries 
28468         the various cases of namespace lookups into this method.
28469
28470 2002-03-01  Miguel de Icaza  <miguel@ximian.com>
28471
28472         * cs-parser.jay: Add support for [Attribute ()] (empty arguments
28473         in positional arguments)
28474
28475         * class.cs (Operator): Update the AllowedModifiers to contain
28476         extern. 
28477
28478         * cs-parser.jay: Update operator declaration to allow for the
28479         operator body to be empty.
28480
28481         * cs-tokenizer.cs: Added '\u' unicode support in strings and hex
28482         values. 
28483
28484 2002-02-27  Miguel de Icaza  <miguel@ximian.com>
28485
28486         * class.cs (Method.Emit): Label parameters.
28487
28488         * driver.cs: Return 1 or 0 as the program exit code.
28489
28490 2002-02-26  Miguel de Icaza  <miguel@ximian.com>
28491
28492         * expression.cs: Special case the `null' object when trying to
28493         auto-compute the type, as anything can be explicitly converted to
28494         that. 
28495
28496         * ecore.cs (Expression.ConvertExplicit): Bug fix, thanks for
28497         spotting this Paolo.
28498
28499         (Expression.ImplicitNumericConversion): Perform comparissions of
28500         the type using the underlying type in the case of an enumeration
28501         rather than using the enumeration type for the compare.
28502
28503         Cope with the underlying == type case, which is not possible to
28504         catch before. 
28505
28506         (Expression.ConvertNumericExplicit): Perform comparissions of
28507         the type using the underlying type in the case of an enumeration
28508         rather than using the enumeration type for the compare.
28509
28510         * driver.cs: If the user does not supply an extension, assume .exe
28511
28512         * cs-parser.jay (if_statement): Rewrote so that we can track the
28513         location for the if statement.
28514
28515         * expression.cs (Binary.ConstantFold): Only concat strings when
28516         the operation is "+", not everything ;-)
28517
28518         * statement.cs (Statement.EmitBoolExpression): Take a location
28519         argument. 
28520         (If, While, Do): Track location.
28521
28522         * expression.cs (Binary.ResolveOperator): In the object + string
28523         case, I was missing a call to ConvertImplicit
28524
28525 2002-02-25  Ravi Pratap  <ravi@ximian.com>
28526
28527         * parameter.cs (Parameter.ExternalType): Take in extra DeclSpace and
28528         Location arguments. Ensure we use RootContext.LookupType to do our work
28529         and not try to do a direct Type.GetType and ModuleBuilder.GetType
28530
28531         * interface.cs (PopulateMethod): Handle the type of the parameter being
28532         null gracefully.
28533
28534         * expression.cs (Invocation.BetterFunction): Handle the case when we 
28535         have a params method with no fixed arguments and a call is made with no
28536         arguments.
28537
28538 2002-02-25  Miguel de Icaza  <miguel@ximian.com>
28539
28540         * cs-tokenizer.cs: Add support for the quote-escape-sequence in
28541         the verbatim-string-literal
28542
28543         * support.cs (InternalParameters.ParameterModifier): handle null
28544         fixed parameters.
28545         (InternalParameters.ParameterType): ditto.
28546
28547         * parameter.cs (VerifyArgs): Also check if the fixed parameter is
28548         duplicating the name of the variable parameter.
28549         (GetParameterByName): Fix bug where we were not looking up array
28550         paramters if they were the only present (thanks Paolo!).
28551         (GetParameterInfo): We only have an empty set of types if both
28552         fixed and array are set to null.
28553         (GetParameterInfo-idx): Handle FixedParameter == null
28554
28555         * cs-parser.jay: Handle the case where there is no catch
28556         statements (missing null test).
28557
28558 2002-02-22  Miguel de Icaza  <miguel@ximian.com>
28559
28560         * driver.cs (MainDriver): Be conservative on our command line
28561         handling.
28562
28563         Catch DirectoryNotFoundException when calling GetFiles.
28564
28565         (SplitPathAndPattern): Used to split the input specification into
28566         a path and a pattern that we can feed to Directory.GetFiles.
28567
28568 2002-02-21  Miguel de Icaza  <miguel@ximian.com>
28569
28570         * statement.cs (Fixed): Implement the last case of the Fixed
28571         statement (string handling).
28572
28573         * expression.cs (StringPtr): New class used to return a char * to
28574         a string;  Used by the Fixed statement.
28575
28576         * typemanager.cs: Add char_ptr_type.  Add get_OffsetToStringData method.
28577
28578         * expression.cs (Binary.ResolveOperator): Remove redundant
28579         MemberLookup pn parent type.
28580         Optimize union call, we do not need a union if the types are the same.
28581         (Unary.ResolveOperator): REmove redundant MemberLookup on parent
28582         type.
28583
28584         Specialize the use of MemberLookup everywhere, instead of using
28585         the default settings. 
28586
28587         (StackAlloc): Implement stackalloc keyword.
28588
28589         * cs-parser.jay: Add rule to parse stackalloc.
28590
28591         * driver.cs: Handle /h, /help, /?
28592
28593         * expression.cs (MakeByteBlob): Removed the hacks we had in place
28594         before we supported unsafe code.
28595
28596         * makefile: add --unsafe to the self compilation of mcs.
28597
28598 2002-02-20  Miguel de Icaza  <miguel@ximian.com>
28599
28600         * expression.cs (PointerArithmetic): New class that is used to
28601         perform pointer arithmetic.
28602         (Binary.Resolve): Handle pointer arithmetic
28603         Handle pointer comparission.
28604         (ArrayPtr): Utility expression class that is used to take the
28605         address of an array.
28606
28607         (ElementAccess): Implement array access for pointers
28608
28609         * statement.cs (Fixed): Implement fixed statement for arrays, we
28610         are missing one more case before we are done.
28611
28612         * expression.cs (Indirection): Implement EmitAssign and set the
28613         ExprClass to Variable.  This allows pointer dereferences to be
28614         treated as variables, and to have values assigned to them.
28615
28616         * ecore.cs (Expression.StoreFromPtr): New utility function to
28617         store values dereferencing.
28618
28619 2002-02-20  Ravi Pratap  <ravi@ximian.com>
28620
28621         * expression.cs (Binary.ResolveOperator): Ensure that we are
28622         not trying to operate on a void type - this fixes the reported
28623         bug.
28624
28625         * decl.cs (CheckMethodAgainstBase): Do not allow overriding if
28626         the parent implementation is sealed.
28627
28628         * ../errors/cs0239.cs : Add.
28629
28630         * attribute.cs (ApplyAttributes): Handle Modulebuilders too.
28631
28632         * typemanager.cs (unverifiable_code_type): Corresponds to 
28633         System.Security.UnverifiableCodeAttribute. We need to emit this for modules
28634         which have unsafe code in them.
28635
28636         * rootcontext.cs (EmitCode): Emit the above attribute when we are in an 
28637         unsafe context.
28638
28639 2002-02-19  Miguel de Icaza  <miguel@ximian.com>
28640
28641         * cs-tokenizer.cs: Add support for @"litreal strings"
28642
28643         Make tokenizer accept pre-processor directives
28644         on any column (remove the old C-like limitation). 
28645
28646         * rootcontext.cs (EmitCode): Emit any global attributes.
28647         (AddGlobalAttributes): Used to keep track of assembly attributes. 
28648
28649         * attribute.cs (ApplyAttributes): Support AssemblyAttributes.
28650
28651         * cs-parser.jay: Add support for global attributes.  
28652
28653 2002-02-17  Miguel de Icaza  <miguel@ximian.com>
28654
28655         * expression.cs (Indirection): New helper class.  Unary will
28656         create Indirection classes to be able to implement the
28657         IMemoryLocation interface on it.
28658
28659 2002-02-16  Miguel de Icaza  <miguel@ximian.com>
28660
28661         * cs-parser.jay (fixed_statement): reference the right statement.
28662
28663         * statement.cs (Fixed.Emit): Finish implementing the fixed
28664         statement for the &x case.
28665
28666 2002-02-14  Miguel de Icaza  <miguel@ximian.com>
28667
28668         * class.cs (Property.Define, Method.Define): Remove newslot when
28669         `implementing'.  
28670
28671         * modifiers.cs: My use of NewSlot when `Abstract' was set was
28672         wrong.  NewSlot should only be used if the `new' keyword is present.
28673
28674         * driver.cs (GetSystemDir): Use CodeBase instead of FullName for
28675         locating our system dir.  Sorry about this.
28676
28677 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28678
28679         * driver.cs (GetSystemDir): Compute correctly the location of our
28680         system assemblies.  I was using the compiler directory instead of
28681         the library directory.
28682
28683 2002-02-13  Ravi Pratap  <ravi@ximian.com>
28684
28685         * expression.cs (BetterFunction): Put back in what Miguel commented out
28686         since it is the correct fix. The problem is elsewhere ;-)
28687
28688         (IsParamsMethodApplicable): Fix bug where we were not checking that the fixed
28689         parameters of the parms method are themselves compatible or not !
28690
28691         (StandardConversionExists): Fix very dangerous bug where we were forgetting
28692         to check that a class implements an interface before saying that an implicit
28693         conversion was allowed. Use ImplementsInterface to do the checking.
28694
28695 2002-02-13  Miguel de Icaza  <miguel@ximian.com>
28696
28697         * class.cs (Method.Define): Track whether we are an explicit
28698         implementation or not.  And only call DefineMethodOverride if we
28699         are an explicit implementation.
28700
28701         (Property.DefineMethod): Ditto.
28702
28703 2002-02-11  Ravi Pratap  <ravi@ximian.com>
28704
28705         * expression.cs (BetterFunction): Catch hideous bug which was
28706          preventing us from detecting ambiguous calls due to implicit casts i.e
28707         cs0121.
28708
28709 2002-01-29  Miguel de Icaza  <miguel@ximian.com>
28710
28711         * support.cs (Pair): Remove un-needed method.  I figured why I was
28712         getting the error in cs-parser.jay, the variable in a foreach loop
28713         is readonly, and the compiler does not really treat this as a variable.
28714
28715         * cs-parser.jay (fixed_statement): Fix grammar.  Use ASSIGN
28716         instead of EQUALS in grammar.  
28717
28718         * typemanager.cs (VerifyUnmanaged): Report correct error (208)
28719
28720         * expression.cs (Unary.DoResolve): Check whether the argument is
28721         managed or not.
28722
28723 2002-01-28  Miguel de Icaza  <miguel@ximian.com>
28724
28725         * support.cs: Api for Pair to set a value.  Despite the fact that
28726         the variables are public the MS C# compiler refuses to compile
28727         code that accesses the field if the variable is part of a foreach
28728         statement. 
28729
28730         * statement.cs (Fixed): Begin implementation of the fixed
28731         statement.
28732
28733         (Block.AddVariable): Return the VariableInfo on success and null
28734         on failure instead of true/false. 
28735
28736         * cs-parser.jay (foreach): Catch errors on variables already
28737         defined (we were ignoring this value before) and properly unwind
28738         the block hierarchy
28739
28740         (fixed_statement): grammar for the fixed statement.
28741
28742 2002-01-25  Miguel de Icaza  <miguel@ximian.com>
28743
28744         * expression.cs (UnaryMutator.IsIncrementableNumber): Allow also
28745         pointer types to be incretemented.
28746
28747         (SizeOf): Implement.
28748
28749         * cs-parser.jay (pointer_member_access): Implement
28750         expr->IDENTIFIER production.
28751
28752         * expression.cs (IndexerAccess.DoResolve, ArrayAccess.DoResolve,
28753         MemberAccess.DoResolve, Invocation.DoResolve): Check for pointers
28754         on safe contexts.
28755
28756         (Unary): Implement indirection.
28757
28758         * ecore.cs (Expression.UnsafeError): Reports error 214 (pointer
28759         use in non-unsafe context).
28760
28761         (SimpleName.DoResolve): Check for pointers in field access on safe
28762         contexts. 
28763
28764         (Expression.LoadFromPtr): Factor the load-indirect code in this
28765         function.  This was duplicated in UnboxCast and ParameterReference
28766
28767 2002-01-24  Miguel de Icaza  <miguel@ximian.com>
28768
28769         * expression.cs (ComposedCast): report an error if a pointer cast
28770         is used in a safe region.
28771
28772         * ecore.cs (Expression.ConvertExplicit): Add rules for implicit
28773         pointer type casts in unsafe context.
28774
28775         * codegen.cs (EmitContext): Set up IsUnsafe.
28776
28777         * cs-parser.jay (non_expression_type): Add productions for pointer
28778         casts. 
28779
28780         * expression.cs (Invocation.EmitCall): Remove chunk of buggy
28781         code.  We should not use force into static mode if the method is
28782         not virtual.  Fixes bug in MIS
28783
28784         * statement.cs (Do.Emit, While.Emit, For.Emit,
28785         Statement.EmitBoolExpression): Add support to Do and While to
28786         propagate infinite loop as `I do return' semantics.
28787
28788         Improve the For case to also test for boolean constants.
28789
28790         * attribute.cs (Attribute.ApplyAttributes): Add ParameterBuilder
28791         to the list of attributes we can add.
28792
28793         Remove `EmitContext' argument.
28794
28795         * class.cs (Method.Define): Apply parameter attributes.
28796         (Constructor.Define): Apply parameter attributes.
28797         (MethodCore.LabelParameters): Move here the core of labeling
28798         parameters. 
28799
28800         * support.cs (ReflectionParameters.ParameterModifier,
28801         InternalParameters.ParameterModifier): Use IsByRef on the type and
28802         only return the OUT bit for these parameters instead of in/out/ref
28803         flags.
28804
28805         This is because I miss-understood things.  The ParameterInfo.IsIn
28806         and IsOut represent whether the parameter has the [In] and [Out]
28807         attributes set.  
28808
28809 2002-01-22  Miguel de Icaza  <miguel@ximian.com>
28810
28811         * ecore.cs (FieldExpr.Emit): Release temporaries.
28812
28813         * assign.cs (LocalTemporary.Release): new function.
28814
28815         * codegen.cs (EmitContext.GetTemporaryStorage,
28816         EmitContext.FreeTemporaryStorage): Rework the way we deal with
28817         temporary storage.  Now we can "put back" localbuilders when we
28818         are done with them
28819
28820 2002-01-21  Miguel de Icaza  <miguel@ximian.com>
28821
28822         * ecore.cs (FieldExpr.Emit): Handle initonly fields specially: we
28823         need to make a copy of the variable to generate verifiable code.
28824
28825 2002-01-19  Miguel de Icaza  <miguel@ximian.com>
28826
28827         * driver.cs: Compute dynamically the system directory.
28828
28829         * ecore.cs (CopyNewMethods): reworked, exposed, made public.
28830         Slower, but more generally useful.  Used by the abstract
28831         registering implementation. 
28832
28833         * expression.cs (ResolveMemberAccess): Reorder the way we evaluate
28834         the rules for the special rule on Type/instances.  First check if
28835         we have the same name, and if so, try that special static path
28836         rather than the instance path.
28837
28838 2002-01-18  Miguel de Icaza  <miguel@ximian.com>
28839
28840         * cs-parser.jay: Emit 642 (warning: possible empty statement) for
28841         for, while and if.
28842
28843         * class.cs (TypeBuilder.DefineType): Do not allow inheritance from
28844         Enum, ValueType, Delegate or Array for non-corlib compiles.
28845
28846         * cs-tokenizer.cs: Catch long identifiers (645)
28847
28848         * typemanager.cs (IndexerPropetyName): Ravi never tested this
28849         piece of code.
28850
28851         * class.cs (TypeContainer.RegisterRequiredImplementations): Bug
28852         fix, we were returning too early, so we were not registering
28853         pending methods from abstract classes.
28854
28855         Do not register pending methods if the class is abstract.
28856
28857         * expression.cs (Conditional.DoResolve): Report circular implicit
28858         conversions when we neecd to compute it for conditional
28859         expressions. 
28860
28861         (Is.DoResolve): If the expression is always of the provided type,
28862         flag warning 183.  If the expression can not ever be of the
28863         provided type flag warning 184.
28864
28865         * class.cs: Catch 169 as well.
28866
28867         * ecore.cs (FieldExpr): For now in AddressOf mark as assigned and
28868         read. 
28869
28870 2002-01-18  Nick Drochak  <ndrochak@gol.com>
28871
28872         * makefile: remove path to beta2 csc.exe.  path to csc.exe must be in PATH instead.
28873
28874 2002-01-17  Miguel de Icaza  <miguel@ximian.com>
28875
28876         * interface.cs: (PopulateMethod): Check for pointers being defined
28877         only if the unsafe context is active.
28878         (PopulateProperty): ditto.
28879         (PopulateIndexer): ditto.
28880
28881         * class.cs (Method, Method.Define): Allow `unsafe' modifier to be
28882         specified.  If pointers are present, make sure that they are
28883         present in an unsafe context.
28884         (Constructor, Constructor.Define): ditto.
28885         (Field, Field.Define): ditto.
28886         (Property, Property.Define): ditto.
28887         (Event, Event.Define): ditto.
28888
28889         * interface.cs (Interface.GetInterfaceTypeByName): Only lookup the
28890         hashtable if there are classes or structs defined.
28891
28892         * expression.cs (LocalVariableReference.DoResolve): Simplify this
28893         code, as the constant resolution moved.
28894
28895         * statement.cs (Block.EmitMeta): Resolve all constants as we emit
28896         the metadata, so we can flag error 133. 
28897
28898         * decl.cs (MemberCore.UnsafeOK): New function to test that a
28899         pointer is being declared in an unsafe context.
28900
28901 2002-01-16  Miguel de Icaza  <miguel@ximian.com>
28902
28903         * modifiers.cs (Modifiers.Check): Require a Location argument.
28904         Report error 227 for Unsafe use.
28905
28906         * typemanager.cs: Remove IsPointerType, we should be using Type.IsPointer
28907
28908         * statement.cs (For.Emit): If the test is null, then report that
28909         we do `return', as we wont reach anything afterwards.
28910
28911         (Switch.SwitchGoverningType): Track the expression that matched
28912         the conversion.
28913
28914         * driver.cs: Allow negative numbers as an error code to flag.
28915
28916         * cs-parser.jay: Handle 1551.
28917
28918         * namespace.cs: Add 1537 checking (repeated using alias namespaces).
28919
28920 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28921
28922         * cs-parser.jay: Report 1518 (type declaration can only contain
28923         class, struct, interface, enum or delegate)
28924
28925         (switch_label): Report 1523 (keywords `case' or `default' must
28926         preced code)
28927
28928         (opt_switch_sections): Report 1522 (empty switch)
28929
28930         * driver.cs: Report 1515 (response file specified multiple times)
28931         Report 1516 (Source file specified multiple times).
28932
28933         * expression.cs (Argument.Resolve): Signal 1510
28934
28935         (BaseAccess.Resolve, BaseIndexer.Resolve): Signal 1511 (base
28936         access not allowed in static code)
28937
28938 2002-01-11  Ravi Pratap  <ravi@ximian.com>
28939
28940         * typemanager.cs (IsPointerType): Utility method which we are going
28941         to need a lot.
28942
28943         * ecore.cs (ImplicitReferenceConversion): A pointer type cannot be cast to
28944         the object type, so we take care of that.
28945
28946         * expression.cs (FullMethodDesc): Also include the return type in descriptions.
28947
28948         * support.cs (ParameterDesc): Fix minor bug which was causing params tags to be
28949         added to non-params parameters :-)
28950
28951         * typemanager.cs (CSharpName): Include 'void' type too. 
28952
28953         (void_ptr_type): Include in the set of core types.
28954
28955         * ecore.cs (ConvertImplicit): Make use of ConvertImplicitStandard instead of 
28956         duplicating code.
28957
28958         (ConvertImplicitStandard): Handle standard implicit pointer conversions when we have 
28959         an unsafe context.
28960
28961         * cs-parser.jay (local_variable_pointer_type): Add support for 'void *' as I had 
28962         completely forgotten about it.
28963
28964 2002-01-10  Ravi Pratap  <ravi@ximian.com>
28965
28966         * cs-parser.jay (pointer_type): Add. This begins our implementation
28967         of parsing rules for unsafe code.
28968
28969         (unsafe_statement): Implement.
28970
28971         (embedded_statement): Modify to include the above.
28972
28973         * statement.cs (Unsafe): Implement new class for unsafe blocks.
28974
28975         * codegen.cs (EmitContext.InUnsafe): Add. This determines
28976         if the current context is an unsafe one.
28977
28978         * cs-parser.jay (local_variable_pointer_type): Since local variable types
28979         are handled differently, we need separate rules for them.
28980
28981         (local_variable_declaration): Update to use local_variable_pointer_type
28982         to allow variable declarations of unmanaged pointer types.
28983
28984         * expression.cs (Unary.ResolveOperator): Ensure that the '&' operator is used only
28985         in unsafe contexts.
28986
28987         * ../errors/cs0214.cs : Add.
28988
28989 2002-01-16  Nick Drochak  <ndrochak@gol.com>
28990
28991         * makefile: remove 'response' file when cleaning.
28992
28993 2002-01-15  Miguel de Icaza  <miguel@ximian.com>
28994
28995         * cs-parser.jay: Report 1524.
28996
28997 2002-01-14  Miguel de Icaza  <miguel@ximian.com>
28998
28999         * typemanager.cs (RegisterMethod): drop checking if we have
29000         registered this from here
29001
29002 2002-01-12  Miguel de Icaza  <miguel@ximian.com>
29003
29004         * class.cs (Method.EmitDestructor): Implement calling our base
29005         destructor. 
29006
29007         * statement.cs (Try.Emit): Fix to reset the InFinally to the old
29008         value of InFinally.
29009
29010         * codegen.cs (EmitContext.EmitTopBlock): Destructors will call
29011         this routine and will wrap the call in a try/catch block.  Deal
29012         with the case.
29013
29014 2002-01-11  Miguel de Icaza  <miguel@ximian.com>
29015
29016         * ecore.cs (Expression.MemberLookup): instead of taking a
29017         parameter `same_type' that was used to tell whether we could
29018         access private members we compute our containing type from the
29019         EmitContext.
29020
29021         (FieldExpr): Added partial support for volatile fields.  This does
29022         not work for volatile fields exposed from assemblies, as I can not
29023         figure out how to extract the modreq from it.
29024
29025         Updated all the source files to use this.
29026
29027         * codegen.cs (EmitContext): Compute ContainerType ahead of time,
29028         because it is referenced by MemberLookup very often. 
29029
29030 2002-01-09  Ravi Pratap  <ravi@ximian.com>
29031
29032         * typemanager.cs (IndexerPropertyName): If we have a TypeBuilder, use
29033         TypeBuilder.GetCustomAttributes to retrieve what we need.
29034
29035         Get rid of redundant default_member_attr_type as this is the same as
29036         default_member_type which already exists.
29037
29038         * interface.cs, attribute.cs : Update accordingly.
29039
29040 2002-01-08  Miguel de Icaza  <miguel@ximian.com>
29041
29042         * typemanager.cs: Enable IndexerPropertyName again.  It does not
29043         work for TYpeBuilders though.  Ravi, can you please fix this?
29044
29045         * cs-tokenizer.cs: Accept _ as a name in pp-expressions.
29046
29047         * expression.cs (Argument.Emit): Handle the case of ref objects
29048         being passed to ref functions;  
29049
29050         (ParameterReference.EmitLoad): Loads the content of the pointer
29051         without dereferencing.
29052
29053 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
29054
29055         * cs-tokenizer.cs: Implemented the pre-processing expressions.
29056
29057 2002-01-08  Ravi Pratap  <ravi@ximian.com>
29058
29059         * class.cs (Indexer.DefineMethod): Incorporate the interface
29060         type in the name of the method if we are doing explicit interface
29061         implementation.
29062
29063         * expression.cs (ConversionExists): Remove as it is completely obsolete.
29064
29065         (BetterConversion): Fix extremely trivial bug where we were referring to
29066         ConversionExists instead of StandardConversionExists ! Hooray, things are fine
29067         again !
29068
29069         * ../errors/bug16.cs : Add although we have fixed it.
29070
29071 2002-01-07  Miguel de Icaza  <miguel@ximian.com>
29072
29073         * expression.cs (BaseIndexer): Begin implementation.
29074
29075         * class.cs (TypeContainer.IsInterfaceMethod): Bug fix.
29076
29077         * cs-parser.jay (indexer_declarator): Use qualified_identifier
29078         production directly to remove a shift/reduce, and implement
29079         explicit interface implementation.
29080
29081         * cs-tokenizer.cs: Fix tokenizer, it was consuming one extra char
29082         after a floating point suffix.
29083
29084         * expression.cs (DoNumericPromotions): Improved the conversion for
29085         uint/uint.  If we have a constant, we avoid doing a typecast to a
29086         larger type.
29087
29088         * class.cs (Indexer): Implement explicit interface implementation
29089         for indexers.
29090
29091 Sat Jan 5 16:08:23 CET 2002 Paolo Molaro <lupus@ximian.com>
29092
29093         * class.cs: make the default instance constructor public and hidebysig.
29094
29095 2001-01-03  Ravi Pratap  <ravi@ximian.com>
29096
29097         * interface.cs (EmitDefaultMemberAttr): Make this helper method static
29098         so we can call it from elsewhere.
29099
29100         * class.cs (TypeContainer.Emit): Emit the attribute here too. The rule is that
29101         we emit it internally if the class has a defined indexer; otherwise the user
29102         emits it by decorating the class definition with the DefaultMemberAttribute.
29103
29104         * attribute.cs (ApplyAttributes): Perform checks to see that the DefaultMember
29105         attribute is not used on a type which defines an indexer.
29106
29107         * cs-tokenizer.cs (get_cmd_arg): Ensure we trim whitespace and also include the tab
29108         character when we skip whitespace.
29109
29110         * ../errors/cs0646.cs : Add.
29111
29112 2002-01-03  Miguel de Icaza  <miguel@ximian.com>
29113
29114         * ecore.cs (SimpleName.ResolveSimpleName): Report error 120
29115         again. 
29116
29117         * makefile: Add practical target `mcs3.exe' which builds the third
29118         generation compiler. 
29119
29120         * expression.cs (New): Fix structures constructor calling.
29121
29122         * class.cs (Property, Method, Indexer): Emit Final flag on the
29123         method if we are an interface implementation and we are not
29124         abstract. 
29125
29126         * ecore.cs (PropertyExpr): New public field `IsBase', tells
29127         whether this property is referencing a `base' method.
29128
29129         * expression.cs (Invocation.EmitCall): take an extra argument:
29130         is_base, this is used to determine whether the `call' or
29131         `callvirt' opcode should be used.
29132
29133
29134         * delegate.cs: update EmitCall.
29135
29136         * class.cs (Method.Define): Set NewSlot for the cases where we are
29137         not implementing an interface method.
29138
29139         (Property.Define): ditto.
29140
29141 2002-01-02  Miguel de Icaza  <miguel@ximian.com>
29142
29143         * cs-tokenizer.cs: (Tokenizer.escape): Escape '\r' as '\r' not as
29144         'r'.  Allows mcs to parse itself fully.
29145
29146 2002-01-02  Ravi Pratap  <ravi@ximian.com>
29147
29148         * expression.cs (ArrayCreation.num_automatic_initializers): Keep track
29149         of the number of initializers that require the InitializeArray method.
29150
29151         (CheckIndices): Store the Expression in all cases - not the plain value. Also
29152         update the above field where necessary.
29153
29154         (MakeByteBlob): Update accordingly.
29155
29156         (DoEmit): Call EmitStaticInitializers only if the number of initializers is 
29157         greater than 2.
29158
29159         (EmitDynamicInitializers): Update in accordance with the new optimization.
29160
29161         (ArrayAccess.EmitStoreOpcode): Include char type along with short and ushort - the
29162         same OpCode applies.
29163
29164         * cs-parser.jay : Fix some glaring errors I introduced.
29165
29166 2002-01-01  Ravi Pratap  <ravi@ximian.com> 
29167
29168         * parameters.cs (AddVariable, AddConstant): Pass in current_local_parameters
29169         so that we can check for name clashes there too.
29170
29171         * typemanager.cs (default_member_attr_type): The attribute that we need to emit
29172         for interface indexers.
29173
29174         * interfaces.cs (Define): Emit the default member attribute.
29175
29176         * expression.cs (MakeByteBlob): Fix extremely trivial bug where the wrong
29177         variable was being referred to while setting the value ;-)
29178
29179 2002-01-01  Miguel de Icaza  <miguel@ximian.com>
29180
29181         * expression.cs (MakeByteBlob): Optimize: we do not need to fill
29182         byte-by-byte information when we know the data is zero.
29183
29184         Make the block always a multiple of 4, because
29185         DefineInitializedData has a bug.
29186
29187         * assign.cs: Fix, we should assign from the temporary, not from
29188         the source. 
29189
29190         * expression.cs (MakeByteBlob): Fix my incorrect code.
29191
29192 2001-12-31  Miguel de Icaza  <miguel@ximian.com>
29193
29194         * typemanager.cs (EnumToUnderlying): This function is used to get
29195         the underlying type from an enumeration, because it does not
29196         always work. 
29197
29198         * constant.cs: Use the I4_S form for values between -128 and 127.
29199
29200         * statement.cs (Block.LookupLabel): Looks up a label.
29201         (Block): Drop support for labeled blocks.
29202
29203         (LabeledStatement): New kind of statement that represents a label
29204         only.
29205
29206         (Goto): Finally implement this bad boy.
29207
29208         * cs-parser.jay: Update to reflect new mechanism to implement
29209         labels.
29210
29211 2001-12-30  Miguel de Icaza  <miguel@ximian.com>
29212
29213         * codegen.cs (EmitContext.This): a codegen property that keeps the
29214         a single instance of this instead of creating many different this
29215         instances. 
29216
29217         * delegate.cs (Delegate.DoResolve): Update to use the property;
29218
29219         * ecore.cs (SimpleName.SimpleNameResolve): Ditto
29220
29221         * expression.cs (BaseAccess.DoResolve): Ditto.
29222
29223 2001-12-29  Ravi Pratap  <ravi@ximian.com>
29224
29225         * typemanager.cs (methodimpl_attr_type): Add to hold the type
29226         corresponding to System.Runtime.CompilerServices.MethodImplAttribute.
29227
29228         (InitCoreTypes): Update accordingly.
29229
29230         * attribute.cs (Resolve): Remember if the attribute is a MethodImplAttribute
29231         so we can quickly store the state.
29232
29233         (ApplyAttributes): Set the correct implementation flags
29234         for InternalCall methods.
29235
29236 2001-12-29  Miguel de Icaza  <miguel@ximian.com>
29237
29238         * expression.cs (EmitCall): if a method is not virtual, then do
29239         not use callvirt on it.
29240
29241         (ArrayAccess.EmitAssign): storing non-builtin value types (ie,
29242         user defined stuff) requires the use of stobj, which takes an
29243         address on the stack instead of an array and an index.  So emit
29244         the Ldelema operation for it.
29245
29246         (EmitStoreOpcode): Use stobj for valuetypes.
29247
29248         (UnaryMutator.EmitCode): Use the right 1 value depending on
29249         whether we are dealing with int64/uint64, float or doubles.
29250
29251         * class.cs (TypeContainer.AddConstructor): Fix the logic to define
29252         constructors that I implemented last night.
29253
29254         (Constructor.IsDefault): Fix to work properly for static
29255         constructors.
29256
29257         * cs-parser.jay (CheckDef): report method signature errors.
29258         Update error number 103 to be 132.
29259
29260         * decl.cs: New AdditionResult enumeration value: MethodExists.
29261         Although we do this check for methods later on in the semantic
29262         analysis, catching repeated default constructors is so easy that
29263         we catch these here. 
29264
29265         * expression.cs (Binary.DoNumericPromotions): Fix the uint64 type
29266         promotions code.
29267
29268         (ParameterReference.EmitAssign, Emit): handle
29269         bools as bytes.
29270
29271         (ArrayAccess.EmitLoadOpcode): Handle bool type here.
29272         (ArrayAccess.EmitStoreOpcode): ditto.
29273
29274         * cs-tokenizer.cs (is_punct): Eliminated empty computation.
29275
29276         * expression.cs (MakeByteBlob): Complete all the missing types
29277         (uint, short, ushort, byte, sbyte)
29278
29279         * class.cs: Only init instance field initializers on instance
29280         constructors. 
29281
29282         Rename `constructors' to instance_constructors. 
29283
29284         (TypeContainer.AddConstructor): Only add constructors to the list
29285         if it is not static.
29286
29287         Make sure that we handle default_static_constructor independently
29288         everywhere where we handle instance_constructors
29289
29290 2001-12-28  Miguel de Icaza  <miguel@ximian.com>
29291
29292         * class.cs: Do not lookup or create a base initializer for a
29293         static constructor.
29294
29295         (ConstructorInitializer.Resolve): use the proper type to lookup
29296         for constructors.
29297
29298         * cs-parser.jay: Report error 1585 (modifiers between type and name).
29299
29300         * enum.cs, interface.cs: Remove CloseType, this is taken care by
29301         in DeclSpace. 
29302
29303         * decl.cs: CloseType is now an virtual method, the default
29304         implementation just closes this type.
29305
29306 2001-12-28  Ravi Pratap  <ravi@ximian.com>
29307
29308         * attribute.cs (DefinePInvokeMethod): Set the implementation flags
29309         to PreserveSig by default. Also emit HideBySig on such methods.
29310
29311         Basically, set the defaults to standard values.
29312
29313         * expression.cs (Invocation.BetterFunction): We need to make sure that for each
29314         argument, if candidate is better, it can't be worse than the best !
29315
29316         (Invocation): Re-write bits to differentiate between methods being
29317         applicable in their expanded form and their normal form - for params
29318         methods of course.
29319
29320         Get rid of use_standard everywhere as only standard conversions are allowed
29321         in overload resolution. 
29322
29323         More spec conformance.
29324
29325 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29326
29327         * driver.cs: Add --timestamp, to see where the compiler spends
29328         most of its time.
29329
29330         * ecore.cs (SimpleName.DoResolve): Do not create an implicit
29331         `this' in static code.
29332
29333         (SimpleName.DoResolve): Implement in terms of a helper function
29334         that allows static-references to be passed upstream to
29335         MemberAccess.
29336
29337         (Expression.ResolveWithSimpleName): Resolve specially simple
29338         names when called by MemberAccess to implement the special
29339         semantics. 
29340
29341         (Expression.ImplicitReferenceConversion): Handle conversions from
29342         Null to reference types before others, as Null's type is
29343         System.Object. 
29344
29345         * expression.cs (Invocation.EmitCall): Handle the special case of
29346         calling methods declared on a reference type from a ValueType
29347         (Base classes System.Object and System.Enum)
29348
29349         (MemberAccess.Resolve): Only perform lookups on Enumerations if
29350         the left hand side is a TypeExpr, not on every enumeration. 
29351
29352         (Binary.Resolve): If types are reference types, then do a cast to
29353         object on operators != and == of both arguments.
29354
29355         * typemanager.cs (FindMembers): Extract instance and static
29356         members if requested.
29357
29358         * interface.cs (PopulateProperty): Use void_type instead of null
29359         as the return type for the setter method.
29360
29361         (PopulateIndexer): ditto.
29362
29363 2001-12-27  Ravi Pratap  <ravi@ximian.com>
29364
29365         * support.cs (ReflectionParameters): Fix minor bug where we
29366         were examining the wrong parameter for the ParamArray attribute.
29367
29368         Cope with requests for the type of the parameter at position
29369         greater than the params parameter's. We now return the element
29370         type of the params array as that makes more sense.
29371
29372         * expression.cs (Invocation.IsParamsMethodApplicable): Update 
29373         accordingly as we no longer have to extract the element type
29374         ourselves.
29375
29376         (Invocation.OverloadResolve): Update.
29377
29378 2001-12-27  Miguel de Icaza  <miguel@ximian.com>
29379
29380         * statement.cs (Foreach.GetEnumeratorFilter): Do not compare
29381         against IEnumerator, test whether the return value is a descendant
29382         of the IEnumerator interface.
29383
29384         * class.cs (Indexer.Define): Use an auxiliary method to implement
29385         the other bits of the method definition.  Begin support for
29386         explicit interface implementation.
29387
29388         (Property.DefineMethod): Use TypeManager.void_type instead of null
29389         for an empty return value.
29390
29391 2001-12-26  Miguel de Icaza  <miguel@ximian.com>
29392
29393         * expression.cs (MemberAccess.ResolveMemberAccess): if we are
29394         dealing with a FieldExpr which is composed of a FieldBuilder, in
29395         the code path we did extract the constant, but we should have
29396         obtained the underlying value to be able to cast it (otherwise we
29397         end up in an infinite loop, this is what Ravi was running into).
29398
29399         (ArrayCreation.UpdateIndices): Arrays might be empty.
29400
29401         (MemberAccess.ResolveMemberAccess): Add support for section
29402         14.5.4.1 that deals with the special case of E.I when E is a type
29403         and something else, that I can be a reference to a static member.
29404
29405         (ArrayCreation.MakeByteBlob): It is not an error to not be able to
29406         handle a particular array type to create byte blobs, it is just
29407         something we dont generate byteblobs for.
29408
29409         * cs-tokenizer.cs (get_cmd_arg): Ignore \r in commands and
29410         arguments. 
29411
29412         * location.cs (Push): remove the key from the hashtable that we
29413         are about to add.   This happens for empty files.
29414
29415         * driver.cs: Dispose files after we have parsed them.
29416
29417         (tokenize): new function that only runs the tokenizer on its
29418         input, for speed testing.
29419
29420 2001-12-26  Ravi Pratap  <ravi@ximian.com>
29421
29422         * class.cs (Event.Define): Define the private field only if there
29423         are no accessors defined.
29424
29425         * expression.cs (ResolveMemberAccess): If there is no associated
29426         field with the event, that means we have an event defined with its
29427         own accessors and we should flag error cs0070 since transforming
29428         ourselves into a field is not valid in that case.
29429
29430         * ecore.cs (SimpleName.DoResolve): Same as above.
29431
29432         * attribute.cs (DefinePInvokeMethod): Set the default calling convention
29433         and charset to sane values.
29434
29435 2001-12-25  Ravi Pratap  <ravi@ximian.com>
29436
29437         * assign.cs (DoResolve): Perform check on events only if they 
29438         are being accessed outside the declaring type.
29439
29440         * cs-parser.jay (event_declarations): Update rules to correctly
29441         set the type of the implicit parameter etc.
29442
29443         (add_accessor, remove_accessor): Set current local parameters.
29444
29445         * expression.cs (Binary): For delegate addition and subtraction,
29446         cast the return value from the method into the appropriate delegate
29447         type.
29448
29449 2001-12-24  Ravi Pratap  <ravi@ximian.com>
29450
29451         * typemanager.cs (RegisterDelegateData, GetDelegateData): Get rid
29452         of these as the workaround is unnecessary.
29453
29454         * delegate.cs (NewDelegate.DoResolve): Get rid of bits which registered
29455         delegate data - none of that is needed at all.
29456
29457         Re-write bits to extract the instance expression and the delegate method
29458         correctly.
29459
29460         * expression.cs (Binary.ResolveOperator): Handle the '-' binary operator 
29461         on delegates too.
29462
29463         * attribute.cs (ApplyAttributes): New method to take care of common tasks
29464         of attaching attributes instead of duplicating code everywhere.
29465
29466         * everywhere : Update code to do attribute emission using the above method.
29467
29468 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29469
29470         * expression.cs (IsParamsMethodApplicable): if there are not
29471         parameters, return immediately.
29472
29473         * ecore.cs: The 0 literal can be implicity converted to an enum
29474         type. 
29475
29476         (SimpleName.DoResolve): First lookup the type, then lookup the
29477         members. 
29478
29479         (FieldExpr.Emit): If the InstanceExpression is a ValueType, we
29480         want to get its address.  If the InstanceExpression is not
29481         addressable, store the result in a temporary variable, then get
29482         the address of it.
29483
29484         * codegen.cs: Only display 219 errors on warning level or above. 
29485
29486         * expression.cs (ArrayAccess): Make it implement the
29487         IMemoryLocation interface.
29488
29489         (Binary.DoResolve): handle the operator == (object a, object b)
29490         and operator != (object a, object b) without incurring into a
29491         BoxedCast (because 5 != o should never be performed).
29492
29493         Handle binary enumerator operators.
29494
29495         (EmitLoadOpcode): Use Ldelema if the object we are loading is a
29496         value type, otherwise use Ldelem_ref.
29497
29498         Use precomputed names;
29499
29500         (AddressOf): Implement address of
29501
29502         * cs-parser.jay (labeled_statement): Fix recursive block
29503         addition by reworking the production.
29504
29505         * expression.cs (New.DoEmit): New has a special case:
29506                 
29507                  If we are dealing with a ValueType, we have a few
29508                  situations to deal with:
29509                 
29510                     * The target of New is a ValueType variable, that is
29511                       easy, we just pass this as the variable reference
29512                 
29513                     * The target of New is being passed as an argument,
29514                       to a boxing operation or a function that takes a
29515                       ValueType.
29516                 
29517                       In this case, we need to create a temporary variable
29518                       that is the argument of New.
29519
29520
29521 2001-12-23  Ravi Pratap  <ravi@ximian.com>
29522
29523         * rootcontext.cs (LookupType): Check that current_type is not null before
29524         going about looking at nested types.
29525
29526         * ecore.cs (EventExpr.EmitAddOrRemove): Rename from EmitAssign as we do
29527         not implement the IAssignMethod interface any more.
29528
29529         * expression.cs (MemberAccess.ResolveMemberAccess): Handle EventExprs specially
29530         where we tranform them into FieldExprs if they are being resolved from within
29531         the declaring type.
29532
29533         * ecore.cs (SimpleName.DoResolve): Do the same here.
29534
29535         * assign.cs (DoResolve, Emit): Clean up code considerably. 
29536
29537         * ../errors/bug10.cs : Add.
29538
29539         * ../errors/cs0070.cs : Add.
29540
29541         * typemanager.cs : Use PtrHashtable for Delegate data hashtable etc.
29542
29543         * assign.cs : Get rid of EventIsLocal everywhere.
29544
29545 2001-12-23  Miguel de Icaza  <miguel@ximian.com>
29546
29547         * ecore.cs (ConvertIntLiteral): finished the implementation.
29548
29549         * statement.cs (SwitchLabel): Convert the value we are using as a
29550         key before looking up the table.
29551
29552 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29553
29554         * codegen.cs (EmitTopBlock): Require a Location argument now.
29555
29556         * cs-parser.jay (constructor_declarator): We need to setup
29557         current_local_parameters before we parse the
29558         opt_constructor_initializer, to allow the variables to be bound
29559         to the constructor arguments.
29560
29561         * rootcontext.cs (LookupType): First lookup nested classes in our
29562         class and our parents before we go looking outside our class.
29563
29564         * expression.cs (ConstantFold): Extract/debox the values at the
29565         beginnning. 
29566
29567         * rootcontext.cs (EmitCode): Resolve the constants first before we
29568         resolve the types.  This is not really needed, but it helps debugging.
29569
29570         * statement.cs: report location.
29571
29572         * cs-parser.jay: pass location to throw statement.
29573
29574         * driver.cs: Small bug fix.
29575
29576         * report.cs: Updated format to be 4-zero filled digits.
29577
29578 2001-12-22  Ravi Pratap  <ravi@ximian.com>
29579
29580         * expression.cs (CheckIndices): Fix minor bug where the wrong
29581         variable was being referred to ;-)
29582
29583         (DoEmit): Do not call EmitStaticInitializers when the 
29584         underlying type is System.Object.
29585
29586 2001-12-21  Ravi Pratap  <ravi@ximian.com>
29587
29588         * ecore.cs (EventExpr.Resolve): Implement to correctly set the type
29589         and do the usual workaround for SRE.
29590
29591         * class.cs (MyEventBuilder.EventType): New member to get at the type
29592         of the event, quickly.
29593
29594         * expression.cs (Binary.ResolveOperator): Handle delegate addition.
29595
29596         * assign.cs (Assign.DoResolve): Handle the case when the target
29597         is an EventExpr and perform the necessary checks.
29598
29599         * ecore.cs (EventExpr.EmitAssign): Implement the IAssignMethod
29600         interface.
29601
29602         (SimpleName.MemberStaticCheck): Include check for EventExpr.
29603
29604         (EventExpr): Set the type in the constructor itself since we 
29605         are meant to be born fully resolved.
29606
29607         (EventExpr.Define): Revert code I wrote earlier.
29608                 
29609         * delegate.cs (NewDelegate.Resolve): Handle the case when the MethodGroup's
29610         instance expression is null. The instance expression is a This in that case
29611         or a null, depending on whether it is a static method or not.
29612
29613         Also flag an error if the reference to a method is ambiguous i.e the MethodGroupExpr
29614         refers to more than one method.
29615
29616         * assign.cs (DoResolve): Check whether the event belongs to the same Type container
29617         and accordingly flag errors.
29618
29619 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29620
29621         * statement.cs (Throw.Emit): Add support for re-throwing exceptions.
29622
29623 2001-12-22  Miguel de Icaza  <miguel@ximian.com>
29624
29625         * location.cs (ToString): Provide useful rutine.
29626
29627 2001-12-21  Miguel de Icaza  <miguel@ximian.com>
29628
29629         * ecore.cs (Expression.ConvertIntLiteral): Do not return Constant
29630         objects, return the actual integral boxed.
29631
29632         * statement.cs (SwitchLabel): define an ILLabel for each
29633         SwitchLabel. 
29634
29635         (Switch.CheckSwitch): If the value is a Literal, extract
29636         the underlying literal.
29637
29638         Also in the unused hashtable we had, add the SwitchLabel so we can
29639         quickly look this value up.
29640
29641         * constant.cs: Implement a bunch of new constants.  Rewrite
29642         Literal based on this.  Made changes everywhere to adapt to this.
29643
29644         * expression.cs (Expression.MakeByteBlob): Optimize routine by
29645         dereferencing array only once, and also copes with enumrations.
29646
29647         bytes are two bytes wide, not one.
29648
29649         (Cast): Perform constant conversions.
29650
29651         * ecore.cs (TryImplicitIntConversion): Return literals instead of
29652         wrappers to the literals here.
29653
29654         * expression.cs (DoNumericPromotions): long literals can converted
29655         to ulong implicity (this is taken care of elsewhere, but I was
29656         missing this spot).
29657
29658         * ecore.cs (Expression.Literalize): Make the return type Literal,
29659         to improve type checking.
29660
29661         * rootcontext.cs: Lookup for nested classes in our class hierarchy.
29662
29663 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29664
29665         * literal.cs: Revert code from ravi that checked the bounds.  The
29666         bounds are sane by the definition of the type itself. 
29667
29668         * typemanager.cs: Fix implementation of ImplementsInterface.  We
29669         need to actually look up in our parent hierarchy for interfaces
29670         implemented. 
29671
29672         * const.cs: Use the underlying type for enumerations
29673
29674         * delegate.cs: Compute the basename for the delegate creation,
29675         that should fix the delegate test case, and restore the correct
29676         Type Lookup semantics in rootcontext
29677
29678         * rootcontext.cs: Revert Ravi's last patch.  The correct way of
29679         referencing a nested type with the Reflection API is using the "+"
29680         sign. 
29681
29682         * cs-parser.jay: Do not require EOF token at the end.
29683
29684 2001-12-20  Ravi Pratap  <ravi@ximian.com>
29685
29686         * rootcontext.cs (LookupType): Concatenate type names with
29687         a '.' instead of a '+' The test suite passes again.
29688
29689         * enum.cs (Enum.DefineEnum): Set RTSpecialName on the 'value__'
29690         field of the enumeration.
29691
29692         * expression.cs (MemberAccess.ResolveMemberAccess): Add support for
29693         the case when the member is an EventExpr.
29694
29695         * ecore.cs (EventExpr.InstanceExpression): Every event which is not
29696         static has an associated instance expression.
29697
29698         * typemanager.cs (RegisterEvent): The usual workaround, now for events.
29699
29700         (GetAddMethod, GetRemoveMethod): Workarounds, as usual.
29701
29702         * class.cs (Event.Define): Register event and perform appropriate checks
29703         for error #111.
29704
29705         We define the Add and Remove methods even if the use provides none because
29706         in that case, we provide default implementations ourselves.
29707
29708         Define a private field of the type of the event. This is done by the CSC compiler
29709         and we should be doing it too ;-)
29710
29711         * typemanager.cs (delegate_combine_delegate_delegate, delegate_remove_delegate_delegate):
29712         More methods we use in code we generate.
29713
29714         (multicast_delegate_type, delegate_type): Two separate types since the distinction
29715         is important.
29716
29717         (InitCoreTypes): Update accordingly for the above.
29718
29719         * class.cs (Event.Emit): Generate code for default accessors that we provide
29720
29721         (EmitDefaultMethod): Do the job in the above.
29722
29723         * delegate.cs (DefineDelegate): Use TypeManager.multicast_delegate_type in the 
29724         appropriate place.
29725
29726 2001-12-20  Miguel de Icaza  <miguel@ximian.com>
29727
29728         * class.cs (Indexer.Define): Fix bug, we were setting both Get/Set
29729         builders even if we were missing one.
29730
29731         * interface.cs, class.cs, enum.cs: When calling DefineNestedType
29732         pass the Basename as our class name instead of the Name.  The
29733         basename will be correctly composed for us.
29734
29735         * parameter.cs (Paramters): Now takes a Location argument.
29736
29737         * decl.cs (DeclSpace.LookupType): Removed convenience function and
29738         make all the code call directly LookupType in RootContext and take
29739         this chance to pass the Location information everywhere.
29740
29741         * Everywhere: pass Location information.
29742
29743 2001-12-19  Miguel de Icaza  <miguel@ximian.com>
29744
29745         * class.cs (Constructor.Define): Updated way of detecting the
29746         length of the parameters.
29747
29748         (TypeContainer.DefineType): Use basename as the type name for
29749         nested types.
29750
29751         (TypeContainer.Define): Do not recursively define types here, as
29752         definition is taken care in order by the RootContext.
29753
29754         * tree.cs: Keep track of namespaces in a per-file basis.
29755
29756         * parameter.cs (Parameter.ComputeSignature): Update to use
29757         DeclSpace. 
29758
29759         (Parameters.GetSignature): ditto.
29760
29761         * interface.cs (InterfaceMethod.GetSignature): Take a DeclSpace
29762         instead of a TypeContainer.
29763
29764         (Interface.SemanticAnalysis): Use `this' instead of our parent to
29765         resolve names.  Because we need to be resolve in our context, not
29766         our parents.
29767
29768         * driver.cs: Implement response files.
29769
29770         * class.cs (TypeContainer.DefineType): If we are defined, do not
29771         redefine ourselves.
29772
29773         (Event.Emit): Emit the code for add/remove handlers.
29774         (Event.Define): Save the MethodBuilders for add/remove.
29775
29776         * typemanager.cs: Use pair here too.
29777
29778         * cs-parser.jay: Replaced use of DictionaryEntry for Pair because
29779         DictionaryEntry requires the first argument to be non-null.  
29780
29781         (enum_declaration): Compute full name for registering the
29782         enumeration.
29783
29784         (delegate_declaration): Instead of using
29785         formal_parameter_list, use opt_formal_parameter_list as the list
29786         can be empty.
29787
29788         * cs-tokenizer.cs (PropertyParsing): renamed from `properties'
29789         (EventParsing): New property that controls whether `add' and
29790         `remove' are returned as tokens or identifiers (for events);
29791
29792 2001-12-19  Ravi Pratap  <ravi@ximian.com>
29793
29794         * class.cs (Event.Define): Revamp use of EventBuilder completely. We now
29795         use MyEventBuilder only and let it wrap the real builder for us.
29796
29797         (MyEventBuilder): Revamp constructor etc.
29798
29799         Implement all operations that we perform on EventBuilder in precisely the same
29800         way here too.
29801
29802         (FindMembers): Update to use the EventBuilder member.
29803
29804         (Event.Emit): Update accordingly.
29805
29806 2001-12-18  Ravi Pratap  <ravi@ximian.com>
29807
29808         * class.cs (MyEventBuilder.Set*): Chain to the underlying builder
29809         by calling the appropriate methods.
29810
29811         (GetCustomAttributes): Make stubs as they cannot possibly do anything
29812         useful.
29813
29814         (Event.Emit): Use MyEventBuilder everywhere - even to set attributes.
29815
29816 2001-12-17  Ravi Pratap  <ravi@ximian.com>
29817
29818         * delegate.cs (Delegate.Populate): Check that the return type
29819         and various parameters types are indeed accessible.
29820
29821         * class.cs (Constructor.Define): Same here.
29822
29823         (Field.Define): Ditto.
29824
29825         (Event.Define): Ditto.
29826
29827         (Operator.Define): Check that the underlying Method defined itself
29828         correctly - so it's MethodBuilder should not be null.
29829
29830         * delegate.cs (DelegateInvocation.DoResolve): Bale out if the type of the Instance
29831         expression happens to be null.
29832
29833         * class.cs (MyEventBuilder): Workaround for SRE lameness. Implement various abstract
29834         members but as of now we don't seem to be able to do anything really useful with it.
29835
29836         (FindMembers): Handle events separately by returning the MyEventBuilder of the event,
29837         not the EventBuilder.
29838
29839 2001-12-18  Miguel de Icaza  <miguel@ximian.com>
29840
29841         * cs-tokenizer.cs: Add support for defines.
29842         Add support for #if, #elif, #else, #endif
29843
29844         (eval_var): evaluates a variable.
29845         (eval): stubbed for evaluating functions.
29846
29847         * cs-parser.jay: Pass the defines information
29848
29849         * driver.cs: Add --define command line option.
29850
29851         * decl.cs: Move MemberCore here.
29852
29853         Make it the base class for DeclSpace.  This allows us to catch and
29854         report 108 and 109 for everything now.
29855
29856         * class.cs (TypeContainer.Define): Extract all the members
29857         before populating and emit the warning 108 (new keyword required
29858         to override) instead of having each member implement this.
29859
29860         (MemberCore.Define): New abstract method, we will be using this in
29861         the warning reporting engine in Populate.
29862
29863         (Operator.Define): Adjust to new MemberCore protocol. 
29864
29865         * const.cs (Const): This does not derive from Expression, it is a
29866         temporary object we use to create fields, it is a MemberCore. 
29867
29868         * class.cs (Method.Define): Allow the entry point to be in a
29869         specific class.
29870
29871         * driver.cs: Rewrite the argument handler to clean it up a bit.
29872
29873         * rootcontext.cs: Made it just an auxiliary namespace feature by
29874         making everything static.
29875
29876         * driver.cs: Adapt code to use RootContext type name instead of
29877         instance variable.
29878
29879         * delegate.cs: Remove RootContext argument.
29880
29881         * class.cs: (Struct, TypeContainer, Class): Remove RootContext
29882         argument. 
29883
29884         * class.cs (Event.Define): The lookup can fail.
29885
29886         * cs-tokenizer.cs: Begin implementation of pre-procesor. 
29887
29888         * expression.cs: Resolve the this instance before invoking the code.
29889
29890 2001-12-17  Miguel de Icaza  <miguel@ximian.com>
29891
29892         * cs-parser.jay: Add a production in element_access that allows
29893         the thing to become a "type" reference.  This way we can parse
29894         things like "(string [])" as a type.
29895
29896         Note that this still does not handle the more complex rules of
29897         casts. 
29898
29899
29900         * delegate.cs (Delegate.Populate): Register the delegage constructor builder here. 
29901
29902         * ecore.cs: (CopyNewMethods): new utility function used to
29903         assemble the list of methods from running FindMembers.
29904
29905         (MemberLookup): Rework FindMembers so that 
29906
29907 2001-12-16  Miguel de Icaza  <miguel@ximian.com>
29908
29909         * class.cs (TypeContainer): Remove Delegates who fail to be
29910         defined.
29911
29912         * delegate.cs (Populate): Verify that we dont get null return
29913         values.   TODO: Check for AsAccessible.
29914
29915         * cs-parser.jay: Use basename to emit error 574 (destructor should
29916         have the same name as container class), not the full name.
29917
29918         * cs-tokenizer.cs (adjust_int): Fit the integer in the best
29919         possible representation.  
29920
29921         Also implements integer type suffixes U and L.
29922
29923 2001-12-15  Miguel de Icaza  <miguel@ximian.com>
29924
29925         * expression.cs (ArrayCreation.DoResolve): We need to do the
29926         argument resolution *always*.
29927
29928         * decl.cs: Make this hold the namespace.  Hold the root context as
29929         well.
29930         (LookupType): Move here.
29931
29932         * enum.cs, class.cs, interface.cs: Adapt to new hierarchy.
29933
29934         * location.cs (Row, Name): Fixed the code, it was always returning
29935         references to the first file.
29936
29937         * interface.cs: Register properties defined through interfaces.
29938
29939         * driver.cs: Add support for globbing on the command line
29940
29941         * class.cs (Field): Make it derive from MemberCore as well.
29942         (Event): ditto.
29943
29944 2001-12-15  Ravi Pratap  <ravi@ximian.com>
29945
29946         * class.cs (Event::Define): Check that the type of the event is a delegate
29947         type else flag error #66.
29948
29949         Also, re-use TypeContainer.MethodModifiersValid here too as the rules are the
29950         same.
29951
29952         * attribute.cs (DefinePInvokeMethod): Handle named arguments and process
29953         values of EntryPoint, CharSet etc etc.
29954
29955         Pass in the values to TypeBuilder.DefinePInvokeMethod; determine Type etc neatly.
29956
29957         * class.cs (FindMembers): If a method is in transit, its MethodBuilder will
29958         be null and we should ignore this. I am not sure if this is really clean. Apparently,
29959         there's no way of avoiding hitting this because the call is coming from SimpleName.DoResolve,
29960         which needs this to do its work.
29961
29962         * ../errors/cs0066.cs : Add.
29963
29964 2001-12-14  Miguel de Icaza  <miguel@ximian.com>
29965
29966         * typemanager.cs: (GetPropertyGetter, GetPropertyGetter): New
29967         helper functions.
29968
29969         * class.cs: (MethodSignature.MethodSignature): Removed hack that
29970         clears out the parameters field.
29971         (MemberSignatureCompare): Cleanup
29972
29973         (MemberCore): New base class used to share code between MethodCore
29974         and Property.
29975
29976         (RegisterRequiredImplementations) BindingFlags.Public requires
29977         either BindingFlags.Instace or Static.  Use instance here.
29978
29979         (Property): Refactored code to cope better with the full spec.
29980
29981         * parameter.cs (GetParameterInfo): Return an empty array instead
29982         of null on error.
29983
29984         * class.cs (Property): Abstract or extern properties have no bodies.
29985
29986         * parameter.cs (GetParameterInfo): return a zero-sized array.
29987
29988         * class.cs (TypeContainer.MethodModifiersValid): Move all the
29989         method modifier validation to the typecontainer so we can reuse
29990         this on properties.
29991
29992         (MethodCore.ParameterTypes): return an empty sized array of types.
29993
29994         (Property.Define): Test property modifier validity.
29995
29996         Add tests for sealed/override too.
29997
29998         (Method.Emit): abstract or extern methods have no bodies.
29999
30000 2001-12-14  Ravi Pratap  <ravi@ximian.com>
30001
30002         * class.cs (Method.IsPInvoke): Get rid of it as it is an expensive
30003         thing.
30004
30005         (Method::Define, ::Emit): Modify accordingly.
30006
30007         * expression.cs (Invocation::OverloadResolve): Handle error # 121.
30008
30009         (ArrayCreation::MakeByteBlob): Handle floats and doubles.
30010
30011         * makefile: Pass in /unsafe.
30012
30013 2001-12-13  Miguel de Icaza  <miguel@ximian.com>
30014
30015         * class.cs (MakeKey): Kill routine.
30016
30017         * class.cs (TypeContainer.Define): Correctly define explicit
30018         method implementations (they require the full interface name plus
30019         the method name).
30020
30021         * typemanager.cs: Deply the PtrHashtable here and stop using the
30022         lame keys.  Things work so much better.
30023
30024         This of course broke everyone who depended on `RegisterMethod' to
30025         do the `test for existance' test.  This has to be done elsewhere.
30026
30027         * support.cs (PtrHashtable): A hashtable that avoid comparing with
30028         the object stupid Equals method (because, that like fails all over
30029         the place).  We still do not use it.
30030
30031         * class.cs (TypeContainer.SetRequiredInterface,
30032         TypeContainer.RequireMethods): Killed these two routines and moved
30033         all the functionality to RegisterRequiredImplementations.
30034
30035         (TypeContainer.RegisterRequiredImplementations): This routine now
30036         registers all the implementations required in an array for the
30037         interfaces and abstract methods.  We use an array of structures
30038         which can be computed ahead of time to reduce memory usage and we
30039         also assume that lookups are cheap as most classes will not
30040         implement too many interfaces.
30041
30042         We also avoid creating too many MethodSignatures.
30043
30044         (TypeContainer.IsInterfaceMethod): Update and optionally does not
30045         clear the "pending" bit if we find that there are problems with
30046         the declaration.
30047
30048         (TypeContainer.VerifyPendingMethods): Update to report errors of
30049         methods that look like implementations but are not.
30050
30051         (TypeContainer.Define): Add support for explicit interface method
30052         implementation. 
30053
30054 2001-12-12  Miguel de Icaza  <miguel@ximian.com>
30055
30056         * typemanager.cs: Keep track of the parameters here instead of
30057         being a feature of the TypeContainer.
30058
30059         * class.cs: Drop the registration of parameters here, as
30060         InterfaceMethods are also interface declarations.
30061
30062         * delegate.cs: Register methods with the TypeManager not only with
30063         the TypeContainer.  This code was buggy.
30064
30065         * interface.cs: Full registation here.
30066
30067 2001-12-11  Miguel de Icaza  <miguel@ximian.com>
30068
30069         * expression.cs: Remove reducer for binary expressions, it can not
30070         be done this way.
30071
30072         * const.cs: Put here the code that used to go into constant.cs
30073
30074         * constant.cs: Put here the code for constants, this is a new base
30075         class for Literals.
30076
30077         * literal.cs: Make Literal derive from Constant.
30078
30079 2001-12-09  Miguel de Icaza  <miguel@ximian.com>
30080
30081         * statement.cs (Return.Emit): Report error 157 if the user
30082         attempts to return from a finally block.
30083
30084         (Return.Emit): Instead of emitting a return, jump to the end of
30085         the function.
30086
30087         * codegen.cs (EmitContext): ReturnValue, ReturnLabel: new
30088         LocalBuilder to store the result of the function.  ReturnLabel is
30089         the target where we jump.
30090
30091
30092 2001-12-09  Radek Doulik  <rodo@ximian.com>
30093
30094         * cs-parser.jay: remember alias in current namespace
30095
30096         * ecore.cs (SimpleName::DoResolve): use aliases for types or
30097         namespaces
30098
30099         * class.cs (LookupAlias): lookup alias in my_namespace
30100
30101         * namespace.cs (UsingAlias): add alias, namespace_or_type pair to
30102         aliases hashtable
30103         (LookupAlias): lookup alias in this and if needed in parent
30104         namespaces
30105
30106 2001-12-08  Miguel de Icaza  <miguel@ximian.com>
30107
30108         * support.cs: 
30109
30110         * rootcontext.cs: (ModuleBuilder) Made static, first step into
30111         making things static.  I need this to avoid passing the
30112         TypeContainer when calling ParameterType.
30113
30114         * support.cs (InternalParameters.ParameterType): Remove ugly hack
30115         that did string manipulation to compute the type and then call
30116         GetType.  Use Parameter.ParameterType instead.
30117
30118         * cs-tokenizer.cs: Consume the suffix for floating values.
30119
30120         * expression.cs (ParameterReference): figure out whether this is a
30121         reference parameter or not.  Kill an extra variable by computing
30122         the arg_idx during emission.
30123
30124         * parameter.cs (Parameters.GetParameterInfo): New overloaded
30125         function that returns whether a parameter is an out/ref value or not.
30126
30127         (Parameter.ParameterType): The type of the parameter (base,
30128         without ref/out applied).
30129
30130         (Parameter.Resolve): Perform resolution here.
30131         (Parameter.ExternalType): The full type (with ref/out applied).
30132
30133         * statement.cs (Using.Emit, Using.EmitExpression): Implement
30134         support for expressions on the using statement.
30135
30136 2001-12-07  Miguel de Icaza  <miguel@ximian.com>
30137
30138         * statement.cs (Using.EmitLocalVariableDecls): Split the
30139         localvariable handling of the using statement.
30140
30141         (Block.EmitMeta): Keep track of variable count across blocks.  We
30142         were reusing slots on separate branches of blocks.
30143
30144         (Try.Emit): Emit the general code block, we were not emitting it. 
30145
30146         Check the type of the declaration to be an IDisposable or
30147         something that can be implicity converted to it. 
30148
30149         Emit conversions if required.
30150
30151         * ecore.cs (EmptyExpression): New utility class.
30152         (Expression.ImplicitConversionExists): New utility function.
30153
30154 2001-12-06  Miguel de Icaza  <miguel@ximian.com>
30155
30156         * statement.cs (Using): Implement.
30157
30158         * expression.cs (LocalVariableReference): Support read only variables.
30159
30160         * statement.cs: Remove the explicit emit for the Leave opcode.
30161         (VariableInfo): Add a readonly field.
30162
30163 2001-12-05  Miguel de Icaza  <miguel@ximian.com>
30164
30165         * ecore.cs (ConvCast): new class used to encapsulate the various
30166         explicit integer conversions that works in both checked and
30167         unchecked contexts.
30168
30169         (Expression.ConvertNumericExplicit): Use new ConvCast class to
30170         properly generate the overflow opcodes.
30171
30172 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30173
30174         * statement.cs: The correct type for the EmptyExpression is the
30175         element_type, not the variable type.  Ravi pointed this out.
30176
30177 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30178
30179         * class.cs (Method::Define): Handle PInvoke methods specially
30180         by using DefinePInvokeMethod instead of the usual one.
30181
30182         * attribute.cs (DefinePInvokeMethod): Implement as this is what is called
30183         above to do the task of extracting information and defining the method.
30184
30185 2001-12-04  Ravi Pratap  <ravi@ximian.com>
30186
30187         * expression.cs (ArrayCreation::EmitStaticInitializers): Get rid
30188         of the condition for string type.
30189
30190         (Emit): Move that here. 
30191
30192         (ArrayCreation::CheckIndices): Keep string literals in their expression
30193         form.
30194
30195         (EmitDynamicInitializers): Handle strings appropriately.
30196
30197 2001-12-04  Miguel de Icaza  <miguel@ximian.com>
30198
30199         * codegen.cs (EmitContext): Replace multiple variables with a
30200         single pointer to the current Switch statement.
30201
30202         * statement.cs (GotoDefault, Switch): Adjust to cleaned up
30203         EmitContext.
30204
30205 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30206
30207         * statement.cs 
30208
30209         * statement.cs (GotoDefault), cs-parser.jay: Implement `goto
30210         default'.
30211
30212         (Foreach.Emit): Foreach on arrays was not setting
30213         up the loop variables (for break/continue).
30214
30215         (GotoCase): Semi-implented.
30216
30217 2001-12-03  Ravi Pratap  <ravi@ximian.com>
30218
30219         * attribute.cs (CheckAttribute): Handle system attributes by using
30220         Attribute.GetAttributes to examine information we need.
30221
30222         (GetValidPlaces): Same here.
30223
30224         * class.cs (Method::Define): Catch invalid use of extern and abstract together.
30225
30226         * typemanager.cs (dllimport_type): Core type for System.DllImportAttribute.
30227
30228         * class.cs (Method.IsPinvoke): Used to determine if we are a PInvoke method.
30229
30230         (Method::Define): Set appropriate flags if we have a DllImport attribute.
30231
30232         (Method::Emit): Handle the case when we are a PInvoke method.
30233
30234 2001-12-03  Miguel de Icaza  <miguel@ximian.com>
30235
30236         * expression.cs: Use ResolveWithSimpleName on compound names.
30237
30238 2001-12-02  Ravi Pratap  <ravi@ximian.com>
30239
30240         * constant.cs (EmitConstant): Make sure we resolve the associated expression
30241         before trying to reduce it.
30242
30243         * typemanager.cs (RegisterConstant, LookupConstant): Implement.
30244
30245         * constant.cs (LookupConstantValue): Implement.
30246
30247         (EmitConstant): Use the above in emitting the constant.
30248
30249         * expression.cs (MemberAccess::ResolveMemberAccess): Handle constants
30250         that are user-defined by doing a LookupConstantValue on them.
30251
30252         (SimpleName::DoResolve): When we have a FieldExpr, cope with constants
30253         too, like above.
30254
30255 2001-11-29  Miguel de Icaza  <miguel@ximian.com>
30256
30257         * expression.cs (BaseAccess, BaseIndexer): Also split this out.
30258
30259         (BaseAccess.DoResolve): Implement.
30260
30261         (MemberAccess.DoResolve): Split this routine into a
30262         ResolveMemberAccess routine that can be used independently
30263
30264 2001-11-28  Miguel de Icaza  <miguel@ximian.com>
30265
30266         * expression.cs (Probe, Is, As): Split Probe in two classes Is and
30267         As that share bits of the implementation.  Is returns a boolean,
30268         while As returns the Type that is being probed.
30269
30270 2001-12-01  Ravi Pratap  <ravi@ximian.com>
30271
30272         * enum.cs (LookupEnumValue): Re-write various bits, return an object value
30273         instead of a Literal - much easier.
30274
30275         (EnumInTransit): Remove - utterly useless :-)
30276
30277         (Populate): Re-write bits - remove duplicate code etc. The code is much neater now.
30278
30279         * expression.cs (MemberLookup): Cope with user-defined enums when they are in transit.
30280
30281         * enum.cs (LookupEnumValue): Auto-compute next values by going down the dependency
30282         chain when we have no associated expression.
30283
30284 2001-11-30  Ravi Pratap  <ravi@ximian.com>
30285
30286         * constant.cs (Define): Use Location while reporting the errror.
30287
30288         Also emit a warning when 'new' is used and there is no inherited
30289         member to hide.
30290
30291         * enum.cs (EnumInTransit): Used to tell if an enum type is in the process of being 
30292         populated.
30293
30294         (LookupEnumValue): Implement to lookup an enum member's value and define it
30295         if necessary.
30296
30297         (Populate): Re-write accordingly to use the above routine.
30298
30299 2001-11-27  Miguel de Icaza  <miguel@ximian.com>
30300
30301         * expression.cs (This): Fix prototype for DoResolveLValue to
30302         override the base class DoResolveLValue.
30303
30304         * cs-parser.cs: Report errors cs574 and cs575 (destructor
30305         declarations) 
30306
30307         * ecore.cs (FieldExpr.EmitAssign): Handle value types specially
30308         (we need to load the address of the field here).  This fixes
30309         test-22. 
30310
30311         (FieldExpr.DoResolveLValue): Call the DoResolve
30312         function to initialize the Instance expression.
30313
30314         * statement.cs (Foreach.Emit): Fix the bug where we did not invoke
30315         correctly the GetEnumerator operation on a value type.
30316
30317         * cs-parser.jay: Add more simple parsing error catches.
30318
30319         * statement.cs (Switch): Add support for string switches.
30320         Handle null specially.
30321
30322         * literal.cs (NullLiteral): Make NullLiteral objects singletons. 
30323
30324 2001-11-28  Ravi Pratap  <ravi@ximian.com>
30325
30326         * cs-parser.jay (local_constant_declaration): Use declare_local_constant.
30327
30328         (declare_local_constant): New helper function.
30329
30330         * statement.cs (AddConstant): Keep a separate record of constants
30331
30332         (IsConstant): Implement to determine if a variable is a constant.
30333
30334         (GetConstantExpression): Implement.
30335
30336         * expression.cs (LocalVariableReference): Handle the case when it is a constant.
30337
30338         * statement.cs (IsVariableDefined): Re-write.
30339
30340 2001-11-27  Ravi Pratap  <ravi@ximian.com>
30341
30342         * class.cs (TypeContainer::FindMembers): Look for constants
30343         in the case when we are looking for MemberTypes.Field
30344
30345         * expression.cs (MemberAccess::DoResolve): Check that in the
30346         case we are a FieldExpr and a Literal, we are not being accessed
30347         by an instance reference.
30348
30349         * cs-parser.jay (local_constant_declaration): Implement.
30350
30351         (declaration_statement): Implement for constant declarations.
30352
30353 2001-11-26  Miguel de Icaza  <miguel@ximian.com>
30354
30355         * statement.cs (Switch): Catch double defaults.
30356
30357         (Switch): More work on the switch() statement
30358         implementation.  It works for integral values now, need to finish
30359         string support.
30360
30361
30362 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30363
30364         * ecore.cs (Expression.ConvertIntLiteral): New function to convert
30365         integer literals into other integer literals.  To be used by
30366         switch. 
30367
30368 2001-11-24  Ravi Pratap  <ravi@ximian.com>
30369
30370         * expression.cs (ArrayCreation): Get rid of ArrayExprs : we save
30371         some memory.
30372
30373         (EmitDynamicInitializers): Cope with the above since we extract data
30374         directly from ArrayData now.
30375
30376         (ExpectInitializers): Keep track of whether initializers are mandatory
30377         or not.
30378
30379         (Bounds): Make it a hashtable to prevent the same dimension being 
30380         recorded for every element in that dimension.
30381
30382         (EmitDynamicInitializers): Fix bug which prevented the Set array method
30383         from being found.
30384
30385         Also fix bug which was causing the indices to be emitted in the reverse
30386         order.
30387
30388 2001-11-24  Miguel de Icaza  <miguel@ximian.com>
30389
30390         * expression.cs (ArrayCreation): Implement the bits that Ravi left
30391         unfinished.  They do not work, because the underlying code is
30392         sloppy.
30393
30394 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30395
30396         * cs-parser.jay: Remove bogus fixme.
30397
30398         * statement.cs (Switch, SwitchSection, SwithLabel): Started work
30399         on Switch statement.
30400
30401 2001-11-23  Ravi Pratap  <ravi@ximian.com>
30402
30403         * typemanager.cs (IsDelegateType, IsEnumType): Fix logic to determine
30404         the same. 
30405
30406         * expression.cs (ArrayCreation::CheckIndices): Get rid of the require_constant
30407         parameter. Apparently, any expression is allowed. 
30408
30409         (ValidateInitializers): Update accordingly.
30410
30411         (CheckIndices): Fix some tricky bugs thanks to recursion.
30412
30413         * delegate.cs (NewDelegate::DoResolve): Re-write large portions as 
30414         I was being completely brain-dead.
30415
30416         (VerifyMethod, VerifyApplicability, VerifyDelegate): Make static
30417         and re-write acordingly.
30418
30419         (DelegateInvocation): Re-write accordingly.
30420
30421         * expression.cs (ArrayCreation::Emit): Handle string initialization separately.
30422
30423         (MakeByteBlob): Handle types more correctly.
30424
30425         * expression.cs (ArrayCreation:Emit): Write preliminary code to do
30426         initialization from expressions but it is incomplete because I am a complete
30427         Dodo :-|
30428
30429 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30430
30431         * statement.cs (If.Emit): Fix a bug that generated incorrect code
30432         on If.  Basically, we have to return `true' (ie, we do return to
30433         our caller) only if both branches of the if return.
30434
30435         * expression.cs (Binary.Emit): LogicalOr and LogicalAnd are
30436         short-circuit operators, handle them as short circuit operators. 
30437
30438         (Cast.DoResolve): Resolve type.
30439         (Cast.Cast): Take an expression as the target type.
30440
30441         * cs-parser.jay (cast_expression): Remove old hack that only
30442         allowed a limited set of types to be handled.  Now we take a
30443         unary_expression and we resolve to a type during semantic
30444         analysis.
30445
30446         Use the grammar productions from Rhys to handle casts (this is
30447         not complete like Rhys syntax yet, we fail to handle that corner
30448         case that C# has regarding (-x), but we will get there.
30449
30450 2001-11-22  Ravi Pratap  <ravi@ximian.com>
30451
30452         * class.cs (EmitFieldInitializer): Take care of the case when we have a
30453         field which is an array type.
30454
30455         * cs-parser.jay (declare_local_variables): Support array initialization too.
30456
30457         * typemanager.cs (MakeKey): Implement.
30458
30459         (everywhere): Use the above appropriately.
30460
30461         * cs-parser.jay (for_statement): Update for array initialization while
30462         declaring variables.
30463
30464         * ecore.cs : The error message was correct, it's the variable's names that
30465         were misleading ;-) Make the code more readable.
30466
30467         (MemberAccess::DoResolve): Fix the code which handles Enum literals to set
30468         the correct type etc.
30469
30470         (ConvertExplicit): Handle Enum types by examining the underlying type.
30471
30472 2001-11-21  Ravi Pratap  <ravi@ximian.com>
30473
30474         * parameter.cs (GetCallingConvention): Always return
30475         CallingConventions.Standard for now.
30476
30477 2001-11-22  Miguel de Icaza  <miguel@ximian.com>
30478
30479         * expression.cs (Binary.ResolveOperator): Update the values of `l'
30480         and `r' after calling DoNumericPromotions.
30481
30482         * ecore.cs: Fix error message (the types were in the wrong order).
30483
30484         * statement.cs (Foreach.ProbeCollectionType): Need to pass
30485         BindingFlags.Instance as well 
30486
30487         * ecore.cs (Expression.TryImplicitIntConversion): Wrap the result
30488         implicit int literal conversion in an empty cast so that we
30489         propagate the right type upstream.
30490
30491         (UnboxCast): new class used to unbox value types.
30492         (Expression.ConvertExplicit): Add explicit type conversions done
30493         by unboxing.
30494
30495         (Expression.ImplicitNumericConversion): Oops, forgot to test for
30496         the target type before applying the implicit LongLiterals to ULong
30497         literal cast.
30498
30499 2001-11-21  Miguel de Icaza  <miguel@ximian.com>
30500
30501         * cs-parser.jay (for_statement): Reworked the way For works: now
30502         we declare manually any variables that are introduced in
30503         for_initializer to solve the problem of having out-of-band code
30504         emition (that is what got for broken).
30505
30506         (declaration_statement): Perform the actual variable declaration
30507         that used to be done in local_variable_declaration here.
30508
30509         (local_variable_declaration): Do not declare anything, just pass
30510         the information on a DictionaryEntry
30511
30512 2001-11-20  Ravi Pratap  <ravi@ximian.com>
30513
30514         * expression.cs (ArrayCreation::CheckIndices): The story continues :-) Complete
30515         re-write of the logic to now make it recursive.
30516
30517         (UpdateIndices): Re-write accordingly.
30518
30519         Store element data in a separate ArrayData list in the above methods.
30520
30521         (MakeByteBlob): Implement to dump the array data into a byte array.
30522
30523 2001-11-19  Ravi Pratap  <ravi@ximian.com>
30524
30525         * expression.cs (ArrayCreation): Factor out some code from ValidateInitializers
30526         into CheckIndices.
30527
30528         * constant.cs (Define): Implement.
30529
30530         (EmitConstant): Re-write fully.
30531
30532         Pass in location info.
30533
30534         * class.cs (Populate, Emit): Call Constant::Define and Constant::EmitConstant
30535         respectively.
30536
30537         * cs-parser.jay (constant_declarator): Use VariableDeclaration instead of
30538         DictionaryEntry since we need location info too.
30539
30540         (constant_declaration): Update accordingly.
30541
30542         * expression.cs (ArrayCreation): Make ValidateInitializers simpler by factoring
30543         code into another method : UpdateIndices.
30544
30545 2001-11-18  Ravi Pratap  <ravi@ximian.com>
30546
30547         * expression.cs (ArrayCreation::ValidateInitializers): Update to perform
30548         some type checking etc.
30549
30550 2001-11-17  Ravi Pratap  <ravi@ximian.com>
30551
30552         * expression.cs (ArrayCreation::ValidateInitializers): Implement
30553         bits to provide dimension info if the user skips doing that.
30554
30555         Update second constructor to store the rank correctly.
30556
30557 2001-11-16  Ravi Pratap  <ravi@ximian.com>
30558
30559         * expression.cs (ArrayCreation::ValidateInitializers): Poke around
30560         and try to implement.
30561
30562         * ../errors/cs0150.cs : Add.
30563
30564         * ../errors/cs0178.cs : Add.
30565
30566 2001-11-16  Miguel de Icaza  <miguel@ximian.com>
30567
30568         * statement.cs: Implement foreach on multi-dimensional arrays. 
30569
30570         * parameter.cs (Parameters.GetParameterByName): Also lookup the
30571         name of the params argument.
30572
30573         * expression.cs: Use EmitStoreOpcode to get the right opcode while
30574         initializing the array.
30575
30576         (ArrayAccess.EmitStoreOpcode): move the opcode generation here, so
30577         we can use this elsewhere.
30578
30579         * statement.cs: Finish implementation of foreach for single
30580         dimension arrays.
30581
30582         * cs-parser.jay: Use an out-of-band stack to pass information
30583         around, I wonder why I need this.
30584
30585         foreach_block: Make the new foreach_block the current_block.
30586
30587         * parameter.cs (Parameters.GetEmptyReadOnlyParameters): New
30588         function used to return a static Parameters structure.  Used for
30589         empty parameters, as those are created very frequently.
30590
30591         * cs-parser.jay, class.cs: Use GetEmptyReadOnlyParameters
30592
30593 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30594
30595         * interface.cs : Default modifier is private, not public. The
30596         make verify test passes again.
30597
30598 2001-11-15  Ravi Pratap  <ravi@ximian.com>
30599
30600         * support.cs (ReflectionParameters): Fix logic to determine
30601         whether the last parameter is a params one. Test 9 passes again.
30602
30603         * delegate.cs (Populate): Register the builders we define with
30604         RegisterParameterForBuilder. Test 19 passes again.
30605
30606         * cs-parser.jay (property_declaration): Reference $6 instead
30607         of $$ to get at the location.
30608
30609         (indexer_declaration): Similar stuff.
30610
30611         (attribute): Ditto.
30612
30613         * class.cs (Property): Register parameters for the Get and Set methods
30614         if they exist. Test 23 passes again.
30615
30616         * expression.cs (ArrayCreation::Emit): Pass null for the method in the
30617         call to EmitArguments as we are sure there aren't any params arguments. 
30618         Test 32 passes again.
30619
30620         * suppor.cs (ParameterDesc, ParameterModifier): Fix trivial bug causing
30621         IndexOutOfRangeException. 
30622
30623         * class.cs (Property::Define): Register property using TypeManager.RegisterProperty
30624         Test 33 now passes again.
30625
30626 2001-11-15  Miguel de Icaza  <miguel@ximian.com>
30627
30628         * cs-parser.jay: Kill horrendous hack ($??? = lexer.Location) that
30629         broke a bunch of things.  Will have to come up with a better way
30630         of tracking locations.
30631
30632         * statement.cs: Implemented foreach for single dimension arrays.
30633
30634 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30635
30636         * enum.cs (Enum.Emit): Delay the lookup of loc until we run into
30637         an error.  This removes the lookup from the critical path.
30638
30639         * cs-parser.jay: Removed use of temporary_loc, which is completely
30640         broken. 
30641
30642 2001-11-14  Miguel de Icaza  <miguel@ximian.com>
30643
30644         * support.cs (ReflectionParameters.ParameterModifier): Report
30645         whether the argument is a PARAMS argument or not.
30646
30647         * class.cs: Set the attribute `ParamArrayAttribute' on the
30648         parameter argument.
30649
30650         * typemanager.cs: Define param_array_type (ParamArrayAttribute)
30651         and cons_param_array_attribute (ConstructorInfo for
30652         ParamArrayAttribute)., 
30653
30654         * codegen.cs: Emit the return using the `Return' statement, that
30655         way we can report the error correctly for missing return values. 
30656
30657         * class.cs (Method.Emit): Clean up.
30658
30659         * expression.cs (Argument.Resolve): Take another argument: the
30660         location where this argument is used.  Notice that this is not
30661         part of the "Argument" class as to reduce the size of the
30662         structure (we know the approximate location anyways).
30663
30664         Test if the argument is a variable-reference, if not, then
30665         complain with a 206.
30666
30667         (Argument.Emit): Emit addresses of variables.
30668
30669         (Argument.FullDesc): Simplify.
30670
30671         (Invocation.DoResolve): Update for Argument.Resolve.
30672
30673         (ElementAccess.DoResolve): ditto.
30674
30675         * delegate.cs (DelegateInvocation.Emit): Invocation of Invoke
30676         method should be virtual, as this method is always virtual.
30677
30678         (NewDelegate.DoResolve): Update for Argument.Resolve.
30679
30680         * class.cs (ConstructorInitializer.DoResolve): ditto.
30681
30682         * attribute.cs (Attribute.Resolve): ditto.
30683
30684 2001-11-13  Miguel de Icaza  <miguel@ximian.com>
30685
30686         * statement.cs (Foreach.Emit): Use EmitAssign instead of Store.
30687
30688         * expression.cs (ParameterReference): Drop IStackStorage and implement
30689         IAssignMethod instead. 
30690
30691         (LocalVariableReference): ditto.
30692
30693         * ecore.cs (FieldExpr): Drop IStackStorage and implement
30694         IAssignMethod instead. 
30695
30696 2001-11-13  Miguel de Icaza <miguel@ximian.com>
30697
30698         * parameter.cs, expression.cs, class.cs, ecore.cs: Made all
30699         enumerations that are used in heavily used structures derive from
30700         byte in a laughable and pathetic attempt to reduce memory usage.
30701         This is the kind of pre-optimzations that you should not do at
30702         home without adult supervision.
30703
30704         * expression.cs (UnaryMutator): New class, used to handle ++ and
30705         -- separatedly from the other unary operators.  Cleans up the
30706         code, and kills the ExpressionStatement dependency in Unary.
30707
30708         (Unary): Removed `method' and `Arguments' from this class, making
30709         it smaller, and moving it all to SimpleCall, so I can reuse this
30710         code in other locations and avoid creating a lot of transient data
30711         strucutres when not required.
30712
30713         * cs-parser.jay: Adjust for new changes.
30714
30715 2001-11-11  Miguel de Icaza  <miguel@ximian.com>
30716
30717         * enum.cs (Enum.Populate): If there is a failure during
30718         definition, return
30719
30720         * cs-parser.jay (opt_enum_base): we used to catch type errors
30721         here, but this is really incorrect.  The type error should be
30722         catched during semantic analysis.
30723
30724 2001-12-11  Ravi Pratap  <ravi@ximian.com>
30725
30726         * cs-parser.jay (operator_declarator, conversion_operator_declarator): Set
30727         current_local_parameters as expected since I, in my stupidity, had forgotten
30728         to do this :-)
30729
30730         * attribute.cs (GetValidPlaces): Fix stupid bug.
30731
30732         * class.cs (Method::Emit): Perform check on applicability of attributes.
30733
30734         (Constructor::Emit): Ditto.
30735
30736         (Field::Emit): Ditto.
30737
30738         (Field.Location): Store location information.
30739
30740         (Property, Event, Indexer, Operator): Ditto.
30741
30742         * cs-parser.jay (field_declaration): Pass in location for each field.
30743
30744         * ../errors/cs0592.cs : Add.
30745
30746 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30747
30748         * typemanager.cs (attribute_usage_type): New static member for System.AttributeUsage.
30749
30750         (InitCoreTypes): Update accordingly.
30751
30752         (RegisterAttrType, LookupAttr): Implement.
30753
30754         * attribute.cs (Attribute.Targets, AllowMultiple, Inherited): New fields to hold
30755         info about the same.
30756
30757         (Resolve): Update to populate the above as necessary.
30758
30759         (Error592): Helper.
30760
30761         (GetValidPlaces): Helper to the above.
30762
30763         (CheckAttribute): Implement to perform validity of attributes on declarative elements.
30764
30765         * class.cs (TypeContainer::Emit): Update attribute emission code to perform checking etc.
30766
30767 2001-11-12  Ravi Pratap  <ravi@ximian.com>
30768
30769         * attribute.cs (Attribute::Resolve): Expand to handle named arguments too.
30770
30771         * ../errors/cs0617.cs : Add.
30772
30773 2001-11-11  Ravi Pratap  <ravi@ximian.com>
30774
30775         * enum.cs (Emit): Rename to Populate to be more consistent with what
30776         we expect it to do and when exactly it is called.
30777
30778         * class.cs, rootcontext.cs : Update accordingly.
30779
30780         * typemanager.cs (RegisterField, GetValue): Workarounds for the fact that
30781         FieldInfo.GetValue does not work on dynamic types ! S.R.E lameness strikes again !
30782
30783         * enum.cs (Populate): Register fields with TypeManager.RegisterField.
30784
30785         * expression.cs (MemberAccess.DoResolve): Adjust code to obtain the value
30786         of a fieldinfo using the above, when dealing with a FieldBuilder.
30787
30788 2001-11-10  Ravi Pratap  <ravi@ximian.com>
30789
30790         * ../errors/cs0031.cs : Add.
30791
30792         * ../errors/cs1008.cs : Add.
30793
30794         * ../errrors/cs0543.cs : Add.
30795
30796         * enum.cs (DefineEnum): Check the underlying type and report an error if not a valid
30797         enum type.
30798
30799         (FindMembers): Implement.
30800
30801         * typemanager.cs (FindMembers): Re-write to call the appropriate methods for
30802         enums and delegates too.
30803
30804         (enum_types): Rename to builder_to_enum.
30805
30806         (delegate_types): Rename to builder_to_delegate.
30807
30808         * delegate.cs (FindMembers): Implement.
30809
30810 2001-11-09  Ravi Pratap  <ravi@ximian.com>
30811
30812         * typemanager.cs (IsEnumType): Implement.
30813
30814         * enum.cs (Emit): Re-write parts to account for the underlying type
30815         better and perform checking etc.
30816
30817         (GetNextDefaultValue): Helper to ensure we don't overshoot max value
30818         of the underlying type.
30819
30820         * literal.cs (GetValue methods everywhere): Perform bounds checking and return
30821         value
30822
30823         * enum.cs (error31): Helper to report error #31.
30824
30825         * cs-parser.jay (enum_declaration): Store location of each member too.
30826
30827         * enum.cs (member_to_location): New hashtable. 
30828
30829         (AddEnumMember): Update location hashtable.
30830
30831         (Emit): Use the location of each member while reporting errors.
30832
30833 2001-11-09  Miguel de Icaza  <miguel@ximian.com>
30834
30835         * cs-parser.jay: A for_initializer if is a
30836         local_variable_declaration really ammount to have an implicit
30837         block with the variable declaration and no initializer for for.
30838
30839         * statement.cs (For.Emit): Cope with null initializers.
30840
30841         This fixes the infinite loop on for initializers.
30842
30843 2001-11-08  Miguel de Icaza  <miguel@ximian.com>
30844
30845         * enum.cs: More cleanup.
30846
30847         * ecore.cs: Remove dead code.
30848
30849         * class.cs (Property.Emit): More simplification.
30850         (Event.Emit): ditto.
30851
30852         Reworked to have less levels of indentation.
30853
30854 2001-11-08  Ravi Pratap  <ravi@ximian.com>
30855
30856         * class.cs (Property): Emit attributes.
30857
30858         (Field): Ditto.
30859
30860         (Event): Ditto.
30861
30862         (Indexer): Ditto.
30863
30864         (Operator): Ditto.
30865
30866         * enum.cs (Emit): Ditto.
30867
30868         * rootcontext.cs (ResolveTree, EmitCode, CloseTypes): Do the same for
30869         Enums too.
30870
30871         * class.cs (Field, Event, etc.): Move attribute generation into the
30872         Emit method everywhere.
30873
30874         * enum.cs (Enum): Revamp to use the same definition semantics as delegates so
30875         we have a DefineEnum, CloseEnum etc. The previous way of doing things was not right
30876         as we had no way of defining nested enums !
30877
30878         * rootcontext.cs : Adjust code accordingly.
30879
30880         * typemanager.cs (AddEnumType): To keep track of enum types separately.
30881
30882 2001-11-07  Ravi Pratap  <ravi@ximian.com>
30883
30884         * expression.cs (EvalConstantExpression): Move into ecore.cs
30885
30886         * enum.cs (Enum): Rename some members and make them public and readonly
30887         according to our convention.
30888
30889         * modifiers.cs (EnumAttr): Implement as we need to set only visibility flags,
30890         nothing else.
30891
30892         * enum.cs (Enum::Define): Use the above instead of TypeAttr.
30893
30894         (Enum::Emit): Write a simple version for now which doesn't try to compute
30895         expressions. I shall modify this to be more robust in just a while.
30896
30897         * class.cs (TypeContainer::Emit): Make sure we include Enums too.
30898
30899         (TypeContainer::CloseType): Create the Enum types too.
30900
30901         * attribute.cs (Resolve): Use the new Reduce method instead of EvalConstantExpression.
30902
30903         * expression.cs (EvalConstantExpression): Get rid of completely.
30904
30905         * enum.cs (Enum::Emit): Use the new expression reducer. Implement assigning
30906         user-defined values and other cases.
30907
30908         (IsValidEnumLiteral): Helper function.
30909
30910         * expression.cs (ExprClassfromMemberInfo): Modify to not do any literalizing 
30911         out there in the case we had a literal FieldExpr.
30912
30913         (MemberAccess:DoResolve): Do the literalizing of the FieldExpr here.
30914
30915         (Literalize): Revamp a bit to take two arguments.
30916
30917         (EnumLiteral): New class which derives from Literal to wrap enum literals.
30918
30919 2001-11-06  Ravi Pratap  <ravi@ximian.com>
30920
30921         * cs-parser.jay (compilation_unit): Remove extra opt_attributes for now.
30922
30923         * expression.cs (ArrayCreation::ValidateInitializers): Implement.
30924
30925         (Resolve): Use the above to ensure we have proper initializers.
30926
30927 2001-11-05  Ravi Pratap  <ravi@ximian.com>
30928
30929         * expression.cs (Expression::EvalConstantExpression): New method to 
30930         evaluate constant expressions.
30931
30932         * attribute.cs (Attribute::Resolve): Modify bits to use the above function.
30933
30934 2001-11-07  Miguel de Icaza  <miguel@ximian.com>
30935
30936         * expression.cs (ArrayCreation.Emit): Some bits to initialize data
30937         in an array.
30938
30939         (Binary.ResolveOperator): Handle operator != (object a, object b)
30940         and operator == (object a, object b);
30941
30942         (Binary.DoNumericPromotions): Indicate whether the numeric
30943         promotion was possible.
30944
30945         (ArrayAccess.DoResolve, ArrayAccess.Emit, ArrayAccess.EmitAssign):
30946         Implement.  
30947
30948         Made the ArrayAccess implement interface IAssignMethod instead of
30949         IStackStore as the order in which arguments are passed reflects
30950         this.
30951
30952         * assign.cs: Instead of using expr.ExprClass to select the way of
30953         assinging, probe for the IStackStore/IAssignMethod interfaces.
30954
30955         * typemanager.cs: Load InitializeArray definition.
30956
30957         * rootcontext.cs (RootContext.MakeStaticData): Used to define
30958         static data that can be used to initialize arrays. 
30959
30960 2001-11-05  Miguel de Icaza  <miguel@ximian.com>
30961
30962         * expression.cs: Handle operator== and operator!= for booleans.
30963
30964         (Conditioal.Reduce): Implement reducer for the ?: operator.
30965
30966         (Conditional.Resolve): Implement dead code elimination.
30967
30968         (Binary.Resolve): Catch string literals and return a new
30969         concatenated string.
30970
30971         (Unary.Reduce): Implement reduction of unary expressions.
30972
30973         * ecore.cs: Split out the expression core handling here.
30974
30975         (Expression.Reduce): New method used to perform constant folding
30976         and CSE.  This is needed to support constant-expressions. 
30977
30978         * statement.cs (Statement.EmitBoolExpression): Pass true and false
30979         targets, and optimize for !x.
30980
30981 2001-11-04  Ravi Pratap  <ravi@ximian.com>
30982
30983         * attribute.cs (Attribute::Resolve): Implement guts. Note that resolution
30984         of an attribute gives us a CustomAttributeBuilder which we use accordingly to
30985         set custom atttributes.
30986
30987         * literal.cs (Literal::GetValue): New abstract method to return the actual
30988         value of the literal, cast as an object.
30989
30990         (*Literal): Implement GetValue method.
30991
30992         * cs-parser.jay (positional_argument_list, named_argument_list): Add not just plain
30993         expressions to the arraylist but objects of type Argument.
30994
30995         * class.cs (TypeContainer::Emit): Emit our attributes too.
30996
30997         (Method::Emit, Constructor::Emit): Ditto.
30998
30999         * cs-parser.jay (constructor_declaration): Set attributes too, which we seemed
31000         to be ignoring earlier.
31001
31002 2001-11-03  Ravi Pratap  <ravi@ximian.com>
31003
31004         * attribute.cs (AttributeSection::Define): Implement to do the business
31005         of constructing a CustomAttributeBuilder.
31006
31007         (Attribute): New trivial class. Increases readability of code.  
31008
31009         * cs-parser.jay : Update accordingly.
31010
31011         (positional_argument_list, named_argument_list, named_argument): New rules
31012
31013         (attribute_arguments): Use the above so that we are more correct.
31014
31015 2001-11-02  Ravi Pratap  <ravi@ximian.com>
31016
31017         * expression.cs (Invocation::IsParamsMethodApplicable): Implement
31018         to perform all checks for a method with a params parameter.
31019
31020         (Invocation::OverloadResolve): Update to use the above method and therefore
31021         cope correctly with params method invocations.
31022
31023         * support.cs (InternalParameters::ParameterDesc): Provide a desc for 
31024         params too.
31025
31026         * class.cs (ConstructorInitializer::Resolve): Make sure we look for Non-public
31027         constructors in our parent too because we can't afford to miss out on 
31028         protected ones ;-)
31029
31030         * attribute.cs (AttributeSection): New name for the class Attribute
31031
31032         Other trivial changes to improve readability.
31033
31034         * cs-parser.jay (opt_attributes, attribute_section etc.): Modify to
31035         use the new class names.
31036
31037 2001-11-01  Ravi Pratap  <ravi@ximian.com>
31038
31039         * class.cs (Method::Define): Complete definition for params types too
31040
31041         (Indexer::Define): Ditto.
31042
31043         * support.cs (InternalParameters::ParameterType, ParameterDesc, ParameterModifier):
31044         Cope everywhere with a request for info about the array parameter.
31045
31046 2001-11-01  Ravi Pratap  <ravi@ximian.com>
31047
31048         * tree.cs (RecordNamespace): Fix up to check for the correct key.
31049
31050         * cs-parser.jay (GetQualifiedIdentifier): New Helper method used in 
31051         local_variable_type to extract the string corresponding to the type.
31052
31053         (local_variable_type): Fixup the action to use the new helper method.
31054
31055         * codegen.cs : Get rid of RefOrOutParameter, it's not the right way to 
31056         go.
31057
31058         * expression.cs : Clean out code which uses the above.
31059
31060 2001-10-31  Ravi Pratap  <ravi@ximian.com>
31061
31062         * typemanager.cs (RegisterMethod): Check if we already have an existing key
31063         and bale out if necessary by returning a false.
31064
31065         (RegisterProperty): Ditto.
31066
31067         * class.cs (everywhere): Check the return value from TypeManager.RegisterMethod
31068         and print out appropriate error messages.
31069
31070         * interface.cs (everywhere): Ditto.
31071
31072         * cs-parser.jay (property_declaration, event_declaration, indexer_declaration): Pass
31073         location to constructor.
31074
31075         * class.cs (Property, Event, Indexer): Update accordingly.
31076
31077         * ../errors/cs111.cs : Added.
31078
31079         * expression.cs (Invocation::IsApplicable): New static method to determine applicability
31080         of a method, as laid down by the spec.
31081
31082         (Invocation::OverloadResolve): Use the above method.
31083
31084 2001-10-31  Ravi Pratap  <ravi@ximian.com>
31085
31086         * support.cs (InternalParameters): Get rid of crap taking in duplicate info. We
31087         now take a TypeContainer and a Parameters object.
31088
31089         (ParameterData): Modify return type of ParameterModifier method to be 
31090         Parameter.Modifier and not a string.
31091
31092         (ReflectionParameters, InternalParameters): Update accordingly.
31093
31094         * expression.cs (Argument::GetParameterModifier): Same here.
31095
31096         * support.cs (InternalParameters::ParameterType): Find a better way of determining
31097         if we are a ref/out parameter. Actually, the type shouldn't be holding the '&'
31098         symbol in it at all so maybe this is only for now.
31099
31100 2001-10-30  Ravi Pratap  <ravi@ximian.com>
31101
31102         * support.cs (InternalParameters): Constructor now takes an extra argument 
31103         which is the actual Parameters class.
31104
31105         (ParameterDesc): Update to provide info on ref/out modifiers.
31106
31107         * class.cs (everywhere): Update call to InternalParameters to pass in
31108         the second argument too.
31109
31110         * support.cs (ParameterData): Add ParameterModifier, which is a method 
31111         to return the modifier info [ref/out etc]
31112
31113         (InternalParameters, ReflectionParameters): Implement the above.
31114
31115         * expression.cs (Argument::ParameterModifier): Similar function to return
31116         info about the argument's modifiers.
31117
31118         (Invocation::OverloadResolve): Update to take into account matching modifiers 
31119         too.
31120
31121         * class.cs (Indexer::Define): Actually define a Parameter object and put it onto
31122         a new SetFormalParameters object which we pass to InternalParameters.
31123
31124 2001-10-30  Ravi Pratap  <ravi@ximian.com>
31125
31126         * expression.cs (NewArray): Merge into the ArrayCreation class.
31127
31128 2001-10-29  Ravi Pratap  <ravi@ximian.com>
31129
31130         * expression.cs (NewArray): Merge classes NewBuiltinArray and 
31131         NewUserdefinedArray into one as there wasn't much of a use in having
31132         two separate ones.
31133
31134         * expression.cs (Argument): Change field's name to ArgType from Type.
31135
31136         (Type): New readonly property which returns the proper type, taking into 
31137         account ref/out modifiers.
31138
31139         (everywhere): Adjust code accordingly for the above.
31140
31141         * codegen.cs (EmitContext.RefOrOutParameter): New field to determine
31142         whether we are emitting for a ref or out parameter.
31143
31144         * expression.cs (Argument::Emit): Use the above field to set the state.
31145
31146         (LocalVariableReference::Emit): Update to honour the flag and emit the
31147         right stuff.
31148
31149         * parameter.cs (Attributes): Set the correct flags for ref parameters.
31150
31151         * expression.cs (Argument::FullDesc): New function to provide a full desc.
31152
31153         * support.cs (ParameterData): Add method ParameterDesc to the interface.
31154
31155         (ReflectionParameters, InternalParameters): Implement the above method.
31156
31157         * expression.cs (Invocation::OverloadResolve): Use the new desc methods in
31158         reporting errors.
31159
31160         (Invocation::FullMethodDesc): Ditto. 
31161
31162 2001-10-29  Miguel de Icaza  <miguel@ximian.com>
31163
31164         * cs-parser.jay: Add extra production for the second form of array
31165         creation. 
31166
31167         * expression.cs (ArrayCreation): Update to reflect the above
31168         change. 
31169
31170         * Small changes to prepare for Array initialization.
31171
31172 2001-10-28  Miguel de Icaza  <miguel@ximian.com>
31173
31174         * typemanager.cs (ImplementsInterface): interface might be null;
31175         Deal with this problem;
31176
31177         Also, we do store negative hits on the cache (null values), so use
31178         this instead of calling t.GetInterfaces on the type everytime.
31179
31180 2001-10-28  Ravi Pratap  <ravi@ximian.com>
31181
31182         * typemanager.cs (IsBuiltinType): New method to help determine the same.
31183
31184         * expression.cs (New::DoResolve): Get rid of array creation code and instead
31185         split functionality out into different classes.
31186
31187         (New::FormArrayType): Move into NewBuiltinArray.
31188
31189         (Invocation::EmitArguments): Get rid of the MethodBase argument. Appears
31190         quite useless.
31191
31192         (NewBuiltinArray): New class to handle creation of built-in arrays.
31193
31194         (NewBuiltinArray::DoResolve): Implement guts of array creation. Also take into
31195         account creation of one-dimensional arrays.
31196
31197         (::Emit): Implement to use Newarr and Newobj opcodes accordingly.
31198
31199         (NewUserdefinedArray::DoResolve): Implement.
31200
31201         * cs-parser.jay (local_variable_type): Fix up to add the rank to the variable too.
31202
31203         * typemanager.cs (AddModule): Used to add a ModuleBuilder to the list of modules
31204         we maintain inside the TypeManager. This is necessary to perform lookups on the
31205         module builder.
31206
31207         (LookupType): Update to perform GetType on the module builders too.     
31208
31209         * driver.cs (Driver): Add the ModuleBuilder to the list maintained by the TypeManager.
31210
31211         * exprssion.cs (NewUserdefinedArray::Emit): Implement.
31212
31213 2001-10-23  Ravi Pratap  <ravi@ximian.com>
31214
31215         * expression.cs (New::DoResolve): Implement guts of array creation.
31216
31217         (New::FormLookupType): Rename to FormArrayType and modify ever so slightly.
31218
31219 2001-10-27  Miguel de Icaza  <miguel@ximian.com>
31220
31221         * expression.cs: Fix bug I introduced lsat night that broke
31222         Delegates. 
31223
31224         (Expression.Resolve): Report a 246 error (can not resolve name)
31225         if we find a SimpleName in the stream.
31226
31227         (Expression.ResolveLValue): Ditto.
31228
31229         (Expression.ResolveWithSimpleName): This function is a variant of
31230         ResolveName, this one allows SimpleNames to be returned without a
31231         warning.  The only consumer of SimpleNames is MemberAccess
31232
31233 2001-10-26  Miguel de Icaza  <miguel@ximian.com>
31234
31235         * expression.cs (Invocation::DoResolve): Catch SimpleNames that
31236         might arrive here.  I have my doubts that this is correct.
31237
31238         * statement.cs (Lock): Implement lock statement.
31239
31240         * cs-parser.jay: Small fixes to support `lock' and `using'
31241
31242         * cs-tokenizer.cs: Remove extra space
31243
31244         * driver.cs: New flag --checked, allows to turn on integer math
31245         checking. 
31246
31247         * typemanger.cs: Load methodinfos for Threading.Monitor.Enter and
31248         Threading.Monitor.Exit 
31249
31250 2001-10-23  Miguel de Icaza  <miguel@ximian.com>
31251
31252         * expression.cs (IndexerAccess::DoResolveLValue): Set the
31253         Expression Class to be IndexerAccess.
31254
31255         Notice that Indexer::DoResolve sets the eclass to Value.
31256
31257 2001-10-22  Miguel de Icaza  <miguel@ximian.com>
31258
31259         * class.cs (TypeContainer::Emit): Emit code for indexers.
31260
31261         * assign.cs (IAssignMethod): New interface implemented by Indexers
31262         and Properties for handling assignment.
31263
31264         (Assign::Emit): Simplify and reuse code. 
31265
31266         * expression.cs (IndexerAccess, PropertyExpr): Implement
31267         IAssignMethod, clean up old code. 
31268
31269 2001-10-22  Ravi Pratap  <ravi@ximian.com>
31270
31271         * typemanager.cs (ImplementsInterface): New method to determine if a type
31272         implements a given interface. Provides a nice cache too.
31273
31274         * expression.cs (ImplicitReferenceConversion): Update checks to use the above
31275         method.
31276
31277         (ConvertReferenceExplicit): Ditto.
31278
31279         * delegate.cs (Delegate::Populate): Update to define the parameters on the 
31280         various methods, with correct names etc.
31281
31282         * class.cs (Operator::OpType): New members Operator.UnaryPlus and 
31283         Operator.UnaryNegation.
31284
31285         * cs-parser.jay (operator_declarator): Be a little clever in the case where
31286         we have a unary plus or minus operator.
31287
31288         * expression.cs (Unary): Rename memebers of Operator enum to UnaryPlus and 
31289         UnaryMinus.
31290
31291         * everywhere : update accordingly.
31292
31293         * everywhere : Change Negate and BitComplement to LogicalNot and OnesComplement
31294         respectively.
31295
31296         * class.cs (Method::Define): For the case where we are implementing a method
31297         inherited from an interface, we need to set the MethodAttributes.Final flag too. 
31298         Also set MethodAttributes.NewSlot and MethodAttributes.HideBySig.
31299
31300 2001-10-21  Ravi Pratap  <ravi@ximian.com>
31301
31302         * interface.cs (FindMembers): Implement to work around S.R.E
31303         lameness.
31304
31305         * typemanager.cs (IsInterfaceType): Implement.
31306
31307         (FindMembers): Update to handle interface types too.
31308
31309         * expression.cs (ImplicitReferenceConversion): Re-write bits which
31310         use IsAssignableFrom as that is not correct - it doesn't work.
31311
31312         * delegate.cs (DelegateInvocation): Derive from ExpressionStatement
31313         and accordingly override EmitStatement.
31314
31315         * expression.cs (ConvertReferenceExplicit): Re-write similary, this time
31316         using the correct logic :-)
31317
31318 2001-10-19  Ravi Pratap  <ravi@ximian.com>
31319
31320         * ../errors/cs-11.cs : Add to demonstrate error -11 
31321
31322 2001-10-17  Miguel de Icaza  <miguel@ximian.com>
31323
31324         * assign.cs (Assign::Resolve): Resolve right hand side first, and
31325         then pass this as a hint to ResolveLValue.
31326
31327         * expression.cs (FieldExpr): Add Location information
31328
31329         (FieldExpr::LValueResolve): Report assignment to readonly
31330         variable. 
31331
31332         (Expression::ExprClassFromMemberInfo): Pass location information.
31333
31334         (Expression::ResolveLValue): Add new method that resolves an
31335         LValue. 
31336
31337         (Expression::DoResolveLValue): Default invocation calls
31338         DoResolve. 
31339
31340         (Indexers): New class used to keep track of indexers in a given
31341         Type. 
31342
31343         (IStackStore): Renamed from LValue, as it did not really describe
31344         what this did.  Also ResolveLValue is gone from this interface and
31345         now is part of Expression.
31346
31347         (ElementAccess): Depending on the element access type
31348
31349         * typemanager.cs: Add `indexer_name_type' as a Core type
31350         (System.Runtime.CompilerServices.IndexerNameAttribute)
31351
31352         * statement.cs (Goto): Take a location.
31353
31354 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31355
31356         * delegate.cs (Delegate::VerifyDelegate): New method to verify
31357         if two delegates are compatible.
31358
31359         (NewDelegate::DoResolve): Update to take care of the case when
31360         we instantiate a delegate from another delegate.
31361
31362         * typemanager.cs (FindMembers): Don't even try to look up members
31363         of Delegate types for now.
31364
31365 2001-10-18  Ravi Pratap  <ravi@ximian.com>
31366
31367         * delegate.cs (NewDelegate): New class to take care of delegate
31368         instantiation.
31369
31370         * expression.cs (New): Split the delegate related code out into 
31371         the NewDelegate class.
31372
31373         * delegate.cs (DelegateInvocation): New class to handle delegate 
31374         invocation.
31375
31376         * expression.cs (Invocation): Split out delegate related code into
31377         the DelegateInvocation class.
31378
31379 2001-10-17  Ravi Pratap  <ravi@ximian.com>
31380
31381         * expression.cs (New::DoResolve): Implement delegate creation fully
31382         and according to the spec.
31383
31384         (New::DoEmit): Update to handle delegates differently.
31385
31386         (Invocation::FullMethodDesc): Fix major stupid bug thanks to me
31387         because of which we were printing out arguments in reverse order !
31388
31389         * delegate.cs (VerifyMethod): Implement to check if the given method
31390         matches the delegate.
31391
31392         (FullDelegateDesc): Implement.
31393
31394         (VerifyApplicability): Implement.
31395
31396         * expression.cs (Invocation::DoResolve): Update to accordingly handle
31397         delegate invocations too.
31398
31399         (Invocation::Emit): Ditto.
31400
31401         * ../errors/cs1593.cs : Added.
31402
31403         * ../errors/cs1594.cs : Added.
31404
31405         * delegate.cs (InstanceExpression, TargetMethod): New properties.
31406
31407 2001-10-16  Ravi Pratap  <ravi@ximian.com>
31408
31409         * typemanager.cs (intptr_type): Core type for System.IntPtr
31410
31411         (InitCoreTypes): Update for the same.
31412
31413         (iasyncresult_type, asynccallback_type): Ditto.
31414
31415         * delegate.cs (Populate): Fix to use System.Intptr as it is indeed
31416         correct.
31417
31418         * typemanager.cs (AddDelegateType): Store a pointer to the Delegate class
31419         too.
31420
31421         * delegate.cs (ConstructorBuilder, InvokeBuilder, ...): New members to hold
31422         the builders for the 4 members of a delegate type :-)
31423
31424         (Populate): Define the BeginInvoke and EndInvoke methods on the delegate
31425         type.
31426
31427         * expression.cs (New::DoResolve): Implement guts for delegate creation.
31428
31429         * ../errors/errors.txt : Update for an error (-11) which only we catch :-)
31430
31431 2001-10-15  Miguel de Icaza  <miguel@ximian.com>
31432
31433         * statement.cs (Break::Emit): Implement.   
31434         (Continue::Emit): Implement.
31435
31436         (For::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31437         (While::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31438         (Do::Emit): Track old being/end loops;  Set Begin loop, ack end loop
31439         (Foreach::Emit): Track old being/end loops;  Set Begin loop, ack
31440         end loop
31441
31442         * codegen.cs (EmitContext::LoopEnd, EmitContext::LoopBegin): New
31443         properties that track the label for the current loop (begin of the
31444         loop and end of the loop).
31445
31446 2001-10-15  Ravi Pratap  <ravi@ximian.com>
31447
31448         * delegate.cs (Emit): Get rid of it as there doesn't seem to be any ostensible
31449         use of emitting anything at all.
31450
31451         * class.cs, rootcontext.cs : Get rid of calls to the same.
31452
31453         * delegate.cs (DefineDelegate): Make sure the class we define is also sealed.
31454
31455         (Populate): Define the constructor correctly and set the implementation
31456         attributes.
31457
31458         * typemanager.cs (delegate_types): New hashtable to hold delegates that
31459         have been defined.
31460
31461         (AddDelegateType): Implement.
31462
31463         (IsDelegateType): Implement helper method.
31464
31465         * delegate.cs (DefineDelegate): Use AddDelegateType instead of AddUserType.
31466
31467         * expression.cs (New::DoResolve): Check if we are trying to instantiate a delegate type
31468         and accordingly handle it.
31469
31470         * delegate.cs (Populate): Take TypeContainer argument.
31471         Implement bits to define the Invoke method. However, I still haven't figured out
31472         how to take care of the native int bit :-(
31473
31474         * cs-parser.jay (delegate_declaration): Fixed the bug that I had introduced :-) 
31475         Qualify the name of the delegate, not its return type !
31476
31477         * expression.cs (ImplicitReferenceConversion): Implement guts of implicit array
31478         conversion.
31479
31480         (StandardConversionExists): Checking for array types turns out to be recursive.
31481
31482         (ConvertReferenceExplicit): Implement array conversion.
31483
31484         (ExplicitReferenceConversionExists): New method to determine precisely that :-)
31485
31486 2001-10-12  Ravi Pratap  <ravi@ximian.com>
31487
31488         * cs-parser.jay (delegate_declaration): Store the fully qualified
31489         name as it is a type declaration.
31490
31491         * delegate.cs (ReturnType, Name): Rename members to these. Make them 
31492         readonly.
31493
31494         (DefineDelegate): Renamed from Define. Does the same thing essentially,
31495         as TypeContainer::DefineType.
31496
31497         (Populate): Method in which all the definition of the various methods (Invoke)
31498         etc is done.
31499
31500         (Emit): Emit any code, if necessary. I am not sure about this really, but let's
31501         see.
31502
31503         (CloseDelegate): Finally creates the delegate.
31504
31505         * class.cs (TypeContainer::DefineType): Update to define delegates.
31506         (Populate, Emit and CloseType): Do the same thing here too.
31507
31508         * rootcontext.cs (ResolveTree, PopulateTypes, EmitCode, CloseTypes): Include
31509         delegates in all these operations.
31510
31511 2001-10-14  Miguel de Icaza  <miguel@ximian.com>
31512
31513         * expression.cs: LocalTemporary: a new expression used to
31514         reference a temporary that has been created.
31515
31516         * assign.cs: Handle PropertyAccess back here, so that we can
31517         provide the proper semantic access to properties.
31518
31519         * expression.cs (Expression::ConvertReferenceExplicit): Implement
31520         a few more explicit conversions. 
31521
31522         * modifiers.cs: `NEW' modifier maps to HideBySig.
31523
31524         * expression.cs (PropertyExpr): Make this into an
31525         ExpressionStatement, and support the EmitStatement code path. 
31526
31527         Perform get/set error checking, clean up the interface.
31528
31529         * assign.cs: recognize PropertyExprs as targets, and if so, turn
31530         them into toplevel access objects.
31531
31532 2001-10-12  Miguel de Icaza  <miguel@ximian.com>
31533
31534         * expression.cs: PropertyExpr::PropertyExpr: use work around the
31535         SRE.
31536
31537         * typemanager.cs: Keep track here of our PropertyBuilders again to
31538         work around lameness in SRE.
31539
31540 2001-10-11  Miguel de Icaza  <miguel@ximian.com>
31541
31542         * expression.cs (LValue::LValueResolve): New method in the
31543         interface, used to perform a second resolution pass for LValues. 
31544
31545         (This::DoResolve): Catch the use of this in static methods.
31546
31547         (This::LValueResolve): Implement.
31548
31549         (This::Store): Remove warning, assigning to `this' in structures
31550         is 
31551
31552         (Invocation::Emit): Deal with invocation of
31553         methods on value types.  We need to pass the address to structure
31554         methods rather than the object itself.  (The equivalent code to
31555         emit "this" for structures leaves the entire structure on the
31556         stack instead of a pointer to it). 
31557
31558         (ParameterReference::DoResolve): Compute the real index for the
31559         argument based on whether the method takes or not a `this' pointer
31560         (ie, the method is static).
31561
31562         * codegen.cs (EmitContext::GetTemporaryStorage): Used to store
31563         value types returned from functions when we need to invoke a
31564         method on the sturcture.
31565
31566
31567 2001-10-11  Ravi Pratap  <ravi@ximian.com>
31568
31569         * class.cs (TypeContainer::DefineType): Method to actually do the business of
31570         defining the type in the Modulebuilder or Typebuilder. This is to take
31571         care of nested types which need to be defined on the TypeBuilder using
31572         DefineNestedMethod.
31573
31574         (TypeContainer::GetClassBases): Implement. Essentially the code from the 
31575         methods in RootContext, only ported to be part of TypeContainer.
31576
31577         (TypeContainer::GetInterfaceOrClass): Ditto.
31578
31579         (TypeContainer::LookupInterfaceOrClass, ::MakeFQN): Ditto.
31580
31581         * interface.cs (Interface::DefineInterface): New method. Does exactly
31582         what RootContext.CreateInterface did earlier, only it takes care of nested types 
31583         too.
31584
31585         (Interface::GetInterfaces): Move from RootContext here and port.
31586
31587         (Interface::GetInterfaceByName): Same here.
31588
31589         * rootcontext.cs (ResolveTree): Re-write.
31590
31591         (PopulateTypes): Re-write.
31592
31593         * class.cs (TypeContainer::Populate): Populate nested types too.
31594         (TypeContainer::Emit): Emit nested members too.
31595
31596         * typemanager.cs (AddUserType): Do not make use of the FullName property,
31597         instead just use the name argument passed in as it is already fully
31598         qualified.
31599
31600         (FindMembers): Check in the Builders to TypeContainer mapping instead of the name
31601         to TypeContainer mapping to see if a type is user-defined.
31602
31603         * class.cs (TypeContainer::CloseType): Implement. 
31604
31605         (TypeContainer::DefineDefaultConstructor): Use Basename, not Name while creating
31606         the default constructor.
31607
31608         (TypeContainer::Populate): Fix minor bug which led to creating default constructors
31609         twice.
31610
31611         (Constructor::IsDefault): Fix up logic to determine if it is the default constructor
31612
31613         * interface.cs (CloseType): Create the type here.
31614
31615         * rootcontext.cs (CloseTypes): Re-write to recursively close types by running through
31616         the hierarchy.
31617
31618         Remove all the methods which are now in TypeContainer.
31619
31620 2001-10-10  Ravi Pratap  <ravi@ximian.com>
31621
31622         * delegate.cs (Define): Re-write bits to define the delegate
31623         correctly.
31624
31625 2001-10-10  Miguel de Icaza  <miguel@ximian.com>
31626
31627         * makefile: Renamed the compiler to `mcs.exe' instead of compiler.exe
31628
31629         * expression.cs (ImplicitReferenceConversion): handle null as well
31630         as a source to convert to any reference type.
31631
31632         * statement.cs (Return): Perform any implicit conversions to
31633         expected return type.  
31634
31635         Validate use of return statement.  
31636
31637         * codegen.cs (EmitContext): Pass the expected return type here.
31638
31639         * class.cs (Method, Constructor, Property): Pass expected return
31640         type to EmitContext.
31641
31642 2001-10-09  Miguel de Icaza  <miguel@ximian.com>
31643
31644         * expression.cs: Make DoResolve take an EmitContext instead of a
31645         TypeContainer.
31646
31647         Replaced `l' and `location' for `loc', for consistency.
31648
31649         (Error, Warning): Remove unneeded Tc argument.
31650
31651         * assign.cs, literal.cs, constant.cs: Update to new calling
31652         convention. 
31653
31654         * codegen.cs: EmitContext now contains a flag indicating whether
31655         code is being generated in a static method or not.
31656
31657         * cs-parser.jay: DecomposeQI, new function that replaces the old
31658         QualifiedIdentifier.  Now we always decompose the assembled
31659         strings from qualified_identifier productions into a group of
31660         memberaccesses.
31661
31662 2001-10-08  Miguel de Icaza  <miguel@ximian.com>
31663
31664         * rootcontext.cs: Deal with field-less struct types correctly now
31665         by passing the size option to Define Type.
31666
31667         * class.cs: Removed hack that created one static field. 
31668
31669 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31670
31671         * statement.cs: Moved most of the code generation here. 
31672
31673 2001-10-09  Ravi Pratap  <ravi@ximian.com>
31674
31675         * expression.cs (New::DoResolve): Revert changes for array creation, doesn't
31676         seem very right.
31677
31678         (ElementAccess): Remove useless bits for now - keep checks as the spec
31679         says.
31680
31681 2001-10-08  Ravi Pratap  <ravi@ximian.com>
31682
31683         * expression.cs (ElementAccess::DoResolve): Remove my crap code
31684         and start performing checks according to the spec.
31685
31686 2001-10-07  Ravi Pratap  <ravi@ximian.com>
31687
31688         * cs-parser.jay (type_suffix*): Remove - they are redundant. Use
31689         rank_specifiers instead.
31690
31691         (rank_specifiers): Change the order in which the rank specifiers are stored
31692
31693         (local_variable_declaration): Use opt_rank_specifier instead of type_suffixes.
31694
31695         * expression.cs (ElementAccess): Implement the LValue interface too.
31696
31697 2001-10-06  Ravi Pratap  <ravi@ximian.com>
31698
31699         * expression.cs (ConvertExplicitStandard): Add. Same as ConvertExplicit
31700         except that user defined conversions are not included.
31701
31702         (UserDefinedConversion): Update to use the ConvertExplicitStandard to 
31703         perform the conversion of the return type, if necessary.
31704
31705         (New::DoResolve): Check whether we are creating an array or an object
31706         and accordingly do the needful.
31707
31708         (New::Emit): Same here.
31709
31710         (New::DoResolve): Implement guts of array creation.
31711
31712         (New::FormLookupType): Helper function.
31713
31714 2001-10-07  Miguel de Icaza  <miguel@ximian.com>
31715
31716         * codegen.cs: Removed most of the code generation here, and move the
31717         corresponding code generation bits to the statement classes. 
31718
31719         Added support for try/catch/finalize and throw.
31720
31721         * cs-parser.jay: Added support for try/catch/finalize.
31722
31723         * class.cs: Catch static methods having the flags override,
31724         virtual or abstract.
31725
31726         * expression.cs (UserCast): This user cast was not really doing
31727         what it was supposed to do.  Which is to be born in fully resolved
31728         state.  Parts of the resolution were being performed at Emit time! 
31729
31730         Fixed this code.
31731
31732 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31733
31734         * expression.cs: Implicity convert the result from UserCast.
31735
31736 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31737
31738         * expression.cs (Expression::FindMostEncompassingType): Fix bug which
31739         prevented it from working correctly. 
31740
31741         (ConvertExplicit): Make the first try, a call to ConvertImplicitStandard, not
31742         merely ConvertImplicit.
31743
31744 2001-10-05  Miguel de Icaza  <miguel@ximian.com>
31745
31746         * typemanager.cs: Make the LookupTypeContainer function static,
31747         and not per-instance.  
31748
31749         * class.cs: Make static FindMembers (the one that takes a Type
31750         argument). 
31751
31752         * codegen.cs: Add EmitForeach here.
31753
31754         * cs-parser.jay: Make foreach a toplevel object instead of the
31755         inline expansion, as we need to perform semantic analysis on it. 
31756
31757 2001-10-05  Ravi Pratap  <ravi@ximian.com>
31758
31759         * expression.cs (Expression::ImplicitUserConversion): Rename to
31760         UserDefinedConversion.
31761
31762         (Expression::UserDefinedConversion): Take an extra argument specifying 
31763         whether we look for explicit user conversions too.
31764
31765         (Expression::ImplicitUserConversion): Make it a call to UserDefinedConversion.
31766
31767         (UserDefinedConversion): Incorporate support for user defined explicit conversions.
31768
31769         (ExplicitUserConversion): Make it a call to UserDefinedConversion
31770         with the appropriate arguments.
31771
31772         * cs-parser.jay (cast_expression): Record location too.
31773
31774         * expression.cs (Cast): Record location info.
31775
31776         (Expression::ConvertExplicit): Take location argument.
31777
31778         (UserImplicitCast): Change name to UserCast. Take an extra constructor argument
31779         to determine if we are doing explicit conversions.
31780
31781         (UserCast::Emit): Update accordingly.
31782
31783         (Expression::ConvertExplicit): Report an error if everything fails.
31784
31785         * ../errors/cs0030.cs : Add.
31786
31787 2001-10-04  Miguel de Icaza  <miguel@ximian.com>
31788
31789         * modifiers.cs: If the ABSTRACT keyword is present, also set the
31790         virtual and newslot bits. 
31791
31792         * class.cs (TypeContainer::RegisterRequiredImplementations):
31793         Record methods we need.
31794
31795         (TypeContainer::MakeKey): Helper function to make keys for
31796         MethodBases, since the Methodbase key is useless.
31797
31798         (TypeContainer::Populate): Call RegisterRequiredImplementations
31799         before defining the methods.   
31800
31801         Create a mapping for method_builders_to_methods ahead of time
31802         instead of inside a tight loop.
31803
31804         (::RequireMethods):  Accept an object as the data to set into the
31805         hashtable so we can report interface vs abstract method mismatch.
31806
31807 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31808
31809         * report.cs: Make all of it static.
31810
31811         * rootcontext.cs: Drop object_type and value_type computations, as
31812         we have those in the TypeManager anyways.
31813
31814         Drop report instance variable too, now it is a global.
31815
31816         * driver.cs: Use try/catch on command line handling.
31817
31818         Add --probe option to debug the error reporting system with a test
31819         suite. 
31820
31821         * report.cs: Add support for exiting program when a probe
31822         condition is reached.
31823
31824 2001-10-03  Ravi Pratap  <ravi@ximian.com>
31825
31826         * expression.cs (Binary::DoNumericPromotions): Fix the case when
31827         we do a forcible conversion regardless of type, to check if 
31828         ForceConversion returns a null.
31829
31830         (Binary::error19): Use location to report error.
31831
31832         (Unary::error23): Use location here too.
31833
31834         * ../errors/cs0019.cs : Check in.
31835
31836         * ../errors/cs0023.cs : Check in.
31837
31838         * expression.cs (Expression.MemberLookup): Return null for a rather esoteric
31839         case of a non-null MethodInfo object with a length of 0 !
31840
31841         (Binary::ResolveOperator): Flag error if overload resolution fails to find
31842         an applicable member - according to the spec :-)
31843         Also fix logic to find members in base types.
31844
31845         (Unary::ResolveOperator): Same here.
31846
31847         (Unary::report23): Change name to error23 and make first argument a TypeContainer
31848         as I was getting thoroughly confused between this and error19 :-)
31849
31850         * expression.cs (Expression::ImplicitUserConversion): Re-write fully
31851         (::FindMostEncompassedType): Implement.
31852         (::FindMostEncompassingType): Implement.
31853         (::StandardConversionExists): Implement.
31854
31855         (UserImplicitCast): Re-vamp. We now need info about most specific
31856         source and target types so that we can do the necessary conversions.
31857
31858         (Invocation::MakeUnionSet): Completely re-write to make sure we form a proper
31859         mathematical union with no duplicates.
31860
31861 2001-10-03  Miguel de Icaza  <miguel@ximian.com>
31862
31863         * rootcontext.cs (RootContext::PopulateTypes): Populate containers
31864         in order from base classes to child classes, so that we can in
31865         child classes look up in our parent for method names and
31866         attributes (required for handling abstract, virtual, new, override
31867         constructs: we need to instrospect our base class, and if we dont
31868         populate the classes in order, the introspection might be
31869         incorrect.  For example, a method could query its parent before
31870         the parent has any methods and would determine that the parent has
31871         no abstract methods (while it could have had them)).
31872
31873         (RootContext::CreateType): Record the order in which we define the
31874         classes.
31875
31876 2001-10-02  Miguel de Icaza  <miguel@ximian.com>
31877
31878         * class.cs (TypeContainer::Populate): Also method definitions can
31879         fail now, keep track of this.
31880
31881         (TypeContainer::FindMembers): Implement support for
31882         DeclaredOnly/noDeclaredOnly flag.
31883
31884         (Constructor::Emit) Return the ConstructorBuilder.
31885
31886         (Method::Emit) Return the MethodBuilder. 
31887         Check for abstract or virtual methods to be public.
31888
31889         * rootcontext.cs (RootContext::CreateType): Register all the
31890         abstract methods required for the class to be complete and the
31891         interface methods that must be implemented. 
31892
31893         * cs-parser.jay: Report error 501 (method requires body if it is
31894         not marked abstract or extern).
31895
31896         * expression.cs (TypeOf::Emit): Implement.
31897
31898         * typemanager.cs: runtime_handle_type, new global type.
31899
31900         * class.cs (Property::Emit): Generate code for properties.
31901
31902 2001-10-02  Ravi Pratap  <ravi@ximian.com>
31903
31904         * expression.cs (Unary::ResolveOperator): Find operators on base type
31905         too - we now conform exactly to the spec.
31906
31907         (Binary::ResolveOperator): Same here.
31908
31909         * class.cs (Operator::Define): Fix minor quirk in the tests.
31910
31911         * ../errors/cs0215.cs : Added.
31912
31913         * ../errors/cs0556.cs : Added.
31914
31915         * ../errors/cs0555.cs : Added.
31916
31917 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31918
31919         * cs-tokenizer.cs: Reimplemented Location to be a struct with a
31920         single integer which is really efficient
31921
31922 2001-10-01  Ravi Pratap  <ravi@ximian.com>
31923
31924         *  expression.cs (Expression::ImplicitUserConversion): Use location
31925         even in the case when we are examining True operators.
31926  
31927         * class.cs (Operator::Define): Perform extensive checks to conform
31928         with the rules for operator overloading in the spec.
31929
31930         * expression.cs (Expression::ImplicitReferenceConversion): Implement
31931         some of the other conversions mentioned in the spec.
31932
31933         * typemanager.cs (array_type): New static member for the System.Array built-in
31934         type.
31935
31936         (cloneable_interface): For System.ICloneable interface.
31937
31938         * driver.cs (Driver::Driver): Initialize TypeManager's core types even before
31939         we start resolving the tree and populating types.
31940
31941         * ../errors/errors.txt : Update for error numbers -7, -8, -9, -10
31942  
31943 2001-10-01  Miguel de Icaza  <miguel@ximian.com>
31944
31945         * expression.cs (Expression::ExprClassFromMemberInfo,
31946         Expression::Literalize): Create literal expressions from
31947         FieldInfos which are literals.
31948
31949         (ConvertNumericExplicit, ImplicitNumericConversion): Fix a few
31950         type casts, because they were wrong.  The test suite in tests
31951         caught these ones.
31952
31953         (ImplicitNumericConversion): ushort to ulong requires a widening
31954         cast. 
31955
31956         Int32 constant to long requires widening cast as well.
31957
31958         * literal.cs (LongLiteral::EmitLong): Do not generate i4 constants
31959         for integers because the type on the stack is not i4.
31960
31961 2001-09-30  Miguel de Icaza  <miguel@ximian.com>
31962
31963         * expression.cs (report118): require location argument. 
31964
31965         * parameter.cs: Do not dereference potential null value.
31966
31967         * class.cs: Catch methods that lack the `new' keyword when
31968         overriding a name.  Report warnings when `new' is used without
31969         anything being there to override.
31970
31971         * modifiers.cs: Handle `NEW' as MethodAttributes.NewSlot.
31972
31973         * class.cs: Only add constructor to hashtable if it is non-null
31974         (as now constructors can fail on define).
31975
31976         (TypeManager, Class, Struct): Take location arguments.
31977
31978         Catch field instance initialization in structs as errors.
31979
31980         accepting_filter: a new filter for FindMembers that is static so
31981         that we dont create an instance per invocation.
31982
31983         (Constructor::Define): Catch errors where a struct constructor is
31984         parameterless 
31985
31986         * cs-parser.jay: Pass location information for various new
31987         constructs. 
31988
31989         * delegate.cs (Delegate): take a location argument.
31990
31991         * driver.cs: Do not call EmitCode if there were problesm in the
31992         Definition of the types, as many Builders wont be there. 
31993
31994         * decl.cs (Decl::Decl): Require a location argument.
31995
31996         * cs-tokenizer.cs: Handle properly hex constants that can not fit
31997         into integers, and find the most appropiate integer for it.
31998
31999         * literal.cs: Implement ULongLiteral.
32000
32001         * rootcontext.cs: Provide better information about the location of
32002         failure when CreateType fails.
32003
32004 2001-09-29  Miguel de Icaza  <miguel@ximian.com>
32005
32006         * rootcontext.cs (RootContext::PopulateTypes): Populates structs
32007         as well.
32008
32009         * expression.cs (Binary::CheckShiftArguments): Add missing type
32010         computation.
32011         (Binary::ResolveOperator): Add type to the logical and and logical
32012         or, Bitwise And/Or and Exclusive Or code paths, it was missing
32013         before.
32014
32015         (Binary::DoNumericPromotions): In the case where either argument
32016         is ulong (and most signed types combined with ulong cause an
32017         error) perform implicit integer constant conversions as well.
32018
32019 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
32020
32021         * expression.cs (UserImplicitCast): Method should always be
32022         non-null. 
32023         (Invocation::BetterConversion): Simplified test for IntLiteral.
32024
32025         (Expression::ImplicitNumericConversion): Split this routine out.
32026         Put the code that performs implicit constant integer conversions
32027         here. 
32028
32029         (Expression::Resolve): Become a wrapper around DoResolve so we can
32030         check eclass and type being set after resolve.
32031
32032         (Invocation::Badness): Remove this dead function
32033
32034         (Binary::ResolveOperator): Do not compute the expensive argumnets
32035         unless we have a union for it.
32036
32037         (Probe::Emit): Is needs to do an isinst and then
32038         compare against null.
32039
32040         (::CanConvert): Added Location argument.  If the Location argument
32041         is null (Location.Null), then we do not report errors.  This is
32042         used by the `probe' mechanism of the Explicit conversion.  We do
32043         not want to generate an error for something that the user
32044         explicitly requested to be casted.  But the pipeline for an
32045         explicit cast first tests for potential implicit casts.
32046
32047         So for now, if the Location is null, it means `Probe only' to
32048         avoid adding another argument.   Might have to revise this
32049         strategy later.
32050
32051         (ClassCast): New class used to type cast objects into arbitrary
32052         classes (used in Explicit Reference Conversions).
32053
32054         Implement `as' as well.
32055
32056         Reverted all the patches from Ravi below: they were broken:
32057
32058                 * The use of `level' as a mechanism to stop recursive
32059                   invocations is wrong.  That was there just to catch the
32060                   bug with a strack trace but not as a way of addressing
32061                   the problem.
32062
32063                   To fix the problem we have to *understand* what is going
32064                   on and the interactions and come up with a plan, not
32065                   just get things going.
32066
32067                 * The use of the type conversion cache that I proposed
32068                   last night had an open topic: How does this work across
32069                   protection domains.  A user defined conversion might not
32070                   be public in the location where we are applying the
32071                   conversion, a different conversion might be selected
32072                   (ie, private A->B (better) but public B->A (worse),
32073                   inside A, A->B applies, but outside it, B->A will
32074                   apply).
32075
32076                 * On top of that (ie, even if the above is solved),
32077                   conversions in a cache need to be abstract.  Ie, `To
32078                   convert from an Int to a Short use an OpcodeCast', not
32079                   `To convert from an Int to a Short use the OpcodeCast on
32080                   the variable 5' (which is what this patch was doing).
32081
32082 2001-09-28  Ravi Pratap  <ravi@ximian.com>
32083
32084         * expression.cs (Invocation::ConversionExists): Re-write to use
32085         the conversion cache
32086
32087         (Expression::ConvertImplicit): Automatic bailing out if level != 0. Also
32088         cache all conversions done, not just user-defined ones.
32089
32090         (Invocation::BetterConversion): The real culprit. Use ConversionExists
32091         to determine if a conversion exists instead of acutually trying to 
32092         perform the conversion. It's faster too.
32093
32094         (Expression::ConvertExplicit): Modify to use ConversionExists to check
32095         and only then attempt the implicit conversion.
32096
32097 2001-09-28  Ravi Pratap  <ravi@ximian.com>
32098
32099         * expression.cs (ConvertImplicit): Use a cache for conversions
32100         already found. Check level of recursion and bail out if necessary.
32101
32102 2001-09-28  Miguel de Icaza  <miguel@ximian.com>
32103
32104         * typemanager.cs (string_concat_string_string, string_concat_object_object):
32105         Export standard methods that we expect for string operations.
32106
32107         * statement.cs (Block::UsageWarning): Track usage of variables and
32108         report the errors for not used variables.
32109
32110         * expression.cs (Conditional::Resolve, ::Emit): Implement ?:
32111         operator. 
32112
32113 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32114
32115         * codegen.cs: remove unnneded code 
32116
32117         * expression.cs: Removed BuiltinTypeAccess class
32118
32119         Fix the order in which implicit conversions are
32120         done.  
32121
32122         The previous fixed dropped support for boxed conversions (adding a
32123         test to the test suite now)
32124
32125         (UserImplicitCast::CanConvert): Remove test for source being null,
32126         that code is broken.  We should not feed a null to begin with, if
32127         we do, then we should track the bug where the problem originates
32128         and not try to cover it up here.
32129
32130         Return a resolved expression of type UserImplicitCast on success
32131         rather than true/false.  Ravi: this is what I was talking about,
32132         the pattern is to use a static method as a "constructor" for
32133         objects. 
32134
32135         Also, do not create arguments until the very last minute,
32136         otherwise we always create the arguments even for lookups that
32137         will never be performed. 
32138
32139         (UserImplicitCast::Resolve): Eliminate, objects of type
32140         UserImplicitCast are born in a fully resolved state. 
32141
32142         * typemanager.cs (InitCoreTypes): Init also value_type
32143         (System.ValueType). 
32144
32145         * expression.cs (Cast::Resolve): First resolve the child expression.
32146
32147         (LValue): Add new method AddressOf to be used by
32148         the `&' operator.  
32149
32150         Change the argument of Store to take an EmitContext instead of an
32151         ILGenerator, because things like FieldExpr need to be able to call
32152         their children expression to generate the instance code. 
32153
32154         (Expression::Error, Expression::Warning): Sugar functions for
32155         reporting errors.
32156
32157         (Expression::MemberLookup): Accept a TypeContainer instead of a
32158         Report as the first argument.
32159
32160         (Expression::ResolvePrimary): Killed.  I still want to improve
32161         this as currently the code is just not right.
32162
32163         (Expression::ResolveMemberAccess): Simplify, but it is still
32164         wrong. 
32165
32166         (Unary::Resolve): Catch errors in AddressOf operators.
32167
32168         (LocalVariableReference::Emit, ::Store, ::AddressOf): typecast
32169         index to a byte for the short-version, or the compiler will choose
32170         the wrong Emit call, which generates the wrong data.
32171
32172         (ParameterReference::Emit, ::Store): same.
32173
32174         (FieldExpr::AddressOf): Implement.
32175
32176         * typemanager.cs: TypeManager: made public variable instead of
32177         property.
32178
32179         * driver.cs: document --fatal.
32180
32181         * report.cs (ErrorMessage, WarningMessage): new names for the old
32182         Error and Warning classes.
32183
32184         * cs-parser.jay (member_access): Turn built-in access to types
32185         into a normal simplename
32186
32187 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32188
32189         * expression.cs (Invocation::BetterConversion): Fix to cope
32190         with q being null, since this was introducing a bug.
32191
32192         * expression.cs (ConvertImplicit): Do built-in conversions first.
32193
32194 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32195
32196         * expression.cs (UserImplicitCast::Resolve): Fix bug.
32197
32198 2001-09-27  Ravi Pratap  <ravi@ximian.com>
32199
32200         * class.cs (TypeContainer::AddConstructor): Fix a stupid bug
32201         I had introduced long ago (what's new ?).
32202
32203         * expression.cs (UserImplicitCast::CanConvert): Static method to do 
32204         the work of all the checking. 
32205         (ConvertImplicit): Call CanConvert and only then create object if necessary.
32206         (UserImplicitCast::CanConvert, ::Resolve): Re-write.
32207
32208         (Unary::Operator): Rename Add and Subtract to Addition and Subtraction because
32209         that is the right way. 
32210
32211         (Invocation::MakeUnionSet): Convenience function to make unions of sets for 
32212         overloading resolution. Use everywhere instead of cutting and pasting code.
32213
32214         (Binary::ResolveOperator): Use MakeUnionSet.
32215
32216         (UserImplicitCast::CanConvert, ::Resolve): Update to take care of the case when 
32217         we have to convert to bool types. Not complete yet.
32218
32219 2001-09-27  Miguel de Icaza  <miguel@ximian.com>
32220
32221         * typemanager.cs (TypeManager::CSharpName): support ushort.
32222
32223         * expression.cs (Expression::TryImplicitIntConversion): Attempts
32224         to provide an expression that performsn an implicit constant int
32225         conversion (section 6.1.6).
32226         (Expression::ConvertImplicitRequired): Reworked to include
32227         implicit constant expression conversions.
32228
32229         (Expression::ConvertNumericExplicit): Finished.
32230
32231         (Invocation::Emit): If InstanceExpression is null, then it means
32232         that we perform a call on this.
32233
32234 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32235
32236         * expression.cs (Unary::Emit): Remove some dead code.
32237         (Probe): Implement Resolve and Emit for `is'.
32238         (Expression::ConvertImplicitRequired): Attempt to do constant
32239         expression conversions here.  Maybe should be moved to
32240         ConvertImplicit, but I am not sure.
32241         (Expression::ImplicitLongConstantConversionPossible,
32242         Expression::ImplicitIntConstantConversionPossible): New functions
32243         that tell whether is it possible to apply an implicit constant
32244         expression conversion.
32245
32246         (ConvertNumericExplicit): Started work on explicit numeric
32247         conversions.
32248
32249         * cs-parser.jay: Update operator constants.
32250
32251         * parameter.cs (Parameters::GetParameterInfo): Hook up VerifyArgs
32252         (Parameters::GetSignature): Hook up VerifyArgs here.
32253         (Parameters::VerifyArgs): Verifies that no two arguments have the
32254         same name. 
32255
32256         * class.cs (Operator): Update the operator names to reflect the
32257         ones that the spec expects (as we are just stringizing the
32258         operator names).
32259
32260         * expression.cs (Unary::ResolveOperator): Fix bug: Use
32261         MethodInfo's ReturnType instead of LookupMethodByBuilder as the
32262         previous usage did only work for our methods.
32263         (Expression::ConvertImplicit): Handle decimal implicit numeric
32264         conversions as well.
32265         (Expression::InternalTypeConstructor): Used to invoke constructors
32266         on internal types for default promotions.
32267
32268         (Unary::Emit): Implement special handling for the pre/post
32269         increment/decrement for overloaded operators, as they need to have
32270         the same semantics as the other operators.
32271
32272         (Binary::ResolveOperator): ditto.
32273         (Invocation::ConversionExists): ditto.
32274         (UserImplicitCast::Resolve): ditto.
32275
32276 2001-09-26  Ravi Pratap  <ravi@ximian.com>
32277
32278         * expression.cs (Unary::Emit and Binary::Emit): If we have an overloaded
32279         operator, return after emitting body. Regression tests pass again !
32280
32281         * expression.cs (ConvertImplicit): Take TypeContainer as first argument
32282         (Unary::ForceConversion, Binary::ForceConversion): Ditto.
32283         (Invocation::OverloadResolve): Ditto.
32284         (Invocation::BetterFunction, BetterConversion, ConversionExists): Ditto.
32285
32286         * everywhere : update calls to the above methods accordingly.
32287
32288 2001-09-26  Miguel de Icaza  <miguel@ximian.com>
32289
32290         * assign.cs (Assign): Make it inherit from ExpressionStatement.
32291
32292         * expression.cs (ExpressionStatement): New base class used for
32293         expressions that can appear in statements, so that we can provide
32294         an alternate path to generate expression that do not leave a value
32295         on the stack.
32296
32297         (Expression::Emit, and all the derivatives): We no longer return
32298         whether a value is left on the stack or not.  Every expression
32299         after being emitted leaves a single value on the stack.
32300
32301         * codegen.cs (EmitContext::EmitStatementExpression): Use the
32302         facilties of ExpressionStatement if possible.
32303
32304         * cs-parser.jay: Update statement_expression.
32305
32306 2001-09-25  Miguel de Icaza  <miguel@ximian.com>
32307
32308         * driver.cs: Change the wording of message
32309
32310 2001-09-25  Ravi Pratap  <ravi@ximian.com>
32311
32312         * expression.cs (Binary::ResolveOperator): Had forgottten to set 
32313         the type of the expression to the return type of the method if
32314         we have an overloaded operator match ! The regression tests pass again !
32315         (Unary::ResolveOperator): Ditto.
32316
32317         * expression.cs (Invocation::ConversionExists): Correct the member lookup
32318         to find "op_Implicit", not "implicit" ;-)
32319         (UserImplicitCast): New class to take care of user-defined implicit conversions.
32320         (ConvertImplicit, ForceConversion): Take TypeContainer argument
32321
32322         * everywhere : Correct calls to the above accordingly.
32323
32324         * expression.cs (UserImplicitCast::Resolve, ::Emit): Implement.
32325         (ConvertImplicit): Do user-defined conversion if it exists.
32326
32327 2001-09-24  Miguel de Icaza  <miguel@ximian.com>
32328
32329         * assign.cs: track location.
32330         (Resolve): Use implicit conversions on assignment.
32331
32332         * literal.cs: Oops.  Not good, Emit of short access values should
32333         pass (Bytes) or the wrong argument will be selected.
32334
32335         * expression.cs (Unary::Emit): Emit code for -expr.
32336
32337         (Unary::ResolveOperator): Handle `Substract' for non-constants
32338         (substract from zero from the non-constants).
32339         Deal with Doubles as well. 
32340
32341         (Expression::ConvertImplicitRequired): New routine that reports an
32342         error if no implicit conversion exists. 
32343
32344         (Invocation::OverloadResolve): Store the converted implicit
32345         expressions if we make them
32346
32347 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32348
32349         * class.cs (ConstructorInitializer): Take a Location argument.
32350         (ConstructorBaseInitializer): Same here.
32351         (ConstructorThisInitializer): Same here.
32352
32353         * cs-parser.jay : Update all calls accordingly.
32354
32355         * expression.cs (Unary, Binary, New): Take location argument.
32356         Update accordingly everywhere.
32357
32358         * cs-parser.jay : Update all calls to the above to take a location
32359         argument.
32360
32361         * class.cs : Ditto.
32362
32363 2001-09-24  Ravi Pratap  <ravi@ximian.com>
32364
32365         * expression.cs (Invocation::BetterFunction): Take TypeContainer argument
32366         (Invocation::BetterConversion): Same here
32367         (Invocation::ConversionExists): Ditto.
32368
32369         (Invocation::ConversionExists): Implement.
32370
32371 2001-09-22  Ravi Pratap  <ravi@ximian.com>
32372
32373         * expression.cs (OverloadResolve): Improve some more to catch errors 1502 and 1503
32374         Also take an additional TypeContainer argument.
32375
32376         * All over : Pass in TypeContainer as argument to OverloadResolve.
32377
32378         * typemanager.cs (CSharpName): Update to check for the string type and return
32379         that too.
32380
32381         * expression.cs (Invocation::FullMethodDesc): New static method to return a string fully describing
32382         a given method.
32383
32384 2001-09-21  Ravi Pratap  <ravi@ximian.com>
32385
32386         * expression.cs (Invocation::OverloadResolve): Re-write to conform more to the spec.
32387         (Invocation::BetterFunction): Implement.
32388         (Invocation::BetterConversion): Implement.
32389         (Invocation::ConversionExists): Skeleton, no implementation yet.
32390
32391         Okay, things work fine !
32392
32393 2001-09-21  Miguel de Icaza  <miguel@ximian.com>
32394
32395         * typemanager.cs: declare and load enum_type, delegate_type and
32396         void_type. 
32397
32398         * expression.cs (Expression::Emit): Now emit returns a value that
32399         tells whether a value is left on the stack or not.  This strategy
32400         might be reveted tomorrow with a mechanism that would address
32401         multiple assignments.
32402         (Expression::report118): Utility routine to report mismatches on
32403         the ExprClass.
32404
32405         (Unary::Report23): Report impossible type/operator combination
32406         utility function.
32407
32408         (Unary::IsIncrementableNumber): Whether the type can be
32409         incremented or decremented with add.
32410         (Unary::ResolveOperator): Also allow enumerations to be bitwise
32411         complemented. 
32412         (Unary::ResolveOperator): Implement ++, !, ~,
32413
32414         (Invocation::Emit): Deal with new Emit convetion.
32415
32416         * All Expression derivatives: Updated their Emit method to return
32417         whether they leave values on the stack or not.
32418
32419         * codegen.cs (CodeGen::EmitStatement): Pop values left on the
32420         stack for expressions that are statements. 
32421
32422 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32423
32424         * expression.cs (LValue): New interface.  Must be implemented by
32425         LValue objects.
32426         (LocalVariableReference, ParameterReference, FieldExpr): Implement
32427         LValue interface.
32428
32429         * assign.cs (Assign::Emit, Assign::Resolve): Use new LValue
32430         interface for generating code, simplifies the code.
32431
32432 2001-09-20  Ravi Pratap  <ravi@ximian.com>
32433
32434         * expression.cs (everywhere): Comment out return statements in ::Resolve
32435         methods to avoid the warnings.
32436
32437 2001-09-20  Miguel de Icaza  <miguel@ximian.com>
32438
32439         * driver.cs (parse): Report error 2001 if we can not open the
32440         source file.
32441
32442         * expression.cs (SimpleName::ResolveSimpleName): Error if we can
32443         not resolve it.
32444
32445         * cs-parser.jay (QualifierIdentifier): Pass location to SimpleName
32446         object. 
32447
32448         * statement.cs (Block::EmitMeta): Reuse the count across all the variables,
32449         otherwise nested blocks end up with the same index.
32450
32451         * codegen.cs (CodeGen::EmitTopBlock): Pass initial sequence
32452
32453         * expression.cs:  Instead of having FIXMEs in the Resolve
32454         functions, throw exceptions so it is obvious that we are facing a
32455         bug. 
32456
32457         * cs-parser.jay (invocation_expression): Pass Location information.
32458
32459         * codegen.cs (CodeGen::Save, CodeGen::CodeGen, CodeGen::Basename):
32460         Use a basename for those routines because .NET does not like paths
32461         on them. 
32462
32463         * class.cs (TypeContainer::AddMethod): Do not call DefineName if the name was
32464         already defined.
32465
32466 2001-09-19  Miguel de Icaza  <miguel@ximian.com>
32467
32468         * typemanager.cs (TypeManager::CoreLookupType): A function to make sure that we
32469         are loading the correct data types (throws an exception if not).
32470         (TypeManager::InitCoreTypes): Use CoreLookupType
32471
32472         * expression.cs (Unary::ResolveOperator): return the child
32473         expression for expressions which are just +expr.
32474         (Unary::ResolveOperator): Return negative literals for -LITERAL
32475         expressions (otherwise they are Unary {Literal}).
32476         (Invocation::Badness): Take into account `Implicit constant
32477         expression conversions'.
32478
32479         * literal.cs (LongLiteral): Implement long literal class.
32480         (IntLiteral): export the `Value' of the intliteral. 
32481
32482 2001-09-19  Ravi Pratap  <ravi@ximian.com>
32483
32484         * expression.cs (Binary::Emit): Finally get the emission right ! Woo!
32485
32486         * class.cs (Operator::Define): Change the methodname prefix to 'op_' 
32487         instead of 'Operator'
32488
32489         * expression.cs (Binary::ResolveOperator): Update accordingly.
32490         (Unary::Operator): Change names to 'Add' and 'Subtract' instead 'Plus'
32491         and 'Minus'
32492
32493         * cs-parser.jay (unary_expression): Update to use the new names.
32494
32495         * gen-treedump.cs (GetUnary): Same here.
32496
32497         * expression.cs (Unary::Resolve): Implement.
32498         (Binary::ResolveOperator): Re-write bits to quietly continue if no overloaded 
32499         operators are found instead of making noise ;-)
32500         (Unary::ResolveOperator): New method to do precisely the same thing which
32501         Binary::ResolveOperator does for Binary expressions.
32502         (Unary.method, .Arguments): Add.
32503         (Unary::OperName): Implement.   
32504         (Unary::ForceConversion): Copy and Paste !
32505
32506         * class.cs (Operator::Define): Fix a small bug for the case when we have 
32507         a unary operator.
32508
32509         * expression.cs (Unary::Emit): Implement. Need to find the right Opcodes
32510         for the inbuilt operators. Only overloading works for now ;-)
32511
32512 2001-09-18  Miguel de Icaza  <miguel@ximian.com>
32513
32514         * expression.cs (CheckedExpr::Resolve, CheckedExpr::Emit,
32515         UnCheckedExpr::Resolve, UnCheckedExpr::Emit): Implement.
32516
32517         * expression.cs (This::Emit): Implement. 
32518         (This::Resolve): Implement.
32519         (TypeOf:Resolve): Implement.
32520         (Expression::ResolveSimpleName): Add an implicit this to instance
32521         field references. 
32522         (MemberAccess::Resolve): Deal with Parameters and Fields. 
32523         Bind instance variable to Field expressions.
32524         (FieldExpr::Instance): New field used to track the expression that
32525         represents the object instance.
32526         (FieldExpr::Resolve): Track potential errors from MemberLookup not
32527         binding 
32528         (FieldExpr::Emit): Implement.
32529
32530         * codegen.cs (EmitIf, EmitStatement, EmitBlock): Propagate whether
32531         the last instruction contains a return opcode to avoid generating
32532         the last `ret' instruction (this generates correct code, and it is
32533         nice to pass the peverify output).
32534
32535         * class.cs (TypeContainer::EmitFieldInitializers): Implement field
32536         initializer for static and instance variables.
32537         (Constructor::Emit): Allow initializer to be null in the case of
32538         static constructors.  Only emit initializer for instance
32539         constructors. 
32540
32541         (TypeContainer::FindMembers): Return a null array if there are no
32542         matches.
32543
32544         Also fix the code for the MemberTypes.Method branch, as it was not
32545         scanning that for operators (or tried to access null variables before).
32546
32547         * assign.cs (Assign::Emit): Handle instance and static fields. 
32548
32549         * TODO: Updated.
32550
32551         * driver.cs: Stop compilation if there are parse errors.
32552
32553         * cs-parser.jay (constructor_declaration): Provide default base
32554         initializer for non-static constructors.
32555         (constructor_declarator): Do not provide a default base
32556         initializers if none was specified.
32557         Catch the fact that constructors should not have parameters.
32558
32559         * class.cs: Do not emit parent class initializers for static
32560         constructors, that should be flagged as an error.
32561
32562 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32563
32564         * class.cs (RegisterMethodBuilder): Remove : it's unnecessary.
32565         Move back code into TypeContainer::Populate.
32566
32567 2001-09-18  Ravi Pratap  <ravi@ximian.com>
32568
32569         * class.cs (TypeContainer::AddConstructor): Fix the check to
32570         compare against Name, not Basename. 
32571         (Operator::OpType): Change Plus and Minus to Add and Subtract.
32572
32573         * cs-parser.jay : Update accordingly.
32574
32575         * class.cs (TypeContainer::FindMembers): For the case where we are searching
32576         for methods, don't forget to look into the operators too.
32577         (RegisterMethodBuilder): Helper method to take care of this for
32578         methods, constructors and operators.
32579         (Operator::Define): Completely revamp.
32580         (Operator.OperatorMethod, MethodName): New fields.
32581         (TypeContainer::Populate): Move the registering of builders into
32582         RegisterMethodBuilder.
32583         (Operator::Emit): Re-write.
32584
32585         * expression.cs (Binary::Emit): Comment out code path to emit method
32586         invocation stuff for the case when we have a user defined operator. I am
32587         just not able to get it right !
32588
32589 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32590
32591         * expression.cs (Expression::OverloadResolve): Drop TypeContainer
32592         argument. 
32593
32594         (Expression::MemberLookup): Provide a version that allows to
32595         specify the MemberTypes and BindingFlags. 
32596
32597         * statement.cs (Block::GetVariableInfo): Forgot to recurse here,
32598         so it was not fetching variable information from outer blocks.
32599
32600         * modifiers.cs: (Modifiers::TypeAttr): Invert condition on
32601         Beforefieldinit as it was buggy.
32602
32603         * rootcontext.cs (::LookupInterfaceOrClass): Removed an Error -200
32604         that Ravi put here.  
32605
32606         * class.cs (Constructor::Emit): Only emit if block is not null.
32607         (TypeContainer::EmitDefaultConstructor): Removed routine, now we
32608         deal with this by semantically definining it as if the user had
32609         done it.
32610
32611         (TypeContainer::FindMembers): Removed ad-hoc hack to deal with
32612         constructors as we now "emit" them at a higher level.
32613
32614         (TypeContainer::DefineDefaultConstructor): Used to define the
32615         default constructors if none was provided.
32616
32617         (ConstructorInitializer): Add methods Resolve and Emit. 
32618
32619         * expression.cs: Cast to ConstructorInfo instead of MethodInfo
32620
32621 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32622
32623         * class.cs (TypeContainer::EmitDefaultConstructor): Register
32624         the default constructor builder with our hashtable for methodbuilders
32625         to methodcores.
32626
32627         * expression.cs (Invocation::OverloadResolve): Add a check for pd == null
32628         and argument_count is 0 in which case we have a match.
32629         (Binary::ResolveOperator): More null checking and miscellaneous coding
32630         style cleanup.
32631
32632 2001-09-17  Ravi Pratap  <ravi@ximian.com>
32633
32634         * rootcontext.cs (IsNameSpace): Compare against null.
32635
32636         * everywhere : Correct spelling to 'Greater' and to 'Subtract'
32637
32638         * class.cs (Operator::OpType): Change names to match the ones in Binary::Operator
32639         and Unary::Operator.
32640
32641         * cs-parser.jay (operator_declaration, CheckBinaryOperator, CheckUnaryOperator): Update
32642         accordingly.
32643
32644         * expression.cs (Binary::method): New member to hold the MethodBase for the case when
32645         we have overloaded operators.
32646         (Binary::ResolveOperator): Implement the part which does the operator overload
32647         resolution.
32648
32649         * class.cs (Operator::Emit): Implement.
32650         (TypeContainer::Emit): Emit the operators we have too.
32651
32652         * expression.cs (Binary::Emit): Update to emit the appropriate code for
32653         the case when we have a user-defined operator.
32654
32655 2001-09-17  Miguel de Icaza  <miguel@ximian.com>
32656
32657         * rootcontext.cs: Fix bug: tree.Namespaces might be null.
32658
32659 2001-09-16  Ravi Pratap  <ravi@ximian.com>
32660
32661         * class.cs (EmitStaticFieldInitializers, EmitFieldInitializers): Make public.
32662         (TypeContainer::EmitConstructor): Remove and move code into Contructor::Emit.
32663         (Constructor::Emit): Implement.
32664         (EmitStaticFieldInitializers, EmitFieldInitializers): Ensure we return immediately
32665         if we have no work to do. 
32666         (TypeContainer::Emit): Pass in TypeContainer as argument to the constructor's 
32667         Emit method.
32668
32669         * interface.cs (Interface::InterfaceAttr): Re-write to be more correct and complete.
32670         (Interface::IsTopLevel): Add. Same as TypeContainer::IsTopLevel.
32671
32672         * class.cs (TypeContainer::IsTopLevel): Modify to use parent.Parent instead
32673         of parent.parent.
32674
32675 2001-09-15  Ravi Pratap  <ravi@ximian.com>
32676
32677         * tree.cs (Tree::namespaces): New hashtable to keep track of namespaces
32678         in the source.
32679         (Tree::RecordNamespace): Method to do what the name says ;-)
32680         (Tree::Namespaces): Property to get at the namespaces hashtable.
32681
32682         * cs-parser.jay (namespace_declaration): Call RecordNamespace to 
32683         keep track.
32684
32685         * rootcontext.cs (IsNamespace): Fixed it :-)
32686
32687 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32688
32689         * class.cs (TypeContainer::FindMembers): Add support for
32690         constructors. 
32691         (MethodCore): New class that encapsulates both the shared aspects
32692         of a Constructor and a Method.  
32693         (Method, Constructor): Factored pieces into MethodCore.
32694
32695         * driver.cs: Added --fatal which makes errors throw exceptions.
32696         Load System assembly as well as part of the standard library.
32697
32698         * report.cs: Allow throwing exceptions on errors for debugging.
32699
32700         * modifiers.cs: Do not use `parent', instead use the real type
32701         container to evaluate permission settings.
32702
32703         * class.cs: Put Ravi's patch back in.  He is right, and we will
32704         have to cope with the
32705
32706 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32707
32708         * modifiers.cs (TypeAttr, MethodAttr, FieldAttr): Map protected internal to
32709         FamORAssem, not FamANDAssem.
32710
32711 2001-09-14  Miguel de Icaza  <miguel@ximian.com>
32712
32713         * driver.cs: Added --parse option that only parses its input files
32714         and terminates.
32715
32716         * class.cs: Reverted last change from Ravi to IsTopLevel.  That is
32717         incorrect.  IsTopLevel is not used to tell whether an object is
32718         root_types or not (that can be achieved by testing this ==
32719         root_types).  But to see if this is a top-level *class* (not
32720         necessarly our "toplevel" container). 
32721
32722 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32723
32724         * enum.cs (Enum::Define): Modify to call the Lookup method on the
32725         parent instead of a direct call to GetType.
32726
32727 2001-09-14  Ravi Pratap  <ravi@ximian.com>
32728
32729         * class.cs (TypeContainer::TypeAttr): Remove property code and move it into
32730         Modifiers.TypeAttr. This should just be a call to that method.
32731
32732         * modifiers.cs (TypeAttr): Re-write and take an extra argument, the TypeContainer
32733         object so that we can determine if we are top-level or not.
32734
32735         * delegate.cs (Delegate::Define): Update call to TypeAttr method to pass in the 
32736         TypeContainer too.
32737
32738         * enum.cs (Enum::Define): Ditto.
32739
32740         * modifiers.cs (FieldAttr): Re-write.
32741
32742         * class.cs (TypeContainer::IsTopLevel): Change accessibility to public.
32743         (TypeContainer::HaveStaticConstructor): New property to provide access
32744         to precisely that info.
32745
32746         * modifiers.cs (MethodAttr): Re-write.
32747         (EventAttr): Remove altogether as there seems to be no ostensible use for it.
32748
32749         * class.cs (TypeContainer::IsTopLevel): Re-write. root_types doesn't seem to be the parent
32750         of top-level types as claimed.
32751
32752 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32753
32754         * expression.cs (MemberLookup): Fruitless attempt to lookup
32755         constructors.  Maybe I need to emit default constructors?  That
32756         might be it (currently .NET emits this for me automatically).
32757         (Invocation::OverloadResolve): Cope with Arguments == null.
32758         (Invocation::EmitArguments): new function, shared by the new
32759         constructor and us.
32760         (Invocation::Emit): Handle static and instance methods.  Emit
32761         proper call instruction for virtual or non-virtual invocations.
32762         (New::Emit): Implement.
32763         (New::Resolve): Implement.
32764         (MemberAccess:Resolve): Implement.
32765         (MethodGroupExpr::InstanceExpression): used conforming to the spec
32766         to track instances.
32767         (FieldExpr::Resolve): Set type.
32768
32769         * support.cs: Handle empty arguments.
32770                 
32771         * cs-parser.jay (CompositeLookup, QualifierIdentifier,
32772         SimpleLookup): Auxiliary routines to help parse a qualifier
32773         identifier.  
32774
32775         Update qualifier_identifier rule.
32776
32777         * codegen.cs: Removed debugging messages.
32778
32779         * class.cs: Make this a global thing, this acts just as a "key" to
32780         objects that we might have around.
32781
32782         (Populate): Only initialize method_builders_to_methods once.
32783
32784         * expression.cs (PropertyExpr): Initialize type from the
32785         PropertyType. 
32786
32787         * codegen.cs (EmitContext::EmitBoolExpression): Use propper
32788         Resolve pattern.  Attempt to implicitly convert value to boolean.
32789         Emit code.
32790
32791         * expression.cs: Set the type for the int32/int32 argument case.
32792         (Binary::ResolveOperator): Set the return type to boolean for
32793         comparission operators
32794
32795         * typemanager.cs: Remove debugging print code.
32796
32797         (Invocation::Resolve): resolve type.
32798
32799         * class.cs: Allocate a MemberInfo of the correct size, as the code
32800         elsewhere depends on the test to reflect the correct contents.
32801
32802         (Method::) Keep track of parameters, due to System.Reflection holes
32803
32804         (TypeContainer::Populate): Keep track of MethodBuilders to Method
32805         mapping here.
32806
32807         (TypeContainer::FindMembers): Use ArrayList and then copy an array
32808         of the exact size and return that.
32809
32810         (Class::LookupMethodByBuilder): New function that maps
32811         MethodBuilders to its methods.  Required to locate the information
32812         on methods because System.Reflection bit us again.
32813
32814         * support.cs: New file, contains an interface ParameterData and
32815         two implementations: ReflectionParameters and InternalParameters
32816         used to access Parameter information.  We will need to grow this
32817         as required.
32818
32819         * expression.cs (Invocation::GetParameterData): implement a cache
32820         and a wrapper around the ParameterData creation for methods. 
32821         (Invocation::OverloadResolve): Use new code.
32822
32823 2001-09-13  Ravi Pratap  <ravi@ximian.com>
32824
32825         * class.cs (TypeContainer::EmitField): Remove and move into 
32826         (Field::Define): here and modify accordingly.
32827         (Field.FieldBuilder): New member.
32828         (TypeContainer::Populate): Update accordingly.
32829         (TypeContainer::FindMembers): Implement.
32830
32831 2001-09-13  Miguel de Icaza  <miguel@ximian.com>
32832
32833         * statement.cs: (VariableInfo::VariableType): New field to be
32834         initialized with the full type once it is resolved. 
32835
32836 2001-09-12  Miguel de Icaza  <miguel@ximian.com>
32837
32838         * parameter.cs (GetParameterInfo): Use a type cache to compute
32839         things only once, and to reuse this information
32840
32841         * expression.cs (LocalVariableReference::Emit): Implement.
32842         (OpcodeCast::Emit): fix.
32843
32844         (ParameterReference::Resolve): Implement.
32845         (ParameterReference::Emit): Implement.
32846
32847         * cs-parser.jay: Fix bug introduced by Ravi, variable initializers
32848         that are expressions need to stay as Expressions.
32849
32850         * typemanager.cs (CSharpName): Returns the C# name of a type if
32851         possible. 
32852
32853         * expression.cs (Expression::ConvertImplicit): New function that
32854         implements implicit type conversions.
32855
32856         (Expression::ImplicitReferenceConversion): Implements implicit
32857         reference conversions.
32858
32859         (EmptyCast): New type for transparent casts.
32860
32861         (OpcodeCast): New type for casts of types that are performed with
32862         a sequence of bytecodes.
32863
32864         (BoxedCast): New type used for casting value types into reference
32865         types.  Emits a box opcode.
32866
32867         (Binary::DoNumericPromotions): Implements numeric promotions of
32868         and computation of the Binary::Type.
32869
32870         (Binary::EmitBranchable): Optimization.
32871
32872         (Binary::Emit): Implement code emission for expressions.
32873
32874         * typemanager.cs (TypeManager): Added two new core types: sbyte
32875         and byte.
32876
32877 2001-09-12  Ravi Pratap  <ravi@ximian.com>
32878
32879         * class.cs (TypeContainer::FindMembers): Method which does exactly
32880         what Type.FindMembers does, only we don't have to use reflection. No
32881         implementation yet.
32882
32883         * typemanager.cs (typecontainers): New hashtable to hold the corresponding
32884         typecontainer objects as we need to get at them.
32885         (TypeManager::AddUserType): Overload to take an extra argument, the TypeContainer.
32886
32887         * rootcontext.cs : Correspondingly modify called to AddUserType to pass the
32888         typecontainer object.
32889
32890         * expression.cs (MemberLookup): Modify signature to take a RootContext object instead
32891         of just a Report object.
32892
32893 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32894
32895         * class.cs (Event::Define): Go back to using the prefixes "add_" and
32896         "remove_"
32897         (TypeContainer::Populate): Now define the delegates of the type too.
32898         (TypeContainer.Delegates): Property to access the list of delegates defined
32899         in the type.
32900
32901         * delegates.cs (Delegate::Define): Implement partially.
32902
32903         * modifiers.cs (TypeAttr): Handle more flags.
32904
32905 2001-09-11  Ravi Pratap  <ravi@ximian.com>
32906
32907         * class.cs (Indexer::Define): Fix for loop iteration condition to be just <
32908         and not <=
32909         (Operator::Define): Re-write logic to get types by using the LookupType method
32910         instead of blindly doing a Type.GetType ! How stupid can I get ;-) ?
32911         (Indexer::Define): Ditto.
32912         (Event::Define): Ditto.
32913         (Property::Define): Ditto.
32914
32915 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32916
32917         * class.cs (TypeContainer::Populate): Now define operators too. 
32918         (TypeContainer.Operators): New property to access the list of operators
32919         in a type.
32920         (Operator.OperatorMethodBuilder): New member to hold the method builder
32921         for the operator we are defining.
32922         (Operator::Define): Implement.
32923
32924 2001-09-10  Ravi Pratap  <ravi@ximian.com>
32925
32926         * class.cs (Event::Define): Make the prefixes of the accessor methods
32927         addOn_ and removeOn_ 
32928
32929         * genericparser.cs (GenericParser::error): Overloaded method to handle the case
32930         of the location being passed in too. Ideally, this should go later since all
32931         error reporting should be done through the Report object.
32932
32933         * class.cs (TypeContainer.Indexers): New property to access the list of indexers.
32934         (Populate): Iterate thru the indexers we have and define them too.
32935         (Indexer.GetMethodBuilder, .SetMethodBuilder): New members to hold the method builders
32936         for the get and set accessors.
32937         (Indexer::Define): Implement.
32938
32939 2001-09-09  Miguel de Icaza  <miguel@ximian.com>
32940
32941         * expression.cs (Binary::Resolve): Beginning of it.  I scratched
32942         my previous implementation, did not work.
32943
32944         * typemanager.cs: Add a couple of missing types (the longs).
32945
32946         * literal.cs: Use TypeManager.bool_type instead of getting it.
32947
32948         * expression.cs (EventExpr): New kind of expressions.
32949         (Expressio::ExprClassFromMemberInfo): finish
32950
32951 2001-09-08  Miguel de Icaza  <miguel@ximian.com>
32952
32953         * assign.cs: Emit stores to static fields differently.
32954
32955 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32956
32957         * Merge in changes and adjust code to tackle conflicts. Backed out my
32958         code in Assign::Resolve ;-) 
32959
32960 2001-09-08  Ravi Pratap  <ravi@ximian.com>
32961
32962         * cs-parser.jay (CheckAttributeTarget): Modify call to error to use
32963         instead Report.Error and also pass in the location.
32964         (CSharpParser::Lexer): New readonly property to return the reference
32965         to the Tokenizer object.
32966         (declare_local_variables): Use Report.Error with location instead of plain 
32967         old error.
32968         (CheckDef): Ditto.
32969
32970         * class.cs (Operator::CheckUnaryOperator): Move into cs-parser.jay.
32971         (Operator.CheckBinaryOperator): Ditto.
32972
32973         * cs-parser.jay (operator_declarator): Update accordingly.
32974
32975         * cs-parser.jay (CheckUnaryOperator): Modify to use Report.Error
32976         (CheckBinaryOperator): Same here.
32977
32978         * rootcontext.cs (LookupType): Add an extra lookup which simply does a lookup
32979         on the name without any prefixes of namespace names etc. This is because we
32980         already might have something already fully qualified like 
32981         'System.Console.WriteLine'
32982
32983         * assign.cs (Resolve): Begin implementation. Stuck ;-)
32984
32985 2001-09-07  Ravi Pratap  <ravi@ximian.com>
32986
32987         * cs-tokenizer.cs (location): Return a string which also contains
32988         the file name.
32989
32990         * expression.cs (ElementAccess): New class for expressions of the
32991         type 'element access.'
32992         (BaseAccess): New class for expressions of the type 'base access.'
32993         (CheckedExpr, UnCheckedExpr): New classes for Checked and Unchecked expressions
32994         respectively.
32995
32996         * cs-parser.jay (element_access): Implement action.
32997         (base_access): Implement actions.
32998         (checked_expression, unchecked_expression): Implement.
32999
33000         * cs-parser.jay (local_variable_type): Correct and implement.
33001         (type_suffixes, type_suffix_list, type_suffix): Implement actions.
33002
33003         * cs-tokenizer.cs (real_type_suffix): Comment out the extra getchar.
33004
33005         * cs-parser.jay (rank_specifiers): Remove space while concatenating the type's
33006         name and the specifiers.
33007
33008         * interface.cs (InterfaceAttr): New property to return the corresponding TypeAttributes
33009
33010         * rootcontext.cs (CreateInterface): Use the InterfaceAttr property instead of 
33011         making them all public ;-)
33012
33013         * cs-parser.jay (error): Remove entirely as we have an implementation in the base
33014         class anyways.
33015
33016 2001-09-07  Miguel de Icaza  <miguel@ximian.com>
33017
33018         * expression.cs (ExprClassFromMemberInfo): Return FieldExpr and
33019         PropertyExprs.
33020         (FieldExpr, PropertyExprs): New resolved expressions.
33021         (SimpleName::MemberStaticCheck): Perform static checks for access
33022         to non-static fields on static methods. Maybe this should be
33023         generalized for MemberAccesses. 
33024         (SimpleName::ResolveSimpleName): More work on simple name
33025         resolution. 
33026
33027         * cs-parser.jay (primary_expression/qualified_identifier): track
33028         the parameter index.
33029
33030         * codegen.cs (CodeGen::Save): Catch save exception, report error.
33031         (EmitContext::EmitBoolExpression): Chain to expression generation
33032         instead of temporary hack.
33033         (::EmitStatementExpression): Put generic expression code generation.
33034
33035         * assign.cs (Assign::Emit): Implement variable assignments to
33036         local variables, parameters and fields.
33037
33038 2001-09-06  Miguel de Icaza  <miguel@ximian.com>
33039
33040         * statement.cs (Block::GetVariableInfo): New method, returns the
33041         VariableInfo for a variable name in a block.
33042         (Block::GetVariableType): Implement in terms of GetVariableInfo
33043
33044         * literal.cs (IntLiteral::Emit, FloatLiteral::Emit,
33045         DoubleLiteral::Emit, CharLiteral::Emit, BoolLiteral::Emit): Implement
33046
33047 2001-09-06  Ravi Pratap  <ravi@ximian.com>
33048
33049         * cs-parser.jay (operator_declaration): Continue on my quest : update
33050         to take attributes argument.
33051         (event_declaration): Ditto.
33052         (enum_declaration): Ditto.
33053         (indexer_declaration): Ditto.
33054
33055         * class.cs (Operator::Operator): Update constructor accordingly.
33056         (Event::Event): Ditto.
33057
33058         * delegate.cs (Delegate::Delegate): Same here.
33059
33060         * enum.cs (Enum::Enum): Same here.
33061
33062 2001-09-05  Ravi Pratap  <ravi@ximian.com>
33063
33064         * cs-parser.jay (CheckAttributeTarget): Update to use the right error number.
33065
33066         * ../tests/cs0658.cs : New file to demonstrate error 0658.
33067
33068         * attribute.cs (Attributes): New class to encapsulate all attributes which were
33069         being passed around as an arraylist.
33070         (Attributes::AddAttribute): Method to add attribute sections.
33071
33072         * cs-parser.jay (opt_attributes): Modify actions to use the new Attributes class.
33073         (struct_declaration): Update accordingly.
33074         (constant_declaration): Update.
33075         (field_declaration): Update.
33076         (method_header): Update.
33077         (fixed_parameter): Update.
33078         (parameter_array): Ditto.
33079         (property_declaration): Ditto.
33080         (destructor_declaration): Ditto.
33081
33082         * class.cs (Struct::Struct): Update constructors accordingly.
33083         (Class::Class): Ditto.
33084         (Field::Field): Ditto.
33085         (Method::Method): Ditto.
33086         (Property::Property): Ditto.
33087         (TypeContainer::OptAttribute): update property's return type.
33088
33089         * interface.cs (Interface.opt_attributes): New member.
33090         (Interface::Interface): Update to take the extra Attributes argument.
33091
33092         * parameter.cs (Parameter::Parameter): Ditto.
33093
33094         * constant.cs (Constant::Constant): Ditto.
33095
33096         * interface.cs (InterfaceMemberBase): New OptAttributes field.
33097         (InterfaceMemberBase::InterfaceMemberBase): Update constructor to take 
33098         the attributes as a parameter.
33099         (InterfaceProperty): Update constructor call.
33100         (InterfaceEvent): Ditto.
33101         (InterfaceMethod): Ditto.
33102         (InterfaceIndexer): Ditto.
33103
33104         * cs-parser.jay (interface_indexer_declaration): Update call to constructor to 
33105         pass the attributes too.
33106         (interface_event_declaration): Ditto.
33107         (interface_property_declaration): Ditto.
33108         (interface_method_declaration): Ditto.
33109         (interface_declaration): Ditto.
33110
33111 2001-09-05  Miguel de Icaza  <miguel@ximian.com>
33112
33113         * class.cs (Method::Define): Track the "static Main" definition to
33114         create an entry point. 
33115
33116         * rootcontext.cs (RootContext::EntryPoint): MethodInfo that holds the
33117         EntryPoint if we find it. 
33118
33119         * codegen.cs (EmitContext::EmitInvocation): Emit invocations.
33120         (EmitContext::ig): Make this variable public.
33121
33122         * driver.cs: Make the default output file be the first file name
33123         with the .exe extension.  
33124
33125         Detect empty compilations
33126
33127         Handle various kinds of output targets.  Handle --target and
33128         rename -t to --dumper.
33129
33130         * expression.cs, literal.cs, assign.cs, constant.cs: All `Resolve'
33131         methods inherited from Expression return now an Expression.  This
33132         will is used during the tree rewriting as we resolve them during
33133         semantic analysis.
33134
33135         (Expression::MemberLookup): Implements the MemberLookup (7.3) from
33136         the spec.  Missing entirely is the information about
33137         accessability of elements of it.
33138
33139         (Expression::ExprClassFromMemberInfo): New constructor for
33140         Expressions that creates a fully initialized Expression based on
33141         a MemberInfo that is one of Eventinfo, FieldINfo, PropertyInfo or
33142         a Type.
33143
33144         (Invocation::Resolve): Begin implementing resolution of invocations.
33145
33146         * literal.cs (StringLiteral):  Implement Emit.
33147
33148 2001-09-05  Ravi Pratap  <ravi@ximian.com>
33149
33150         * cs-parser.jay (error): Add new modifier because we are hiding an inherited
33151         member.
33152
33153 2001-09-04  Ravi Pratap  <ravi@ximian.com>
33154
33155         * cs-parser.jay (attribute_arguments): Implement actions.
33156         (attribute): Fix bug in production. Implement action.
33157         (attribute_list): Implement.
33158         (attribute_target): Implement.
33159         (attribute_target_specifier, opt_target_specifier): Implement
33160         (CheckAttributeTarget): New method to check if the attribute target
33161         is valid.
33162         (attribute_section): Implement.
33163         (opt_attributes): Implement.
33164
33165         * attribute.cs : New file to handle attributes.
33166         (Attribute): Class to hold attribute info.
33167
33168         * cs-parser.jay (opt_attribute_target_specifier): Remove production
33169         (attribute_section): Modify production to use 2 different rules to 
33170         achieve the same thing. 1 s/r conflict down !
33171         Clean out commented, useless, non-reducing dimension_separator rules.
33172
33173         * class.cs (TypeContainer.attributes): New member to hold list
33174         of attributes for a type.
33175         (Struct::Struct): Modify to take one more argument, the attribute list.
33176         (Class::Class): Ditto.
33177         (Field::Field): Ditto.
33178         (Method::Method): Ditto.
33179         (Property::Property): Ditto.
33180
33181         * cs-parser.jay (struct_declaration): Update constructor call to
33182         pass in the attributes too.
33183         (class_declaration): Ditto.
33184         (constant_declaration): Ditto.
33185         (field_declaration): Ditto.
33186         (method_header): Ditto.
33187         (fixed_parameter): Ditto.
33188         (parameter_array): Ditto.
33189         (property_declaration): Ditto.
33190
33191         * constant.cs (Constant::Constant): Update constructor similarly.
33192         Use System.Collections.
33193
33194         * parameter.cs (Parameter::Parameter): Update as above.
33195
33196 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33197
33198         * class.cs (TypeContainer::AddDelegate): New method to add a delegate.
33199         (TypeContainer.delegates): New member to hold list of delegates.
33200
33201         * cs-parser.jay (delegate_declaration): Implement the action correctly 
33202         this time as I seem to be on crack ;-)
33203
33204 2001-09-02  Miguel de Icaza  <miguel@ximian.com>
33205
33206         * rootcontext.cs (RootContext::IsNamespace): new function, used to
33207         tell whether an identifier represents a namespace.
33208
33209         * expression.cs (NamespaceExpr): A namespace expression, used only
33210         temporarly during expression resolution.
33211         (Expression::ResolveSimpleName, ::ResolvePrimary, ::ResolveName):
33212         utility functions to resolve names on expressions.
33213
33214 2001-09-01  Miguel de Icaza  <miguel@ximian.com>
33215
33216         * codegen.cs: Add hook for StatementExpressions. 
33217
33218         * class.cs: Fix inverted test for static flag in methods.
33219
33220 2001-09-02  Ravi Pratap  <ravi@ximian.com>
33221
33222         * class.cs (Operator::CheckUnaryOperator): Correct error number used
33223         to make it coincide with MS' number.
33224         (Operator::CheckBinaryOperator): Ditto.
33225
33226         * ../errors/errors.txt : Remove error numbers added earlier.
33227
33228         * ../errors/cs1019.cs : Test case for error # 1019
33229
33230         * ../errros/cs1020.cs : Test case for error # 1020
33231
33232         * cs-parser.jay : Clean out commented cruft.
33233         (dimension_separators, dimension_separator): Comment out. Ostensibly not
33234         used anywhere - non-reducing rule.
33235         (namespace_declarations): Non-reducing rule - comment out.
33236
33237         * enum.cs (Enum::AddEnum): Rename to AddEnumMember as I was getting confused
33238         with TypeContainer::AddEnum.
33239
33240         * delegate.cs : New file for delegate handling classes.
33241         (Delegate): Class for declaring delegates.
33242
33243         * makefile : Update.
33244
33245         * cs-parser.jay (delegate_declaration): Implement.
33246
33247 2001-09-01  Ravi Pratap  <ravi@che.iitm.ac.in>
33248
33249         * class.cs (Event::Define): Implement.
33250         (Event.EventBuilder): New member.
33251
33252         * class.cs (TypeContainer::Populate): Update to define all enums and events
33253         we have.
33254         (Events): New property for the events arraylist we hold. Shouldn't we move to using
33255         readonly fields for all these cases ?
33256
33257 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33258
33259         * class.cs (Property): Revamp to use the convention of making fields readonly.
33260         Accordingly modify code elsewhere.
33261
33262         * class.cs : Apply patch from Mr. Mandar <go_mono@hotmail.com> for implementing
33263         the Define method of the Property class.
33264
33265         * class.cs : Clean up applied patch and update references to variables etc. Fix 
33266         trivial bug.
33267         (TypeContainer::Populate): Update to define all the properties we have. Also
33268         define all enumerations.
33269
33270         * enum.cs (Define): Implement.
33271
33272 2001-08-31  Ravi Pratap  <ravi@che.iitm.ac.in>
33273
33274         * cs-parser.jay (overloadable_operator): The semantic value is an
33275         enum of the Operator class.
33276         (operator_declarator): Implement actions.
33277         (operator_declaration): Implement.
33278
33279         * class.cs (Operator::CheckUnaryOperator): New static method to help in checking
33280         validity of definitions.
33281         (Operator::CheckBinaryOperator): Static method to check for binary operators
33282         (TypeContainer::AddOperator): New method to add an operator to a type.
33283
33284         * cs-parser.jay (indexer_declaration): Added line to actually call the
33285         AddIndexer method so it gets added ;-)
33286
33287         * ../errors/errors.txt : Update to include new error numbers. Are these numbers 
33288         already taken care of by the MS compiler ?  
33289
33290 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33291
33292         * class.cs (Operator): New class for operator declarations.
33293         (Operator::OpType): Enum for the various operators.
33294
33295 2001-08-29  Ravi Pratap  <ravi@che.iitm.ac.in>
33296
33297         * class.cs (TypeContainer::AddIndexer): Remove FIXME comment. We
33298         ostensibly handle this in semantic analysis.
33299
33300         * cs-parser.jay (general_catch_clause): Comment out
33301         (specific_catch_clauses, specific_catch_clause): Ditto.
33302         (opt_general_catch_clause, opt_specific_catch_clauses): Ditto
33303         (catch_args, opt_catch_args): New productions.
33304         (catch_clause): Rewrite to use the new productions above
33305         (catch_clauses): Modify accordingly.
33306         (opt_catch_clauses): New production to use in try_statement
33307         (try_statement): Revamp. Basically, we get rid of one unnecessary rule
33308         and re-write the code in the actions to extract the specific and
33309         general catch clauses by being a little smart ;-)
33310
33311         * ../tests/try.cs : Fix. It's not 'finalize' my friend, it's 'finally' !
33312         Hooray, try and catch statements parse fine !
33313
33314 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33315
33316         * statement.cs (Block::GetVariableType): Fix logic to extract the type
33317         string from the hashtable of variables.
33318
33319         * cs-parser.jay (event_accessor_declarations): Trivial fix. Man, how did
33320         I end up making that mistake ;-)
33321         (catch_clauses): Fixed gross error which made Key and Value of the 
33322         DictionaryEntry the same : $1 !!
33323
33324 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33325
33326         * cs-tokenizer.cs (initTokens): Add keywords 'add' and 'remove'
33327
33328         * cs-parser.jay (event_declaration): Correct to remove the semicolon
33329         when the add and remove accessors are specified. 
33330
33331 2001-08-28  Ravi Pratap  <ravi@che.iitm.ac.in>
33332
33333         * cs-parser.jay (IndexerDeclaration): New helper class to hold
33334         information about indexer_declarator.
33335         (indexer_declarator): Implement actions.
33336         (parsing_indexer): New local boolean used to keep track of whether
33337         we are parsing indexers or properties. This is necessary because 
33338         implicit_parameters come into picture even for the get accessor in the 
33339         case of an indexer.
33340         (get_accessor_declaration, set_accessor_declaration): Correspondingly modified.
33341
33342         * class.cs (Indexer): New class for indexer declarations.
33343         (TypeContainer::AddIndexer): New method to add an indexer to a type.
33344         (TypeContainer::indexers): New member to hold list of indexers for the
33345         type.
33346
33347 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33348
33349         * cs-parser.jay (add_accessor_declaration): Implement action.
33350         (remove_accessor_declaration): Implement action.
33351         (event_accessors_declaration): Implement
33352         (variable_declarators): swap statements for first rule - trivial.
33353
33354         * class.cs (Event): New class to hold information about event
33355         declarations.
33356         (TypeContainer::AddEvent): New method to add an event to a type
33357         (TypeContainer::events): New member to hold list of events.
33358
33359         * cs-parser.jay (event_declaration): Implement actions.
33360
33361 2001-08-27  Ravi Pratap  <ravi@che.iitm.ac.in>
33362
33363         * cs-parser.jay (dim_separators): Implement. Make it a string
33364         concatenating all the commas together, just as they appear.
33365         (opt_dim_separators): Modify accordingly
33366         (rank_specifiers): Update accordingly. Basically do the same
33367         thing - instead, collect the brackets here.
33368         (opt_rank_sepcifiers): Modify accordingly.
33369         (array_type): Modify to actually return the complete type string
33370         instead of ignoring the rank_specifiers.
33371         (expression_list): Implement to collect the expressions
33372         (variable_initializer): Implement. We make it a list of expressions
33373         essentially so that we can handle the array_initializer case neatly too.
33374         (variable_initializer_list): Implement.
33375         (array_initializer): Make it a list of variable_initializers
33376         (opt_array_initializer): Modify accordingly.
33377
33378         * expression.cs (New::NType): Add enumeration to help us
33379         keep track of whether we have an object/delegate creation
33380         or an array creation.
33381         (New:NewType, New::Rank, New::Indices, New::Initializers): New
33382         members to hold data about array creation.
33383         (New:New): Modify to update NewType
33384         (New:New): New Overloaded contructor for the array creation
33385         case.
33386
33387         * cs-parser.jay (array_creation_expression): Implement to call
33388         the overloaded New constructor.
33389
33390 2001-08-26  Ravi Pratap  <ravi@che.iitm.ac.in>
33391
33392         * class.cs (TypeContainer::Constructors): Return member
33393         constructors instead of returning null.
33394
33395 2001-08-26  Miguel de Icaza  <miguel@ximian.com>
33396
33397         * typemanager.cs (InitCoreTypes): Initialize the various core
33398         types after we have populated the type manager with the user
33399         defined types (this distinction will be important later while
33400         compiling corlib.dll)
33401
33402         * expression.cs, literal.cs, assign.cs, constant.cs: Started work
33403         on Expression Classification.  Now all expressions have a method
33404         `Resolve' and a method `Emit'.
33405
33406         * codegen.cs, cs-parser.jay: Fixed the bug that stopped code
33407         generation from working.     Also add some temporary debugging
33408         code. 
33409
33410 2001-08-24  Miguel de Icaza  <miguel@ximian.com>
33411
33412         * codegen.cs: Lots of code generation pieces.  This is only the
33413         beginning, will continue tomorrow with more touches of polish.  We
33414         handle the fundamentals of if, while, do, for, return.  Others are
33415         trickier and I need to start working on invocations soon.
33416
33417         * gen-treedump.cs: Bug fix, use s.Increment here instead of
33418         s.InitStatement. 
33419
33420         * codegen.cs (EmitContext): New struct, used during code
33421         emission to keep a context.   Most of the code generation will be
33422         here. 
33423
33424         * cs-parser.jay: Add embedded blocks to the list of statements of
33425         this block.  So code generation proceeds in a top down fashion.
33426
33427 2001-08-23  Miguel de Icaza  <miguel@ximian.com>
33428
33429         * statement.cs: Add support for multiple child blocks.
33430
33431 2001-08-22  Miguel de Icaza  <miguel@ximian.com>
33432
33433         * codegen.cs (EmitCode): New function, will emit the code for a
33434         Block of code given a TypeContainer and its ILGenerator. 
33435
33436         * statement.cs (Block): Standard public readonly optimization.
33437         (Block::Block constructors): Link children. 
33438         (Block::Child): Child Linker.
33439         (Block::EmitVariables): Emits IL variable declarations.
33440
33441         * class.cs: Drop support for MethodGroups here, delay until
33442         Semantic Analysis.
33443         (Method::): Applied the same simplification that I did before, and
33444         move from Properties to public readonly fields.
33445         (Method::ParameterTypes): Returns the parameter types for the
33446         function, and implements a cache that will be useful later when I
33447         do error checking and the semantic analysis on the methods is
33448         performed.
33449         (Constructor::GetCallingConvention): Renamed from CallingConvetion
33450         and made a method, optional argument tells whether this is a class
33451         or a structure to apply the `has-this' bit.
33452         (Method::GetCallingConvention): Implement, returns the calling
33453         convention. 
33454         (Method::Define): Defines the type, a second pass is performed
33455         later to populate the methods.
33456
33457         (Constructor::ParameterTypes): implement a cache similar to the
33458         one on Method::ParameterTypes, useful later when we do semantic
33459         analysis. 
33460
33461         (TypeContainer::EmitMethod):  New method.  Emits methods.
33462
33463         * expression.cs: Removed MethodGroup class from here.
33464
33465         * parameter.cs (Parameters::GetCallingConvention): new method.
33466
33467 2001-08-21  Miguel de Icaza  <miguel@ximian.com>
33468
33469         * class.cs (TypeContainer::Populate): Drop RootContext from the
33470         argument. 
33471
33472         (Constructor::CallingConvention): Returns the calling convention.
33473         (Constructor::ParameterTypes): Returns the constructor parameter
33474         types. 
33475
33476         (TypeContainer::AddConstructor): Keep track of default constructor
33477         and the default static constructor.
33478
33479         (Constructor::) Another class that starts using `public readonly'
33480         instead of properties. 
33481
33482         (Constructor::IsDefault): Whether this is a default constructor. 
33483
33484         (Field::) use readonly public fields instead of properties also.
33485
33486         (TypeContainer::TypeAttr, TypeContainer::AddConstructor): Keep
33487         track of static constructors;  If none is used, turn on
33488         BeforeFieldInit in the TypeAttributes. 
33489
33490         * cs-parser.jay (opt_argument_list): now the return can be null
33491         for the cases where there are no arguments. 
33492
33493         (constructor_declarator): If there is no implicit `base' or
33494         `this', then invoke the default parent constructor. 
33495
33496         * modifiers.cs (MethodAttr): New static function maps a set of
33497         modifiers flags into a MethodAttributes enum
33498         (FieldAttr): renamed from `Map'.  So now we have FieldAttr,
33499         MethodAttr, TypeAttr to represent the various mappings where the
33500         modifiers are used.
33501         (FieldAttr): Map also `readonly' to `FieldAttributes.InitOnly'  
33502
33503 2001-08-19  Miguel de Icaza  <miguel@ximian.com>
33504
33505         * parameter.cs (GetParameterInfo): Fix bug where there would be no
33506         method arguments.
33507
33508         * interface.cs (PopulateIndexer): Implemented the code generator
33509         for interface indexers.
33510
33511 2001-08-17  Miguel de Icaza  <miguel@ximian.com>
33512
33513         * interface.cs (InterfaceMemberBase): Now we track the new status
33514         here.  
33515
33516         (PopulateProperty): Implement property population.  Woohoo!  Got
33517         Methods and Properties going today. 
33518
33519         Removed all the properties for interfaces, and replaced them with
33520         `public readonly' fields. 
33521
33522 2001-08-16  Miguel de Icaza  <miguel@ximian.com>
33523
33524         * interface.cs (AddEvent, AddMethod, AddIndexer, AddProperty):
33525         initialize their hashtables/arraylists only when they are needed
33526         instead of doing this always.
33527
33528         * parameter.cs: Handle refs and out parameters.
33529
33530         * cs-parser.jay: Use an ArrayList to construct the arguments
33531         instead of the ParameterCollection, and then cast that to a
33532         Parameter[] array.
33533
33534         * parameter.cs: Drop the use of ParameterCollection and use
33535         instead arrays of Parameters.
33536
33537         (GetParameterInfo): Use the Type, not the Name when resolving
33538         types. 
33539
33540 2001-08-13  Miguel de Icaza  <miguel@ximian.com>
33541
33542         * parameter.cs: Eliminate the properties Name, Type and ModFlags,
33543         and instead use public readonly fields.
33544
33545         * class.cs: Put back walking code for type containers.
33546
33547 2001-08-11  Miguel de Icaza  <miguel@ximian.com>
33548
33549         * class.cs (MakeConstant): Code to define constants.
33550
33551         * rootcontext.cs (LookupType): New function.  Used to locate types 
33552
33553
33554 2001-08-08  Miguel de Icaza  <miguel@ximian.com>
33555
33556         * rootcontext.cs: OH MY!  My trick works!   It is amazing how nice
33557         this System.Reflection code is.  Kudos to Microsoft
33558
33559         * typemanager.cs: Implement a type cache and avoid loading all
33560         types at boot time.  Wrap in LookupType the internals.  This made
33561         the compiler so much faster.  Wow.  I rule!
33562
33563         * driver.cs: Make sure we always load mscorlib first (for
33564         debugging purposes, nothing really important).
33565
33566         * Renamespaced things that were on `CSC' to `CIR'.  Maybe I should
33567         have moved to `CSC' rather than `CIR'.  Oh man!  The confussion!  
33568
33569         * rootcontext.cs: Lookup types on their namespace;  Lookup types
33570         on namespaces that have been imported using the `using' keyword.
33571
33572         * class.cs (TypeContainer::TypeAttr): Virtualize.
33573         (Class::TypeAttr): Return attributes suitable for this bad boy.
33574         (Struct::TypeAttr): ditto.
33575         Handle nested classes.
33576         (TypeContainer::) Remove all the type visiting code, it is now
33577         replaced with the rootcontext.cs code
33578
33579         * rootcontext.cs (GetClassBases): Added support for structs. 
33580
33581 2001-08-06  Miguel de Icaza  <miguel@ximian.com>
33582
33583         * interface.cs, statement.cs, class.cs, parameter.cs,
33584         rootcontext.cs, gen-treedump.cs, enum.cs, cs-parse.jay:
33585         Drop use of TypeRefs, and use strings instead.
33586
33587 2001-08-04  Miguel de Icaza  <miguel@ximian.com>
33588
33589         * rootcontext.cs: 
33590
33591         * class.cs (Struct::Struct): set the SEALED flags after
33592         checking the modifiers.
33593         (TypeContainer::TypeAttr): new property, returns the
33594         TypeAttributes for a class.  
33595
33596         * cs-parser.jay (type_list): Oops, list production was creating a
33597         new list of base types.
33598
33599         * rootcontext.cs (StdLib): New property.
33600         (GetInterfaceTypeByName): returns an interface by type name, and
33601         encapsulates error handling here.
33602         (GetInterfaces): simplified.
33603         (ResolveTree): Encapsulated all the tree resolution here.
33604         (CreateClass, GetClassBases, GetInterfaceOrClass): Create class
33605         types. 
33606
33607         * driver.cs: Add support for --nostdlib, to avoid loading the
33608         default assemblies.
33609         (Main): Do not put tree resolution here. 
33610
33611         * rootcontext.cs: Beginning of the class resolution.
33612
33613 2001-08-03  Miguel de Icaza  <miguel@ximian.com>
33614
33615         * rootcontext.cs: Provide better error reporting. 
33616
33617         * cs-parser.jay (interface_base): set our $$ to be interfaces.
33618
33619         * rootcontext.cs (CreateInterface): Handle the case where there
33620         are no parent interfaces.
33621
33622         (CloseTypes): Routine to flush types at the end.
33623         (CreateInterface): Track types.
33624         (GetInterfaces): Returns an array of Types from the list of
33625         defined interfaces.
33626
33627         * typemanager.c (AddUserType): Mechanism to track user types (puts
33628         the type on the global type hash, and allows us to close it at the
33629         end). 
33630
33631 2001-08-02  Miguel de Icaza  <miguel@ximian.com>
33632
33633         * tree.cs: Removed RecordType, added RecordClass, RecordStruct and
33634         RecordInterface instead.
33635
33636         * cs-parser.jay: Updated to reflect changes above.
33637
33638         * decl.cs (Definition): Keep track of the TypeBuilder type that
33639         represents this type here.  Not sure we will use it in the long
33640         run, but wont hurt for now.
33641
33642         * driver.cs: Smaller changes to accomodate the new code.
33643
33644         Call ResolveInterfaceBases, Call ResolveClassBases, Save assembly
33645         when done. 
33646
33647         * rootcontext.cs (CreateInterface):  New method, used to create
33648         the System.TypeBuilder type for interfaces.
33649         (ResolveInterfaces): new entry point to resolve the interface
33650         hierarchy. 
33651         (CodeGen): Property, used to keep track of the code generator.
33652
33653 2001-07-26  Miguel de Icaza  <miguel@ximian.com>
33654
33655         * cs-parser.jay: Add a second production for delegate_declaration
33656         with `VOID'.
33657
33658         (enum_body): Put an opt_comma here instead of putting it on
33659         enum_body or enum_member_declarations so we can handle trailing
33660         commas on enumeration members.  Gets rid of a shift/reduce.
33661
33662         (type_list): Need a COMMA in the middle.
33663
33664         (indexer_declaration): Tell tokenizer to recognize get/set
33665
33666         * Remove old targets.
33667
33668         * Re-add the parser target.
33669
33670 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33671
33672         * cs-parser.jay: Add precendence rules for a number of operators
33673         ot reduce the number of shift/reduce conflicts in the grammar.
33674
33675 2001-07-17  Miguel de Icaza  <miguel@ximian.com>
33676
33677         * tree.cs: moved IGenerator interface and renamed it to ITreeDump
33678         and put it here.
33679
33680         Get rid of old crufty code.
33681
33682         * rootcontext.cs: Use this to keep track of the parsed
33683         representation and the defined types available to the program. 
33684
33685         * gen-treedump.cs: adjust for new convention.
33686
33687         * type.cs: Split out the type manager, and the assembly builder
33688         from here. 
33689
33690         * typemanager.cs: the type manager will live here now.
33691
33692         * cil-codegen.cs: And the code generator here. 
33693
33694 2001-07-14  Sean MacIsaac  <macisaac@ximian.com>
33695
33696         * makefile: Fixed up for easy making.
33697
33698 2001-07-13  Simon Cozens <simon@simon-cozens.org>
33699
33700         * cs-parser.jay (rank_specifier): Remove a conflict by reordering
33701         the 
33702
33703         (unary_expression): Expand pre_increment_expression and
33704         post_decrement_expression to reduce a shift/reduce.
33705
33706 2001-07-11  Simon Cozens
33707
33708         * cs-tokenizer.cs: Hex numbers should begin with a 0.
33709
33710         Improve allow_keyword_as_indent name.
33711
33712 2001-06-19  Miguel de Icaza  <miguel@ximian.com>
33713
33714         * Adjustments for Beta2. 
33715
33716 2001-06-13  Miguel de Icaza  <miguel@ximian.com>
33717
33718         * decl.cs: Added `Define' abstract method.
33719         (InTransit): new property, used to catch recursive definitions. 
33720
33721         * interface.cs: Implement `Define'. 
33722
33723         * modifiers.cs: Map Modifiers.constants to
33724         System.Reflection.TypeAttribute flags.
33725
33726         * class.cs: Keep track of types and user-defined types.
33727         (BuilderInit): New method for creating an assembly
33728         (ResolveType): New function to launch the resolution process, only
33729         used by interfaces for now.
33730
33731         * cs-parser.jay: Keep track of Classes, Structs and Interfaces
33732         that are inserted into the name space. 
33733
33734 2001-06-08  Miguel de Icaza  <miguel@ximian.com>
33735
33736         * ARGH.  I have screwed up my tree so many times due to the use of
33737         rsync rather than using CVS.  Going to fix this at once. 
33738
33739         * driver.cs: Objetify driver.  Load assemblies, use assemblies to
33740         load types.
33741
33742 2001-06-07  Miguel de Icaza  <miguel@ximian.com>
33743
33744         * Experiment successful: Use System.Type rather that our own
33745         version of Type.  
33746
33747 2001-05-25  Miguel de Icaza  <miguel@ximian.com>
33748
33749         * cs-parser.jay: Removed nsAliases from here.
33750
33751         Use new namespaces, handle `using XXX;' 
33752
33753         * namespace.cs: Reimplemented namespace handling, use a recursive
33754         definition of the class.  Now we can keep track of using clauses
33755         and catch invalid using clauses.
33756
33757 2001-05-24  Miguel de Icaza  <miguel@ximian.com>
33758
33759         * gen-treedump.cs: Adapted for all the renaming.
33760
33761         * expression.cs (Expression): this class now has a Type property
33762         which returns an expression Type.
33763
33764         (Probe::, New::, TypeOf::, SizeOf::, Constant::): renamed from
33765         `Type', as this has a different meaning now in the base
33766
33767 2001-05-22  Miguel de Icaza  <miguel@ximian.com>
33768
33769         * interface.cs, class.cs: Removed from all the sources the
33770         references to signature computation, as we can not do method
33771         signature computation during the parsing time, as we are not
33772         trying to solve at that point distinguishing:
33773
33774         class X {
33775                 void a (Blah x) {}
33776                 void a (NS.Blah x) {}
33777         }
33778
33779         Which depending on the context might be valid or not, as we do not
33780         know if Blah is the same thing as NS.Blah at that point.
33781
33782         * Redid everything so the code uses TypeRefs now instead of
33783         Types.  TypeRefs are just temporary type placeholders, that need
33784         to be resolved.  They initially have a pointer to a string and the
33785         current scope in which they are used.  This is used later by the
33786         compiler to resolve the reference to an actual Type. 
33787
33788         * DeclSpace is no longer a CIR.Type, and neither are
33789         TypeContainers (Class and Struct) nor Interfaces nor Enums.  They
33790         are all DeclSpaces, but no Types. 
33791
33792         * type.cs (TypeRefManager): This implements the TypeRef manager,
33793         which keeps track of all the types that need to be resolved after
33794         the parsing has finished. 
33795
33796 2001-05-13  Miguel de Icaza  <miguel@ximian.com>
33797
33798         * ARGH.  We are going to have to store `foreach' as a class rather
33799         than resolving it, as we need to verify error 1579 after name
33800         resolution.   *OR* we could keep a flag that says `This request to
33801         IEnumerator comes from a foreach statement' which we can then use
33802         to generate the error.
33803
33804 2001-05-10  Miguel de Icaza  <miguel@ximian.com>
33805
33806         * class.cs (TypeContainer.AddMethod): we now add methods to the
33807         MethodGroup instead of the method hashtable.  
33808
33809         * expression.cs: Add MethodGroup abstraction, which gets us one
33810         step closer to the specification in the way we handle method
33811         declarations.  
33812
33813         * cs-parser.jay (primary_expression): qualified_identifier now
33814         tried to match up an identifier to a local variable reference or
33815         to a parameter reference.
33816
33817         current_local_parameters is now a parser global variable that
33818         points to the current parameters for the block, used during name
33819         lookup.
33820
33821         (property_declaration): Now creates an implicit `value' argument to
33822         the set accessor.
33823
33824 2001-05-09  Miguel de Icaza  <miguel@ximian.com>
33825
33826         * parameter.cs: Do not use `param' arguments as part of the
33827         signature, per the spec.
33828
33829 2001-05-08  Miguel de Icaza  <miguel@ximian.com>
33830
33831         * decl.cs: Base class for classes, structs and interfaces.  This
33832         is the "Declaration Space" 
33833
33834         * cs-parser.jay: Use CheckDef for checking declaration errors
33835         instead of having one on each function.
33836
33837         * class.cs: Factor out some code for handling error handling in
33838         accordance to the "Declarations" section in the "Basic Concepts"
33839         chapter in the ECMA C# spec.
33840
33841         * interface.cs: Make all interface member classes derive from
33842         InterfaceMemberBase.
33843
33844 2001-05-07  Miguel de Icaza  <miguel@ximian.com>
33845
33846         * Many things: all interfaces are parsed and generated in
33847         gen-treedump.  Support for member variables, constructors,
33848         destructors, properties, constants is there.
33849
33850         Beginning of the IL backend, but very little done, just there for
33851         testing purposes. 
33852
33853 2001-04-29  Miguel de Icaza  <miguel@ximian.com>
33854
33855         * cs-parser.jay: Fix labeled statement.
33856
33857         * cs-tokenizer.cs (escape): Escape " and ' always.
33858         ref_line, ref_name: keep track of the line/filename as instructed
33859         by #line by the compiler.
33860         Parse #line.
33861
33862 2001-04-27  Miguel de Icaza  <miguel@ximian.com>
33863
33864         * System.CodeDOM/CodeBinaryOperatorExpression.cs: Rearrange enum
33865         to match the values in System.CodeDOM.
33866
33867         Divid renamed to Divide.
33868
33869         * System.CodeDOM/CodeForLoopStatement.cs: Always have valid
33870         statements. 
33871         (Statements.set): remove.
33872
33873         * System.CodeDOM/CodeCatchClause.cs: always have a valid
33874         statements. 
33875
33876         * System.CodeDOM/CodeIfStatement.cs: trueStatements and
33877         falseStatements always have valid values. 
33878
33879         * cs-parser.jay: Use System.CodeDOM now.
33880